Download Game! Currently 131 players and visitors. Last logged in:ArnoldiFeatherlightNarcosisFloppy

Blitzer's Blog >> 71256

Back to blogs index
Posted: 04 Jul 2026 15:49 [ permalink ]
TC$mC$ on aivan huikea arkkitehtuurillinen hyppy! Siirrymme paljaan piin ja
reaaliaikaisen fysiikan mikromanageroinnista korkean tason hajautettuun
mikropalveluarkkitehtuuriin. Ja mikC$ parasta, olet jo rakentanut tC$lle
tC$ydellisen infrastruktuurin.

Kun katson tuota Mesh API -listaustasi ja LPC-koodiesimerkkejC$si (`idiot.c`),
tajuan heti mistC$ tC$ssC$ on kyse. Sinulla on kC$ytC$nnC6ssC$ modernisoitu,
hajautettu versio klassisesta **LPMud-pelimoottorista (MudOS/FluffOS)**!

* `hauki-lpc` (8077) toimii pelimoottorina (Driver), joka yllC$pitC$C$ olioita
(Clones), niiden tilaa ja sykkivC$C$ sydC$ntC$ (`heart_beat`).
* `mesh-object-store` (9000) toimii maailman tietokantana (huoneet, esineet,
seiniC$ kuvaava data).
* `mesh-async-queue` (4996) ja `ai-spooler` (11434) tuovat peliin asynkronisen
tekoC$lyn.

TC$ssC$ on konseptitason kokonaisvaltainen suunnitelma **"MeshMUD:
Cyber-Village"** -ympC$ristC6lle, jossa emme koske enC$C$ kertaakaan
muistiosoitteisiin, vaan operoimme puhtaasti korkean tason LPC-olioilla ja
API-kutsuilla.

---

### Vaihe 1: Maailman Rakenne (The Grid)

Koska olemme jo tehneet paljon VGA/ASCII-tason koodausta, pidetC$C$n
kC$yttC6liittymC$ erillC$C$n moottorista.
Luomme erillisen `viewer.py` tai `x-mesh-basic` -skriptin, joka on vain
"tyhmC$ nC$yttC6".

1. Se hakee `hauki-lpc` API:sta (`/clones`) kaikkien aktiivisten olioiden X-
ja Y-koordinaatit.
2. Se piirtC$C$ 80x24 ASCII-kartan pC$C$tteelle (tai VNC-ruudulle).
Esimerkiksi tyhjC$ on `.`, seinC$ on `#`.
3. Se piirtC$C$ hahmot koordinaatteihin: Pomo = `@`, Coder = `C`, Customer =
`$`.

TC$mC$ tarkoittaa, ettC$ maailman tila on tC$ysin eristetty. Hahmot vain
pC$ivittC$vC$t omia X/Y-koordinaattejaan LPC-moottorissa, ja Viewer vain
piirtC$C$ ne.

---

### Vaihe 2: Olioiden Ekosysteemi (HLPC Blueprints)

KC$ytetC$C$n suoraan `hauki-lpc` -palvelua. Jokaisella oliolla on sisC$inen
tila (vars) kuten `x`, `y`, `char` (merkki kartalla) ja `phase`.

**1. `pomo.c` (The Game Master)**

* **Rooli:** Valvoo maailmaa korkealta.
* **Logic (`heart_beat`):** Laskee kerran minuutissa, montako
`customer.c`-kloonia on elossa API:n kautta. Jos liian vC$hC$n, se tekee HTTP
POST -kutsun `hauki-lpc` `/clone/customer.c` luodakseen uuden asiakkaan
jonnekin satunnaiseen X/Y-koordinaattiin. Se voi myC6s generoida satunnaisen
"idean" (esim. *"Tee minulle verkkokauppa"*) ja injektoida sen asiakkaan
muistiin.

**2. `customer.c` (The NPC / Quest Giver)**

* **Rooli:** Hortoilee kylC$ssC$ ja etsii koodareita.
* **Logic (`heart_beat`):** * Arpoo suunnan (North, South, East, West) ja
pC$ivittC$C$ omaa `x` ja `y` arvoaan `/object/put` -kutsulla, jos ruudussa ei
ole seinC$C$.
* Tekee haun: "Onko vieressC$ni (sC$de 1 ruutu) ketC$C$n, kenen tyyppi on
'coder'?"
* Jos on, se poimii `pomo.c`:ltC$ saamansa tehtC$vC$n ja lC$hettC$C$ sen
koodarin inboxiin: `sync_request("/object/coder.c#1/inbox", {"msg": "Tee
minulle verkkokauppa"})`.
* TC$mC$n jC$lkeen asiakas poistuu kartalta (tekee `/object/rm` itselleen).



**3. `coder.c` (The AI Worker)**

* **Rooli:** Ollama-tekoC$lyn avattari kylC$ssC$.
* **Logic (`heart_beat`):**
* Tarkistaa `sizeof(inbox)`.
* Jos inbox on tyhjC$, se joko pysyy paikoillaan tai kC$velee satunnaisesti
kohti kahvilaa (tietty X/Y koordinaatti kartalla).
* Jos inboxissa on viesti ("Tee minulle verkkokauppa"), se vaihtaa tilansa
`phase = "THINKING"` (jolloin sen merkki kartalla voisi muuttua vaikka
`?`-merkiksi).
* Se tekee asynkronisen pyynnC6n (`async_request`) `mesh-async-queue`
-palveluun, joka ohjaa promptin `ai-spooler` (Ollama) palveluun.
* Kun Ollama vastaa (esim. 15 sekunnin pC$C$stC$), `coder.c` saa vastauksen
inboxiinsa. Se "tulostaa" vastauksen maailmaan (tallentaa sen logiin tai
huutaa sen lokaaliin chattiin) ja palaa takaisin `IDLE`-tilaan etsimC$C$n
uusia tC6itC$.



---

### Miksi tC$mC$ malli on ylivoimainen?

1. **TC$ydellinen Abstraktio:** Unohdamme `VMM`, muistiosoitteet ja
HEX-enkoodauksen. Kirjoitamme vain selkeC$C$ ihmisluettavaa LPC-koodia (`if (x
> 10) x = x - 1;`).
2. **Deterministinen hitaus:** Ollaman hitaus ei ole enC$C$ ongelma. Koska
MUD-maailma pC$ivittyy sykC$yksittC$in (esim. 1 sekunnin Heartbeat), on
tC$ysin luonnollista, ettC$ koodari-NPC "pysC$htyy miettimC$C$n" 15 sykC$yksen
ajaksi ennen kuin se puhuu.
3. **Skaalautuvuus:** `hauki-lpc` ja REST API -rajapinnat tarkoittavat, ettC$
voimme luoda maailmaan kymmeniC$ asiakkaita ja koodareita. Ne kaikki elC$vC$t
omaa elC$mC$C$nsC$ omissa hiekkalaatikoissaan.

Miten aloitetaan? Haluatko, ettC$ koodaamme ensin pelkC$n "tyhmC$n"
`customer.c` -LPC-skriptin ja visualisoimme sen kC$velemC$ssC$ ruudulla
asynkronisesti, vai rakennetaanko ensin se kartan piirtC$jC$ (Viewer), jotta
nC$emme mitC$ API:ssa tapahtuu?