Enterprise Forever

:HUN => Játékok => Topic started by: Tomato77 on 2018.May.18. 21:24:45

Title: Banana
Post by: Tomato77 on 2018.May.18. 21:24:45
Elkészültem egy kukacos bug-gyűjteménnyel. :) Benne van minden: pályák, banánok és némi dallam is, amit a lányom talált ki. István segítségével most már lehet úgy fordítani, hogy 16K-nál nagyobb legyen a program, de addig sok minden ki lett belőle nyesve, pl. a memóriafoglalás is kultúráltabb volt, de a szegmenseknek szánt tömb elhagyásával sikerült kb. 200 bájtot nyerni.

Még biztos lesz javítás, főleg, ha lehet 32K-ig nyújtózkodni, és két személynél gyorsítani is kellene, de azért játszható. Annyiban más ez, mint a többi worms, hogy itt nem csak négy irányban lehet menni, hanem jobbra-balra kell kanyarodni. Meg hát itt vannak minyonok... :) Az utolsó pályánál direkt növekszik a kukac a végtelenségig, ez nehezítés. :) Van két csalás: "E" a főmenüben örök életet ad, "N" a játék alatt átvisz a következő pályára.
Title: Re: Banana
Post by: endi on 2018.May.18. 21:35:15
hú ez nagyon jó lett. szép a graf, szépek a színek, és jól irányítható!
elsőre 5. pályáig jutottam
Title: Re: Banana
Post by: Tomato77 on 2018.May.18. 21:50:57
Köszönöm! Akkor ezek szerint máshol is rendben elindul. :)
Title: Re: Banana
Post by: szipucsu on 2018.May.18. 21:56:53
Tényleg nagyon jó lett! Szép színes! Néhány pályát végigvittem. Nem semmi, hogy ilyen is van már EP-ra!
Én talán a kukacnak és a banánnak eltérő színeket állítanék be, de amúgy az egész grafika úgy jó, ahogy van!
Hangeffektekből még lehetne elég sokat beletenni, pl. kanyarodás hangja, lépéseknek is lehetne hangja, és mindig arról az oldalról szólna, ahol vagyunk a képernyőn. A zenét lehetne még kicsit fejleszteni, hogy ne csak egy csatornán szóljon, hanem pl. egy oktávval magasabban is ugyanaz, esetleg majdnem ugyanazon a hangon egy másik csatornán, és gyűrűmodulációval összekötni. De ennek a hangzásnak is jó a hangulata. Meg a zajcsatornán szólhatna még dob a zene alatt.
Title: Re: Banana
Post by: geco on 2018.May.18. 22:09:25
Tetszik a snake új koncepció, nagyon jó szép a menü grafikája, nagyon tetszenek az animok alatta, és a játék is jó :)
Title: Re: Banana
Post by: Tomato77 on 2018.May.18. 22:14:06
Hangeffektekből még lehetne elég sokat beletenni

Azért nincs több hang, mert nagyon össze kellett nyomni a programot a 16K-s határ miatt, amit aztán István segítségével mégis sikerült átlépni... A dallamot a lánykám találta ki és megígértem neki, hogy belekerül a programba, meg tegnap sikerült először megszólaltatni a Dave chipet, úgyhogy most ennek is nagyon örülök. :) Envelope-ot se akartam beletenni a spórolás miatt, de anélkül összefolytak az azonos magasságú hangok, így muszáj volt. Azt még lehet, hogy beleteszem, hogy ütközésnél legyen valami hang.

Próbáltam dobot a zajcsatornával, de SYNC-et nem értem. 1-et állítottam be, hogy várjon egy hangra egy másik csatornán, de ehelyett a másik hanggal szólt együtt. Azt még meg kell értenem.

A kukacok színe adott a jó minyon és a rossz minyom miatt. Esetleg a banán lehetne barna, rohadt banán. :D
Title: Re: Banana
Post by: szipucsu on 2018.May.18. 22:34:23
Egyszerre ketten is lehet játszani! Akkor majd jövő szombaton a klubban (azt hiszem, akkor lesz) jó kis mérkőzéseket lehetne nyomni.
A menüben a 6. pont talán nem kell (quit). Ott van helyette a reset.
Title: Re: Banana
Post by: Tuby128 on 2018.May.18. 22:38:11
Szeretnék érdeklődni kedves Készítő, hogy
-milyen programnyelven készült?
-mennyi idő kellett hozzá?
-mennyit/mit segített pontosan a kislány, aki mennyi idős? (nekem is van egy 4 hónaposom, és már alig várom, hogy beálljon programozni)
-ez az első programja a kedves Készítőnek?
Title: Re: Banana
Post by: Tomato77 on 2018.May.18. 23:01:25
Lesz topiktali?

Egyszerre ketten is lehet játszani!
A két személyes játékhoz kell külső joy, mert a billentyűzet kezelés nem tökéletes. Az "a" és "s" akad, ha a belső joy is használva van, mert mindig a legutolsó karaktert észleli. Régen csináltam PC-n, hogy átírtam a billentyűzet megszakítás rutin címét sajátra. Itt is valami ilyesmi kellene, de ennek még nem olvastam utána.
Title: Re: Banana
Post by: szipucsu on 2018.May.18. 23:17:48
Lesz topiktali?
Azt nem hiszem, de az EP klub 26-án lesz szombaton, ott is lehet játszani új játékokkal.

Engem is érdekelne, a zenét a játékhoz hogyan találtátok ki. Szintetizátorral? Vagy a kislány énekelte, te meg lejegyezted?
Title: Re: Banana
Post by: Tomato77 on 2018.May.18. 23:25:03
nekem is van egy 4 hónaposom, és már alig várom, hogy beálljon programozni

Gratulálok a négy hónapos leányzóhoz! :) Az én lánykám 7 éves. Látja, hogy az apja kockul az Enterprise-szal, és tetszik neki a dolog. Ha programozni szeretne (amit ráerőltetni nem akarok), annak örülnék. Talán ezek a játékok kedvet csinálnak neki. Az ő segítsége a dallam kitalálása volt, a pályák megrajzolásában segített, miatta mosolyog a rózsaszín kukac is, mert eredetileg szomorú feje volt :), és ötleteket adott, pl. hogy legyen egyszerre több felvehető banán, meg ne azonnal tegye ki a következő banánt. Meg az egész minyon témát is ő találta ki.

A program eredetileg HiSoft Pascalban kezdődött, de az már a menü készítésénél kevésnek bizonyult. Először a Compile akadt ki, aztán a Translate is sokallta a kódot, hiába állítgattam az Alter paranccsal a dolgokat. Az assembly-ben gondolkodtam, de ahhoz hülye vagyok, de aztán a márciusi EP-Spectrum topiktalin Csaba mondta, hogy lehet PC-n C programot fordítani Enterprise-ra. Átírtam a meglévő kódot (még megvan a maradék Pascal is), aztán kb. egy hónapot vacakoltam vele, mire elindult és lett végre kép. :) Notepadban írom a forrást, majd Z88DK-val lefordítom. Hihetetlenül gyorsan lehet így programozni, egy-egy hiba hamar kiderül és gyorsan újra lehet fordítani a javítást.

Mennyi idő? Talán olyan 5-6 hónap, este, munka után, amikor volt rá alkalom. A képeket az EP128pal-lal konvertáltam, és azért volt akkoriban annyi javítás ahhoz a programhoz, mert jöttek elő a hibák. Most meg azért nincs fejlesztve, mert a Banana-t csináltam. De ha az EP128pal-t is beleszámítom, mert tulajdonképp ehhez készült, akkor kb. tavaly szeptember óta tart.

Régebben írkáltam Basic programokat egy magnós Enterprise-on, de nem maradtak meg és elég bénák voltak. Így ez az első igazi, Enterprise-ra írt programom. Már van két másik ötlet, szintén a gyerektől. :) Azok talán gyorsabban elkészülnek, mert egy csomó rutint fel lehet újra használni. Rengeteg idő elment az Enterprise megismerésével, aminek nagyon örülök, mert egy csodálatos kis masina.
Title: Re: Banana
Post by: Tomato77 on 2018.May.18. 23:27:38
Engem is érdekelne, a zenét a játékhoz hogyan találtátok ki. Szintetizátorral? Vagy a kislány énekelte, te meg lejegyezted?

Kapott Karácsonyra egy teszkós szintetizátort és azt nyomogatja. :) Már dalokat is visszajátszik, de saját dallamokat is kitalál.
Title: Re: Banana
Post by: SlashNet on 2018.May.18. 23:43:51
Nice game! :)
Title: Re: Banana
Post by: Tuby128 on 2018.May.18. 23:46:28
Hát ez fantasztikusan hangzik. Szerintem az apa-lánya / apa-fia közös munka a legjobb. Már nagyon várom.
 Sajnos az én apukám 25 évvel ezelőtt nem nagyon vett bele a progamozásba, magának írogatott segítő basic progikat, de nem dolgoztunk együtt. Egyedül csinálgattam a kis programjaimat 7 évesen. Akkor hívtam csak át a szobámba, ha már elkészültem, hogy megnézze, de csak rápillantott aztán visszament dolgára, TV-zni. Azokat a gyerekeket, akik társaságra vágynak, eféle apai viselkedés kiölheti a gyerekből a programozást, de szerencsére én egy olyan gyerek voltam, aki elvolt elszigetelve az EP-jével, nem kellett megveregetni a vállam, mert tudtam, hogy jó vagyok. :) A suliban az osztályban senki nem tudott programozni, tehát nagyon nem is lehetett róla beszélni. A sok könyv segített egyébként. Volt a játékos Hetedhét Enterprise, vagy a komolyabb Enterprise Tippek Trükkök, ami televolt jó Basic példaprogrammal.
 Nagyon fontos volt, hogy ha megúntam a programozást, akkor elmentettem az addigi dolgot kazira, majd betöltöttem a kedvenc játékaimat és azokkal játszottam. Gyerekként imádtam a Joystick kattogását. Már alig várom, hogy a lányom elérje azt a kort, amikor már megfogja a Joystick-ot együtt Sorcery-zhetünk.

 Na de visszatérve, annyi szeretnék még megtudni, hogy akkor a '88 után 90-es években neked volt EP-d? Ha igen, azóta megvan? Ha nem akkor mikor találkoztál vele?
