Píšeme textovku na osmibitu
Poslední dobou se celkem roztrhnul pytel s textovkama pro osmibitové Atari, je fakt, že se jich povedlo spoustu zachránit, nějaké se objevili i mimo naše luhy a háje. Co tím myslím, no třeba, že se objevila česká textova na polském portále, nebojte se, taky na ni dojde.
Vraťme se ale zpět k tématu, chceme si splnit dětský sen, napíšeme si textovku pro Atari a neumíme moc programovat, ale co, textovka přece není tak náročná na napsání jako nějaká akční hra. Chyba lávky, nesmíme zapomenout, že budeme muset děsně, až brutálně šetřit pamětí, takže na nějaký rozsáhlejší a košatější projekt můžete rovnou zapomenout. Tedy, pokud nechcete mít pět dílů hry, i když i to by šlo nějak technicky vyřešit. Pojďme si probrat mé postřehy a nápady, jak se k celému problému postavit čelem. Ano, zkoušel jsem to před deseti lety, zkoušel jsem to loni a zkouším to i teď.
Máme nápad na super hru, tak se do toho pustíme, z vlastní zkušenosti vím, že jen nápad nestačí, je nutné se poprat s limitem Atari, pokud neumíme nic jiného než obyčejný Atari Basic. On Atari Basic není špatný, však taky spousta pěkných her v něm vznikla a u některých to ani nepoznáte.
Co potřebujete, abyste ušetřili krapet nějaké místo? No engine, nějaký dobrý, z mého pohledu je zbytečné vymýšlet kolo. Doporučil bych sáhnout po něčem co tu už je a funguje. Prostě můžete sáhnout po enginu z Chrámu Zkázy anebo z Prudent Dactyla a mírně si je upravit k obrazu svému, každý z nich má něco do sebe. Ten z Chrámu zkázy jsme my ataristi sprostě ukradli ze Spectra, nebudeme si nic namlouvat, že to tak nebylo, bylo. V tomhle engine není napsaný jen Chrám Zkázy, je v něm třeba napsaný i Emgeton Story a další hry. Bohužel trpí jedním takovým menším neduhem, objekty by se neměli jmenovat stejně, to pak hra nefunguje korektně. Na druhou stranu je v něm celkem hezky vyřešeno přecházení mezi lokacemi a sbíraní a pokládání objektů. Ovšem bez papíru a tužky se neobejdete, budete si muset poznamenávat čísla objektů a přepočítávat jejich stavy do znaků. Jasně zní to složitě, ale není to vůbec složité.
Parser Chrámu zkázy je celkem v pohodě a docela šetří místo, proto třeba Emgeton story mohla být tak rozsáhlá hra. Je tu jen jeden menší problém, jste omezeni délkou řádku v Atari Basicu, také budete bojovat se psaním popisu lokací, respektive asi budete psát jednoduché věty, tenhle engine moc nebere čárky v popisu lokací a objektů. No je tomu proto, že texty jsou psány pomocí zápisu DATA a tam je oddělovač čárka. Je to řešitelné, prostě si vyberete jiný znak pro čárku a ten pomocí font editoru změníte na onu čárku. To je fígl co?
A je tu velice častá otázka, font, písmo, český font? Jak to dostat do Atari, aby moje hra nebyla napsaná v tatarštině. Tady by měli zpozornit všichni s kým jsem tohle téma řešil, jde to jednoduše a, nebo složitě. Ta jednoduchá verze se zdá být složitá, ale není to tak.
Můžete vykrást hru, kde je font uložený v Basicu, pro příklad uvedu třeba mojí Debil’s action, tam je font mezi řádky 0 až 12, v podstatě je to soubor znaků v REM řádcích a nějaký super hackem se toto přemístí do paměti jako font, co si pamatuju z dětství, byl to jednoduchý editor fontu, který po namalování vygeneroval těch 12 řádků v Basicu. I kdybyste mě mučili, nevzpomenu si, jak se to jmenovalo, ani kdo to napsal a prostě vůbec. Měl jsem to na kazetě a pár kamarádů tohle použilo do svých her, bylo jednoduché a hlavně rychlé. Font se neinicializovat tři hodiny, prostě blik a bylo.
Těch možností je spousta jak prostě něco někde vykrást, ale určitě chcete svoje vlastní písmo, tak si ho namalujte, třeba na PC a pak jen uložte ten kilobajt dat. Už je to složité, žejo. No a jak to dostanete do svého Basic programu? Jednoduše, prostě si vezmete čistý basic, stačí si tam napsat jeden dva řádky, hezky uložíte pomocí save. Pak z něj uděláte xex s pomocí utilitky bas2xex a pomocí SuperPackeru ten font přiložíte do ono xexu, na správnou adresu v paměti a uložíte. Máte developerskou verzi Atari Basicu s fontem, stačí pak jen vhodným poke 756,152 vyovolat. Mimochodem $9800 je ta adresa kam si ten segment dat můžete přidat. Zdá se, že je to bezpečné, tedy alespoň to říkal Fandal.
No jo, ale jak nahraju svůj rozpracovaný projekt, přece to nebudu dělat dokola, když něco píšu. Ne nebudete. Máte xex a Atari basic umí přihrávat data, stačí místo save dát list a poslat svůj listing místo na obrazovku na dané zařízení, v mém případě je to H:. No a když to chcete našíst, tak stačí enter a zařízení a můžete testovat.
Dalším celkem zajímavým způsobem je možnost si vygenerovat balík dat fontu a inicializovat jej, je to něco obdobného, co jsem zmiňoval před chvilkou, ale pozor. Ať děláte, co děláte, může se stát, že se vám ten font časem bude krapet kurvit. Čím míň paměti, tím větší haluz.
Jsem líný a psát basic program přímo v Basicu je pro mě očistec, a tak používám k tomu vhodný editor, MemoPad od Erica Parenta je vhodný dost. Jasně můžete i použít něco lepšího třeba Notepad++, to ale pak doporučuju použít k načítání a ukládání jednotku H6: nemusíte pak řešit problém s CR LF a zpět.
Tak co? Jdete stále do toho? No tak to je dobře. Nezpomeňme na několik úskalí co nás mohou ještě v Atari Basicu potkat. Třeba takové podmínky, to je děsný vojeb. Řádky jsou v Atari basicu omezené a jednu blbou podmínku, můžete mít třeba i pěti řádcích, když manipulujete s několika objekty, dejte si na to pozor, nebo se vám hra bude chovat značně nevyzpytatelně.
Další docela šílenou věcí je slučování řetězců, ano já používám k výpisu na obrazovku textové řetězce, nemusím se starat s rozdělováním slov a hlídat si to, mírně jsem vylepšil vypisování textů z Chrámu Zkázy, kde to bylo trošičku pomalejší a nemusím prostě nic řešit, ale naučit se správně spojovat řetězce bylo něco co mě přivádělo k šílenství.
Ještě jste si to nerozmysleli? No tak supr, teď se jen modlete, aby vám nedošla paměť.
Atari Basic má tedy několik výhod, pak taky hlavně mraky nevýhod, je jen na vás, jakou cestou se vydáte. Jednoduhé je rozhodně, pak z Basicu udělat výsledný XEX a lehce přilepit font.
Fajn, nechcete Atari Basic, tak můžete sáhnout po něčem lepším, co třeba Turbo Basic, ten by šel. Jenže jsou tady nějaké limity a problémy jako u Atari Basicu.
Turbobasic je fajn, je celkem rychlej a dá se s ním udělat fakt docela pěkná textovka. Jenže je tu několik ale, pokud tu svou hru chcete mít hezkou, tak asi nechcete, aby se vám hra nahrávala do Turbobasicu, aby se vám kdokoli koukal do zdrojáku. Jasně je tu několik řešení, Turbobasic má kompiler, runtime, a dokonce i linker, který vám vyrobí požadovaný xex. Nezní to lákavě? Zní, jenže je tu jeden problém. To, co vám suprově funguje v Turbobasicu, vám nemusí vůbec fungovat s linkerem, zatím jsem nenašel příčinu, ale jakýkoliv skok do podprogramu a skok v podprogramu má za následek chybu.
Na druhou stranu si můžete hru napsat v Turbobasicu, pěkně si ho spustit z diskety a natáhnout svůj basic program, aniž by to hráč poznal. Na disketu si můžete dát i fonty a načítat je z ní. Kdyby vám docházelo místo v paměti, můžete ošetřit načítání textů ze souboru, třeba přidat i obrázky. Nezní to lákavě? Zkoušel jsem v něm napsat takový hokus pokus engine a v ní pár lokací hry, kterou jsem nerealizoval – Kubánská spojka, můžete se podívat, jak jsem to řešil, dneska bych to asi napsal jinak. A ještě jedna věc je celkem pohodová, v Turbobasicu můžete používat zvesela podmínky IF a ENDIF, to už se to píše jinak.
Co tu máme dále? Jasně je tu ještě Fast Basic, má celkem hezký editor, umí zkompilovat váš výsledný soubor. Líbí se mi, ale má jednu takovou nedobrou vlastnost, celkem blbě se v něm pracuje s řetězci, takže jsem se na něj vyprdnul, hned v úvodu.
A jako poslední je hodně, ale hodně zajímavý jazyk, jmenuje se Action! Nedávno jsem si s ním docela hezky pohrál, ale má opět jednu nedobrou vlastnost, tou jsou opět řetězcové proměnné a po zkouškách s nimi, mě začala z toho bolet hlava.
Takže asi nejlepší pro vaši tvorbu textovky zůstává Atari Basic jako v báječných devadesátkách. A, nebo také ne. Wolf se před rokem rozhodl, že napíše TXT engine lite pro Atari, takže si prošel celou touhle anabází jako já, no vlastně jsme to procházeli spolu až nakonec zůstal u Action! A nějak si poradil s těma proměnnýma.
Nakonec sem hodím pár odkazů, třeba přijdou vhod.
Memopad ten si stáhnete z tohohle odkazu https://x868k.com/apps/memopad/?os=win
Kdybyste potřebovali si počíst o Turbo Basicu a potažmo dalších jazycích, pak se koukněte sem a rozklikávejte https://atariwiki.org/wiki/Wiki.jsp?page=Turbo-BASIC%20XL
Turbobasic Engine - Kubánská Spojka (27,6 KiB, 2 405 hits)
Co probůh znamená věta: „Ať děláte, co děláte, může se stát, že se vám ten font časem bude krapet kurvit. Čím míň paměti, tím větší haluz.“?
Basic leze do paměti až po RAMTOP (peek(106)). Normálně je tam 160 (tj. až po A000), když si jebneš font někam (velikost fontu je kolik, 128 znaků x 8 bajtů tj. 1KB), dostaneš se tím na 9C00. Tj. do CHBAS (756) dáš $9C=156, a tu stejnou hodnotu uložíš do RAMTOP (106). A pak už ti BASIC nic nepřepisuje. Za což nedám do ohně svoji ruku, ale nějakou cizí klidně.
Navíc lze samozřejmě před vlastním natažením basicu provést pankáčovinu spočívající v kopii OS do RAM a přepsání původní znakové sady vlastní. Tím to pak v paměti pro basic nezabere nic. Jadadý, možná i jadadá!
@Jindroush: No sem to myslel spíš jako s tou jednou utlitkou, která prostě veme balík řetězce a jebne ho někam do paměti, jak pomalu dochází pamět v tom Basicu, tak se prostě ten font kurví, jako je možný, že utilitka je na hovno napsaná. Když to písmo hodím jak popisuješ, tak je to v pohodě, teda zatím sem se nedostal ještě na hranu, ne že bych v tom Basicu teďko něco psal.
Pekne napísané. Áno presne ako píše Jindroush, stačí RAMTOP(106) znížiť o 1024bytov(čo je veľkosť fontu) a do takto rezervovanej pamäte nahrať font.
Pár linkov som zhrnul u seba https://pedro.pohroma.de/2021/03/10/poznamky-pre-majstra/
Teda ještě jeden veledrobný komentář: Byl mi položen na FB takovej zajímavej dotaz, tak jsem začal pátrat a je to celkem zajímavý:
Firma, která napsala snad nejvíc textovek vůbec – Infocom, na to měla takový vychytaný interpret. Tj. hra se psala v nějakém pseudo-jazyce, přeložila se do tzv. story a ta se slepila s interpretem pro danou platformu. Běželo jim to na všem možném, snad 20 různých platforem. Na Atari to bylo taky, hra mohla mít až 128kB, po stránkách se dotahovala z diskety. Byly dlouhé a dobré, např. Zork, Hitchhiker’s Guide apod. Plyne z toho taky to, že se ty hry dají hrát online, na mobilech, na pc apod.
Ten systém byl tak dobrý, že ho rozšiřovali a nakonec ho převzali nadšenci, co píší textovky dál. A dneska se dá psát v „normálním“ jazyce, bez hrábnutí na programování, když si člověk stáhne kompilátor Inform6, miniknihovnu, tak není problém si přeložit hru pro 8bit Atari.
Teď právě jsem ve fázi, že přemýšlím, zda do toho interpretu (jen 7kB!) jde dolepit nabodeníčka a češtin (ovládání by asi muselo bejt v cestine, ale na to jsme zvyklí, zkratky netuším), ale netuším, zda to dává smysl, zda by to někdo použil.
Zdrojový kód ukázkové hry zde: https://github.com/akosela/inform615/blob/master/demos/minform.inf
@Jindroush: Jako já sem pro, myslím, že by se to dalo použít.