„Az összevisszaságban találd meg az egyszerűséget, a hangzavarban a harmóniát...”

Hangok kinyerése az Impossible Missionből

Egy számomra komoly kihívást jelentő feladatról szeretnék írni, a napokban élesített projektem, az Impossible Mission kapcsán. Szokásomhoz híven, a játék minden nyersanyagát magam állítottam elő a játékból való kivagdosás módszerével. Emulátorban futtatva, képmentéseket és hangfelvételeket készítek, majd ezeket egységeire bontom. Így született meg például a sprite kép. A hangok kinyerése is egyszerűnek tűnt, még falnak nem ütköztem...

Van két olyan hangeffekt a játékban, ami önmagában sohasem hallható, csak egy másik hang társaságában. A droidok megfordulásának hangja (amikor a platform széléhez érnek), illetve az elektromos nyaláb kilövésének hangja. Ez a kettő egészen biztosan csak akkor szól, ha a droidok alap morajlása is hallható. Mert ha az nem hallható, akkor vagy nincsenek is robotok a pályán, vagy le vannak bénítva, és így se nem fordulnak, se nem lőnek. Egy bútor képének kivágásához elég addig várnom, amíg elgurul előle az őt fedő robot, de itt a háttérhang sosem "gurul el". A feladat tehát az, hogy tisztán kinyerjem azt a hangot, amit nem hallok tisztán. A probléma megoldása felé rengeteg módon közelítettem, ezen esetlen próbálkozásaimat sorolom:

1. módszer: SID keresése a neten. És persze van is a játékhoz, viszont érthetően csak a fix hangokat tartalmazza. A számomra szükséges hangok viszont random generálódnak a játékban.

2. módszer: a hangmérnöki megközelítés. Adott két mono hangsáv, az egyikbe csak az alap morajlást vettem fel, a másikban ugyanaz az alap morajlás ÉS a kinyerni kívánt hang együtt. Magyarán van egy A és egy A+B hang, és nekem csak a B kellene tisztán. Ez elvileg megoldható úgy, ha az A-t invertálom, majd összemixelem az A+B-vel, mert így elvileg kioltja egymást az A és az invert A. Próbálkoztam is dögivel, de ehhez elképesztően pontos illesztés szükséges, csak akkor működik ha pont kioltják egymást a hullámok. Lehet hogy működne is a dolog, viszont rájöttem, hogy a háttér morajlás is random generálódik, és egy nagyon hosszú mintavétel után láttam, hogy bizony a számunkra monotonnak tűnő búgás mögött folyton változó hanghullám lapul! Így pedig lehetetlen a pontos egyeztetés. Persze biztosan vannak pro hangmérnökök akik megoldanák, de én nem vagyok az.

3. módszer: magam állítom elő a hangot. Vagyis addig buzergálom a SID-et, amíg azt a hangot nem préseli ki magából amit akarok. Nem hülyeség, de lássuk be, soha nem lett volna olyan, mint az eredeti. Ezen kívül túl macerásnak is tűnt.

4. módszer: az emulátor átconfigolása. Órákat töltöttem el azzal, hogy a létező összes C64 emulátort, SID szoftvert leszedtem és próbáltam configolni, hogy bizonyos hangsávokat elnémítsak a játék alatt. Kicsit hihetetlennek tűnik nekem, hogy jelen pillanatban egyik program sem képes erre. Milyen egyszerű is lett volna, lekapcsolom a morajlás sávját, és már kész is.

5. módszer: a programozó módszere. És nekem ez az ami bejött! Vagyis úgy döntöttem nem cicózok, átírom magát a játékot. Egyszerűen kikeresen a kódban azokat a részeket amik a zavaró hangot keltik, és kilövöm. Illetve annyira nem egyszerűen, számos dolog ismerete szükséges hozzá. Előkerült a polcról Molnár Lajos - Amit a C64-esről tudni érdemes című könnyed olvasmánya. Fellapoztam a SID regisztereit tárgyaló fejezetet. Megkopott emlékeimet rebootoltam, az 54272-es szám olyan ismerősen csengett, mint a születésnapom dátuma.

