Files
novafarma/docs/design/OPEN_WORLD_PLAN.md
2025-12-12 13:48:49 +01:00

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

  1. 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!).
  2. 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], uporabimo this.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 Origin verjetno š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.