a8.fandal.cz

News

Games

Demos

Fandal's stuff

Emulators

Links

Blog

Contact

RSS

Fandalův Atari blog

Dvojitý agent (30/11/2013)

Uplynulo již mnoho refreshů od doby, co jsem si na tomto místě naposledy honil svoje nehorázně přebujelé ego s povídáním o crackování softwaru pro osmibitová Atari. Dnes to napravím ve velkém stylu neb moje drzost opět překročila další hranici a já se hodlám pustit dokonce do technických detailů. Pevně věřím, že všichni dva čtenáři tohoto blogu mou snahu patřičně ocení a spolu se mnou si to pořádně užijou.

Nejprve něco o tom, co mne přivedlo na myšlenku zde opět moudře promlouvat na moje oblíbené téma. Na konci září jsem na eBay za laciný peníz zakoupil hru Stickybear Numbers, jejíž plně funkční verzi jaksi nebylo možné na netu nikde nalézt, a prakticky obratem ruky jsem na svojí sajtě vyvěsil její 100% chodící crack. To jste jistě zaznamenali, gamesku jste si stáhli a s radostí čtyřletého dítěte jste si jí "zapařili". :)

Ochrana výše zmiňované hry proti kopírování spočívala v použití metody velmi prapodivně se chovajícího sektoru, pro kterou jsem kdysi navrhoval označení "dvojitý agent". To se ovšem vůbec neuchytilo a většina věcí znalých Ataristů při diskuzích na téma "copy protection" dál používá původní pojmenování zavedená už někdy v 80. letech. Zkostnatělí konzervativci!

Z hlediska programátora má dvojitý agent tu zvláštní vlastnost, že při prvním čtení vrátí jiných 128 bajtů než při čtení následném. To dává celou řadu více či méně komplikovaných možností, jak soft zabezpečit proti nenechavým prackám počítačových pirátů, toho moru moderní společnosti.

Naštěstí pro mne na to autor v případě Stickybear Numbers šel vysloveně primitivně, jenom si čtení inkriminovaného sektoru zavolal dvakrát za sebou, poprvé takříkajíc naprázdno, a šup s tím rovnou do paměti. Čili žádné vzájemné XORování obou výsledků nebo jiné podobné hnusárny, které rozlousknout je již poměrně výzva a které mi svého času daly pořádně zabrat u her řady Tink Tonk od firmy Mindscape.

Že je něco takového, jako číst dvakrát ten samý sektor pokaždé s jiným výsledkem, vůbec možné, mne hned při prvním setkání s touto zákeřností nemálo překvapilo. Nicméně neřešil jsem, jak je to celé dělané, bral jsem to prostě jako fakt, po jehož podstatě se nemá smysl pídit. Aneb netrap se věcmi, kterým nerozumíš, to je můj oblíbený přístup.

Zcela jiného názoru byl však náš velký Bob!k/C.P.U., kterého daná problematika patrně zaujala natolik, že na webu pátral až vypátral, co se za tím skrývá. Pak mi o tom snad i něco povídal, jenomže mně to (jako obvykle) šlo jedním uchem dovnitř a druhým zase ven. V podstatě mi zbyla v makovici jenom ta informace, že někde se nechá o dvojitém agentovi něco bližšího zjistit.

Znovu jsem si na Bob!kovu předem marnou snahu natlouct mi cosi do palice vzpomněl až při crackování Stickybear Numbers. A dostal jsem přímo ďábelský nápad. Dohledám si popis dvojitého agenta a pochopím ho! Že se ovšem jednalo o naprosto ničím nepodložený optimismus, to jsem zjistil velmi záhy.

Předně. Informace o pokročilých technikách ochrany ataráckých disket jsou na internetu bohužel často kusé a plné mně nesrozumitelných terminusů technikusů. Čím více jsem snažil zjistit, co je vlastně co a jak to má fungovat, tím více jsem byl zmatený. Nemohu si pomoct, ale zdá se mi, že jednotlivé prameny si vzájemně více či méně protiřečí a celkově jsem nabyl dojmu, že každý autor příslušného pokecu hovoří o něčem trošičku jiném.

