The Abduction of Oscar Z

2020 - Dreamin'Bits

ügyességi

Enterprise

Amstrad CPC

Oscar szereteti a nyári, éjszakai eget kémlelni. Jóval azután is, hogy szülei már aludni tértek. Most is, a farmon, az állatok karámja melletti ládák egyikében megbújva - mit sem törődve azzal, hogy anyja vacsorához hívja -, Oscar és hűséges kutyája - Gunter -, lesben állnak. Ezúttal nem az eget kémlelik, el akarják kapni a titokzatos tolvajt, aki az elmúlt napokban sorra lopta el háziállataikat. Ám ezen az éjszakán az égbolt figyelte őket... Egy földönkívüli hideg szemei pásztázták a vidéket a magasból, csendben közelítve a farm felé a holdtalan éjszakában. Ez küldetése utolsó éjszakája. Az utolsó esély, hogy élő mintákat gyűjtsön erről az ősi, túlzottan oxigéndús bolygóról. Ha a bio-detektor nem téved, két érdekes példány - köztük egy kétlábú - rejtőzik valahol a tyúkok és a juhok közelében...
A Dreamin'Bits a 2020-as CPCRetrodev programozási versenyre készítette ezt az ügyességi játékot, ami technikailag a CPC lehetőségeit kereteit feszegeti. A játékban Oscart irányítjuk a Földről elrabolt kisfiút, aki néhány farmbéli állatával együtt próbál megszökni egy kissé ügyetlen földönkívüli karmai közül. A pörgős játékmenet során Oscarnak az életéért kell küzdenie végtelen, egzotikus tájakon. UFO-támadások, ellenséges madarak, esetlen őshonos lények, csapdák elől kell kitérnie, miközben egy pillanatig meg nem állva kell eljutnia a pálya végén raboskodó állataihoz. A pálya végén raboskodó állatkához igyekszik a csészealjban repkedő idegen is. Oscar-nak előbb kell elérnie a pálya végét! A játékképernyő fölött látszik, hol van Oscar, hol van az UFO és a pálya vége.
Kerüld el a bolygó lakóit; az ütközés energiát von el tőled, akárcsak a csapdák és a rendkívül mérgező vizek. Ha elfogy az energiád, minden sérülés végzetes, és visszakerülsz a legutóbbi ellenőrzőponthoz. Az energia növeléséhez és visszanyeréséhez egyél gyümölcsöket - ahogy anyu is mindig tanácsolja. Az energia segítségével Oscar aktiválhatja a "düh" módot; minél több energiája van, annál tovább tart a hatása: ilyenkor gyorsabbá válik, és árkon-bokron képes keresztülgázolni. Ha utoléred a pálya vége felé tartó UFO-t, a düh-módot aktiválva ki lehet ütni az idegent a járművéből (amikor leereszkedik). Ha ez sikerül, Oscar beszállhat a csészealjba, amiből lövöldözhet is az őshonos vadállatokra (amíg van energiája)! Persze amíg az idegen ül a csészealjban, ő lövöldözik Oscarra.
Mint említettem Oscar folyamatosan szalad, de az ellenfelek elkerülésére bevethet pár kunsztot:
  • balra - lassabb futás,
  • jobbra - gyorsabb futás,
  • fel / jobbra-fel / balra-fel - ugrás akadályok vagy ellenségek felett,
  • le / jobbra-le / balra-le - csúszás akadályok vagy ellenségek alatt,
  • tűz - "düh" mód (fury mode), támadás

Az ellenfelek kikerülésének módja egyértelműnek tűnik, kivéve a zöld masszát: ezek alatt át kell csúszni, amikor felugornak egy pillanatra.
Minden szint végén egy-egy állatkát kell kiszabadítani. Az utolsó - harmadik - szinten Guntert a kutyát. Ezután a kompánia a csészealjban utazva visszaindul a Föld felé. Az első két szinten bőven van elég időd utolérni az idegent, de a harmadik szinten aktívan használni kell a düh módot, hogy elég gyors legyél!

