Wednesday, 18 January 2023

Enterprise - TVC basic konverzió: Gengszter

Nem olyan régen átírtam Enterprise basicből TVC basicbe a Gengszter című szöveges kalandjátékot. Elég keveset kellett módosítani átírásnál. Leírom a tapasztalataimat.

A Gengszter című basic szöveges kalandjáték átírása Enterprise-ról TVC-re nem volt túlságosan elhúzódó folyamat. Először törölni kellett az Enterprise specifikus részeket, az állapotsor eltűntetése és a billentyűhang bekapcsolása, az első sorban a PROGRAM utasítás, ami TVC-n nem létezik. Mivel Enterprise-on nincsenek alapból ékezetes karakterek, így először megvizsgálta a program, van-e ilyen bővítés, és ha nincs, akkor átdefiniálta a szükséges karaktereket. A funkcióbillentyűket is átállította, hogy a játékban előforduló parancsokat egy gombnyomással el lehessen érni, valamint a funkcióbillentyűk új funkciójáról egy színes csík tájékoztatott a képernyő alján. Ezekre nem volt már szükség.

Az Enterprise egyszerre több változónak is adhatja ugyanazt az értéket, pl. LET A,B,C=1, ahol mind a három változó értéke 1 lesz. TVC-n ez nem lehetséges, ott külön meg kell adni, hogy LET A=1:LET B=1:LET C=1. Egy-két ilyen volt a programban, ezeket át kellett írni.

A TVC-s gépkönyv szerint az ON GOTO utasítás továbblép akkor, ha a kívánt érték nem szerepel benne, ez valójában hibát okoz. Emiatt minden ON GOTO sor végére kellett egy ELSE GOTO [következő sor száma]

Enterprise-on egyszerűen egymás mellé lehet tenni a PRINT után több stringet is, szóközzel elválasztva. TVC-n ez hibát okoz, a szóközt ;-re kell cserélni. 1-2 ilyen volt a programban. Az egyik helyen mást is módosítottam: amikor arról tájékoztat a játék, hogy milyen irányba tudunk menni, mindig vesszőt tett az irányok közé, és az utolsó irány után is. Ezt a vesszőt kivettem, helyette – került minden irány elé, ez szebben is mutat.

Az Enterprise-os ékezetes karakterek teljesen máshol vannak, mint TVC-n, így ezeket is módosítani kellett a szövegekhez.

Két helyen volt WAIT 1 utasítás, mely 1 másodpercig várakozik. Ezeket átírtam FOR-NEXT ciklusos várakozásra.

Enterprise-on a képernyő szélessége 42 karakter, TVC-n 32. A problémát nem is ez okozta, hanem az, hogy a TVC nem kezdi új sorban azokat a szavakat, melyek nem férnek ki, hanem egyszerűen kettétöri őket. Így szóközöket kellett beszúrni és olykor elválasztójelről gondoskodni.

Enterprise-on külön színe van annak a szövegnek, amiben a gép informál, és annak, amikor mi írhatjuk be az utasításokat. Ez így is maradt, azonban teljesen más színek lettek. Az eredetihez közelítő sötétes-pirosas szín túl harsány volt. Továbbá, valamilyen rejtélyes oknál fogva a TVC-s változat az input színével írta ki közvetlen a játék indítása után a start szobás szöveget, ez elé külön be kellett tenni egy set ink utasítást.

LCASE$, LTRIM$, RTRIM$ - A TVC ezeket nem ismeri. Elegánsabb, ha ezek is benne vannak, de végső soron nagy problémát nem okoz a hiányuk.

STRING, NUMERIC -> DIM

TEXT 40 (EP-n 42 karakter szélességű szöveges lapot nyit meg) – GRAPHICS 4 (TVC-n 32 karakter szélességű szöveges-grafikus lapot nyit meg)

TEXT 80 (EP-n 80 karaktersor hosszúságú szöveges lapot nyit meg) – GRAPHICS 2 (TVC-n 64 karakter szélességű szöveges-grafikus lapot nyit meg)

Figyelni kell arra is, hogy TVC-n egy string hossza alapból maximum 18 lehet, míg Enterprise-on akár 132 karakter is. Ha 18 karakternél hosszabb stringre van szükség, akkor a DIM után fel kell tüntetni a stringet és meg kell adni a maximális hosszát TVC-n. EP-n is meg lehet határozni a string maximális hosszát, ezt a STRING utasítás után lehet megadni: STRING *200 M$. TVC-n: DIM M$*200.

 

SET STATUS OFF - A status sort kapcsolja ki EP-n. TVC-n értelmezhetetlen, törölni kell.

SET KEY CLICK ON - A billentyűhangot kapcsolja ki EP-n. TVC-n értelmezhetetlen, törölni kell.

LET T,A,AB=0 - TVC-n helyette: LET T=0:LET A=0:LET AB=0

EXIT FOR - A FOR ciklusból kiugraszt a NEXT utánra. TVC-n nincs, helyette GOTO kell.

Az összetett IF-es sor első feltételét vizsgálja csak meg az EP. Ha ez nem teljesül, nem is vizsgálja meg a másik feltételt az AND után:

 350 IF I<4 AND K(I,2)=1 THEN 340

TVC-n mindkét  részét megvizsgálja a feltételnek. Így ha a második része éppen nem értelmezhető, akkor hibát okoz. Ezért így kell átírni TVC-re:

  350 IF I<4 THEN IF K(I,2)=1 THEN 340

ON GOTO végére mindig ELSE kell, EP-n nem. A TVC dokumentációban is tévesen szerepel.

 

WAIT DELAY átírása: FOR ciklussá kell alakítani, kb. 1000-rel kell szorozni a másodpercek számát a ciklusváltozóban, pl.:

WAIT 1 - Egy másodpercet várakoztat.

Ebből lesz: FOR WAIT=1 TO 1000:NEXT

 

PRINT " ";EG$(J) ","; -nem fogadja el a TVC, helyette:

PRINT " ";EG$(J);","; - szóköz nem állhat a PRINT idézőjelei között, helyette ; kell TVC-n.

Overflow: M$ hossza 20 volt, sok volt TVC-n. EP-n a string hossza jóval több lehet.

No comments:

Post a Comment