Trailblazer

Základní informace (aktuální údaje během vývoje)

  • datum vydání poslední pracovní verze na PMD-85: 17.9.2017
  • originální kód inspirovaný vizuální podobou verze pro Commodore Plus/4
  • využití RAM: 0000h ÷ 629Ah, C000h ÷ FFFFh (včetně zápisníku)
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • grafika: (vývoj probíhá v režimu ColorAce)
  • hudba/zvuky: ano – vestavěný akustický měnič
  • ovládání: (prozatím není ustálena cílová varianta)

Popis hry a její vlastnosti

Cílem hry je zdolat všech 16 sektorů. V každém z nich je nutno dostat se s míčem v časovém limitu a s přiděleným počtem možných „skoků“ míče do cíle. Míč během jeho cesty sektorem vede hráč tak, aby pokud možno nezapadl do některé z děr (což způsobí nežádoucí časové prodlení) a pokud možno s nejvyšší zvládnutelnou rychlostí míče. Barva kostek, z nichž je tvořena cesta, určuje vlastnosti této cesty:

  • černá = díra (míč do ní zapadne a čeká se na jeho „obnovu“)
  • plná červená = automatické zpomalení míče
  • plná zelená = automatické zrychlení míče
  • plná modrá = automatický skok míče
  • červená, zelená a modrá s polovičním jasem (texturou) jsou neutrální pole
  • nebeská barva (plná i texturovaná) způsobí prohození stranového ovládání míče hráčem
  • bílá = startovní a cílová rovinka (neutrální pole)
  • žlutá = neutrální pole
  • fialová = neutrální pole

Hra je psána od začátku jako původní kód, inspirovaný myšlenkou původní hry a její podobou na stroji Commodore Plus/4. „Odvalování“ cesty pod míčem je ovšem řešeno výlučně programově.

Soubory ke stažení

  • hra Trailblazer – Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu (verze z 17.9.2017)

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

demonstrace barevného omezení

nový vzhled hry

 

 

 

 

 

