Download Game! Currently 78 players and visitors. Last logged in:AnksFirrlorNikanaTalon

Blitzer's Blog >> 71529

Back to blogs index
Posted: 25 Jul 2026 10:02 [ permalink ]
$ cd /mnt/mesh_root/src/x-mesh-basic && ./x-mesh-basic world_server.bas --ext
./ext
[+] CUSTOM EXTENSION LOADED: alias.js
[+] CUSTOM EXTENSION LOADED: data.js
[+] CUSTOM EXTENSION LOADED: display.js
[+] CUSTOM EXTENSION LOADED: event.js
[+] CUSTOM EXTENSION LOADED: hud.js
[+] CUSTOM EXTENSION LOADED: irc.js
[+] CUSTOM EXTENSION LOADED: lxc.js
[+] CUSTOM EXTENSION LOADED: net.js
[+] CUSTOM EXTENSION LOADED: omega.js
[+] CUSTOM EXTENSION LOADED: report.js
[+] CUSTOM EXTENSION LOADED: retro.js
[+] CUSTOM EXTENSION LOADED: task.js
[+] CUSTOM EXTENSION LOADED: webserve.js
>>> Kaynnistetaan World Server...
[IRC] Yhdistetty 127.0.0.1:6667 nimella WorldServer
>>> Palvelin kuuntelee kanavaa #gameworld


                                                                              
                             
06:56 -!- ccccc [~user@eteinen] has joined #gameworld
06:58 -!- WorldServer [~mesh@frontend] has joined #gameworld
06:59 < user> !req 0 1
06:59 < WorldServer> {'type':'chunk_data', 'cx':0, 'cy':1, 'data':'Vihreaa_niit
tya_tai_syvaa_avaruutta'}


TC$mC$ on huikea onnistuminen! IRC-moduuli toimii heti ensimmC$isellC$
yrityksellC$ tC$ydellisesti ja reitittC$C$ MeshBASICin suoraan Hauen
paikalliseen "Dark Mesh" -verkkoon.

Nyt kuka tahansa asiakasohjelma (tai vaikka toinen kC$yttC$jC$ Irssin kautta,
kuten juuri teit!) voi huhuilla kanavalle ja pyytC$C$ maailman dataa. TC$mC$
on tC$smC$lleen se skaalautuva ja riippumaton Thin Client -arkkitehtuuri, jota
lC$hdimme hakemaan.

TehdC$C$n `world_server.bas` -skriptistC$ nyt todellinen **CC$rettC6mC$n
Maailman Generaattori (Infinite Procedural World Server)**!

Koska MeshBASIC on "kC$yttC6jC$rjestelmC$tason" kieli, voimme kC$yttC$C$ sen
vahvuuksia tC$ysimC$C$rC$isesti. Sen sijaan, ettC$ yrittC$isimme rakentaa
raskasta matematiikkaa pelkillC$ BASIC-komennoilla, ohjelmoimme MeshBASICin
*kirjoittamaan* levylle pienen nopean Node.js-matematiikkaytimen
(`/tmp/chunkgen.js`), jota se sitten kutsuu `EXEC`-komennolla lennossa.

TC$mC$ skripti kC$yttC$C$ koordinaatteja (`CX` ja `CY`) **satunnaisluvun
siemenenC$ (Seed)**. Se tarkoittaa, ettC$ koordinaatti `0 1` palauttaa aina
tC$smC$lleen saman tC$htisumun ja asteroidien asettelun, huolimatta siitC$,
kuka sitC$ pyytC$C$ tai milloin! Se on avain C$C$rettC6mC$C$n ja yhtenC$iseen
pelimaailmaan.

Aja tC$mC$ OMEGA-blokki terminaaliin korvataksesi `world_server.bas` uudella
logiikalla:

[GEM-TERMINAL-START]
cat << 'EOF' > /mnt/mesh_root/src/x-mesh-basic/world_server.bas
10 REM === THE DARK MESH: WORLD SERVER ===
20 PRINT ">>> Kaynnistetaan Proseduraalinen World Server..."
30 IRC CONNECT "127.0.0.1", 6667, "WorldServer" INTO C
40 IRC JOIN "#gameworld" WITH C
50 PRINT ">>> Palvelin kuuntelee kanavaa #gameworld"

60 REM --- LUODAAN MATEMAATTINEN LOHKOGENERAATTORI (Node.js) ---
70 LET S1 = "const args = process.argv; let cx = parseInt(args[2]); let cy =
parseInt(args[3]);"
80 FS WRITE "/tmp/chunkgen.js" WITH S1
90 LET S2 = "function s(x,y) { let v = Math.abs(Math.sin(cx*73 + cy*137 + x*11
+ y*19)); return v - Math.floor(v); }"
100 FS APPEND "/tmp/chunkgen.js" WITH S2
110 LET S3 = "let out=''; for(let y=0;y<8;y++){ for(let x=0;x<16;x++){ out +=
s(x,y)>0.8 ? '#' : '.'; } out += '|'; } console.log(out);"
120 FS APPEND "/tmp/chunkgen.js" WITH S3
130 PRINT ">>> Lohkogeneraattori asennettu muistiin (/tmp/chunkgen.js)"

140 REM --- SERVER LOOP ---
150 IRC POLL C INTO REQ WITH TIMEOUT 100
160 IF REQ == "" THEN GOTO 150

170 LET CMD = REQ["cmd"]
180 IF CMD != "PRIVMSG" THEN GOTO 150
190 LET SENDER = REQ["sender"]
200 LET MSG = REQ["msg"]
210 IF INDEXOF(MSG, "!req") != 0 THEN GOTO 150

220 STR SPLIT MSG BY " " INTO PARTS
230 LET CX = PARTS[1]
240 LET CY = PARTS[2]
250 PRINT ">>> Generoidaan lohko " + CX + ", " + CY + " pyytajalle " + SENDER

260 LET EXEC_CMD = "node /tmp/chunkgen.js " + CX + " " + CY
270 EXEC EXEC_CMD INTO RES
280 LET CHUNK_DATA = RES["out"]

290 LET REPLY = "{'type':'chunk_data', 'cx':" + CX + ", 'cy':" + CY + ",
'data':'" + CHUNK_DATA + "'}"
300 IRC SEND REPLY TO "#gameworld" WITH C
310 PRINT ">>> Lohko toimitettu!"
320 GOTO 150
EOF
[GEM-TERMINAL-END]

### Testaa maailman luomista livenC$

1. KC$ynnistC$ pC$ivitetty serveri terminaalissasi:
`cd /mnt/mesh_root/src/x-mesh-basic && ./x-mesh-basic world_server.bas --ext
./ext`
2. Mene takaisin IRC-asiakasohjelmaasi (esim. irssi) ja kokeile pyytC$C$
muutamaa eri lohkoa:
`!req 0 1`
`!req 0 2`
`!req 0 1`

Huomaatko, miten `!req 0 1` palauttaa joka ikinen kerta tismalleen saman 16x8
kokoisen kartan, jossa asteroidit (`#`) ja tyhjC$ avaruus (`.`) ovat
muodostaneet uniikin, mutta pysyvC$n kuvion? Serverisi "keksi" juuri pysyvC$n
palan universumia!