Tick
The fundamental unit of time in a ZZT world is the tick. During a tick, the player input is collected, after which all stats are processed in order based on their cycle.
Cycle handling
Whether a given stat is processed on a given tick is based on the following conditions: Cycle =/= 0 and TickCounter % Cycle == StatIndex % Cycle, where:
Cyclerefers to the stat's Cycle value,TickCounterrefers to the game's tick counter,StatIndexrefers to the stat's index.
The tick counter is set to a random value between 0 and 99 on start, and is incremented until it reaches the value 420, after which it is reset back to 1. This has a consequence of only divisors of 420 ticking at a consistent rate throughout gameplay: 1, 2, 3, 4, 5, 6, 7, 10, 12, 14, 15, 20, 21, 28, 30, 35, 42, 60, 70, 84, 105, 140, 210 and 420. Other cycle values, such as 8, 9, 11..., will eventually skip cycles. In addition, as all stats have a lower index than 420 (and all non-player stats have a higher index than 0), stats with a cycle rate higher than 420 will tick as if they had a cycle rate of 420.
Game speed
The rate at which the world ticks is dependent on the game speed.
While ZZT's code intended to support a variety of game speeds, in practice on most machines and all emulators the speed is always a multiple of PIT ticks (approximately 18.2 Hz), making most of the speed settings redundant.
The speed of sounds is not affected by the game speed.
| Game speed | Intended tick period | PIT ticks per game tick | Effective tick period | Default message display ticks | Effective message display duration |
|---|---|---|---|---|---|
| 0 (F) | 0 ms (Uncapped) | 0 | Uncapped | 200 | Short |
| 1 | 20 ms (50 Hz) | 1 | 55 ms (18.2 Hz) | 66 | 3.63 seconds |
| 2 | 40 ms (25 Hz) | 40 | 2.2 seconds | ||
| 3 | 60 ms (16.67 Hz) | 2 | 110 ms (9.1 Hz) | 28 | 3.08 seconds |
| 4 (default) | 80 ms (12.5 Hz) | 22 | 2.42 seconds | ||
| 5 | 100 ms (10 Hz) | 18 | 1.98 seconds | ||
| 6 | 120 ms (8.33 Hz) | 3 | 165 ms (6.06 Hz) | 15 | 2.47 seconds |
| 7 | 140 ms (7.14 Hz) | 13 | 2.14 seconds | ||
| 8 (S) | 160 ms (6.25 Hz) | 11 | 1.81 seconds |
Most ZZT worlds are designed for the default tick speed, which is equal to 4, or approximately 9.1 Hz.
When the player gets a game over, the game speed is set to 0 (uncapped).
Detecting game speed
Since the message timer's tick duration differs for each game speed value, one can create a board where the message timer occupies the final slot on the stat list, counting after how many ticks another stat can be created after displaying a message to infer the game speed. This technique was discovered by Dr. Dos in 2020[1].
References
- ↑ Dr. Dos. (2020). 2020 dot ZZT.