Enterprise Forever

:HUN => Konvertálás => BASIC programok átírása => Topic started by: szipucsu on 2021.January.03. 21:14:11

Title: Escape (TVC)
Post by: szipucsu on 2021.January.03. 21:14:11
Mostanában írtak egy másik basic programot is TVC-re, Escape a címe. Fut Geco szoftveres TVC emulátorán. A menüben benne van az irányítás:
[attach=1]
[attach=2]
Gondolkodtam, hogy át lehetne írni EP-re, a program listája alapján szinte át se kell írni. Van benne néhány poke, a 2896-os címre ír értékeket, ezzel azt lehet állítani, hogy az egymásra printelt karakterek felülírják egymást, vagy átlátsszon a később printelt karakter. EP-n a grafikus módokban alapból egymásra rakja a karaktereket, attribútum módban felülírja. (Tényleg, azt el lehet érni attribútum módban valahogy, hogy egymásra kerüljenek a karakterek? Vagyis ne törölje le ott az előző karaktert, ahol 0 a karakter pixelének az értéke?) Ha törölni akarjuk, tintaszínnel kell felülírni előbb, szóval ez nem lenne probléma.
Még a TVC-hez hasonló, 32 karakter széles videolapot kell megnyitni a játék átírásakor a 42 helyett, de ez is ujjgyakorlat. Így elsőre más átírni valót nem láttam, az egy sorba zsúfolt utasítások szétszedésén kívül.
Utána lehet extrásítani a hangot és a grafikát, pl. soronként változó palettával, gyűrűmodulációs színekkel.

Érdekes fogást használ arra a program, hogy egy karakteren belül több szín legyen. Ugyanabba a pozícióba printel egymásra két karaktert, de a második printelése előtt megváltoztatja a színt.

A program átírásának hátránya az lehet, hogy a karakterek egy picit kisebbek lesznek, mivel az EP-s karakterek egy pixellel alacsonyabbak. Nem tudom, hogyan lehet megcsinálni, hogy EP-n az összes karakter egy pixellel magasabb legyen. Valahogy tuti meg lehet, hiszen a szoftveres emulátorban is ilyen. Ha ez is meglenne, akkor a színeket leszámítva (bias) tökéletesen lehetne szinte emulálni a TVC-s 4 színű módot, hiszen a 32 karakter széles TVC-s videolapot előállítani gyerekjáték.

Geco, azt mennyire lenne bonyolult megcsinálni, hogy basic program is kirajzolja a képernyő aljára a már jól ismert ENTERPRISE feliratot a szép színes vonalakkal? Gondolom, jó sok PLOT kellene hozzá egy 16 színű videólapra.
Title: Re:Escape (TVC)
Post by: geco on 2021.January.03. 21:42:07
basicben nem lehet 10 pixel magas karaktereket elerni, mert a karakterkeszlet merete az ff szegmensen 9x8-as meretre van szabva, ha ez nem lenne,akkor is meg kene kuzdeni az EXOS LPT frissitesevel.
Az ENTERPRISE feliratot ugy tudnad legegyszerubben megcsinalni, hogy a 26. sorra nyitsz egy karakteres modot, 10 nem hasznalt karaktert atdefinialsz, es kiprinteled, a 27 sorra meg egy 16 szinu grafikus modot, es megrajzolod a vonalakat.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.04. 17:44:23
Na, ez azért durva TVC-n:

930 IF EL=1 THEN PRINT#0,AT EX,EY:MONSTER$:IF MOVE=1 THEN IF MAP(EX,EY)<>0 THEN EL=0:GOSUB3100:IF ENEMYLIVE(MAP(EX,EY))=1 THEN ENEMYLIVE(MAP(EX,EY))=0:GOSUB3120

A sorban a következő IF-et akkor nézi meg, ha az előző IF feltétele teljesült. EP-n valami ilyesmi lenne, de az END IF-ek hova kerülnek? Jól tippelem, hogy a végére? Már nem tudom követni:
Code: [Select]
930 IF EL=1 THEN
 931   PRINT #10,AT EX,EY:MONSTER$
 932   IF MOVE=1 THEN
 933     IF MAP(EX,EY)<>0 THEN
 934       EL=0:GOSUB 3100
 935       IF ENEMYLIVE(MAP(EX,EY))=1 THEN ENEMYLIVE(MAP(EX,EY))=0:GOSUB 3120
 936     END IF
 937   END IF
 938 END IF