Title: Re: Banana
Post by: Tomato77 on 2018.May.19. 00:23:29
7 évesen programoztál? Azta... nem semmi! Nekem később kezdődött, kb. ötödikes-hatodikos lehettem olyan '89-90 tájékán, amikor apuék anyagi erejükön felül megvették az Enterprise-t. Szerettem a játékokat, a Grid Trouble volt az első, aztán hamar elkezdett érdekelni a programozás. Szerintem ezzel sokan vagyunk így, akik EP-vel kezdték, valahogy ingerli az embert a programozásra az a jó Basic, ami benne van.

Az a gép már nincs meg, XT lett belőle, de pár évvel később lett egy másik EP, az megvan. Igazából a C64 miatt kezdtem el újra EP-zni. :) 5-10 ezer forintért vannak eladó Commodore-ok, és másfél éve elhatároztam, hogy veszek egyet végre, mert sose volt olyanom. Vidékről hozták, és pár napot várni kellett rá, addig meg türelmetlenségemben elővettem az Enterprise-t.
Title: Re: Banana
Post by: Tuby128 on 2018.May.19. 01:08:38
Basic-ben programozni nem volt nagy ördöngősség alsó tagozatban a gyerek kíváncsi!
 Egyébként a könyvekből, újságból való programsorok begépelése (mert ugye kíváncsi a gyerek, hogy mi lesz belőle) nagyon fontos volt ahhoz, hogy begyakoroljam a nyomkodás művészetét. Aztán kíváncsiságból változtatgat az embergyerek dolgokon, és megnézi, hogy start után mit okoz.(általában hibaüzenetet) Végül az innen onnan vett ötletekből megszületik a saját program.

Nagyon szerettem pl. a SET CHARACTER parancsot, mert a bombázó játékban megtervezett karaktereket aztán számmá konvertálta, ami arra volt jó pl. hogy a helikopterből kacsát, a bombából meg tojásokat csináljunk. Azt hiszem ez egy tök jó dolog volt, mert apám találta ki, én megrajzoltam a rácsban, ő meg aztán segített, hogy a kapott kódokat beírta a BASIC programba, aztán játszottunk egyet együtt. Nem sok ilyen volt, de ilyen is volt. 

 A mai kezdő programozók készen kapják a kódokat, mert elég egy CTRL+c és CTRL+v és már ott is van az editorban. Régen rá voltunk kényszerítve a pötyögésre, az IS-BASIC még csak a vágólapot sem ismerte, ezért aki tényleg elszánt volt, a folyton ismétlődő begépeléssel megtanult gyorsabban írni.
 Nagyon jól emlékszem, hogy apámtól azt tanultam el, hogy felemelem a két mancsomat a billentyű fölé, aztán két újjal pötyögök. Mivel keresem a betűket, és a kezem útban van a szememnek, egy pillanatra eltávolítom a két kezem egymástól, majd ha megtaláltam megnyomom a gombot. Nagyon vicces visszagondolni rá hogy 16 éves koromig így pötyögtem. Apám a mai napig nem találja a betűket :) de ő fizikai munkás, nem ebből élt sosem.

 A commodore-ral kapcsolatban nekem annyi élményem van alsós 4. osztályból, hogy egy-két szakkör órán voltunk, a teremben C16, C-plus4 és C64 gépek. Nagyon kényelmetlen volt nekem a billenytűzet, nem találtam a funkcióbillentyűket és hiányoztak a begyakorolt modulatok a program listázására, indítására, nem értettem hogyan működik az a gép, és ami a legrosszabb, hogy a katódsugárcsöves TV-n minden fehér volt. Nagyon bántották a szememet a torz karakterek. (csak egy magnó volt, a többi gép a-la-nature)
 Mivel hogy nem volt hozzá irodalom, és a tanár úgyis csak azt mondta el, mutatta meg, ami az EP könyveiben megvoltak, én nem eröltettem a szakkört. Később 8.-ban már a kötelező számtech órákon az új számtech teremben 386, 486 gépekkel tanultunk, amin volt Windows, és azt mutatták meg (helyesen, mert a jövőt az iskolában kell megmutatni), hogy hogyan működik a grafikus oprendszer, hogyan másolunk fájlokat. De programozni nem lehetett (nem volt hozzá könyv), így nem érdekelt a PC.

 Abban igazat adok, hogy ingerli az embert az üresség, amivel az EP kezd újraindítás után, hogy írjon valamit. A fekete háttér is arra sarkall, hogy ha színeket akarunk, akkor írjunk programot.
 Hosszú napokat töltöttem gépeléssel anno és azt kell, hogy mondjam a fekete alapon zöld betű a legpihentetőbb dolog a szemnek. Pláne 40 karakter per sor módban, egy gyereknek nagyon "játékos" a dolog, mert könnyebb olvasni. Más kérdés, hogy a TV antennabemenetének zajossága miatt nem lehetett 80 karakteres módba váltani.

 Ráadásul az EP billentyűhangja a legjobb dolog a világon. Ilyet a commodore nem tud.

 Egy dologot tavaly derítettem ki egy Commodore-os Retro újságból, ami a vállalat történetét meséli el. Mégpedig, hogy a plus-4, amit anno lenéztem mert a kurzora idétlen nyilak voltak, picike volt, és ugyanolyan idegen volt, mint a többi Commodore. Szóval azért nevezték el plus-4-nek, mert a ROM-ja tartalmazza a négy legfontosabb szuper applikációt:
- szövegszerkesztő
- táblázatkezelő
- adatbázis kezelés
- BASIC programozás(?)

 Mindezekért nem kellett külön szoftvereket vásárolni, indításkor sem kellett külön betölteni. A szerzők is nagyon büszkék voltak a gépre, és így felnőtt fejjel már én is nagyra tartom azt a gépet, főleg mikor kiderült, hogy az is 64K-s. (de még idétlennek tartom a billentyűzetét) 
Title: Re: Banana
Post by: Dr.OG on 2018.May.19. 05:52:53
Csak a pontosság kedvéért: a Plus4 beépített programjai: szövegszerkesztő (kemény 99 sorral tud megbirkózni), adatbázis-kezelő, táblázatkezelő, és egy primitív rajzolóprogram, ami az utóbbit egészíti ki, pl. blokkdiagramokat lehet vele készíteni.

Nem akarok Commodore-Enterprise vitát generálni, csak néhány dolog, ami így hirtelen eszembe jut a Plus4-ről:

1. Elég nagy bukás volt nyugaton, nem véletlenül terjedt el nálunk (hasonlóan, mint az EP128): Később adták ki, mint a C64-et, és bizonyos szempontokból többet is tudott (pl. BASIC 3.5 vs 2.0, 121 szín vs 16, logikusan elrendezett kurzormozgató billentyűk), de egyrészt nem volt azzal hardveresen kompatibilis (pl. költségcsökkentés miatt a hang generálásáért felelős SID és a videot előállító VIC csipeket összevonták egy TED-be, a perifériák csatlakozóit [joystick, magnó/datasette] mini-DIN-re cserélték a korábbi szabvány helyett, így átalakítókat kellett még pluszban venni a gép mellé, mert geometriailag nem passzolt az elterjedt standarddal, hiába volt elektronikusan azonos), másrészt rosszul pozícionálták, elsősorban üzleti célra szánták, amire, valljuk be, alkalmatlan volt. Ráadásul emiatt sok hasznos feature hiányzik belőle, pl. nincs hardveres sprite támogatás! Azt azért leszögezném, hogy a 8-bites Commodore termékek gumiharangos billentyűzete MECHANIKAI SZEMPONTBÓL még most is klasszisokkal veri az összes fóliás megoldást, beleértve az EP-t is. Gyakorlatilag elnyűhetetlen, egy örök élet! Ha sokat használod, legfeljebb kicsit kopogóssá válik, de ez minden! Ha nehezebben veszi be valamelyik billentyűt, akkor meg elég megpucolni a gumiharang alatti érintkezőt pl. alkohollal. Ha a gumiharang elöregszik (ilyet még nem láttam, de elvileg nem kizárt), akkor pedig egyesével cserélhető!

2. Szoftver vonalon ugyanaz a helyzet, mint az EP128-nál: nagyon kevés hivatalos release, a programok (főleg játékok) többségét úgy portolták lelkes amatőrök C64-es eredetikről (csakúgy, mint az EP esetén a rengeteg Spectrum és CPC átirat).

3. Éppen a 2. pont miatt sok embert inspirált önálló programozásra a gép: viszonylag fejlett BASIC interpreter, az iskolaszámítógép-program keretein belül pedig sok oktatási intézménybe eljutott, emiatt könnyen hozzáférhető volt.

4. Az én személyes sikerem/tragédiám, hogy nekem C128-am volt/van, hiába a BASIC 7.0, elsősorban játszottam rajta C64 kompatibilis üzemmódban, könnyű volt rá programot szerezni (másolni), szóval nem volt, ami önálló programok megírására motivált volna. Persze gyerekként én is pötyögtem be jópár listát újságokból, de ezek jelentős része nem működött (valószínűleg elütés miatt, vagy mert a korabeli nyomdatechnika nem tudta igazán megbízhatóan reprodukálni a mátrixprinterrel kinyomtatott programlistákat), úgyhogy számomra ez is inkább frusztrációt jelentett.

5. A gyermekkel együtt programozni/játszani óriási élmény, a mai játékokhoz képest (3D-s környezet) ezen régi programok egyszerűsége üdítő változatosságot jelent, és persze megérteni, hogy néhány karakter megváltoztatásával teljesen más lesz a végeredmény. Én erre 2 C64-es BASIC programot használtam, az első egy rövid kis labirintusgeneráló program:

10 PRINT CHR$(205.5+RND(1));:GOTO 10

Eredménye:
https://www.youtube.com/watch?v=m9joBLOZVEo

A másik pedig egy teljesen BASIC-ben írt, karaktergrafikás túlélőjáték, a Sziget (online is kipróbálható az alábbi oldalon):

