Říj 262004
 

Jde kůň (klap, klap) a had (šš, šš). Na co jdou?

HEROES ’92 je soutěžní hra, kterou na počest existence 10. výročí ZX Spectra vydala v roce 1992 firma Proxima (samotnou hru spáchal George K.). Jde o skvělou vtipně pojatou textovku nabitou těmi nejslavnějšími osobnostmi. Já (MTs) se u ní kdysi výborně bavil a rozhodně ji všem doporučuji. Ve hře můžete získat až 120 bodů (čím víc ve hře zažijete, tím více bodů získáte).

heroes1
heroes2

Původní (kódovaný) Heroes je rovněž skvostem z programátorského hlediska. Geroge K. ze sebe vydal opravdu vše (možná i víc :). Opatřil hru ochranou The Return Of The Living Death (to aby někdo nezačal hrát dřív než soutěž oficiálně odstartuje) a texty zkomprimoval vlastním výtvorem s názvem Tolkien 4.0 (26kB textu mu to prý balilo téměř dva dny).

Bohužel Návrat žijící smrti způsoboval mnoho potíží. Hra se z oblibou na některých počítačích hroutila. Nešlo však o programátorské chyby, jak se mnozí domnívali, právě naopak, šlo o tak dokonalou ochranu. Jakmile bylo po soutěži, George K. Heroes částečně odkódoval. Ovšem neudělal to pořádně (asi se mu nechtělo – a já už se ani nedivím…) a tak hra padala kdekomu (včetně mě) i dneska. Takže jsem na to vlítnul… Musím říct, byla to šílená práce a bez PC (emulátoru) a také originálního zrojáku od samotného George K. bych to nikdy neprolomil!

Stahujte… (přibalil jsem tam i návod, který vyšel v ZXM 1/1993, ale radím Vám nečtěte ho! Přišli byste o tu pravou zábavu. Zkuste to tak týden den co den hrát a až pak už v úplné bezmocnosti jen tak lehce nakouknout.)

Majitelé D40/80 však musím upozornit na několik skutečností. Operace s disketou George K. vůbec neošetřil. Dojde-li k chybě (tj. pokus ROM o výpis chybové hlášky), cela hra se zhroutí!. Vlastně „not ready“ ošetreno bylo, ovšem tím způsobem, že se to nechutně zacyklí (neustále se skáče na BREAD a disketovka furt svítí…). Not ready jsem opravil (přidal jsem asi 4 sec pauzu s vypnutou mechanikou mezi cykly), ošetřit ostatní chyby by ovšem vyžadovalo nadlidský výkon, proto jsem to tak nechal. Pokud bude disketa v pořádku a nebude chráněna proti zápisu, vše poběží OK. Pozor také na to, že soubory (pozice) se stejným jménem se automaticky přepisují!

Citace ze ZXM 1/1993:

POSLEDNÍ NÁVRAT ŽIJÍCÍ SMRTI

Začal nový rok, soutěž k deseti letům ZX Spectra tedy skončila a než bude kompletně vyhodnocena, povíme si (jen tak pro zajímavost) něco o podstatné části hry HEROES ’92 – o ochraně The Return Of The Living Death (Návrat žijící smrti).

Nejdříve k ochranám vůbec – jsou dvojího typu: 1) chrání program před kopírováním, nebo 2) chrání program před zkoumáním. Slabinou každé ochrany je, že po jejím průchodu je program čistý a pokud se Vám podaří tuto chvíli vystihnout a do programu se vloupat – máte ho. Navíc, kde nemůže software, tam pomůže hardware, a tak člověk, který vítězoslavně stiskne tlačítko Multi-/Masterface nebo NMI si připadá jako bůhvíjaký bůh a přiblble dodá: „Kraknul jsem to.“ Možná, že někoho napadá otázka proč vůbec by se ochrana měla prolamovat – také by mě to zajímalo, ale jsou lidé, kteří si prostě musí dokázat, že jsou lepší než ti, kteří tu ochranu psali (což je většinou omyl). Návrat žijící smrti jsou vlastně ochrany dvě – Žijící smrt a pak její Návrat. Obě mají několik vrstev, které nejsou sice nijak geniální, ale dokáží znepříjemnit pěkné deštivé odpoledne.