Title: Re:Escape (TVC)
Post by: Tomato77 on 2021.January.04. 21:12:03
TVC-n nem tudom, de EP-n kipróbáltam: ha egy feltétel teljesül, akkor a kettőspont utáni parancsokat is végrehajtja, mintha az IF THEN - END IF szerkezeten belül lennének. Ha TVC-n is így van, márpedig rokon a két Basic, akkor jó a kódod, és az END IF-ek is jó helyen vannak.

Ezzel a sorral próbáltam ki, az "a"-t és "b"-t is kiírta:
Code: [Select]
10 IF 1=1 THEN PRINT "a":PRINT "b"
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.14. 17:54:26
Megcsináltam EP-re a TVC-s Escape játékot, és teleraktam EP-s extrákkal, amennyire tudtam. Ez mondjuk elég sokáig tartott, mert Geco 2 nap alatt írta át az Atic Atacot, és TVC-re is pár nap alatt írták át Spectrumról az International Karatét. Ez meg nekem majdnem két hét volt. Egyébként maga a játék nagyon jó, egy kicsit logikázni kell benne. Amíg kék a keret, addig nem lehet lépni még. Zzzippel lefordítottam, így várakozni se nagyon kell.
[attach=1]
[attach=2]
Ehhez kellett két envelope az escape szekvenciából. (A Zzzip nem szereti a törteket, envelope numbernél pedig törtet akartam megadni, így csak az escape szekvenciás módszer maradt, vagy a külön fájlból betöltése az envelope-nek, de ezt nem akartam.)
Elvileg ha 100-nál több ellenfél van a képernyőn, akkor leáll hibaüzenettel, de nem tudom, addig el lehet-e jutni. (Szerk: Most a 29. szintig jutottam el, ott 87 ellenfél volt.) A tömb mérete szerint kb. 768 ellenfél lehet, viszont a tömb összes elemének kezdeti értéknek 0-át kell adni, amit TVC-n meg lehet úszni, EP-n viszont sokat kell emiatt várakozni, így csak 100 elemnek adtam értéket a játék indulásakor.
Itt van egy régebbi változat, ami azért tetszik, mert valamit elszúrtam benne, de pont ezért lett kicsit más a szemük az ellenfeleknek, és néha piros lesz az egész ellenfél, ami elég jól áll nekik. Viszont itt nincs soronként változó paletta meg ilyenek, és a pálya utáni elszámolás is grafikus képernyőn történik még, így nem írják felül egymást az egymásra írt számok, ezt később attribútum képernyőre tettem.
[attach=3]
[attach=4]
Title: Re:Escape (TVC)
Post by: Zozosoft on 2021.January.14. 19:20:40
Le kéne kérdezni a gép nyelvét, hogy az Y az Y legyen vagy Z :oops:
Title: Re:Escape (TVC)
Post by: Ferro73 on 2021.January.14. 19:38:01
Lehetséges javaslatok?
Code: [Select]
  230 RESTORE 3060
  240 READ T1$,T2$,T3$,T4$,T5$

 3060 DATA "**** **** **** **** ***  ****"
 3070 DATA "*    *    *    *  * *  * *   "
 3080 DATA "**** **** *    **** **** ****"
 3090 DATA "**** **** *    **** **** ****"
 3100 DATA "**** **** **** *  * *    ****"
236 byte helyett 215 byte
Code: [Select]
230 LET T1$= "**** **** **** **** ***  ****"
231 LET T2$= "*    *    *    *  * *  * *   "
232 LET T3$= "**** **** *    **** **** ****"
233 LET T4$= "**** **** *    **** **** ****"
234 LET T5$= "**** **** **** *  * *    ****"

Code: [Select]
310 DATA 63,63,63,199,199,199,7,7,7,248,248,248,56,56,192,192a
Code: [Select]
  260 RESTORE 310sor helyére

340 sorig csak egyszer fút le.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.14. 19:51:14
Le kéne kérdezni a gép nyelvét
Azt hogyan lehet frappánsan? A WHEN... EXT "HELP BRD"... HANDLER kezdőknek való megoldás. :D Van valami rendszerváltozó, vagy valami, amiből könnyen kiolvasható?

