FLAPPY2k Remaster

Základní informace

  • datum vydání poslední verze na PMD-85: 18. 10. 2019
  • remastering verze FLAPPYho od VBG
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • podpora barevných režimů: prozatím jen ColorAce, později všechny režimy

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)

vlastní hra – sektor 195

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

Napsat komentář

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