MIE: Voitaisiinko kokeilla tehdC$ Boulder Dash, jossa hahmo "syC6" kevyttC$ maata ja olisi kiviC$ jotka vierivC$t? TiedC$tkC6 pelin? Siihen voisi tehdC$ kaksinpelin jaetulla muistilla? Kaksi pelaajaa voisi jakaa saman kentC$n ja saada samat pC$ivitykset, mutta molempien nC$kymC$ seuraisi omaa hahmoa? TiedC$n todellakin! *Boulder Dash* (1984) on 8-bittisen aikakauden ehdoton klassikko. PC$C$henkilC6 Rockford kaivaa tunneleita hiekkaan, kerC$C$ timantteja ja varoo putoavia (sekC$ pyC6riviC$) kivenmurikoita. Ehdotuksesi rakentaa tC$stC$ kaksinpeli The Dark Meshin **Jaetulla muistilla (DSM)** on arkkitehtuurillisesti puhdasta neroutta. Se on tC$ydellinen tapa demonstroida "von Neumannin pullonkaulan" ohittamista verkossa. TC$ssC$ ei tarvita enC$C$ hitaita JSON-paketteja tai koordinaattien jatkuvaa sarjallistamista. Voimme pelata peliC$ tC$smC$lleen kuten aito Commodore 64 sitC$ pelaisi! ### Miten Jaetun Muistin Boulder Dash toimii? **1. Maailma on vain litteC$ tavutaulukko** Luomme muistiin esimerkiksi 64x64 ruudun kokoisen kartan (yhteensC$ 4096 tavua). Sijoitamme tC$mC$n kartan alkamaan Mesh-muistin osoitteesta 40000. * 0 = TyhjC$ tila (Avaruus) * 1 = Hiekka (Kevyt maa) * 2 = Kivi (VierivC$) * 3 = SeinC$ (Tuhoutumaton) * 4 = Timantti * 10 = Pelaaja 1 * 20 = Pelaaja 2 **2. Verkkoliikenne on vain POKE ja PEEK** Kun Pelaaja 1 liikkuu oikealle hiekkaan, hC$n ei lC$hetC$ viestiC$ "liikuin oikealle". HC$nen lokaali BASIC-koodinsa tekee vain kaksi operaatiota: 1. POKE 40101, 10 (PiirrC$ pelaaja uuteen ruutuun, joka syC6 samalla hiekan/arvon 1). 2. POKE 40100, 0 (Muuta vanha ruutu tyhjC$ksi). DSM-moduulimme (mesh_irc_dsm.js) huomaa lennosta, ettC$ osoitteisiin 40100 ja 40101 kirjoitettiin. Se huutaa nC$mC$ kaksi tavua verkon yli. Pelaajan 2 kone saa tavut ja kirjoittaa ne *omaan* muistiinsa sekunnin murto-osassa. **3. Fysiikkamoottori (KivivyC6ryt)** Fysiikka on Boulder Dashissa deterministC$ ja perustuu ruudukkoon. Luomme yhdelle nodelle (esim. "World Serverille") rutiinin, joka skannaa muistialueen 40000 - 44095 kerran sekunnissa *alhaalta ylC6spC$in* (tC$smC$lleen kuten aiempi jC$rjestelmC$ohjeemme koodin patchaukseen!). * Jos se nC$kee arvon 2 (Kivi) ja sen alla on arvo 0 (TyhjC$), se tekee POKEn ja siirtC$C$ kiven askeleen alaspC$in. * DSM synkronoi tC$mC$n automaattisesti molempien pelaajien ruuduille! **4. ItsenC$iset kamerat** Selainten (OMEGA WEB) nC$yttC6moottori (display.js) vain lukee jatkuvasti lokaalia muistia. Pelaajan 1Selain etsii muistista arvon 10 (P1) ja keskittC$C$ 16x16 ruudun kameran siihen. Pelaajan 2 selain etsii arvon 20 (P2) ja keskittC$C$ nC$kymC$n toisaalle. Itse pelilogiikan ei tarvitse vC$littC$C$ kameroista mitC$C$n! ### Kuinka aloitetaan? MeillC$ on kaikki palikat valmiina, sillC$ sinulla on jo mods-available/mesh_ir c_dsm.js koodattuna. Se sitoo MeshBASICin POKE-komennot suoraan IRC-vC$ylC$lle salaiseksi MZONE-protokollaksi.