Všude se to hemží samými "phantom" a "fuzzy" sektory, přičemž některé zdroje dávají mezi tyto dva pojmy rovnítko, zatímco například Steven Tucker, autor APE a formátu PRO, je naopak přísně rozlišuje. Naneštěstí bez toho, aby současně blbcům jako já naprosto polopatisticky vysvětlil, jaký mezi tím má být rozdíl. Proč mi tohle lidi safra děláte?

Fuzzy bit/bajt se na médiu údajně nechá při zapisování vytvořit za pomoci speciálních hardwarových vyfikundací, např. změnou rychlosti otáčení diskety. Hezky česky by se asi řeklo nestabilní bit či bajt. Když se pak taková potvůrka čte, výsledkem jsou různé hodnoty, prý v závislosti na tom, kde se hlava mechaniky nacházela před čtením inkriminovaného místa.

To by odpovídalo příznakům, jakými se dvojitý agent projevuje. Ale s čím mám tedy tu čest? S fuzzy sektorem nebo s phantomem? Kdosi zpětnou analýzou PRO formátu zjistil, že phantom sektorů může být na sebe navázáno až šest (!) a mně se nechce věřit, že by jeden nestabilní zápis na disketě měl při čtení za následek takové množství pseudonáhodných možností. Takže ve skutečnosti je můj dvojitý agent fuzzy sektorem a phantom je něco jiného?

Myslím, že ani jedno z toho. Podle všeho je dvojitý agent prachobyčejným "double sectorem". Neboli dva sektory na stejné stopě mají stejné ID a jsou proti sobě fyzicky na opačných stranách diskety. Disketovka pak při požadavku na přečtení sektoru s příslušným ID vybere jeden z nich, opět snad podle toho, co se četlo předtím.

Musím se přiznat, jak moc mne těší, že jsem před dvěma lety při návrhu českého označení pro "double sector" vybral právě spojení "dvojitý agent". Nejenom, že poměrně přesně vystihuje podstatu věci, ale navíc je velmi vtipné. Smějeme se, jedna - dvě - tři, teď!

Tedy za předpokladu, že tu neplácám naprosté nesmysly, což je dnes pravděpodobnější než kdy jindy. Pokud jsem něco pomotal, překroutil nebo zcela špatně pochopil, neváhejte a napište mi prosím. Já tu následně provedu patřičnou sebekritiku a vše uvedu na pravou míru.

Sportu zdar a světu mír!

Se mnou přichází zákon! (v2.0) (29/10/2013)

Pravidelní čtenáři si možná matně vzpomenou, že jsem tu koncem ledna prezentoval bez nadsázky geniální "Fandalovy zákony programování v assembleru 6502". Ve sledu pozdějších nešťastných událostí jsem ovšem o tento zápisek přišel, což mne velmi mrzelo, neboť jsem si od té doby mnohokrát v praxi ověřil jejich nadčasovou platnost (zvláště poslední z nich je skutečně univerzálně platný ve všech oborech lidské činnosti).

I rozhodl jsem se, že je tedy sepíšu znovu, protože moje pátrání po jejich původní verzi bylo bohužel zcela neúspěšné. Jelikož jsem se ale mohl spolehnout pouze a jenom na svojí čím dál tím více chatrnější paměť, nemůžu zaručit, že jejich stávající znění stoprocentně odpovídá lednové předloze. Proto ono označení v2.0.

Ono je to vlastně vůbec docela s podivem, že jsem si po tak dlouhé době na všech deset zákonů dokázal vzpomenout. Popravdě jsem to ani nečekal. Jakmile jsem ovšem vylovil z temných zákoutí mého zdegenerovaného mozku první z nich, zbytek už jsem dal po kouskách do kupy relativně rychle.

Stejný postup naneštěstí nelze uplatnit u druhého zápisku, který jsem potratil. Tím bylo pojednání o tom, jak jsem po dlouhém boji fixnul hru TL Cars, aby konečně chodila i na reálném hardwaru a ne pouze v emulátoru. Délka tohoto textu byla zkrátka příliš velká. Čili zápisek "TLC" z 23. února je velmi pravděpodobně ztracen naprosto nenávratně.

O to víc se proto radujme z toho, že zkázu přežily alespoň moje slavné zákony, které tímto zažívají svou obnovenou premiéru. Olééééé!!

Fandalovy zákony programování v assembleru 6502

Zákon první

