Felújitott Időrégész

Fórumok

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

É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.

Szerkesztve: 2024. 11. 09., szo – 21:24

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.

Szerkesztve: 2024. 11. 10., v – 10:21

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?

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.

A cél kifejezetten az volt, hogy egy régi magyar klasszikust portoljak.

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.

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)

Fullscreenben az egeret húzva a képernyő alján ott marad a nyoma az egérnek az utolsó sorban.

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 időrégész játék által elfogadott parancsokra van leírás valahol?

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.)

A JSON-be nem akarok belenézni mert gondolom spoiler lenne.

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.

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.

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.)

nyelvet váltani hogy kell?

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.

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)

Elhiszem nektek. Valószínű tényleg olyanok a sirámaim, mint a gamer normiké, hogy miért nem RGB meg HDR képes, meg hogy hogy nem kezeli a gamecontrollert vagy az egérérzékenység-állító gombot.

Én még a point 'n click kalandjátékokkal is nehezen boldogulok, pedig ott nagy segítség, hogy a képernyő alján ott vannak az igék, hogy mit lehet csinálni, a képen felette meg ha a kurzort elviszed egy tárgy felé, az jelezni fogja, hogy valamit lehet csinálni vele. Úgy jobban össze lehet rakni a dolgokat, de néha még úgy is megszenvedek.

The world runs on Excel spreadsheets. (Dylan Beattie)

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.

Nem sértésnek szántam, de tényleg nem ismertem eddig senkit, aki anno tolta volna a C=64-et, de mégis kimaradt neki Rátkai.

Elég bonyás volt mindent lefordítani, a zip-pé konvertálni

??? Egyetlen függőség nélküli parancs a fordító, aminek a fordítása "make -C meg4/tests/converter all", semmilyen lib sem kell. Egyébként meg nem kötelező a zip, simán letölthetted volna a kész idoregesz.png floppit a honlapról, azzal is megy.

több projektet kellett egyenként klónozni

??? Csak kettő. Egy a fordítónak, egy a játéknak. Ha nem akarod fordítani, csak játszani, elég az utóbbi. A kész floppit direkt belinkeltem a topiknyitóban.

ráadásul a meg4 tároló 650 megát klónozott le

Mert mohó voltál, és a main-en kívül a binaries branchet is leklónoztad. Nem kell. (És hogy miért van binaries branch, azért tessék a gitlab-nál reklamálni, mert még mindig nem lehet fájlokat csatolni a tag-ekhez sem a release-ekhez, így maradt ez a kényszermegoldás.)

A képeket csúnyán jeleníti meg,

Naná, mert terminál.

még 24 bites Braille módban is, próbálj inkább szimpla, pixelszerű négyzetkaraktereket használni, szerintem jobban látható lenne.

Adj hozzá kódot, vagy legalábbis algoritmust. Én nem ismerek ilyent négyzetkarakterekhez, a Braille-hez ellenben igen (konkrétan for(u = 0x2800, o /= q, l = 0, k = 1; l < 8; l++, k <<= 1) u += (o & k ? l : 0);, o a karakterre eső pixelek összege, q a darabszámuk, u meg az UNICODE kimenet).

Ezeket sose tudom kitalálni, hogy milyen igéket vagy utasításokat fogad el a rendszer.

Pont az a játék, hogy rájöjj. De egyébként futtasd "advgame -d" (debug) kapcsolóval, és a szobában "@commands" parancs megmondja, mit fogad el és mit nem.

Eleve kilépni se tudok, csak Ctrl+C-vel.

Eleve úgy volt tervezve, hogy a kilépés a Ctrl+C, ezt még a README-be is beleírtam.

Próbáltam a bögészőset, abban jobban a képek

A képek egy-az-egyben az eredeti játékból valók.

de az egér nem használható

Persze, mert ez egy szöveges gépelős kalandjáték, a point'n'click játékokat csak évekkel később találták fel, mint hogy az Időrégész eredetileg megjelent.

itt is elakadtam, valami éléskamrában, nem értem mit kell ott csinálni

Isten hozott a Rátkai játékok csodálatos szopatós világában! Figyelmesen olvasd el a szoba leírását meg vizsgáld meg az ablakot és a polcot, tettem rá utalásokat (igen, azért bővítettem ki a leírásokat, mert szerintem is lehetetlen rájönni magadtól, hogy fel kell mászni a polcra). Ja, és zabálj, zabálj, zabálj, jó sokszor, feltornázza az életerőd.

