idoregesz.png (forrás: idoregesz.json)
Portoltam a C=64-es Rátkai klasszikust MEG-4-re (így most játsztható Linuxon, Windowson és böngészőben is, a kipróbálásához katt ide, alul "RPG" fül és a flopiját az emulátorra kell drag'n'droppolni).
De ha már lúd, akkor legyen kövér, fel is tunningoltam a játékot kicsit:
- egyrészt lefordítottam angolra, hogy külföldiek is élvezhessék (a fenti flopi egyaránt tartalmazza a magyar és angol szövegeket)
- a játék az eredeti walkthrough alapján végigjátszható (kivéve egy pontot, az eredeti játék a lovagi torna után technikai okokból átdobott a szomszéd szobába, ami idegesítő, így ez nem, ennél itt kell egy plusz "k" utasítás)
- jelentősen feljavítottam a parancsértelmezőjét (az eredetiken túl elfogaja pl. "használ kötél", "leszúr farkas", "hord sisak" vagy "meghúz lady" kombinációkat is)
- a szövegeket több helyen átírtam a játszhatóság kedvéért (pl. "Keresd meg, és hozd vissza az elveszett ékszereimet!", helyett most már utal arra is, hogy 3 darab ékszerről van szó)
- a súgókat is sok helyen átírtam, hogy utaljanak arra, mit kell csinálni vagy mire van szükség (pl. csigalépcsőnél "Ha szerencséd van, nem szakad le a lépcső. Négylevelű lóhere szerencsét hoz.")
- a tárgyak leírását is átírtam, hogy utaljanak arra, mikor és hol kell használni őket (pl "vizsgál nád"-ra nem azt mondja, "Nincs rajta semmi érdekes.", hanem azt, hogy "Üreges, tudsz levegőt venni vele.")
- raktam bele pár easter egget is :-)
A játékot egyébként nem kódoltam le MEG-4 C-ben, hanem írtam egy általános szöveges kalandjátékmotort és egy fordítóprogramot, ami egy JSON-ből veszi az adatokat és MEG-4 futtathatóvá fordít. Ha esetleg valaki kedvet kapna más Rátkai klasszikus portolására (pl Bosszú), vagy netán teljesen új eredeti játék készítésére, akkor annak csak egy JSON fájlt kell megírnia, amiben nagyon szívesen segítek.
Ugyanakkor csináltam egy MEG-4-től független, teljesen függőségmentes, egyetlen forrásfájlból álló, terminálos interpretert is:
- "cc advgame.c -o advgame
" szimplán a fordítása (kb. 1000 SLoC, és tényleg nem kell neki semmi, ebben benne van a readline, zlib, pkzip, caca függvénykönyvtár meg még egy debugger is).
- tudja olvasni a MEG-4 floppikat, de a zip-es projekt formátumot is (nem kell neki se libpng se libarchive)
- "./advgame -d idoregesz.png
" bekapcsolja a debuggert, ez mutatja a végrehajtott VM utasításokat és plusz parancsokat ad (pl. "@jmp N" adott számú szobába ugrás)
Képernyőkép (egy modern terminálban a kép igazából színes):
$$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$$JLLLLtttttttttJ$$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$tzQQQQ___)__}_]_t$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$&Yaaa&$$$$$$$$_QQQQQ___]__)_}__$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$aq00n00qa&$$$$$$$_QQQQQ___}__}_)__$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$&Y$$$&&aa&$$$$_QQQQQ___)__}_)__$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$&aaaa&$$$_jjjjj___|__)_]__$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$_|||||___]__}_}__$$$$$$$$$$$$$$0$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$_|||||___}__]_|__$$kkqkkkkOpOOoz$$$$$$$$$$$$$$$$$$$ $$$$$$$$nnnn000$$$$$$$$$$$$$$$$$0$$$$$$$$$$$$_|||||___)__}_}__$$c}>>;__~|}]]]]tJk$$$$$$$$$$$$$$$ $$$$$$$$nnnn0000a$$$&&&&&&&&&&&&0$$$$$$$$$$$$_|||||___}__)_}__$$$o)}__--][]]___}}}Ok$$$$$$$$$$$$ $$$$$$$$nnnnnY0000{! !{nn00$$$$$$$$$$$$_|||||))}}]]__}__$$$$_]c}_____---_j}}j__tJk$$$$$$$$ $$$$$$$&nnnnnnc0n{! !{nn0000000QQQQQQQQQQQx[1111111111111[[[QQQQ__Qu(}__]]]]]]>___1ff1_tJWW$$$ &&Q//!! !{n00000000n0000{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{--{{{1(}_]]]]~,,>__f1Q111Qvak$ !!!!!!!!!!!!!{n{0n{00000n{! 0000{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{1(}__________1z111z1___ nnnnnnnnnnnn00n{{n00Ynnx{" 0000_____!!_{{{{{{{{{{{{{{{{{{{{{{{{{1{111)11{1(}_]{]]{]___________ nnnnnnnnnnnn00!n{n{"{/X/{->, 0Yu{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{){1(}_}]}]}}]]___1j11 nnnnnnnnnnnn000000X/xx_)>>,"i))){{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{1(}_____]]}|j1___ nnnnnnnnnnnn000000x/>>>,"![]~]~_{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{1)}__]]________ nnnnnnnnnnnn000000>,>"!~[-[}-)1{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{_])}_____11___ nnnnnnnnnnnn000000"!_!_[[][[{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{___1(}]____1__ ▴ ⬚ ⬚ ▾ ⬚ ⬚ 24 2 A konyhában vagy. Egyik oldalon hatalmas asztal áll mindenféle konyhaeszközökkel, a másik oldalon egy nagy tűzhely van. Délre egy faajtót látsz. > kinyitom az ajtót Rendben. >
Jó szórakozást, és ha valaki kedvet kapna szöveges kalandjátékkészítésre, feltétlenül jelezze, segítek!
Hozzászólások
lajk
Én a Z-code-ot nézegettem annak idején, de végül nem lett belőle semmi más elfoglaltságok miatt. Talán majd egyszer...
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com
Azzal kezdtem én is, de aztán nagyon gyorsan letettem róla, mert egy kalap sz*r. Először is, nem tud UTF-8-at, másodszor pocsékul van megírva, komplett VM-et írtak hozzá ahelyett, hogy kalandjáték centrikus VM utasításokat implementáltak volna (mint amilyen az AdvGame). Továbbá a szövegek néha bele vannak keverve az utasításokba (nem mind, csak néha, 0xb2-es opkód...), emiatt konkrétan lehetetlen a többnyelvűsítés, már ha az UTF-8 hiány nem lenne eleve baj.
Meg hát az egész egy bloated szörnyűség, glk meg minden lib függősséggel. És a lefordított játékok is borzalmas katyvaszok, egy kis összehasonlítás az Időrégész VM kódjával (képek és szöveg nélkül, már ami nincs a kódba keverve):
- Inform5 Z-Codeban: 19666 bájt
- Glulx-ben (Z-Code utód): 27629 bájt
- AdvGame-ben: mindössze 1607 bájt...
A linkelt Z-Code és Glulx változat Érdi Gergő munkája. Valamiért azt írja a honlapján, hogy Inform6-os, de nem, Inform5-ös. Egyébként az ő változata végigjátszhatatlan, rettenetesen szívtam vele, végül írtam egy Z-Code debuggert (ez alapján), mert a gyári glulxdump finoman szólva is fos, elkresselt a francba, a debuggere meg konkrétan semmire sem jó. Na ezzel a saját debuggerrel derítettem ki, hogy az a baj Gergő változatával, hogy a kampót csak teljes erőnlét esetén lehet kihúzni, na de 3 parancsonként csökken eggyel az erő, és az étkezőtől a kampó 4 parancsnyira van...
Na itt adtam fel az egészet és kezdtem inkább saját kalandjátékmotor írásba. A végeredmény 187 SLoC-nyi parancsértelmező és VM, sokkal tisztább, szárazabb érzés.
Szép munka! Szerintem még megvan a C=64 lemezem, amin az időrégész van.
Ja, egy kérdés azokhoz, akik ismerik töviről hegyire az eredetit: mire kell a gyújtó és a lámpa? Ha nem veszem fel őket, akkor is simán eljutok a grifftojásos szikláig (ott viszont a korábban tárgyalt okokból kampóhiány miatt nincs tovább).
Az én változatomban csak akkor írja ki, ha egy tárgy van valamelyik kazamataszobában, ha van nálad lámpa, és gyújtód is van, amivel begyújthatod (nem kell külön paranccsal aktiválni, elég, ha nálad van). Felvenni fel tudod a tárgyakat a kazamatában, csak nem írja ki, hogy van ott valami, ha nincs lámpád.
tecc
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Szép! Csak mendemondában hallottam ezt a címet eddig. Mintha az idő rég betemetett bugyraiból ástad volna elő: mint egy szoftverrégész.
Két issue report a böngészős emulátorral (Firefox, Ubuntu):
A böngészős emulátorban a fullscreen gomb(F11) egyből továbblépteti a játékot is. Ha menűből lépek be, akkor viszont az emulált gép képernyője nem ugrik teljes képernyőbe.
Fullscreenben az egeret húzva a képernyő alján ott marad a nyoma az egérnek az utolsó sorban. Kép: https://imgur.com/a/up6IxU3
Az időrégész játék által elfogadott parancsokra van leírás valahol? Nem találtam meg. A JSON-be nem akarok belenézni mert gondolom spoiler lenne.
Hallgattam Casey Muratori előadásokat, és az egyikben beszélt az egyik vendég arról, hogy annó VAX gépen fejlesztettek Commodore-ra. Tehát már a saját idején is létezett ez a módszer, hogy a fejlesztő gép sokkal több erőforrással rendelkezik, mint amire fejlesztünk.
Szerk.: nyelvet váltani hogy kell?
A cél kifejezetten az volt, hogy egy régi magyar klasszikust portoljak.
Használd a natív emulátort. Ez a böngésző (egész pontosan az emscripten) baja, nyitottam hibajegyet, még nem javították. Valszeg nem is fogják egyhamar, mert van több ezer másik nyitott hibajegyük.
(Linuxos Firefox alatt egyébként megy az F11)FRISSÍTÉS: a játék már nem kapja meg a teljesképernyőváltás gombleütést (az a bug továbbra is van, hogy F11 leütés előtt előbb rá kell egyszer kattintani az emulátorra, de ez böngészőbug)
Ez meg SDL bug. A MEG-4 egy GPU textúrára generálja ki a képét, és amikor az SDL kirakja linear interpolation-el ablakméretre nagyítva, akkor az utolsó sornál túlolvas a textúrán, és azon kívülről is interpolálja a pixeleket, valami olyan szemetet használva, ami épp a GPU memóriájában van. Megoldást: -n kapcsolóval nearest interpolation-re lehet kapcsolni.Ez csak SDL-nél jön elő, GLFW, sokol, raylib "platform"-okon nincs ilyen gond, SDL alatt megpróbálok workaroundot keresni rá.FRISSÍTÉS: workaroundolva. Legalábbis elvileg, mert reprodukálni nem tudtam ezt a hibát (mindesetre a textúra utolsó utáni sorát nullázom, így nem lesz artifact)
Az eredeti játék leírása. Neten többhelyen fellelhető, meg rengeteg végigjátszás videó van a tecsőn. Meghagytam az eredetieket, csak bővítettem. (Az egyetlen különbség a végigjátszásban, hogy a lovagi torna után kell egy plusz "keletre" parancs.)
Indítsd a parancssoros ./advgame -d idoregesz.png lejátszót a "-d" kapcsolóval debugger módban és a @commands kilistázza az adott szobában elfogadott ige+főnév kombinációkat spoilermentesen.
Létezett, de itt nem igazán erről van szó. Maga az interpreter elég kicsi, a szobákat meg overlay-ekből veszi. Ez utóbbiakat megcsinálhatnád MEG-4 alatt is minden további nélkül, a Szprájt szerkesztőben megrajzolhatod a képeket meg PNG-t is tud importálni. A konvertáló mindenössze annyit csinál, hogy beolvassa a JSON-t, és ezeket a kigenerált overlay-eket bepakolja egy zip-be, és így egy mozdulattal betölthető mind. Annyi csak az előnye igazából, hogy JSON-t könnyebb írni, mint MEG-4 alatt az overlay-eket matatni, meg a konvertert telepakoltam ellenőrzésekkel (minden ige le van-e fordítva, nincs-e kétszer ugyanaz a parancs megadva, van-e hivatkozás nélküli szoba stb.)
Ha magyar nyelvű a böngésződ, akkor magyar nyelvű lesz a honlap és benne az emulátor és abban a játék. Ha nem, akkor egy csomó nyelvet beszél a honlap és az emulátor, és ilyenkor angol lesz a játék. Nyelvet váltani az oldal tetején lévő linkekkel lehet.
Natív alkalmazás esetén a rendszered nyelvét használja az emulátor, ott váltani pl. export LANG=zh (Linux), vagy vezérlőpult (Windows), de ilyenkor az -l (nyelvkód) kapcsoló is megadható a meg4 futtathatónak. A játék - megintcsak - az emulátor nyelvét használja alapból, ha az magyar, magyar lesz maga a játék is, egyébként angol.
Köszönöm!
Vagány. Nem hallottam még erről a játékról, de ki fogom próbálni.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
Akkor fiatal lehetsz még :-) Nagy C=64 klasszikus, és Rátkai híres arról, mennyire idegesítő és szemétparaszt tud lenni. Ez utóbbit orvosoltam azzal, hogy telepakoltam utalásokkal a leírásokat, meg kibővítettem a szókészletét.
(Pl. ki a fene tör nádat? Aki látott már életében nádat, az tudja, hogy azt bizony vágni kell, mert törni nem lehet, de még ha sikerülne is, tuti végigreped töréskor és akkor már nem is lesz jó búvárpipának. No meg ha van egy késed, akkor legelső gondolatod úgyis az, hogy "leszúrom" vele a farkast, anno fél napom ráment, hogy nem "szúr", nem "vág", nem "bök", nem "kaszabol", hanem "öl" az egyetlen helyes ige... Na ezeket mind mind javítottam.)
Azért annyira fiatal a 43 évemmel nem vagyok, ebből 36 évet foglalkoztam számítógépekkel, de ez a játék kimaradt. Elég bonyás volt mindent lefordítani, a zip-pé konvertálni, több projektet kellett egyenként klónozni, ráadásul a meg4 tároló 650 megát klónozott le, ezen hajbazer felszisszenne, hogy babzsákfejlesztő vagy, majdnem tökön szúrtam magam, mire leért. A képeket csúnyán jeleníti meg, még 24 bites Braille módban is, próbálj inkább szimpla, pixelszerű négyzetkaraktereket használni, szerintem jobban látható lenne.
Nem sokat tudok vele kezdeni, nekem ezek a szöveges kalandjátékok a gyengéim. Elmentem az idoregesz játék elején 3-szor nyugatnak, egy kastélyban vagyok, valami arénában megy küzdelem, de ott mi a péket csinálok? Ezeket sose tudom kitalálni, hogy milyen igéket vagy utasításokat fogad el a rendszer. Angolul nyomom. Eleve kilépni se tudok, csak Ctrl+C-vel.
Próbáltam a bögészőset, abban jobban a képek, de az egér nem használható, meg itt is elakadtam, valami éléskamrában, nem értem mit kell ott csinálni. A játék a "h" parancsra azt mondja, hogy viszgáljak meg mindent. Nem segít.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
Ez pedig igy ment regen. Iskolaban megbeszeltuk ki meddig jutott. Ha vki talalt vmit, akkor az az info a suliban terjedt. Igy tok lassan haladtunk persze, szerintem sose ertunk a vegere.
Feels like Matula
egy fazekast esetleg? :)
Egy apró frissítés az interpreterben, a főnevek sorrendje immár lényegtelen.
Példával: eddig elfogadta azt, hogy "átadom a gyűrűt a ladynek" (ahogy az eredeti játék tette), de most már azt is megérti, hogy "átadom a ladynek a gyűrűt". A játék JSON nem változott.
Nagyon jó, meg fogom nézni az engine-t is
Köszönöm!
Az engine kapcsán a fordító forrása itt található, ebben benne van maga az engine sztringként "program" néven (mivel azt belerakja a kimenet zip-be), de ez nem túl olvasható.
Javaslom inkább a debugger forrását, ez ugyanaz a kód, ugyanazokkal a függvényekkel stb., csak tele van "dbg()" hívással, így egyből látszik, mi mire való (és a gitlab syntaxhighlightolja, mert nem egy sztring).
Az egész 6 függvény egyébként:
- parse_ops() - ez a VM, ez értelmezi az opkódokat
- load_room() - betölti valamelyik szobát minden cuccával együtt (ez teszi ki a képet és meghívja a szobábalépés szkriptjével a parse_ops()-ot)
- parse_cmds() - ez tokenizálja és értelmezi a felhasználó szöveges parancsát (miután kikereste a szkriptet, meghívja rá a parse_ops()-ot)
- reset_game() - vár egy billentyűleütésre, majd betölti az induló szobát (a megadott szobaszámmal hívja a load_room()-ot)
- setup() - indulás utáni inicializáció, intró megjelenítése (végén meghívja a reset_game()-t a játék indításához)
- loop() - a fő parancsbekérő ciklus (kiírja a szövegeket, beolvassa a sztringet a felhasználótól és meghívja vele a parse_cmds()-t)
Ennyi.
Ja, még egy, az interpreterben hexa memóriacímek vannak, ami nehezen olvasható. Ugyanezt megtalálod a fordító elején, szépen olvashatóan: ag_conf_t struktúra a 0-ás szoba (intró és konfig), az ag_room_t pedig az összes többi szobáé. Ezek a lefordított szobák a kimenet zip-ben a "mem00.bin", "mem01.bin" stb. fájlok.
Derék munka, gratula. 👍
Tesztelve macOS 15.1-en.
/* bocs az esetleges helyesirasi hidakert */
Hadd kérdezzem meg, melyik változatot tesztelted?
- MEG-4-et böngészőben
- MEG-4 natív alkalmazást
- vagy az advgame terminálos interpretert?
Az elsőről tudom, hogy megy, a második csak elméletben (SDL-es, úgyhogy fordulnia kell gond nélkül), a harmadikat szintén nem tudtam tesztelni, de az meg tutira megy minden UTF8-as terminálon, mert minimál libc-s csak.
Uhh, a nagy igyekezetben az lemaradt.
A terminálos interpretert.
/* bocs az esetleges helyesirasi hidakert */
Jatszottunk vele havernal sokat. A masik nagy kedvenc a Newcomer, bar az mar egy masik szint :) Azt emlekszem amikor meglattam, csak neztem leesett allal... Azzal a jatekkal sztm kihoztak a C64 bol amit kilehetett....
A Newcomert az írásbeli és a szóbeli érettségi alatt vittem végig tanulás helyett (mondjuk így sem volt gond). A Gálya után a második játék volt, amit megvettem eredetiben, pedig akkoriban nem dúskáltam az aranyban. Utóbbi miatt szükségből a C64-et botor módon elkótyavetyéltem PC-re váltáskor, de a Newcomer azóta is itt pihen a díszdobozában a polcomon szép emlékként.
Az Időrégészt és társait is szerettem.
Ugy tudom nem megy a magyar nyelvu valtozat emulatoron... Az angol igen, de az nem ugyanaz... (Nem azert mert nem ertem, de az emlekek.... :D ) esetleg valami tudja, lehetseges-e magyarul PC-n jatszani? Elkapott a nosztalgia...
De, VICE-al müködik, csak crackelt bootlemez kell a másolásvédelem miatt.
Nem tudom, hogy amit most letoltottem milyen, de az megall az intro utan sajna.Ok kozben rajottem, csak rossz lemezt toltottem be :)
Aszta...... jogos amit asch ír, ez tényleg egy régészeti munka! Big respect!!!