Trailblazer

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

  • datum vydání poslední pracovní verze na PMD-85: 22.8.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 22.8.2017)

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

demonstrace barevného omezení

nový vzhled hry

 

 

 

 

 

9 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..

Napsat komentář

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