Possible new glitch in Tile World Lynx -- Clone Desynchronization
#11
Quote:It seems to only affect monsters that both A) are cloned by other monsters and B) run into water or bombs. It affects all monster types except teeth and blobs. Also, it takes a few seconds for desync to occur, and it only occurs if monsters are cloned very frequently. The stage shown in the video had 4 continuously running cloners at the time I pointed out the desynchronization. In a test stage with just two continuously running cloners, desync occcurred only when the red buttons were placed close to the machines (2 spaces away as opposed to 6 spaces away) to make cloning occur more frequently.
I'm adapting one of my levels for lynx compatibility which, about halfway in the level, has two continuously cloning monsters. The setup is similar to the one in your video, with the buttons 6 spaces away from the machines, but the two machines are at opposite ends of the map (though their paths come next to each other before running into bombs and water). Chip has to step on the buttons for them to clone. While playtesting, I got them alternating, ~3 spaces offset from each other (the only other monsters at this point are two teeth which can be killed by bombs), but near the end of the level they were essentially side-by-side. I never waited to see if they separated again, but it did force me to modify the level a little.

It doesn't seem like it has to be as frequent as you state. Their paths were very long, though, so maybe that made up for it?

EDIT: lol your "B" turned into an emoticon
CCMiniLP, my CCLP1 submissions. Outdated, not recommended.
CCSignificantlyLargerLP, my CCLP4 submissions. More current than my main set.
Consistent Inconsistency (ongoing), my main CC1 custom set. (discussion)
RyanJ1.dat (ongoing), my main CC2 custom set. (discussion)
Mystery Project (unfinished) (previews)

YouTube | Twitch | Steam
Reply
#12
I think this may help:

[Image: desynch1a.png]

[Image: desynch1b.png]

(Chip is on the button for the lower machine; the left ball (moving north) is on the button for the right machine.)

So far, these two seem to be the only cases. The question now is how TW decides whether the clone starts at quarter- or half-tile (though I think it should start at clone tile).

I also imagine this is related:

[Image: lynxtrick2.png]

(There are multiple clone buttons controlled by blobs.)
CCMiniLP, my CCLP1 submissions. Outdated, not recommended.
CCSignificantlyLargerLP, my CCLP4 submissions. More current than my main set.
Consistent Inconsistency (ongoing), my main CC1 custom set. (discussion)
RyanJ1.dat (ongoing), my main CC2 custom set. (discussion)
Mystery Project (unfinished) (previews)

YouTube | Twitch | Steam
Reply
#13
Ok, so I had an idea about this glitch but it's just a theory. To know if there's anything to it, some tests would be in order but I'm just lazy to try since currently it doesn't have an effect on anything major. I'll share the theory and you guys can judge if there's anything to it Slight smile

It's possible that TW might have a similar problem with cloning in lynx as what causes slide delay. When a cloned monster appears on the monster list, maybe some other monster is forgotten about for 1/20th of a second and falls out of synch? This pause is so small that it would be hard to notice in casual play, and would mainly be amplified in a stream of cloned monsters. The direction the monsters are moving might also have a small effect, since the "monster order" in lynx is just the reverse reading order of the monsters on the map at a given time (as I understand it), so the direction they move will effect in which order they are processed. In any case the explanation looks really complex.

Random8's Salsa example of a fireball hitting another one from the same source thus might be because the first fireball stalled for a brief moment, or because one of the blobs was out of synch with the other after having bumped into a wall a different amount of times (or something). As for the "lynx test" level with the pink ball appearing on two different frames while the other is exactly in the same place, these two pictures might in fact show how the first ball stalls. So the pictures could theoretically be from the same instance but taken 1/20th of a second apart, though undoubtedly Random8 actually captured them on separate attempts. More tests with this type of a setup (and it's mirror image) and maybe more monsters to compare the movement with might prove insightful.

