LifeSimu – hubane 3D multiplayer-mäng saarestikul
Tänapäeva maailmas tekitab tehisaru korraga nii elevust, suuri küsimusi kui ka vastasseisu. Minu jaoks on see saanud eelkõige tööriistaks – süsteemiks, mis aitab muuta minu ideid töötavateks prototüüpideks ja päris projektideks.
Olen juba mõnda aega katsetanud programmeerimisega eri platvormidel ning õppinud samm-sammult, kuidas oma mõtteid digitaalsesse vormi panna. LifeSimu on selle teekonna üks viimaseid projekte: 3D-multiplayer-maailm protseduuriliselt loodud saarestikul, kus mängija saab avastada mägesid, randu ja veealuseid alasid, kohtuda teiste päris mängijatega ning liikuda nendega reaalajas samas maailmas.
Projekti tehnilise aluse moodustavad Three.js, TypeScript ja multiplayer-serveri lahendus Colyseus. Arenduses kasutan Claude Code’i, mille aluseks olev mudel on Claude Sonnet 5.
Tehisaru ei asenda minu ideid ega otsuseid. Pigem aitab see neid kiiremini katsetada, tehnilisi probleeme lahendada ning visiooni samm-sammult toimivaks maailmaks vormida.
LifeSimu keskmes ei ole võitlus, vastaste alistamine ega punktitabel. Keskmes on hoopis maastik, liikumine, atmosfäär ja tunne, et maailmas toimub päriselt midagi.
Saarestik, kus saab ronida, ujuda ja kohtuda teiste mängijatega
LifeSimu on hubane multiplayer-maailm protseduuriliselt loodud saarestikul. Siin tõusevad mäetipud üle orgude, liivarannad lähevad üle madalaks mereks ning vee all liiguvad haid, kilpkonnad ja teised vee-elanikud.
Mängija saab valida tegelase, ronida mäenõlvadel, jalutada rannajoonel või ujuda vee all. Kõik toimub reaalajas koos teiste mängijatega samas maailmas.
Paljud multiplayer-mängud alustavad lahingu, võistluse või punktisüsteemiga. LifeSimu lähtub teisest ideest: kõigepealt on maailm ja liikumine selles maailmas. Kas tegelane ronib mäenõlval, kõnnib rannas, ujub vee all või kohtub teel teiste mängijatega.
Mängu server hoiab kontrolli füüsika, liikumise ja mängijate asukohtade üle. See tähendab, et kõik mängijad näevad sama maailma ning teiste tegelaste liikumine on võimalikult ühtlane ja usaldusväärne.
Klient joonistab ainult seda, mida server on juba tõeks pidanud.
Mäetipust rannajooneni
LifeSimu maailm on umbes 3000 × 3000 ühiku suurune. Seal on kõrgemad mäetipud, orud, järsemad nõlvad, madalamad rannikualad ja ookean.
Maastik ei ole käsitsi valmis joonistatud, vaid tekib protseduuriliselt. See tähendab, et saarestiku kuju, kõrgused ja maapinna erinevad alad sünnivad reeglite abil. Nii saavad tekkida looduslikumad mäed, rannad ja madalikud.
Ka ookean ei ole lihtsalt sinine tasapind. Vee liikumine, valgus, taevas ja pilved aitavad luua atmosfääri, kus rannajoon ja meri näevad eri hetkedel pisut erinevad välja.
Eesmärk ei ole ainult tehniline efekt. Vesi, taevas, rannajoon ja mäed peavad koos looma koha, kus mängijal on mõnus lihtsalt ringi liikuda, avastada ja teistega kohtuda.
Ujumine ei ole lihtsalt kõndimine vee all
Üks LifeSimu olulisemaid hetki on see, kui tegelane liigub rannast või madalamalt nõlvalt vette.
Ujumine vajab eraldi loogikat. Vee all liigub tegelane teistmoodi kui kuival maal: gravitatsioon on väiksem, vesi hoiab tegelast pinnale lähemal ning tegelase sügavus sõltub sellest, kas ta liigub või seisab paigal.
Ujumise füüsika ja tegelaste mõõtkava lähtepunktiks on minu enda prototüübi põhjal loodud Mella-tegelane, kelle pikkus on 1,79 meetrit.
Viimaste arenduste käigus muudeti ka seda, kuidas mäng arvutab tegelase sügavust vees. Varem lähtuti pigem jalgade asukohast, nüüd kasutatakse keha keskpunkti. See annab loomulikuma tulemuse, eriti siis, kui tegelane ujub või jääb vee all paigale hõljuma.
Samuti on edasi arendatud tegelast jälgivat kaamerat, et mängija vaade oleks vee all rahulikum, loomulikum ja kaasahaaravam.
Tegelased, kellel on päriselu taust
LifeSimu maailm ei ole tühi. Lisaks mängijatele liiguvad seal ringi ka NPC-d.
NPC tähendab ingliskeelset väljendit non-player character ehk tegelane, keda ei juhi päris mängija. NPC liigub maailmas oma reeglite, tehisintellekti ja animatsioonide järgi. Näiteks võib ta jalutada, ujuda, otsida teed või lihtsalt maailmas ringi liikuda.
LifeSimu tegelaste taga ei ole ainult tehniline süsteem. Mitmed neist on seotud meie päriseluga.
Valitavad tegelased:
- Mella – minu enda prototüübi põhjal loodud tegelane, mis on ühtlasi mängu mõõtkava ja füüsika üks lähtepunkte;
- Lucas – minu poja järgi loodud valitav tegelane;
- Gadgeteer – valitav tegelane;
- Pinky – valitav tegelane;
- Alien – valitav tegelane.
NPC-d ja vee-elanikud:
- Tom – meie enda kassi järgi loodud NPC, kes liigub kuival maal;
- Kilpkonn – meie päris kilpkonna järgi loodud tegelane, ainult mängumaailmas suuremas mõõtkavas;
- Hai – veealune NPC, kellel on oma liikumisloogika;
- Kaheksajalg – veealune olend, mille lõi Lucas ise Meshy.ai keskkonnas.
Tom on eriti huvitav tegelane, sest tema liikumisloogika on arenduse jooksul palju muutunud. Alguses oli tema käitumine lihtsam, kuid ajapikku on ta saanud parema rajaleidmise oskuse.
See tähendab, et Tom peab suutma liikuda eri kõrgusega maastikul, vältida liiga madalaid alasid ning leida mõistliku tee mägede, randade ja kõrgemate piirkondade vahel.
Meshy.ai: fotost mängutegelaseks
LifeSimu 3D-mudelid on loodud Meshy.ai keskkonnas. See on andnud võimaluse muuta ideed või foto kiiresti mängumaailmas kasutatavaks 3D-mudeliks.
Meshy.ai abil saab näiteks kasutada fotot lähtepunktina, luua sellest 3D-kuju ning lisada mudelile hiljem luustiku ja animatsioonid. Nii saab tavalisest pildist või ideest edasi liikuda tegelaseni, kes suudab mängumaailmas seista, kõndida, ujuda või iseseisvalt ringi liikuda.
See on olnud eriti põnev LifeSimu tegelaste puhul. Mella on loodud minu enda prototüübi põhjal, Lucas on seotud minu pojaga, Tom on meie kass ning kilpkonn meenutab meie päris kilpkonna. Ka kaheksajalamoodi veealune tegelane ei ole lihtsalt valmisvara, vaid Lucase enda loodud olend.
Need detailid annavad mängule isikupära. LifeSimu maailm ei koosne ainult juhuslikest mudelitest, vaid sinna jõuavad meie enda inimesed, loomad, ideed ja looming.
Multiplayer ilma sõjata
LifeSimu multiplayer-osa ei tähenda lahinguid ega vastaste alistamist. Selle eesmärk on luua sotsiaalne kiht – tunne, et maailmas ei olda üksi.
Igal mängijal on oma kasutajanimi. Mängu sisenedes saab näha teiste mängijate nimekirja ning suhelda nendega reaalajas vestlussüsteemi kaudu.
Lisaks on olemas tegelaste reserveerimissüsteem. Kui keegi valib näiteks Lucase, reserveeritakse see tegelane lühikeseks ajaks. Nii välditakse olukorda, kus kaks mängijat satuvad samal ajal maailma täpselt sama tegelasena.
Rahulikust maailma avastamisest saab igal hetkel liikuda väikese tegevuse juurde. Üks selline minimäng on Star Game, kus mängijad otsivad maailmas laiali paiknevaid tähti.
Tähti ei teki lõputult. Server hoiab nende arvu piiratud, et otsimine oleks huvitav ka siis, kui samas maailmas liigub korraga rohkem mängijaid.
Mängitav ka telefonis
LifeSimu on loodud PWA-na ehk veebirakendusena, mida saab kasutada ka telefonis.
Mängu alguses hoolitsevad splash screen ja preloader selle eest, et vajalikud mudelid, tekstuurid ja muud varad jõuaksid kohale enne maailma sisenemist. Hiljem aitab vahemällu salvestamine mängu kiiremini avada.
Puutejuhtimine võimaldab LifeSimu maailmas liikuda ka mobiilseadmega. Nii ei ole mäng seotud ainult arvuti, hiire ja klaviatuuriga.
Arenduspäevik Git-ajaloos
Git-ajalugu näitab hästi, kuidas LifeSimu on kasvanud. See ei ole lihtsalt nimekiri tehnilistest muudatustest, vaid arengulugu, kus uued kihid on aja jooksul üksteise peale ehitatud.
Alus
Tegelaste ujumisanimatsioonid ja multiplayer-sünkroniseerimise parandused. See oli esimene hetk, mil vesi hakkas mängus päriselt tunduma.
Elustik
Maailma lisati uued NPC-d ja teavitused. Saarestik muutus kohaks, kus ei liigu ainult mängija.
Tehisintellekt
Tomi AI esimesed sammud. Lihtsast liikumisest kasvas välja rajaleidmine, mis peab hakkama saama ka siis, kui maailmas on korraga mitu mängijat ja NPC-d.
Tegelaste valik
Lisati tegelaste valimise ekraan ning võimalus see arenduse või testimise ajaks välja lülitada.
Visuaal
Ookeani lained liikusid arvutamiselt rohkem graafikakaardi abil töötavaks lahenduseks. Lisati Alien-tegelane ning täiustati animatsioone.
Kogukond
Lisati reaalajas vestlussüsteem ning parandati kasutajaliidest ja mobiilseadmete juhtimist.
Peensus
Ujumissügavuse arvutamine muutus täpsemaks, lisati hai ning täpsustati maastiku ja vee all liikumise reegleid.
Praegu
Jälgimiskaamera ja ujumise käitumine on muutunud immersiivsemaks. Samuti on lisatud automaatse sisselogimise võimalus, mis muudab testimise kiiremaks.
Projekt, mis kasvab koos minuga
LifeSimu on alles algusjärgus. Plaanis on lisada saarestikku rohkem objekte, rohkem tegevusi ja minimänge nagu Star Game. Lisaks tahan katsetada veel mitmesuguste ideedega, mis muudaksid maailma elavamaks, mängulisemaks ja huvitavamaks.
Areng peab olema pidev. Iga uus tegelane, objekt, animatsioon või mängufunktsioon annab võimaluse midagi õppida ja edasi mõelda.
Koos mänguga arenen ka mina. Sellise maailma loomine vajab palju mõttetööd, katsetamist, probleemide lahendamist ja valmisolekut oma varasemaid ideid muuta. Just see teebki selle projekti minu jaoks huvitavaks.
LifeSimu ei ole ainult tehniline katsetus. See on kasvav maailm, kuhu jõuavad minu enda ideed, minu prototüüp, mu poja looming ning meie päris elu loomad.
See on maailm, mis kasvab samm-sammult sügavamale – sõna otseses mõttes.
Proovi Sinagi mängu!
NB! Mänguseadme osas ei saa lubada, et see mäng igal arvutil/nutiseadmel ilma raskusteta jookseb, sest tegu on 3D-tehnoloogiaga.



