Píšeme textovku na Atari v Basicu – lokace
Dneska si povíme, no vlastně teda napíšeme něco o tom, jak si ulehčit práci a hlavně zjednodušit programovaní v Atari Basicu při psaní vlastní textovky. Jasně, můžete sice namítnout, že by to mohlo být lepší a třeba byste to naprogramovali líp, no nic vám k tomu nebrání a rád se přiučím.
S psaním textovky pro Atari můžete začít rovnou v Atari Basicu, jenže je to takové nepohodlné, interpretr Basicu je šílený a tak se podíváme po nějaké té utilitce, která by nám mohla pomoci. Když jsem upravoval loni Emgeton Story, tak jsme použil MemoPad. Soft to není špatný, co si v něm napíšete to můžete rovnou nahrát do Atari, já jsem tedy používal pro import kódu v Atari příkazu ENTER „H:“ je to rychlé, je to pohodlné a celkem se s tím dá pracovat. Problém v tomhle editoru vidím hlavně ve způsobu zadávání speciálních grafických znaků, musíte si je jako blázen zapínat a vypínat a tak je to trošku nepohodlné.
Řešením je Notepad++, který je všestraný a hlavně do něj Pedro napsal definiční soubory pro Atari Basic. Ostatně si hezky pěkně prostudujte Pedrův článek poznámek pro mistra, tedy pro mně a vlastně i pro vás.
Asi vás zajímá, jak z Notepadu++ uložit soubor a rovnou ho nahrát do Atari, no možnosti jsou dvě, první je, že si soubor uložíte v plaintextu a nahrajete příkazen ENTER „H6:“ a ukládat zdroják z Atari musíte také použít příkazu LIST „H6:“, mimochodem v emulátoru si tedy budete muset nastavit kam se budou ukládat soubory pod H: zařízení, samozřejmě že nesmíte zapomenout použít i jméno souboru. Je jasné, že bez názvu souboru těžko co nahrajete a také uložíte.
No tak to bychom měli, umíme ukládat a nahrávat, mimochodem do ukládání si můžete vylepšit nějakým pěkným konvertorem znaků, kde vám může onen konvertor hezky překládat ascii znaky do atascii, kde budete mít pravděpodobně uložena nabodeníčka ve znakové sadě pod speciálními grafickými znaky. K tomu se pak ještě asi vrátím, až se dostaneme k nabodeníčkům a vlastním písmenkám.
No a tak jdeme na to, podíváme se na to jak si naprogramovat vlastní lokaci, nebyl bych to atarista, abych neukradl něčí nápad, který se mi zamlouvá asi nejvíc a nejlíp.
Nevýhodou Atari Basicu je nutnost psaní řádků, my tuhle vlastnost v naší textovce změníme ve výhodu, čísla řádků nám pomohou při psaní lokací a jejich identifikaci pohybu po těchto lokacích.
Mimochodem ke tvorbě vlastní textovky doporučuju si kreslit herní mapu, pokud byste chtěli nějakou online věc na malování textovkové kartografie, tak doporučuju jednoznačně aplikaci Trizbort.
Takže si namalujete herní mapu a každou lokaci si označíte jedinečným identifikátorem, číslem lokace, tohle je důležité, bude se vám to hodit v budoucnu, když budete manipulovat s objekty. Mapu máme, lokace máme očíslované a můžeme jít programovat. Jak jsem zmínil, nevýhodu Atari Basicu s číslama řádků, změníme na výhodu, je fakt, že jeden řádek, na který napíšete maximálně 120 znaků vám asi stačit nebude, ale my na to půjdeme chytře, budeme počítat. Tak jak to je to třeba v Chrámu Zkázy od Františka Fuky, který jsme na Atari trošku ukradli, ten systém je naprosto geniální.
Dovolil jsem si kus listingu z Chrámu zkázy ukázat jako vzorek, tenhle zápis je fajn, ale má jednu nevýhodu, tou jsou DATA, ty jsou v Atari Basicu oddělena čárkou, tudíž v popisu lokace nemůžete mít použitou čárku, jasně jde to obejít změnou písma a tu čárku si namalovat pod nějaký jiný znak, ale stále tu máme řádky po jednom. V praxi to vypadá tak, že herní engine skočí na řádek 300+1, pokud hráč vstoupí do lokace číslo 1, kde prvních 6 znaků v datovém zápisu obsahuje volné východy. Nula znamená, že cesta je daným směrem zavřena. Toto je počítáno vždy Sever, Jih, Východ, Západ, Nahoru, Dolů. V naší malé ukázce můžeme jít z lokace jen na západ do lokace, která má identifikátor 4 (není to číslo lokace). Ano začíná to být poněkud zmatené a v našem příkladu jsou prohozeny směry východ a západ. Nicméně pro ilustraci to stačí.
A jak jsem to vyřešil já? Podíváme se na Emgeton Story 3, to je moje poslední textovka pro Atari, na které jsem si dal opravdu záležet.
Lokace jsou vždy po deseti řádcích na každou, myslím si že je to dostatečné a vejde se vám do popisu jednak více textu, ale i třeba různé veselé podmínky, v ukázce výše je vidět první lokaci z Emgeton Story 3, kde v řetězci M$=“000004″ jsou popsané směry do dalšíl lokací, v našem případě pokud se hráč vydá směrem dolů tak se dostane do lokace s identifikátorem 4 a následuje popis lokace v řetězci T$. V tomhle je Atari Basic naprosto šílený, slučování proměnných se provádí jejich přidáním nakonec, než jsem tohle zjistil, tak jsem málem zešedivěl.
Engine tedy po příchodu do lokace vykoná příkaz číslo lokace * 10 + 100, aktuální číslo lokace si držíme třeba v proměnné X nebo M, nebo v čem chcete. No a následně příkazem RETURN se vrátíte zpět k vykonávání další akcí ve vašem programu. Zobrazíte objekty a pokud chcete i volné směry, kam se hráč může vydat.
Záměrně preskočím objekty, ke kterým se vrátím třeba v příštím povídání a jdeme rovnou na volné směry, kam se může hráč vydat. Jelikož naše čísla lokací můžeme mít i dvoj ciferná, tak by se nám to blbě v daném řetězci vyhledávalo, respektive, museli byste si určit oddělovače a složitě tohle vyhledávat, což by vás stálo čas při vypisování lokací. Použil jsem starou dobrou metodu, jak dokážete zapsat dvojciferné číslo tak, aby to byl jeden znak? No přeci tím znakem, tudíž znak 4 vede do lokace číslo 2, je to složité? Nebojte se, je to hrozně jednoduché. Napište v Atari Basicu ? ASC(„4“), vypadne vám hodnota 52. No a 52-50 = 2, vím je to krkolomné, ale zase nemusíte vypisovat ATASCI znaky 1 a nebo něco podobného hezky pěkně lidsky srozumitelné čísla, pokud třeba potřebujete znát znak pro lokac 23, není nic jednoduššího, stačí napsat ? CHR$(23+52), což je písmenko K.
Prostě jen počítáme, můžete si napsat do mapy poznámky se znaky lokací, hlavně nezapomeňte na ta čísla, ta se budou zase hodit při manipulaci s objekty, jak jsem už naznačil výše.
No a pak si prostě jen hlídáte lokace, které mají možné východy a pokud se hráč tím východem vydá, skočíte na řádek s popisem lokace.
S výpisem možných směrů můžete použít tenhle kus kódu, na začátek si můžete třeba hodit ještě podmínku, že pokud hráč nemá u sebe kompas, nebude se nic vypisovat atd. záleží jen na vaší kreativitě.
Poslední věc na závěr dnešního povídání, mnozí programátoři textove pro Atari psali text tak, že si ho rovnou zarovnali tak, aby se slova lámala tak jak jsme zvyklí číst, nebo doplňovala ručně pomlčky a tak dále, naprosto děsná práce a tak trochu marná. Chrám zkázy umí slova lámat sám, ale jeho výpis je děsně pomalý, provedl jsem jeho optimalizaci a můj způsob výpisu textu, který se sám zalamuje je celkem rychlý.
No a ještě poslední věc. Asi vás nebude bavit opisovat tupě kód ze screenshotů, nebojte se, okomentuju svůj Atari Basic Engine a udělám v něm pár lokací jako demo a dám vám ho sem na konci povídání k dispozici.