Irányítás:
A menüben mindössze két funkció érhető el: a játék indítása és az irányítás definiálása. Nem csak a billentyűzetet állíthatjuk be, tetszőleges botkormányt is figyel a program. Az alapértelmezett irányítás a beépített botkormány. STOP - játék megszakítása.
Az ESC megnyomásával kiléphetünk a programból.

A program kétféleképen indítható:

  • OSCAR.COM - Betöltés után megnézhető a képregényszerű intro. (Az ESC megnyomásával az intro megszakítható.
  • GAME.COM - Az intro kihagyása.

Az EP verziót Kroysoft készítette a program jelentős módosításával. A program ugyanis mind CPC-n, mind EP-n programozástechnikai bravúr: 368x200 méretű kép scrollozódik folyamatosan, rajta sprite-ok mozognak. A CPC-s eredetiben nagyon szépen összeáll néhány olyan megoldás, ami tényleg az adott gépre van kitalálva. A scrollhoz nem másolgatja odébb a képernyőt: a CRTC kezdőcímét változtatja, és kihasználja, hogy a hardver a képmemória végéről magától körbefordul annak elejére. Így a képmemória körpufferként használható, és csak az újonnan beérkező tájat kell megrajzolni. EP-n ezt a körbefordulást nekünk kell megoldani a Nick sorleíróival és a szükséges tükörterületekkel. Emellett a háttér helyreállítása és a sprite-ok rajzolása felülről lefelé, gyakorlatilag a képsugár mögött történik, annak haladásához igazodva (beam-racing) - vagyis akkor nyúl a kép egy részéhez, amikor azt a monitor már kirakta, de a következő körben még nem ért oda újra. Ez persze csak akkor szép, ha időben el is készülünk vele... Az eredeti egyébként szándékosan 25 FPS-el megy: a megszakításkezelő csak minden második videóképkockában engedi elindulni az új rajzolást.
EP-n a körpuffer alapötlete kényelmesen megmaradhatott, de a megvalósítás más. A CPC képmemóriájának sajátos, összefésült sorelrendezését ott a hardver eleve tudja; nálunk ezt a Nick sorleíróival kellett lekövetni. A scroll ezért az EP-n képsoronkénti LPT címfrissítést is jelent, a körpuffer átfordulásához pedig tükrözött adatok is kellenek emiatt (ezért nincs megint EP64 támogatás). Ehhez jön még aztán egy kis szegmenslapozás és az EP videómemóriájának picivel hosszabb várakoztatása - utóbbi különösen kellemetlen, ha egy maszkolt rajzolás előbb vissza is olvassa azt, amit aztán módosítva visszaír. Szóval hiába ugyanaz a Z80: attól még egy az egyben átemelve nem ugyanannyiba kerül ugyanaz a művelet. Ráadásul egy ilyen, képsugárhoz időzített rendernél nemcsak a teljes képkocka ideje számít: ha egy sprite törlése és visszarajzolása közé beér a sugár, már látszik a villogás, akkor is, ha egyébként a következő 40 ms-os ciklusig elkészülünk.
A megoldás végül az lett, hogy a játék eredeti rajzolási sorrendjét és logikáját megmaradt, az alatta lévő gépi műveleteket viszont az EP-hez lett igazítva. A grafikák már előre Nick-palettára igazítva kerültek be, a forró kód és a gyakran olvasott táblák gyors RAM-ban futnak, a címképzésnél pedig lapra igazított táblák, egyszerűbb indexelés és előkészített címek váltanak ki fölösleges számolgatást. Ahol lehetett, eltűntek a drága IX/IY-s elérések, az ismételt lapozások és a belső hurkok fölösleges adminisztrációja is; több változó leggyakoribb olvasása pedig közvetlenül egy utasításba patchelt, önátíró értéket használ. Az LPT előkészítésének gyorsítása önmagában is érezhető tartalékot adott.
Menet közben azért nem minden "okosabbnak" tűnő megoldás nyert: az általánosabb pufferelés például többe is került, mint amennyit megspórolt. Végül sok kis, mért javításból állt össze az a tartalék, amivel az EP-s többletmunka mellett is megtartható lett az eredeti 40 ms-os ütemezés és a sima futás.