The translate object moves a graphical element to a new position. But it's not moving from 0,0 but relative from the last drawn object. This is evaluated not from top to bottom or left to right but from the order in which the programmer developed the program, so from what they wrote first. Deleted objects created during development are not garbage collected, so this is relative to objects that are no longer visible in code. Two identical looking source codes will come up with different results.
#pd is fucking amazing
Ok, so this was (obviously) my mistake. Each gemhead object has a state containing data used to draw stuff. If you attach a translate to it, that changes a translation matrix stored IN THE GEMHEAD and NOT passed out the bottom of the translate object. Every translate object changes the matrix, cumulatively. The way to keep translations separate is to have separate gemheads for each individually translated object.
Hometown is adapted from Mastodon, a decentralized social network with no ads, no corporate surveillance, and ethical design.