http://c64.krissz.hu/sziget/

Mindenkinek kellemes hét végét: Gábor
Title: Re: Banana
Post by: Tuby128 on 2018.May.19. 11:35:19
Köszönöm, hogy ezt leírtad. Jó volt olvasni.
Title: Re: Banana
Post by: Tuby128 on 2018.May.19. 12:00:47
Visszatérve a Banana jatékra, kedves Tomato, ha a következő játékot készíted, akkor gondolj arra, hogy az izometrikus játékok, mint a
-Batman
https://www.youtube.com/watch?v=B4EQrZSQJEg
- Head over heels
https://www.youtube.com/watch?v=eJOUZoluAfA
-Knight Lore
https://www.youtube.com/watch?v=roeGHMNyHng
- Get dexter

- Itt mégtöbb ilyen spectrum játék van:
https://www.youtube.com/watch?v=Bgpu6sPOfP4

Nagyon kellemes, térlátást fejlesztő játékok. Szerintem a legizgalmasabbak ezek voltak.
Ami nagyon fontos:
- Tárgyakat lehessen felvenni, amiket aztán használhatunk ajtónyitásra, vagy feladatmegoldásra
- Egyszerre több tárgy lehessen nálunk, de ne végtelen mint a Vendetta nevű játékban
- Kövessen az ellenség, de néha gondolja meg magát, hogy el is lehessen menekülni
- Nagyon szerettem azt a lehetőséget, amikor egy tereptárgyat, pl asztalt, ágyat el lehetett tolni vagy húzni, hogy felvegyem a kincset.
- Ami hiányzott a 8 bites világból, hogy lehessen megtalált könyvet olvasni, mint a későbbi pc-re írt Alone-in-the-dark-ban
- A kameranézet minden szobában fix, nagyobb tér esetén a batman-ban csináltak egy nagyon jó dolgot az átláthatósághoz mely itt látható:
https://youtu.be/4teEpK37tAg?t=599

Alapvetően nem bonyolult a grafikát megcsinálni, mert a karakter szobai pozíciójától függetlenül, a mérete mindig ugyanaz, ettől izometrikus. Minden karakter 4 irányban állhat, a járását így 4x kell lemodellezni. A mozgó tereptárgyak nem forognak, az ellenség igen.
 Ami gyerekként nagyon aranyos volt, az a batman-ban a hamizó, mert nem követett, és így aranyos volt:
https://youtu.be/4teEpK37tAg?t=348
 De a "krampuszok" is édesek voltak, aki mindig csak ugyanarra mozgott, függetlenül hogy ott vagyok-e:
https://youtu.be/4teEpK37tAg?t=360


 
Title: Re: Banana
Post by: endi on 2018.May.19. 12:19:45
azért annyit megjegyeznék, hogy a batman és hasonló játékok a korabeli programozás csúcsai voltak, de a batman még grafikailag is. sőt, még mai is csúcsnak tekinthető grafikailag :)
Title: Re: Banana
Post by: endi on 2018.May.19. 14:17:59
zene: esetleg szipucsu kidolgozhatná a kislányod zenéjét. szerintem tökre örülne neki (szipucsu is meg a kislány is).
több szólam, szuper hangzások... (bár ha jól értem esc szekvencia, szóval szipucsu maximum basic-ben tudná továbbfejleszteni, bár úgy is jók szoktak sikerülni.)
:)

egyébként nagyon ritka az olyan játék ahol esc szekvenciák a zene (még azok is amikben az exos sound eszköze, ezek szinte csak basic programok).
én egy esc szekvenciás játékot ismerek, a dizzy lord, amibe én raktam bele :)
Title: Re: Banana
Post by: endi on 2018.May.19. 14:27:46
a random music generátor programommal lehet effekteket is generálni, ha a dal mérete rövid.
a mellékelt snapshotban beállítottam mindent, enter lejátsza, jobb-balra pedig másik random seed-et állít be.

esc szekvenciákba ki lehet exportálni, bár annyit megjegyeznék, hogy ilyenkor az envelope generálást külön lementi, szóval hangeffektek esetén ez már nem biztos hogy jó... (másik hangeffekt esetén ugyanis más envelope-okat generál).
Title: Re: Banana
Post by: Tuby128 on 2018.May.19. 14:28:33
azért annyit megjegyeznék, hogy a batman és hasonló játékok a korabeli programozás csúcsai voltak, de a batman még grafikailag is. sőt, még mai is csúcsnak tekinthető grafikailag :)
C-ben nem nagy dolog megírni egy játékot. Tomato-nak pedig megvan hozzá az eszköztárja.
 A kérdés az, hogy milyen techikát érdemes használni a figura mozgatására? Hogyan távolítjuk el a figura előző fázisát, és hogyan rajzoljuk újra úgy, hogy mindebből a felhasználó nem vesz észre semmit?
 A teljes képernyőt nem tudjuk váltogatni, mert annyi videomemória nincs.
Title: Re: Banana
Post by: szipucsu on 2018.May.19. 14:42:56
zene: esetleg szipucsu kidolgozhatná a kislányod zenéjét.
több szólam, szuper hangzások... (bár ha jól értem esc szekvencia, szóval szipucsu maximum basic-ben tudná továbbfejleszteni, bár úgy is jók szoktak sikerülni.)
Basic-ben inkább csak max 2 szólam + egy dobszólam lenne, a sebesség miatt is, és ott nem lehet olyan szabadon mozogni, mint a midiben. (Pl. csak egyszerre szólalhatnak meg új hangok és olyan nincs, hogy amíg egyik hang szól az egyik csatornán, addig a másik csatornán is megszólal valami, kivéve persze, ha nincs envelope, mert akkor egybefolynak a hangok.)
Én arra gondoltam, midivel továbbfejlesztem a zenét, és nem tudom, István lejátszóját vagy annak valamilyen lebutított változatát be lehetne-e építeni a játékba.
Na, de egyszer írtam valami midiből basicbe konvertáló izét, azzal menne a 2 szólam + dobszólam szerintem! De akkor semmiképpen nem lehet István lejátszójával valami nem annyira összetett midiből konvertált zenét betenni? Mert érdemes lenne, legfeljebb nem teszek bele túl bonyolult dolgokat, pl. torzítások, 50Hz-es pirtyegés.

Azt nem tudom, a kislány nem sértődne-e meg, ha átírnánk a zenéjét. :D
Title: Re: Banana
Post by: Tuby128 on 2018.May.19. 14:46:32
Szeritnem megsértődne. Így kell rajongani érte!
Title: Re: Banana
Post by: endi on 2018.May.19. 14:50:25
nem átírásra, hanem továbbfejlesztésre gondoltam :)
minden ami most benne van, az megmaradna, csak kiegészülne más szólamokkal :)
Title: Re: Banana
Post by: szipucsu on 2018.May.19. 14:57:40
minden ami most benne van, az megmaradna, csak kiegészülne más szólamokkal :)
Én is erre gondoltam. majd megvárjuk, Tomato mit mond.
Title: Re: Banana
Post by: endi on 2018.May.19. 15:38:46
Én is erre gondoltam. majd megvárjuk, Tomato mit mond.

lehet, hogy elindítaná a zenei pályán, ha hallaná, hogy mit lehet kihozni az alapból :)
Title: Re: Banana
Post by: szipucsu on 2018.May.19. 15:50:01
lehet, hogy elindítaná a zenei pályán, ha hallaná, hogy mit lehet kihozni az alapból :)
Szerintem már elindult a zenei pályán, legalábbis az alapján, amiket Tomato írt róla. Persze folytathatom a zenét, legfeljebb nem mutatjuk meg neki, ha az apa úgy dönt. :D A zenei pálya állítólag nem jó amúgy, sokféle okból, de hobbinak jó. Csak hogy még több OFF legyen. De Endi, amúgy te is folytathatnád a zenét, érdekes lehet ilyeneket is összehasonlítani, ki mit hoz ki belőle.
Title: Re: Banana
Post by: Tomato77 on 2018.May.19. 19:15:23
Azt nem tudom, a kislány nem sértődne-e meg, ha átírnánk a zenéjét. :D

Rákérdeztem. Reakció: csücsörítés, karok összefonása a mellkason, majd közölte, hogy akkor soha többé nem játszik vele. :) Annyit még bele fogok tenni, hogy ütközéskor legyen valami gúnyos nevetés-szerű hang, meg gyorsítani szeretném.

Az utolsó pálya végigjátszható kis szerencsével. Kívülről kell befelé elfogyasztani a képernyőt, akkor valószínűleg bentre teszi a banánokat és össze lehet őket szedni.
Title: Re: Banana
Post by: SlashNet on 2018.May.19. 19:26:58
Small one-handed and two-handed video gameplay:
https://youtu.be/DsvuVHIMsac
Title: Re: Banana
Post by: Tomato77 on 2018.May.19. 19:34:35
egyébként nagyon ritka az olyan játék ahol esc szekvenciák a zene

Hogyan lehet máshogy zenét csinálni? Az EXOS leírás így mutatja, és a Z88DK saját rutinjai is esc szekvenciákat küldenek a SOUND: csatornára. Te hogy csinálod?

Egyébként szándékosan elkerültem minden előre megírt rutint, hogy minél rövidebb legyen a program, ne legyen semmi felesleges belefordítva. Nincs benne #include sor. Pl. csak a printf és az stdio.h kb. 1 KB-tal növelte volna a méretet.
Title: Re: Banana
Post by: Tomato77 on 2018.May.19. 19:40:02
https://youtu.be/DsvuVHIMsac

Banana on the youtube? Whooah! :) Thanks, you've created very nice preview screen.
Title: Re: Banana
Post by: SlashNet on 2018.May.19. 19:52:07
you've created very nice preview screen.
I think, I've grabbed same frame from cartoon which used in the game. :)
Title: Re: Banana
Post by: szipucsu on 2018.May.19. 19:58:58
A Written in 2018 végére nem kell pont, az angolban nem tesznek, vessző lehet helyette, utána jön, hogy Budapest.
Title: Re: Banana
Post by: Tomato77 on 2018.May.19. 20:06:41
A Written in 2018 végére nem kell pont