A SID három szólamot tud. Az ötlet az volt, hogy kikeressem a kódból azon részeket, amik ezen három szólam jellemzőinek mahinálásáért felelősek. Majd próbálgatással, az egyes szólamok elnémításával kiszűröm a számomra szükségeset. A kódban való turkáláshoz a VICE emulátor monitorozóját használtam. A vállalkozó kedvű kollégák akár velem együtt is elvégezhetik az alábbi lépéseket.

18-as karika
Innentől 18-as karika

Töltsük be a játékot, és indítsuk el. Az ALT+M-re jön elő a monitor. Keressünk rá azon részekre, ahol valószínűleg a számunkra szükséges regisztereket ($D404, $D40B, $D412) seteli. Ezen regiszterek határozzák meg az adott szólam hullámformáját (háromszög, fűrészfog, négyszög, zaj), illetve ezen regiszter 3. bitjének magasra állításával lehet elnémítani azt.

assembly hunt h 0000 ffff 8d 04 d4

H, vagyis hunt (vadászni). Ez annyit tesz, hogy a teljes területet (0000-ffff) átfésüli a megadott értékek sorozata után. Ami esetünkben: 8d (ez az STA, vagyis az akkumulátor regiszter tartalmának eltárolásáért felelős utasítás), a 04 d4 pedig az általunk keresett cím, a $D404. Magyarán azon részeket keressük most a kódban, ahol az első szólam vezérlőregisztere változik. Ki is dob jópár találatot, lásd kép.

assembly disassembly Ezután a disassembly (d) következik, ahol végignézzük a kódot, és megpróbáljuk kitalálni, hogy a kapott címek körül mi is történik. Én végigzongoráztam mindet, sorba megtaláltam a telefon hangjait, a lift hangokat, stb. Most ezeket átugorva, egyből a lényegi részre ugranék:

d 925f

A képen láthatjuk, hogy az imént megtalált 9261 címen valóban az STA utasítás szerepel, a tárolási cím pedig a SID első szólamának vezérlőregisztere. Közvetlenül előtte pedig az akkumulátorba töltődik be az az érték, amit az STA letárol. Az eredeti érték #$41 vagyis binárisan 1000001, ami a 0. és 6. bit magasra állítottságát, vagyis egy négyszög hullámformát jelez. Ha mi ezt átállítjuk úgy, hogy a már említett 3. bit magas, akkor kikapcsoljuk ezt a szólamot. Tegyük meg!

assembly disassembly újra > 925f a9 08

Vagyis a 925f címre kerül az LDA (a9) utasítás, 8, vagyis binárisan 1000 értékkel (3. bit magas). Ha ezt megtettük, beavatkozásunk sikerességét egy újabb disassembly-vel nyugtázhatjuk, lásd a képen a megváltozott értéket.

Ha az exit (x) utasítással visszalépünk a játékba, azt hallhatjuk, hogy nem halljuk a droidok alapzaját. És épp ezaz amire szükségünk volt. Hisz így már fel tudjuk venni a számunkra szükséges hangokat külön!

Személyes sikeremet több, egymást követő, artikulálatlan üvöltés formájában adtam a világ, de főleg a szomszédok tudtára.

A két hang:





Stunts

Egy remek autós játékot szeretnék bemutatni. Már akinek be kell, szerintem az idősebbek közül elég sokan ismerik. A Stunts 1990-ben jelent meg PC-re, aztán portolták Amigára is. A mai napig hibátlan játszhatósága mellett meglepő mélységei is vannak, ezért talán megér pár bekezdést.

Stunts autó választás Ügyességi autóverseny a leginkább ráaggatható kategória (acrobatic racing game), köszönhetően a versenypályákon szétszórt akadályoknak, változatos pályaelemeknek, illetve a választható járművek széles spektrumának. A közönséges személyautóktól kezdve, a terepjárókon át, egészen az IndyCar versenyautóig minden van. Mi mindig az Indy autót választottuk, mert az a leggyorsabb és a legjobban irányítható. Ha az időeredmény a lényeg, akkor nem is lehet más választás. Javasolt az automata sebességváltásnál maradni, hogy csak a gázt kelljen nyomni neki.