Již po nahráti basicu asi začátečníka překvapí příkaz IF COPY THEN CAT & DOG a pak fakt, že výraz za RANDOMIZE USR není definován. Ve skutečnosti na tom není nic zvláštního, a tak za chvíli určitě přijdete na to, jak se program spouští – a je tu malé překvapení pro hackery používající obrazovkové monitory – rozpakování nechutně zničí prostřední třetinu a trošku poškodí basicový systém. Navazuje několik ldirů, které rozstrkají program po paměti (případně náhodou vymažou paměťový monitor… Vaše škoda, příště si ho nahrajte jinam) a identifikace, zda je program instalován z diskety nebo kazety – podle toho se také dále pokračuje (při nahrávání z pásky by neměla být připojena D40 – program se buď hroutí nebo vyvede něco „až potom“ – samozřejmě naschvál).

Pak následuje nahrání zbytku programu – hra má vlastní loadery jak pro disk, tak pro pásku. Loadery jsou ke své škodě nedoceněny – dokáží totiž nahrávat paměť „napřeskáčku“ (z čehož plyne, že kód na médiu je Vám na dvě věci – na … a na nic), ale tato funkce není zcela využita (pouze u kazetové verze se na konci používá obrazovka, protože v paměti je zapotřebí mít současně víc věcí, než je možné) – snad někdy příště.

HEROES se nejdříve rozpakují (teď je pro změnu zničena spodní třetina); opět pár ldirů, operací se zásobníkem, obrázek, hudba a – heslo. Jediná možnost, jak heslo utajit, je, aby ho program sám neznal – proto, ať napíšete cokoliv, vždy se provede to samé, ale za chvíli se přijde do míst, která se správně odkódují jen při tom pravém hesle (to je ta chvíle, kdy se jinak program zhroutí) – existuje skutečně jen to jedno jediné. Při rozkódování musí program ležet na stejném místě, na jakém byl zakódován – místo je to více než nepříjemné: od spodní třetiny videoram až do konce paměti… všechny další skoky jsou prováděny přes zásobník a v tom se nepříliš dobře orientuje, a tak procesor nakonec dohopsá až k dalšímu rozpakování (leží podobně blbě jako odkódování), pak opět chvilka zásobníkových skoků a – konečně start.

Tedy – ne tak docela. Následuje další identifikace „páska versus disk“ založená na stavech sběrnice a ROM (tato část se špatně trasuje), opět se spočítá hodnota zásobníku a pak se někudy vběhne do podprogramu, který program správně rozmístí po paměti a ještě pozmění pár adres.

Začíná hra – a to je chvíle pro Návrat žijící smrti. Jejím základem je přerušení (je podezřele velké, že?), které čas od času program odchytává a nechává ho pokračovat někde úplně jinde – kdo přerušení vypnul, dostal se trasováním ke zcela falešným podprogramům, které program ve skutečnosti nikdy nepoužívá (on ho totiž většinou hroutí). Ti, kteří rádi mačkají tlačítko SNAP, se asi dočkali překvapení – nefunguje. Milovníci upravených ROM, si také příliš neužili – aspoň na páskách. Návrat žijící smrti je organickou součástí programu a jen některé jeho pasáže je možné odstranit. Navíc je napsán úmyslně tak, aby odradil – je v něm spousta věcí navíc a špatně.

Kdo hledal texty, které by mu usnadnily hraní, našel, se vší pravděpodobností, vzkaz: THE RETURN OF THE LÍVING DEATH: WELCOME TO THE 21st ROUND (ONLY 79 LAPS TO GO), jenž nebyl zdaleka jediným, co jsem tu pro hackery zanechal. Skutečné texty jsou zapakovány textovým pressorem Tolkien 4.0, což se samo o sobě skoro rovná ochraně – pro přečtení by se musely vybalit (bylo by jich asi o 9kB víc).