Köszi, ezt kijavítom.
Title: Re: Banana
Post by: IstvanV on 2018.May.19. 20:31:44
Hogyan lehet máshogy zenét csinálni?

Saját lejátszóval, közvetlenül a DAVE hanggenerátorait programozva. Természetesen a SOUND: használata egyszerűbb.

Quote
Egyébként szándékosan elkerültem minden előre megírt rutint, hogy minél rövidebb legyen a program, ne legyen semmi felesleges belefordítva. Nincs benne #include sor. Pl. csak a printf és az stdio.h kb. 1 KB-tal növelte volna a méretet.

Ha a program egyébként is kerüli a C runtime használatát, akkor lehet, hogy megérné SDCC-t használni. De ehhez át kellene alakítani az asm rutinokat (az EXOS hívások használatára találhatók példák a midiplay (https://enterpriseforever.com/sound/midi/msg69270/#msg69270) forráskódjában). Illetve a Poke, Peek és Out valójában nem igényel asm-et, ezeket mutatókkal is meg lehet oldani.
Title: Re: Banana
Post by: Tuby128 on 2018.May.20. 00:09:12
Üdv Urak!

 Szerintem a kislány úgy gondolja (véleményem szerint helyesen), hogy az ő játékához mások ne nyúljanak! "Azt apa csinálta velem, ezt nem kell módosítani!"
 A zenét egy másik programban viszont engedik felhasználni, ha esetleg valakinek kell. Igazam van Tomato?

 Én a videót néztem meg róla, és nagyon sok gratulációm!
 Külön kiemelném, hogy a kukac nem csak X és Y irányban, hanem fokokban is képes fordulni, ez dicséretes!!!
 Egy megjegyzés, hogy szerény véleményem szerint az egyáltalán nem izgalmas, ha a banán felvétele után egy darabig nincs banán. Ez sajnos oda vezet, hogy az ember szervezési képességét (útvonal minimalizálás) nem fejleszti. Én azt javaslom, hogy egyszerre ha lehet minél több banán legyen.
 Továbbá a Nokiás Snake II-ben volt, hogy a normál hami mellett bogarak jelentek meg 10-15 másodpercre, amiket felvéve extra pontokat kaphatunk.
 Sőt bevezethető lenne a kukacból levágás, ha valami ügyes (akár lassan mozgó) objektumot elkap a kukac. Ez akkor izgalmas, ha ketten játszák.
Title: Re: Banana
Post by: Tuby128 on 2018.May.20. 00:13:11
Még egy dolog, a főképernyőn, ha lemegy a zene egyszer, akkor nem lehetne egy oktávval feljebb ismételni, majd újra visszatérni?
Title: Re: Banana
Post by: Tomato77 on 2018.May.20. 00:32:39
A zenét egy másik programban viszont engedik felhasználni, ha esetleg valakinek kell.

Persze, a program bármely része szabadon használható, azért van a forráskód is feltöltve. Nagyon sok információt innen, a fórumról kaptam, és hátha más is talál benne hasznos infót. Igyekeztem a kódot kommentelni, hogy érthető legyen.

Az ötleteid nagyon jók. Ha tényleg lehet 32K-ig terjeszkedni, akkor lehet extrásítani. Bár már a második rész jár a fejemben. :) De pár javítás már össze van gyűjtve, azok belekerülnek még.
Title: Re: Banana
Post by: IstvanV on 2018.May.20. 15:42:24
Sikerült lefordítani SDCC-vel:
[attachurl=1]
Title: Re: Banana
Post by: szipucsu on 2018.May.20. 16:43:22
Sikerült lefordítani SDCC-vel:
Kicsit azért gyorsabb lett, ez főleg a két játékos üzemmódban érdekes. Brutális kétjátékos mérkőzéseket lehetne ezzel vívni szombaton a klubban.
Két játékos módban ki nyer? Aki több banánt evett meg, vagy akinek nem fogytak el az életei?
Title: Re: Banana
Post by: Tomato77 on 2018.May.20. 17:52:32
Két játékos módban ki nyer? Aki több banánt evett meg, vagy akinek nem fogytak el az életei?

Akinek előbb elfogy az élete, az veszít. Ha sikerül végig vinni, akkor a pontszám dönt. Itt is van egy bug, mert a pontszám egy bájtos, és csalással túl tud csordulni, ez javítva lesz. Meg az SDCC-t is megnézem.
Title: Re: Banana
Post by: endi on 2018.May.20. 18:14:04
Sikerült lefordítani SDCC-vel:
(Attachment Link)

ez így nagyon gyors, nagyon nehéz.
nincs időzítve?
Title: Re: Banana
Post by: IstvanV on 2018.May.20. 18:15:47
Ha használható valamire, ez az SDCC-re módosított forrás (az asm-eken kívül csak pár sort változtattam a figyelmeztetések miatt, de a fordítás bonyolultabb, mint a z88dk esetében):
[attachurl=1]

A fordító verziója 20170720-9960 volt, ezt ugyan már nem találom, de itt (https://sourceforge.net/projects/sdcc/files/snapshot_builds/x86_64-w64-mingw32-setup/) van újabb verzió.

nincs időzítve?

Gyorsabb gépen vagy jobban optimalizált fordítással gyorsul a játék is.
Title: Re: Banana
Post by: Tomato77 on 2018.May.21. 00:03:55
Hát ez valóban sokkal gyorsabb, és a .COM is rövidebb lett. Sokat számít, hogy mivel fordítják. Megpróbáltam az SDCC-t feltenni Win 7 alá, de nem sikerült, valami platform baja van. Itt fel is adtam, a nehezebb fordítás meg ez elrettentett. :)
Title: Re: Banana
Post by: IstvanV on 2018.May.21. 08:40:52
Ez működik, bár kevésbé optimalizált, mint a csak SDCC-vel készült változat:

zcc +enterprise -create-app -compiler sdcc Banana.c

[attachurl=1]
Title: Re: Banana
Post by: Tomato77 on 2018.May.21. 09:50:40
Tyű, ez is marha gyors, és így is rövidebb a program, kb. az eredeti és az SDCC között van a mérete. :) Jóval tovább fordít, először azt hittem, hogy meg is fagyott. Viszont így vannak a kódban olyan részek, amiket nem értek. Pl. az assembly-ben megírt függvényekben mindig fel kell sorolni a paramétereket újra (void)-ként is? A __z88dk_callee és a __naked mit csinál? A véletlenszámot adó függvényben van egy ilyen: "00001$:\n", ez micsoda? Meg ha jól látom, a "defb" helyett ".byte" van.

Ha ennyivel gyorsabb tud lenni és lehet hosszabb a program, akkor pár dolog még belefér, és megpróbálom a függőleges visszafutáshoz szinkronizálni. Úgy egy- és kétszemélyes módban is azonos sebességű lenne a játék.

Azt is meg kell oldani, hogy ha teljesen függőlegesen halad a kukac páros oszlopban, azaz bájt határon, akkor ne gyorsuljon fel annyira. Az a képkirakó rutin gyorsabb, mint ami fél bájtnál kezdi el megjeleníteni a képet.
Title: Re: Banana
Post by: IstvanV on 2018.May.21. 12:45:03
Jóval tovább fordít, először azt hittem, hogy meg is fagyott.

Meg lehet oldani azt is, hogy -compiler sdcc nélkül is használható legyen, a Z88DK_USES_SDCC makrótól függően feltételes fordítással. Talán a legáttekinthetőbb az, ha van két külön include file csak az asm-ek számára.

Quote
Viszont így vannak a kódban olyan részek, amiket nem értek. Pl. az assembly-ben megírt függvényekben mindig fel kell sorolni a paramétereket újra (void)-ként is?

Ennek csak az a célja, hogy a fordító ne írjon ki figyelmeztetéseket a látszólag nem használt paraméterek miatt.

Quote
A __z88dk_callee és a __naked mit csinál?

A __naked azt jelenti, hogy a függvény teljesen assembly nyelvű lesz, így tartalmazza a RET utasítást és a verem kezelését, tehát a fordítónak nem kell utasításokat generálni ilyen célra.

A __z88dk_callee használatakor a hívott függvény feladata a paraméterek leemelése a veremről. PC-s fordítóknál hasonló eltérést jelent az "stdcall" a 32 bites módban alapértelmezett "cdecl" helyett. Itt az az előnye, hogy egyszerűbb és gyorsabb lehet a kód, a paramétereket POP utasításokkal tudja olvasni, majd a visszatérési címet visszateszi egy PUSH utasítással. Ha a rutinnak egyébként nincs szüksége a HL regiszterre, akkor akár JP (HL) utasítással is visszatérhet.

Quote
A véletlenszámot adó függvényben van egy ilyen: "00001$:\n", ez micsoda? Meg ha jól látom, a "defb" helyett ".byte" van.

Az assembly kódban címkék is használhatók (00001$, 00002$, stb.). A z88dk beépített SDCC fordítójánál azonban csak __sdcc_local_00001 és hasonló neveken lehet ezekre hivatkozni. Az assemblerek között van néhány szintaktikai eltérés, mint például a defb helyetti .byte, az SDCC nem csak Z80 CPU-t támogat, ezért kevésbé "szabványos" a Z80 assembly.

Quote
Ha ennyivel gyorsabb tud lenni és lehet hosszabb a program, akkor pár dolog még belefér, és megpróbálom a függőleges visszafutáshoz szinkronizálni. Úgy egy- és kétszemélyes módban is azonos sebességű lenne a játék.

Még azzal is lehetne próbálkozni, hogy a tömbök ne külön szegmensen legyenek, hanem a program 48K-s legyen és akkor a tömbök egyszerű statikus változók lehetnek és közvetlenül használhatók Poke helyett.

Quote
Azt is meg kell oldani, hogy ha teljesen függőlegesen halad a kukac páros oszlopban, azaz bájt határon, akkor ne gyorsuljon fel annyira. Az a képkirakó rutin gyorsabb, mint ami fél bájtnál kezdi el megjeleníteni a képet.