Stunts helikopter nézet Megéri a többi autót is kipróbálni. Mindegyik teljesen egyedi műszerfalat kapott, a terepjáróból pedig még a látószög is magasabban van. A színválasztás sem mindegy, ugyanis a játék rendesen 3D-s, tehát nem az van, hogy a kormány mögül bámuljuk a tekergő aszfaltcsíkot (fujj!) utat, hanem külső kameraállásokat is választhatunk. Helikopteres és TV-s fix kameraállások nézőpontjait is használhatjuk, persze ezeket leginkább csak az ismétlések alatt javaslom. Mert hogy az is van benne. Egy-egy jobban sikerült futamot rögzíthetünk is, így a haver nem tud azzal védekezni hogy biztos csak beírtuk a .HIG fájlba a rekord időeredményt. :)

Stunts belső nézet Az irányítás nagyon egyszerű, és egyben zseniális. A lényeg, hogy a kanyarokban mindegyik autónak megvan a sebességtől függő kicsúszási hajlama. Ha nagyon a határon vagyunk, akkor nyikorgó hangot hallat a speakerből, és a gáz elvételével, esetleg apró fékezéssel kell a maximálisan elviselt terhelés határain mozogni. Ha túllépjük ezt, akkor kisodródunk, ha alatta maradunk, akkor nem lesz rekord idő. Ezt az egyensúlyt kell érezni, és a játék remekül érezteti is.

Stunts ütközés A hosszú és tekervényes pályáknak köszönhetően akár percekig kell maximálisan koncentrálnunk. És ha a kanyarok már önmagukban nem jelentenek kihívást, gondoskodnak erről az akadályok. Betonblokkok amik között szlalomozni kell, alagutak, megdöntött utak, ugratók, stb. Na jó, mi a legtöbbször simán csak elmentünk ezek mellett, senkinek nincs kedve négy perc küszködés után azért befejezni, mert a 360 fokos átfordítóból kizuhan és fejre esik. :) A nagyobb ütközések a verseny végét jelentik, ezt a tényt a szélvédő összetörésének animációja egyértelműen tudatja velünk.

Stunts ellenfél A finish után - akármilyen jó időt is mentünk - mindig megvan az az érzés, hogy egy tizedet talán otthagytunk a hosszú pálya valamelyik kanyarában, és újból próbálkozunk. És a tanulság az, hogy igen, a végtelenségig lehet faragni az időeredményen. Viszont nem csak a stoppert választhatjuk ellenfélnek, a 6 gépi versenyző közül is találunk kihívót. Mindenkinek megvan a saját aktája, ahonnét megtudhatjuk hogy mennyire tapasztalt, mely pályarészek fekszenek neki a leginkább, miket utál. Autót is mi rakhatunk alá, a nehézségi szintet így mindenki teljesen egyénileg össze tudja rakni.

Stunts pályaszerkesztő És most jön az amit már ezerszer leírtam a C64 oldalon is: ha egy játékhoz mellékelnek pályaszerkesztőt, akkor azt soha nem lehet megúnni. A Stunts esetében ezt megtették, egy remekül használható editor került a játékba, amivel hipp-hopp összedobhatjuk saját pályáinkat. 5 fix domborzat van, de azokon belül kedvünkre garázdálkodhatunk. De olyan részletességgel, hogy kiválaszthatjuk még a távoli horizonton látható festői táj jellegét is. Egészen komoly konstrukciókat, akár 10 perc fölötti köridejű pályákat is össze lehet hozni. A hagyományos pályaelemek aszfaltos, földes, és havas útfelülettel egyaránt elérhetők. Ezeken kívül vannak az ügyességi elemek, és a dekorációk. Nincs is jobb annál, mint amikor egy havas útszakasz mellé kipakolunk egy óriási kaktuszt, vagy amikor a hajót nem a vízre, hanem a földre tesszük. És milyen jó ez is, hogy ezekért nem rinyál a program, nem terhel fölöslegesen különféle validálási hibákkal, csak a legszükségesebbekkel, mondjuk ha nincs start. Javasolt úgy megírni a pályákat, hogy minden autóval végig lehessen játszani. Előfordulhatnak olyan esetek, hogy egy lassabb autó számára nem hagyunk elég időt a felgyorsulásra az ugrató előtt, így esélytelenné válik a pálya teljesítése.
UPDATE: TCH hívta fel a figyelmemet arra, hogy valóban 5 felajánlott domborzat van, viszont a SHIFT+F1 kombóval azok is teljesen átvariálhatók! És tényleg így van! Imádom, amikor évekkel később derül fény egy rejtett funkcióra, olyan, mintha az ember kincset találna. :)