Lehetséges javaslatok?
Persze, ezeket meg is csinálhatom majd a gép nyelvének lekérdezésével együtt. Az eredeti TVC programban volt így, én meg annak a szerkezetén nem igazán változtattam. Jöhetnek további javaslatok, ha vannak.
Title: Re:Escape (TVC)
Post by: Ferro73 on 2021.January.14. 20:00:13
További:
Code: [Select]
5000 DEF VIDEOINI
 5010   SET VIDEO X 32:SET VIDEO Y 1:SET VIDEO MODE 15
 5020   OPEN #1:"video:"
 5030   OPEN #2:"video:"
 5040   SET #1:PALETTE 32,254,111:SET #2:PALETTE 96,182,109
 5050   RESTORE 5110
 5060   FOR I=33 TO 54
 5070     OPEN #I:"video:"
 5080     READ J,K
 5090     SET #I:PALETTE J,K,217,123
 5100   NEXT
 5110   DATA 32,1,32,1
 5120   DATA 176,211,176,1
 5130   DATA 48,186,48,1
 5140   DATA 160,1,160,1,32,1
 5150   DATA 104,221
 5160   DATA 104,1,40,1
 5170   DATA 40,1,64,1
 5180   DATA 148,190
 5190   DATA 148,1,20,1,20,1
 5200   DATA 84,1,28,2
 5210   DATA 84,1,0,1
 5220   SET VIDEO MODE 1:SET VIDEO COLOR 1
 5230   FOR I=3 TO 24
 5240     OPEN #I:"video:"
 5250   NEXT I
 5260 END DEF
A DATA sorokat vagy a DEF-en kívül vagy a 5041-5059 sorba áthelyezni

Milyen "video:" a játék mező ATTRIBUTOM ?
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.14. 20:38:35
Milyen "video:" a játék mező ATTRIBUTOM ?
4 színű grafikus képernyő a játékképernyő. A menü képernyője is ugyanaz. Pontosabban soronként külön-külön videolap.
Amikor a szintek után "végelszámolás" van, az attribútum képernyő, ez van a DATA sorokban, amit idéztél. (DEF PALGAME - a játékmező palettája; DEF PALMENU - a menü palettája; a szintek közötti elszámolós képernyő palettája meg a VIDEOINI-ben van.)
Ez azért van így, mert a krampuszok szemének a villódzását úgy oldják meg (meg a lövést is), hogy nem írja felül egyik karakter a másikat, hanem ráír. Ezt csak grafikus módban lehetett EP-n megcsinálni, attribútum képernyőn nem. (Vagy ha meg is lehetett volna, az biztos jó bonyolult lehet, amiről lövésem sincs.)
Title: Re:Escape (TVC)
Post by: Zozosoft on 2021.January.14. 21:14:27
Azt hogyan lehet frappánsan? A WHEN... EXT "HELP BRD"... HANDLER kezdőknek való megoldás. :D Van valami rendszerváltozó, vagy valami, amiből könnyen kiolvasható?
144-es EXOS változó, de azt is WHEN blokkba kell rakni :-)
Ha nem létezik a változó, akkor angol.
Ha létezik, és értéke 0, akkor német, egyébként angol.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.14. 21:44:05
144-es EXOS változó
Köszi! Még az jutott eszembe, hogy megnézni ott, ahol a hibaüzenetek tárolódnak, hogy mi van. Pl. a Not understood / Nicht verstanden második betűjén megnézni, milyen bájt van. Ha "o", akkor angol, ha "i", akkor német. Vagy ez nem ilyen egyszerű? (Spanyol vagy magyar nyelvű gépnél megint más van ott, az biztos érdekes.)
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.14. 23:05:30
Ferro73 apró javaslatait megcsináltam, és most már elméletileg jó az irányítás is a Z és Y billentyűkkel angol és német gépen:
[attach=1]
[attach=2]
Én régen alapból úgy állítottam be az emulátort, hogy megcseréltem magamnak az y és z betűket, mert úgy kényelmesebb. Most aztán jól megjártam, mert most meg nekem nem jó sehogy sem a jó beállításokkal a játék. Ha minden igaz, de már teljesen belezavarodtam. Leellenőriztem uk és brd konfiggal is, elméletileg működik (nekem fordítva), de azért nézzétek meg, nálatok jól működik-e.
UI.: Közben eszembe jutott, az emulátorban is lehet betölteni/kimenteni keyboard configot az Options - Keyboard map menüpontban. Így visszaállítható az elállítgatás. A Clear All minden gomb működését törli, ez még nem tudom, miért lehet jó.
Title: Re:Escape (TVC)
Post by: geco on 2021.January.15. 09:34:34
Jópofa kis játék, és jók lettek az extrák, pláne a press space-nél a hang.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.15. 11:33:08
Nem lassú kicsit, pl. a játék indításakor? Vagy belefér? Igaz, nem is tudom, hogyan lehetne még gyorsítani.
Elég, ha 100 ellenség a maximum? A 30-as szint fölé nem tudom, el lehet-e jutni. Tényleg ciki lenne, ha az izgalmas játék 100 ellenség fölött hibával leállna. :D
Title: Re:Escape (TVC)
Post by: Ferro73 on 2021.January.15. 18:19:52
Javaslat:
Code: [Select]
5440 DEF PALGAME !LET C0=0:LET C1=10:LET C2=91:LET C3=41
 5450   RESTORE 5500
 5460   FOR I=3 TO 24
 5470     READ J0,J1,J3
 5480     SET #I:PALETTE J0,J1,C2,J3
 5490   NEXT I
 5500   DATA 0,130,121
 5510   DATA 64,130,233
 5520   DATA 8,130,105
 5530   DATA 72,18,41
 5540   DATA 8,18,97
 5550   DATA 64,18,41
 5560   DATA 0,146,105
 5570   DATA 32,146,233
 5580   DATA 96,146,121
 5590   DATA 40,146,233
 5600   DATA 104,146,105
 5610   DATA 40,210,41
 5620   DATA 96,210,97
 5630   DATA 32,210,41
 5640   DATA 0,210,105
 5650   DATA 64,154,233
 5660   DATA 8,154,121
 5670   DATA 72,154,233
 5680   DATA 8,154,105
 5690   DATA 64,218,41
 5700   DATA 0,218,97
 5710   DATA 32,218,33
 5720 END DEF