Az időzítésre a megszakítások használata lenne az ideális megoldás, saját rutin írásával, vagy a RANDOM_IRQ változó (0xBFEC a rendszerszegmensen) figyelésével. Az utóbbit minden megszakítás eggyel növeli, bár az 1 Hz-es megszakítások is.
Title: Re: Banana
Post by: Tomato77 on 2018.May.21. 12:59:32
Köszönöm a válaszokat!

Még azzal is lehetne próbálkozni, hogy a tömbök ne külön szegmensen legyenek, hanem a program 48K-s legyen és akkor a tömbök egyszerű statikus változók lehetnek és közvetlenül használhatók Poke helyett.

Alaposan kivesézted a programot. :) Ez a része a 16K-s határ miatt lett ilyen, hogy a fordított .COM minél kisebb legyen. A tömbök jelentősen növelték a .COM méretét, aztán nem indult el a program. Ez most ugyan megoldva, de egyelőre ezt a részt nem piszkálom.

Feltűnt, hogy az átírt assembly rutinokban fordított sorrendben töltöd fel a regisztereket a paraméterekben átadott értékekkel. Te az elején kezded, én pedig a végén. Ez miért más?

Amikor "pop"-pal veszed ki az értéket a veremből, mint pl. a "CopyMem" függvényben, nincs hozzá ugyanannyi "push". Ez nem okoz gondot? Vagy épp ezt csinálja a __z88dk_callee?
Title: Re: Banana
Post by: endi on 2018.May.21. 13:09:41
azért kíváncsi lennék milyen jó z80 kódot tud fordítani egy ilyen c fordító.
állítólag már jópár évtizede a komplex procikra egy fordító jobb asm kódot csinál mint az ember, mivel ügye olyan bonyolultak ezek a procik, hogy az ember nem tudja kihasználni a mindenféle furcsa és kevésbé furcsa dolgait :) (na ezt jól megfogalmaztam).

de z80 esetén? itt ügye nem sokat lehet trükközni...
Title: Re: Banana
Post by: IstvanV on 2018.May.21. 13:25:26
Ez most ugyan megoldva, de egyelőre ezt a részt nem piszkálom.

A sok Poke cseréje valóban viszonylag nagy átalakítás lenne, de a kezdőcímek const típusúra módosítása is eredményezett kis mértékű javulást. Próbálkoztam még az időzítéssel is, most játszható 250 MHz-es CPU-n. :)

[attachurl=1]
[attachurl=2]
[attachurl=3]