És most dobod el a hajad: a gépi ellenfél simán tud az általunk összerakott pályákon is közlekedni, innen látszik hogy jól van megírva az AI, teljesen dinamikusan alkalmazkodik, tudja hogy mikor merre kell menni. 1990-ben, a saját pályánkon, gépi ellenfél ellen, a verseny ismétlését helikopterből nyomon követni... teljesen fullos game ez, mondom én!

Stunts

javaScript minifikációs tippek

A js1k.com versenyén való részvétel kapcsán írom most le a tapasztalataimat. Először is, minden fejlődeni vágyó programozónak csak ajánlani tudom az ilyen jellegű kihívásokat. A dolog lényege az, hogy meghatározott méretbeli limitet és a szabályokat betartva kell valami maradandót alkotni. A compo nevéből adódóan jelen esetben a méretbeli határ 1kbyte volt. Kikötés volt még, hogy a mely böngészőkben kell futnia hiba nélkül, illetve a javasolt téma a tavasz volt.

Ha ilyen megmérettetésre adjuk a fejünket, a nulladik, legfontosabb lépés az, hogy legyen egy jó ötletünk. Lehetünk akármilyen rafinált programozók, ha a végtermék nem "üt", akkor az érmekért folyó harcba nem tudunk beleszólni. Az én alkotásom egy tavaszias környezetben tálalt Pac-Man átirat volt.

Ha az ötlet adott, el is kezdhetjük leprogramozni. A leginkább mellbevágó annak megtapasztalása lesz, hogy mennyire kevés az 1k. Beírsz pár változót, esetleg egy pár ciklust, és már át is lépted a limitet. Ez rákényszerít arra, hogy az eddig rutinból írt szokásos algoritmusokba picit jobban belegondolj. Gyakori, hogy az egy-egy byteért folytatott harcban szándékosan kell hibát véteni a kódban. Bőven elég az, ha az algoritmus csak az adott esetben működik megfelelően. Hibakezelésnek, szélsőérték vizsgálatoknak - mondanom sem kell -, helye nincs (szó szerint!).

Teletömött szekrény hasonlat Úgy kell ezt elképzelni, mint amikor a rajzfilmekben a telitömött szekrény ajtaját tartó figura ellép onnan, és abban a pillanatban kizúdul minden kacat a szekrényből. Itt is bőven elég ha csak akkor, csak addig és csak arra működik amire épp kell, miden más esetben nyugodtan kiütközhetnek a hibák. A jó kód ronda lesz, átláthatatlan, és hibákkal teli. És most még a tömörítetlen változatról beszélek! Ha ez megvan, akkor jöhet a második fázis, a tömörítés. Ennek lényege az, hogy a kódot egy tömörítő eljárás segítségével összecsomagoljuk még kisebbre. Ekkor egy teljesen kusza karakterhalmazt kapunk, ami önmagában működésképtelen. A végső 1k-s kódnak tehát tartalmaznia kell ezt a betömörített adatot sztringként, valamint magát a kitömörítő programot is, ami visszaalakítja a kódot, és lefuttatja azt.

Lehet hogy elsőre bonyolultnak hangzik, de az alábbi kódot megvizsgálva szerintem könnyen megérthető:

javaScript demo kód
Így már minden világos: a piros az adat, a kék a kitömörítő

Ez a kód teljesen valid javaScript kód. Látható hogy az oroszlánrészét az eredeti minifikált kód tömörített változata teszi ki, ami egy sztringben van tárolva (piros). Ezt követi az ezt kicsomagoló alkalmazás (kék), majd végül a kicsomagolt adat futtatása eval()-lal.

Így már remélem érthető, hogy kódolás közben miért kell olykor fölösleget, redundanciát és különböző hibákat, de viselkedést nem befolyásoló kódrészleteket is írni a kódba: azért, mert a tömörítő program nyilván annál jobb hatákonysági fokkal tud dolgozni, minél több és minél hosszabb azonos részleteket talál. Sok esetben úgy nyertem pár byteot, hogy egy mintát észrevéve, hozzáírtam még valamit a kódhoz. Az is nyilvánvaló, hogy csak akkor éri meg tömöríteni, ha a kitömörítő programmal együtt is kisebb lesz a mérete, mint az eredeti tömörítetlen. Tömörítő programnak ajánlom ezt a crusher-t.

