FLAPPY2k Remaster

Základní informace

  • datum vydání poslední verze na PMD-85: 13. 12. 2019
  • remastering verze FLAPPYho od VBG software z roku 1987
  • vestavěný editor scény 201
  • využití RAM: 0000h ÷ 7D75h, C000h ÷ FFFFh
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • hudba/zvuky: ano/ano – vestavěný akustický měnič
  • podpora barevných režimů: BW, RGBM, WGRM, ColorAce
  • ovládání: klávesnice, volitelně joystick A nebo B

Status

  • vývoj ukončen, převedeno do fáze testování

Ovládací klávesy

  • Hra umožňuje nastavení ovládacích kláves uživatelem, výchozí nastavení je stejné jako u originální verze pro PMD-85 z roku 1987.

Popis hry a její vlastnosti

Pomoz kuřátku FLAPPYmu dostat v každé z 200 scén vždy jedno vybrané vejce na označené místo. Situaci Ti mohou zkomplikovat  žáby a duchové, jejich existence je však součástí řešení některých scén. Na obranu proti nim můžeš vystřelovat posbírané houbičky, které obludy na čas znehybní. Pokud chceš obludu zcela odstranit, shoď na ni některé vejce.

K jednotlivým scénám se můžeš propracovat postupně řešením předchozích scén, nebo do nich můžeš vstoupit přímo pomocí přístupových hesel. Vždy po překonání pěti po sobě jdoucích scén se odkryje společné přístupové heslo.

Mimo standardních 200 scén si můžeš pomocí vestavěného editoru scény 201 sestavit vlastní hru, kterou si můžeš samozřejmě i zahrát.

Tato verze původní hry FLAPPY pro PMD-85 z roku 1987 je doplněna o barevné režimy, které se časem začaly používat, má změněné MENU, hudbu a doplněn editor závěrečné scény. V ojedinělých případech, kdy se scény u původní verze PMD-85 liší od verze pro SHARP MZ, byly pro tuto verzi použity scény SHARP, aby došlo k určitému ozvláštnění hry pro ty, kteří se k FLAPPYmu vrátí po více jak třiceti letech..

Závěrem bych chtěl poděkovat autorům původní verze pro PMD-85, zejména pak WEXovi za podporu, rady a hlavně svolení k remasteringu jeho díla.

POKE

  • >0967 C9   =>   neubývá čas
  • >1CEA 3C   =>   neubývají životy

Soubory ke stažení

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

Přístupová hesla ke scénám hry FLAPPY

 

Galerie obrázků

Úvodní obrazovka

Zadání hesla

Nastavení hry

 

 

 

 

 

Volba ovládacích kláves

Výběr herní scény

Editor scény 201

 

 

 

 

Scéna 160 (ColorAce)

Scéna 162 (ČB zobrazení)

Herní grafika verze SHARP MZ800

 

 

 

 

 

 

