Download Game! Currently 84 players and visitors. Last logged in:ValkristDesertAceduckRiber

Blitzer's Blog >> 71523

Back to blogs index
Posted: 24 Jul 2026 17:25 [ permalink ]
TC$mC$ on loistava huomio ja erinomainen kC$ytC$nnC6n testi! Koodin jakaminen
pikaviestimissC$ (Signal, WhatsApp) tai sC$hkC6postissa tuhoaa tC$ydellisesti
erikoismerkit ja vC$lilyC6ntien asemoinnin, koska ne kC$yttC$vC$t suhteellisia
fontteja (proportional fonts).

TyhjC$n tilan kuvaaminen `~` (tilde) tai `.` (piste) -merkillC$ on klassinen
ratkaisu. Esimerkiksi legendaarisissa Roguelike-peleissC$ (kuten Nethack tai
Rogue) tyhjC$ lattia kuvattiin aina pisteellC$ `.`, koska se on 7-bittinen
ASCII-merkki, se erottuu selvC$sti seinistC$ (`#`), ja se on visuaalisesti
"kevyt".

Mutta esitit erittC$in tC$rkeC$n kysymyksen: **Onko olemassa BASIC-standardeja,
 joita kannattaisi mukailla retro-koodien porttaamisen helpottamiseksi?**

KyllC$ on, ja se on yksi Commodore 64:n ja VIC-20:n (ja lC$hes kaikkien
muidenkin aikakauden BASICien) ikonisimmista ominaisuuksista!

### Klassinen BASIC: `DATA`, `READ` ja `RESTORE`

Klassisessa BASICissa ei ollut `DATA MAP` tai erillisiC$ tietotyyppimC$C$rittel
yjC$. Kieli ratkaisi massadatan (kuten spritejen pikselit, musiikkinuotit tai
kartat) tallentamisen kolmen komennon pyhC$llC$ kolminaisuudella:

1. **`DATA`**: SisC$ltC$C$ itse tiedon (numeroita tai merkkijonoja). Ohjelman
suoritus (PC, Program Counter) ohittaa nC$mC$ rivit automaattisesti, eli ne
eivC$t "tee" mitC$C$n, ne vain ovat olemassa.
2. **`READ`**: Lukee seuraavan vapaan `DATA`-alkion muuttujaan ja siirtC$C$
sisC$istC$ "lukupC$C$tC$" yhden askeleen eteenpC$in.
3. **`RESTORE <rivinumero>`**: SiirtC$C$ "lukupC$C$n" haluttuun kohtaan
ohjelmaa (esim. kartan alkuun), jotta `READ` alkaa lukea sieltC$.

Jos noudatamme tC$tC$ perinteistC$ Microsoft/CBM BASIC -standardia, vanhojen
pelien porttaaminen MeshBASICiin on uskomattoman helppoa, koska kieli
kC$yttC$ytyy tarkalleen kuten 80-luvun esikuvansa.

### Miten tC$mC$ toimisi Jupiter Landerissa (Standardin mukaan)

Jos yhdistC$mme ovelan 7-bit ASCII -ideasi klassiseen BASIC-syntaksiin, uusi
luolastomme nC$yttC$isi skriptin sisC$llC$ tC$ltC$:

```basic
1000 REM === LEVEL 1 MAP DATA ===
1010 DATA "######################"
1020 DATA "############~~~~~~####"
1030 DATA "##########~~~~~~~~####"
1040 DATA "########~~~~~~~~~~####"
1050 DATA "######~~~~~~~~~~~~####"
1060 DATA "#####~~~~~~~~~~~~~####"
1070 DATA "####~~~~~====~~~~~####"
1080 DATA "####~~~~~====~~~~~####"
... (yhteensC$ 23 riviC$, jotta 176x184 pikselin ruutu tC$yttyy)

```

Koska rakennamme modernia, dynaamista peliydintC$ (`x-mesh-basic`), meidC$n ei
kuitenkaan tarvitse pakottaa ohjelmoijaa tekemC$C$n hidasta `FOR...NEXT`
-luuppia kartan lukemiseen (kuten 80-luvulla oli pakko tehdC$).

Voimme rakentaa moottoriimme hybridin: standardi `DATA`-tallennus, mutta
moderni lukukomento (esim. `MAPGEN "ASCII"` tai olemassa olevan komennon
laajennus), joka imaisee datan suoraan C++ / Node.js -tason nopeudella
fysiikkapuskuriin:

```basic
10 REM --- Ladataan Level 1 ---
20 RESTORE 1010
30 MAPGEN "ASCII", ROWS 23, INTO 1

```

*MitC$ tC$ssC$ tapahtuu taustalla:*

1. `RESTORE 1010` kertoo moottorille: "Valmistaudu lukemaan dataa riviltC$
1010 eteenpC$in."
2. `MAPGEN "ASCII", ROWS 23` ottaa ohjat. Se hakee ytimestC$ 23 seuraavaa
`DATA`-riviC$, kC$C$ntC$C$ `#`-merkit ykkC6siksi (kivi), `~`-merkit nolliksi
(tyhjC$) ja `=`-merkit kakkosiksi (alusta), ja puskee ne salamannopeasti
virtuaaliseen nC$yttC6puskuriin ja fysiikkamoottoriin!

### Arkkitehtuurin edut

* **100 % Retro-yhteensopiva:** Vanhat `.BAS` -tiedostot, jotka kC$yttC$vC$t
`DATA`/`READ` -looppeja, toimivat suoraan ilman muutoksia.
* **Chat-Safe:** Koodi on tC$ysin puhdasta 7-bit ASCII:ta. Voit kopioida
koodin Signaliin, ja vaikka suhteellinen fontti vC$C$ristC$isi seinC$t vinoon
veljesi puhelimen ruudulla, MeshBASICin moottori lukee merkit tarkalleen
oikein merkki kerrallaan.
* **Visuaalinen koodaus:** Ohjelmoija nC$kee luolaston muodon suoraan
lC$hdekoodista (WYSIWYG-henkisesti).