Jó tanács: amikor azt mondod, hogy a kódodat már lehetetlen tovább egyszerűsíteni, akkor még lehet. Mikor már ötvenedszer mondod ezt, akkor rájössz, hogy eddig 49-szer nem volt igazad, és tudod, hogy akkor nyilván ötvenedszerre sincs.

Fehér hátterű weboldalak. Vagy mégsem?

Nagyon gyakori a teljesen fehér háttérrel rendelkező weboldal. Annál mellbevágóbb, hogy ezt az egyszerű tényt az esetek hány százalékában nem definiálják az oldal stílusleírásában. Ez valószínűleg abból adódik, hogy a készítők természetesnek veszik azt, hogy a böngészőfelület alap háttere fehér színű. Márpedig ez korántsem biztos, ugyanis ezt mindenki kénye-kedve szerint megváltoztathatja. Firefoxban például teljesen alap böngésző feature a default háttérszín állíthatósága. Tégy egy próbát:

1) Rókakomát elindítod
2) Főmenü -> Beállítások
3) Betűk és színek ketrec -> [színek...] gomb
4) Háttérnek beállítasz valami egzotikusat, bármit ami nem fehér
5) Behívsz egy weboldalt, amiről azt gondolod hogy fehér alapú

Ha jól van belőve az oldal, akkor fehérnek is kell látnod a hátterét, ha nem, akkor a választott háttérszín lesz az alapja.
Nem kell sokáig keresni, hogy találjunk olyan oldalakat, ahol erre nem figyeltek oda:

Tanulság: ha fehér alapú oldalt készítünk, akkor is explicit adjuk meg a stílusdefiníciók között, hogy: background: white.

5. Retro video- és kvarcjáték kiállítás

Retró Kiállítás hardverek Ötödik alkalommal rendezték meg a hétvégén a Retro video- és kvarcjáték kiállítást. Az eseménynek a Csokonay Művelődési Központ adott helyet. Számomra ez volt az első alkalom hogy jelen voltam, és egész biztosan nem az utolsó. Belépve az épületbe a leginkább szembetűnő dolog számomra a látogatók létszáma volt. Mindig meglep hogy mennyi embert érdekel még a mai napig is a téma. Férfi, nő, fiatal, idős, kóder, gamer, teljesen vegyes volt a társaság.

Retró Kiállítás Family Computer A terem szélein kronológia szerint voltak kihelyezve a hardverek. Kezdve olyan őskövületekkel, amikhez én sem tudok hozzászólni, egészen az XBOX-ig, ami nálam még nem a retro kategória, szerintem az egy picit kilógott a sorból. A két véglet között csupa ismerős, rég látott eszközök: Atari, C16-64-128, Amiga, SEGA, Nintendo, Videoton TV játék, ZX Spectrum, stb. Illetve a hozzájuk tartozó eszközök: joystickok, kontrollerek, kazetták, lemezek, játék dobozok. A képen látható Family Computer az egyik havernak volt meg, azon láttam először a Super Mariot.

Retró Kiállítás terem A terem közepe a gamingről szólt, bárki leülhetett a számára szimpatikus hardver elé, és kipróbálhatta az épp futó játékot. Akiket nem hozott zavarba egy floppy lemez látványa, azok bőséggel válogathattak is a szoftverek közül. Az első gép aminél ottragadtam egy C64 volt, amin a beléje dugott cartridgeből a Wizard of Wor ment. Nagyon fiatal srácok tolták épp, a játék nevét sem tudták, de teljes átszellemültséggel az arcukon játszották kooperatívan a nagy klasszikust. Megmondom őszintén, kicsit vártam már hogy únják meg, mert leültem volna elé, de nagyon belemerültek.

Aztán mikor továbbálltak, egy sráccal kellemes össznépi szörnyirtást végeztünk. Úgy jutottunk el a PIT-ig, hogy közben kiveséztük a játék bugjait, amiből kapásból át is éltünk párat. Mindenféle előre egyeztetett stratégia nélkül, instant módon hoztunk össze közösen 200k+ pontot. Aztán egyedül folytattam a harcot, kezdtem már megszokni a joystickot is, és egyre jobban belém ívódott a game. Olyannyira, hogy életem legjobb eredményét sikerült itt ezen a szent napon elérnem: 246 900 pontot. Álljon itt saját dicsőségemre a high score lista fényképe, aminek ekkor már mindegyik eleme hozzám tartozott:

