There is not a single screenshot here. There cannot be: the game re-uploads the screen to the VDP constantly, and two photographs of the same state three seconds apart already differ in 37 % of their pixels. What you see is drawn from the ZX Spectrum screen buffer the game keeps in RAM, dumped at a fixed instant and painted with the cartridge's own colour table. The control: two runs of the same state give a pixel-identical image, so whatever changes between «without» and «with» is the patch and nothing else.
The map keeps a “someone is here” bit per cell, and RECENTRA_EL_MAPA (0x7FAC) re-plants it unit by unit. But its loop stops at unit 0x78, exactly where the enemy side begins: the enemy never gets planted, and so never gets drawn. That was the game's fog of war, and it was an oversight shaped like a cp 078h.
One byte, at 0x7FD1: the limit becomes 0x00 and the loop walks all 256 slots. Measured: 136 enemy units get planted where zero did before.
A unit's sheet lists six qualities — Valioso, Hábil, Duro, Bravo, Enérgico, Decidido — as adverb plus adjective (“very brave”), never as a number, and you cannot compare two units with that.
A new 76-byte routine reads the six values from 0xC000-0xC300 and writes them at column 20 of each line. A three-byte trampoline at 0x708A hooks it, where the sheet used to do ld hl,0x5FBD right before painting itself. Checked against RAM: all six match.
This request was misread the first time. It is not the bearer's 0xC300 counter: it is a countdown of months. The game's clock decrements the operand at 0x8333 — which 0x7F4F sets to 255 at the start — prints “El Anillo corrompe al que lo usa.” and does jp z,DERROTA.
That number is literally how long you have left, and the game shows it nowhere. The ring in the sheet is character 0x5F at 0x7C46; the three columns to its left were free, and that is where it goes now.
With change 1 the enemy showed up… wearing your helmet, which is half a fix: you see them, but you cannot tell which is which. And the drawing routine only ever looks at the map byte, so it cannot know which side a unit belongs to.
Bit 5 of that byte was free — measured: zero uses across all 13,260 cells — and that is now the side marker. The icon is four new tiles at the tail of the 0x9E00 table, indices 111 to 114, which were all zeros.
Animagic's conversion left the map's place names in English and three race names truncated: “Brujo”, “Elf” and “Hum”. 19 strings change — ten place names, one unit name, the three races, the sheet's four adjectives and its last line — and not a byte moves.
A place record carries the size of its signpost (width<<4 | rows) and the text fills it whole, so the new name has to measure the same: Cavada + Grande fills the 7×2 sign that held Michel /Delving. The race names live in two lists walked by counting terminator bits, so inside a list a string may change length: “Brujo ” → “Mago” frees two bytes and appears twice in each list — exactly the four that “Elf” → “Elfo” and “Hum” → “Hombre” need.
The map's 128 8×8 drawings are exported to a PNG at full size, repainted in any image editor, and 122 of the 128 go back into the cassette as patch entries, with orig and nuevo the same length, exactly like the hand-written ones. The six that do not change are the ones whose drawing comes back identical to what was there.
And that is where it turned out that the canvas was lying: each tile carries a Spectrum attribute glued behind it, but the game never sends it to the screen — ATRIBUTO_A_COLOR (0x049F) translates it first, with two eight-colour MSX tables. So only twelve of the MSX's fifteen colours can be painted, and the tool says so and substitutes if an impossible one gets in. The text now sits on the same khaki as the frames: one byte at 0x763F.
The two-by-two artwork table at 0x77B5 has six all-zero entries and they look like plenty of room. They are not: PINTA_LO_DE_ENCIMA picks its entry with an and 00fh over the terrain's low nibble, so indices 0x00-0x0F already have an owner.
Putting the Eye in slot 0x03 gave it to all 447 cells of terrain type 3. The way out was not to use an index at all: point HL at our own list of four codes and enter the stamper past its arithmetic, at 0x7720.
Each pair is the same game, the same cell and the same instant, loading the original cassette and the patched one. The “now” ones are dumped from today's patched cassette, with the map already repainted.