As for the other stuff, you can get a ball not to clone in Four Plex with the right timing (and it's used again elsewhere like 3#149), and I don't know what to say about Temporary Man's level without actually seeing it.

-Miika
Reply
#14
A similar thing happens with traps, though they seem to be more consistent.

When I look at my .tws for "lynx test", the second ball seems to "jump" ahead of the first. I only see one frame where the first ball is exactly on the red button.

Green and blue buttons, on the other hand, don't seem to have their effect until 1/4 of a move later.

(green button)

[Image: lynxtest2a.png]

[Image: lynxtest2b.png]

(blue button)

[Image: lynxtest3a.png]

[Image: lynxtest3b.png]
CCMiniLP, my CCLP1 submissions. Outdated, not recommended.
CCSignificantlyLargerLP, my CCLP4 submissions. More current than my main set.
Consistent Inconsistency (ongoing), my main CC1 custom set. (discussion)
RyanJ1.dat (ongoing), my main CC2 custom set. (discussion)
Mystery Project (unfinished) (previews)

YouTube | Twitch | Steam
Reply
#15
I found the following under the heading "2004 Oct 04: version 1.2.0" in the file "Changelog" that came with my Tile World 2 download:


Quote:* Altered animations to run for either 11 or 12 frames, depending on the
parity of their initial frame, as discovered by ccexplore. (This finally
killed the nine-lived clone-boosting bug in ICEHOUSE!) Also modified the
point during the frame when animations get removed.

I didn't see any more references to Lynx animations later (date) in the file. Could this have anything to do with clone desynchronization?
CCMiniLP, my CCLP1 submissions. Outdated, not recommended.
CCSignificantlyLargerLP, my CCLP4 submissions. More current than my main set.
Consistent Inconsistency (ongoing), my main CC1 custom set. (discussion)
RyanJ1.dat (ongoing), my main CC2 custom set. (discussion)
Mystery Project (unfinished) (previews)

YouTube | Twitch | Steam
Reply
#16
I wonder if there is some kind of event schreduler that's not working right and delaying certain actions with one frame to many from time to time.

How much is known about timing of the Lynx version of Chips Challenge? We have a good overview of the major rule differences, but do we really know how the Lynx version of the engine handles everything? We can always observe and estimate how the Lynx version should play, but then glitches like these can occur.
Reply
#17
I have been doing some investigation of this. In brief, I have concluded that this is not a bug in Tile World. The same kind of "clone desynchronization" occurs on the Atari Lynx, and so far I have been able to observe, it works the same as in Tile World's Lynx mode. The question remains: why does this happen? (I haven't seen this discussed anywhere else.) Here is a description of how things are handled internally in Tile World. (The Lynx ROM presumably does something similar; in any case, the final result is the same.)

1. When a level is (re)started, the game builds a list of all creatures in reading order. Creatures include monsters, blocks, and Chip himself. The list includes monsters and blocks on top of clone machines. After this, if Chip is not in the first position in the list, he trades places with whatever creature is there. So, Chip is always at the beginning of the list.

2. Each game tick, the creature list is traversed in reverse order. Monsters move 1/4 of a tile when not slipping. Creatures on clone machines or traps don't move. (Things are actually more complicated. There are three traversals per tick. In the first, the creatures decide which direction they move when not in midmove. In the second, the move is executed. The third traversal handles teleporters. All this may be ignored for this discussion.)

3. When a creature dies, the creature's entry in the creature list is not removed. Instead, the entry is marked "hidden", which just means there is no longer any creature occupying that location in the list. Hidden entries in the list are ignored during the traversal.

4. When a clone button is pressed, the corresponding creature moves 1/4 of a tile off the clone machine, and a new creature is created on top of the clone machine. If there is a "hidden" slot available in the creature list, the new creature will be inserted into the earliest such slot. If there aren't any hidden slots, the creature is appended to the end of the list.

So, when a creature is cloned, if the creature appears later in the list than the creature that pushed the clone button, it initially moves 1/4th of a tile. However, if it appears earlier in the list, it moves 1/4 tile again on the same tick for a total of 1/2 tile.

Here is an example. It's pedantic Lynx compatible, so if you want you can try it on the Lynx ROM (using Brian Raiter's "c4" utility to patch the level in).

[Image: fireballasynch.png]

If you run the level in Lynx mode, every so often the fireball cloned on the second row will be slightly ahead of that on the first row. Here's how it works in detail:

The creature list initially looks like this:

C B1 F1 B2 F2

Here, C is Chip, B1 and F1 are the ball and fireball on the first row, and likewise for B2 and F2. At first, the fireballs don't move because they're on clone machines. Then the balls press the clone buttons. B2 acts first, causing F2 to leave the clone machine and another fireball to appear in its place. Likewise, F1 also leaves its clone machine on the same tick. Now there are more creatures on the list. We denote the extra creatures by an ellipsis since they're irrelevant to the example.

C B1 F1 B2 F2 ...

As time passes, more cloning occurs, without anything interesting happening until the fireballs start drowning. When the splash animations for F1 and F2 finish, their entries on the list are now marked hidden:

C B1 H B2 H ...

Later, the balls will push the clone buttons. First, when B2 presses its button, the fireball on row 2 is released from the clone machine. A new fireball, F2a is created on top of the machine, and placed into the first available slot:

C B1 F2a B2 H ...

Next, it is F2a's turn, but nothing happens since it's on a clone machine. Then B1 presses its button, and we have a new fireball F1a on the clone machine in the first row:

C B1 F2a B2 F1a ...

The next time the clone buttons are pressed is when it happens. F1a, on a clone machine, does nothing. Then B2 presses the clone button, causing F2a to leave the clone machine. F2a is processed next. Since it isn't on a clone machine anymore, it moves again. Then B1 releases F1a from the clone machine, but F1a was already processed, so it doesn't move again this tick. So F2a is now 1/4 tile ahead of F1a.

After this, the fireballs cloned will be synchronized until F1a and F2a drown, making their slots in the creature list available again, and the cycle repeats.

Some final notes:

The extra 1/4 move can occur even if there is only one clone machine in the level. It all depends on the relative order of the creature that presses the button and the creature on the clone machine in the creature list. For instance, it never happens when Chip presses a clone button since he is at the beginning of the list.

random 8 above mentioned that something similar happens with traps. The explanation is more or less the same. If the creature on the trap appears earlier in the list than the creature that pushed the button, it gets another move.

We should probably call this quirk/glitch something. Perhaps "release boosting"? Maybe someone will come up with another name.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)