Gli interruttori che nessuno doveva toccare
Otto programmi del roster, setacciati uno per uno
In tre di queste macchine, tenendo premuti tre comandi insieme, le vite smettono di calare. Non è un difetto e non l’ha inventato un giocatore: è codice scritto in fabbrica, e si trova cercando la sua forma.
Dei trucchi dei giochi laserdisc si racconta molto, e quasi niente porta un indirizzo. Questa pagina non li raccoglie: li cerca nei byte, con un setaccio che riconosce il meccanismo. Quello che il setaccio non trova, qui non c’è.
Il meccanismo è sempre lo stesso, e sta tutto in un pugno di istruzioni. Questa è la versione di Dragon’s Lair, e le altre le riconoscerete:
16AD 21 0A A0 LD HL,A00A la cella del flag 16B0 CB 86 RES 0,(HL) di regola spento 16B2 3A 08 C0 LD A,(C008) il byte GREZZO dei comandi 16B5 FE EA CP EA ★ la combinazione, in un confronto 16B7 20 0B JR NZ,16C4 non è lei: si prosegue 16B9 CB C6 SET 0,(HL) ★ è lei: alza il flag
E da un’altra parte, dove le vite calano, quel flag fa saltare il decremento. Tutto qui.
Non c’è niente da imparare a memoria e niente da fare a tempo. La ROM guarda il byte grezzo dei comandi e lo confronta con un numero: o in quell’istante stai tenendo premuti esattamente quei tre, o non succede nulla. È per questo che un trucco così si può cercare: ha una forma, e la forma si setaccia.
Otto programmi, cercati uno per uno con lo stesso filtro — senza sapere in anticipo né la cella, né la porta, né la combinazione: quelle si leggono da quello che si trova.
| gioco | macchina | il setaccio trova | che cosa tenere premuto |
|---|---|---|---|
| Dragon's Lair | F2 · Cinematronics 1983 | ★ sì — CP EA a 16B5 | su + sinistra + il pulsante |
| Dragon's Lair | europea · Atari | niente | — |
| Dragon's Lair | italiana · Sidam | niente | — |
| Space Ace | A3 · Cinematronics 1984 | ★ sì — CP E9 a 175C | giù + sinistra + il pulsante |
| Space Ace | europea · Atari | ★ sì — CP E9 a 25A9 | giù + sinistra + il pulsante |
| Super Don Quix-ote | Universal 1984 | niente | — |
| Super Don Quix-ote | a scene corte | niente | — |
| Esh's Aurunmilla | Funai 1984 | niente | — |
⇒ Tre su otto. E sono tutti e tre lo stesso trucco: stessa forma, stessa cella del flag, stessa idea. Chi ha scritto Dragon’s Lair e chi ha scritto Space Ace, in quella stanza, facevano la stessa cosa.
Il byte dei comandi è attivo-basso: un comando premuto mette il suo bit a zero. Quindi la combinazione si legge dal numero del confronto, guardando dove sono gli zeri.
| bit | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| comando | su | giù | sinistra | destra | il pulsante |
| EA | 0 | 1 | 0 | 1 | 0 |
| E9 | 1 | 0 | 0 | 1 | 0 |
Dragon’s Lair: SU + SINISTRA + SPADA
Space Ace: GIÙ + SINISTRA + FUOCO
⇒ Fra le due cambia un gesto solo: su invece di giù. Stessa sinistra, stesso pulsante. Nel byte sono due i bit che si muovono, perché uno si alza e l’altro si abbassa.
⚠ Il cancello: il flag viene guardato solo se il nodo di scena corrente lo permette (BIT 6,(IY+00)). Non è un interruttore valido in ogni istante della partita.
Le due macchine europee sono state fatte in modo diverso, e il trucco lo dice meglio di qualunque confronto: Space Ace se lo è portato dietro, Dragon’s Lair l’ha perso per strada.
SPACE ACE A3 (USA) SPACE ACE EUROPEO 1754 LD HL,A00A 25A1 LD HL,A20A la RAM, traslata 1757 RES 0,(HL) 25A4 RES 0,(HL) 1759 LD A,(C008) 25A6 LD A,(E080) altra porta 175C CP E9 25A9 CP E9 ★ la stessa 175E JR NZ,176B 25AB JR NZ,25B8 1760 SET 0,(HL) 25AD SET 0,(HL) 1764 EXX 25B1 EXX 1765 BIT 6,(IY+00) 25B2 BIT 6,(IY+00) 1769 JR NZ,1754 25B6 JR NZ,25A1
La stessa routine, istruzione per istruzione. Cambiano due cose e nessuna delle due è una scelta: l’indirizzo in memoria e la porta da cui si leggono i comandi — cioè il ferro, non il gioco.
Nella ROM europea di Dragon’s Lair il confronto CP EA non compare nemmeno una volta. Né in quella italiana della Sidam.
⇒ È la stessa cosa che si legge dappertutto, quando si confrontano le due traversate: Space Ace in Europa è la macchina americana con la RAM spostata; Dragon’s Lair è un altro programma. Qui lo dice un trucco, che nessuno aveva motivo di riscrivere.
Il trucco sta nel programma. Le leve stanno sulla scheda, e l’operatore le poteva girare col cabinato aperto: sono documentate nei manuali, non sono un segreto. Ma una di quelle posizioni, nei manuali, di solito non si nomina.
| macchina | le vite, sulle leve |
|---|---|
| Dragon’s Lair F2 | tre / cinque / infinite |
| Space Ace A3 | tre / cinque / infinite |
| Dragon’s Lair europeo | tre / cinque |
| Space Ace europeo | tre / cinque |
| Super Don Quix-ote | tre / quattro / cinque / due, e una leva a parte per le infinite |
⇒ Le schede americane hanno un interruttore che quelle europee non hanno. E in Super Don Quix-ote quella leva non conta le vite: salta proprio l’istruzione che le fa calare.
⚠ I valori di fabbrica delle leve, qui, vengono dai nostri file di configurazione — per le macchine americane da fonti di terzi, per le europee ricostruiti da noi. La fonte che conta sono i manuali originali, e su quelli il confronto è da fare.
Sulla Dragon’s Lair europea non c’è né il trucco né la leva. Per studiare il mazzo ci servivano partite lunghissime, e allora le vite infinite ce le siamo fabbricate: novantanove, scritte a mano nella cella che le tiene.
Va detto forte, perché è la differenza fra un atlante e una collezione di voci: tutto quello che sta più in su in questa pagina lo ha messo la fabbrica; questo no. È una nostra addolcitura, dichiarata, e serve a guardare la macchina — non a giocarci meglio.
⇒ Un trucco del 1983 si trova. Il nostro si ammette.
Il setaccio è tools/censimento_trucchi.py: cerca la sequenza LD HL,nn / RES 0,(HL) / LD A,(nn) / CP nn / JR NZ / SET 0,(HL) e riporta le tre parti variabili leggendole dai byte. Le macchine dove non trova niente sono Dragon's Lair (europea · Atari), Dragon's Lair (italiana · Sidam), Super Don Quix-ote (Universal 1984), Super Don Quix-ote (a scene corte), Esh's Aurunmilla (Funai 1984).
Il flag alzato fa saltare il decremento delle vite; il cancello per-nodo è BIT 6,(IY+00). Lo scavo originale, che cercava anche add-vite, add-credito, bonus-life e stringhe nascoste e non ne ha trovati, sta in SCAVO_TESORI.md.