FLAPPY2k Remaster

Základní informace

  • datum vydání poslední verze na PMD-85: 9. 11. 2019
  • remastering verze FLAPPYho od VBG
  • využití RAM: 0000h ÷ 7AD2h, C000h ÷ FFFFh
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • hudba/zvuky: ano/ano – vestavěný akustický měnič

Status

  • ve vývoji (under development)

Soubory ke stažení

betaverze hry– Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu

Galerie obrázků (hra v režimu ColorAce)

Úvodní obrazovka

Zadání hesla

Výběr sektoru

Sektor 195

 

 

 

43 komentářů u „FLAPPY2k Remaster

  1. Libor L.A.

    Protože mě napadlo pár zajímavých programátorských konstrukcí, oprášil jsem cca 15 let starý záměr – FLAPPY v barvách. Pokud chce někdo sledovat, jak se k nalezenému knoflíku šije kabát, má možnost sledovat vývoj od začátku. Tedy v mém pojetí. Důvod, proč jsem začal ještě před dokončením The Magician’s Curse a proč jsem to vtlačil před plánovaného PoP je ten, že mě nikým nezvána navštívila Inspirace. A řekněte jí NE…

  2. Zdeněk

    Sleduji a těším se na výsledek! Už teď to vypadá skvěle! Až teď jsem poznal, že ty střely nejsou křivé šipky, ale muchomůrky.

  3. Vlastik

    Zdravím.
    FLAPPY si nové zpracování určitě zaslouží. Byla to moje prvotina a uznávám, že je ten program dost neohrabaný.
    Třeba teprve těsně před dokončením jsem si všiml, že originál má sektory kódovány mnohem úsporněji…
    Dnes bych to samozřejmě řešil zcela jinak…
    Držím palce a se zájmem sleduji
    Vlastik

    1. Libor L.A.

      Díky za to, že se ozval. Tak trochu jsem měl černé svědomí, že Ti překopávám Tvé dílo bez předchozího svolení. Stejně jsem si říkal, že Ti napíšu o svolení. Akorát jsem byl celý týden pryč a pouze večer sedal k poště. Sice jsem první grafické statické náhledy měl už na jaře na Foreveru 2019 ale fakticky na tom dělám posledních zhruba pět týdnů.

      Ano, na sektorech ušetřím pár kilobajtů, ale zrovna dnes jsem byl překvapen tím, jak efektně pracuje Tvá verze s obrazy pohyblivých tvorů ve videoram (tedy jejich rozpoznávání). Já jsem tu novou verzi předělal tak, že pohyblivé objekty „žijí“ v buferu 40×22 a do videoram se jejich bitmapy pouze zapisují. To by mělo usnadnit překlopení na další platformy s procesorem i8080.

      Někde je v originále opravdu vidět určitá „neohrabanost“ (zřetězené skoky) – ale to považuji za důsledek faktu, že v té době se nedalo kompilovat celé projekty na nějakém PC a když už člověk napsal pár kilobajtů, tak řadu věcí už mohl řešit pouze záplatami s odskokem „na konec a zpět“. Jinak klobouk dolů, toto dílo je potvrzením toho, že pokud v dané době nejsou k dispozici špičkové nástroje, tak síla lidského mozku o to více dokáže absenci zjednodušujících nástrojů kompenzovat efektními myšlenkami. Ostatně v té nové verzi bude celá vnitřní herní smyčka a obslužné procedury pohyblivých objektů z algoritmického hlediska téměř původní (jasně, předělal jsem to na bufer).

      Pokud zbude dost místa, zvažuji „Construction mode“, jako že by se v rámci té hry dalo jednu místnost měnit dle libosti a pak si ji zahrát. Proto jsem tu vnitřní herní smyčku mírně upravil jako podprogram, který vrací hodnotu 0/1 jako neúspěšná_hra/úspěšná hra. A proto jsem tam i dodělal demo pro sektor 1, který lze odehrát automatem bez ohledu na pohyb nepřátel. Vždy, když dohraje titulní hudba, tak se spustí to demo prvního sektoru. To už mi jede, jen to nelze v aktuální verzi zapnout.

      Jako malou kompenzací Ti pak pošlu disassemblovanou verzi Tvého FLAPPYho z roku 1987, kterého pořád „dokomentovávám“, abych pochopil algoritmickou podstatu všech částí. Dokonce létající šipky/houbičky v mé verzi kopírují stejné anomálie jako v Tvé verzi :) Ale to je dáno principiálně, to nejde změnit.

      Díky, že ses ozval a díky za požehnání autora k plastické operaci FLAPPYho.

  4. Libor L.A.

    Dnes jsem spojil úvodní obrazovku a hru. Pokud necháte dojet infotext na konec, spustí se DEMO pro první sektor. Pokud během hraní titulní hudby stisknete klávesu G, spustí se hra.

  5. Libor L.A.

    Další verze. Stiskem klávesy G v hlavním MENU se otevře dialog pro výběr sektoru. Světle jsou označeny odemčené sektory, na začátku hry to je pouze první sektor. Jak dokončujete vyšší sektory, jejich čísla budou přidávána mezi odemčené sektory. Pokud (až to bude implementováno) vyberete neodemčený sektor, vyzve vás to k zadání hesla, které odemkne celou pětici sektorů ve stylu originálu.

    Přikompilovány jsou všechny sektory (1..200). Vy je ale můžete projíždět pouze sekvenčně od prvního, vždy stiskem EOL v dialogu výběru sektoru. Stejně skončíte tuším u sedmičky, kde vás zastaví (prozatím) nehybné žáby. Sektory převáděl Excel, takže jejich korektnost bude předmětem dlouhého testování. Ale to až později..

    1. Libor L.A.

      „Závada“ odhalena. Nevhodně nastavena hodnota memory bankingu. Ale tuto část jsem jen nastřelil pro vývoj pod verzí 2A. K optimalizaci nastavení periferních obvodů se teprve dostanu.

      Ale přivádí mě to k jiné myšlence. Na CTC8253 jsem pro jeho nevypočitatelné chování v PMD-85 zanevřel a nebudu jej nadále používat pro jiné účely, než pro výrobu 1200Hz pro UART. A protože hra využívá z periferních obvodů pouze UART pro časování smyčky hry, 8255-ku pro případný joystick a 8255-ku pro řízení klávesnice, BEEPru a memory bankingu, tak by portace hry na jiné systémy měla být hračkou.

      Přesto díky za podnět.

  6. Libor L.A.

    Když jsem přidal všech 200 sektorů, dodělal nějaké ty texty a barevný tisk, tak mi začíná být jasné, že z důvodu nedostatku paměti nebudou následující věci:

    1) 256 sektorů (zůstane pouze standardních 200)
    2) nebude „Construction mode“
    3) v ohrožení je i volba ovládacích kláves
    4) samotná sekce SETUP bude možná nahrazena přepínáním pomocí klíčů Kx v hlavním MENU

    Momentálně mi zbývá 2963 bajtů RAM, do kterých se musí vejít téměř kompletní ovladač žab, podpora barvových registrů (prozatím jede hra natvrdo v ColorAce), zbylá data hudby (nyní hraje jen třetina skladby), podpora hesel a výběr sektoru, obrazovka SETUP a zcela jistě pár dalších věcí, o kterých teď ani nevím. Ale na druhou stranu jsou místa, kde hra nepotřebuje takovou rychlost, a kde mohu optimalizovat na délku kódu (uložení dat hudby, grafické procedury pro kreslení objektů ve hře, atd.)

    V poslední verzi už mám zapracováno odemykání projetých sektorů.

  7. Libor L.A.

    Proveden upload poslední verze.

    Začal jsem celou hru „překlápět“ na systém barvových registrů. Ukázalo se, že je to vhodnější, než jednorázové statické obarvení hry při každém přepnutí barevného režimu. A taky je to mnohem svižnější. Je to vidět v úvodní obrazovce po stisku K2 až K5, kdy lze měnit barevné schéma (ve smyslu přizpůsobení hardwarovému nastavení PMD-85). Dalším krokem bude kompletně dokončit přechod na zmíněné barvové registry a hned potom budu dělat systém výběru sektoru při startu. Už nyní se v mapě hry na začátku probarvují jako odemčené ty sektory, které jste projeli. Trochu se ta výběrová mapa změní, nicméně systém zůstane.

  8. Vlastik

    Nazdar. Je to paráda. Napadlo mě pár připomínek, ale je zjevné, že tebe to samé takže jen chválím. Jen bych poprosil o zlepšení chůze žabáků, aby se víc chovali jako v originálu. Konkrétně mám na mysli fakt, že se v originále během chůze po přímce občas na pár cyklů zaseknou a pak pokračují. Ti mí jdou tvrdě po Flappym. Některé sektory na PMD pak vyžadují jinou strategii než na originálu. (typicky třeba sektor 21)

    Vlastik

    1. Libor L.A.

      Zrovna dělám průběžně na analýze Tvé verze pohybu žab a vidím tam situaci, když žába „dorovná“ svou X nebo Y pozici s FLAPPYm. Pak dochází k přepočtu pohybové trajektorie a žába se může zaseknout, nebo minimálně změnit směr. Ale asi to je v originále jinak. Právě fakt, že algoritmus pohybu žab je trochu rozsáhlejší, než ostatní moduly, mě nutí si jej nejprve nastudovat a pak přepsat. Ale asi kouknu i na SHARPa, jak to vypadá tam.

      Osobně jsem z piety vůči originálu, na kterém jsem vyrostl, nechtěl moc měnit. A celých dvacet let si myslím, že postavička hráče by měla být žlutá, když je to kuře. Ale ono to prý není kuře! Ty jsi vytvořil československý kult kuřete FLAPPYho! Ale tak jak jsi ho přivedl na svět na PMD-85, tak ho znám já i ostatní. Až na některé grafické vychytávky mi k srdci přirostla verze z PMD-85 i se všemi jejími průvodními projevy. Ale poctivě si nastuduji i videa z SHARPa, to nemůže uškodit.

      1. Libor L.A.

        V rámci testů kompatibility jsem „objevil“, že pokud hru spustíte v emulátoru pro C2717, uvidíte maximální dosažitelnou rychlost herní smyčky. UART je tuším u Zbrojováčka namapován jinde a tak časování hry prostřednictvím vypršení času vysílání znaku UARTem nefunguje.

        Na PMD-85 je základní čas jednoho kroku herní smyčky 113msec. Na jeden dokončený krok FLAPPYho nebo příšery jsou ovšem zapotřebí dva tyto průběhy herní smyčkou, tedy cca 226msec. To je i maximální časová odezva na ovládání FLAPPYho hráčem. Zkoušel jsem místo 113msec nastavit rovných 100msec, hra je pak viditelně svižnější. Možná bych to později tak nechal. Ale pro 113 msec vychází u ukazatele času naprostá shoda číselné hodnoty se skutečným časem ve vteřinách. Kdybych chtěl ještě více zkrátit základní dobu herní smyčky, tak pod 100msec je až nejbližší menší hodnota 10,8msec a to už je nepoužitelné. Ty časy bych mohl měnit i jemněji a v mnohem větším rozsahu změnou nastavení časovače 8253 – ale to bych přišel o kompatibilitu s verzí PMD 85-1.

        Mimochodem, pohyb žab na SHARPu mi zásadně jiný nepřijde. Jasně, je to asi jiný algoritmický popis a tedy striktně vzato jiný styl chování. Ale v rámci odpozorovaného a následně implementovaného je ta shoda téměř přesná. Možná zkusím dodělat v pohybu žab situaci, kdy s určitou (ale malou) pravděpodobností dojde někdy i k chaotické změně směru, tak jak to dělá verze na SHARPu. Mírně to asi opravdu zjednoduší hru v některých kritických sektorech.

        V zítřejší verzi vyjde i oprava managementu sektorů. Pokud do některého sektoru vejdu třeba i jen na vteřinu, ihned se zařadí mezi odemčené a lze do něj příště vjet volbou v mapě hry. Přeci jen v době internetu nikdo nebude nucen ty sektory otrocky projíždět a hledat poctivě hesla..

  9. Vlastik

    Nazdar.
    Když tak o tom přemýšlím, mohli by žabáci zůstat beze změny. I tak jsou všechny sektory řešitelné a kdo nezná originál, (dnes už asi málokdo…) ten rozdíl nepozná :)

    1. Libor L.A.

      Já bych je taky raději nechal podle Tvé verze. V kompilaci ale zkusím udělat nastavení pravděpodobnosti, se kterou žába někdy chaoticky změní směr. Zkusím si s tou hodnotou pohrát, aby to nebylo moc často a pokud by se to nehodilo, tak tam nechám 0%, což bude znamenat chod žab výlučně podle pravidel.

      Dnes už upload nové verze nebude, zato zítra by se už měl výběrový kurzor hýbat po ploše a vybírat sektory. To bude nějaký smysluplný balík změn, který dám k dispozici.

  10. Libor L.A.

    Upload verze s funkčním přístupovým terminálem. Stiskem klávesy G v hlavní obrazovce se dostanete do výběrového menu, kde si lze vybrat některý z odemčených sektorů. Kurzor je při vstupu do obrazovky nastaven na posledně hraný sektor. Klávesou EOL pak vybraný sektor spustíte. Se stiskem klávesy EOL nemusíte čekat na dokončení kreslení obrazovky se seznamem sektorů. Směrová navigace je zatím namapována na klávesy Y, E, šipka vlevo a šipka vpravo. Později se uvidí, co s tím.

    Protože jsem seznam sektorů trochu zhustil a mám na obrazovce více místa, bude se ještě číslo sektoru, na který ukazuje kurzor, zobrazovat velkým fontem hned za textem CHOOSE SECTOR: XX. To kvůli horší čitelnosti těch malých písmenek na reálném TV přijímači, pokud bude propojen UHF cestou. A taky uvažuji, že by se ihned po najetí kurzoru na nějaké číslo sektoru zobrazila miniatura cihlové stavby sektoru, aby znalci této hry ihned poznali, zda je to ten sektor, kam chtějí vstoupit :)

    1. Libor L.A.

      Narychlo jsem ještě nahrál verzi s náhledem sektoru. Sice to zpomaluje hudbu, to je však tím, že jsem to spíchnul narychlo. Ale jde o to, zda něco takového má smysl. Pokud by to bylo užitečné, zapracoval bych to do cílové verze.

  11. Libor L.A.

    Dnes dokončen blok řazení sektorů, jejich vyhodnocování a generování hlášek. Hra tedy po zdolání každé pětice sektorů vypíše heslo, hlídá si dosažení posledního sektoru, vypisuje GAME OVER, atd.

    Obrazovka pro úvodní výběr sektoru je funkčně hotova, včetně implementace barvových registrů. Zbývá ji doladit rychlostně, aby se během posunu po mapě hry neměnila rychlost přehrávání hudby. A taky samotný mechanismus kreslení náhledu sektoru bude nový – kratší a rychlejší.

    Nyní zapracuji na obrazovce PASSWORD. Ta bude mít asi své „tlačítko“ na hlavní obrazovce.

  12. Libor L.A.

    Modul volby startovacího sektoru je hotov. Bylo tam dost chyb, taky jsem všechny procedury v modulu zrychlil, abych mohl jalovou zpožďovací smyčkou doladit rychlost přehrávače hudby stejnou, jako je v hlavní obrazovce. Při pohybu kurzorem se mi ve zvuku objevovala nějaká parazitní modulace, i když rychlost přehrávání byla OK. Bylo to tím, že jsem měl zpožďovací smyčku vřazenou „před“ zvukem namísto „za zvukem“ a docházelo k fázovým posunům.

    Nyní konečně začnu dělat na modulu pro zadávání přístupového hesla. Na hlavní obrazovce je už sice písmeno P: PASSWORD – ovšem zatím nefunkční.

    1. Libor L.A.

      Dnes ještě jedna aktualizace – rozchozeno zadávání vstupních hesel. Trochu mi tam ještě kolísá rychlost hudby, pokud v hlavním obrazovce stisknu P jako PASSWORD a tuto klávesu stále držím. V proceduře čekání na její uvolnění je asi špatná konstanta. Důvod, proč už jsem to nezměnil je ten, že voláno odjinud se to jeví v pořádku..

      Aktuálně zbývá něco kolem 1000 bajtů, což se mi jeví tak akorát na ovladač žab. Jenže pak ještě budu muset dodělat alternativní obrázky FLAPPYho a možná dalších objektů pro všechny možné barvové režimy. A taky umístit někam zbytek hudby. Jako nejvážnější kandidát na uvolnění prostoru se jeví, jak jinak, komprese definičních dat sektorů.

  13. Libor L.A.

    První vážná komplikace. SHARPovská verze dělá něco, co zjevně WEX na PMD-85 opravil. Pokud to tedy není jen nějaká grafická anomálie, vyplývající z reprodukce videa na youtube. Tak tedy: většina objektů ve hře je kreslena v rastru 2×2 buňky a při pohybu se vždy na dobu poloviny herní smyčky zvětší jejich rozměr na 2×3 nebo 3×2 buňky (podle směru pohybu). To je nutné, aby bylo možné měnit pozici těchto objektů při pohybu poněkud jemněji – například ve vodorovném směru po 4 (SHARP) nebo po 3 pixelech (PMD-85). A nyní se dostávám k jádru věci. U verze na SHARPu se mi zdá, že pokud se nějaká obluda přiblíží k postavě hráče, prostě kousek postavičky FLAPPYho někdy PŘEKRESLÍ! bez jeho smrti. Děje se to výhradně na „týlové“ straně postavy ve směru pohybu. To by znamenalo, že tato verze hry i přechodnou fázi animace (2×3 nebo 3×2 buňky) z hlediska kolize považuje za rozměr postavy 2×2 buňky. Proto lze řadu věcí jednodušeji projít na SHARPu (například v sektoru 88 je na PMD-85 dost těžké se prosmýknout vpravo dole kolem těch prvních dvou poskakujících pytlíků, protože FLAPPY má holt o 50% větší „účinnou“ plochu).

    Jenže ono to má mnohem dalekosáhlejší dopad na použitý datový model hry. Takže nyní asi v mé verzi dojde k masivní změně ovladačů herních objektů (cihly, šipky, obludy a samotný FLAPPY). Alespoň to budu muset napsat kulturněji tak, aby jednotlivé ovladače sdílely stejné základní procedury. Takže žáby už teď dodělávat nebudu a měly by se objevit až s novou verzí.

  14. Libor L.A.

    Všechen kód pro řízení pohybu postav ve hře šel pryč a je nový. Zhruba 3kB. Nyní je postaven mnohem více modulárně, což mi pro dodělávku žab skýtá jakousi naději, že ty moduly jen poskládám, dám jim pouze vlastní logiku pohybu a ono by to mělo jet.

    Taky jsem předělal mírně grafiku herních objektů, aby byla kompatibilní se všemi barvovými režimy. Ono přeci jen nebylo tak jednoduché vyhovět všem požadavkům na možné kombinace barev a textur. Proto to je jaké to je. Možná se najde lepší řešení.

    Bufery, kde se ve skutečnosti hra odehrává, jsou nyní přesunuty do zápisníku „vedle“ videoram ve 4. kvadrantu paměti. To mi uvolnilo zhruba 1,5kB místa, což s předpokládanými úsporami kódu umožní zřejmě dodělat již odpískanou obrazovku SETUP s širšími možnostmi nastavení než jen klíči K0-K5 v hlavní obrazovce.

    U Flappyho je už nasazena „finta“, kterou možná dodělám i pro nepřátelské obludy. Když je FLAPPY zabit v okamžiku, kdy zabírá prostor 3×2 moduly (tedy obdélník na šířku), je jeho mrtvola zobrazena taky v tomto rastru a posunuta o 3 pixely do „mezifáze“ a neřeší se výpočtem, na kterou stranu že se ta mrtvola měla v rastru 2×2 moduly přiklonit. WEX to měl nějak, já jsem dospěl vývojem ke stejnému (a zřejmě jedinému smysluplnému) řešení ale moc se mi to nelíbilo. Schválně si postavte na sebe dvě vejce a vlezte s FLAPPYm pod to horní s tím, že vytlačíte do strany to dolní. Z jedné strany vleze FLAPPY do poloviny, z druhé strany se tam napasuje celý. U těch oblud to není tak markantní, protože hráč neví, jaký pohyb před smrtí udělaly. Ale U FLAPPYho, kterého hráč řídí, tam ten nevyžádaný pohyb těsně před smrtí je markantní.

    Protože poslední úpravy kódu jsou jen pár desítek minut staré, nejsou plně testované. Je více než pravděpodobné, že se postupně přijde na celou řadu věcí. Ale to je pokračující vývoj. Poslední verze je samozřejmě k dispozici ke stažení.

  15. Libor L.A.

    Žáby ve FLAPPYm chodí. Ale nazval bych to LEVEL 0. Tedy žába se dokáže pohybovat po vypočtené trajektorii a na jejím konci si vygeneruje novou pseudonáhodnou trajektorii. Nyní budu implementovat nějaký algoritmus „logického“ výběru trajektorie, s největší pravděpodobností to bude okopírovaný systém z WEXovy verze pro PMD-85 z roku 1987. To by byl LEVEL 1. A pak se pokusím o LEVEL 2 – to, co navrhoval WEX, tedy mírné narušení striktního algoritmu, který dost agresivně sleduje FLAPPYho.

    Výkonové zatížení CPU při obsluze žab si lze ověřit na pískovišti, které jsem pro tento účel zřídil, tedy v sektoru 201. Co jsem minule neřekl, nová verze dokáže pro cca 100% zatížení CPU obsluhovat kolem 20 pohyblivých objektů (počítám v to FLAPPYho a jednu pochodující figurku v zásobníku životů na začátku sektoru). Stará verze obsluhovala až 57 objektů. Ale o tom FLAPPY není. To zavedení „vyšších“ společných procedur v nové verzi herního jádra způsobilo malou revoluci.

    Jen pro představu, jak takový ovladač pohybu žáby doprava vypadá (stále jsme v assembleru i8080):

    ZabGRt:	call IsFreR	; je napravo od žáby místo?
    	lxi d,bmZRt1	; bitmapa F v režimu StALL
    	jnz ZabGXC	; NE, něco tam je
    			; ANO (volno či houba)
    	mvi d,obHouba+40h ; houba letící doleva
    	call IsHoub	; se otestuje ve směru chodu
    	jz ZabEnd	; je-li, žába počká na uspání
    	call RBFO22	; uvolnit BUFER 2x2
    	mvi a,obZabak+6	; nový objekt: žába doprava
    	call SBFO32	; nadefinovat BUFER vč. zasednutí hub
    	lxi d,bmZRt0	; bitmapu "nakročení vlevo"
    	call ShwObj	; zobrazit ve videoram
    	call VisHou	; vykreslí odsednuté houby
    	jmp ZabEnd
    
  16. Libor L.A.

    Poslední verze FLAPPYho (19. 10. 2019 cca 18:18) je prvním možným nástřelem finální verze žab. Jsou kompletně obšlehnuty z WEXovy verze (včetně symbolických jmen, odkazujících na původní adresy procedur v paměti) a je tam momentálně nastavena 20% šance chaotického pohybu, kdy se na dobu jednoho kroku změní pohyb žáby do opačné strany. Zkoušel jsem změnu chodu žáby o 90°, ale tato varianta spíše ztížila hráči případný zásah žáby houbičkou. Prostě kličkovaly jako řízená střela. Takhle, když si žábu nalákám na sebe, mám jistotu, že neuhne vystřelené houbě. Teď bude asi předmětem zkoušek, jaké hodnoty pohybových parametrů žab nastavit, ať to není na jedné straně ten agresivní nájezd žab na FLAPPYho, a na druhé straně, ať pohyb žab nepřipomíná výjev před vesnickou hospodou po zavírací hodině.

    1. Libor L.A.

      A hned 19:05 se opět objevila již dříve zpozorovaná chyba (zamrznutí hry) během zabití žáby vejcem při svislém pohybu. Opraveno.

      1. Libor L.A.

        A další chyba: při boční destrukci tmavého vejce po něm zůstanou nepohyblivé (a průchod blokující) fragmenty. Ve zdrojovém kódu jsem našel evidentně špatně uvedenou hodnotu masky pro detekci LH rohu neborceného tmavého vejce (takže se vejce v polovičním stupni rozkladu na chvíli jevilo jako neborcené). Snad to bylo ono.

        Jedna z dalších úprav, kterou jsem musel oproti WEXovu originálu udělat, je prohození pořadí definičních dat sektorů. Nejprve se musí zadávat houbičky (=šipky) a až potom obludy. Tak jde totiž elegantně využít implicitních vlastností procedur, které „kreslí“ do herního BUFERu objekty oblud a přitom regulérně „přisednou“ houbičky, které jsou pak později uvolněny (po odchodu obludy). Krásně je to vidět v sektoru 29. Vlastně není vidět. Vidět to je až ve chvíli, kdy vypustíte žáby z jejich vězení.

        1. Libor L.A.

          Další chyba se projevila dnes v sektoru 58 při vykreslování houbiček, které jsou vsazeny do zdiva. Bila se tam původní interpretace tohoto mechanismu ještě z dob, než jsem nasadil ty „integrované“ procedury pro manipulace s objekty. V příští verzi bude tato úprava zahrnuta.

    2. Libor L.A.

      Tak jsem dokončil rozbor pohybu žab ve verzi SHARP. Naváděcí mechanismus mi přijde téměř identický s verzí PMD-85. S jednou jedinou výjimkou. Při chodu žáby ve vytyčeném směru je zavedena 4% pravděpodobnost, že žába chaoticky změní směr. To, co jsem instinktivně zavedl oproti WEXovu algoritmu navíc, tak to je i na SHARPu. Ale u nich může žába změnit náhodně směr do všech možných stran. To mírně komplikuje možnost zasažení žáby šipkou/houbičkou, pokud se žába zrovna rozhodne ten směr změnit.. Navíc ta pravděpodobnost změny směru je při vzdálenosti FLAPPY-ŽÁBA od 6 bloků navýšena na cca 10% a pod touto vzdáleností je navýšena pouze na 7%. Slovní popis celého naváděcího algoritmu se sem nevejde, ovšem pokud by to někdo chtěl použít při portaci na jiný stroj, mohu poskytnout komentovaný disassemblovaný výpis této části ze SHARPu (včetně herní grafiky, jejíž extrakt do bitmapového obrázku dokončuji).

      [opraveny hodnoty procent]

  17. Libor L.A.

    Někde na internetu jsem našel povzdechnutí nad tím, že ovládání této hry má docela dlouhou odezvu. Ano, má. Tak jsem do herní smyčky zapracoval druhou proceduru naskenování klávesnice a joysticků. Tato druhá procedura je vůči té původní proceduře „posunuta o 180°“. Funkcí AND se pak oba požadavky na ovládání „sečtou“ a vyhodnotí v momentě, kdy na ně v původní hře přišla řada. První zkušenosti jsou celkem dobré. Pokud by to nedělalo někde jinde zase neplechu, tak bych to tam nechal.

  18. Libor L.A.
    X2266:	.db "shiba","MegmI","PenTA","miki!","sakra" ; HESLA
    	.db "1,2,O","??OkU","OmoRI","U-CaN","QuoTe"
    	.db "ayAko","Uf,f,","Chie?","sAKE!","Syogn"
    	.db "bUSHi","BakA!","STONE","Japan","HArfE"
    	.db "Sappr","OhaYo","Gohan","Ramen","Nemui"
    	.db "Natsu","Yuki!","HeIwa","Pice!","MZ801"
    	.db "Engla","Rome!","PaRie","Letgo","FrEnc"
    	.db "AFewe","GerMa","Tokyo","Prend","OKU-H"
    

    Tolik pro dnešek originál ze SHARP MZ-821. Přeci jen se kouknu na zdrojový kód, jak jsou ty prokleté žáby udělány. Prozatím ten kód vypadá na pěkný masakr. Tam se místem nešetřilo. Saké!

  19. Libor L.A.

    Analýza definičních dat SHARPovské verze ukázala, že samotné bludiště není definováno tak detailně jako to má WEX na PMD-85. Na SHARPu je nejmenším definičním blokem kus cihlové zdi velikosti například vejce (2×2 bloky). kdežto na PMD-85 je nejmenší stavební jednotkou cihlová zeď o výšce vejce ale o polovině jeho šířky (1×2 bloky, tj. 6×18 pixelů). Nejmenší blok na PMD-85 má rozměr 6×9 pixelů. To samo o sobě umožní snížit objem dat pro definici 200 bludišť z 10000 bajtů na 6000 bajtů. To není málo a tak to udělám stejně. Data pohyblivých objektů jsem uložil ještě trochu úsporněji než to má originál už hned na začátku a tam jsem ušetřil tuším něco kolem 6kB.

    Kdyby se v tom někdo chtěl na SHARPu vrtat, tak v surovém stavu jsou definiční data sektorů uložena od adresy 8000h ale hned po startu programu se blok dat sektorů přesune od adresy B000h.

  20. Libor L.A.

    Dnes uvolněná verze přinesla:

    – rapidní zkrácení definičních dat sektorů (včetně vynucených úprav z titulu konzistence dat)
    – vyladěnou titulní obrazovku, obrazovku výběru sektoru a zadání hesla

    Největší výzvou bylo zrychlit vykreslovač náhledu sektoru. Protože data pro definici sektorů již nemají „pěkný“ formát a jeden řádek cihlové struktury sektoru už není zarovnán na celý počet bajtů, nešlo použít předchozí proceduru vykreslovače. Ta nová procedura umí vykreslit náhled o velikosti 40×22 pixelů za 4,6msec.

    Sektory budu ještě ladit tak, aby odpovídaly původnímu pojetí PMD-85. I když mám v plánu trochu změnit chování oblud z hlediska toho, že asi nebudou moci zabít FLAPPYho, pokud tím směrem nemohou projít celým svým tělem. SHARP to tak má taky a existuje jeden sektor, kde to celkem znepříjemňuje průchod a přitom o nic nejde. No, ještě uvidím..

  21. Libor L.A.

    V poslední verzi už se rýsuje zárodek sektoru 201 – Construction Mode. Je to zatím taková studie, jakou formu by to vlastně mohlo mít.. Protože hra umožňuje odemykání každého jednoho sektoru nezávisle na ostatních, budou vždy po startu hry sektory 1 a 201 ihned otevřené.

  22. Libor L.A.

    Sektor 201 alias pískoviště už má konkrétnější podobu. Pohyblivé objekty o rozměru 2×2 lze mazat jen tehdy, když najedu na jejich LH roh (kurzor se zvětší na rozměr 2×2 bloky a obepíná celý objekt). Cihlové bloky lze v souladu s principem ukládání jejich polohy vykreslit pouze na sudých pozicích (jak svisle, tak i vodorovně). Pokud se pokusíte nakreslit cihlový blok mimo tento „sudý“ rastr, editor si pozici sám zarovná. FLAPPYho, bílé místo a bílé vejce (nebo kámen?) nelze vymazat. Bílé místo a bílé vejce lze pouze přemístit.

    Na první pohled ta editace a automatické zvětšování kurzoru vypadá složitě. Ale je to jediná možnost, jak umožnit editoru vytvořit všechny sektory, které FLAPPY obsahuje. Někdy chybí zdánlivě kus stěny, ovšem to je dáno překrytím stěny některým z pohyblivých objektů. A aby šlo takové sektory vytvářet, musí mít pohyb kurzoru právě ty vlastnosti, které v editoru má.

    Funkce Shift+CD je jasná, maže celý sektor. Funkce Shift+RCL vykreslí naposledy navštívený sektor. Takže když si chci vytvořit sektor, který je mírnou variací například na sektor 39, vjedu nejprve do sektoru 39 (z něj mohu ihned pomocí Shift+STOP vyskočit) a pak spustím sektor 201. Pak funkce Shift+RCL v editoru sektoru 201 pokaždé vykreslí sektor 39. Je to nejjednodušší možnost, jak bez výběru sektorů (začíná mě strašit RAMTOP 8000h) umožnit zjednodušené kopírování standardních sektorů hry.

  23. Libor L.A.

    Protože jsem provedl řadu úprav a oprav, týkajících se sektoru 201 (režim EDIT), dal jsem uvedenou verzi ke stažení. Pokud se tam nevyskytnou chyby, tak ta editační část FLAPPYho by měla být kompletní. Napadají mě snad jen dvě věci:

    1) Pokud v režimu EDIT spustím sektor, abych si jej zahrál, tak na konci hry by mohla postava FLAPPYho udělat nějakou jednoduchou animaci či zvukový signál. Ale to budu teprve dělat i v samotné hře a pak bych to sjednotil.

    2) Kurzor by mohl prediktivně najíždět a sjíždět z oblud tak, aby ušetřil nějaký ten stisk kurzorových kláves. Ony jsou (K8..K11) poněkud neergonomicky umístěny, ovšem to je spíše problém filozofický, než technický. Kdybych jako kurzorové klávesy použil ty uživatelsky definované, tak jak zabránit tomu, aby nebyly v kolizi s klávesami K0..K7, C-D, WRK, RCL?

    A napadá mě ještě třetí věc. Trochu vylepším časovou odezvu kláves v tom editoru. Takže jak vidím, těch úprav ještě pár dalších bude..

  24. Libor L.A.

    Další balík změn v editoru sektoru 201. A tentokrát je toho tolik, že bych to nazval novým editorem. Počínaje ovládáním, přes ikony, ovladač klávesnice včetně funkce autorepeat, až po nové vnitřní jádro včetně jinak dělaných funkcí. A taky jsem musel výrazně zredukovat systém prediktivního navádění kurzoru na levý horní roh objektů. Ono to sice samo o sobě fungovalo ale v některých případech to znemožňovalo najet s kurzorem tak, aby šlo kreslit cihlovou zeď, částečně zastíněnou některým z pohyblivých objektů.

    Včera jsem totiž k editoru posadil testovacího maniaka, a ten systém ovládání okomentoval jediným slovem: děs. A nakonec se řešení našlo. Bez ohledu na to, jaké klávesy si hráč zvolí pro hru, v editoru fungují kurzorové klávesy pro pohyb kurzoru (v emulátoru na PC fungují i svislé šipky). Ty jsou intuitivně hned po ruce a nemají svůj popis mezi ikonami nad hracím polem. Ty ostatní klávesy, které by se těžko hledaly, protože někdy jim omezující podmínky nedovolí vykonat přiřazenou funkci, tak tyto ostatní klávesy mají své popisné ikony nad hracím polem.

  25. Libor L.A.

    Dnes ještě jeden upload poslední verze. V režimu EDITor při stisku Shift+RCL se vyvolá dialog, kde si přímo navolíte číslo sektoru, který chcete do editoru nakopírovat. Kromě toho oprava milionu drobných chyb. Ale teď už spíše jedu podle seznamu ToDo a odškrtávám dřívější drobné resty. Z toho co zbývá, uvádím například:

    – zkontrolovat shodu sektorů s originálem (primárně bych se chtěl držet verze PMD-85)
    – animace obludy bezprostředně po zásahu houbou (to mi při implementaci uteklo)
    – koincidence oblud a FLAPPYho bez přímého dotyku (obludy mohou chodit těsně kolem Flappyho)
    – vyzkoušet jinou verzi narušování chodu žab a vybrat tu lepší
    – zvukový efekt při dokončení hry (v režimech hra, demo, editor)
    – dodělat zbytek hudby

  26. Libor L.A.

    Verze ze 4. 11. 2019 přinesla:

    1) při výběru sektoru můžete pro navádění kurzoru použít joystick (je-li vybrán v nastavení)
    2) koincidence oblud a FLAPPYho bez přímého dotyku nyní přesně kopíruje originál PMD-85
    3) během redefinice kláves hraje synchronně hudba

    Ještě k tomu bodu 2). Pokud je obluda těsně vedle FLAPPYho, nastane někdy smrt okamžitě, a jindy je pro zabití FLAPPYho nutné, aby ve směru chodu měla obluda místo pro plnou šířku. Jinými slovy, obluda FLAPPYho může zabít skrze úzkou štěrbinu (o šířce 1 modulu, přes kterou obluda ani FLAPPY neprojdou) jen za přesně stanovených podmínek. Nejprve jsem si myslel, že to je nějaká nedůslednost a chtěl jsem to sjednotit. Jenže na té rozmanitosti podmínek závisí průchodnost několika sektorů. Takže jsem to raději předělal dle originálu PMD-85.

    Ještě jsem časem vyšlechtil režimy STOP, PAUSE a EXIT. Stiskem klávesy STOP zmaříte jeden život FLAPPYho a jedete další, máte-li ještě nějaké. Stiskem klávesy SHIFT přejdete do režimu PAUSE, který zrušíte stiskem jakékoliv klávesy. A konečně stiskem SHIFT+STOP vyskočíte ze hry zpět do hlavního menu, což je obdoba stisku klávesy K0 na originálu PMD-85. Ta změna je nutná kvůli uživatelské redefinice kláves. Pro pohyb FLAPPYho si totiž uživatel může vybrat jakoukoliv kombinaci kláves, s výjimkou kláves SHIFT a STOP. A proto pouze tyto dvě mohou být použity pro přechod do výše uvedených režimů.

  27. Libor L.A.

    Dokončena celá hudba. I když je součástí výše uvedené kompilace, je povoleno pouze prvních 39 taktů. Ta další část zní nějak divně, budu na tom ještě dělat. Asi to s danou „kvalitou“ jednobitového přehrávače nebude znít – pak bych nechal jen ten začátek. Hudbu jsem na zkoušku snížil o oktávu (do původního stavu). Sice už není taková pištivá a uječená, ovšem na druhou stranu je slyšet „hrany“ signálu u nízkých tónů, což je v daných podmínkách neodstranitelný důsledek použití obdélníkového průběhu budícího signálu zvukového měniče.

    Doplněna animace zásahu oblud houbičkou. Animace jsem použil ve stylu SHARP, jakkoliv verze z PMD-85 obsahovala něco podobného. Za tím účelem jsem si napsal prohlížeč obrázků ze SHARPovské verze.

    ToDo:

    1) Odstranit chybu při odebírání houbiček ze zásobníku.
    2) Prodloužit monotónní úseky pro pohyb oblud, zejména skákajících pytlů.
    3) Animace dokončení sektoru.
    4) ..?

  28. Libor L.A.

    Kvůli studia vlastností originálu FLAPPYho na SHARPu jsem si napsal program pro PMD-85, který je defacto prohlížečem binárních grafických dat pro dvě bitmapové roviny. Program v režimu ColorAce zobrazuje SHARPovské bitmapy FLAPPYho ve čtyřech barvách a zvětšení 6:1, aby se barevné atributy nemíchaly. Adresy těchto obrázků mi pak pomohly v disassemblování původního programu na SHARPu a při detekci procedur pro pohyb objektů ve hře.

    V této chvíli se mi jednalo o pohyb těch skákajících pytlů, či co to je. V mé poslední verzi ty pytle poskakovaly sice náhodně ale ten pohyb měl jednu vadu. I když v dlouhodobém časovém horizontu byla bilance skoků vlevo a vpravo naprosto přesně vyvážená a pytel neměl tendenci zůstávat na jedné straně obrazovky, tak právě ta vyváženost směrů i v krátkodobém horizontu způsobila spíše vrtění se na místě s jen velmi pomalým posunem do stran. Až studiem originálu jsem přišel na to, jak jsou Shibata s Okuyamou geniální (pokud zrovna tohle vymysleli oni). Takže pohyb pytlů se řídí těmito pravidly (řazeno podle priority od nejsilnější):

    1) pokud v dosahu 10 bloků cítí pytel FLAPPYho, jde za ním
    2) vygeneruje se náhodné číslo a s pravděpodobností 25% se změní směr chodu pytle
    3) pokud pytel narazí na cihlovou stěnu, otočí se

    Tato pravidla jsem implementoval a nyní to vypadá úplně přesně jako na SHARPu. Takže to asi tak nechám. Je to prozatím to nejlepší, co jsem zkoušel.

    A ještě adresy bitmapových obrázků v originální verzi SHARP:

    5c3d 2×1 zdivo
    5c5d 1×1 zdivo
    5c6d 2×1 cílové místo
    5c8d 1×1 cílové místo
    5c9d 2×2 červený kámen
    5cdd 2×2 borcený červený kámen #0
    5d1d 2×2 borcený červený kámen #1
    5d5d 2×1 borcený červený kámen #2
    5d7d 2×1 borcený červený kámen #3
    5d9d 2×2 modrý kámen
    5ddd 2×2 Flappy stojí čelně (dolů)
    5e1d 2×2 Flappy dolů #0
    5e5d 2×2 Flappy dolů #1
    5e9d 2×2 Flappy dolů #2
    5edd 2×2 Flappy dolů #3
    5f1d 2×2 Flappy stojí zády (nahoru)
    5f5d 2×2 Flappy nahoru #0
    5f9d 2×2 Flappy nahoru #1
    5fdd 2×2 Flappy nahoru #2
    601d 2×2 Flappy nahoru #3
    605d 2×2 Flappy stojí vlevo
    609d 2×2 Flappy vlevo #0
    60dd 2×2 Flappy vlevo #1
    611d 2×2 Flappy vlevo #2
    615d 2×2 Flappy stojí vpravo
    619d 2×2 Flappy vpravo #0
    61dd 2×2 Flappy vpravo #1
    621d 2×2 Flappy vpravo #2
    625d 2×2 Flappy výskok cíl #0
    629d 2×2 Flappy výskok cíl #1
    62dd 2×1 FLAPPY animace po smrti
    62fd 2×1 FLAPPY animace po smrti
    631d 2×1 Flappy přimáčknutý dolů
    633d 1×1 žlutá kulička
    634d 2×2 pytel vlevo #0
    638d 2×2 pytel vlevo #1
    63cd 2×2 pytel vpravo #0
    640d 2×2 pytel vpravo #1
    644d 2×2 zásah pytle #0
    648d 2×2 zásah pytle #1
    64cd 2×2 zásah pytle #2
    650d 2×2 zásah pytle #3
    654d 2×2 pytel spí #0
    658d 2×2 pytel spí #1
    65cd 2×1 pytel přimáčknutý dolů
    65ed 2×2 žába čelně
    662d 2×3 žába čelně
    668d 2×3 žába čelně
    66ed 2×2 žába zády
    672d 2×3 žába zády
    678d 2×3 žába zády
    67ed 2×2 žába doprava
    682d 3×2 žába doprava
    688d 2×2 žába vlevo
    68cd 3×2 žába vlevo
    692d 2×2 zásah žáby #0
    696d 2×2 zásah žáby #1
    69ad 2×2 zásah žáby #2
    69ed 2×2 zásah žáby #3
    6a2d 2×2 žába spí #0
    6a6d 2×2 žába spí #1
    6aad 2×1 žába přimáčknutá dolů
    6acd 1×1 houba

    6add začátek fontu 8×8

    1. mborik

      Čítať to tu, všetky tieto analyticko-výskumné postupy, to je pastva pre oči a dušu. Obdivuhodné je, ako detailisticky k tomu remasteru pristupuješ a snažíš sa riešiť presne tie veci, ktoré pre mňa tú verziu od VBG činili nehrateľnou. Díky ti za to.

      1. Libor L.A.

        Díky Tobě i Danovi za zpětnou vazbu. Ono vždy potěší, když to někdo čte.

        Protože se hra blíží mílovými kroky do finále, nechci teď provádět upload poslední verze, aby alespoň ta finální a skutečná závěrečná obrazovka byla překvapením :) Snažím se o takové malé iluzionistické dílo, něco jako scroll plochy ve hře Trailblazer.

        Tak alespoň co zbývá (ono se skoro zdá, že ty položky přibývají..)

        1) minianimace postavy FLAPPYho při smrti a dokončení sektoru
        2) dočistit takty 40..53 titulní hudby (nebo je vypustit)
        3) vyzkoušet a posoudit alternativní pohyb žab
        4) kontrola na historické chyby
        5) kontrola sektorů

        A díky za video na YT, shlédnutí každé verze má inspirativní účinek. Hry rozsahu FLAPPYho nebo Jet Set Willyho lze překopat ze ZXS/Z80 na PMD-85 za zhruba měsíc. Ale když člověk nekopíruje doslova originál a přitom nemá inspiraci a musí vymýšlet i animace a scénář hry, tak je ta potřebná doba odhadem desetkrát delší. A to už dochází šťáva.. Třeba scrolling závěrečné scény se rodí už asi ve čtvrté iteraci.

    2. Dan

      svojho casu som s kamosom naprogramoval flappyho v game makeri. najviac som riesil tzv umelu inteligenciu nepriatelov. vo finalnom rieseni ma zaba vedela najst na ktoromkolvek mieste v leveli, pokial sa tam vedela dostat. co sa tyka tych skakajucich pytlov (nazvali sme ich krysy :) ), tak to som rieisl obdobne. ak bola tusim 7 jednotiek (pojem jednotka som pouzival na jednu tehlu) od flappyho, tak sla z anim. pokial bola od neho viac ako 7 jednotiek, tak sla random. ak narazila na stenu, tak sa otocila a sla v opacnom smere urcenym pocet jendotiek, tiez asi 7, ak mohla, smaozrejme. potom sla znovu random, ale ak sa dostala na menej ako 7 jenodtiek k flappymu, tak sla zas za nim. a tak stale dookola :)
      hru sme nikdy neuvolnili pre public, ale bola takmer dokoncena. vyzerala takto:
      https://www.youtube.com/watch?v=42P5DJ1k8q4&hd=1

Napsat komentář: RomBor Zrušit odpověď na komentář

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