Enterprise Forever

:HUN => Konvertálás => BASIC programok átírása => Topic started by: nyuzga on 2021.March.13. 08:55:43

Title: Uberswap (C64)
Post by: nyuzga on 2021.March.13. 08:55:43
Egész jó kis c64 basic játék forráskóddal. Átírható ?

http://www.indieretronews.com/2021/03/uberswap-match-3-variant-for-commodore.html#more
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.13. 11:47:54
Egész jó kis c64 basic játék forráskóddal. Átírható ?
Biztos meg lehetne csinálni EP-ra is, de inkább újraírni, mert kicsit más a két basic. Itt (https://github.com/EgonOlsen71/uberswap) van a forrás.
A lényeg, hogy a táblán ha megcserélünk két elemet, mindkét elem körül meg kell nézni, van-e ugyanolyan elem, és ha igen, akkor azok körül is, majd ezeket mind el kell tüntetni. Ez lehet a húzósabb része, mert sok mindenre kell figyelni, pl. két egyforma elem megcserélésekor nem kell mindkettőt egymás után még egyszer megvizsgálni, és fontos, hogy egy szomszédos elem se maradjon ki. Az aknakereső elvével is itt adtam fel, de Ergognomik írt valami jó rutint erre, ide is olyasmi kéne. Utána az eltüntetett elemek oszlopát végig kell nézni, és a gravitáció elvén eggyel lejjebb pakolni az üres részek feletti részeket. Lehet, a forrásból pont jól ki lehetne az elvet lopni, de az is lehet, pont ezekhez vannak poke-ok. Az ismertetőben is írják, hogy vannak benne assembly részek. De alapvetően tuti megoldható EP-n is. Csiga sebességű lenne, de a Zzzip megoldaná.
Ha üres oszlop keletkezik, akkor össze kell rántani a mellette levőket, ez basicből nem lenne túl gyors, és mindig figyelni kéne, hol van üres oszlop, ez biztos sokat lassítana.
16 színű mód lenne talán a legjobb, de nagyobbak lennének így a cuccok, de azt TVC-re is könnyen át lehetne írni, csak ott meg nincs Zzzip
De nem a Swap is ilyesmi?
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.13. 19:27:42
Ki lehetne hüvelyezni mit és hogyan csinál, ha lenne hozzá elég türelme valakinek. Az assembly részek az elemek mozgatását végzik, semmi mást. A többi mind BASIC-ben van megírva. Egyébként írja a szerző, hogy BASIC-ben dög lassú, ő is egy fordítóval tette élvezhető sebességűvé.

Egyébként az elemek PETSCII grafikus karakterekből vannak összeállítva 2x2-es egységekké. És hát az attribútumos (mert ugye nincs másfajta) karakteres képernyőn fut a program, ami kicsit nehezít az esetleges átíráson.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.14. 15:02:01
ErgoGnomik: Ha jól sejtem, a Commodore basichez érthetsz valamennyire. Nincs kedved átírni ezt a játékot? Elég lenne csak annyira, hogy éppen működjön. A grafikai részét meg egyéb körítéseket majd megcsinálhatom.
2x2 méretű grafikus elemeket használ? Ebben nem voltam biztos, mert nem túl nagyok a karakterek, szerintem 1 karakter 1 pályaelem is lehetne.
Érdemes lehetne talán egy tömbben tárolni a pályát és abban átírni mindig, ha valami változás történik a pályán. Így még utána is lehetne variálni, milyen videomód legyen, de alighanem az attribútum mód tűnik a legjobbnak, esetleg a karakteres mód, de azt is át lehet állítani gracha módra majd, akkor egy karakteren belül több szín is lehet, de összességében kevesebb szín lenne és a felbontás is rosszabb lenne. Vagy mehetne 4 vagy 16 színű módban is, akkor különböző színű karaktereket egymásra lehet másolni és úgy látványosabb, de lassabb is lenne. De még mindig talán az attribútum mód a legjobb.
Érdemes lenne a játékteret a képernyő felső részére tenni, és alul lenne minden kijelző, és alul másmilyen színű/módú videolapokkal látványosabb lenne.
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.14. 15:22:26
Igazából a C64 BASIC-jén nincs sok minden érteni való, lévén csak egy nagyon alap nyelv. Amit érdemes tudni, az a gép működése, hogy mit és hová kell POKE-olni, hogy a grafikát és zenét működtetni lehessen. Ki tudom ezeket a dolgokat deríteni, de nincs benne rutinom a C16 vagy Plus/4 masinákkal ellentétben. Ráadásul most a melóban is jobban kell tempóznom, és a pluszin van egy hobbi projektem, amit szeretnék kiszenvedni végre magamból. Így nem szívesen kezdenék hozzá. :( Viszont a nyári két hetes szabadságomon valószínűleg tudnék belőle Plus/4-es változatot készíteni, csak az nem segít rajtad. ;)
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.14. 17:07:56
valószínűleg tudnék belőle Plus/4-es változatot készíteni, csak az nem segít rajtad. ;)
A Plus4-es basic emberközelibb lehet, mint a C64-es. Talán az is segíthet. (De pl. PRINT AT azon sincs, de mintha lenne helyette valami más, talán te írtad egyszer, de lehet, hogy más.)
De lehet, még mindig a nulláról lenne jobb megírni a játékot. Nem tudom, mennyire lesz hozzá indíttatásom, még meglátom.
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.14. 18:37:23
A basic reszhez szinte hozza se kell nyulni, szerintem ugy athuzhato ep-re, annyi, hogy c64 basic rugalmasan kezeli a space es a lezaro aposztrof hianyat. Print at nincs, ott a "-on beluli vezerlokarakterekkel pozicionalnak. Az erdekes resz, a gepi kodu betetekbol adodik, mag abbol , hogy a grafika, zene pokok hada.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.14. 19:12:56
Azt sem értem teljesen, hogy a Githubon (https://github.com/EgonOlsen71/uberswap) a basic mappában hogyan érhető el maga a program. Bal oldalon kikattintgattam azokat a nyilakat, és újabb programsorok is megjelentek. Az egészet copy-pastéval lemásoltam, itt van, remélem, nem maradt ki semmi:
[attach=1]
Néhány programsor kétszer szerepel, a régi verzió is benne van, pl. a 110-es sor ilyen. Nem tudom, a Githubon be lehet-e állítani, hogy csak a legutóbbi verziót mutassa. Ahogy nézem, mindenhol csak a go változó nevét írták át gz-re a régi verzióhoz képest. (Vagy fordítva, de gondolom, a piros a régi, a zöld az új verzió.)
A változók végén a % jelek a $ megfelelői?
Mindenképpen Commodore szaki kéne, hogy az a sok poke mit csinál.

PRINT AT hiányában az lehet érdekes, hogyan oldják meg, ha PRINT AT X,Y: van, amikor X és Y változó, de biztos erre is poke kell.
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.14. 20:06:36
Azt sem értem teljesen, hogy a Githubon (https://github.com/EgonOlsen71/uberswap) a basic mappában hogyan érhető el maga a program. Bal oldalon kikattintgattam azokat a nyilakat, és újabb programsorok is megjelentek. Az egészet copy-pastéval lemásoltam, itt van, remélem, nem maradt ki semmi:
(Attachment Link)
Néhány programsor kétszer szerepel, a régi verzió is benne van, pl. a 110-es sor ilyen. Nem tudom, a Githubon be lehet-e állítani, hogy csak a legutóbbi verziót mutassa. Ahogy nézem, mindenhol csak a go változó nevét írták át gz-re a régi verzióhoz képest. (Vagy fordítva, de gondolom, a piros a régi, a zöld az új verzió.)
A változók végén a % jelek a $ megfelelői?
Mindenképpen Commodore szaki kéne, hogy az a sok poke mit csinál.

PRINT AT hiányában az lehet érdekes, hogyan oldják meg, ha PRINT AT X,Y: van, amikor X és Y változó, de biztos erre is poke kell.
Magára az uberswap.bas fájlnévre kellett volna kattintanod. Az megnyitja a fájl aktuális állapotát. Amit néztél az egy eltéréseket összegző megjelenítés a legutóbbi változtatásokról, ami a go-ról gz-re átnevezés. Ezért is vannak benne duplázott sorok.

A % azt jelenti, hogy egész típusú numerikus változó, vagyis szám, aminek az értéke -32768..32767 lehet.

Ahogy azt szerintem már korábban is mondtuk és geco most is elismételte, a PRINT parancsban az idézőjelek közé zárt karakterlánc vezérlő karaktereket is tartalmazhat, mint kurzor fel, le, jobbra, balra, képernyő bal felső sarkába, képernyő törlés, kiírás színének megváltoztatása. Ezzel lehet pozicionálni a szövegeket a kép tetszőleges pontjára. Lásd a 35000-es sortól kezdődő szubrutint. Bár itt eltérő a kódolás attól, amit C64-en látnál, mert PC-n vagy böngészőkben a PETSCII grafikus karaktereket nagyon nehéz megjeleníteni.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.14. 21:03:31
A basic programot sikerült most már megjeleníteni rendesen:
[attach=1]

Quote
A % azt jelenti, hogy egész típusú numerikus változó, vagyis szám, aminek az értéke -32768..32767 lehet.
Akkor a % itt simán elhagyható EP-n.

Ha jól számoltam a videón, 26 sor van a képernyőn, így a kijelzők lentre rakása nem feltétlen jó ötlet, egyetlen sor maradna nekik, de lehet, úgy is jó lentre.

Ahogy azt szerintem már korábban is mondtuk és geco most is elismételte, a PRINT parancsban az idézőjelek közé zárt karakterlánc vezérlő karaktereket is tartalmazhat
Azt értettem, tudtam eddig is. Erre írtam a PRINT AT X,Y-t, ami neked kerülhette el a figyelmed. Pl. PRINT AT 5,10-nél 5 és 10 vezérlőkarakter kell, de X,Y-nál mindig eltérő számú kell, így az előre elkészített vezérlőkarakteres PRINT-ek nem jók. (Erre mondta valaki, vagy te, vagy más, hogy ilyenre van valami más utasítás, ha minden igaz.) De ez nem annyira fontos.
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.14. 22:05:54
C64 kepernyoje 40x25 alapbol, ezen novelni nem lehet, max sprite-okat lehet kirakni a keretre trukkel. A szelesseget lehet 38 karakterre csokkenteni, es raster interrupt segitsegevel lehet meg egyeb manipulaciot vegezni, de szerintem ez utobbi ketto nem fordul elo a basic programban.
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.15. 10:38:40
Megneztem, a gepi kodu resz nem csinal mast, mint fuggoleges/vizszintes elemcseret, ha lyuk keletkezett, akkor a lefele mozgatast, es a palya elmenteset/visszaallitasat, ugy fest, az osszes tobbi (zene/cursor sprite) pokolodik.
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.15. 14:38:25
. de X,Y-nál mindig eltérő számú kell, így az előre elkészített vezérlőkarakteres PRINT-ek nem jók.
Nem-e? Ehhez mit szólsz? PRINT "{ugrás bal felső sarokba}";LEFT$("{39*jobbra}",X);LEFT$("{24*le}",Y);A$
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.15. 15:30:40
Nem-e? Ehhez mit szólsz? PRINT "{ugrás bal felső sarokba}";LEFT$("{39*jobbra}",X);LEFT$("{24*le}",Y);A$
Áhá, szóval vannak ilyen kis finomságok is! Akkor most már kígyós karakteres játékot vagy karakteres pekment sem lenne olyan nehéz írni Commodore-ra! Bár ez off, én így képzeltem volna a PRINT AT-ot Commodore-on:

PRINT AT X,Y:A$

FOR A=1 TO X
PRINT "{jobbra}";
NEXT
FOR A=1 TO Y
PRINT "{le}";
NEXT
PRINT A$

az osszes tobbi (zene/cursor sprite) pokolodik.
Hang, zene van benne? A videón nem hallottam, de lehet, valami gond volt a géppel, pedig a hangerőt is feltoltam.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.15. 16:37:17
Első probléma, a sorszámok. Az eleje kivételével öt számjegyűek. Én egyesével átírnám kisebbre, mondjuk tízesével növekvőre. Ez azonban nem tesz jót a gosuboknak. Így még ezt megelőzően át lehetne írni az összes gosub-ot call eljárásra. Ahova a gosub ugrik, az lenne def blokknév, a return helyett meg end def lenne. Szerencsére a szöveges dokumentumban lazán megoldható, hogy az összes return-t end def-re írja át, és a gosub-ot meg call-ra, így kicsit kevesebbet kell majd pötyögni. Szóval én így esnék neki. Nem tudom, ennek a változtatásnak lehet-e bármilyen hátránya, pl. nem mindig az általunk értelmezett eljárás első sorára megy a call, vagy kiugrál, önmagát hívja meg vagy bármi, ami gosubbal még működik, call-lal már nem. Belső változók keletkeznének így, amit a Zzzip nem csíp, de majd kihozhatjuk őket a főprogram elé numeric után. Ahol THEN után van egyből RETURN, nyilván nem lehet END DEF-re cserélni, így pl. GOTO kéne, és egyelőre hagyni, ahogy van, és ha meglesznek a sorszámok, akkor kellene átírni.
Vélemény?
Feltettem ide (https://docs.google.com/document/d/1hzmeL08OTYn_4KiQh-fKZF8ny7SGiPkQqhCdi2hse8k/edit) a programlistát. Bárki megnézheti, de szerkesztéshez engedély kell. De meg lehet csinálni úgy is, hogy bárki szerkeszthesse, olyan még úgyse volt, max. jönnek ráérő internet-cowboyok és elrontják az egészet. Ha valaki szeretne engedélyt a szerkesztéshez, szóljon! Elvileg gmail kell hozzá.
Title: Re:Uberswap (C64)
Post by: SlashNet on 2021.March.15. 16:48:35
Ahol THEN után van egyből RETURN, nyilván nem lehet END DEF-re cserélni, így pl. GOTO kéne, és egyelőre hagyni, ahogy van, és ha meglesznek a sorszámok, akkor kellene átírni.

EXIT DEF doesn't work in this case?
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.15. 17:36:39
Bocs, zenet nem hallottam, csak egy effektet, igen, a sorszamok hosszuak, de mindegyik 0-ra vegzodik, igy az utolso 0 lecsipheto.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.15. 17:51:20
EXIT DEF doesn't work in this case?
Cool, I have just tried it, it works!

sorszamok hosszuak, de mindegyik 0-ra vegzodik, igy az utolso 0 lecsipheto.
Az a baj, van néhány nem 0-ra végződő is. És néhol pont egymás után jön három ilyen. Valamikor GOTO is van a környéken... Talán meg lehetne oldani, de én az ilyenekbe bele szoktam zavarodni. Ha mégis megoldanánk így, nem kéne CALL-DEF-ezni a GOSUB-RETURN helyett. Viszont a CALL-DEF mégis csak szebb, modernebb, strukturáltabb, enteresebb. Amíg átírom CALL-osra, legalább az illúzió megvan, hogy éppen C64-ről átírok EP-re egy basic programot (mintha enélkül nem tudna működni). :D
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.15. 18:48:18
Esetleg meg lehetne próbálni betölteni valamilyen PC-s fejlesztő eszközbe a forrást, mint például a C64Studio (https://github.com/GeorgRottensteiner/C64Studio) vagy a CBM .prg Studio (https://www.ajordison.co.uk/). Hátha azokban kedvedre át tudnád számozni a sorokat. Mondjuk sosem próbáltam még, de nem tűnik túlzott elvárásnak, hogy tudjanak ilyet.
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.15. 19:18:12
Erre jutottam a program nézegetése közben:
[attach=1]

A sorszámcserére meg van egy egyszerű megoldás, amit kicserélsz, az elé tegyél egy szót, a végén a szót eltünteted.
Title: Re:Uberswap (C64)
Post by: szipucsu on 2021.March.15. 20:36:25
Erre jutottam a program nézegetése közben:
Na, így már többet mond nekem is, legalább egy része érthetőnek tűnik. :D
Igen, túl egyszerű lett volna ez a sorszámcserés módszer, azért nem gondoltam rá.

Az elemek megcseréléséhez és potyogtatásához miért van assembly rész? Basicből is gondolom, meg lehetne oldani. Szebb a mozgása így?
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.15. 21:19:17
nem tudom, mert ket 2x2-es elem megcserelese meg siman mehetett volna poke-kal, nem lassitott volna annyit, viszont a fuggoleges oszlop mozgatas mar lassitott volna
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.16. 16:14:56
Nem vagyok biztos a dolgomban, de az elején van egy kódrészlet ami mintha megvárná míg a képernyő rajzolás az alsó keretre ér. Ha ezt folytonosan használja a program, akkor biztosan azért hogy a játéktér frissítését ne a kirajzolása közben végezze véletlenül. Egy BASIC-ben készített újrarajzolás nagyon belerondított volna a látványba, így kénytelen volt a szerző ezeket a dolgokat assembly-ben megírni. És ha már a nagyobb mozgatásokat megírta, akkor megcsinálta az egyszerűt is, hogy a program szerkezete egységesebb maradhasson. Mozgatás assembly SYS hívásokkal, minden más BASIC.
Title: Re:Uberswap (C64)
Post by: geco on 2021.March.16. 19:57:51
lehet en ertettem felre azt a kod reszt, en ugy ertettem, hogy a raszter regisztert a random generalashoz hasznalja.
Title: Re:Uberswap (C64)
Post by: ergoGnomik on 2021.March.16. 20:20:40
Simán tévedhetek. Nem néztem meg rendesen, csak felületesen belebele kukkantottam.