Hei alle sammen, det er AL her. Velkommen til den første tittingen bak kulissene på Mortumus.
Mens Fin er begravd i servergruvene og slåss med databaser, abonnementer og all den skumle distributed-systems-trolldommen som holder verdenen i live, er jeg den i den andre enden som sørger for at hvert sverdhugg, hvert skritt, hver fakkelblaff og hvert stykke rustning faktisk ser bra ut og føles riktig på skjermen din.
Å bygge et dark fantasy MMO er ikke den typen ting du bare kan dra-og-slippe sammen fra en asset store. Den rå, oldschool-følelsen vi jakter — tyngden i kampene, knirkingen fra rustningen din, redselen ved å se en annen spiller i horisonten — oppstår bare når verktøyene under er bygd spesifikt for det. Så i dag trekker jeg forhenget til side og viser dere noen av de spesialbygde Unity-systemene vi har skrudd sammen på klientsiden: de som ingen noensinne vil se, men som alle vil kjenne.
La oss kjøre i gang.
Visuals, loot og PvP-personvern
Hvis det finnes én sannhet om MMO-spillere, er det denne: vi elsker gear. Og i et full-loot PvP-spill som Mortumus er gear ikke bare et dopamindrypp — det er informasjon. Hva noen har på seg, forteller deg hva de kan gjøre med deg.
Hold det hemmelig, hold det trygt — Equipment Visualizer
Tidlig innså vi at vi hadde et problem som mange MMO-er stilltiende ignorerer: hvis klienten kjenner den eksakte item-ID-en til hvert eneste utstyrsdel på hver spiller i synsfeltet, kan en ihuga juksemaker skrape det ut av minnet og vite dine eksakte stats før de bestemmer seg for å ganke deg.
Så Equipment Visualizer-en vår gjør noe litt paranoid. For din egen karakter leser den fra den fulle equipment-tjenesten — du ser alt om gearet ditt. Men for alle andre spillere leser den bare en strippet "visuals"-blob som serveren publiserer. Du ser sverdet, ikke stat-arket. Fremmedes item-ID-er forlater rett og slett aldri Fins server.
Det er en liten ting. Det gjør også memory-scraping-cheats mye mindre nyttige. God deal.
Animasjonsstakken
Skill-basert kamp lever eller dør med animasjonen. Hvis windup-en ikke er lesbar, kan du ikke reagere. Hvis treffet ikke lander, føles kampen vektløs. Hvis døden ser ut som at modellen bare… slår seg av, mister du halvparten av stemninga.
Player Animation Coordinator
Vi startet slik de fleste gjør: én kjempestor animation-controller-klasse som prøvde å håndtere alt. Bevegelse, trylleformler, død, treff, idles — alt i samme fil. Etter omtrent to uker var det kaos.
Så vi brøt det fra hverandre. Nå er Player Animation Coordinator et bittelite inngangspunkt som spinner opp en stabel av små, spesialiserte moduler: bevegelse, rotasjon, angrep, trylleformel, treffreaksjoner, død, idles. Hver modul eier én jobb. Hver modul er lesbar på egenhånd. Bugs tar minutter i stedet for timer å spore opp.
Renere kode for meg. Strammere kamp for dere.
Kampresponsivitet — Attack Animator & Spell Animator
Her er det klassiske MMO-problemet: server-autoritativ kamp er den eneste måten å stoppe juks på, men å vente på at serveren bekrefter hvert eneste cast føles som sirup.
Spell Animator-en vår jukser litt — men ærlig talt. Når du trykker spell-tasten, spilles cast-animasjonen umiddelbart — lokalt predikert, slik at det føles instant. Så validerer Fins server om castet faktisk var lovlig (cooldown ferdig, nok mana, gyldig target osv.). Bekrefter den, endres ingenting. Avviser den, bryter vi rent ut av det.
Attack Animator gjør den samme dansen for nærkamp, og skalerer til og med svinghastigheten til å matche den kadensen serveren sier våpenet ditt angriper med. Øynene dine ser responsiv kamp. Serveren ser en verden man ikke kan lyve for.
Det sweetspottet mellom "føles bra" og "spiller fair" er der hele dette spillet lever.
Rikets lyder
Lyd utgjør 50% av stemninga, og folk undervurderer alltid hvor mye arbeid det krever.
Sette atmosfæren — Audio Manager & Music Region System
Tradisjonelle spill har en tendens til å bytte musikk med et hardt klipp når du krysser en usynlig linje. Det er brått. Vi gjør det med 3D-polygonsoner. Music Region System lar oss male vilkårlig formede områder i verdenen — en hjemsøkt lund, et forbannet kapell, tilnærmingen til en boss — og når du går inn og ut, crossfader Audio Manager soundtracket mykt. Ingen klipp. Ingen omstart av samme spor hvis du tråkker over grensen.
Og fordi alt dette kjører gjennom poolede lydkilder med mixer-group-routing, koster det praktisk talt ingenting i frame budget.
Character Audio Manager
Hvert fottrinn i Mortumus er knyttet til karakterens animasjon og overflaten under deg — stein høres ut som stein, gjørme høres ut som gjørme. Spell-lyder er bundet til evnen, våpensvinger til våpenet. Character Audio Manager sitter mellom animasjons-eventene og Audio Manager slik at vi kan bytte inn nye SFX-pakker per rase/klasse uten å røre gameplay-kode.
Små ting. Mange av dem. De legger seg opp.
Vannkanten
Enhver dark fantasy-verden har vann. Sumper, elver, oversvømte ruiner, havet ved kanten av et forbannet nes. Og vann er en av de tingene som veldig lett ser falsk ut — spesielt der det møter land. Den stygge polygonale vannlinjen der meshet skjærer terrenget, er kjennetegnet på et spill som ser billig ut.
Vårt vanngrunnlag
Vi bygde ikke vannet vårt fra bunnen av. Unity leverer faktisk et fantastisk demoprosjekt kalt Boat Attack som inkluderer et av de beste URP-vannsystemene der ute: ekte refleksjoner, refraksjoner, oppdrift, hele pakka. Så vi startet med vannet fra Boat Attack som fundament, fordi det å finne opp det hjulet på nytt ville kostet oss måneder uten reell gevinst.
Men Boat Attack var bygd for, vel... båter. Fine, rene havkystlinjer. Kystlinjeoppførselen som ser flott ut på en sandstrand ser forferdelig ut rundt de gjørmete, sivbevokste, uregelmessige vannveiene vi faktisk vil ha i Mortumus. Så vi måtte gå kirurgisk til verks.
Den tilpassede shaderen — Water Shoreline
I stedet for å redigere Unity-pakken direkte (som ville gått i stykker ved hver oppdatering), skrev vi en tynn custom shader "WaterShoreline" som bytter ut bare den delen av pipelinen som er ansvarlig for kysten. Alt annet — refleksjoner, flow maps, caustics — kommer rett fra Boat Attack. Vi overstyrer bare det vi trenger.
De to store endringene:
Den harde 2-meter skum-cutoffen er borte. Boat Attacks standard skumbånd har en fast dybde-cutoff, som gir deg den ensartede "ringen av hvitt" rundt hver kyst. Vi erstattet det med en mykere falloff pluss et scrollende noise-felt, slik at skummet nå toner gradvis ut og brytes opp i organiske tunger og fingre i stedet for et perfekt bånd.
Myk kystlinje-alpha. Det problemet med den polygonale vannlinjen mot terrenget? Vi fader selve vannet til gjennomsiktig over den siste halve meteren med dybde. Vannlinjen forsvinner helt. Terrenget blir bare mørkere jo dypere det går under vann, akkurat slik en ekte våt kystlinje gjør.
Elvesystemet vårt
Greia med vannet til Boat Attack er dette: rett ut av boksen håndterer det hav vakkert, men det vet egentlig ikke hva en elv er. Vann kan kruse på stedet, men det kan ikke flyte nedstrøms og rundt en sving slik en ekte elv gjør. Det er et problem når halvparten av dark fantasy-verdenen din skal være sumpete, elvepreget og gjennomvåt.
Så vi bygde et elvesystem oppå det.
En elv i Mortumus er laget som en flow-sti — en enkel polylinje av punkter som følger elveryggen fra kilde til munning. Designere plasserer punktene der de vil ha vann til å flyte, og shaderen gjør resten: for hver piksel av vannoverflaten finner den ut hvilket segment av flow-stien som er nærmest, og bruker det segmentets retning som den lokale strømmen. Resultat: vann ved en rett strekning flyter rett, vann på innsiden av en sving kurver med svingen, og alt glir mykt over i hverandre.
Teksturene, normalene og skummet scroller alle langs den flow-retningen i stedet for å drive formålsløst rundt. Du kan faktisk se hvilken vei elva renner.
Alt sammen kan justeres live fra ShoreFoamTuner, en liten inspector-komponent vi dropper på enhver scene med vann. Slidere for skummykhet, noise-skala, noise-styrke, drift-hastighet, alpha-falloff. Endre stemninga til en hel innsjø uten å røre et materiale.
Community og trash talk: Chat & sosialt
Et oldschool MMO handler like mye om menneskene som om spillet. Hvis de sosiale verktøyene føles dårlige, føles verden tom.
Overhead Chat System
Tekst forankret rett over hodet til en karakter, som følger dem når de beveger seg og toner ut på avstand — det er en absolutt klassiker i sjangeren, og noe vi dør på en haug for å forsvare.
Det gjør grupper til faktiske samtaler. Det lar deg trash-talke noen midt i en kamp. Det lar de siste ordene til en døende spiller være noe dumt og morsomt i stedet for en systemlogg-linje. Overhead Chat System håndterer pooling, distance culling og anchor tracking slik at det skalerer selv når tjue folk skriker til hverandre i en trang dungeon.
Se bra ut
Vær ærlig — du kommer til å bruke en pinlig mengde tid på karakterskjermen. Det gjør vi alle. Det er det fineste speilet i spillet.
Karakter-forhåndsvisningssystemet
Paper doll-en vår er ikke en bakt 2D-render — det er en live 3D-scene rendret inn i en UI render texture. Full belysning, ekte geometri, hvert eneste utstyrsdel på deg i sanntid. Roter den, zoom inn, stirr på den. Det er den typen feature som ikke endrer gameplay i det hele tatt, og absolutt endrer hvordan spillet føles å eie.
Fylle sekkene: Icon Studio
Her er en liten skitten hemmelighet innen MMO-utvikling: ikoner. Du trenger hundrevis av dem. Hvert sverd, hver drikk, hvert stykke søppel-loot du finner i en kiste trenger sitt eget lille 64x64-kvadrat som er lesbart i et rotete inventar. Og de må alle se ut som de tilhører det samme spillet.
Du kan ikke bare ta et skjermbilde av en 3D-modell og kalle det en dag. Belysningen må være konsistent. Kameravinkelen må være konsistent. Og — dette er biten alle undervurderer — komposisjonen må matche rutenettstørrelsen itemet vil okkupere i inventaret. En 1x1-dolk og et 2x3-storsverdet trenger vilt forskjellige komposisjoner, ellers ser begge feil ut.
Vår løsning: Icon Studio
Icon Studio er et spesialbygd Unity editor-vindu vi har bygd slik at én person (vanligvis meg, mens jeg mumler) kan produsere hundre konsistente ikoner uten å miste forstanden.
Arbeidsflyten: slipp inn en liste med item-prefabs. Fortell verktøyet hvilken rutenettstørrelse hvert item okkuperer i inventaret — 1x1, 2x2, 2x3, 1x4, hva som helst. Still kameraet inn én gang. Lagre innstillingen som et preset. Trykk Generer.
Magien er at rutenettstørrelsen ikke er kosmetisk — den driver den faktiske renderen. Et 2x3-item rendres med 2x bredde og 3x høyde (av en 512px base), slik at når det sitter i inventaret ditt, er proporsjonene korrekte, ikke strukket. Et langsverd fyller virkelig et 1x4-slot diagonalt. En drikkflaske passer virkelig i 1x1. Inventaret føles som om du organiserer ekte gjenstander.
På toppen av det håndterer verktøyet: gjennomsiktige eller tilpassede bakgrunner per item, bone pose capture slik at skjelettbaserte items kan ta øyeblikksbilde av visningsposen sin uten å forstyrre gameplay-riggen, og presets for hele item-kategorier — alle økser rendres med samme kamera, alle drikker med et annet. Konsistens gratis.
Sluttresultatet er at hvert ikon i spillet — de som er lesbare ved 32 piksler i et tett inventar-rutenett — ble rendret fra den faktiske in-game-modellen, i den faktiske formen itemet tar opp i sekken din. Ingen outsourcet 2D-kunst. Ingen inkonsistent belysning. Ingen dolk som på en eller annen måte ser større ut enn et storsverd i UI-en.
Det er den typen verktøy ingen ser. Det er også grunnen til at inventaret ikke ser ut som en pose full av tilfeldig stock art.
Til neste gang
Ingen av disse systemene er overskriftsfeatures i Mortumus. Ingen kommer til å kjøpe spillet fordi skrittene høres bra ut eller fordi skjeletter eksploderer i fysikkbiter. Men dette er knoklene under alt — det usynlige arbeidet som sørger for at de store tingene føles riktig når de lander oppå.
Med dette fundamentet på plass kan Fin og jeg bygge den faktiske mørke, brutale full-loot-verdenen vi har skissert i notatbøker i to år — i et tempo som ikke får oss til å ville kaste datamaskinene våre i en elv.
— AL