94 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

  29. Vlastik

    Já jsem těm skákacím nesmyslům říkal baterky, ani nevím proč :o)
    A ti žabáci jsou na SHARPu zřejmě krabi, kdo ví…
    Jinak gratulace a obdiv k vyčerpávajícímu rozboru obou verzí této hry.
    Já s tím tehdy takové štráchy nedělal, byl jsem rád, že to aspoň nějak funguje :)
    Zrovna nedávno jsem zavzpomínal, jak jsem ze začátku vkládal data postaviček a obrázků do zdrojáku v assembleru a ještě nevěděl, že se dají zapsat i v HEX tvaru, tak jsem je přepočítával do dekadické formy.
    Až později se k nám dostal manuál MRSu a při zápisu sektorů už jsem zadával rovnou HEX tvar.

    1. Libor L.A.

      Zrovna nedávno jsem si říkal, co to muselo dát za práci napsat něco takového a v takovém rozsahu bez editoru na PC s funkcemi CTRL+C/CTRL+V. I když mi dnes řadu věcí přepočítává Excel a převádí do ASM zápisu, kdy veškeré změny dělá editor funkcí „Nahradit vše“, bitmapy mi přímo do assembleru převádí konvertor – tak stejně vyladit všechny ty věci trvá desítky dní až jednotky měsíců. Psát něco takového s blokem čtverečkovaného papíru a zápisem pomocí MEM/SUB – no nevím. To by mi trvalo nejmíň rok. Momentálně má složka FLAPPY2k cca 7MByte. Jak zdrojáky v assembleru, tak i bitmapy s herními objekty a SNAPy obrazovek (všechny obrázky uloženy v GIFech) plus zdroják z verze SHARP. Jen textové zdrojové soubory verze PMD-85 mají kolem 800kByte.

      Mimochodem dnes jsem aktualizoval fotky v hlavním článku a přidal i ten soubor s grafikou verze SHARP MZ.

      1. Zdeněk

        # small BUG
        po GAME OVER se hra nevrátí zpět do úvodního MENU.
        ( nelze hrát znovu, jen reset a load .ptp )

        1. Libor L.A.

          A rozjede se hudba? Pokud se rozjede hudba, pak se čeká na uvolnění všech kláves a následně na stisk jakékoliv klávesy. Mi to při testu funguje..

          Může to být ale tím, že mám v programu řadu podmíněných kompilací pro zjednodušení testů a nějaká kombinace podmínek tam vnáší chybu. Každopádně testy budou teprve probíhat, ale pokud bys zjistil nějaké bližší určení co té chybě předchází, nebo co následuje, či za jakých podmínek vzniká, budu Ti velmi vděčný. Jo, a taky na jakém stroji či pod kterou verzí PMD-85 v emulátoru se ta chyba objevila?

  30. Zdeněk

    Emulátor: RM-TEAM ( poslední verze )
    Linux Manjaro: GPMD85emulator v0.10.1801
    W10: PMD85Emu-3.1.5.204

    verze PMD: PMD85-2A

    verze FLAPPY2K ( PO UPD. 18.11.2019 )
    – hudba hraje v úvodním MENU a poté pří výběru scény (místnosti ) – OK
    ( přímo ve hře hudba nehraje, ale zvuky jdou – nastaven SOUND ALL / GAME ) – OK
    – GAME OVER – hudba hraje – reaaguje na lib. klávesu pro návrat do hl. MENU – OK
    .
    verze FLAPPY2K (PŘED UPD. 18.11.2019 )
    – hudba hraje, ale pouze v úvodním MENU
    ( přímo ve hře hudba ani zvuky nejdou – nastaven SOUND ALL / GAME )
    – GAME OVER – hudba nehraje – nereaguje na žádnou klávesu pro návrat do hl. MENU

    1. Libor L.A.

      U jedné z posledních verzí jsem za čtení stavu JOYSTICKu pro jistotu zařadil instrukci ORI 0E0h pro neutralizaci nevyužitých bitů. Tedy spíše jsem si to myslel. Teď jsem si všiml, že jsem tam ve skutečnosti zařadil instrukci ANI 0E0h, která naopak simulovala stisk všech „směrů“ joysticku. To mohlo být pravděpodobnou příčinou, proč se to zaseklo – prostě se čekalo na uvolnění všech ovládacích signálů. Tak snad to bylo ono.

      Protože mi začíná mírně přebývat množství RAM, začínám opět expandovat (a tím značně zrychlovat) vykreslování herních objektů. Takže jsem si beze ztráty rychlosti mohl dovolit navýšit počet pohyblivých objektů ve hře (tmavé kameny, žáby, skákající pytle, houbičky) na počet 25, namísto původního počtu 20.

      Pro jistotu provedu upload poslední verze, snad se ta chyba už neobjeví.

      1. Zdeněk

        VÝBORNĚ !
        dobrá práce
        .
        verze FLAPPY2K ( posl. upd. 20.11.2019 )
        – předchozí chyba „zatuhnutí “ po GAME OVER se již neobjevuje ( od upd. 18.11.2019 )
        – žádné jiné chyby zatím nezjištěny
        .
        Predikce:
        – test hratelnosti jednotlivých scén

  31. Mafro

    Velice pěkný remake a skvělá práce, ale našel jsem buga…
    Jak se probudí žába po uspání houbou, tak se hra zhroutí.

    1. Zdeněk

      # potvrzuji BUG dle dispozic Mafro z 21.11.2019 (20:01)
      .
      verze emu: nerozhoduje
      verze PMD: nerozhoduje

      verze FLAPPY2K: ( upd. 20.11.2019 )
      – zobrazení barev. obdélníku dole uprostřed – ZATUHNUTÍ HRY
      ( zásah žáby HOUBOU a po jejím probuzení ( cca do 3 – 5 sec. )
      – testován i zásah ŽÁBY jen kamenem, nebo vejcem – OK
      ( zásah houbou a poté ihned kamenem nebo vejcem – OK )

        1. Libor L.A.

          Jo je to ono. Při předělávce na rychlé zobrazovací rutiny jsem zapomněl změnit syntaxi u zobrazení „probouzecí“ pozice žáby. Díky moc.

          1. Zdeněk

            FLAPPY2K z 20.11.2019 se zatím dá hrát i bez “ houbiček “
            ( svědkem mi je už překonaná 10 scéna )
            Žáby se hold musí umlátit kamenama 😃

            Ale bude fajn, když to opravíš ( nezkušeného by to mohlo odradit 😈 )

            1. Libor L.A.

              Tato chyba je opravena a nová verze umístěna ke stažení.

              Ale pořád se ještě jedná o vývojovou verzi. Zejména se nedostavuje finální řešení finální obrazovky..

  32. Libor L.A.

    Dnes jsem dokončil revizi vizuální podoby všech 200 sektorů (scén). Aby tato verze FLAPPYho nebyla jen obarvením WEXova originálu, převzal jsem podobu sektorů ze SHARPu. Ono těch změn není moc – ale jsou. Fajnšmekři přes tuto hru si budou moci vychutnat některé drobné změny a myslím, že asi i dva úplně jiné sektory.

      1. Libor L.A.

        Ha, teď vůbec nevím, o co jde.

        Ale popravdě, asi deset dní jsem dělal na jiném „projektu“. Předevčírem jsem se vrátil k FLAPPYmu a do vánoc bych jej chtěl mít ze stolu pryč. Už mi leze krkem. Asi jsem překročil ten objem práce, který je ještě výzvou a přehouplo se to do stádia koule u nohy.

        1. Zdeněk

          “ … vy jsem se v tom zase vrtal pane DOKTORE ? … “ ✌

          FLAPPY 2K je dost dobrej a nechal bych ho už žít vlastním životem ( rešit jen připadné chyby )
          Víš jak se taky říká “ … všeho moc škodí ….“ a “ … v nejlepším se má přestat … “ 😆

          Každopádně děláš to dobře a na těch jednotlivých “ projektech“ je to i dost vidět.
          Tak zdar a sílu …..najdeš v sýru 😉😈

          1. Libor L.A.

            Kdepak, ve FLAPPYm je třeba se ještě povrtat.

            1) kontrola validity sektorových dat
            2) testy, zda obluda uspaná v přechodové fázi 2×3 nebo 3×2 je korektně zmenšena za všech okolností na rozměr 2×2
            3) dořešit tu něšťastnou hudbu v taktech 40-54
            4) snad autostarter s obrázkem (jenže ty oficiální obrázky zobrazují nějaké kraby místo poctivých českých žab)

            Hudbu doufám rozhřeším zítra, a to by taky mohl být den vypuštění hry za účelem veřejného testování (ne, doopravdy si nedělám iluze o počtu testerů). Ty ostatní věci už budu testovat během pravidelné karantény, kterou svým hrám dopřávám v závěrečné fázi před oficiálním vypuštěním finální verze.

            1. Zdeněk

              ✌… odstranění jedné chyby vyvolá alespoň dvě nové.

              … každý program obsahuje jeden chybný řádek.
              Každý program jde zkrátit o jeden řádek.
              Z toho plyne, že každý program jde zkrátit na jeden řádek, který je chybný.

              … počítač je zařízení sloužící k řešení problémů, které by bez něj vůbec nevznikly. ✌😃

              1. Libor L.A.

                In vino veritas. A když už píšu, přidám jednu technickou informaci z nitra programu této reinkarnace FLAPPYho. Vlastně těch informací bude více.

                Hra se odehrává ve dvou buferech (polích) o velikosti 40×22 buněk, které zahrnují i všechny čtyři obvodové stěny, abych nemusel testovat meze hracího pole a doraz postaviček na okrajích se realizoval společnými rozhodovacími procedurami pro náraz do stěny. A ty na okrajích vždy nutně jsou, jak jsem řekl. Na rozdíl od WEXova FLAPPYho tak součástí definičních dat nejsou kusy stěn po obvodě hracího pole. Úspora dat: 500 bajtů. Proč však jsou pole dvě? První, kterému říkám zkrátka BUFER, nese vlastní obsah herního pole, zde se odehrává herní život. Každý objekt ve hře má svůj jedinečný kód. Druhé pole, které jsem pojmenoval ATRIB, pak nese informaci například o tom, kolik zbývá uspané obludě spánku, za jak dlouho žába změní směr, za jak dlouho letící houba podlehne gravitaci..

                Struktura jednotlivých bajtů pole BUFER je následující. Není to, jak by se mohlo zdát, nějaký relikt divokého snění předchozí noci. Několikrát jsem tento systém měnil, až se vybrousil tento diamant:

                ; *****************************************************
                ; plná struktura definičního bajtu objektu v poli BUFER
                ; *****************************************************
                ; HSRRRDD0 - žába (atribut=délka trajektorie nebo spaní)
                ; HSRRRD01 - pytel (atribut=délka spaní)
                ; 00000011 - prázdno
                ; DDT00111 - houba (atribut=délka letu)
                ; 00R01011 - světlé vejce
                ; FFR01111 - tmavé vejce
                ; 00010011 - FLAPPY
                ; 00010111 - cihla
                ; R0011011 - mrtvola žáby
                ; R0011111 - mrtvola pytle
                ;
                ; H: 1=přilehnutá houba
                ; S: 1=SLEEP
                ; T: TOGGLE zpomalovač pádu 
                ; RRR: kód rohu (0=[+0;+0], 1=[+1,+0], 2=[+1;+1], 3=[+0;+1]
                ;                4=[+2;+0], 5=[+2;+1], 6=[+0;+2], 7=[+1;+2])
                ; DD: směr (0=dolů, 1=doleva, 2=nahoru, 3=doprava)
                ; D:  směr (0=doleva, 1=doprava)
                ; FF: status (0=live, 1..3=fáze borcení)
                ; **********************************************************
                
            2. Zdeněk

              ad 4) návrh – jako obrázek s autostartem použít motiv úvodní spouštěcí obrazovky nebo její část ( k ŽÁBĚ a FLAPPYmu přidat ještě PYTEL ) 👍😉

              [ 4) snad autostarter s obrázkem ( jenže ty oficiální obrázky zobrazují nějaké kraby místo poctivých českých žab ) ]

              1. Libor L.A.

                Nakonec jsem to udělal přesně tak, jak navrhuješ. Sice si to na PMD 85-3 vynutilo spouštění v režimu kompatibility (aby se autostarter automaticky nastartoval) ale vypadá to tak nějak lépe, jako že jsem si s tím dal více práce, když už jsem odrbal ten závěr samotné hry. Přeci jen se nepodařilo udělat zcela přesně to, co jsem chtěl. Tak je tam nějaká taková náhražka. Ten scroll měl být jemný a je takový dost kostrbatý a uskákaný. No co už s tím..

  33. Libor L.A.

    Vypuštěna testovací verze. Nepředpokládají se další změny z titulu doplňování funkčních bloků. Naopak, při dané složitosti hry, nevylučuji opravy chyb, které budou při testech nalezeny.

    ad hudba: Aranžmá hudby, které jsem měl k dispozici, mělo zcela nepoužitelnou mezihru. Ovšem to je dáno omezeními 1-bitového přehrávače se vzorkovací frekvencí přibližně 10kHz. Proto jsem původní takty 40 až 55 odstranil a v závěru taktu 39 se přechází přímo na takt 56. Odborník tam uslyší nějaké nesrovnalosti, ale vy si jich ani nevšimnete :)

    1. Zdeněk

      FLAPPY2K testovací verze: 7.12.2019

      – HUDBA – OK 👌
      ( po jejím přehrání a max. jednom opakování ji pravděpodobně každý vypne – rupla by mu škeble )

      – HOUBIČKY – vlastnost nebo chyba ?
      1. při postupném dopadu více houbiček na stejnou pozici ( ve vodorovném nebo
      svislém směru ) zůstává nakonec vždycky jen jedna ( pravděpodobně ta poslední )

      1. Libor L.A.

        I když to jako programátor samozřejmě umím ošetřit (houby by se vrstvily na sebe, i filozoficky to není problém), tak jsem to ponechal tak, jak to měl originál. Ale kdybych si teď měl vybrat jednu z těchto dvou variant, nezávisle na tom, co ta hra aktuálně dělá, asi bych šel zase do varianty, kdy po dopadu zůstává jen jedna houba.

        I když to zdánlivě spolu nesouvisí, při střelbě houbičkami jsem zakázal autorepeat. Na skutečném PMD-85 totiž při dané kvalitě klávesnic člověk většinou vystřelil těch houbiček více a dost často tak o některé přišel. Tohle už se neděje a tak ztráta (N-1) houbiček po dopadu na jedno místo mi přijde jako řízené ztížení hry. Asi to tak nechám. Ale přesto díky za podnět. Ty podněty jsou velice důležité, na základě naší poslední debaty jsem například o pár procent zrychlil scanovací smyčky pro detekci žab na obrazovce (i když jsme přímo o tom nemluvili).

  34. Libor L.A.

    Protože vývoj jakéhokoliv programu nikdy nekončí, budou ve finální verzi zakomponovány minimálně tyto úpravy:

    1) ve scéně 131 jsou smazána definiční data mrtvého tmavého vejce (bez viditelného efektu)
    2) je sjednocen nápis VBG SOFTWARE na variantu bez pomlčky
    3) počet objektů v editoru byl zvýšen na 27 (kvůli sektoru 162)

    Ve spojení s bodem 3) nutno dodat, že editor neumí uložit houbičky tak, aby byly při startu scény překryty obludou (žábou nebo skákajícím duchem). Když jsem začínal editor scény 201 psát, nepočítal jsem s touto variantou a nyní už by to bylo na masivní změny. Takže sektor 29 sice do editoru natáhnete, ale bez těch přisednutých houbiček. Ony ale v té scéně mají pouze dekorativní funkci, nemá smysl je sbírat a použít.

    1. Zdeněk

      SUPER …..
      :-)

      Pozn:
      při zobrazení B&W { černá a bílá, bez blikání )
      – nelze ve scénách rozpoznat “ VEJCE „, které se má přesouvat ;-D

      1. Libor L.A.

        Právě pro tyto účely jsem zavedl rozlišení vajec v černobílém režimu navíc i texturou. Proto mě zaráží ta poznámka, že nejdou ty dva typy od sebe odlišit. Ta textura se zapíná ovšem jen v tom černobílém režimu. Takže pokud zvolíš režimy RGBM/WGRA/ColorAce a v emulátoru zapneš striktně černobílé zobrazení bez atributů polojasu a blikání – ano, pak se stane, že je nerozlišíš. Ale moc se mi nechce jít do zavedení dvou různých textur vajec – při tom rozlišení 12×16 pix tam není moc místa pro nějakou variabilitu, pokud chci zachovat plný obvodový obrys vejce a alespoň minimální vzájemnou grafickou kompatibilitu. Takže asi bych to tak nechal, pokud by to negenerovalo nějak zásadní problém.

            1. Libor L.A.

              A není jednodušší si zapnout režim BW a mít vejce rozdělená na plné a texturované? To mi přijde jako nejrychlejší varianta, která už je ve FLAPPYm zabudovaná. Ale možná mi uniká pravá podstata dotazu. Pokud mluvím o něčem jiném, ozvi se ještě.

              1. Zdeněk

                INFO: ✌😆
                znovu prozkoumáno a zjistěno, že ve hře nelze rozpoznat “ VEJCE „, které se má přesouvat ;-D jen za předpoladu, když:

                EMU85 ( asi i real PMD85 ) bude v režimu “ B&W “
                a zároveň hra FLAPPY2K bude nastavena s položkou
                v “ S: SETUP “ >> “ C: COLOR “ jinou než “ MONO “
                ( tzn. jakýkoliv barev. režim “ RGBM, WGRA, ACE “ ) ✌

                1. Libor L.A.

                  Ano, to co říkáš je pravda. Ale z pohledu praktického: je důvod volit některý z barevných režimů, když mám pouze černobílé zobrazení bez atributů polojasu a blikání? Stejně tak nebudu volit režim ColorAce, když mám PMD-85 upraveno pro provoz pod některým z ostatních barevných režimů, protože by se mi střídaly různě barevné mikrořádky a v lepším případě by se to snažilo napodobit součtové barvy. Já to chápu tak, že každý si podle svých hardwarových dispozic vybere ideální barevný režim, který mu hra nabízí. V Tebou popisovaném případě vyhovuje pouze barevný režim MONO, který rozlišuje vejce kromě jasu i texturou. Jiná volba v tomto případě opravdu není.

                  Ale myslím, že jsme se přiblížili vzájemnému pochopení a hlavně to můžu nechat tak jak to je :)

                  1. Zdeněk

                    V pořádku, v tomto případě se jedná o vlastnost
                    …. rozumím a chápu ✌

                    ( ale ne všichni ostatní by to museli taky tak jednoznačně pochopit, hlavně např. vzhledem
                    k emulátoru, kde je možnost nastavit cokoliv )
                    😆
                    Alespoň bude možno připadně uvést v FAQ 👌

  35. Libor L.A.

    Protože se mi nějak podivně rozpadla grafika stránky k FLAPPYmu, tak jsem ji v rámci opravy i aktualizoval. Doplnil jsem obrázek scény 162 v černobílém režimu, kde je vidět rozdílná textura vajec (toho hlavního a těch ostatních). Soubor *.ptp virtuální MGF pásky pro emulátor RM-Teamu už nese verzi s autostarterem.

    1. Zdeněk

      AD obrázek scény 162:
      EMU85 ( asi i real PMD85 ) bude v režimu “ B&W “
      a zároveň hra FLAPPY2K bude nastavena s položkou
      v “ S: SETUP “ >> “ C: COLOR “ jen na “ MONO “ ( nesmí to být žádný barev. režim )

      Na ten autostart s obrázkem se kouknu, jak si to teda nakonec poladil…. ✌

  36. Zdeněk

    AD přístupové kódy:
    – v sekci P: PASSWORD nelze zadat ( použít ) níže uvedené kódy z důvodu absence znaku “ : “ ( dvojtečka )

    036-040: “ :BEDA “
    141-145: “ HURA: „

  37. Libor L.A.

    Myslím, že to bude problém mapování klávesnice. U mě to jde. Já ji mám (tu dvojtečku) o dvě klávesy napravo od „L“. Fyzicky stejně jako na PMD-85.

    Doplněno: Udělal jsem test na fyzickém PMD 85-2A. Všechny klávesy fungují.

    1. Libor L.A.

      Při té příležitosti jsem ale ihned přišel na jinou chybu. Při redefinici kláves mi u slovního popisu některých kláves chybí znak konce a hra se při pokusu o navolení ovládací klávesy „sekne“. Takže díky za inspiraci. To je vážná chyba a bude doufám ještě dnes opravena.

      1. Libor L.A.

        Chyba zaseknutí při redefinici ovládacích kláves vyřešena. Zítra by podle plánu měl proběhnout maraton na skutečném PMD 85. Tedy průjezd scén 1 až 200. Vlastně i 201. Pokud se tam nic neprojeví, začne vlastní karanténa a na silvestra bych to označil jako hotové. Tímto děkuji Zdeňkovi, že mě dostrkal až k výše uvedené chybě.

        Na skutečném PMD 85 (verze 2A) jsem už stihl vyzkoušet všechny možné přechody a stavy programu včetně autostarteru. Tato testovaná verze už byla ta poslední (včetně opravy chyb v redefinici kláves) a je i ke stažení v hlavním článku.

        1. Zdeněk

          … jak se říká, že všechno zlý je i k něčemu dobrý ✌👌👍
          díky za zmínku mé osoby, rád jsem pomohl ( baví mě to )

          … a každá další “ ruka “ dobrá 😈😆

    2. Zdeněk

      … tak problém je skutečně v chybném mapování KBD, jedná se však o emulátor GPMD85Emulator (v0.11.1912 beta) pro Linux rovněž od RM- TEAMU, kde znak “ : “ je ( chybně ) namapován na stejnou klávesu jako znak “ ; “ ( po stisku této klávesy se generuje “ : “ a občas spravně “ ; “ )
      Klávesa, která má generovat znak “ : “ po stisku negeneruje nic ( jak v samotném emulátoru tak i ve hře FLAPPY )

  38. Libor L.A.

    Zrada. Ve scéně 184 se negativně projevil fakt, že mi ty houby létají dále než v originále. Asi jsem přebral z originálu konstantu délky letu a moc jsem nehlídal, odkud začíná odpočet. Takže upravím a nové testy. Ale to až od zítřka. A když už budu upravovat houby, zkusím nějak jemně doladit pohyb žab. Není to úplně ono..

      1. Libor L.A.

        Nojo. Houbám jsem zkrátil dolet o jednu jednotku (teď je to přesně jako originál) a ještě se vrtám v těch žábách. Ty mi nedají spát. Když jsem jel včera celodenní maraton, v sektoru 88 jsem strávil hodinu. To se nedá. Cílem není hráče umořit, cílem je vymyslet strategii a ustát taktiku. Takže když už jsem musel upravit nějaké ty pohybové konstanty houbiček, udělám to i u žab. Aby byly dost důrazné při tahu na FLAPPYho ale zároveň dost zmatené, aby zdánlivě ztrácely směr a daly hráči nějaký náskok. Hlavně musí zachovávat „rozkmit“ od zaměřené pozice FLAPPYho o maximálně 7 jednotek do každé strany, aby šly „zamknout“ v dutinách, které mají východ opačným směrem, než je FLAPPY. Ale je to jen o ladění konstant. Princip se nemění. Ani se mi jej už nechce měnit. Pro zajímavost, jako kalibrační scény pro pohyb žab používám například tyto: 7, 12, 48, 88. Problém totiž je, že když zavedu jakoukoliv míru možného chaotického pohybu žab, rapidně klesá pravděpodobnost, že žába udělá 7 kroků v kuse jedním směrem. A to je v některých scénách nutnost (například 88).

        1. Libor L.A.

          Proveden upload verze se změněnými parametry houbiček a žab. Nový testovací maraton scén 1 až 200 předběžně tuto neděli. Na několika testovacích polygonech to vypadá o něco lépe než minule ale důležitý bude pocit z projetí všech scén.

            1. Libor L.A.

              Díky za přání. Zdá se, žes byl vyslyšen, protože test první padesátky scén vykazuje velmi dobrou hratelnost. Žáby sebou tolik necukají a pohyb je složen z delších trajektorií. Přesto je míra chaotického pohybu žab dostatečná k tomu, aby šlo vymanévrovat jejich shluky, když pronásledují FLAPPYho. Oproti minulému nastavení pohybového systému žab je to výrazný posun kupředu. Ale nechci to zakřiknout. 50 scén není 200 scén..

Napsat komentář

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