Welcome, Guest. Please login or register.


Author Topic: Exorcist (Read 122316 times)

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Exorcist
« on: 2017.October.10. 21:39:44 »
Elkészült a C+4-es Exorcist EP verziója, 1-2 extra került az EP verzióba, és sajnos van egy hátránya is, EP64-en már 3 ellenfél esetén is belassul, 4 esetén a felső sorban 1 sprite villog is.
irányítás:
ext joy 1/2
int joy + space/enter
qaop + space/enter
Stop: kilépés
Hold: szünet (szünet módból Stop billentyűvel lehet visszalépni a játékba)
F1: új sprite kirakási mód
F2: eredeti sprite kirakási mód
F5: örök élet be
F6: örök élet ki.
+
EXO gombok egyszeri lenyomása esetén a végjáték következik.

Ha nem találtok benne hibát, akkor csomagolom, és az lesz a végleges változat.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Exorcist
« Reply #1 on: 2017.October.10. 22:03:31 »
és sajnos van egy hátránya is, EP64-en már 3 ellenfél esetén is belassul, 4 esetén a felső sorban 1 sprite villog is.

Az EP64 lassabb mint a C16, és ott karakteres módban fut a játék, EP-n pedig attribútum módban, így tulajdonképpen jónak mondható a sebesség. A zenén Szipucsu valószínűleg még tudna fejleszteni. :)

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #2 on: 2017.October.10. 22:28:06 »
Az EP64 lassabb mint a C16, és ott karakteres módban fut a játék, EP-n pedig attribútum módban, így tulajdonképpen jónak mondható a sebesség. A zenén Szipucsu valószínűleg még tudna fejleszteni. :)
Igen, ez rendben is van, de engem ez zavar :) Gondolkoztam, hogy megpróbálom a lehető leggyorsabbra írni a törlés/megjelenítés kódot a méret rovására (ciklus törlésével) , és a törlésnél a videó cím számításának áthelyezésével a HALT elé, de ahogy számoltam, még az is kevés lenne.

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 10101
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Exorcist
« Reply #3 on: 2017.October.10. 23:10:10 »
Azt leszámítva, hogy mindig nekem jönnek azok a piszkok, jónak tűnik.
Amit István kiszedett midibe nemrég ebből a játékból, azt kéne tovább szerkeszteni?
Nekem nem tűnt fel lassulás, villogás.

Commodore-ról átírni nem igazán lehet, legfeljebb újraírni. Teljesen az elejéről újraírtad?
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: Exorcist
« Reply #4 on: 2017.October.10. 23:25:29 »
olyan nehéz hogy egyszer tudtam nagy nehezen átjutni a 2. pályára.

amúgy meg kevés a raszter színezés :P
Vigyázat! Szektás vagyok! :)

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #5 on: 2017.October.11. 08:47:11 »
Azt leszámítva, hogy mindig nekem jönnek azok a piszkok, jónak tűnik.
Ezek ilyen szemetek sajnos :D , 2 ellenen még túljutok, 3-on esetleg, na de a 4-en , impossible mission.
Amit István kiszedett midibe nemrég ebből a játékból, azt kéne tovább szerkeszteni?
Simán, a játékban is a regiszter adatok vannak tárolva, ha fejlsesztesz rajta, akkor a midiből is kinyerjük a regiszter értékeket, és módosítom a programban, van még 4KB üresen az 1-es lapon.
Nekem nem tűnt fel lassulás, villogás.
Gondolom nem EP64-en próbáltad :)

Commodore-ról átírni nem igazán lehet, legfeljebb újraírni. Teljesen az elejéről újraírtad?
Teljesen az elejéről kezdtem, de vannak benne olyan kódrészletek, amiket átírtam a Z80 megfelelőjére.

Amúgy van benne még egy cheat f7+f8 egyszerre lenyomva bekapcsolja a sérthetetlenséget, így jutottam el én is kb a 20. pályáig :D
« Last Edit: 2017.October.11. 08:52:04 by geco »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Exorcist
« Reply #6 on: 2017.October.11. 10:06:26 »
Igen, ez rendben is van, de engem ez zavar :) Gondolkoztam, hogy megpróbálom a lehető leggyorsabbra írni a törlés/megjelenítés kódot a méret rovására (ciklus törlésével) , és a törlésnél a videó cím számításának áthelyezésével a HALT elé, de ahogy számoltam, még az is kevés lenne.

A soronként tárolt attribútumokat nem lehetne elkerülni? C16-on csak karakterenként allítható az egyik szín, és így 16 helyett csak 9 byte egy karakter. Bár lehet, hogy a raszter színezés (amit ugyan valószínűleg a paletta valósít meg) miatt van szükség a soronkénti attribútumokra, vagy más okból.

