2.4 KiB
2.4 KiB
🌍 Open World Strategy Plan
Roadmap za prehod iz statične mape v neskončen odprt svet (za razliko od Stardew Valley con).
1. Konceptualna Razlika
- Stardew Valley: Ima ločene "sobe" (Farm, Town, Beach). Ko greš čez rob, se naloži nova mapa (Loading Screen).
- NovaFarma (Cilj): Seamless Open World. Brez nalaganja. Igralec hodi v katerokoli smer in svet se generira sproti.
2. Tehnični Izziv: Chunk System (Koščki Sveta)
Ker računalnik ne more hraniti neskončne mape v spominu, moramo svet razdeliti na Chunke (npr. 16x16 ploščic).
📐 Arhitektura
-
Chunk Manager (
WorldSystem.js):- Spremlja pozicijo igralca (npr. Chunk X: 5, Y: 10).
- Active Window: Naloži samo 9 chunkov okoli igralca (Center + 8 sosedov).
- Generation: Če chunk še ne obstaja, ga generira s Perlin Noise funkcijo (deterministično - isti seed = isti svet).
- Unloading: Chunke, ki so daleč stran, odstrani iz spomina (vendar shrani spremembe!).
-
Perzistenca (Shranjevanje):
- Težava: Če posekam drevo v Chunku (100, 100) in grem stran, ter se vrnem, mora biti drevo še vedno podrto.
- Rešitev:
Delta Compression. Ne shranjujemo celega chunka, ampak samo razlike (npr.{ "100,100": { removedDecor: true } }).
3. Generacija Sveta (Biomi)
Za razliko od trenutne 100x100 mape, mora Open World imeti strukturo na velikem nivoju.
🌡️ Biome Map (Noise Layer 2)
Uporabimo drugi Perlin Noise z zelo nizko frekvenco (velik zoom) za določanje biomov/temperature.
- Noise < 0.3: ❄️ Snow Biome (Zalejeno, Jelke)
- Noise 0.3 - 0.7: 🌲 Temperate (Trava, Hrast - trenutni stil)
- Noise > 0.7: 🌵 Desert (Pesek, Kaktusi)
4. Implementacijskih Koraki
Faza 1: Refactor TerrainSystem na Chunke
- Namesto
this.tiles[100][100], uporabimothis.chunks = Map<string, ChunkData>. getTile(x, y)mora preračunati:chunkX = floor(x/16),localX = x % 16.
Faza 2: Dynamic Loading
- V
update()zanki preverjamo ali je igralec prečkal mejo chunka. - Če da → sproži nalaganje novih sosedov.
Faza 3: "Infinite" Koordinatni Sistem
- Ker JS nima težav z velikimi števili do 9 kintilijonov,
Floating Originverjetno še ni nujen, dokler ne gremo ekstremno daleč.
Zaključek:
To je velik tehnični preskok. Trenutna 100x100 mapa je "en velik chunk". Prvi korak je razbitje te logike na manjše enote.