Základní informace
- datum vydání poslední verze na PMD-85: 29. 9. 2019
- původní kód, inspirovaný hrou z platformy MS-DOS
- využití RAM: 0000h ÷ 37E5h, C000h ÷ FFFFh (včetně zápisníku)
- podpora modelů: všechny verze PMD-85 (1/2/2A/3)
- podpora barevných režimů: BW, RGBM, WGRM, ColorAce
- hudba/zvuky: pouze zvuky, hudba nebyla implementována
- ovládání: klávesnice, joystick A/B, myš602
Status
- finální verze hry, uvolněno k použití
Ovládací klávesy
- hra umožňuje redefinici kláves uživatelem
Popis hry a její vlastnosti
Cílem hry je čím jak nejdéle odolávat náporu nového ovoce a maximalizovat skóre v podobě šťávy, vyrobené z nasbíraných plodů.
Hráč přesouvá ovoce tak, aby stejný druh ovoce uložil do svislé či šikmé řady. Pokud uloží pět a více stejných kousků do řady, všechny tyto kousky v nepřerušené řadě zmizí, uvolní místo pro další ovoce a samozřejmě se přičte skóre v podobě šťávy ve zkumavce vedle hracího pole. Velikost přírůstku šťávy je přímo úměrná množství seřazeného (a odstraněného) ovoce. Ovšem po každém přesunu jednoho ovoce v hracím poli se objeví tři nové kousky ovoce. Smyslem hry je zřejmě vybudovat strategii řazení ovoce tak, aby rychlost jeho odstraňování byla v rovnováze (nebo větší) než rychlost přírůstku nového ovoce.
Spuštění hry
Hra má nakonec i autostarter, proto se u modelu PMD 85-3 musí zadat příkaz JUMP FFF0 pro přechod do režimu kompatibility a následně nahrát hru příkazem MGLD 09.
Soubory ke stažení
- hra Funny Fruits – Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu
Galerie obrázků (hra v režimu ColorAce)
Původně jsem záměr přepsat tuto hru pojal v okamžiku, kdy dcera začala shánět verzi pro DOS. A napadlo mě, že by to byl ideální adept na ovládání myší. Ovšem požadovaná rychlost odezvy CPU na snímání „myších“ signálů je neslučitelná s kmitáním ovoce ve vybrané buňce. Na to nemám řešení. Možná časem indikátor vybraného ovoce budu řešit jinak a tu implementaci myši dodělám. Uvažoval jsem o ovládání myší, kompatibilním s nativní myší PMD-85 a ATARI ST MOUSE (hardwarově a konektorově je kompatibilní se standardními JOYSTICKy) a kdysi (1995?) už jsem driver tohoto typu myši na PMD-85 rozchodil.
Prozatím je indikátor vybrané buňky řešen „ovíjejícím se pruhem v délce poloviny obvodu vybrané buňky po vnějším obvodě buňky“. Je totiž nutno rozlišit vybranou buňku ve smyslu náhrady „myšího“ kurzoru a vybranou buňku ve smyslu již označeného ovoce (zde, ve shodě s originálem, se jedná o vibrace ovoce v označené buňce). Popis složitý, v praxi doufám intuitivní. Ostatně, brzy budu chtít uvolnit demo s pohybem kurzoru.
Integrace základního grafického jádra a ovladače myši dokončena.
Započato s modulem detekce buňky, na kterou klikne hráč myší. Prozatím pracuji nad variantou, kdy se s ohledem na adresu myšího kurzoru ve videoram vymezí svislý a vodorovný pruh, v jejichž průsečíku zůstanou 0 až 3 buňky. Tato eliminace probíhá rychle. Na výslednou sadu maximálně tří potenciálně blízkých buněk pak aplikuji Pythagorovu větu, abych určil nejmenší pixelovou vzdálenost středu vybírané buňky od pozice myšího kurzoru. Vypočítat druhé mocniny rozdílů souřadnic v kartézském systému je jednoduché, na to stačí rutina osmibitového násobení. Jak ale na odmocninu? Protože nejrychlejší výpočet odmocniny je ten, který se neprovede, zkusím to právě takto. Vycházím z předpokladu, že porovnávat odmocniny dvou čísel je z hlediska jejich vzájemné velikosti totéž, jako porovnávat jejich přímé hodnoty, tedy druhé mocniny délek přepon. Teď už to jen realizovat. Na tom se právě pracuje a až to odladím i na skutečném železe, uvolním asi první klikací demo.
Modul detekce označené buňky je hotov. Pár testů jsem udělal a zatím to dělá to co má. Ostatně během vývoje se naoznačuji tolika buněk, že se případná chyba dříve či později projeví. Tak jako vždy modul prodělal určitou evoluci. Nakonec to funguje tak, že při stisku levého tlačítka myši procházím všechny relevantní buňky a testuji jejich odchylku od kurzoru myši nezávisle pro obě souřadnice X a Y. Pokud některá z těchto dvou odchylek je větší než 12, jdu na test další buňky, neboť jsem evidentně mimo půdorys buňky. Ale pokud jsou obě odchylky dX i dY pod 13 pixelů, vypočtu pomocí tabulky druhou mocninu. Ta tabulka je pak definována pouze pro druhé mocniny čísel 0 až 12 a je tedy přijatelně krátká. Abych pak definitivně rozhodl, zda jsem kliknul na právě testovanou buňku, porovnám výraz dX^2 + dY^2 s konstantou 144 (ta představuje druhou mocninu poloměru 12 pixelů, což je přijatelná kruhová aproximace šestiúhelníku buňky). Zda to funguje, můžete posoudit v aktuálně uvolněném demu.
Nyní je na řadě modul RANDOM. Asi není problém generovat (pseudo)náhodná čísla. To, co činí tento modul poněkud složitějším bude mechanismus, který bude statisticky zvýhodňovat hodnoty, které dlouho při losování nepadly. Ať již při výběru ovoce či při výběru buňky, kde se toto ovoce objeví.
Další modul dokončen. Tentokrát to byl modul pro mazání ucelených řad stejného druhu ovoce. Ten byl nad očekávání jednoduchý. Nyní se pokusím udělat animaci buňky, označené myší. Buď se podaří časově skloubit kmitání ovoce s rychlostí ovladače myši (něco mě napadlo) nebo to udělám tím ovíjejícím se hadem kolem označené buňky (již vyzkoušeno a tento druh kurzoru bude stejně použit, pokud hráč přepne ovládání na klávesnici). Po zvládnutí této etapy uvolním další demo, pak to totiž bude mít smysl. A pak zbyde kromě estetických kudrlinek (menu, fonty, zvuk, atd.) už jenom algoritmus pro hledání cesty (bude to Dijkstra).
Dnes jsem tedy uvolnil první funkční demo. Chybí ty zmíněné estetické drobnosti ale hlavně chybí dodělat algoritmus pro nalezení cesty mezi výchozí a koncovou buňkou cesty, po které se pohybuje ovoce. Prozatím to funguje tak, že označené ovoce nepotřebuje spojitou cestu do cílového bodu ale objeví se tam přímo. O to je ta hra drasticky jednodušší. Prozatím.
Kupodivu se podařilo nalézt řešení souběžného kmitání ovoce a dostatečně rychlého pohybu myši. Ostatně, můžete posoudit sami.
A ještě jednou upozorňuji, že na emulátoru PMD-85 musíte zapnout verzi 1, zapnout podporu myši 602 a zvolit systém ColorAce. Hra se nahrává z magnetofonu příkazem MGLD 01 a spouští příkazem JUMP 0000.
1. chyba – hned po startu se omylem aktivuje kurzor označené buňky a to způsobí falešné zobrazení čtvrtého ovoce
2. chyba – po obsazení přesně všech buněk hracího pole se hra neukončila i když už bylo jasné, že nově označenou buňku už nebude kam umístit
obě chyby odstraněny
Paráda.
Možno by bolo dobré, po pridaní posledného ovocia v rade, to posledné aj zobraziť a pred odstránením celého radu s ovocím, 2x/3x „zablikať“ celým radom.
OK. Beru na vědomí. Popřemýšlím nad tím, jak by to implementačně vypadalo. Zatím jsem to udělal podle originálu na DOSu.
Doplněno:
1) probliknutí zkompletované řady ovoce
2) doplněn ukazatel rekordu
3) sjednoceny vnitřní procedury kolem kmitacího „kurzoru“ vybraného ovoce
4) doplněna obsluha klávesy STOP (prozatím jen restart hry)
Upload této verze proveden. Nyní budou na řadě ty kudrlinky, o kterých jsem mluvil již dříve. Včera jsem dělal nějaké propočty kolem odhadované doby nalezení nejkratší cesty pro cestování ovoce po obrazovce. Floyd-Warshallův algoritmus, který řeší nalezení nejkratší cesty silově, by k nalezení cesty potřeboval odhadem 55 vteřin. Tudy ne. Již zmíněný Dijkstrův algoritmus zase vyžaduje datové struktury, které si s assemblerem moc netykají. Respektive jejich realizace zabere nějaké to úsilí. Takže hru zprovozním bez hledání cesty a až to celé pojede, pak se uvidí, zda bude ovoce hledat a procházet cestu mezi výchozí a cílovou buňkou, či zda to zůstane v současné podobě (hra je jednodušší ale ne zase tak moc, jak jsem čekal).
Upload pokročilé verze hry. Zprovozněna herní grafika a menu. Zbývá dodělat alternativní ovladače pohybu kurzoru (klávesnice a joystick), nějaké ty výstupy pro výhru a prohru a překlopit celoobrazovkové logo nad menu. A samozřejmě autostarter se vším, co k němu patří. Hudbu tentokrát vynechám, je to přeci jen cvičná aplikace pro myš.
Protože se jeden dobrovolník nabídl, že zkusí zapracovat do hry Funny Fruits algoritmus pro hledání nejkratší cesty, čeká hra na tento pokus. Alespoň jsem provedl upload poslední verze někdy z prosince, která už je ovladatelná nejenom myší ale i klávesnicí nebo joystickem. Menu tuším funguje již celé.
Tá „symbolika“ v menu sa mi páči. Je veľmi podarená a prudko zrozumiteľná. ;-)
Pri zvolení ovládania Klávesnicou alebo Joystickom funguje iba pohyb hore a dole. Doprava a doľava nie – iba preblikne červená LED.
Ta červená LEDka signalizuje jakousi funkci SHIFTu u bočních šipek. Samotné stisknutí šipky vlevo či vpravo pohyb nevyvolá, neboť se neví, zda má pohyb být šikmo nahoru nebo šikmo dolů. Samotnou akci s kurzorem vyvolá až stisk kláves nahoru a dolů. Takže platí:
vlevo dolů = nejprve stisknout vlevo (jakoby SHIFT), pak dolů (teprve nyní se kurzor posune)
vlevo nahoru = nejprve stisknout vlevo, pak nahoru
nahoru = samotný stisk klávesy nahoru
vpravo nahoru = nejprve stisknout vpravo, pak nahoru
vlevo dolů = nejprve stisknout vlevo, pak dolů
dolů = samotný stisk klávesy dolů
Zkoušel jsem několik různých systémů pro ovládání kurzoru do „šesti světových stran“. Tenhle je z nich nejlepší jako kompromis mezi ovládáním na fyzickém PMD-85 a v emulátoru. Na samotném PMD-85 je pěkně seřazených 6 kláves pro pohyb kurzoru, které jsou jako ušity pro tuto hru. Bohužel v emulátoru PMD-85 na klávesnici PC jsou klávesy prostorově přemapovány a je to nepoužitelné.
A ovládání joystickem se chová stejně. Nejprve vychýlím joystick do požadované (nebo žádné) boční strany a pak „doťuknu“ diagonálu nahoru či dolů. Pohyb přímo nahoru a dolů je jednoznačný.
Já vím, slovní popis vypadá složitě, ale nějak se mi to ovládání jevilo nejlepší. Ale pokud někdo najde jiný intuitivní styl ovládání, rád zapracuji.
Vypuštěna finální testovací verze. Nyní budou následovat kompletní testy na všech typech PMD-85. Byla provedena celá řada změn jak funkčního, tak i ergonomického charakteru. Další změny v této chvíli nepředpokládám, pokud se ovšem něco nenajde.
Dnes ještě malá úprava ovládání hry pomocí klávesnice. Na poslední chvíli jsem přehodil nějaké šipky a neuvědomil si, že hra je psána primárně pro PMD-85 (myšlen originální hardware) a ne pro PC. Proto jsem změny vrátil zpět a ovládání pomocí kláves je optimalizováno pro skutečnou klávesnici našeho miláčka. Změny jsou promítnuty do hlavního článku.
Testování však pokračuje..
A testování ještě dlouho pokračovat bude. Mám tam kolizi s hladinou zásobníku. Chyba, která přežila rok zkušebního provozu a projevila se až při testech na jedničkové verzi PMD-85, které nemá RAM v oblasti nad 8000h..
Chyba je odstraněna a všechny možné herní stavy úspěšně fungují i na PMD-85 verze 1. Testování pokračuje..
Už je to fakt pekne hrateľné. Skvelé!
Díky. Ale i když testy skončí, dal bych tomu měsíční karanténu a pak bych Tě požádal, zda byste to jako hlavní archiváři přidali ke sbírce programů pro PMD-85.
Samozrejme, určite pridáme.
Přeci jen ještě jedna změna. A s ní i nová verze. Během testování na reálném PMD-85 se ukázalo jako celkem účelné, aby se levá klávesa EOL chovala stejně jako pravá klávesa EOL. Potěšující zpráva je, že ovládání myší na skutečném PMD-85 je celkem svižné a hra se s ní dá vcelku rozumně ovládat.
Provedl jsem kontrolu na výskyt historických chyb, kterých jsem se dopustil při psaní předchozích her. Taky byla hra vyzkoušena na všech platformách v emulátoru a na skutečném PMD-85 verze 2A. Ale protože chyba generování pseudonáhodných čísel se projevila až po roce vývoje, raději prodloužím testování.
Premýšľal som, či by tam nemohla byť predsalen voľba ovládacích klávesov, ale ak by to mala byť zbytočná komplikácia, tak to nemá cenu. Samozrejme, aktuálne zvolené klávesy sú na živom PMD 85 ideálne, ale v Emulátore je to trochu nepraktické. Ale zase, v Emulátore si človek asi skôr zvolí myš.
A ešte otázka, bude úvodný obrázok?
Nad oběma podněty popřemýšlím. Není kam spěchat.
Redefinice kláves přidána. Ještě popřemýšlím nad tím titulním obrázkem..
Skvelé. Super!
Ještě tu redefinici kláves předělávám do grafické podoby. Ta stávající obrazovka je taková graficky nevyvážená a poloprázdná. Jak řekl syn, na osmdesátá léta dobré, ale dnes už ne.. Ta nová verze se mi líbí mnohem více. Zapadá do grafického konceptu hry. Takže asi zítra.
A ten titulní obrázek nakonec nebude. Nějaký návrh byl, ale není to ono. A z originálu nelze nic adaptovat.
Upload Funny Fruits s předělanou částí pro redefinici ovládacích kláves do grafické podoby. Nyní startuje znovu testovací kolotoč.
Veľmi pekne je urobená ta redefinícia klávesov.
Myška jede jak namydlená, úvodní screen parádní, definice kláves na poměry PMD85 originální. Jako vždy skvělá práce!
Mimochodem, hledání cesty nakonec implementováno nebude?
Hledání cesty nebude. Já jsem to vzdal už dávno. Pak se syn nabídl, že to zkusí napsat, nicméně to dopadlo jak to dopadlo. Já už jsem dopsal zbytek a čekat se mi na tu jeho část nechce, a samotnému se mi to taky psát nechce. Nevím, jestli někde nedělám chybu v úvaze, ale odhad časové náročnosti klasických algoritmů hledání cesty včetně toho Dijkstrova mi vychází příliš dlouhý. Řádově sekundy. Jasně, je to ten nejhorší případ, ale pořád je to moc. Možná existuje nějaký efektivnější způsob v „malém“ grafu, ale to je právě to, že mě nenavštívila nějaká inspirace, jak to efektivně a efektně vyřešit.
A protože se mi mezi Funny Fruuits a The Magician’s Course vklínila další inspirace (=hra), chci Funny Fruits ukončit, abych se mohl zabývat těmi dalšími projekty. Oba by mohly být do konce roku hotovy, protože jsou v pokročilém stupni rozpracovanosti.
Dnešním dnem po uplynutí povinné karantény a po opakovaných namátkových kontrolách prohlašuji tuto hru za ukončenou a vypouštím ji tímto do světa.
Ještě malá úprava: hra po startu skočí do MENU. Taky jsem připojil dříve zavrhnutý autostarter s nahrávacím obrázkem. Tímto jsem nakonec uzavřel koloběh připomínek viz výše, u kterých jsem tvrdil, že nebudou a nakonec jsou. Až na to hledání cesty.. Ale to opravdu nebude, to je jiná liga. Takže všem motivátorům tímto děkuji, že mě dokopali k těm dodělávkám. Určitě to stojí za tu práci navíc.