Ať děláš, co děláš, tvůj program stejně začne přemazávat paměť v místech, kam by teoreticky nikdy zapisovat neměl.

Zákon druhý

Ze všeho nejhůř se ladí přerušení. Zvláště ta, ve kterých na konci zapomeneš vrátit registry na původní hodnoty.

Poučka o nedotknutelnosti kódu

V již odladěné částí kódu nikdy neupravuj zdánlivě zcela špatně napsané nebo naprosto zbytečné konstrukce, neboť právě ty jsou ve skutečnosti v pořádku a navíc jsou kritické pro správné fungování celého programu.

Zákon neodvratné nesrozumitelnosti

Bez ohledu na množství komentářů a vhodně zvolená jména konstant, proměnných a návěští je každý zdrojový kód pro autora po třech měsících naprosto nepochopitelný.

Podmínkový teorém

Kód za nepodmíněnou instrukcí skoku vždy postupně narůstá tak dlouho, až nakonec nevyhnutelně překročí délku 128 bajtů a programátor je nucen použít nepodmíněný skok JMP. Vzápětí se mu sice nevědomky podaří kód zoptimalizovat, nyní již nadbytečnou instrukci JMP ovšem neodstraní nikdy.

Hanácký postulát

Chceš-li svůj program donekonečna předělávat, zašli každou betaverzi na testování do Atari klubu Prostějov.

Věta Flopova

Ani sebepečlivější testování z programu nikdy neodstraní všechny chyby. Minimálně jedna se vždy vynoří až po jeho oficiálním vypuštění v magazínu Flop.

Anticův zákon

Potřebuješ-li v paměti změnit umístění display listu nebo screen memory, vyjde nová lokace naprosto neomylně do zlomu jedno respektive čtyřkilobajtové hranice a obraz se zhroutí.

Programátorský paradox

Když se program totálně zboří jednou za tři kompilace, ještě se to snese. Problém je, že průměrně je třeba tří kompilací na to, aby jednou dělal alespoň něco.

Univerzální existencialistý princip

I kdyby ses třeba posral, tvou práci stejně nikdo neocení. Natož aby jí pochválil.

RAM 320XE (07/10/2013)

Včera po poledni jsem se kvůli nabitému programu posledních dnů konečně dostal k několikrát odloženému testování dlouho očekávaného HW udělátka RAM 320XE a nedá mi to, abych se o první dojmy ještě zatepla veřejně nepodělil. Tak tedy: je to totální bomba!!

Pro ty, kteří snad netuší, vo co tady gou, připomenu, že RAM 320XE (stejně jako její předchůdce RAM 320XL) je externí plug & play paměť pro osmibitová Atari z dílny Ctirada Feřtra, známého v komunitě též pod přezdívkou Ctirad. Jak už sám název napovídá, verze 320XE je určena pro stroje řady XE, které disponují expansion portem (ECI).

Modul RAM 320XE se do Atárka zasouvá současně do ECI a cartridge portů, díky čemuž drží skutečně festovně. To se velmi hodí při vkládání cartů do slotu, který je na kartici vyveden. Skvělé je, že tento slot směřuje nahoru (jako u XL mašinek), takže konečně odpadá ono šílené šťourání se kdesi na zadní straně počítače, kde je lautr prd vidět a kam se vlastně nedá ani pořádně dostat.

RAM 320XE

Bez úprav na základní desce nabízí RAM 320XE ve třech módech rozšířenou paměť až na 64+256 kB. Pokud si na motherboardu proškrábnete jisté spoje, vytřískáte ze Ctiradova zázraku ve čtvrtém dostupném režimu až 64+512 kB. Jednotlivé módy se volí dvojicí přepínačů, třetí z nich pak slouží k úplnému odstavení interní paměti Atari, která je poté kompletně přemapována do paměti karty.

Osobně jsem cca dvě hodiny intenzivně testoval pouze režimy nevyžadující zásah do počítače, kteréžto jsou:

  • externí paměť vypnutá,
  • externí paměť 64+64 kB (130XE standard),
  • externí paměť 64+256 kB (Rambo standard).

