Made by a human and an AI
The author
Asked whether this game could be smoother, allowed skipped frames for the best experience after the analysis showed that 30 frames per second are impossible, asked for calmer transitions between the two modes, spotted that the player's ship trembled by one pixel in the in-between pictures, asked to show how finely the objects move, not only how many frames there are, chose the name and checked every result.
Claude, the AI
Unpacked the 109 files of the cartridge, traced the main loop and measured every game step, wrote the adaptive LX code in 65C02 assembler into the few free bytes of the full RAM, the tests, the video and these texts.
Using AI is no secret here. The AI did the analysis and the code, the human set the course, judged every build and decided what to keep – and the game itself is still Zarlor Mercenary, programmed by Chuck Sommerville for Epyx in 1990.
How it works
Measure every step
LX measures how much work each game step needs. When the last steps left enough time, it switches to the 20-frame plan; when the work grows, it draws directly like the original.
Draw in between
In the 20-frame plan LX records what the step draws and draws it again in between, with every object moved to where it really is at that moment: four pictures for every three game steps, a new one every three screen refreshes.
Fall back calmly
When a scene gets busy, LX shows a steady 15 frames per second with a fixed frame clock and waits longer before trying the plan again, so it does not switch back and forth.
Why the game runs at 15 frames per second
A deliberate brake
After each picture the game waits until four screen refreshes have passed. Computing and drawing take only 2.6 to 3.6 refreshes, so there is spare time in every step.
Expensive sand
In the first level a good quarter of the drawing time goes into a floor of 56 tiny 1-bit tiles, almost half of which lie outside the picture.
Jitter
The finished picture appears at the next refresh, not at a fixed moment, so the intervals between pictures alternate between 3, 4 and 5 refreshes. In level 2 every seventh step takes longer than four.
What LX changes
- Two modes, chosen per game step: when the measured work of the last steps is small enough, LX records the sprite list of the step and replays it as a 20-frames-per-second plan: a 3-refresh cadence with a full picture every third step. When the work grows, it draws directly like the original.
- Exact in-between pictures: every object is shown where it really is at that moment. LX measures each object's movement over the whole game step – across all of its passes (the ship and the ground units with shadows are handled up to four times per step) – and takes the sideways movement of the camera into account, so the ship, the status display and the scrolling ground stay steady.
- What you see: fast objects – enemies, shots and items faster than 40 pixels per second – move up to 20 instead of 15 times per second, in steps about a fifth smaller. The ground scrolls one pixel per step and cannot move more often than 15 times a second in either version; in the 20-frame plan its one-pixel steps come after 3, 3 and 6 refreshes instead of an even 4.
- Calm transitions: after a fallback LX waits longer before trying the plan again (4 steps, doubling up to 32, shortened by every good step), so what remains are single hiccups, not constant switching.
- A fixed frame clock in the 15-frame mode: no more 3-4-5 jitter.
- The sand floor is patched to a cheaper sprite type with an identical picture.
- Logic and speed untouched: the game runs its original logic once per step; the tempo matches the original within ±0.1 % on all tested levels except the heavy parts of level 41 (+1.5 %, where the original slows down too).
Frames and movement in the video
| Level | Frames per second | Fast objects: moves per second | Step |
|---|---|---|---|
| Level 1 · Desert | 15.0 → 17.2 | 14.9 → 17.5 | 4.5 → 3.8 px |
| Crater | 14.9 → 17.6 | 14.9 → 18.0 | 5.2 → 4.3 px |
| Ice | 14.9 → 19.7 | 14.4 → 18.9 | 6.4 → 4.9 px |
| Swamp | 15.0 → 16.5 | 14.8 → 15.8 | 5.2 → 4.8 px |
| All four | 15.0 → 17.7 | 14.8 → 17.5 | 5.3 → 4.5 px |
Averages over the sections shown in the comparison video, original → LX, same inputs, identical game state on every step. Frames per second: pictures that differ from the one before (with slow scrolling two in-between pictures can look the same and count as one). Moves per second: how often each fast object (faster than 40 pixels per second) changes its position on screen, followed sprite by sprite from picture to picture; step: average distance per move.
Checked, not guessed
- Game state (RAM) compared with the original after every step over 1500 steps in 6 levels: identical.
- 5,813 of 5,813 main pictures pixel-identical to the original.
- Step duration within ±0.1 % of the original on all tested levels; level 41 heavy sections +1.5 %.
- The movement measured for the in-between pictures checked against the original on about 177,000 sprites in three levels.
- Every sprite of both versions logged in the emulator and followed from picture to picture for the moves per second; ground objects stay on the ground exactly as in the original.
In the video






Status
- Zarlor Mercenary LX is working and verified in the emulator; the RAM of the game is completely full, so there is no room for more.
- 30 frames per second were measured to be impossible: the sprite engine alone needs 1.2 to 1.7 refreshes for a full picture.
- Real hardware has not been tested yet.
- No download yet: LX is a modified cartridge image. A release needs a builder that makes it from your own copy of the game, like the ROM Builder of Viking Child LX.
Controls
| D-pad | Fly |
| B | Fire the laser – tap it, holding it down does not fire |
| A | Select in the menus, missiles in the game |
| Pause | Pause |
The controls of the original: LX adds no buttons. It is always on, because the game itself does not change.
Good to know
The comparison video shows level 1 normally and the crater, ice and swamp levels from the level select, each original on the left and LX on the right in emulator real time with the original sound, followed by a close-up of the ice level at a quarter speed in which every position of the fast objects is marked with a dot.
LX has no switch and no menu of its own: the game itself does not change, only how often it is drawn. The LX cartridge image is 256 KB instead of 128 KB because the game files are stored unpacked; that frees the memory the unpacker needed, and the levels load a little faster.
Project history
- Exact in-between positions: every object is shown where it really is, measured over the whole game step – the player's ship no longer trembles by one pixel.
- Comparison video with frames per second and moves per second of the fast objects, and a close-up at a quarter speed.
- Checked again: 6 levels × 1500 steps with identical game state, 5,813 of 5,813 main pictures identical.
- Analysis: cartridge unpacked, main loop traced, every game step measured; 30 frames per second shown to be impossible.
- First adaptive version: 20 frames per second when the scene allows, otherwise 15 – tested step by step against the original.
Feedback
Spotted something in the video, have a question about how it works, or an idea for LX? Let me know.