Azt leszámítva, hogy mindig nekem jönnek azok a piszkok, jónak tűnik.

Kár, hogy nem a szellemek gyűjtése a feladat, akkor egész jól menne a játék. :) De a Treasure Cave-ben sem jutottam messzire. :oops:

Simán, a játékban is a regiszter adatok vannak tárolva, ha fejlsesztesz rajta, akkor a midiből is kinyerjük a regiszter értékeket, és módosítom a programban, van még 4KB üresen az 1-es lapon.

Bonyolultabb zenénél talán nehezebb lenne, ha jól látom, a program csak a frekvenciákat tárolja hangjegyenként, mivel az eredeti zene nem igényel ennél többet. A teljes regiszter mentés sokkal több helyet foglalna, vagy tömöríteni kellene, vagy a Xorgame-hez hasonló megoldást alkalmazni (ennek a lejátszójából van assembly változatom is).

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Exorcist
« Reply #7 on: 2017.October.11. 10:35:20 »
Még egy ötlet optimalizálásra, ami nem biztos, hogy jó: ha karakteres szervezésű a grafika, akkor lehet, hogy érdemes lenne valamilyen Spectrumhoz hasonló címzést használni, ahol karakteren belül a sorok közötti távolság 256 byte, például: bal felső sarok = D800h, utána soronként +0100h, majd túlcsordulásnál (40 sor, azaz 5 karakter után) D828h következik, újabb 40 sor, D850h, és így tovább. Karakteres felbontású attribútumok pedig elférhetnek a nem használt területeken, pl. D8D8h..D8FFh = első sor, D9D8h..D9FFh = második sor, stb. Így az animált karaktereknél az ADD HL, DE utasítások helyére egyszerű INC H kerülhet. A sprite megjelenítésnél viszont nehezebb az ilyen címzés, ezért nem biztos, hogy megérné.

Az animált karaktereknél még külön lehetne kezelni azt az esetet, amikor sok található egymás mellett vízszintesen, ilyenkor ugyanazt a pixel byte-ot kell kiírni növekvő címekre.

int joy + space/enter

A space nekem nem működik, csak az enter. :oops:
« Last Edit: 2017.October.11. 10:45:39 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #8 on: 2017.October.11. 10:59:28 »
Még egy ötlet optimalizálásra, ami nem biztos, hogy jó: ha karakteres szervezésű a grafika, akkor lehet, hogy érdemes lenne valamilyen Spectrumhoz hasonló címzést használni, ahol karakteren belül a sorok közötti távolság 256 byte, például: bal felső sarok = D800h, utána soronként +0100h, majd túlcsordulásnál (40 sor, azaz 5 karakter után) D828h következik, újabb 40 sor, D850h, és így tovább. Karakteres felbontású attribútumok pedig elférhetnek a nem használt területeken, pl. D8D8h..D8FFh = első sor, D9D8h..D9FFh = második sor, stb. Így az animált karaktereknél az ADD HL, DE utasítások helyére egyszerű INC H kerülhet. A sprite megjelenítésnél viszont nehezebb az ilyen címzés, ezért nem biztos, hogy megérné.
A grafika karakter szervezésű volt teljes egészében, csak átalakítottam a sprite mozgást, hogy kevesebbet kelljen írni a képernyőre, így játék közben függőlegesen 4 pixeles mozgás van, és 4 sorral kisebb lett a sprite, és a játék legvégén meg pixeles mozgás van felfelé, ilyesmire gondoltam én is, egyszerűbb kivitelben 00h- n kezdődnek a páratlan sorok, és 80h-n a páratlanok, ez viszont marha sok memória, és a sprite rajzolás se lett volna gyorsabb.

Jelenleg 8x1-es attributumokat használok, a szebb függőleges mozgás érdekében, és a villogáshoz is csak a sprite tartózkodási helyének megfelelő LPB-ket módosítom (20 sor)

Az animált karaktereknél még külön lehetne kezelni azt az esetet, amikor sok található egymás mellett vízszintesen, ilyenkor ugyanazt a pixel byte-ot kell kiírni növekvő címekre.
Ez is jó ötlet, ha már az első, és utolsó sor így van kirajzolva, sokat gyorsít sztem, és lehet csak 4 ellen esetén lassulna be az EP64 verzió.

A space nekem nem működik, csak az enter. :oops:
Ha az irány is le van nyomva, akkor nem működik, legalábbis én csak a space-t használtam tesztelés közben :)

Offline Povi

  • EP addict
  • *
  • Posts: 2316
  • Country: hu
    • http://povi.fw.hu
Re: Exorcist
« Reply #9 on: 2017.October.11. 14:49:30 »
Elkészült a C+4-es Exorcist EP verziója
Hogyan készült a konverzió?
Publikus a forráskód? (gondolom 6510 asm)
És azt kézzel átírtad?
Vagy esetleg más módszerrel?
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Exorcist
« Reply #10 on: 2017.October.11. 14:52:35 »
Igen, ez rendben is van, de engem ez zavar