Vše fungovalo zcela bez problémů jak na PAL strojích, tak i na mojí NTSC 130XE, jejíž vlastnictví mi patrně umožnilo stát se betatesterem předsériového modulu s magickým číslem 0001. Všechny spuštěné softy se chovaly korektně a moje utilitka pro detekci XMS pokaždé vracela správná čísla bank. Žádné potíže jsem také nepozoroval při testování fukčnosti cartů Visicopy III a S/XEGS RAMcartu by C.P.U. s naflashovanou hrou Commando.

RAM 320XE

Nadchla mne i taková drobnost, jako je podpora nezávislého přístupu Anticu do rozšířené paměti v módu 130XE, což jsem samozřejmě neopomenul promptně vyzkoušet. Ono se to sice prakticky nepoužívá (maximálně tak, když si člověk chce zahrát TL Cars), ale svědčí to o Ctiradově chvályhodné snaze vymakat zařízení opravdu k dokonalosti.

Zkrátka a dobře, RAM 320XE je vynikající dílo pověstných zlatých českých ručiček. Vysloveně snadné použití, bytelná a perfektně sedící plastová krabička, naprosto bezproblémový chod a hromady jednoduše nastavitelných režimů. Co víc si člověk může přát? Komfortnější způsob, jak si ve svém ikséčku rozšířit paměť, prostě neexistuje!

Pokud o koupi RAM 320XE uvažujete, vězte, že cena kartice byla pro našince stanovena na 1000 Kč. Není to sice úplně málo, ale za svoje penízky dostanete vskutku špičkový produkt. Myslím, že není třeba dvakrát nad ničím přemýšlet. Objednávejte ještě dnes! :)

Když je šestnáct málo (01/09/2013)

Je tomu už nějaký ten pátek, co jsem na tomto místě uvolnil pro veřejnost dvě svoje atárkovské PC utilitky. BAS2XEX slouží k vytváření spustitelných binarů (XEXů) z BASICovských souborů, BD pak dokáže přetvořit v samostatně fungující hru levely CAV a INT vytvořené v Boulderdash Construction Kitu.

Je tu však zádrhel. Oba tyto prográmky jsem spáchal ve dvacet let starém Borland Pascalu 7.0, jelikož je to vlastně jediný programovací jazyk, který na PC relativně na úrovni zvládám. Pakliže je to někomu divné, rád bych znovu připomenul, že se jako programátor neživím a nikdy nebudu. Moje schopnost cosi na Atari plodit v assembleru 6502 je pouze náhodný přírodní jev.

Ale zpět k tématu. Možná na to někdo z vás narazil, možné ne, nicméně faktem je, že BAS2XEX a BD vám nebudou fungovat v šedesáti čtyřbitových Windows. Z kompileru Borland Pascalu totiž leze jenom a pouze šestnáctibitový kód, který si bez DOSBoxu prostě nepustíte. Dosud mi to nevadilo, nedávno mi ovšem v práci nainstalovali 64-bitové Windows 7 a já začal mít problém.

No a jelikož problémy jsou od toho, aby se čas od času řešily, stáhnul jsem si o víkendu z internetu Free Pascal a jediným stisknutím tlačítka F9 jsem obě moje utility překompiloval do dvaatřicetibitové podoby. Pro zájemce, 32-bitová verze BAS2XEX je ke stažení zde, BD naleznete zde.

A ještě něco. Všimnul jsem si, že někteří uživatelé neumí pořádně používat BAS2XEX. Respektive netuší, že výsledný binár může mít i jinou zaváděcí adresu než defaultních $0700. BAS2XEX přitom tuto adresu používá vysloveně z historických důvodů, neb v bývalé ČSSR se v Turbu nahrávaly BASICovské soubory právě odtud. Stačí se jenom v mém archívu podívat na ty hromady věcí převedených z pásek.

Ano, vím, $0700 je adresa s kolty proklatě nízko a DOSy či různé gameloadery s ní mohou mít docela zásadní problém, já ovšem primárně používám APEloader + SIO2PC a žádné takové starosti neznám. Stejně jako ti, kdož preferují QMEG, SDrive nebo emulátory. Přesto jsem při tvorbě BAS2XEX myslel na všechno a záleží jenom na uživateli, jakou load adresu si zvolí.