Pedig toltam C64-en, csak nem a sajátomon, hanem barátokén, meg szomszédban, stb.., és ez nekem kimaradt.

A bonyolultságot nem sértésnek írtam, de nagyon nem volt egyértelmű, mert két tárolót is kellett klónozni, ráadásul az egyikben a converter el van rejtve egy tests mappába, én meg nem azt fordítottam le, hanem a meg4-et.

A kilépésnél be kéne emeljed exit vagy quit parancsnak, kényelmesebb, mint Ctrl+C-t nyomkondi, az egy kicsit csúnya. Az egeret csak azért vártam el, mert a böngészős változatban van grafika, meg égtájak szerinti nyilak, ebből én azt hittem, hogy ezt a célt szolgálják. Nyilván a terminálos változatban nem várnék el ilyet, értem, hogy ez egy másik műfaj, nem point 'n click, hanem text adventure.

The world runs on Excel spreadsheets. (Dylan Beattie)

A bonyolultságot nem sértésnek írtam, de nagyon nem volt egyértelmű, mert két tárolót is kellett klónozni, ráadásul az egyikben a converter el van rejtve egy tests mappába, én meg nem azt fordítottam le, hanem a meg4-et.

El kéne olvasni a használati utasítást :-D :-D :-D Nem véletlenül van belinkelve itt is, meg a README-be is.

Azért a kedvedért kigyomláltam a binaries-t, így most csak 120M a teljes git repó (több, mint egy éve írom, a main history így is elég sok). Ha valaki nem akar commitolni a repóba, csak fordítani, annak:

Javaslom a tarballt inkább (mondjuk a meg4-main.zip linken), csupán csak 9 Mbyte az egész, mert a sok git szottyot nem tartalmazza, csak a legfrissebb kódot. Ezzel is simán megy a fordítás, mert subrepókat meg hasonló faszságokat nem használok, pont azért, hogy tarballként is lehessen használni.

(ps: elnézést az okozott kellemetlenségekért, a converter azért van a MEG-4 repóban, mert igazából a meg4_export() függvényével ment. De dolgozom rajta, hogy kiszedjem egy önálló repóba.)

A kilépésnél be kéne emeljed exit vagy quit parancsnak, kényelmesebb, mint Ctrl+C-t nyomkondi

És mi van, ha valamelyik játék definiálja magának ezeket a parancsokat? Pl. "exit tram"-et gépel be a felhasználó, erre meg ahelyett, hogy leszállna a karakter a villamosról, kilép a program? Nem véletlenül és nem is lustaságból maradtam a Ctrl+C-nél. Jelenleg nincs egyetlen beégetett parancs sem, mind a játék adatfájlából jön.

Az egeret csak azért vártam el, mert a böngészős változatban van grafika, meg égtájak szerinti nyilak, ebből én azt hittem, hogy ezt a célt szolgálják.

Az eredeti sem tudott ilyent, de dolgozom rajta, hogy a JSON-be lehessen definiálni kattintgatós navigációt. Remélhetőleg hamarosan kész lesz.

A tárolónál lehet én voltam mohó, rossz megszokásból mindig teljes klónozást csinálok, pedig tudom, hogy több, elég lenne csak egy shallow clone vagy a tarball, ahogy mondod. Nem is az lepett meg, hogy több, mint az aktuális kód, hanem hogy 70× akkora, mint az aktuális kód, erre nem számítottam. Az bölcs, hogy megnyirbáltad, de a 120 MB is soknak tűnik, de végül is nem olyan fontos, az is elég, ha kiírod a readme-be, hogy nem ajánlasz teljes klónozást, csak fejlesztésre, fordításhoz máshogy szedjék.

Erre az exit parancs problémára nem gondoltam, de megkerülhető. Pl. ha valami speciális karakter van előtte, pl. #, akkor az emulátor belső parnacsának venné. Olyasminek programozd le, mint a debuggerben a @command parancsot, csak ez @exit vagy @quit lenne.

The world runs on Excel spreadsheets. (Dylan Beattie)

de a 120 MB is soknak tűnik

Csak tűnik, de nem az.
- a main branch 9 M (ebből a flopik 1.5 M, a wasm 5.7 M, doksi html 2.1 M (*)),
- a binaries most 46 M (az iso 16 M plusz platformonként meg architektúránként kb. 4 M),
- a fennmaradó kb. 70 M meg mind mind a git szutyka. Ez van.

