Téměř po deseti letech jsem se konečně odhodlal vyrobit upravenou verzi mé původní logické hry Magnetit. Narozdíl od originální verze je v Magnetitu 2002 možné hrát jednotlivé místnosti v libovolném pořadí, dále jsem nahradil asi 6 místností novými. Ovládání zůstává téměř stejné, pouze na úvodní obrazovce je přidána zmíněná volba čísla místnosti tlačítky SELECT a OPTION, START spouští hru. Nemusíte již tedy pracně opisovat nějaká hesla, ale rovnou si vyberete příslušný level a hrajete.
Přeji příjemnou zábavu...
Nedá mi to nezmínit se o tom, jak záludné bylo tyto úpravy provádět. Jak již jsem řekl, hra je stará téměř 10 let. Naštěstí jsem našel sešit s poznámkami, který mi prozradil, jak jsem měl data rozmístěná po paměti. Ovšem i tak to byl dost horor, protože jsem tehdy dělal v Magnetitu naschvál různá zabezpečení proti případným záškodníkům, kteří by chtěli hru upravit. Program si například na počátku počítal kontrolní součet celého paměťového prostoru hry a když nesouhlasil, RESET a zdar. Ale tohle odstranit byla celkem legrace.
Daleko větší záhul pro mozkové buňky následoval při hledání paměťového místa, kam si hra uchovává číslo právě řešené místnosti - to je potřeba vědět kvůli jeho počátečnímu nastavení, aby se dalo začínat od libovolné místnosti. Vzpomněl jsem si, že jsem to tehdy velmi "kamufloval" různými triky, jako např.
Vypadalo to, že s tím nehnu. Pak jsem zvolil jinou metodu a místo abych hledal léčky v kódu, hledal jsem kazetu v šuplíku. Kazetu s původním zdrojákem v MACu65 se mi najít podařilo, a tak jsem mohl s úžasem v očích sledovat spousty záludných metod.
Jen pár příkladů:
Místo prostého
lda mistnost
se použije
ldx #123 lda mistnost-123,x
Jindy se použije
jsr blafak ldx #99 na1 lda mistnost-197,x
a v podprogramu "blafak" najdete mezi hromadou jiných instrukcích ty podstatné, které dělají
pla ;návr.adresa pla ;návr.adresa ldx #197 jmp na1
Případně jiný způsob
ldx kons1 stx na1+1 na1 ldy #0 lda mistnost-37,y ldx #0 stx na1+1
kde na adrese "kons1" se nachází hodnota 37, což znamená, že program si upraví ldy #0 na ldy #37, načte data a ihned poté změní instrukci zpět na ldy #0.
Když takhle vidíte zdroják, je to samozřejmě krásně přehledné, ale nezapomeňte, že při disassembleraci nic takového nespatříte. Takže sláva budiž provolána starým kazetám, ze kterých se mi i po spoustě let podařilo přečíst zdrojáky a díky tomu vytvořit Magnetit 2002. :-)