Enterball

1988 - 'a' Studio

ügyességi

Enterprise

Aligha akad olyan Enterprise tulajdonos, aki nem ismerné az Enter Ball-t. A program igen sikeres lett a gép forgalmazásának idejében, az eladási toplista 6 helyéig küzdötte fel magát. Bár a program grafikai kivitelezése átlagosnak mondható, sikerét valószínűleg hiánypótló jellegének köszönhette: az oly sikeres Arkanoid stílusú "falbontó" játék egyetlen színvonalas megvalósítása volt a maga idejében. Sikerét csak a később megjelenő, jó minőségű Spectrum átiratok homályosíthatták el.
A kazettához a következő fantáziadús kerettörténetet mellékelték:

"2213-at írunk. A hírhedt varázsló, a computermágus McKell Daughleny feldühödvén azon, hogy a boltban az orra elől vitték el az utolsó angol nyelvű Enterprise-t, a varázsjoystick-ja egyetlen suhintásával betölthetetlenné tette az összes Enterprise programot. A rettegés szele söpört végig a világon. Mi lesz, ha nem játszhatnak soha többé szeretett programjaikkal? A varázsló azonban megkönyörült a szenvedő emberiségen. Készített egy játékot, és elküldte a világ legügyesebb játékosainak. Ha valakinek sikerülne teljesíteni a játék összes pályáját, a programok megszabadulnának a varázslat alól."

Betöltés után egy kellemes zene csendül fel "Enterprise-os hangszerelésben", valamint megtudhatjuk, hogy a SPACE megnyomásával indíthatjuk a játékot. Előbb még megnézhetjük a toplistát (már aki nem nyomja el a SPACE megnyomásával), majd kirajzolódik a játéktér. Az irányítás a beépített-, vagy EXT1 botkormánnyal történik. Az ütőt mozgathatjuk a két SHIFT gombbal is, így kímélhetjük a beépített botkormányt. Használható a PAUSE is a játék megállítására, valamint az 'S' kikapcsolja a digi hangeffekteket.
Elsőre talán nem is gondolnánk, de a játék sok apró, de ötletes újdonságot tartalmaz!

Nézzük át a felvehető tárgyakat:

  • LIVE - jutalom életet kapunk.
  • SLOW - a labda lelassul.
  • FAST - az előző ellentéte: a labda felgyorsul. Annyira ne erőltessük a felvételét!
  • B feliratú bomba - a játékképernyő egy részén a téglafal megsemmisül
  • Téglafal: a játékképernyő alján egy szaggatott vonalból álló fal jelenik meg, ami nem engedi leesni a labdát. (A rések között viszont le tud esni! Szerintem többet árt, mint használ.)
  • Kérdőjel - meglepetés (az előzőek közül valamelyik, vagy szuper falbontás, ami minden fekete és/vagy fehér téglát egyből eltüntet. A pecheseknek viszont visszaépül az összes eddig elbontott tégladarab...)

A labda elvesztése esetén az addig megszerzett extrák (védorács, vagy szuper falbontás) elvesznek.
A különböző színű téglák között van két "speciális" tégla is: a fehér színű téglákat nem tudjuk lebontani, a fekete téglákat csak több találattal tudjuk eltűntetni. Van amikor a meglepetésben kapunk olyan extrát, amivel a fehér is bonthatóvá válik. Az ütővel attól függően, hogy hol találjuk el a labdát, remekül lehet célozni.
A képernyő bal oldalán látható információk a következőek:

  • LEVEL - nehézségi szint. Csak az első szint állandó, a többit véletlenszerű sorrendben kapjuk, de a számozás folyamatos.
  • SCORE - pontszámunk. Minden találattal, és egy szint teljesítése után gyarapszik.
  • SPEED - a labda sebessége. A labda játékban eltöltött idejével, annak sebessége folyamatosan növekszik, míg el nem éri a 20-as fokozatot.
  • TIME - A "kalitka" hátralévő nyitvatartási idejét méri.
  • HITS - Az utoljára eltalált fekete téglának még hány további lövés szükséges.
  • TILT - a tábla ütögetését nem folytathatjuk a végtelenségig. Ez a kijelző mutatja, hogy még hányszor üthetjük meg az asztalt, anélkül, hogy az ütőnk mozgását a program letiltaná.