helyette:
Code: [Select]
5440 DEF PALGAME !LET C0=0:LET C1=10:LET C2=91:LET C3=41
 5450   RESTORE 5500
 5460   FOR I=3 TO 24
 5470     READ J0,J1,J3
 5480     SET #I:PALETTE J0,J1,C2,J3
 5490   NEXT I
 5495 END DEF
 5500 DATA 0,130,121
 5510 DATA 64,130,233
 5520 DATA 8,130,105
 5530 DATA 72,18,41
 5540 DATA 8,18,97
 5550 DATA 64,18,41
 5560 DATA 0,146,105
 5570 DATA 32,146,233
 5580 DATA 96,146,121
 5590 DATA 40,146,233
 5600 DATA 104,146,105
 5610 DATA 40,210,41
 5620 DATA 96,210,97
 5630 DATA 32,210,41
 5640 DATA 0,210,105
 5650 DATA 64,154,233
 5660 DATA 8,154,121
 5670 DATA 72,154,233
 5680 DATA 8,154,105
 5690 DATA 64,218,41
 5700 DATA 0,218,97
 5710 DATA 32,218,33
 5720 REM
Rengeteg felesleges memóriát használ fel és felesleges idő pocsékolás.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.January.15. 20:35:07
Javaslat:
Ennek tényleg lehet jelentősége, hogy a DATA sorok a DEF-en belül vannak-e vagy nem? Tudom, hogy külön a program végére illene tenni az összes DATA sort. Csak azért teszem oda, ahol a READ is van hozzá, mert úgy át tudom látni, mihez mi tartozik.
Title: Re:Escape (TVC)
Post by: Tomato77 on 2021.January.15. 20:53:05
Ennek tényleg lehet jelentősége, hogy a DATA sorok a DEF-en belül vannak-e vagy nem?
Mivel a Basic egy interpreter, időbe telik, amíg a DATA sorokat végigcsámcsogja a szubrutin végén és nem csinál velük semmit. Le lehetne tesztelni, mennyivel fut gyorsabban, ha nem a rutinon belül vannak. Zzzipnél lehet, hogy mindegy.
Title: Re:Escape (TVC)
Post by: Ferro73 on 2021.January.15. 22:07:14
Mivel a Basic egy interpreter, időbe telik, amíg a DATA sorokat végigcsámcsogja a szubrutin végén és nem csinál velük semmit. Le lehetne tesztelni, mennyivel fut gyorsabban, ha nem a rutinon belül vannak. Zzzipnél lehet, hogy mindegy.

Leteszteltem BASIC-ban gyorsabb.
Nem kell 2x átrágnia a DATA sorokat

Ennek tényleg lehet jelentősége, hogy a DATA sorok a DEF-en belül vannak-e vagy nem? Tudom, hogy külön a program végére illene tenni az összes DATA sort. Csak azért teszem oda, ahol a READ is van hozzá, mert úgy át tudom látni, mihez mi tartozik.
Az nem gond ha belül van. Az már igen ha 2x is betöltöd.
Először a RESTORE  beállítja a READ  DATA-it ez ok.
Majd megint a DATA sor előre beolvassa a memóriába  amit később kiolvashatsz READ-al. Mind addig amig nem jön egy RESTORE mer akkor törli ami a memóriában van.
Új variáció, Így szintén jó.
Code: [Select]
xxx1 RESTORE
xxx2 DATA 1,2,3,4
xxx3 READ A,B,C,D