(*) - Hogy a honlapot kiszolgáló "public" mappa benne a wasm-al és a html doksikkal miért került a main-be, azért megint tessék a gitlab-nál reklamálni. Külön branch, mint a github-on a pages nem működik rendesen (mert elbaszott CI, a gendoc-nál próbáltam és folyamatos szívás, VM runner meg pipline kutyafasza, pedig igazából annyi csak a dolga, hogy echo 'Nothing to do' és néha még ez is elkressel... Komoly, nem vicc, nem lehet CI pipeline nélkül használni ezt a szart. Na de elkanyarodtam, a gitlab-ot majd szidom máskor).

csak ez @exit vagy @quit lenne.

Hát, a @-ot kifejezetten a debugger parancsoknak tartottam fenn, de egye fene, "@exit" hozzáadva.

A pixeles grafikára: nem tudok algoritmust adni, de lényegében egyforma blokk karakterekkel teszed ki a pixeleket, az RGB színük adta színnel, persze előtte az eredeti képet átméretezed. Ezt a terminálos megoldásra javaslom csak. Ez a Braille mód nem elég sűrű, túl szellős, nehezen látszik vele a kép.

Egyébként lehet írok egy ilyet, mert nekem szükségem lenne rá. Én nem emulátorhoz használnám, hanem régi CGA/EGA játékokból kinyert grafikát konvertálnék ANSI artos háttérképre, retró esztétikából.

The world runs on Excel spreadsheets. (Dylan Beattie)

lényegében egyforma blokk karakterekkel teszed ki a pixeleket

Csak hát azokból nincsen túl sok. Tokkal vonóval 32 darab, ebből az első sor élből felejtős, maradékból talán 2 jóval rövidebb, 4 elemű skála hozható csak össze. Akkor már az alapértelmezett ASCII karakterekskálával jobban jársz, abban sokkal több elem van.

régi CGA/EGA játékokból kinyert grafikát

Ez fake, csak szólok. Ez a Maniac Mansion esztétikája (de abból nem rémlik ez a jelenet), a Day of the Tentacle pedig valójában így nézett ki. Ha nem cél a függőségmentesség, akkor van még a libcaca függvénykönyvtár (bár megjegyzem okkal egy szarkupac a logója). Ha meg egyszeri kell, annyi online konverter van, mint a fene.

De ha mégis fejlesztenél, github topic. (És ne felejtsd el, hogy még át is kell méretezni 1 x 2 aspect ratio-s "pixelekké" előtte.)

(de abból nem rémlik ez a jelenet),

Pedig ez a lépcső rögtön az első helyiségben van ahogy belépsz a ház ajtaján, a nyitott ajtó jobbra pedig lefelé visz talán valami áramgenerátorhoz, vagy ilyesmihez, abban már nem vagyok biztos. (A konyha ajtaja volt balra a lépcsőtől ami már nem volt a képen.)

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS

Nem is kell sok, egyféle elég, egy tömör téglalap, a színét te változtatod, hogy milyen színkóddal íratod ki. Lényegében pixeleket raksz ki, de nem grafikus bufferbe, hanem karakteralapon. Az aspect ratio az valóban problémás, de az eredeti C64, IBM CGA/EGA változatban sem voltak a pixelek tökéletesen 1:1 arányúak, úgyhogy ezen nem rugóznék.

Egyébként nem fake az a kép, ugyanaz a játék, amiről te is tettél be képet, csak egy másik jelenete. Nyilván a képet én nem az internetről szedném, a játékból menteném ki, mondjuk azt még nem tudom hogyan, aztán alakítanám át blokk-karakteres, színkódos ANSI art-tá, ami megint menne vissza képpé, hogy háttérképként kitegyem. Tudom, kicsit bonyás, de a háttérképet így tudom megoldani. Elvileg mehetne a X root window-ba egy terminál is, de az több erőforrás.

The world runs on Excel spreadsheets. (Dylan Beattie)

Egyébként nem fake az a kép, ugyanaz a játék, amiről te is tettél be képet

Ez nem egy PC-s (CGA/EGA videókártyás) Day of the Tentacle, hanem egy C64-es Maniac Mansion.

Lényegében pixeleket raksz ki, de nem grafikus bufferbe, hanem karakteralapon.