Retró Kiállítás Wizard of Wor rekord!
Így már nem érhet az a kritika, hogy a blogon nincs kép rólam, lásd a tükröződést. :)

A nagy játékélmény után mászkáltam kicsit a teremben és elkezdtem az embereket figyelni játék közben. Persze azonnal észre lehet venni, hogy valaki régről ismeri a játékot, vagy épp most játsza először. Ami viszont mindenkinél megegyezett, az az, hogy a játékkal és a hardverrel való ismerkedés bizonytalan első percei után, mindenki teljes beleéléssel, átszellemülve, maximális koncentrációval játszotta az adott játékot. Semmit nem számított az, hogy a játék 30 éves. A kor egy teljesen lényegtelen paraméterré vált. Az emberek játszottak, szórakoztak.

Fel-alá mászkálva a fülnek kedves chiptuneokkal teli teremben, nem lehetett nem észrevenni a pódiumon lévő böszme nagy méretű, 32kg-os hardvert. Kiszűrődött hangfoszlányok alapján megtudtam, hogy egy merevlemezes meghajtó. Elvileg 5 mega a kapacitása, és negyed óráig inicializál(!) a bekapcsolása után. Hogy még működik-e, azt nem tudom, mindenesetre az se mai gyerek.

Retró Kiállítás Commodore hardverek Játszottam még egy arcade géppel is, amiben volt vagy 5 fajta falbontó, meg vagy 10 fajta Pac-Man. :) Tanulságként szolgált, hogy még mielőtt rekordokat akarnánk dönteni, bármilyen gépen, előbb a hardvert kell megszokni. A sok különböző joystickot, és kontrollert előbb ki kell ismerni, eggyé kell válni vele, és ha már autonóm módon megy velük az irányítás, aztán lehet keresnivalónk a pontvadászat terén.

Összességében nagyon tetszett az esemény. Jó érzés volt hasonló érdeklődésű emberek között lenni, családias légkörben. A következőn is tuti ott leszek.

A Pontos lemásolások eredete

Múltkor írtam a pontos lemásolásokról. Azt hiszem rájöttem, hogy ez nálam honnan eredeztethető. Általános iskolában egy időben jártam rajz szakkörre. Az órák utáni foglalkozáson a tanárnéni mindenkinek kiosztotta a rajzolni valót. Többen emberi arcot kaptak, mások csendéletet. Egyes egyedül én kaptam egy fekete-fehér, összevissza vonalakból és pontokból álló krikszkraksz randomképet. Valami hasonlót kell elképzelni, mint ez:

random kép

A feladatom az volt, hogy rajzoljam le. Pontosan ugyanazt. Talán a többiek még nevettek is a feladatomon, én viszont kérdés nélkül nekiláttam, tettem a dolgomat. Magaménak éreztem a feladatot, nagyon élveztem. A kulcs az egész ábra egyetemes átlátása. Az arányok megfigyelése, a mi-mihez képest való viszonyítások. Azonnali sikerélmény volt, amikor berajzoltam egy új vonalat vagy pöttyöt, mert éreztem hogy haladok előre. Viszont minden berajzolt elem után az egészet át kellett néztem újra, hogy az újonnan bekerült elem hatására is egyben van-e még a rendszer. Mert ha egy picit is eltér, akkor onnantól kezdve a következő elemek is el fognak, és érezhetően egyre rosszabb, tarthatatlan irányba haladna a pontos lemásolás.

A foglalkozás végén a tanárnéni odajött hogy megnézze, és őszintén megdöbbent hogy pontosan ugyanazt az ábrát láthatja két papíron egyszerre. Én igazából nem éreztem semmi különöset, csak tettem a feladatomat, amit siekresen véghez is vittem. Ha én is csendéletet vagy emberi arcot kaptam volna, egész biztos hogy kudarcélménnyel távozok a kurzusról, mert azokhoz semmi tehetségem nincs. Hogy a tanárnéni honnan a francból látta meg előre, hogy nekem ez a feladat fekszik, máig nem értem.