22 komentářů u „Trailblazer

  1. Libor L.A.

    Upload další verze Trailblazeru pro PMD-85. Fonty změněny na rastr 9×12 pixelů, dokončen modul hvězdné oblohy, dokončena hudba (ale ta se ozve až v další verzi, kde dokončím úvodní obrazovku), jede tělo vlastní hry. Nyní tedy dokončím úvodní obrazovku s voláním nastavení, informací, spouštěním samotné hry, atd. A pak už půjdu na poslední veliký problém – kinematiku míče.

  2. Libor L.A.

    Pod hlavním článkem je ke stažení nová verze Trailblazeru pro PMD-85. Celá úvodní obrazovka včetně hudby je hotova, zatím nejede pouze dialog „Informace“, nad jehož obsahem se musím ještě zamyslet. Hru jako takovou lze spustit (dokonce i s použitím supertajných hesel do vyšších sektorů 🙂 ) – nicméně míč si ve hře běží nikým nerušen po cestě. Právě ovládání a kinematika míče nyní bude na řadě.

    Po dokončení posledního sektoru skočí program zpět do úvodní obrazovky. Pokud po dokončení funkčních částí hry zbude místo v paměti, dodělal bych eventuálně nějaké cílové demo.

  3. Libor L.A.

    Po dnešku mohu prozradit, že se mi podařilo zkrotit poslední typ pohybu míče spolu s obsluhou buferu pozadí pod míčem. Konkrétně jsem časově zvládnul šikmý let míče. Teď to ještě doladit tak, aby všech 9 zobrazovacích rutin ([vlevo|na_místě|vpravo] x [nahoru|na_místě|dolů]) bylo stejně dlouhých a nekolísala tak rychlost hry podle typu pohybu míče. Těch rutin musí být opravdu devět. I když by to šlo pomocí jednoduchých cyklů sloučit do jedné rutiny, tak ty rutiny jsou opět časově optimalizované a to u mne znamená jedno: využití „dvoubajtových“ instrukcí POP/PUSH pro přenos dat. A to už se v jednoduchých cyklech nedá moc dobře pozičně posouvat po jednom bajtu. Většinou ano – ale ne vždy.

    Takže odhaduji, že zhruba do týdne uvolním další verzi. Smyčka hry je už dostatečně robustní (a téměř hotova), hraje to melodii po dojezdu, píše cílové hlášky a hesla (ty však pro vás uvolním až ve finální kompilaci, pokud se nezapomenu) a má to většinu ochranných mechanismů.

    Co chybí: zatím jsem neřešil „výjezd“ míče mimo dráhu vlevo a vpravo. Tam ještě míč nekorektně odmazává hvězdné pozadí. Ale mám vizi, jak na to. A poslední balík úprav se zaměří na interpretaci povrchu dráhy. Tam už taky pomalu vím, jak to udělat. On to tedy většinou není problém udělat. Problémem je udělat to extrémně rychle.

    Jak se třeba extrémně rychle dělá regulace rychlosti pásu? Pokud se při každém průchodu herní smyčkou zavolá následující sekvence, lze rychlost pásu regulovat lineárně od nuly (opravdu zastaveného pásu) až po 254/255-in nominální rychlosti bez uvedené regulace.

    LHLD SPEED ;(H=kumulativní čítač, L=nastavená rychlost pohybu pásu)
    MOV A,H
    ADD L ; v CY bude „1“ v případě, že se má pás posunout
    STA SPEED+1 ; uložit kumulativní čítač
    CNC SHFBAL ; jen časový balancer, stejně dlouhý jako posun pásu (nemění CY)
    CC SHFBLT ; vlastní posun pásu o jednu pozici

    Většina vlastností hry je tabulkově definovaná. Barvy objektů, barvy a textury povrchu cesty (zde ovšem jen v rastru 2 videobajty nad sebou pro kompletní ColorAce atribut), tvar paraboly letu míče při skoku (nejen tvar, vlastně celá trajektorie, která může zahrnovat i několik skoků za sebou se zmenšující se amplitudou), atd. Takže možnost doladění hry pro tu správnou obtížnost by nemělo činit větších obtíží.

    Myslím, že jeden z časově nejdelších úseků při vývoji této hry bude právě nastavení časových limitů pro jednotlivé sektory tak, aby šly zahrát až po určitém tréninku hráče a nebyly ani moc těžké ale ani moc lehké.

  4. Libor L.A.

    Tak jsem pod článek pověsil nejnovější verzi Trailblazeru pro PMD-85. Pohyb míče je kompletně hotový. Tedy funkčně hotový. Nyní ještě bude následovat časová optimalizace, aby byl pohyb časově rovnoměrný. Pak už se půjde na interakci s dlaždicemi cesty.

    Hra se ovládá prozatím šipkami (vlevo, vpravo, zpomalit, zrychlit) a skáče se klávesou mezerník. Maximální rychlost, kterou vyvinete, bude v praxi stejná nebo mírně vyšší. To ukáže až zmíněná optimalizace.

  5. RomBor

    Tak už asi chápem, že je to zámer. Ak by lopta išla až na kraj dráhy, tak by pri výskoku sprite opustil dráhu a to asi nie je z programátorského hľadiska žiadúce.
    Takto ma to ale zmiatlo, pretože sa zdá, že je lopta na rozhraní dvoch polí a ak bude jedno z tých polí diera, tak nie je jasné, či už lopta do nej spadne, alebo sa ešte udrží.
    Ale možno som si to iba zle vyložil.

    1. Libor L.A.

      Prozatím míč nemůže svým obrysem opustit dráhu, protože přemazával nekorektně ty vedlejší hvězdy. Takže je to záměr, do doby, než se najde řešení. Momentálně připravuji další verzi, která by měla pohyb dráhy podstatně zrychlit a jako vedlejší efekt to přinese fakt, že míč bude moci běhat přes celou šířku obrazovky a nebude stranově omezen viz poslední verze.

      Ovšem něco za něco. Doteď měl míč svůj bufer dlouhý 150 bajtů, který uchovával pozadí pod míčem. Abych ten bufer nemusel rotovat podle pohybu míče (rotace buferu zabírá podle směru ca 6000T CPU každých 10ms), rozpracoval jsem variantu, že budu mít stínovou videoram (lépe řečeno její spodní část) a nic se rotovat nebude. První zkoušky vypadají dost dobře. Ovšem musím obětovat ca 4096 bajtů na náhradu toho buferu, který měl pouhých 150 bajtů. A opět začínám škrábat limit paměti RAM. Ovšem uvědomuji si, že ta hra musí být hratelná (=dostatečně rychlá). Takže asi na výběr nemám.

      1. Libor L.A.

        Momentálně jsem průjezd sektorem č. 16 stáhnul ze 62 vteřin na 37 vteřin a ještě tuším rezervu.
        Ta hra se mi začíná líbit!
        Převod na stínovou videoram se ukázal jako trefa do černého. Teď ještě dopilovat hrany a je to.
        Jo a míč už může jezdit od pixelu 0 vlevo až po pixel 287 vpravo bez omezení a to včetně skákání.

  6. Libor L.A.

    Dnes opět upload nové verze. Míč už tedy jezdí bez omezení, dobu průjezdu sektorem 16 jsem z původních 62 stáhnul na 31 vteřin. Ovšem v rámci urychlení jsem vědomě zanedbal jednu grafickou operaci během vykreslování míče. Ty „defekty“ nejsou moc vidět. Alespoň tedy při rychlejších pohybech míče. Pokud by to bylo (například na reálném hardware) viditelné moc a snižovalo by to estetický dojem z hry, dodělám plnou interpretaci vykreslování míče. Nějak zásadně by to rychlost hry snížit nemělo.

    No a asi půjdu na interpretaci dlažebních kostek..

    1. Libor L.A.

      Někdy se stane, že ten defekt při vykreslování míče zůstane viditelný při dojezdu do cíle. Odstraním. Momentální stav je takový, že míč reaguje na první typy kostek dráhy (zpomalení, skok) včetně ignorace typu kostek, pokud míč letí. Začíná to vystrkovat růžky..

  7. Libor L.A.

    Stav k dnešnímu dni:

    1) interpretace všech „dlažebních kostek“ jede
    2) vykreslování všech objektů je bez kolize
    3) rychlost je podle mne dostačující

    Co zbývá? V zásadě už jen prkotiny. Hlavně ale již zmiňované vyvážení náročnosti. Zítra, tj. v neděli 27.8.2017 bych dal ke stažení další verzi, tentokrát již hratelnou. Bude mít navýšený počet skoků na 9 a čas hry zvednutý paušálně na 199 vteřin. Pokud by někdo chtěl zkoušet „za kolik to dá“ (čas i počet skoků), budu mu nesmírně vděčný. V tom případě by bylo dobré u každého sektoru si poznamenat čas, který jste dali při vašem prvním pokusu o zdolání každého sektoru. To kvůli přehledu, jak se může hráč postupně zlepšovat a jak nastavit právě ty limity času a počtu skoků.

    Takže zítra.. Dnes ještě časově vyvážím jednotlivé pohyby míče, aby nekolísala rychlost hry podle jeho pohybu.

    1. Libor L.A.

      Nakonec jsem to stihl ještě dnes. Zveřejněná verze má některé části (například ztrátu a obnovení míče) vytesány dosti hrubě. V této podobě jsou tam jen proto, aby na ně šlo navázat ostatní procedury. Další pilování je samozřejmě v plánu..

      1. Libor L.A.

        Zveřejněna další verze. Opravena stranová reverze při najetí na dlaždice v barvě CYAN. Opraveno vykreslování míče na pozadí dráhy. A pak mnoho dalších drobných úprav. Někde se ten ca 1kB navíc musel projevit..

        Momentálně je vypnuto časové vyvážení pohybu míče. Ta daň za časové vyvážení pohybu byla znatelná. Tedy to zpomalení hry bylo znatelné. Pokud nenajdu nějaký mechanismus pro rapidní zrychlení, nechám pohyb míče „nevybalancovaný“. Zase až tak moc to nevadí.

  8. Libor L.A.

    Doplněno ovládání JOYSTICKEM a na klávesnici se hra od teď ovládá klávesami QAOPM. A pak plno drobných změn, které asi moc vidět nebudou ale taky se musely udělat.

  9. Libor L.A.

    Upravena letová parabola při skoku míče. S touto konfigurací zřejmě začnu provádět testy obtížnosti jednotlivých sektorů. Jinak zbývají dodělat takové věci, jako:

    1) odlišná hudba při nesplnění časového limitu sektoru
    2) odlišná hudba na konci hry
    3) nějaké překvapení v cíli (jestli se vleze do paměti)
    4) asi upravit texty po zdolání sektorů (u uveřejňovaných verzí zatím nejsou doufám viditelné, kromě toho prvního)
    5) zvážit, zda má smysl sekce „Informace“ a případně ji dodělat
    6) připojit autostarter

  10. Libor L.A.

    Každým dnem se podaří dopilovat kousek kódu Trailblazeru. Dnes jsem přesunem pár instrukcí dosáhl zkrácení doby průjezdu sektoru č.16 z 24 na 21 vteřin, což představuje zrychlení o ca 14%. Přeci jen se integrace všech pohybových komponent hry projevila znatelným zpomalením, a tak musím kompenzovat, kde se dá. Pro zajímavost:

    již vzpomínanou sekvenci:
    LHLD speed
    MOV A,H
    ADD L
    STA speed+1

    se vyplatilo nahradit sekvencí:
    LXI H,speed
    MOV A,M
    INX H
    ADD M
    MOV M,A

    Přineslo to „zanedbatelné“ dva takty CPU. Jenže ony se ty dva zbytečné takty opakovaly ca 3000x za vteřinu. A takových časových zisků se mi podařilo naškrábat více. A proto těch 14% rychlosti navíc. Obecně se z hlediska časové minimalizace kódu vždy vyplatí načítat data z paměti, když na ně ukazuje nějaký registr a adresa se nezadává jako součást instrukce. Instrukce pro načítání těch dat z paměti pak nemusí zbytečně vynaložit tři takty CPU (čtení bajtu z paměti) na každý načtený bajt. Takže namísto LDA/LHLD/STA/SHLD používat raději MOV M,reg nebo MOV reg,M, ADD M, atd.

    Taky jsem si u originálu všiml, že při manuálním skoku se postupně zvedá jeho amplituda. To musím dodělat. Asi teď delší čas budu hrát originál na Commodore Plus/4 abych nasál právě ty detaily. Takže na verzi pro PMD-85 ještě určitě udělám významné změny. Ale to až budu vědět, jaké to budou..

    V zásadě mohu říci, že mám z hlediska zvětšování rychlosti ještě dva trumfy v rukávu. Mohu prodloužit časovou prodlevu mezi voláními ovladače míče z 10ms na 10.8ms, ovšem za cenu jeho mírného zlenivění. Druhou možností je vypnutí časového vyvážení pohybu míče. Pohybové rutiny (pohyb vlevo, vpravo, skoky, bez pohybu,..) jsou různě dlouhé a u těch nejkratších (bohužel jsou to ty nejčastěji volané) musím několik set až tisíc taktů CPU jalově čekat, aby rychlost hry výrazně nekolísala podle toho, jaké klávesy hráč stlačil. Když vyvážení vypnu, zrychlím hru ca o 10-20% ale nyní po všech optimalizacích už jsou ty rozdíly v době pohybových rutin míče mnohem více viditelné než dříve. Ale mohu tu kompenzaci dělat jen částečnou. Tedy já už teď kompenzuji pouze na 80% času těch nejdelších rutin, což jsou diagonální pohyby míče, kdy se hráč stejně soustředí na něco jiného, než na vnímání kolísání rychlosti. Ale mohu kompenzovat na 70%, 60%, a bůhví, kde se ten pokrok zastaví..

  11. Libor L.A.

    Abych maximálně napodobil vlastnosti originálu, provedl jsem včera a dnes zpětný překlad potřebných částí kódu verze hry pro Commodore C16/Plus4. Postupně jsem vypínal jednotlivé funkce a pozoroval ty zbývající. Celkovou rychlost pohybu, chování při najetí na červené a zelené plochy už mám doladěny podle originálu. Mohu říci, že třeba s oblibou testovaný sektor č.16 projede originál za 23 vteřin, na PMD-85 to trvá 25 vteřin. To není zase až taková tragédie. Na Commodore se příčné pruhy cesty „kreslí“ pouze změnou dvou barevných registrů na každém rozhraní mezi dvěma vodorovnými pásy (za použití přerušení od výšky paprsku na obrazovce), na PMD-85 trvá ryze programově řešené vykreslení jednoho takového předělu v průměru ca 650 taktů CPU – tedy zhruba 20x déle.

    Kdybych měl popsat, jak na mne působí forma programování této hry pro Commodore, tak bych asi řekl: organizačně velmi kulturní, žádné špagety sem a tam, pěkně řešené strukturované řazení procedur. Občas se sice některé proměnné nastaví dvakrát po sobě, protože se na to „zapomnělo“ a právě v těch zanořených procedurách to není vidět. Nebo BCD konverze je dělána formou: odečítej binární jedničky a přičítej BCD jedničky někde jinde. Ale jinak velice pěkné a přehledné. Důvod, proč to na Intelu 8080A s jeho kompaktnějším kódem je dlouhé ca 7000h bajtů oproti 4000h bajtům na MOS6502 je právě fakt, že na PMD-85 mám pro 63 dvojic mikrořádků cesty pod míčem napsaných sólo 63 obslužných driverů. Celá smyčka hry na PMD-85 má na minimum sražený počet podmínek, vše jede jako lineární kód bez větvení.

    Konec už je sice na dosah, ovšem nedá se nad tím sedět každý den. Teď si dám pár dní pauzu..

  12. Libor L.A.

    Dnes jsem uložil ke stažení novou verzi, která má doplněno:

    – u skoků se postupně zvedá amplituda, u manuálních do stupně 3, na modré kostce až do stupně 5
    – maximální amplituda skoku (na stupni 5) zvětšena na 44 pixelů
    – výrazně upravena rutina tisku znaků (kvůli úspoře místa pro skoky)
    – upraven mechanismus detekce modrých kostek
    – doplněn mechanismus bezpečného zavedení do prvního kola
    – sloučeny tabulky pro rychlý převod pixelu na adresu videoram a fázi
    – zaveden kumulativní herní čas a doplněn nástřel herních časů v sektorech (o 10% více než originál)

    Takže nyní už asi opravdu začnu testovat průjezdnost sektorů. Vzhledem k „okopírování“ rychlostně-prostorových poměrů z originální hry by to mělo být v pořádku a vyvážené. Ale uvidím, jestli jsem na něco nezapomněl. Takže, ..

    Testu zdar!

  13. RomBor

    Už to vyzerá fakt takmer hotovo.
    Len mám problém s tým, že viac, času strávim v dierach, ako na dráhe. Žiaľ, moje reflexy na takéto hry nestačia. 🙂

    1. Libor L.A.

      Já jsem na tom úplně stejně. Projel jsem zatím jen sektor 1. Přemýšlím co s tím. Jestli na rozdíl od originálu hru velmi zjednodušit, nebo to nechat tak. Třeba takového Penetrátora na PMD-85 jsem bez POKE taky neprojel celého.

      Teď se ještě souběžně zabývám „zachováním literatury o PMD-85 pro příští generace“ a proto Trailblazer zatím netlačím ke konci. Ale shodou okolností jsem včera dokončil „zachování“ poslední várky dokumentace než ji vrátím a další knihy zatím nebudu půjčovat. Takže se asi začnu zamýšlet nad finální edicí hry Trailblazer.

  14. Libor L.A.

    Poslední dny vyloženě hledám nějakou známou „tragickou“ melodii, která zazní, pokud sektor Trailblazeru nebude dokončen ve stanoveném čase. A naopak nějakou příjemnější melodii, která zazní po dokončení posledního, šestnáctého sektoru. A nemohu se rozhodnout.

    Originál to má jinak. Vlastně nijak. Tam ani jedna varianta nenastává. Při vypršení času se sektor ihned ukončí nějakým pazvukem. A po šestnáctém sektoru se opět opakuje ten první. Také bez hudebního bonusu.

    Přednost dávám klasikům. Ti, co jsou přes sto let na pravdě boží, ti se o svá autorská práva hlásit doufám nebudou. Pár tipů mám, ale na to pravé ořechové jsem stále nenarazil..

    Vlastně zbývá jen implementovat ty dvě melodie a trochu upravit ty „oslavné“ texty na koncích sektorů, aby se stále neopakovalo jedno a totéž. Bohužel nelze převzít beze změny originální texty, protože na PMD-85 nejsou jednotné barvy dlaždic ve všech barevných režimech. A ty originální texty se relativně často odkazují právě na ty barvy dlaždic. V zásadě bych ale tyhle problémy chtěl mít tak před půl rokem 🙂

  15. Libor L.A.

    Abyste si nemysleli, že jsem konverzi Trailblazeru odepsal, tak musím připojit nějakou tu aktualitu. Provedl jsem asi 14 změn. Ne 14 instrukcí. To by za ty dva měsíce bylo málo. Ale 14 významových změn. Nakonec jsem se vrátil ke kořenům a zvuky z velké části kopírují originál na Commodore Plus/4. To cinkání při ztrátě míče jsem ladil asi dvě odpoledne. Ale snad se to bude líbit. Z nedodělků mi zbývá zrealizovat závěrečnou hudbu a připojit autostarter.

    A taky jsem asi přišel na strategii, jak ty sektory projíždět. Zatím je to však pouze teorie, ověřená jen na prvních dvou sektorech…

Napsat komentář

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