Code: Diff
  1. @@ -39,29 +39,263 @@
  2.  unsigned char RA;
  3.  
  4.  // Pointers for the arrays, images and sprites on 0xB2 page
  5.  
  6. -unsigned int StoryPalette  = 0x8000;        // 1160 [145][8]
  7. -unsigned int MinionSprites = 0x8000 + 1160; // 2464 [2][4][308]
  8. -unsigned int BananaPic     = 0x8000 + 3624; //   67 [67]
  9. -unsigned int Bricks        = 0x8000 + 3691; //   76 [2][38]
  10. -unsigned int MenuText      = 0x8000 + 3767; //  264 [4][66]
  11. -unsigned int GameWorm      = 0x8000 + 4031; //   64 [2][32]
  12. -unsigned int MenuWorm      = 0x8000 + 4095; //  112 [2][56]
  13. -unsigned int HeartPic      = 0x8000 + 4207; //   77 [77]
  14. -unsigned int EndText       = 0x8000 + 4284; //   93 [93]
  15. -unsigned int ReadyText     = 0x8000 + 4377; //  121 [121]
  16. -unsigned int QuitText      = 0x8000 + 4498; //  122 [122]
  17. -unsigned int Digits        = 0x8000 + 4620; //  160 [10][16]
  18. -unsigned int PX            = 0x8000 + 4780; //  400 [2][MaxWorm=200]
  19. -unsigned int PY            = 0x8000 + 5180; //  400 [2][MaxWorm=200]
  20. +static const unsigned int StoryPalette  = 0x8000;        // 1160 [145][8]
  21. +static const unsigned int MinionSprites = 0x8000 + 1160; // 2464 [2][4][308]
  22. +static const unsigned int BananaPic     = 0x8000 + 3624; //   67 [67]
  23. +static const unsigned int Bricks        = 0x8000 + 3691; //   76 [2][38]
  24. +static const unsigned int MenuText      = 0x8000 + 3767; //  264 [4][66]
  25. +static const unsigned int GameWorm      = 0x8000 + 4031; //   64 [2][32]
  26. +static const unsigned int MenuWorm      = 0x8000 + 4095; //  112 [2][56]
  27. +static const unsigned int HeartPic      = 0x8000 + 4207; //   77 [77]
  28. +static const unsigned int EndText       = 0x8000 + 4284; //   93 [93]
  29. +static const unsigned int ReadyText     = 0x8000 + 4377; //  121 [121]
  30. +static const unsigned int QuitText      = 0x8000 + 4498; //  122 [122]
  31. +static const unsigned int Digits        = 0x8000 + 4620; //  160 [10][16]
  32. +static const unsigned int PX            = 0x8000 + 4780; //  400 [2][MaxWorm=200]
  33. +static const unsigned int PY            = 0x8000 + 5180; //  400 [2][MaxWorm=200]
  34.  
  35.  // Music
  36.  
  37.  unsigned char Volume = 50, VolumeInc = 1, MusicPtr;
  38.  static unsigned char Music[] = { 37, 12, 45, 12, 37, 12, 45, 12, 37, 12, 45, 6, 37, 31,
  39.                                   41, 12, 41, 12, 41, 12, 41, 12, 37, 12, 45, 6, 37, 31 };
  40.  
  41. +#ifdef Z88DK_USES_SDCC
  42. +void Set_EXOS_Var(unsigned char Variable, unsigned char Value) __naked
  43. +{
  44. +  (void) Variable;
  45. +  (void) Value;
  46. +  __asm__ (
  47. +      "ld    hl, #2\n"
  48. +      "add   hl, sp\n"
  49. +      "ld    c, (hl)\n"
  50. +      "inc   hl\n"
  51. +      "ld    d, (hl)\n"
  52. +      "ld    b, #1\n"
  53. +      "rst   0x30\n"
  54. +      ".byte 16\n"
  55. +      "ret\n"
  56. +  );
  57. +}
  58. +
  59. +unsigned char Ask_EXOS_Var(unsigned char Variable) __naked
  60. +{
  61. +  (void) Variable;
  62. +  __asm__ (
  63. +      "ld    hl, #2\n"
  64. +      "add   hl, sp\n"
  65. +      "ld    c, (hl)\n"
  66. +      "ld    b, #0\n"
  67. +      "rst   0x30\n"
  68. +      ".byte 16\n"
  69. +      "ld    l, d\n"
  70. +      "ret\n"
  71. +  );
  72. +}
  73. +
  74. +/* joystick status (1=right, 2=left, 4=down, 8=up, 16=fire) */
  75. +
  76. +unsigned char Get_Joy(unsigned char Channel, unsigned char Joy_number) __naked
  77. +{
  78. +  (void) Channel;
  79. +  (void) Joy_number;
  80. +  __asm__ (
  81. +      "ld    hl, #2\n"
  82. +      "add   hl, sp\n"
  83. +      "ld    a, (hl)\n"
  84. +      "inc   hl\n"
  85. +      "ld    c, (hl)\n"
  86. +      "ld    b, #9\n"
  87. +      "rst   0x30\n"
  88. +      ".byte 11\n"
  89. +      "ld    l, c\n"
  90. +      "ret\n"
  91. +  );
  92. +}
  93. +
  94. +#define Out(port_, value_)  { static __sfr __at (port_) tmp_; tmp_ = (value_); }
  95. +#define Peek(addr_)         *((unsigned char *) (addr_))
  96. +#define Poke(addr_, value_) *((unsigned char *) (addr_)) = (value_)
  97. +
  98. +void Open_Channel(unsigned char Channel, unsigned int FileNamePtr) __naked
  99. +{
  100. +  (void) Channel;
  101. +  (void) FileNamePtr;
  102. +  __asm__ (
  103. +      "ld    hl, #2\n"
  104. +      "add   hl, sp\n"
  105. +      "ld    a, (hl)\n"
  106. +      "inc   hl\n"
  107. +      "ld    e, (hl)\n"
  108. +      "inc   hl\n"
  109. +      "ld    d, (hl)\n"
  110. +      "rst   0x30\n"
  111. +      ".byte 1\n"
  112. +      "ret\n"
  113. +  );
  114. +}
  115. +
  116. +void Close_Channel(unsigned char Channel) __naked
  117. +{
  118. +  (void) Channel;
  119. +  __asm__ (
  120. +      "ld    hl, #2\n"
  121. +      "add   hl, sp\n"
  122. +      "ld    a, (hl)\n"
  123. +      "rst   0x30\n"
  124. +      ".byte 3\n"
  125. +      "ret\n"
  126. +  );
  127. +}
  128. +
  129. +unsigned char Channel_Status(unsigned char Channel) __naked
  130. +{
  131. +  (void) Channel;
  132. +  __asm__ (
  133. +      "ld    hl, #2\n"
  134. +      "add   hl, sp\n"
  135. +      "ld    a, (hl)\n"
  136. +      "rst   0x30\n"
  137. +      ".byte 9\n"
  138. +      "ld    l, c\n"
  139. +      "ret\n"
  140. +  );
  141. +}
  142. +
  143. +void Get_Block(unsigned char Channel, unsigned int Bytes, unsigned int BufPtr) __naked
  144. +{
  145. +  (void) Channel;
  146. +  (void) Bytes;
  147. +  (void) BufPtr;
  148. +  __asm__ (
  149. +      "ld    hl, #2\n"
  150. +      "add   hl, sp\n"
  151. +      "ld    a, (hl)\n"
  152. +      "inc   hl\n"
  153. +      "ld    c, (hl)\n"
  154. +      "inc   hl\n"
  155. +      "ld    b, (hl)\n"
  156. +      "inc   hl\n"
  157. +      "ld    e, (hl)\n"
  158. +      "inc   hl\n"
  159. +      "ld    d, (hl)\n"
  160. +      "rst   0x30\n"
  161. +      ".byte 6\n"
  162. +      "ret\n"
  163. +  );
  164. +}
  165. +
  166. +unsigned char Write_Block(unsigned char Channel, unsigned int Bytes, unsigned int BufPtr) __naked
  167. +{
  168. +  (void) Channel;
  169. +  (void) Bytes;
  170. +  (void) BufPtr;
  171. +  __asm__ (
  172. +      "ld    hl, #2\n"
  173. +      "add   hl, sp\n"
  174. +      "ld    a, (hl)\n"
  175. +      "inc   hl\n"
  176. +      "ld    c, (hl)\n"
  177. +      "inc   hl\n"
  178. +      "ld    b, (hl)\n"
  179. +      "inc   hl\n"
  180. +      "ld    e, (hl)\n"
  181. +      "inc   hl\n"
  182. +      "ld    d, (hl)\n"
  183. +      "rst   0x30\n"
  184. +      ".byte 8\n"
  185. +      "ld    l, a\n"
  186. +      "ret\n"
  187. +  );
  188. +}
  189. +
  190. +void CopyMem(unsigned int From, unsigned int To, unsigned int Count) __z88dk_callee __naked
  191. +{
  192. +  (void) From;
  193. +  (void) To;
  194. +  (void) Count;
  195. +  __asm__ (
  196. +      "pop   af\n"
  197. +      "pop   hl\n"
  198. +      "pop   de\n"
  199. +      "pop   bc\n"
  200. +      "push  af\n"
  201. +      "ldir\n"
  202. +      "ret\n"
  203. +  );
  204. +}
  205. +
  206. +void FillMem(unsigned int From, unsigned int Count, unsigned char Value) __z88dk_callee __naked
  207. +{
  208. +  (void) From;
  209. +  (void) Count;
  210. +  (void) Value;
  211. +  __asm__ (
  212. +      "pop   hl\n"
  213. +      "pop   de\n"
  214. +      "pop   bc\n"
  215. +      "dec   sp\n"
  216. +      "pop   af\n"
  217. +      "push  hl\n"
  218. +      "ld    l, e\n"
  219. +      "ld    h, d\n"
  220. +      "ld    (hl), a\n"
  221. +      "cpi\n"
  222. +      "ret   po\n"
  223. +      "ex    de, hl\n"
  224. +      "ldir\n"
  225. +      "ret\n"
  226. +  );
  227. +}
  228. +
  229. +unsigned char Rnd_0_127() __naked
  230. +{
  231. +  __asm__ (
  232. +      "00001$:\n"
  233. +      "ld    hl, #0x7fff\n"
  234. +      "ld    a, r\n"
  235. +      "xor   a, l\n"
  236. +      "add   hl, hl\n"
  237. +      "xor   a, h\n"
  238. +      "ld    l, a\n"
  239. +      "xor   a, h\n"
  240. +      "ld    h, a\n"
  241. +      "ld    (__sdcc_local_00001 + 1), hl\n"
  242. +      "and   a, #0x7f\n"
  243. +      "ld    l, a\n"
  244. +      "ret\n"
  245. +  );
  246. +}
  247. +
  248. +unsigned char Get_Segment() __naked
  249. +{
  250. +  __asm__ (
  251. +      "rst   0x30\n"
  252. +      ".byte 24\n"
  253. +      "cp    a, #1\n"
  254. +      "ld    a, c\n"
  255. +      "ld    (_SegNum), a\n"
  256. +      "ld    l, #0\n"
  257. +      "rl    l\n"
  258. +      "ret\n"
  259. +  );
  260. +}
  261. +
  262. +void Free_Segment(unsigned char Segment_Num) __naked
  263. +{
  264. +  (void) Segment_Num;
  265. +  __asm__ (
  266. +      "ld    hl, #2\n"
  267. +      "add   hl, sp\n"
  268. +      "ld    c, (hl)\n"
  269. +      "rst   0x30\n"
  270. +      ".byte 25\n"
  271. +      "ret\n"
  272. +  );
  273. +}
  274. +#else
  275.  void Set_EXOS_Var(unsigned char Variable, unsigned char Value)
  276.  {
  277.    #asm
  278.    ld      HL,2
  279. @@ -302,8 +536,30 @@
  280.    rst     30h
  281.    defb    25
  282.    #endasm
  283.  }
  284. +#endif
  285. +
  286. +static unsigned char Last_IRQ_Cnt = 0;
  287. +
  288. +void Timer_Init()
  289. +{
  290. +  Out(0xB2, 0xFF);
  291. +  Last_IRQ_Cnt = Peek(0xBFEC);
  292. +  Out(0xB2, DataSeg);
  293. +}
  294. +
  295. +void Timer_Wait(unsigned char n)
  296. +{
  297. +  volatile unsigned char  *p = (unsigned char *) 0xBFEC;
  298. +  unsigned char t;
  299. +
  300. +  Out(0xB2, 0xFF);
  301. +  while ((unsigned char) ((t = *p) - Last_IRQ_Cnt) < n)
  302. +    ;
  303. +  Last_IRQ_Cnt = t;
  304. +  Out(0xB2, DataSeg);
  305. +}
  306.  
  307.  unsigned char Get_VideoSegments()
  308.  {
  309.    unsigned char OK;
  310. @@ -451,9 +707,9 @@
  311.  
  312.  void Box16B(unsigned char Screen, unsigned char X_in_bytes, unsigned char Y,
  313.              unsigned char XSize_in_bytes, unsigned char YSize, unsigned char Colour)
  314.  {
  315. -  unsigned char i, j, Value;
  316. +  unsigned char /* i, */ j, Value;
  317.  
  318.    Get_Address(Screen, Y);
  319.    VideoOfs += (X_in_bytes + 0xC000);
  320.    Value = (Colour & 1) * 12 + (Colour & 2) * 96 + ((Colour & 4) / 4) * 3 + (Colour & 8) * 6;
  321. @@ -498,9 +754,9 @@
  322.  unsigned char GetPixel16(unsigned char Screen, unsigned char X, unsigned char Y)
  323.  {
  324.    Get_Address(Screen, Y);
  325.    VideoOfs += (X / 2 + 0xC000);
  326. -  return Peek(VideoOfs) && ((X % 2) ? 85 : 170);
  327. +  return Peek(VideoOfs) & ((X % 2) ? 85 : 170);
  328.  }
  329.  
  330.  void GetPic16B(unsigned char Screen, unsigned int X_in_bytes, unsigned int Y,
  331.                 unsigned char XSize_in_bytes, unsigned char YSize, unsigned int Address)
  332. @@ -618,9 +874,9 @@
  333.        if (Pic.PixelLines || (y == 0)) {
  334.          Get_Block(40, 8, (unsigned int) &Buf[8]);
  335.          if ((Block == 3) && (y == 0)) CopyMem((unsigned int) &Buf[8], StoryPalette + 144 * 8, 8);
  336.          if (Block < 5) {
  337. -          Buf[0] = Pic.PixelLines ? 255 : 256 - Pic.Lines;
  338. +          Buf[0] = Pic.PixelLines ? 255 : (unsigned char) (256 - Pic.Lines);
  339.            Buf[1] = Pic.VideoMode;
  340.            Buf[2] = 10;
  341.            Buf[3] = 52;
  342.            Buf[4] = VideoOfs % 256;
  343. @@ -762,17 +1018,17 @@
  344.    static unsigned char Video[] = { 6, 'V', 'I', 'D', 'E', 'O', ':' };
  345.    static unsigned char Snd[] = { 6, 'S', 'O', 'U', 'N', 'D', ':' };
  346.    static unsigned char Error[] = { 15, 'N', 'o', 't', ' ', 'e', 'n', 'o', 'u', 'g', 'h', ' ', 'R', 'A', 'M', '.' };
  347.  
  348. -  Out(0xB2, DataSeg);
  349.    Out(0xB3, 255);
  350.    SaveLPTAddr = Peek(0xFFF4) + Peek(0xFFF5) * 256 + 16384;
  351.    if (Get_VideoSegments() == 0) {
  352.      Print(0, (unsigned int) &Error[0]);
  353.      GetKey(1);
  354.      Term();
  355.      return;
  356.    }
  357. +  Out(0xB2, DataSeg);
  358.  
  359.    Set_EXOS_Var(7, 255);  // Click
  360.    Set_EXOS_Var(8, 255);  // Stop
  361.    Set_EXOS_Var(10, 1);   // Key rate
  362. @@ -934,8 +1190,9 @@
  363.      Poke(PX, 153); Poke(PY, 93);
  364.      Poke(PX + MaxWorm, 9); Poke(PY + MaxWorm, 32);
  365.      Bananas = 0; Bananas_to_eat = 10;
  366.      Track();
  367. +    Timer_Init();
  368.      do {
  369.        GetKey(0);
  370.        if ((Key == 27) || (Key == 3)) if (Quit()) GameEnd = 1;
  371.        if (Key == 'n') GameEnd = 2;
  372. @@ -1076,8 +1333,9 @@
  373.              if (PY1 > PY2) Box16(6, PX2, PY2, 6, 2, 0);
  374.            }
  375.          }
  376.        }
  377. +      Timer_Wait(2);
  378.      } while (GameEnd == 0);
  379.      if (GameEnd == 2) Level++;
  380.  
  381.      // All levels are completed

Quote
Feltűnt, hogy az átírt assembly rutinokban fordított sorrendben töltöd fel a regisztereket a paraméterekben átadott értékekkel. Te az elején kezded, én pedig a végén.

Ez is a fordítók közötti különbség.

Quote
Vagy épp ezt csinálja a __z88dk_callee?

Igen.
Title: Re: Banana
Post by: IstvanV on 2018.May.21. 13:31:02
Ez még jobb kódot eredményez (szerk.: makrók helyett enum is használható):

Code: C
  1. #define StoryPalette    (0x8000)        // 1160 [145][8]
  2. #define MinionSprites   (0x8000 + 1160) // 2464 [2][4][308]
  3. #define BananaPic       (0x8000 + 3624) //   67 [67]
  4. #define Bricks          (0x8000 + 3691) //   76 [2][38]
  5. #define MenuText        (0x8000 + 3767) //  264 [4][66]
  6. #define GameWorm        (0x8000 + 4031) //   64 [2][32]
  7. #define MenuWorm        (0x8000 + 4095) //  112 [2][56]
  8. #define HeartPic        (0x8000 + 4207) //   77 [77]
  9. #define EndText         (0x8000 + 4284) //   93 [93]
  10. #define ReadyText       (0x8000 + 4377) //  121 [121]
  11. #define QuitText        (0x8000 + 4498) //  122 [122]
  12. #define Digits          (0x8000 + 4620) //  160 [10][16]
  13. #define PX              (0x8000 + 4780) //  400 [2][MaxWorm=200]
  14. #define PY              (0x8000 + 5180) //  400 [2][MaxWorm=200]
Title: Re: Banana
Post by: Tomato77 on 2018.May.22. 22:40:57
A fórumtalira elkészült a módosított verziója a Banana játéknak. Istvántól rengeteg segítséget kaptam többek között az SDCC fordításban, időzítésben, assembly rutinokban és a sok-sok válaszában a fórumon feltett kérdéseimre. Ezer köszönet neki érte!
 
Amik változtak:

- Gyorsabb lett a játék két személyes módban, ez az optimalizált fordítás miatt van.
- Időzítés: egy és két játékos módnál is állandó a sebesség, itt átvettem István Timer rutinjait.
- A pontszám nem csordul túl, ha 255-nél több banánt esznek a kukacok, lehet zabálni.
- Eltűnt a pont a 2018 végéről. :)
- Tettem bele hangot, ha ütközik a kukac.
- Hang a játék kezdeténél: ez leginkább azért lett, hogy megszakítsa a menü zenéjét.
- Kapott a program plusz három pályát, emiatt a szintet két számjeggyel jelzi ki.
- Módosultak a kukacok kezdőpozíciói, így véletlenszerű, hogy melyikük ér előbb a falhoz, nem mindig a lila nyer.
- Lilább lett a lila kukac, ezt a kislányom kérte. Emiatt a téglák színe is megváltozott kicsit, mert épp az a szín kellett, de szerintem így is jó maradt. Úgy is mindig az van, amit a nők akarnak. :)