Ennél bonyibb a dolog, mert a karaktereknek három összetevőjük van: a betű glyph (ebben a pixelek száma és sűrűsége hivatott reprezentálni a fényerőt), valamint egy háttér- és előtérszín (régi emulátorokon ebből 16 van, újabbakon 24-bit, de nem használhatsz minden háttérszínt minden előtérszínnel, vannak szabályok). Utóbbiban az xterm az etalon, de a doksi egy kalap szar, a forrását kell nézni, mert nem úgy működik, ahogy le van írva (különösen a több, mint 16 színű terminálos rész, ami nem VT szabvány).

Az aspect ratio az valóban problémás, de az eredeti C64, IBM CGA/EGA változatban sem voltak a pixelek tökéletesen 1:1 arányúak, úgyhogy ezen nem rugóznék.

De muszáj, különben függőlegesen kilapított lesz a kép. Az X tengelyen kétszer annyi mintavételezés kell, mint az Y tengelyen, hogy aránytartó maradjon a karakteres végeredmény.

aztán alakítanám át blokk-karakteres, színkódos ANSI art-tá

Ezt csinálja a fentebb linkelt libcaca.

ami megint menne vissza képpé

Ehhez meg egy terminál emulátor kell. Nem mind kezeli egyformán a ANSI escape CSI kódokat, ha egyszerű és integrálható megoldást akarsz, akkor javalom az st forrását nézegetni, esetleg belerakni ezt-azt ha nem lenne elég. A többi (különösen a libvte) egy bloated hulladék, tele bugokkal, az xterm-nek meg az UTF-8 karakterekkel van gondja (uxterm-nek is, a fontkezelése szar) és hát rohadtul bloated az is. Az st sem tökéletes, de legalább kicsi és áttekinthető a forráskódja, könnyedén átírható, hogy egy BMP képet generáljon mondjuk.

Tudom, kicsit bonyás, de a háttérképet így tudom megoldani.

Nem hiszem, hogy van egyszerűbb megoldás.

Ja, az lehet, de vannak olyan közel, hogy nem rugózok rajta. Természetesen én a PC-s verziót preferálom, mert azzal játszottam többet, meg a PC EGA színpalettát könnyebb utánozni RGB-vel, de nincs ellenemre a C64-es verzió tompább színvilágú esztétikája sem, az is jóféle retró hangulat.

The world runs on Excel spreadsheets. (Dylan Beattie)

Szerkesztve: 2024. 11. 10., v – 17:05

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.

Szerkesztve: 2024. 11. 10., v – 16:56

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 */

Tesztelve macOS 15.1-en.

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.

Szerkesztve: 2024. 11. 11., h – 11:28

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.

Aszta...... jogos amit asch ír, ez tényleg egy régészeti munka! Big respect!!!

Mültkor mobilon futottam bele. Meg persze browserben régóta van. Sajnos a Commodore billentyűt nem emulálta (az meg kellene az ékezetes szavakhoz)

Megnézem ezt is, így 50 felett is álmodtam már a játékkal, anno hihetetlen nyomot hagyott :)

http://www.micros~1
Rekurzió: lásd rekurzió.

Meg persze browserben régóta van.

Ha erre gondolsz, akkor az sajnos nem végigjátszható, nem működik azzal a walkthrough-val, amivel a VICE-os verzió igen. Ha meg erre, akkor ahhoz valóban kéne Commodore gomb, szóval ez se végigjátszható...

Sajnos a Commodore billentyűt nem emulálta (az meg kellene az ékezetes szavakhoz)

Hát igen, marad a VICE, de annak meg macerás a beröffentése. Nálam a MEG-4 simán a böngészőben fut, nem kell telepíteni semmit, és ez is, meg a konzolos lejátszó is simán elfogadja a megszokott ékezetes karaktereket, nem kell speciális billentyű hozzá.

Pont az ilyenek miatt döntöttem az újraimplementálás mellett, hogy kiküszöböljem az összes C=64 emulálással járó gondot.
No meg a jövőtállás miatt: mind a natív MEG-4, mind a konzolos lejátszó sima ANSI C, gond nélkül fordítható bármilyen modern gépre és platformra, maga a felújított Időrégész játék és a logikája meg egy mezei JSON adatfájl csak.

anno hihetetlen nyomot hagyott :)

