JET SET WILLY

Demo JET SET WILLY podle verze ze ZX Spectra (1. 12. 2018)

JET SET WILLY – Soubor v binárním formátu IntelHEX s testovací verzí hry

Ukázka demoverze JSW

28 komentářů u „JET SET WILLY

  1. Libor L.A.

    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.

  2. Libor L.A.

    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.

  3. Libor L.A.

    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.

  4. RomBor

    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.

    1. Libor L.A.

      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..

  5. Libor L.A.

    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.

  6. Libor L.A.

    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á.

  7. Libor L.A.

    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..

  8. Libor L.A.

    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.

  9. Libor L.A.

    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.

    1. Libor L.A.

      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.

  10. Libor L.A.

    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.

    1. RomBor

      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

      1. Libor L.A.

        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.

        1. Libor L.A.

          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í.

          1. RomBor

            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ť…

            1. Libor L.A.

              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é.

  11. Libor L.A.

    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ěž.

      1. Libor L.A.

        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.

        1. Libor L.A.

          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..

          1. Libor L.A.

            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.

            1. Libor L.A.

              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.

  12. RomBor

    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. ;-)

  13. Libor L.A.

    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í.

  14. Libor L.A.

    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.

  15. Libor L.A.

    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.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.