Viszont úgy néz ki, hogy EP32 alatt már nem megy a program, csak EP128EMU-n és igazi gépen.
 
Jó szórakozást! :)
 
------------------------
 
The amended version of Banana has been finished. I got so much help from István, e.g. how to compile with SDCC, help with the timer, in the assembly functions and his answers to my questions on the forum. Great thanks him!
 
Changes are:

- The game became faster in two players mode, it is because of the optimized compile.
- Timer: the speed is contant both in one player and two players mode. Here I took István’s Timer routines.
- The points do not overflow if the worms eat more than 255 bananas.
- The year 2018 is displayed in English form.
- There is sound if the worms go into the wall.
- Sound at the begin of the game: it interrupts the menu music.
- There are three extra levels, two digits are used to display the level number.
- The start positions of the worms are modified, it is random which worm crashes into the wall first. Not always the purple wins.
- The purple worm became more purple, it was requested by my daughter. Because of this the colour of the bricks changed a little but it still looks good.

Unfortunatelly it seems that the program no longer runs on EP32, just on EP128EMU and real machine.
 
Enjoy it! :)
Title: Re: Banana
Post by: IstvanV on 2018.May.23. 09:33:08
Kisebb bug: mivel a Get_Segment() függvény __naked, ezért a fordító nem generál RET utasítást, és az utána következő Free_Segment() is lefut. :oops: Még egy lehetséges hiba a GetPixel16() függvényben ez a sor:
Code: C
  1.   return Peek(VideoOfs) && ((X % 2) ? 85 : 170);
Itt a fordító figyelmeztetést is ír ki, elvileg az && helyett & kellene, bár nem lehetetlen, hogy a program mégis az elsőbbivel működik helyesen. Az eltérés valószínűleg csak annyi, hogy kevésbé pontos az ütközés vizsgálat, de valamivel gyorsabb.
Title: Re: Banana
Post by: szipucsu on 2018.May.23. 11:13:23
A fórumtalira elkészült a módosított verziója a Banana játéknak.
A főmenüben azok a lelógó-mozgó kütyük sebessége szebb lenne, ha lassabb lenne.
Egy kis probléma, egyik pályát teljesítettem, lenyomva maradt a lefele gomb, és a következő pálya egyből elindult, és lefele egyből bele is mentem a falba.
Ha a zenéhez nem is nyúlhatunk, a hangeffektek kicsit jobban kihasználhatnák az EP képességeit. De a zene is szólhatna párhuzamosan egy oktávval feljebb is egy másik csatornán is. (Netalán a harmadik csatornán egy duodecimával feljebb fele/negyed hangerővel, még teltebb lenne a hangzás.)
Title: Re: Banana
Post by: Povi on 2018.May.23. 16:07:32
hm... lehet, hogy érdemes lenne a Digger-t is C-ből megpróbálni lefordítani?
Title: Re: Banana
Post by: Tomato77 on 2018.May.23. 18:48:56
Javított Banana:

- István által talált hibák kijavítva.
- A lila kukac mégis világosabb maradt, hogy látszódjon a szája. Itt volt egy programhiba, a lila szín helyett rózsaszínnel rajzolta a csíkokat, mert nem igazodtam ki a bitek sorrendjén 16 színben. (Ez mehetne a "Mire gondoltak az EP tervezői?" c. topikba is, hogy miért jó a 1537 0426 bitsorrend, miért nem az alsó 4 biten van az egyik képpont, a felsőn pedig a másik...)
- A banánt csak 3x próbálja meg a pályára helyezni. Ha nem sikerül, mennek tovább a kukacok aztán később megpróbálja újra. Ez főleg az utolsó pályákon jó, ahol kevés szabad hely van, és nem akasztja meg a programot, ha nem sikerül gyorsan helyet találni.
- A menüben lassabbak lettek a kukacok.
- A teljesített pályák végén várakozik egy kicsit, hogy legyen idő elengedni a gombot/joyt és a következő pályán ne zavarjon be a kezdésbe.
Title: Re: Banana
Post by: Tuby128 on 2018.May.23. 19:05:58
Egy NICK chipet tervezni nem egyszerű dolog. Az idő is sürgetett. Nagyon az az érzésem, hogy ez valami belső huzalozás miatt alakult így, és az idő sürgető volta miatt nem sikerült már letisztázni a kapcsolást.
Title: Re: Banana
Post by: Tomato77 on 2018.May.24. 00:46:17
A banánok elhelyezése nem volt jó, mert feltűnt, hogy gyakran ugyanoda teszi őket a program. A "Refresh" regisztert használja a véletlenszám előállításához, és volt benne egy olyan rész, ha a véletlenszám < 2, akkor tegyen banánt. Ha ezután közvetlenül még két véletlenszámot használt (X és Y pozíció), akkor az "R" regiszter valószínűleg közel járt az előző kis értékhez, ezért gyakran a bal felső sarokba került a banán. Most egy számlálót tölt fel a véletlenszámmal, ami ha elfogy, jön a csemege. Így némileg kevesebbet is kell várni az újabb banánra. Ez talán már a végleges. :)
Title: Re: Banana
Post by: Tomato77 on 2018.May.24. 19:42:13
Ezt, vagy ehhez hasonlót az egyik rutinodban néztem, csak nem értettem, hogy mit csinál. :oops: Viszont csináltam egy olyat, ami az R regiszterből és a rendszeridőből kombinálja össze. Majd este feltöltöm, ha haza értem.
Title: Re: Banana
Post by: Tomato77 on 2018.May.24. 21:19:06
Mivel már nem szorít a 16K-s határ (meg SDCC-vel tömörebb kódot fordít a Z88DK), kijavítottam két meglévő hibát:
 
- Induláskor ha a sárga kukac azonnal felfelé kanyarodott, néha szemetet hagyott maga után - ez javítva.
- Egy nagyobb hiba: átlósan haladva a kukacok le tudták nyesni a téglák sarkát. Egy kibővített ellenőrzéssel ez elvileg megszűnt.
- Az RND továbbra sem tetszett, ezért alakítottam rajta. Most egy olyan függvény van a programban, ami 0-255 között ad véletlenszámot a Refresh regiszter és a rendszeridő kombinációjával. Ezt alaposan leteszteltem, elfogadhatóan változatos véletlenszámokat ad és mind a 256 lehetséges érték előfordul.

A korábbi verziókat leszedtem, hogy ne legyen kavarodás, ez a legfrissebb. Ha más hiba nem derül ki, akkor ennyi. :)
Title: Re: Banana
Post by: Lacika on 2018.May.24. 21:41:14
A menüben a billentyűfigyelés most nem jó. A Story csak egy pillanatra látszik, ha előtte a Quadrillion-t játszottuk... :ds_icon_cheesygrin:
Valamit nem állít a program alaphelyzetbe?
Title: Re: Banana
Post by: Tomato77 on 2018.May.24. 21:43:23
Nálam jó emulátorban is és igazi Enterprise-on is. Ahhoz a részhez nem nyúltam. Miben próbálod?

Mod: Quadrillion utáni meleg resetnél is jó, tehát a Banana Quadrillion kompatibilis. :)
Title: Re: Banana
Post by: Lacika on 2018.May.24. 21:52:47
ep128emu-ban.
Title: Re: Banana
Post by: szipucsu on 2018.May.24. 21:57:01
Banana Quadrillion kompatibilis. :)
Olyan nem lesz, hogy labda helyett a kukaccal kell kiütni/tologatni a téglákat? Vagy hogy a banánokat kell eltalálni a labdákkal? :ds_icon_cheesygrin:
Title: Re: Banana
Post by: Tomato77 on 2018.May.24. 21:59:20
ep128emu-ban.