Poslední Návrat žijící smrti se vygeneruje v okamžiku, kdy hru dokončíte – program je smazán a zůstává pouze obrazovka a hudba (rozkódování bodovacího podprográmku je založeno na podobném principu jako to minulé). Bodování samotné je záležitostí jednoduchou, ale složitě napsanou – snad každý pokus o podvod je někde vidět, takže – kdo si přidal pár bodů a podle ASCII kódu vzniklého čísla domaloval vnitřní rámeček, doběhl sám sebe. Navíc je bodování uděláno tak, aby i při pěti naprosto stejných dokončeních hry vyprodukovalo pět rozdílných tabulek – to co, v těch tabulkách bylo vždy stejné, bylo přesně tím, co nic neznamenalo… K bodování neodmyslitelně patří pozice – slabé to místo všech textovek, protože v sobě musí nést údaje o stavu hry, které samozřejmě jdou pozměnit. Proto jsou prozice HEROES generovány na podobném principu jako finální
tabulka – dvě pozice ve stejnou chvíli = dva rozdílné kódy.

Abych to neměl tak jednoduché, zpříjemnil mi život každý Didaktik, na kterého jsem narazil – některé části ochrany na nich prostě nechodily a já ještě doteď nevím proč. Základním problémem je, že každý Didaktik je ve své podstatě originál (tedy nenahraditelný) a koupíte-li si počítač, disketovku a Melodika, můžete hovořit o štěstí, když se spolu snesou. Programátor aby se pak zbláznil při zjišťování, zda je chyba v jeho programu, nebo ve výrobním programu nejmenované zahraniční společnosti. Ať již bylo Specter vyrobeno několik miliónů – nelišily se tak, aby programy na nich nechodily; to se bohužel o hranách do světa výpočetní techniky říct nedá. Díky Didaktikům jsou tedy některé pasáže ochrany „mrtvé“ – a to je škoda. Po deseti letech si Spectrum zasloužilo pořádnou ochranu, která by potrápila a která by vlastně pro hackery byla hrou ve hře. Proto jsem ji také psal. Škoda.

Veselá příhoda na závěr: Asi nejvíc mě vytočilo, když pásková verze nefungovala s hudebním obvodem AY – přesněji – fungovala se všemi AY, krom Melodiku. (To je vůbec věc, ten Melodik, ještě že nemám absolutní sluch, jinak bych asi vyletěl z kůže při zjištění, že zase hraje o dvě oktávy výše.)

Pokud jste tedy nezkoušeli ochranou projít, zkuste to – je to prča.

  3 komentáre na “HEROES”

  1. To je nádhera, přečíst si o sobě něco na webu :). Je super, že ty programy tak nějak udržujete při životě. Jenom jedna poznámka k pakování textů – netrvalo to 3 dny (pokud jsem tuto fámu vypustil já, tak hanba mi :), Tolkiena máte, takže si to zkuste – mělo by to být asi půl hodinky. Cca 1 den trvalo pakování textů do Jména růže, kde je použit stejný princip jejich uložení, ale vzhledem k "ranné" vývojové fázi Tolkiena tam nebyly žádné optimalizace na rychlost. Chodila se na to zvědavě dívat půlka koleje a víte, co bylo finále? Po 19 hodinách se to kouslo :))).

  2. To po devatenácti hodinách pěkně nasere, co?

  3. Hrál jsem tuto skvělou hru kdysi na svém Didaktiku Gama s ROM verze 89 a potvrzuji, že běžela bez větších problémů 🙂

    Klobouk dolů, bylo to udělané moc pěkně a vtipně. Bohužel jsem to do soutěžního termínu tenkrát nestihl, protože jsem zatuhl kdesi mezi stanicemi Schwarzeneggerovou a Stalloneovou. Tak jsem si počkal až na návod v ZXM 🙂

Zanechat komentář na smouk Zrušit odpověď

Můžete používat tyto HTML tagy a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..