Vše se děje pomocí druhého parametru v příkazové řádce. Za název BASICovského souboru prostě připište v hexadecimálním vyjádření adresu paměti, od které má výsledný binár začínat a je to. Například příkaz "BAS2XEX GAME.BAS 2000" vytvoří ze souboru "GAME.BAS" spustitelnou binárku "GAME.XEX" se zaváděcí adresou $2000. Jak prosté.

Více informací získáte spuštěním BAS2XEX bez parametrů. Ve dvaatřicetibitové edici jsem tento help zcela přepsal a podstatně rozšířil, protože uznávám, že v původní verzi byl velmi stručný a navíc poněkud matoucí. Nyní snad bude vše výrazně srozumitelnější a pochopitelnější.

Restart šokem (22/08/2013)

Já asi nejsem normální. Vlastně ne, já určitě nejsem normální. Ale já to vím již dlouho, takže jsem v klidu.

Před časem jsem tento blog definitivně zrušil, protože jsem se po šesti letech jeho matlání postupně dostal do stavu, kdy se mi zvedal žaludek už při pouhém pomyšlení, že bych ze sebe měl vydupat další výblitek. A teď sám sebe pozoruju, jak klapu tenhle beznadějný text!

Asi mi není pomoci. Místo, abych uposlechl jasných varování vyšších sil, které mne před třemi týdny během pouhých čtyřech dnů dvakrát velmi důrazně vyzvaly k ukončení nekalých ataristických rejdů na mojí sajtě, tak tu už zase začínám bláznit. Neuvěřitelné.

Pravděpodobně jste si všimli, že atari.fandal.cz bylo od pátku 2. srpna mimo provoz. Zapříčinily to dva emaily od Atari, Inc.™, kterými naše kdysi oblíbená firma vytáhla do boje proti nelegálnímu používání svého jména v doméně třetího řádu mojí osobou. Plus že nelegálně šířím software podléhající jejich copyrightu.

No a jelikož jsem v té chvíli byl již poměrně slušně nasrán faktem, že mi během úterní večerní bouřky doma od blesku vyhořela veškerá elektronika (PC, ADSL modem, AP, LCD, satelitní přijímač a tiskárna), zareagoval jsem způsobem, který zřejmě ani Atari, Inc.™ neočekávala: na místě jsem zrušil doménu atari.fandal.cz, email fandal@fandal.cz a kompletně jsem promazal FTP.

Mimochodem. Jedna z posledních věcí, kterou jsem předtím v ono nešťastné úterý stačil na svém PC udělat, bylo uploadnout na server fixnutou verzi Aliena 8. A v pátek jsem četl maily a chystal aktualizaci, ke které jsem se už nedostal, na stařičkém noteboku přes bráchův mobil, ze kterého jsem si v nouzi udělal AP. To aby byl sled událostí pochopitelný i Viktorovi.

Ale zpět k mojí páteční hysterické reakci, pro mne tolik netypické. ;) Dokonale odříznut od internetu jsem měl poté celý víkend více než dostatek času přemýšlet, co dál. A pořád mi z toho vycházelo, že je opravdu na čase s tím vším konečně seknout. Nechat atari.fandal.cz historií, když si to i samo Atari, Inc.™ přeje, a mít jednou provždy svatý klid.

Toto rozpoložení mi vydrželo skoro dva týdny, jelikož provozování archívu mi vůbec nescházelo a já jsem zpočátku taky nikomu nescházel. Jenže Ataristi, to je zvěř. Pár politováníhodných individuí se různě po internetu začalo postupně vyptávat, cože se to stalo, co bude dál, proč jsem takovej vůl, atp. A moje víra v lepší zítřky se začala pomaloučku drolit.

Nakonec to byl kolega Bob!k, šedá eminence české A8 scény, kdo mne definitivně přesvědčil, abych sajtu oživil. Vytasil se s docela logickou hypotézou, proč si Atari, Inc.™ kdesi v US vzpomnělo zrovna na můj webík a navíc se osobně angažoval s laděním PHP skriptů na nové doméně. Dokonce šel tak daleko, že mne minulý týden zcela nevybíravými způsoby donutil zapnout si mobil a povídat si s ním na téma další existence archívu, dokud se mi v mém špičkovém Samsungu GT-E1081T nevybila baterka.

