Základní informace
- datum vydání poslední verze na PMD-85: 2. 2. 2019
- portace původního kódu pro ZX Spectrum
- využití RAM: 0000h ÷ 7FFFh, C000h ÷ FFFFh (včetně zápisníku)
- podpora modelů: všechny verze PMD-85 (1/2/2A/3), Didaktik Alfa, Consul C2717 (na PMD 85-3 spustitelné v režimu kompatibility)
- barvy: monochrom (2)
- hudba/zvuky: pouze zvuky, hudba nebyla implementována
- ovládání: klávesnice, volitelně joystick A nebo B
Status
- finální verze hry, uvolněno k použití
Ovládací klávesy
- kurzorové šipky = pohyb WILLYho vlevo a vpravo
- SHIFT = výskok
- RCL = okamžité ukončení celé hry a její restart
- SPACE = přechod do režimu PAUSE
Popis hry a její vlastnosti
Klasika. Pomozte WILLYmu posbírat všechny předměty v domě (83) a dostat se před půlnocí do postele.
Z důvodu nedostatku paměti PMD-85 hra obsahuje pouze to nejnutnější, co definuje tuto hru. Na druhou stranu se při vývoji podařilo zachovat plný rozsah animací, originální grafiku jako celek a kromě létajících šipek je hra plně věrná originálu i z hlediska pohybu objektů.
Hra je v konečném důsledku originálním kódem, který částečně respektuje datové bloky původní hry, nicméně z důvodu zachování dynamiky hry byla plně převzata struktura centrální smyčky a procedury pro pohyb WILLYho. Vše ostatní je optimalizováno s ohledem na rychlost a množství dostupné paměti a jedná se o zcela nové konstrukce.
Od originálu se hra liší v těchto bodech:
- Hra nemá ověření barevného kódu jako ochranu před kopírováním.
- Hra nemá úvodní obrazovku s hudbou.
- Není implementována hudba během hry.
- Hra je striktně monochromatická.
- Pohyb po laně je intuitivní podle náklonu lana.
- Jsou opraveny chyby originální verze (grafika i funkce).
- Šipky mají jiný pohybový mechanismus.
- Hra nemá funkci teleportu (aktivace heslem WRITETYPER u originálu).
POKE
Protože hru obecně nelze po RESETu PMD-85 znovu spustit (někdy lze, pak ovšem s poškozenými animacemi), obsahuje vestavěné CHEATy, dostupné v úvodním menu. Volba IMMORTAL způsobí kolizní a pádovou nesmrtelnost. Volba INFINITY pak vypne ubývání životů, ovšem WILLY umírá jak po dotyku nepřátel, tak i při pádu z velké výšky. Tyto volby se během vývoje ukázaly jako logické rozdělení typů nesmrtelnosti a proto byly přejaty i do finální verze.
Soubory ke stažení
- JET SET WILLY – Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu
- Průjezd hry – video Solarisova průjezdu hry na YouTube
Poděkování
Psát hry tohoto typu v tak krátké době je možné pouze s dlouhodobou přípravou, nebo, tak jako v tomto případě, lze navázat na to, co již vytvořili jiní. Verze JSW pro PMD-85 je založena na analýze zpětného překladu originálu od J. G. Harstona (http://mdfs.net/Software/JSW), dodatečně byla verze pro PMD-85 konfrontována s poznatky Richarda Dymonda (http://skoolkid.github.io/jetsetwilly) a největší část rutinní práce zastaly programy PSPad (http://www.pspad.com/cz), emulátor PMD-85 od RM-TEAMu (http://pmd85.borik.net/wiki/Intro) a nejmenovaný tabulkový kalkulátor, který převáděl binární data přímo do assemblerovských zápisů.
Studie proveditelnosti s použitím systému dvou buferů, tak jak je používá originální verze pro ZX Spectrum, ukázala ca 2/3 rychlosti, kterou jsem naměřil na XBOXu. Více z toho asi vyždímat nepůjde. Těch figurek WILLYho v herním poli je osm, abych nasimuloval animaci příšer. Ale jestli tam je jeden WILLY, nebo jich je osm, tak to na rychlosti hry skoro vůbec není poznat. Stejně tak nemá žádný dopad vynechání animace figurek, symbolizujících zbývající životy hráče. Prostě kopírovat 2x 6kbajtů na každý průchod herní smyčkou (což připadá na jeden krok WILLYho o 2 pixely) je samo o sobě velice konstantní a spolehlivý zpomalovač.
Mám ještě takový nápad, jak vynechat to kopírování buferů. Ale potřebuje to čas. Tedy čas na rozjímání nad možnostmi.
V této variantě se určitě nelze bavit o barevném provedení. Vlastně v žádné variantě. Zkoušel jsem to, avšak prosakování barevných atributů vytváří ještě vyšší level než u originálu a není to vůbec pěkné. Nemluvě o další ztrátě rychlosti.
Protože předchozí uvolněná demoverze neukazovala v plném rozsahu, cože to vlastně umí, nahrál jsem jak nový program s hýbajícími se figurkami Willyho, tak jsem i pro rychlý náhled nahrál statický obrázek.
Pokročilé demo uvolněno.
Prosakování atributu polojasu sbíratelných objektů do okolního zdiva budu řešit jednak posunem těchto objektů tak, aby se prosakování atributů barvy neprojevovalo, a tam, kde by to ovlivnilo hratelnost hry, posunu celý výřez obrazovky o jeden videobajt vlevo nebo vpravo. A pak mám ještě jednu možnost. A hra je tak už zkompilována. Sbíratelným objektům nekolísá jas ale natvrdo blikají. Ovšem už to není tak pěkné.
Zbývá modul lana, nepřátelských objektů a pár drobností. Bludiště je komplet.
Tak toto sa hrá úplne perfektne. Tá Šuhajdova verzia bola fakt nehrateľná.
Podarilo sa mi ale spadnúť do nejakej „diery“ (už si nespomeniem, čo to bola za miestnosť) a nešlo z nej vyskočiť. A keďže nefugovala STOPka, na prerušenie hry, tak som to musel iba Resetnúť. Ale to je detail.
STOP funkci jsem z tlačítka STOP přesunul na RCL, aby nedošlo k nechtěnému stisknutí spolu se SHIFTem. Přemýšlím nad variantou, že bude funkce STOP (=RCL) pouze ubírat jeden život a restartovat hru v daném sektoru. To je sice užitečnější ale originál to tak tuším nemá. Ten restartuje celou hru. A s tím souvisí i pád do díry například v místnosti The Bridge. Mám takový dojem, že ta nemožnost vyskočit z díry koreluje s nemožností restartovat místnost, že je prostě původním záměrem nastražit totální past. Takových míst je ve hře několik, alespoň pokud mohu soudit podle verze na XBOXu.
Ale mám tam nějakou chybu v detekci sbíratelných objektů. Například v místnosti The Hall lze sebrat objekt, který tam není.. A takových věcí se určitě ještě najde mnoho.
Momentálně dělám rozbor nepřátel, tedy jejich definičních dat. Podle toho se rozhodnu o způsobu uložení těchto dat. Zbývá mi zhruba 2D00h místa v RAM a to musím dodělat právě animace nepřátel. Bohužel místo 4 pohybových fází každého nepřítele musím definovat těch fází 12, abych dokázal emulovat pohyb, původně propočtený na osmipixelový bat. V tom je hlavní výzva, týkající se dostupné paměti. Ale když už se podařilo vyřešit rychlost..
Dnes nová verze. Základní struktura GUARDIANS (pohybující se příšery) jede. Nicméně postupně teď budu „nahazovat“ jednotlivé kousky v místnostech a ladit jejich pozice. Tak třeba ptáci už lítají ve všech místnostech, medúza jezdí zatím jen v „The Off Licence“ a „Inside the MegaTrunk“. Zrovna zmíněná „The Off Licence“ je celkem náročná na strojový čas kvůli blikání sbíratelných objektů plus ty dvě příšery a samozřejmě WILLY. Přesto se přechod přes celou místnost na šířku téměř přesně rovná „spektráckým“ zhruba deseti vteřinám. Verze pro PMD-85 je zcela zřetelně více závislá na počtu objektů v místnosti než je tomu na Spectru. Ale je to daň za to, že se to vůbec podařilo.
Přestože jsem data místností zkomprimoval z 256 bajtů na místnost na hodnotu 85 bajtů na místnost (mínus 10kbajtů) a všechny sprites 8×8 pixelů uložil do zápisníku vedle videoram (3kbajty) a… plno dalších věcí, začíná mi rapidně rychle ubývat RAMky s každou další animací GUARDIANS. Je možné, že budu muset omezit počet různých potvor oproti verzi na Spectru. Z hlediska funkčního kódu už chybí jen zvuková reakce na smrt a sekvence GAME OVER. Ostatní věci jsou hotové, jen jsou třeba v aktuální verzi vypnuty.
Opět nová verze. Všechny programové části jsou hotovy, s jednou jedinou výjimkou (o které tedy vím). A tou je obsluha kývajícího se lana, které se nachází v některých místnostech. Až obsluhu tohoto lana dokončím, budu pokračovat v přidávání GUARDIANs (tedy pohyblivých nepřátel) až do vyčerpání paměti.
Hra bude opět pro všechny verze PMD-85 a proto využívá pouze 48kBajtů RAM. Protože hra nepoužívá kromě služební PPI 8255 (čtení stavu klávesnice a obsluha LED a BEEPru) žádný další periferní obvod, konverze na Consul 2717 či Maťo by měla být relativně bezproblémová.
Upload nové verze.
Zbývá dodělat:
– letící šipky nezpůsobují smrt WILLYho
– implementuji rozdílnou rychlost střídání animačních fází u svislých pohyblivých potvor
– doplnit animační fáze pohyblivých potvor podle dostupné paměti
– začistit místnosti podle hardwarových dispozic PMD-85
S těmi animacemi se to má následovně: Klíčové vodorovné potvory budu chtít animovat v osmipixelovém kroku, aby se to blížilo originálu. Typicky WILLY či jeho prasečí reinkarnace nebo tančící zajíc. Některé méně klíčové (pila, pták, pojízdný radar) asi převedu na šestipixelový krok, čímž ušetřím kvanta animačních dat a myslím si, že se tolik nestane. Ty svislé potvory bych tak teoreticky mohl mít všechny a to včetně střídání jejich fází (například ta mrkající medúza či žiletka se prostě animovat musí!)
Stejně jsem udělal jednu věc, kterou jsem se zpronevěřil originálu: šipky létají po šesti pixelech, nikoliv po osmi. Je vidět, že začínám tvrdě šetřit místem. Doteď jsem preferoval maximální rychlost..
Poslední vývojové kroky dospěly k těmto úvahám (a pokusům):
1) Ačkoliv je hra monochromatická, lze zvolit počet barev, které se pro každou místnost střídají. Pochodující životy pod hracím polem demonstrují dostupný počet barev v daném barvovém režimu. Režimy budou: monochrom (standardní UHF výstup), čtyři barvy (RGBM nebo WGRA) či osm barev (ColorAce). Ukázku ze hry v režimu ColorAce jsem hodil do článku nahoře.
2) Hodně animací bude redukováno ale na druhou stranu tam budou přítomny všechny jako na ZXS. Pokud hra zjistí, že je spuštěna na modelu s 64kB RAM, animace budou plnohodnotné podle originálu.
Upload poslední verze. Podpora monochromatické kolorace se povedla pro všechny části hry. Všechny objekty ve hře žijí. Jsem si vědom řady funkčních chyb (hlavně lano). Nyní pracuji na expanzi pohyblivých GUARDIANS u modelů se 64kB RAM. Na modelech se 48kB RAM jsou výběr a animace GUARDIANs dosti omezeny. Ale hra pojede i na těchto modelech a myslím, že to hratelnosti zase až tak moc neubírá.
Na modelech se 64kB RAM budou rozdíly vůči originální ZXS verzi pouze tyto: redukce barev, posun sbíratelných objektů v prostoru, aby nekolidovaly s GUARDIANS a aby jejich barevné atributy neprosakovaly do okolních objektů. Šipky se pohybují po 6 a ne po 8 pixelech. To by mělo být vše.
Díky za JSW. Rychlost je pořád výborná, a jde mi podstatně lépe než Traibazer. :)
Tohle ještě pár týdnů potrvá, než to učešu do finální podoby. Takže to bude takový vánoční dárek.
Hru už jde nyní přejet. To znamená, že počty (83ks) a umístění objektů je (v rámci možností) shodné s originálem. Po opravě nativních chyb originálu jde nyní přejet i místnosti The Forgotten Abbey a The Wine Cellar. Nemožnost projít tyto místnosti jsem původně považoval za chybný přepis pohybového mechanismu WILLYho ale studium zdrojů z internetu mi ukázalo, kde je v originálu chyba a jak ji opravit. Za což patří všem nadšencům JSW velké díky. JSW má nyní délku 9000h a pracuji na loaderu, který to bude umět natáhnout z MGF pásky včetně autostartu. Zhruba koncem týdne bych chtěl uvolnit finální testovací verzi. Vlastní program JSW už má kromě estetických vad jen problém s pohybem na laně a i tam je nějaký problém, zavlečený z originálu.. Ale je tam i moje chyba, protože se WILLY na laně chová trochu jinak než originál.
Super.
Pokiaľ je už kód takýto dlhý, pre zjednodušenie loadera odporúčam celú hru spakovať Quidom s tým, že sa rozpakovacia rutina umiestni „vedľa VRAM“.
Všetky naše hry sú spakované Quidom, čo jednak šetrí čas pri nahrávaní z kazety, prípadne šetrí miesto na diskete.
https://pmd85.borik.net/wiki/Quido
Rozumím, popřemýšlím nad tím. Je to sice trochu složitější v tom, že hra se sama přesouvá, protože se nahrává do oblasti budoucích obrazových buferů ale prinicipálně to možné je.
Zkoušel jsem zkomprimovat grafická data animačních fází ale algoritmus Quida vyhodnotil kompresi těchto dat jako neefektivní. Data určitě neobsahují opakující se znaky a systém citací již použitých řetězců tam asi také neuspěje. Drtivá většina bajtů má však nevyužity horní dva bity (ovšem ne všechny, první bajt animační fáze obsahuje v těchto dvou bitech informaci o šířce obrázku a poslední bajt má vždy nastaven MSB jako identifikátor posledního bajtu). Komprese programového kódu byla rovněž neefektivní ale tomu se ani nedivím. Redundance programového kódu procesoru by asi z principu měla být minimální.
Ako sa píše v popise utility, skús na koniec bloku dát (pakovaného súboru) pridať povedzme 20 núl (prípadne aj viac) a skús to spakovať opäť. Predpokladám, že by nemalo vadiť, že tam tie nuly na konci po rozpakovaní budú.
Obvykle je problematický iba úvod pakovania, kedy je potrebné, aby sa vytvoril aspoň nejaký priestor pre nepakovateľné sekvencie bytov.
V najnovšej verzii Quida 1.4 už je prepínač, ktorým je možné toto „predĺženie“ vynútiť, ale nejako sa mi „nedarí“ moje snaženia publikovať…
Tak jo, vložil jsem na konec souboru 64 nulových bajtů a z 4096 bajtů se to dostalo na 2995 bajtů. To je slušné.
Upload poslední vývojové verze hry JET SET WILLY.
Tentokrát, abych neztrácel čas s kompilací do samospustitelného balíčku, jsem uvolnil verzi v binárním formátu
IntelHEX. Tento formát lze samozřejmě natáhnout do emulátoru. A to takto (v uvedeném pořadí):1) otevřít dialog přes menu: „Soubor/Nahrát soubor do paměti…“ (nebo také Alt+F11)
2) zaškrtnou volbu „Hexa hodnoty“
3) do pole „Start“ zadat hodnotu 0000
4) vybrat cestu k rozbalenému souboru „jsw.obj“
Po stisku tlačítka „OK “ se už program sám spustí, neboť se natáhne i zásobník, obsahující samé nuly, což způsobí start od adresy 0000h. V menu emulátoru si vyberte stejný barevný režim jako zvolíte v menu HRY a můžete testovat.
A co vlastně chybí:
a) Vyčistit datové definice sektorů, které během vývoje hry někdy změnily formát. Může docházet ke kolizím GUARDIANs s pevnými překážkami, což vyvolá smrt WILLYho. Stejně tak může dojít k desynchronizaci pohybu více GUARDIANs mezi sebou a při jejich dotyku se aktivuje smrt WILLYho.
b) Rychlost střídání animací svislých GUARDIANs nemusí odpovídat originálu. Budu ladit. Ze stejného důvodu mohou být (ve dvou případech, například Priest’s Hole tuším..) zaměněny typy GUARDIANs. Bude opraveno.
c) Určitě plno dalších chyb, způsobených chaotickým vývojem, který je vždy nutným důsledkem snahy využít příval nosných myšlenek. Tyto chyby budu samozřejmě čistit rovněž.
Dovolil by som si tvrdiť, že je to obyčajná bnárka a nie súbor vo formáte IntelHEX (https://en.wikipedia.org/wiki/Intel_HEX).
Emulátor IntelHEX nepodporuje.
Jak vidno, těch chaotických myšlenek se mi v hlavě honí více, než si připouštím. Samozřejmě, že je to binární soubor. Vždyť jsem jej pro kontrolu otevřel, viděl, že je to binárka a napsal… IntelHEX.
A když už píšu, přidám i aktuální stav. Všechny resty jsou zapracovány, za poslední dva dny ovšem vzniklo plno dalších podnětů, které by měly především mírně zkrátit kód, aby se tam vešly případné nové záplaty a texty. Začal jsem ladit jednotlivé místnosti na shodu s originálem. Tj. celkovou strukturu místnosti, rozmístění objektů, pohyby a vzájemnou synchronizaci GUARDIANs, vhodnost barevného schématu, průchodnost atd. Titulní obrazovka během nahrávání je už předkompilována pro integraci do samospustitelného souboru pro MGF.
Během týdne bych chtěl vypustit novou verzi, opět binární (my roztržití jedinci tomu někdy říkáme IntelHEX). Následovat by měla několikatýdenní karanténa a před svátky bych to zabalil do autostartu. Ta příští binární verze by mohla být kompletní, určená pro závěrečný test.
Protože jsem dnes implementoval tolik změn, že se mi o tom ráno ještě ani nezdálo, nahrál jsem ke stažení novou verzi. Momentálně eviduji poslední mi známý rest, a to je chyba při smrti WILLYho na laně. WILLY se pak samovolně někdy vrátí na lano, i když je od něj daleko. Ale asi vím, kde hledat. Momentálně testuji všechny místnosti. Tedy, popravdě, plný certifikát obdržely zatím místnosti „The Bathroom“ a „Top Landing“. Tahle část je úmorná a nezáživná. Ale i tím je třeba se prokousat..
Detekovány chyby:
1) limity pohybu vodorovných GUARDIANs (obecně všude, souběh 2 chyb)
2) šikminy v místnostech „The Chapel“ a „Halfway up the East Wall“ nemám samohybné směrem dolů
3) příšera v místnosti „The Chapel“ nemá animovanou tlamu
4) zvuky při skoku a ztrátě života WILLYho jsou delší než originál – budou zkráceny
Aktuálně 4 místnosti prošly kompletním testovacím cyklem, The Chapel projde testem po odstranění výše uvedených chyb.
20 místností je kompletně odladěných na pixelové úrovni. Každý sektor nechám běžet pár vteřin, aby ta nejpomalejší postava udělala několik kompletních pohybových cyklů tam a zpět. A během té doby testuji pixelovou pozici a animační fázi ostatních postav. Vše sedí. Někdy jsem musel upravit limity pro pohyb, jindy počet animací. Ale těch výše uvedených 20 místností udělá všem obdivovatelům originálu asi radost. Další místnosti samozřejmě odladím rovněž.
Co jsem asi ještě nezmínil, funkci teleport (přístupnou přes heslo WRITETYPER) implementovat nebudu, stejně tak hudbu během hry.
Ale, samozrejme, zabudol som na to najdôležitejšie, že ma teší, že je to už tak ďaleko, aj keď dohrať to, bude pre mňa veľká výzva. ;-)
Dnes revoluční pokrok (z hlediska míry dokončení ovšem pokrok směrem zpět). Protože jsem neustále látal pixelové nesrovnalosti, vyplývající z omezeného prostoru pro animace GUARDIANs, vyzkoušel jsem jednu fintu. Všechny animační fáze si hra ponese v původním formátu 16×16 pixelů (jedna fáze tedy pouhých 32 bajtů) a až před vstupem do místnosti se všechny animační fáze expandují na formát PMD-85. Není to vlastně vůbec nic revolučního, spíše jsem na začátku tuto věc zavrhnul na základě obav, že to bude pomalé. Ale není. To zpoždění není asi ani postřehnutelné.
Co jsem tím ušetřil? Například pojízdný radar zabírá nyní (stejně jako v originále na ZXS) 4 fáze x 32 bajtů, celkem tedy 128 bajtů. V předchozí vývojové verzi JSW pro PMD-85 však zabíral neskutečných 472 bajtů! To byla bohužel daň za to, že hra simulovala osmipixelový rastr, i když PMD-85 má rastr šestipixelový.
A co tím získám? Hra bude mít (alespoň doufám) plné animace i na verzích se 48kB RAM. A nebudu muset řešit kompromisy ani na verzích, které měly té RAM 64kB. S tím je spojeno i mírné zpomalení odhadem v řádu jednotek procent, neboť nelze jednotlivé animační fáze optimalizovat (protože se automaticky počítají z předlohy).
Na jednu stranu jsem se vrátil o velký kus zpět, neboť infrastrukturu pro pohyblivé GuARDIANs a jejich datové definice musím z velké části udělat znovu. Ovšem ten přínos za to myslím stojí.
Krátká zpráva z bojiště: Posledními úpravami jsem ušetřil 6kB RAM. Aby se hra vešla do standardních 48kB RAM i těch „menších“ modelů PMD-85, musím ještě někde naškrábat zhruba 3kB. Ale to už je blízko. Mohu zavést kompresi, vypustit podporu barev, nějaké místo ještě zbylo v zápisníku vedle videoram. Ale jak nápady postupně přicházejí, začíná se rýsovat finální podoba, která se čím dál tím více podobá originálu i v těch nejmenších detailech. Zhruba do konce týdne bych chtěl vypustit verzi, která bude výchozím modelem pro zeštíhlování ale bude kompletní (bez testování). To avizované zpomalení není tak markantní, jak jsem se obával. Místnosti, kde jsem měřil dobu průchodu WILLYho napříč obrazovkou, vykazují stále čas kolem 10 vteřin.
Do plného provozu hry na všech verzích PMD-85 zbývá naškrábat necelý kilobajt RAM. Ale stále je masivně kde brát. Bohužel hra už není kolorovaná ale striktně černobílá. Ovšem na druhou stranu se tím vyřešila řada vynucených odchylek od originálu, které tímto mohu vrátit zpět.
Dnes jsem se ve vývoji hry vrátil zhruba tam, kde jsem byl 1. 12. 2018. Hra je kompletní a začíná pixelové ladění místností. Protože celá hra jede nyní striktně v jednobarevném režimu, neexistuje problém s prosakováním barvových atributů a já teď musím vrátit vše zpět, aby to bylo naprosto shodné s originálem. A že těch změn bylo..
Hra je nyní bez jakýchkoliv omezení spustitelná na všech verzích PMD-85 (stačí ji spodních 32kB RAM plus 16kB videoram. A protože po několika optimalizacích zbylo celých 51 bajtů, tak je jasné, že s rychlostí, hudbou, teleportací, funkcí PAUSE, barvami a dalšími vymoženostmi jsem skončil.
Poslední verzi hry jsem dal ke stažení do hlavního článku.
Finální verze bez autostartu je ke stažení. Myslím, že už tam nic nechybí. Dal jsem zpět funkci PAUSE (aktivuje se stiskem SPACE), a také jsem dodělal zastavování kráčejících životů, pokud je na obrazovce 7 nebo 8 GUARDIANs, protože to už i8080 dochází dech. Tak alespoň mírná akcelerace. Není to chyba. Rovněž je v úvodním menu volba ovládání a protože hru nelze po RESETu opět spustit, je tam přímo možnost zapnout i nějakou formu CHEATů. Nyní ještě musím ověřit synchronizovaný chod GUARDIANs skoro ve všech místnostech, ale tam nepředpokládám nějaké změny. Ale jistota je jistota.
Upload upravené finální verze. Opraveno nekorektní přepínání memory bankingu u verze PMD 85-3 a opravena chyba default nastavení ovládání. Na druhou stranu proběhlo množství testů, kterými hra prozatím prošla. V emulátoru funguje dokonce i na modelech Didaktik Alfa a Consul 2717.
Asi se mi podařilo najít další chybu původního kódu, která zatím není nikde popsána. Pokud dobře načasuji skok, WILLY proletí zdí (WALL) jako by tam nic nebylo. To dělalo problémy hlavně v místnosti Watch Tower. Pokud totiž algoritmus pohybu WILLYho vyhodnotí, že je načase skok ukončit, zarovná jeho výšku na 8 pixelů (modulový rastr). Ale výpočet vypadal asi takto:
Y:=[(Y+8)div8]*8
A právě ten člen 8div8 přidal falešný pokles WILLYho o jeden modul dolů. I když pod ním byla zeď. Po opravě na tvar:
Y:=[(Y+7)div8]*8
Už dojde opravdu pouze k zaokrouhlení a nikoliv k přenosu o 8 pixelů níže a zatím všechny kritické místnosti takto fungují (Watch Tower, The Wine Cellar).
Ve skutečnosti se jedná o kód:
Chyba je tedy (alespoň prozatím si to myslím) odhalena, opravena a v další verzi již bude zahrnuta.
Přestože jsem další úpravy nepředpokládal, přišel dnes nápad, jak zkrátit a zrychlit kreslení lana. Tak jsem tu úpravu udělal. Nově vzniklé místo (ca 39 bajtů) jsem použil na zrychlení hry.
Rovněž se v závěrečné fázi testů, kdy už spíše testuji hratelnost než funkčnost, ukázalo jako chybné rozhodnutí vypustit možnost okamžitého ukončení hry. Nyní jsem se s nekonečným počtem životů dostal do situace „opakovaná smrt pádem z velké výšky“ – a on to nemá kdo zastavit. Takže v další verzi bude změna: RCL vyvolá okamžitý konec hry. Tím to sjednotím s originálem a nebudu dál laborovat.
Další verze bude uvolněna 24. 12. 2018 (pokud bych ještě odpoledne na něco přišel). Ale v zásadě už cítím, že se začínám točit dokola a recyklovat staré nápady, které jsem už jednou zavrhnul. Proto dokončím testy vzájemné synchronizace GUARDIANs pro zbývajících asi dvacet místností a budu to chtít ukončit.
Tímto potvrzuji, že hru lze projet a dokončit. Sice s nekonečným počtem životů – ale lze. Doteď jsem projížděl místnosti s absolutní nesmrtelností, takže jsem reálnou průjezdnost neřešil. Takže tento test byl pro mne samotného premiérou. A proto jsem kritické místnosti řešil podle videa na youtube, kde je průchod celou hrou na ZX Spectru. A ono to sedí. Na pixel přesně. Tak to mělo být a doufám že i je.
JSW pro PMD-85 tímto oficiálně uvolňuji k použití. Dnes jsem ukončil testovací karanténu a znovu zkontroloval parametry výsledné kompilace. Za ten měsíc od posledního uploadu se vyskytly dvě drobné věci, které jsem ještě zahrnul do poslední kompilace. První změnou je, že kráčející životy pod herním polem se zastavují už od 6 pohyblivých nepřátel v hracím poli. Druhou změnou je pak to, že když v úvodním MENU přepínáte ovládání joystickem, souběžně s tím se zapíná či vypíná i příslušný „řídicí“ bit na portu C obvodu 8255 GPIO. To proto, aby se dala na joystick pověsit LEDka, která indikuje aktivní joystick.
Super, mě se ta původní verze taky moc nelíbila, bylo tam hodně chyb.
Udělal jsem longplay video. Narazil jsem na chybku v obrazovce The Hall, je tam předmět, který tam nepatří (v čase 16:30).
https://youtu.be/sl-rmOBWNkg
Je to předmět, původně umístěný vedle kříže v místnosti First Landing, díky čemuž prý byl v první verzi nedostupný. Existuje několik řešení přemístění tohoto předmětu. Tedy vím o dvou. Některé návody doporučovaly „vybourat“ stěnu vedle kříže, aby tam šlo skočit. Druhá verze, ke které jsem se přiklonil já, spočívá jen ve změně čísla místnosti, přičemž poloha v rámci obrazovky zůstává stejná. Podobných „řešení“ je v konverzi pro PMD-85 více. Ale jedná se spíše o úpravy pohybového mechanismu, jako například povolení průchodu spodní části těla WILLYho přes zeď a podobně. Zapracoval jsem všechny známé chyby a jejich pozdější zdokumentované opravy, viz jeden z odkazů v hlavním článku (Richard Dymond). Pravda je, že bez těch úprav hru nebylo možné dohrát. Ostatně i ten zpětný překlad od J. G. Harstona má podmíněné kompilace oprav původních chyb.
Ale díky za zpětnou vazbu.
asi to není chyba, on ve Spectrum verzi ten předmět je jako skrytý (chyba nebo záměr?), ale je tam…. viz https://www.youtube.com/watch?v=94Ywx6uVn9E čas 17:03-17:05
Až teď jsem si vzpomněl, že snad byl i skrytý. A taky jsem si vzpomněl na předmět v místnosti Swimming Pool, ten zase díky svému barevnému atributu byl sebrán ihned po vstupu WILLYho do místnosti, bez ohledu na to, ze které strany WILLY přišel..
Můžu mít dotaz ohledně kódu a formátu místností? Proč se podlaha v „Rescue Esmeralda“ nebo „Out on a limb“ chová jako schody? Stále nemohu dohledat, proč tomu tak je.
Matně si vzpomínám, že jsem na to přišel dodatečně až při hře originálu a řešil to nějakou záplatou. Stejně tak se chová tuším i šikmina v Halfway up the East Wall. První rychlý náhled do zdrojáku mi nic neukázal, zkusím dohledat.
Už jsem to našel :-)
https://skoolkit.ca/disassemblies/jet_set_willy/reference/facts.html#floorRamps
There are five rooms in which the floor tiles behave like ramps because their attribute byte matches that of the (unused) ramp tile:
Out on a limb (25 tiles)
Rescue Esmerelda (13 tiles)
I’m sure I’ve seen this before.. (4 tiles)
Up on the Battlements (4 tiles)
On the Roof (5 tiles)
Vida, nakonec sis pomohl sám… Tak hodně štěstí s analýzou či přenosem na jiný systém…