A játék legnagyobb erénye, hogy nagyon jól játszható, hagy sikerélményt az embernek, legalábbis az első pár szinten, később pofátlanul nezéz lesz. Bár a grafika nem számít extrának, érdemes vele játszani! A programban szereplő 50 nehézségi szint garantáltan tartós elfoglaltságot biztosít, főleg, hogy véletlenszerű sorrendben kapjuk a pályákat, csak az első és az utolsó szint az állandó. Ez utóbbi egyébként nagyon mókás: a gyémántot 4 sor fekete kocka takarja, de ezeket csak a szuper falbontóval lehet eltüntetni.

 

A hivatalosan kiadott verzió érdekessége, hogy XOR-olással titkosítva van programvédelem, és módosítás elleni (cheat) védelem gyanánt. A XOR-nak az a lényege, hogy egy bájton kétszer elvégezve a műveletet, az eredeti értékét kapjuk vissza a bájtnak. Így kiválóan alkalmas titkosításra, ezért igen gyakran használják arra, hogy a programkódot visszafejtés ellen levédjenek vele. A program kiadásra készülő változatán végzik az első XOR-olást, ami után az adott programrészlet már csak bináris zagyvaságnak fog tűnni. A második XOR-olást pedig a betöltő program végzi el az adatok betöltése után.
Egyszerűbb esetben minden bájton ugyanazzal az értékkel végzik el, ezt akár 255 találgatással is fel lehetne törni. Komolyabb védelem esetén egy saját algoritmussal változtatják is a XOR-oló értéket, így ezt már próbálgatással nem lehet feltörni. Gyakran egymás után több különböző értékkel, móddal ismétlik a műveletet, még jobban megnehezítve a programkódba való betekintést.
A védelem sérülékeny része az, hogy a visszakódoláshoz szükséges értéknek és dekódoló szubrutinnak benne kell lennie a programban, így ha elkezdjük lépésről lépésre követni a programot, előbb-utóbb átjutunk a védelmen. Ennek megnehezítésére gyakran további trükköket vetnek be, pl. nem dokumentált Z80 utasítások, félrevezető programrészek (pl. van egy bonyolult kamu főprogram, aminek a megfejtésével órákat szenvedhet az illegális behatoló, közben pedig a megszakítási rutin indítja a valódi dekódoló rutint).
A módszer különösen eredményes tud lenni olyan kevés, kötött memóriával rendelkező gépen mint a Spectrum, mivel itt ha a csurig töltik a memóriát, egy a visszafejtést segítő debuggert már nincs hol futtatni. Szintén debugger ellenes trükk tud lenni az, ha a képernyőtartalmat is felhasználják a kezdő XOR érték kiszámításához, így ha más program futása alatt hajtódik végre a dekódoló rutin, csak téves zagyvaságot fog visszaadni. Az is gyakori, hogy a betöltőkép nem látható (fekete attributumok) részébe rejtik el a dekódoló rutint.
Konkrétan az Enterball esetén viszonylag egyszerű a művelet, folyton növekvű értékkel van végig XOR-olva a PRG fájl, vagyis 00,01,02...FE,FF,00,01,stb.
A "NASAGUY" könyvtárban található változat nem tartalmazza a titkosítást.

Sajnos a programban egy olyan hiba is marad, ami a végigjátszhatóságot is erősen befolyásolja! Hogyan sorsolja a pályákat a játék? Az 1. és az 50. pálya fix, a közte lévő 48-at sorsolja úgy, hogy egy játék alatt mindegyik csak egyszer kerüljön sorra. Ehhez létrehoz egy táblázatot:
- 6008h címen egy változó, amit minden megszakításban változtat,
- 6009h tárolja, hányadik LEVEL-en tart a játékos,
- 600A-6039h 48 pályasorszám, 7. bit 1-esbe állításával jelzi, hogy az adott pálya már volt,
- 603Ah listát lezáró FFh.
Véletlenszám generálása a megszakítási rutinban:

A6BE
A6C1
A6C2
A6C4
A6C6
A6C7
3A 08 60
3C
FE 31
20 01
AF
32 08 60
LD A, (6008)
INC A
CP 31
JR NZ, A6C7
XOR A
LD (6008), A