Následkem toho všeho bylo zprovoznění sajty na nové adrese a8.fandal.cz, kterou údajně vymyslel Krupkaj, ale nikdo mu to nevěří. Jenže Ataristi, to je zvěř. Několik z nich sice projevilo mizerně hranou radost, že jsem to nezabalil, další ovšem hned začali sborově skuhrat na téma Fandalův úžasný blog, který jim prý pořád schází.

Já přitom nikdy pořádně nepochopil, proč by doprdele někdo ty moje cancy chtěl číst. Ono je to, zdá se, vůbec s tím mým blogem nějaké velké nedorozumění. Já to nepíšu, aby vy jste měli co číst. Vy jste mi ukradení. Já to píšu, protože mě čas od času baví hezky k sobě skládat slova a přitom si beztrestně utahovat ze všech, co mi zrovna přijdou pod ruku.

Avšak reakce přihlížejících je úplně jiná, než by jeden čekal. Místo, aby se urazili, taky mne začali všude pomlouvat nebo mi rovnou někde v tmavém stínadelském průjezdu dali pěkně po vontsku do držky, oni sem dál chodí a ještě si při tom na celé kolo mlaskaji. Nechápu. Respektive mi z toho všeho plyne jediný závěr.

To né já, ale vy tu nejste normální!!

BTW. Nemá někdo z vás náhodou někde schovanou novější zálohu tohoto blogu než je ta moje z půlky ledna? Protože kdyby jo, mohl bych tuto stránku doplnit o únorové a březnové zápisky. Jestli si dobře vzpomínám, víc už jsem toho nevyzvracel.

Tak, a to by bylo pro tentokrát vše. Kdy se znovu přihlásím, je zcela nejasné. Zatím to vypadá, že po pětiměsíční přestávce mám do psaní poměrně dost chuti, ale to pravděpodobně zase jenom do chvíle, než mi při dalších záchvatu opět praskne žilka. Nicméně příště se pokusím ovládnout a nebudu všechno rovnou mazat. Možná.

Mouse Trap (08/01/2013)

Tři týdny hodně intenzivního kódování a mám to v kapse aneb to jsem si zase jednou krásně naběhnul! Bylo to tuším loni cestou z nebo na PLatariádu (či snad šlo o Atariádu? - kdo se v tom má safra vyznat?), co jsem Poisonovi slíbil, že mu udělám level editor pro jeho oblíbenou hru Mouse Trap. Po veskrze pozitivních zkušenostech s podobným udělátkem pro Deflektora jsem se bláhově domníval, že lze s úspěchem vstoupit dvakrát do stejné řeky, jenže to jsem ani zdaleka netušil, do čeho se to vlastně pouštím.

Úkol vypadal na první pohled snadno. Mouse Trap má podobně jako Deflektor levely na jednu obrazovku, očividně poskládané z nějakých opakujících se statických a pohyblivých prvků. Ovšem zatímco Deflektor nebo notoricky známý Robbo mají jednotlivá kola hezky přístupná v paměti, respektive je člověk rovnou okem vidí v samotném bináru hry, Mouse Trap tak přívětivý není. To jsem ke svému značnému zklamání zjistil velmi záhy, a proto jsem taky editůrek nedal dohromady ještě vloni během jednoho víkendu, jak jsem si původně naivně maloval.

Nicméně slib je slib a kdo jednou byl Jiskrou a prošel i Pionýrem, nemůže jinak než přísahu dodržet. Začátkem prosince jsem tedy začal jednat. Nejprve jsem Mouse Trap prohnal disassemblerem a pak jsem nesmírně pracně zjišťoval, jak to tam vlastně autor Brian Jobling dělá. No ano, ten slavný Brian Jobling, zodpovědný (mimo jiné) za úžasné gamesky Draconus a Zybex. Jinými slovy žádná máčka, nýbrž kodér par excellence.

Myslím, že není nutné, abych tu podrobně popisoval, jak jsem se postupně propracovával vnitřnostmi Mouse Trapu a jak jsem do svého level editoru přidával všechny potřebné funkce. Bude docela dobře stačit, když telegraficky uvedu zjištěné skutečnosti a z demonstračních důvodů rozeberu (místy bit po bitu) data pro jedno kolo, to aby si přišli na své také fajnšmekři. A třeba i pan Poison konečně pochopí, co s tím bylo za práci a zkusí mi za můj výtvor poděkovat, což mimochodem doposud neráčil učinit. :)

