# 🌍 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`. - `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.