A lassulásnak előnye is van, így legalább kevésbé nehéz a játék. :)

Publikus a forráskód? (gondolom 6510 asm)

Az Exorcist nem tudom, hogyan készült, de én a Skramble esetében gyakorlatilag újraírtam a programot, tehát nem a 6502-es kód konverziója.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Exorcist
« Reply #11 on: 2017.October.11. 15:30:13 »
A sprite rajzoláson sikerült egy keveset gyorsítani (EP64-en 0.865 ms 0.959 helyett), de ez hosszabb az eredeti kódnál:
Code: ZiLOG Z80 Assembler
  1.         org     047eh
  2. drawSprite:
  3.         ld      bc, 40 - 2
  4.         push    ix
  5.         ld      ixl, 20 / 2
  6.         ex      de, hl
  7.         di
  8.         ld      (.l2 + 1), sp
  9.         ld      sp, hl
  10.         ex      de, hl
  11. .l1:    pop     de
  12.         ld      a, e
  13.         or      (hl)
  14.         ld      (hl), a
  15.         inc     hl
  16.         ld      (hl), d
  17.         inc     hl
  18.         pop     de
  19.         ld      a, e
  20.         or      (hl)
  21.         ld      (hl), a
  22.         add     hl, bc
  23.         ld      a, d
  24.         or      (hl)
  25.         ld      (hl), a
  26.         inc     hl
  27.         pop     de
  28.         ld      (hl), e
  29.         inc     hl
  30.         ld      a, d
  31.         or      (hl)
  32.         ld      (hl), a
  33.         add     hl, bc
  34.         dec     ixl
  35.         jr      nz, .l1
  36. .l2:    ld      sp, 0000h               ; *
  37.         ei
  38.         pop     ix
  39.         ret
Az IX mentése és visszaállítása valószínűleg megtakarítható lenne, illetve mivel több sprite rajzolása történik egyszerre, elég lenne csak egyszer elvégezni, és nem mindegyiknél külön. Az SP-t is elég lehetne csak egyszer menteni, de akkor az utolsó sprite rajzolása nem hívható JP utasítással.

Szerk.: úgy látom, az IX nem használt játék közben.

Szerk. 2: a veremmutató használható lenne az ezt követő (LDI utasításokkal másoló) rutinban is a DE-hez 37 hozzáadására, de ez csak ritkán fut.
« Last Edit: 2017.October.11. 15:56:19 by IstvanV »

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #12 on: 2017.October.11. 16:09:16 »
A lassulásnak előnye is van, így legalább kevésbé nehéz a játék. :)
Jogos :D

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #13 on: 2017.October.11. 16:11:27 »
Hogyan készült a konverzió?
Publikus a forráskód? (gondolom 6510 asm)
És azt kézzel átírtad?
Vagy esetleg más módszerrel?
Publikus is lehet, a szokásomhoz híven ronda :D
Vannak részek, amik az eredeti forrás z80-ra való átírásával készültek, és vannak amik nem :), minden manually.

Offline geco

  • EP addict
  • *
  • Posts: 7223
  • Country: hu
    • Támogató Támogató
Re: Exorcist
« Reply #14 on: 2017.October.11. 16:21:19 »
A sprite rajzoláson sikerült egy keveset gyorsítani (EP64-en 0.865 ms 0.959 helyett), de ez hosszabb az eredeti kódnál:

Szerk.: úgy látom, az IX nem használt játék közben.
Ez nagyon jó, 10%-os gyorsulás, a kód hossza nem számít, én azon gondolkoztam, hogy megszüntetem a a ciklust, úgy sokkal hosszabb lenne ;)
Úgy emlékszem, hogy hébe-hóba használom azt is, de megnézem, és ha kell át tudom sztem tenni IY-ra.

Szerk. 2: a veremmutató használható lenne az ezt követő (LDI utasításokkal másoló) rutinban is a DE-hez 37 hozzáadására, de ez csak ritkán fut.
Ez egy zseniális ötlet, az SP-t 0025h-ra állítani a kezdés előtt, és
Code: [Select]
   ex de,hl
   add hl,sp
   ex de,hl

utasításokkal operálni?

F2 lenyomása utáni megjelenítés is iylet használ, ez is sokat gyorsítana, itt az BC használatán gondolkoztam, csak ott mindig be kellett volna táplálni a C-be a 0025h-t, és akkor a ciklusváltozót kellett volna lecserélni, ezért eldobtam, és akkor jött elő ez az ötletem újra, amikor azon gondolkoztam, hogy ciklus nélkül, marha hosszú kóddal rajzolok sprite-ot.