Vše, co jste chtěli vědět o hře Mouse Trap, ale báli jste se zeptat:

  • každý level se skládá ze dvou nezávislých vrstev, vrstvy statických a vrstvy dynamických elementů,
  • statické elementy lze vybírat z deseti různých setů po šestnácti elementech, které však vzájemně nelze kombinovat,
  • statické elementy jsou dvojí velikosti, jednak čtvercové (8x16 pixelů v grafice 15) nebo obdélníkové (8x32 pixelů), přičemž oba tyto typy se mohou vzájemně překrývat,
  • dynamické elementy jsou pro všechny levely stejné a celkem jich je na výběr třicet dva,
  • levely jsou v paměti uloženy pomocí jednoduché komprese, díky které zabírá všech 22 kol pouze 1,7 kB,
  • v bináru hry je uloženo poměrně dost statických i dynamických elementů, které nejsou v žádném levelu použité.

level03

level 03

Následuje podrobná analýza dat pro třetí level, který jsem vybral pro jeho malý počet dynamických elementů. Nejdřív hexa zápis (v paměti od $25CB):

$28 $12 $30 $41 $02 $06 $DF $04 $6E $55 $24 $30 $90 $80 $C8 $5A
$69 $36 $47 $04 $6E $55 $24 $2B $A0 $99 $00 $99 $20 $0F $8A $2D
$D1 $A0 $0F $D1 $00 $22 $01 $13 $02 $21 $10 $0F $8C $C0 $0F $F0
$00 $D1 $12 $22 $20 $12 $22 $02 $D1 $80 $02 $71 $10 $0F $25 $10
$D2 $AA $10.

Nyní, pěkně bajt po bajtíku, co je přesně co:

  • $28 = grafický set pro daný level (sety mají čísla $00, $14, $28, $3C, $50, $64, $78, $8C, $A0 a $B4),
  • $12 = dolní čtyři bity barva 709, horní čtyři bity barva 712 (vybírá se z palety osmi předem daných barev),
  • $30 = dolní čtyři bity barva 710, horní čtyři bity barva 708,
  • $41 = dolní čtyři bity startovací x-ová pozice myši, horní čtyři bity startovací y-ová pozice myši (je použit raster statických elementů [čili 16 sloupců a 12 řádků] a v x-ové ose se počítá pouze na liché pozice),
  • $02 = počet dynamických elementů (počítáno od nuly, čili tři),
  • $06 = startovací x-ová pozice prvního dynamického elementu (souřadnice dynamických elementů jsou počítány po pixelech podle běžné zvyklosti BASICovské grafiky s nulou v levém horním rohu, nicméně liché pozice v x-ové ose jsou ignorovány a zobrazují se pouze sudé),
  • $DF = startovací y-ová pozice prvního dynamického elementu,
  • $04 = nižší limit pohybu prvního dynamického elementu,
  • $6E = vyšší limit pohybu prvního dynamického elementu,
  • $55 = šestý a sedmý bit určují rychlost pohybu elementu, bity čtyři a pět určují velikost přírůstku v dané ose pohybu a konečně spodní čtyři bity se násobí čtyřmi a jsou spolu s šestým bitem dalšího bajtu použity k definici typu předmětu (rychlosti jsou tedy čtyři z bitových kombinací [00], [01], [10], [11] a nám zde vychází rychlost 01, neboť $55 = %01010101; přírůstek je 1 pixel a spodní čtyři bity po vynásobení dávají průběžný výsledek $14),
  • $24 = spodních pět bitů je použito k definici parametrů pohybu, již zmiňovaný šestý bit k dodefinování typu předmětu a nejvyšší bit není použit (nultý bit určuje pohyb v x-ové [0] nebo v y-ové ose [1]; první a druhý bit definují typ pohybu aneb [00] znamená pohyb tam a zpět od limitu k limitu, [01] znamená pohyb od nižšího k vyšší limitu a [10] znamená pohyb od vyššího k nižšímu limitu, zatímco kombinace [11] je ignorována a je vyhodnocena stejně jako [01]; třetí bit definuje, zda jde o přátelský [1] či nepřátelský [0] element - přátelské elementy jsou pouze lano, kus sýra a plošinka; čtvrtý bit určuje, zda se element při typu pohybu tam a zpět na "obrátce" změní na element otočený o 180 stupňů - [0] pro všechny elementy s výjimkou hada, nohou a hlavy draka; pátý bit definuje pohyblivý [1] či nepohyblivý element [0]; v našem případě tedy suma sumárum vychází z bitové kombinace %00100100 dynamický předmět typu $14 neboli pohybující se zabíjecí ruka plazící se v x-ové ose od nižšího limitu $04 k vyššímu limitu $6E),
  • $30,$90,$80,$C8,$5A,$69 = data pro druhý dynamický element, tentokrát se jedná o plošinku pohybující se v y-ové ose,
  • $36,$47,$04,$6E,$55,$24 = data pro třetí dynamický element, což je opět vraždící ruka v horní polovině obrazovky,
  • $2B = počet bajtů pro definici statické vrstvy levelu,
  • $A0 = dolní čtyři bity první element, v tomto případě prázdno, po kterém následuje v horních čtyřech bitech počet mezer (počítáno od nuly neboli jedenáct kousků),
  • $99 = dolní čtyři bity element číslo $09 (mizející obláček), horní čtyři bity další element $09,
  • $00 = dolní čtyři bity prázdno, z horních čtyřech bitů pouze jedno,
  • $99 = opět dva obláčkové za sebou (elementy $00 až $07 jsou čtvercové, elementy $08 až $0F obdélníkové),
  • $20 = tři mezery,
  • $0F = dolní čtyři bity element $0F, což je flaška dobrého pití, horní čtyři bity mezera,
  • $8A = dolní čtyři bity definují počet mezer z předchozího bajtu (jedenáct), horní čtyři bity obdélníkový element $08 (krápník), který se nahoře i dole překrývá s jinými elementy, ale je to tak chytře nakreslené, že to není vidět,
  • $2D, $D1, $A0, $0F, $D1, $00, $22, $01, $13, $02, $21, $10, $0F, $8C, $C0, $0F, $F0, $00, $D1, $12, $22, $20, $12, $22, $02, $D1, $80, $02, $71, $10, $0F, $25, $10, $D2, $AA, $10 (to už je jasný, ne?).