Bennem az Új vadnyugat hagyott mély nyomot, kevés játék akasztott ki annyira, mint az: "felveszem az űrruhát" - "Nem látom itt azt a tárgyat"... "felpróbál űrruha"... "hord űrruha"... "felhúz űrruha"... "bebújik űrruha"... "bemászik űrruha"... "anyád!!!"...

Erre gondoltam, de sose próbáltam végigjátszani . Kicsit elfogott a nosztalgia, mentem pár lépést benne, csináltam pár dolgot, de nem néztem, mennyie végigjátszható.
Traffic volt amúgyis itt a kedvencem, meg persze a Wizard of Wor :)
https://c64.krissz.hu/idoregesz/play-online/

http://www.micros~1
Rekurzió: lásd rekurzió.

Új vadnyugat teljesen kimaradt (csak a leírását olvastam), a Bosszú volt még, amivel játszottam - sajna tört verzió így sokra nem jutottam. Főleg, hogy az első parancs a "vár" lenne, az se esett le - mindig meghaltam az elején :)

De az időrégész volt életem egyetlen kalandjátéka, amit leírás nélkül végig tudtam játszani, sose volt többé ilyen (Maniac Mansion még, amivel 90%-ig jutottam, igaz, hónapokat öltem bele :)

http://www.micros~1
Rekurzió: lásd rekurzió.

Zseni!

Nosztalgiafaktor felcsavarva 11-re, kösz szépen!

En ugy tudom, a srac ezeket ujrairta JS-ben vagy valami ilyesmi a sztori.

Á, dehogy. Nézd csak meg mondjuk az Időrégész oldalának forrását, behúzott egy C64 emulátort, a lemezképet meg becsűrte base64-ben:

