Download Game! Currently 81 players and visitors. Last logged in:CorrelKalaharHarrowedThorwor

Blitzer's Blog >> 71687

Back to blogs index
Posted: 06 Aug 2026 16:45 [ permalink ]
/ TC$mC$ on standardi, jonka kaikkien moottoreiden ON TOTEUTETTAVA.
export interface SimulationEngine {
    // 1. LATAAMINEN & ALUSTUS
    // Lataa pelisC$C$nnC6t (fysiikka, kosmos), kentC$n koon ja alustavat
resurssit.
    loadRules(config: SimulationConfig): void;
    
    // Lataa tietty pelikenttC$ ja siihen kuuluvat organismit (Petrimalja)
    loadState(state: SimulationState): void;

    // 2. SUORITUS
    // Ajaa N kappaletta tickejC$. Palauttaa tiedon, kuinka kauan (ms)
laskennassa kesti.
    tick(steps?: number): EngineMetrics;

    // 3. LUKU JA KIRJOITUS
    // Palauttaa ruudukon nykytilan (esim. 1D TypedArray muodossa nopeaa
renderC6intiC$ varten)
    getState(): EngineStateView;

    // Injektoi kesken ajon uuden organismin tai mutaation kentC$lle (pelaajan
vuorovaikutus)
    injectPattern(x: number, y: number, pattern: Pattern): boolean;
}

```

### 2. Standardoidut Tiedostomuodot (Resurssit ja Laajennukset)

Jotta kehittC$jC$t ja pelaajat voivat jakaa luomuksiaan (organismien
anatomioita, kenttiC$ ja laajennuksia), tarvitsemme ihmisluettavat, mutta
koneluettavaksi helposti kC$C$ntyvC$t standardit. YAML on tC$hC$n
tC$ydellinen.

Ehdotan kolmijakoista resurssimallia:

#### 2.1. `rules.yaml` (Fysiikka ja Laajennukset)

TC$mC$ tiedosto mC$C$rittelee **maailman lait**. SitC$ muokkaamalla voidaan
pelata tC$ysin erilaisia simulaatioita samalla moottorilla (esim. poistaa
lC$mpC6 kokonaan tai muuttaa sC$teilyn sC$C$ntC6jC$).

```yaml
version: "1.0"
namespace: "core.physics"

cosmos:
  star_mode: orbiting
  base_heat_input: 10
  entropy_loss: 1%

materials:
  - id: M # Moottori
    opacity: 0.8
    conductivity: 0.8
    capacity: 255
    code: "ENG:PUSH+" # Oletus ohjelma, jos ei ylikirjoiteta
  - id: H # Happo
    opacity: 0.5
    conductivity: 0.2
    capacity: 100
    code: "SEN:!:KILL"

```

#### 2.2. `genome.yaml` (Organismit ja Kuviot)

TC$mC$ on pelin "Pokedex". TC$nne ladataan pelaajien ja tekoC$lyn
suunnittelemat lajit. Ne voivat ylikirjoittaa `rules.yaml`:n oletuskoodit
(mutta eivC$t materiaalien fysiikkaa, jotta huijaaminen estetC$C$n).

```yaml
version: "1.0"
species: "Puskutraktori"
author: "blizuke"

pattern:
  width: 3
  height: 3
  layout: |
    .H.
    mMM
    .H.
  
  # Ylikirjoitetaan 'm' (kuolleen moottorin) kC$yttC$ytyminen suojakilveksi
  overrides:
    m: 
      code: "NOP" # No operation, toimii vain puskurina

```

#### 2.3. `petri.yaml` (PelikentC$t ja Skenaariot)

TC$mC$ tiedosto kokoaa sC$C$nnC6t ja lajit yhteen tietylle 2D-kartalle. TC$mC$
on "Level" tai "Match", jonka moottori lopulta ajaa.

```yaml
version: "1.0"
scenario: "Battle of the Bulldozers"
size: [128, 128]

imports:
  rules: "standard_physics.yaml"
  genomes:
    - "puskutraktori.yaml"
    - "happomato.yaml"

# KentC$n pohjakartta (biomassa ja geologia)
map_seed: "perlin_42" 

# Injektoidaan organismit aloituspaikoilleen
spawns:
  - species: "Puskutraktori"
    position: [10, 15]
    facing: "EAST"
  - species: "Happomato"
    position: [110, 100]
    facing: "WEST"

```

### 3. Arkkitehtuurin latausvuoro (Boot Sequence)

Kun standardit on lyC6ty lukkoon, moottorin (esim. C$sken tekemC$mme
JS-testimoottorin) latausvuoro toimisi aina samalla, ennustettavalla tavalla:

1. **Core Loader:** JC$rjestelmC$ kC$ynnistyy ja valitsee kC$ytettC$vC$n
moottorin (esim. kC$yttC$jC$ valitsee valikosta "WASM Engine").
2. **Resource Parsing:** JC$rjestelmC$ lukee `.yaml` -tiedostot (SC$C$nnC6t
$\rightarrow$ Genomit $\rightarrow$ Skenaario) ja kC$C$ntC$C$ ne moottorin
ymmC$rtC$mC$C$n 1D-binC$C$rimuotoon.
3. **Bootstrapping:** JC$rjestelmC$ kutsuu moottorin `loadRules()` ja
`loadState()` -metodeita ja injektoi binC$C$ridatan suoraan moottorin Typed
Array -muisteihin.
4. **Runtime:** JC$rjestelmC$ alkaa kutsua moottorin `tick()` -metodia ja
piirtC$C$ `getState()` -metodin palauttaman 1D-taulukon ruudulle (ASCII,
Canvas tai WebGL).