Pro úplnost bych měl ještě asi dodat, že lze stvořit i dynamické elementy pohyblivé ve dvou osách. To se dělá tak, že jeden a ten samý element je definován dvakrát za sebou, jednou s pohybem v y-ové ose a poté s pohybem v x-ové ose, načež se tyto pohyby jednoduše skládají do jednoho. A ještě dvě poznámečky: dynamických předmětů může být v jednom levelu maximálně sedm a hodně zajímavé na nich je to, že v y-ové ose mohou nahoře zcela opustit obrazovku, neboť první viditelný řádek v jejich souřadnicovém systému má číslo 35.

Závěrem bych rád zdůraznil, že tento zápisek je nutno chápat nejenom jako moje tradiční nehorázné chlubení se, jakej že jsem to chlapák, kabrňák, borec, machr, king, jednička, dvojka, trojka, čtyřka, pětka, atd., ale mým úmyslem bylo též na Poisona veřejně naprášit, že má v ruce nástroj na vytvoření zbrusu nových levelů do hry Mouse Trap. Protože jak to na něj jednou prasklo, neměla by od něj Atari komunita dle mého soudu očekávat nic menšího, než že do Flopu #56 připraví bombu jménem Mouse Trap II.

A máš to, Poisone!!

| 2016 | 2015 | 2014 | 2013 | 2012 | 2011 | 2010 | 2009 | 2008 | 2007 |

Global Stats:

4542 games
2949 demos


Search:
Top dowloads:

Games:
Lemmings 9384x
Cubico 8725x
Mind Blast 7953x
HexxagonXE 7745x
Astro Road 7654x
FreeCellXE 7589x
Another World 6390x
0 Grad Nord 6010x
Jaskiniowiec 5358x
Janosik 5180x

Demos:
Sturbon Intro 8302x
A Tribute to Quorthon 7150x
404 Error 5807x
Numen 5450x
1k Party 5309x
8k-Detro 4917x
500 Proc Intro 4743x
3D Homer 4743x
10 Jahre AMC 4606x
Aurora 4506x

 


  a8.fandal.cz by Dharma, Fanatic and Fandal, 2004