const O={
"keyboardEnabled":1,"keyboardPanel":1,"runStopEnabled":0,"restoreEnabled":0,"controlPortsEnabled":0,"controlPortsPanel":0,"joyPanel":0,"controlPortsConnected":[0,0],
"audioEnabled":1,"volumeControl":1,"reset":0,"saveExitState":0,"saveExitOptions":0,"dragAndDrop":0,"macro":{
119:[{"do":"screenRefreshOff"},{"do":"audioOff"},{"do":"controlsOff"},{"do":"img","src":"/images/idoregesz-tortenet.png","bo":0}],120:[{"do":"ffStart"}],
500:[{"do":"keydown","code":"Space"}],
700:[{"do":"keyup","code":"Space"}],
720:[{"do":"ffStop"}],
721:[{"do":"screenRefreshOn"},{"do":"controlsOn"},{"do":"audioOn"}],
722:[{"do":"d64Attach","d64":`IIRQTgjl07cPSKcliBuB2A1PMiDMAZvBocfAKyJgZryZ0bwCuLAnIlhgIzcb74wAJgAmANQ ....és még jó hosszan ez...

Nem JS-ben van az Időrégész játék forrása, hanem csak egy bitkolbász.

Nekem Linux+FF gond nelkul megy az osszes.

Nálam bevallottan paranoid a beállítás, és ezt mondja rá: "...blocked a script (script-src-elem) at https://c64.krissz.hu/js/ty64.js?v=31 from being executed because it violates the following directive..."
AdvGame-nél nincs emulátor, nincs JS függvénykönyvtár, az egy szem "advgame.js"-t, amit az emscripten kiköpött magából, azt szó nélkül futtatja az FF ugyanezekkel a beállításokkal.

Affelől semmi kétségem, hogy nálam elsősorban az én paranoid FF beállításaim okozzák a gondot, de nem szívesen kapcsolnám ki őket egy C64 emu kedvéért.

Jaaa tenyleg... hogy kozben irt egy C64 emulatort is. Egyikotok sem vesztegeti az idejet ugy latom. :)

En meg ezeknel tartottam:

http://impossible-mission.krissz.hu/

http://sziget.krissz.hu/

http://traffic.krissz.hu/

Ezek JS-re atirt jatekok. Az Idoregesz nincs koztuk.

Ja, nem semmi, igazán szép munka. Csak sajnos nekem nem jó, mert egy C64 emulátor lemezképpel abban a formában konzerválja a játékot, ahogy volt, nem igazán alkalmas portolásra meg bővítésre. JSON viszont csak egy szöveges adatfájl, bármikor újra és újra feldolgozható bármilyen újabb platformon, és könnyen hozzáadható újabb dolog.

Egyébként a célom nem is az Időrégész volt konkrétan, hanem egy pöpec kalandjátékmotor készítése MEG-4 alá, az Időrégésszel csak demonstrálom, hogy működőképes a megoldás (meg hát kellett legalább egy Rátkai játék MEG-4 alá, na). Ha a point'n'click bővítést is át tudnám hozni, akkor lenne igazán királyság. Elvi akadálya nincs, csak melós.

Szerkesztve: 2024. 11. 20., sze – 09:40

Hallgatva a modern idők szavára, a játék nemváltoztató műtéten esett át (pun intended :D)

Az Időrégész point'n'click kalandjáték letölthető, kipróbálható, böngészőben is fut (nem kell hozzá MEG-4).

Kifejezetten Raynes kedvéért kattinthatóak lettek az égtájbetűk és átmozgattam a fordítót ebbe a meg4_advgame repóba (ez jóval nagyobb szívás volt, mint terveztem, a MIDI támogatást nem is tudtam áthozni, ha valaki ilyent akar, előbb a MEG-4 converter-ével Amiga MOD-ot kell belőle csinálni). No mind1, a fordító használata:

- advcomp idoregesz.json output.zip, mint eddig, szöveges kalandjátékot fordít, ami játszható MEG-4 alatt és az advgame interpreterrel is.
- advcomp idoregesz.json output.ag, point'n'click kalandjátékot fordít, ami az advgame interpreterrel játsztható (pontosan ugyanabból a JSON-ből).

A játék forrása továbbra is sima JSON fájl, csak többféle opciót is elfogad immár, ehhez is született rendes doksi, ami itt található: https://bztsrc.gitlab.io/meg4_advgame/

Az interpreter szintén fel lett turbózva, de a cc advgame.c -o advgame továbbra is működik, és függőségmentes, terminál alapú programot fordít. Viszont ha valaki akarja, akkor fordíthat belőle ablakos (SDL-es) cuccot is, meg webes lejátszót is. Ez is gigaszopás volt, mert "One does not simply compile something with emscripten", ugye. A portoláshoz eléggé át kellett variálnom az eredeti kódot, mert a szutyok emscripten alatt a program nem blokkolódhat, ami egy ilyen játéknál eléggé szívás.

Magát a játékot is feltunningoltam kicsit, sokkal több szinonímát és parancskombinációt elfogad (pl. "csinál tutaj" helyett "használ lián", vagy "vág fa" helyett a "használ balta" parancsokat is megérti már). Ezen kívül a point'n'click miatt volt, ahol egyszerűsítettem, bár az eredeti játék parancsaival továbbra is gond nélkül végigjátsztható. Ugyanakkor a grafikához is hozzá kellett nyúlnom, jelentősen kiegészítettem a látványvilágot is (de ha output.zip-et fordít valaki, akkor továbbra is az eredeti képek fogadják). Itt olyasmikre gondolok, hogy ahhoz, hogy össze lehessen kattintani azt a parancsot, hogy "ad pénz szerzetes", kell egy szerzetes a képre ugyebár...

ps: versenyfelhívás!!! Hatalamas szóbeli csokit ajánlok fel annak, aki kitalálja, hogy a hiányzó sprite-okat mely játékokból lopkodtam össze! Annyit segítek, hogy például a kápolnában a pap a Commodore64-es Battle Chess bishopja :-)

Szerkesztve: 2024. 11. 21., cs – 08:15

Na még pár apró jóság:

- találtam egy bugot a rozsdás kard vizsgálatánál, javítva.
- a képernyő mindenhol pontosan tükrözi a játék aktuális állapotát (pl. ha benyomtuk a követ a kútban, akkor látszik az üreg, vagy ha épp elejtette valaki a pénzét a várudvaron, az is megjelenik a képernyőn, amíg fel nem vesszük)
- a webes lejátszóhoz egy olyan HTML kell, amiben base64 kódolva van a játékfájl. Az advcomp most már tud ilyent generálni, az advgame pedig képes beolvasni (natív alkalmazásként is, nemcsak webesként).
- a MEG-4 eddig is kezelte a ZIP-et, de most már az AdvGame 2.0 formátumot is képes importálni. Igaz, a point'n'click nélkül, automatikusan visszakonvertálja szöveges kalandjátékká. (Mondjuk jobb eleve ZIP-et generáltatni az advcomp-al, mert akkor részletes hibaüzeneteket kapunk.)
- a lefordított játékfájlt is felraktam a repóba a JSON mellé: idoregesz.ag (112KiB, a formátum leírása itt)