Hát.... passz.... Nálam három különböző PC-n és egy EP-n sincs gond vele. Megnézed légyszi ezt a snapshot-ot, hogy nálad mit csinál?
Title: Re: Banana
Post by: IstvanV on 2018.May.24. 22:16:17
Arról a konfigurációról lenne érdekesebb snapshot, amelyik nem működött.
Title: Re: Banana
Post by: szipucsu on 2018.May.24. 22:39:49
A Story csak egy pillanatra látszik, ha előtte a Quadrillion-t játszottuk... :ds_icon_cheesygrin:
Ha folyamatosan nyomva tartjuk az 5-ös gombot, akkor váltogat a story és a menü között. De csak akkor ugrik vissza a menübe, ha sokáig nem engedjük el a gombot.
Title: Re: Banana
Post by: Zozosoft on 2018.May.25. 12:01:11
Falnak menésnél, amikor a minyon sajnálkozik, oda kéne valami jó kis hang effekt, vagy zenécske.
Title: Re: Banana
Post by: Lacika on 2018.May.25. 12:25:40
Hát.... passz.... Nálam három különböző PC-n és egy EP-n sincs gond vele. Megnézed légyszi ezt a snapshot-ot, hogy nálad mit csinál?

Ebben jó! Nekem sem sikerólt reprodukálni a hibát.
Title: Re: Banana
Post by: Tomato77 on 2018.May.25. 12:50:29
Ebben jó! Nekem sem sikerólt reprodukálni a hibát.

Na ugye! :D Akkor elkészült fórumtalira, szerintem ez a kész változat. És épp a zeneszerzőm neve napján. :)
Title: Re: Banana
Post by: szipucsu on 2018.May.25. 17:09:02
Amikor újabb banánt rak ki a pályára, akkor is lehetne valami jó hangeffekt.
Title: Re: Banana
Post by: Tomato77 on 2018.October.14. 11:30:25
Elkészült az újabb változat, ami a Banana+ nevet kapta. Tartalmaz néhány javítást és újdonságot:

- Az irányítás picit jobb lett, szűk helyen némileg könnyebb irányítani a kukacot.
- Van egy számláló, hogy mikor tegyen ki újabb banánt. Ennek a kezelésében volt egy hiba, amit kijavítottam.
- Készült egy új pálya.
- Színesebbek lettek a hátterek.
- Ahogy javasoltátok: vannak plusz hangok, pl. banán megjelenésekor azt mondja, hogy "banana". Na jó, ehhez kell némi fantázia. :) Valamint vannak felvehető bigyók. Ezekről többet nem mondok, inkább próbáljátok ki! :) Illetve csak annyit, hogy három megevett banán után jelennek meg, és két játékos módban nem mindig arra a játékosra van hatással, aki felvette, tehát lehet szivatni a másikat. :)

Jó szórakozást és esetleges hibakeresést!
Title: Re: Banana
Post by: endi on 2018.October.14. 12:50:56
tök jó!
mondjuk néha nem volt világos hogy mi az akadály meg mi a powerup. valahogy jelezni kéne, mondjuk villogna a powerup, vagy valami ilyesmi.
Title: Re: Banana
Post by: szipucsu on 2018.October.14. 17:05:27
Jó lett!
Ha még nem unod a banánt, játék közben is szólhatna valami zene. Ha jól hallom, a hangeffektek egy csatornát használnak, így akár kétszólamú zene is szólhatna + a zajcsatorna is. De úgy tudom, nem szabad belenyúlni a játékba.

Viszont egy életet sem vesztettem sokáig, majd a sokadik pályán nekimentem a falnak és vége lett a játéknak. Nem tudom, miért fogyott el az összes élet, nem vettem fel olyat, amitől elfogyna. Hacsak nem vesz el életet a megtört szíven kívül más powerup is.
Title: Re: Banana
Post by: Tomato77 on 2018.October.14. 22:09:32
Három csatornát használ a játék, azért tud egyszerre szólni a dallam, a banán és az ajándék hangja. Egyedül a zajcsatorna nincs használva.

Érthetetlen, miért lett vége a játéknak... Csak az ütközés (fallal vagy lila gombával) és a törött szív vesz el életet. A törött szív is csak addig, amíg lehet, az utolsót nem veszi el. Én nem találkoztam ilyennel, de lehet benne hiba. Tesztelem még.
Title: Re: Banana
Post by: szipucsu on 2018.October.14. 22:29:55
Volt egy olyan, hogy közvetlen a kígyó elé tette a törött szívet, esélyem se lett volna kikerülni. Az igazságtalan volt. :D Meg egy olyan is volt, ahol 1 vagy 2 másodpercem lett volna kikerülni, de annyi idő alatt nem tudom, egyáltalán lehet-e annyit fordulni még jó reflexszel is.
A zajcsatornát is betehetnéd pluszban néhány effekthez, különféle polinomszámláló értékekkel. Persze így is jó, ahogy most van, csak ha már van zajcsatorna, miért ne lehetne kihasználni.
Title: Re: Banana
Post by: Tomato77 on 2018.October.15. 18:58:18
Kis javítás: most már nem teszi közvetlenül a kukac orra elé az ajándékot, így nem fogy el az élet az észrevétlenül felvett törött szívek miatt, illetve a banánon kívül minden felvehető dolog villog.
Title: Re: Banana
Post by: Zozosoft on 2018.October.19. 13:56:38
Na majd jól kipróbáljuk a klubban :-)
Title: Re: Banana
Post by: szipucsu on 2018.October.19. 16:53:57
Na majd jól kipróbáljuk a klubban :-)
Szólni kéne Kapitánynak, hogy ne Elite verseny legyen, hanem Banana. :D Ezt legalább már gyakoroltam is valamennyit.
Title: Re: Banana
Post by: Tomato77 on 2019.March.06. 02:06:39
A Banana+-ban is kijavítottam a billentyűzet kezelést, rendesen működik két játékossal is. Valamint a Laci által talált menühiba is megoldódott.
Title: Re: Banana
Post by: endi on 2019.March.06. 13:25:42
lehetséges lenne "moddolni" a játékot? :)
én csak a grafikának csinálnék egy újverziót, ha csak annyi, hogy megadott képeken át kell rajzolni.
aztán aki akar valamit kezd vele (más pályák stb)
Title: Re: Banana
Post by: Tomato77 on 2019.March.06. 13:57:20
a grafikának csinálnék egy újverziót
Akkor az már valami tök más lenne.
Title: Re: Banana
Post by: Tuby128 on 2023.December.20. 00:03:12
Kérnék szépen a lányaimnak "hamika stílus" kiválasztási lehetőséget, ahol az irányok így vannak:
( a topik elején beszélt 4 hónapos lányom már mindjárt 6 éves lesz, kétévente pedig kapott testvéreket. Gondolom a tiéd pedig akkor 7+6=13 már. Hogy repül az idő...)

Code: [Select]
       // Change direction in every 4th cycle (this avoids the accidental collision)
        if (MenuSpritePtr % 4 == 0) {
          if (((Control[p] != 3) && (Joy[Control[p]] == 2)) || ((Control[p] == 3) && (Key == 'a')))  // left
            Direction[p] = 12;
          if (((Control[p] != 3) && (Joy[Control[p]] == 1)) || ((Control[p] == 3) && (Key == 'd')))  //right
            Direction[p] = 4;
          if (((Control[p] != 3) && (Joy[Control[p]] == 4)) || ((Control[p] == 3) && (Key == 's')))  // down
            Direction[p] = 8;
          if (((Control[p] != 3) && (Joy[Control[p]] == 8)) || ((Control[p] == 3) && (Key == 'w')))  // UP
            Direction[p] = 0;
        }
Title: Re: Banana
Post by: Tomato77 on 2023.December.20. 10:28:48
Szerintem ezzel elveszne a játék legjobb tulajdonsága, épp az irányításban különbözik leginkább a kukacos játékoktól. Meg akkor lehet, hogy az ütközés vizsgálatot is módosítani kellene, mert nem "kukac-elemenként" megy a mozgás, hanem pixelenként. Pl. mi van, ha felfelé megy a kukac, aztán hirtelen jobbra, majd lefelé irányítjuk, amikor még saját maga mellett van. Igazából nem tervezem módosítani.
Title: Re: Banana
Post by: Tuby128 on 2023.December.20. 15:26:34
Kicsit emlékeztet ez a visszautasítás arra, amikor a Microsoft bevezeti, hogy nem kell az usernek vezérlőpult a win11-ben mert minek az neki :D
 Különbség a github féle szabad forráskód (linux szemlélet) és a windows zárt forráskód között, hogy az user maga programozhatja át ahogy akarja.
Title: Re: Banana
Post by: Tuby128 on 2023.December.24. 19:22:58
A legelső hozzászólásnál található forráskód nagyon jól működik kazettáról betöltve. Emulátoron biztosan.
Most próbáltam valódi gépen lemezről betölteni, de hibás a lesz a program.
Ezután kipróbáltam emulátorban is, ott is hibás volt, ugyanaz a jelenség.
Német gépen csináltam is-basic cartridge-zsel.

Ezután kivettem a simulatorban a basic bővítőből a német rom-ot (angol basic-ké varázsoltam), és a simulátorban valamivel jobb lett, de a játék közben nem törli a kukac darabjait a pályán.
 Ezután valódi gépen kivettem a basic cardrige-t, és a WP-ből töltöttem be. Így már jó lett. De a zene csak a főképernyőnél szól, utána sehol. A többi fent említett esetben semmilyen hang nincs.

Vajon mi lehet a baj?
Title: Re: Banana
Post by: Tuby128 on 2023.December.26. 22:53:40
Majd ha vége a karácsonynak és valakinek van ideje, elmondhatná mi lehet az oka annak, hogy a német gépen és exdossal minden máshogy működik mint kazettával.
Illetve, hogy program írásakor mire kell figyelni, ugyanis a betöltés után még legalább egy fájlt biztosan be kell töltenem a video memoriába.
Title: Re: Banana
Post by: szipucsu on 2023.December.27. 12:01:33
mi lehet az oka annak, hogy a német gépen és exdossal minden máshogy működik mint kazettával.
Ebben a topikban volt szó a különféle fajta Enterprise gépek (pl. angol és német) eltéréseiről (https://enterpriseforever.com/programozas/kulonboz-fajta-enterprise-gepek-programozasa/).