Javaslat:
A
Code: [Select]
3880     GOSUB 4840
Mivel ez az egyetelen hivatkozás ezért a
Code: [Select]
4840 FOR K=1 TO 10
 4850   IF (K BAND 1)=0 THEN
 4860     SET #EX:INK 3
 4870   ELSE
 4880     SET #EX:INK 2
 4890   END IF
 4900   PRINT #EX,AT 1,EY:DEAD$;
 4910   SOUND PITCH K+32,DURATION 1,LEFT 96,RIGHT 96
 4920   SOUND SOURCE 1,STYLE 48,DURATION 3,INTERRUPT,PITCH 42+K*3,RIGHT 8*EY-1,LEFT 255-(8*EY-2)
 4930   FOR PPP=1 TO 120
 4940   NEXT PPP
 4950 NEXT K
 4960 SET #EX:INK 0:PRINT #EX,AT 1,EY:CHR$(159);:SET #EX:INK 2
 4970 FOR PPP=1 TO 600
 4980 NEXT PPP
15 sort 3871-3889 közé bezsufolhatod.
Title: Re:Escape (TVC)
Post by: Tomato77 on 2021.January.16. 00:09:49
Az nem gond ha belül van. Az már igen ha 2x is betöltöd.
Szerintem az is lassít, ha csak ott vannak a DATA sorok és nem olvassa be kétszer. REM sorok is lassítanák, amíg elérne az END DEF-ig. Egy compiler fordításkor észrevenné, de az interpreter futási időben foglalkozik ezekkel a sorokkal.
Title: Re:Escape (TVC)
Post by: Ferro73 on 2021.January.16. 20:54:02
Szerintem az is lassít, ha csak ott vannak a DATA sorok és nem olvassa be kétszer.
Lepróbáltam ha csak 1x fút a DATA sor(ok) akkor nincs jelentősége, hogy kint vagy bent.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.February.27. 16:42:52
A TVC-ról átírt Escape játékban javítottam pár dolgot. A szörnyek szemének villogásakor egy pixellel lejjebb volt a piros szem, mint kellett volna. A teleportáláskor a hang nem annyira volt jó. Volt egy felesleges értékadó ciklus a program elején, amiről azt hittem, kell, de nem kell, azt töröltem. A szörnyek mozgásakor és a bonus elszámolásakor az egyre magasabb hangok elméletileg előbb-utóbb hibát okoznak a sokadik szinten, mert túl nagy lesz az érték, ezt is javítottam (ehhez kellett volna a MIN függvény, de a Zzzip nem csípte). A kijelző második sorának színét is elméletileg megváltoztattam, de már nem tudom, milyen volt az előző.
[attach=1]
Majd csinálok egy végtelen lőszeres verziót, azzal lehet tesztelni, hogy viszi a sokadik szinteket.
Title: Re:Escape (TVC)
Post by: szipucsu on 2021.February.27. 21:32:56
Az előző nem volt még tökéletes, ez már remélhetőleg az. A pálya elején nem váltott kékre a keret arra az időre, amíg még nem léphettünk, most már átvált. Talán még valami apróságokat is ügyködtem rajta, de már nem tudom, mit. :D
Végtelen lőszerrel a 40. szinten is ment, de már negatív lett a pontszám, mert túllépte a Zzzip által megengedett értéket. De csalás nélkül a 30. szintre is csoda, ha eljut az ember. Ha 10 lőszerünk van és 10000 nagyságrendű a pontszám, akkor a score felirat S betűjét felülírja a lőszer száma. De ez csak elméleti probléma, ha el is ér valaki ekkora eredményt, biztos nem lesz már 10 lőszer csalás nélkül.
Végtelen lőszeres verziót nem teszek fel, könnyen előállíthatja, aki akarja. :D
Nagyon fontos mellékes kiegészítés, hogy minden gomb megnyomására (az irányítógombok kivételével) más hangot ad a játék, shift-tel együtt nyomva még érdekesebb. A funkcióbillentyűk hatása is fenomenális. Így szintetizátorként is használható, ha a játék esetleg unalmassá válna. (Még jó, hogy a SOUND PITCH ORD(A$) is működik, amikor A$=INKEY$.)
Az ESC-vel vissza lehet lépni a menübe.