Na akkor engedve a tömeg követelésének
A Bomberman rejtelmei.
A program 8000H-ra töltödik, és itt is indul. Ez egy kicsit érthetetlen, hiszen így nem fut 16K-s Spectrumon, pedig egy 8K-s programtól elvárná az ember... pláne 1983-ban...
A futás közbeni adatokat és a vermet pedig a legfelsõ 16K-ban tartja.
IM1-ben fut, ezzel sincs gond.
Hang, azaz OUT (0FEH),A utasítás két helyen van, 9098H és 91D8H, mivel keretszít nem használ, így ezek a már korában megismert CSAKOUT rutinra lettek cserélve, azaz RST 0.
Attributum területet csak egy helyen piszkál: 90EFH címen van egy LD BC,5800H utasítás, amihez 912AH címen találni egy LD (BC),A-t, amit a megfelelõ KONV rutin hívására kellett cserélni. Ez az egész rutin egy karakternyi területen helyezi el a grafikus adatokat, plusz a megfelelõ attributum bájtot.
Lássuk a billentyûzetet:
Lehet találni 2 db IN A,(0FEH) utasítást.
Ez a kis rutinocska figyeli a SPACE ill a CAPS SHIFT gombokat. A "leírásban" nem szereplõ módon a CAPS SHIFT is megfelel tûz gombnak, azaz lehet vele bombát potyogtatni
Ezenkívûl még egy IN A,(C) féle megoldást találni itt:
Ezeket átírva a szokásos PORTFE rutin hívásra, már kapunk egy tökéletesen mûködõ átíratot, de az irányítás az eredeti nem túl barátságos
Itt jött a tünödés, hogyan lenne legjobb átirni joystickra az irányítást. Ehhez elkezdtem végignézni, mit is csinál a billentyûzet kezelõ rutin.
Ez a 916AH-n kezdõdõ rutin ciklusban akár az egész billentyûzetet lekérdezi! Ezt már túlzásnak éreztem a játék igényeihez képest, hiszen ide csak 5 gomb kéne...
Egész pontosan azt csinálja a rutin, hogy végig kérdezi a billentyûzetet, addig amíg nem talál egy lenyomott gombot. Ha talált akkor a HL-el címzett táblázatból kikeresi az ASCII kódját. (A táblázat 919Eh-tól 40 bájt)
Tehát ez egy teljes és általános billentyû lekérdezés.
Megkeresve, hogy ez a rutin honnan van hívva, ezt találni:
A rutin elsõ része kikeresi egy 16 elemû táblázatból a visszakapott gomb kódját, 9163H-nál az A 1-16-ig tartalmaz egy sorszámot, ill. ennél nagyobb ha nem találta meg a táblázatban a kódot.
A táblázat 913FH-n van, és párosával vannak benne a billentyûk:
W,I
E,O
D,L
C,SYMBOL SHIFT
X,M
Z,N
A,J
Q,U
Ezekbõl négy páros már ismerõs az
eredeti kezdõképrõl, mint a 4 irány billentyûi. Mi lehet a maradék? Egy pillantás
a Spectrum billentyûzetre, máris világos, hogy a gép két oldalán elhelyezkedõ gomb kupacról van szó, ami a 4 fõ és a 4 átlós irányt tartalmazza, plusz ott van a korábban már emlegetett CAPS SHIFT és SPACE mint egy-egy tûz gomb a két külön kupachoz.
Ezen a ponton a rutin alkalmas lenne a két gombkupaccal, két külön játékos számára biztosítani az irányítást.
Tovább lépve a 9164-65H-n lévõ utasítások osztják a kapott értéket 2-vel, így a két gomb kupac már párhuzamosítva lett. A kimenet tehát 1-8-ig az irányoknak megfelelõen, ill. 9 ha az egyik irány sincs megnyomva.
Lássuk ennek a rutinnak a felhasználását:
Mint látható ezesetben a lehetséges 8 irányból, csak négy van lekezelve.
Így tehát csináltam két rutint, az egyik a tûzgombokat figyeli az összes joystickon (internal esetén a Space és az ALT is mûködik), erre cserélem le a 912DH-n lévõ rutint.
És egy másikat ami a négy irányt figyeli a joystickokon, ezt pedig a 914FH helyére teszem be, és 1,3,5,7-et ad vissza, ill. 9-et ha egyik se aktív.