Növeli a változó értékét, és ha elérte a 49-t, akkor újrakezdi nulláról.
Itt a sorsoló programrész:

9D9D
9DA0
9DA2
9DA4
9DA7
9DA8
9DAB
9DAE
9DAF
9DB1
9DB2
9DB4
9DB6
9DB7
9DB9
9DBC
9DBD
9DBE
9DBF
9DC1
9DC3
9DC6
9DC8
9DCA
9DCB
9DCD
9DD0
3A 09 60
FE 32
20 04
32 06 79
C9
21 0A 60
3A 08 60
5F
16 00
19
CB 7E
20 07
7E
CB FE
32 06 79
C9
23
7E
FE FF
20 03
21 0A 60
CB 7E
20 F3
7E
CB FE
32 06 79
C9
LD A, (6009)
CP 32
JR NZ, 9DA8
LD (7906), A
RET
LD HL, 600A
LD A, (6008)
LD E, A
LD D, 00
ADD HL, DE
BIT 7, (HL)
JR NZ, 9DBD
LD A, (HL)
SET 7, (HL)
LD (7906), A
RET
INC HL
LD A, (HL)
CP FF
JR NZ, 9DC6
LD HL, 600A
BIT 7, (HL)
JR NZ, 9DBD
LD A, (HL)
SET 7, (HL)
LD (7906), A
RET

7906h a használandó pálya sorszáma.
Elsőként leellenőrzi, hogy az 50. LEVEL következik? Ha igen, akkor vissza is tér az 50. pálya kiválasztásával. Ha nem, akkor jön a sorsolás:

Az így kiválasztott pályát megnézi, volt-e használva, ha nem, akkor visszatér, ha igen, akkor folytatódik a keresés. Biztosan talál előbb-utóbb, amikor már nincs szabad pálya (50. LEVEL), már nem lép be a sorsoló rutinba.
Hol a hiba? A véletlenszám generálásban! 48 pályából kell sorsolni, és a legnagyobb szám 48 lehet. Ez miért hiba? Azért mert a táblázat elemeit 0 eltolással kezdve címzi, azaz 0-47 az értelmes eltolási érték, míg a véletlenszám 0-48 érték lehet (összesen 49 érték)! Ha a véletlenszám pont 48 (30h), akkor az ellenőrizendő érték a lezáró FFh lesz. Mivel ez felhasznált elemnek tűnik (bit 7 = 1) ugrik a következőre. Itt már hiába ellenőrzi, hogy ez-e a táblázat vége... az itt található 00h elfogadható értéknek tűnik majd, ezzel kiválasztja a 0. valójában a 256. pályát, ami mivel csak 50 pálya van, valami véletlenszerű memóriaszemét lesz! Ennek legkárosabb következménye, hogy ha a pálya végét jelentő gyémánt egyáltalán nem is jelenik meg, vagy a pályán kívülre kerül. Így gyakorlatilag minden új pályára lépés 1:49-es arányú orosz rulett.
Javítás: a véletlenszám generálásban CP 31h helyett CP 30h kell.

A játékból ZozoSoft készített EXOS kompatibilis verziót, sajnos azonban Ep64-en meglehetősen lassú, gyakorló módnak viszont kiváló. Az imént említett hiba természetesen ki lett ebben javítva, így erősen javasolt ezt a véltozatot használni! Betöltés után az F1-F3 billentyűkkel kérhetünk csalásokat:

Ha nem csalunk, a program kilépéskor elmenti a pontszámtáblát.
A programban "gyárilag" is van CHEAT: a pontszámtáblánál gépeljük be: NASAGUY (nem kell SHIFT).

A programból készült TVC-s változat is, ennek címe találóan TV-Ball (a TVC-programcsokorban megtalálható). Mivel azonban a TVC nem ismeri az attributum képernyőt, ott 4 színes képernyőn fut, így kevésbé látványos. A TVC változat készítésekor viszont észrevették a fenti hibát, így ott már javították. 1989-ben Plus 4-re is átírta Kosir Attila, ott Digital Ball a címe.
ZozoSoft pedig Spectrum verziót is készített a programból!

Térkép