Jak na textovky? 3. díl aneb předměty
V minulém díle jsem rozebíral lokace a jejich zkoumání, dnes si povíme něco o předmětech a jejich záludnostech. Na předmětech stojí a padá každá pořádná textová hra. Vlastně jde o to přenášet předměty a vhodně je používat. Vesměs se jedná o logickou akci, ale mnohdy autoři her překvapí takovou záludností, že až rozum zůstává stát.
Jak už jsem psal minule, tak v popisu lokace nesmí chybět výpis sebratelných, ale i položitelných předmětů. Mnozí autoři her tuto vlastnost podceňují a to buď svou leností a nebo neznalostí programování. Ujasněme si pár základních vlastností předmětů. Předmět by měl jít sebrat hráčem, pokud mu v tom nebrání nějaká překážka, například, když bude v popisu lokace policejní vůz a v sebratelných předmětech modrý majáček, tak je jasné, že ho hráč nebude sbírat před policejním důstojníkem, nejprve bude muset nějakým způsobem odlákat onoho policistu, ale to už je jen a jen na fantazii autora hry. Předmět by měl jít za každou cenu prozkoumat, čili si budeme muset do naší funkce průzkumu ještě přidat průzkum sebratelných předmětů.
Takže teďko jak tedy na předměty a jejich lokalizaci v lokaci? No vcelku jednoduše, postačí nám na to pole proměnných, které bude obsahovat číslo předmětu a jako hodnotu číslo místnosti. Čili to bude vypadat asi takto: P[10]=25, což je v překladu: předmět číslo 10 se nachází v lokaci číslo 25. No jo, ale to bysme měli umístění předmětu v lokaci (na zemi), ale jak zajistit aby se předmět vyskytoval v inventáři hráče? No celkem jednoduše, po sebrání předmětu hodíme do pole hodnotu např. 1000, myslím si, že 999 lokací bude dostatečných. Jako další si můžeme rezervovat hodnotu 1001 a ta nám bude signalizovat, že daný předmět je již použit. A když bude mít proměnná hodnotu 0, tak prostě předmět nebyl ještě objeven. Tak a tímto se vlastně dostáváme k záludnostem celé hry. Protože s předměty stojí a padá celá hra.
Nesmím tedy zapomenout napsat pár slov o pokládání věcí v jiných místnostech, např. když engine hry limituje počet přenášených věcí najednou. Prostě při položení věci do pole hodíme číslo lokace a je vymalováno. Předmět pak najdeme v té lokaci, kde jsme jej odložili. No obvykle ano, ale může se stát, že si do hry naprogramujeme zloděje, který nám bude předměty přenášet, jako tomu bylo v Ataristově protiútoku, pták mega pták vždy náhodně zcizil nějaký předmět a hráč jej vždy nalezl v jeho hnízdě. No ale to zabíháme do různých úskalí scénáře hry.
Nyní si povíme pár zajímavostí o skrytých předmětech, jejich nalezení při zkoumání a různých popisech lokací.
V začátku hry je tedy nutno nadefinovat seznam předmětů a kde se daný předmět nachází, buďto ve viditelném stavu a nebo například, když hráč prozkoumá odpadkový koš, tak najde nějakou tu zajímavůstku (plesnivý salám, mrtvolku ptáčka). Tuto věc nám ošetří funkce průzkumu předmětů a jednoduchou univerzální podmínkou si při zkoumání našeho koše ošetříme zda-li je daná věc ve stavu nenalezeném, pro nás hodnota 0 a najdeme ji, když hráč prozkoumá koš podruhé, tak může něco nalézt a nebo prostě se vypíše standardní hláška průzkumu ve smyslu, že koš je již prázdný a nebo něco takového, záleží na fantazii autora. Můžeme si definovat, jestli takto nalezenou věc hodí rovnou do inventáře hráče a nebo na zem v dané lokaci. Takhle si vlastně můžeme naprogramovat, třeba průzkum nějaké blbosti, zdánlivě se nic nestane, ale o pár místností dál, se najednou na zemi objeví nějaký použitelný předmět.
Málem bych zapoměl na popisy předmětů, dejme tomu, že náš engine bude obsahovat větu: Na zemi se povaluje špaček od cigarety a mrtvá myš.
Jelikož je čeština záludný jazyk a všemožně se všechno skloňuje tak když hráč po sebrání oněch předmětů. Zadá příkaz: inventář, tak mu to nenapíše: Neseš špaček od cigarety a mrtvá myš. Ale: Neseš špačka od cigarety a jednu zdechlou myš.
Tedy, tím jsem myslil, aby byl engine ošetřen co do češtiny.
Jak jsem se zmínil, tak na předmětech stojí a padá každá hra, takže si můžeme definovat několik popisů lokací pro dané souřadnice v závislosti na stavu předmětů, myslím tím na jejich použití, či absenci…
Varianta kdy hráč u sebe nemá předmět kalhoty, nebo nejsou pouřity/oblečeny.
Zvesela si to vykračuješ ulicí k mohutnému košatému stromu. Pod tím stromem postává policista a zabývá se ochranou veřejného pořádku. Jakmile tě policajt spatřil, tak se na tebe vrhl a brutálně ti nasadil pouta. Obvinil tě z veřejného pohoršení, protože jsi se doma zapomněl obléknout a potuloval ses po městě úplně nahý. V base si pobudeš pěkně dlouho a tak tě určitě zajde chuť, jezdit na nějakou šílenou alkoholickou párty do Brna.
Varianta, kdy předmět kalhoty je použit
Jdeš ulicí a vesele si pohvizduješ, ulice končí u velikánského stromu, jehož kořeny raší přímo z asfaltu ulice. Pod košatou korunou stromu postává policista a pohrává si s obuškem. Za policistou je hluboký příkop, takže by stačilo jen strčit a bylo by po problémech.
No a to by pro dnešek stačilo. Snad mě napadne nějaká další záludnost při programování textovek.
to je hustý vidět, jak jsi při programování textovek přemýšlel nad tím, jak to naprogramovat co nejuniverzálněji. Postupoval jsem podobně, to je hustý jak vlastně každej dojde ke stejnýmu výsledku, ale každej programátor jiným (vlastním) enginem. Zkus napsat, jak jsi řešil load/save. BTW: V mém Capartovi taky pobíhala postava, ale rovnou tě zabásla (fízl) :).
no k tomu vsemu se dostanu, no neboj, snad bude cas na dalsi dil 🙂
Ahoj Jardo, prosím ozvi se, děláme sraz od střední školy, bude to v Loretě (bývalá Veverka) 9.9.2006 v 19 hodin. Prosím o potvrzení účasti či neúčasti na telefon 737/111119
nebo mail michaela.maskova (at) emael.cz
S pozdravem Michaela Petrželková (Mašková)