(Ui.: a fejlécben látható mottóm épp ide illik.)

Legelső PC-s játékaim

A minap régi DOS-os játékok képeit nézegettem, és felmerült bennem a kérdés, hogy vajon melyik volt a legelső ilyen játék amit az életemben láttam. Először mindig a klasszikusok jutnak az ember eszébe, de hamar rájön, hogy a Dune2, Lemmings és társai előtt is volt "élet", csak mélyebben bele kell gondolni.

PC-t legelőször 8.-os koromban láttam, egy 486 DX4 100Mhz-es gép "személyében". Az első játékot rá ugyanitt, egy sugárzás szűrő panellel felszerelt monokróm monitoron pillantottam meg. Szöveges üzemmódban futó amőba volt. Azt hittem hogy nem fogok már rátalálni, de egy perc sem kellett hozzá és beadta a kereső:

Amőba

Full-extrás, mint látható. Lépéseket számol, időt mér, statisztikát vezet, mi kell még. Külön tetszett a kurzor mozgatásakor a PC speakerből szóló rövid és magas frekvenciájú hangeffekt. Le is töltheted a játékot itt.

Másik nagyon korai emlék az Észkerék. Bizonyára sokaknak ismerős. Ez is speakeren csipog, a hangeffektek mellett zenét is tartalmaz, viszont azt 1 percnél tovább nem ajánlott hallgatni. Magyar nyelvű, az a poénkodós fajta. A szabályokat a képen láthatod, a játékot pedig ide kattintva tudod letölteni, majd az ESZ.EXE-vel indítani. :)

Észkerék
A képek nagyításhoz kattints rájuk!

Ha régi DOS-os játékokat szeretnél futtatni a gépeden, ajánlom a DOSBox programot letöltésre.

Pontos lemásolás?

Örök kérdés, hogy a játékok pontos lemásolásakor tényleg minden téren törekedjek-e a teljes egyezőségre. Értem ezalatt az olyan apró dolgokat, amiket csak nagy nehézségek árán lehetne megvalósítani, és szinte semmi pluszt nem nyújtanak. Ebben az esetben mérlegelek, ha a mezei felhasználó úgyse venné észre a hiányát, akkor hagyom, nem szenvedek vele, nem bonyolítom és lassítom vele a kódot fölöslegesen.

Másik hasonló eset, amikor egy ismert bugról kell eldöntenem, hogy az én változatomban is benne maradjon, vagy sem. Ha nem, akkor az már nem lesz az eredeti. Viszont a hibát nyilván az eredeti játékba sem akarták benne hagyni. A bugok esetében egyértelmű a koncepcióm, kihagyom őket. Mondok is rá két példát:

A Wizard of Wor-ban, amikor kiirtunk minden szörnyet, és jön Worluk (a légy alakú szörny), akkor a teleport a megnyílása után folyamatosan nyitva marad. Mivel Worluk csak a teleporton át tud elmenekülni a pályáról, nagyon jó taktika az, ha beállunk a kapuba, és ide-oda teleportálgatunk attól függően hogy melyik oldal felé közelít. Tehát bevárjuk türelmesen, és a kapu előtt kilőjjük. Ha elhibáznánk, akkor viszont átmegy rajtunk, ezáltal meghalunk. Vagyis csak meghalnánk, itt jön a bug. A halál animáció ugyan elkezdődik, de mivel a kapuban álltunk, és hozzánkért a légy, így egyből el is menekült, ami után jön a következő pálya. A halál animáció tehát nem tud véget érni, így a következő pályán csodák csodájára, azt láthatjuk, hogy nem veszítettünk életet.

A másik, mindenki által ismert bug az Impossible Missionben van. Azonnali áramrázás általi halállal hal Dork (a főhős), ha egy robot teljesen kiér a pálya bal szélére, és ott elereszt egy lövedéket, kifelé a falon át balra (left-hand-side zapping bug). Nem lehet mit tenni ellene, teljesen lehetetlen helyzetek állhatnak elő így. Általában a snoozeokat, vagyis a robot bénításokat ezekre a helyzetekre kell betárazni.

Ezeket a hibákat én a saját átirataimban javítom, mert a játékélményt rontják. A pontos lemásolás tehát nagyon fontos, de nem ész nélkül alkalmazva.