Download Game! Currently 121 players and visitors. Last logged in:CroesusSebaotVenturusBatuul

Blitzer's Blog >> 71533

Back to blogs index
Posted: 25 Jul 2026 15:10 [ permalink ]
## HAUKI-GEM OMEGA-WEB v1.0 API Specification

Kaikki kommunikaatio tapahtuu asynkronisesti OMEGA-vC$ylC$n yli
JSON-objekteina.

### OSASIO 1: IN (ServeriltC$ Thin Clientille)

NC$mC$ ovat komentoja, joita MeshBASIC-serveri lC$hettC$C$ selaimelle.

**1. NC$yttC6 ja Puskurit (Display & Buffers)**

// Alustaa moottorin ja luo taustapuskurit
{ "cmd": "INIT_SCREEN", "w": 640, "h": 480, "bpp": 32, "buffers": 2 }
// Vaihtaa aktiivisen piirtokohteen (0 = nC$kyvC$ canvas, 1+ = offscreen
bufferit)
{ "cmd": "SWITCH_BUFFER", "id": 1 }
// Kopioi taustapuskurin sellaisenaan nC$kyvC$lle ruudulle
{ "cmd": "FLIP", "src": 1, "dest": 0 }
// Puhdistaa aktiivisen puskurin valitulla varilla (hex tai rgba)
{ "cmd": "CLEAR", "color": "#000000" }

**2. Tasot ja Kamera (Layers & Camera)**

// Luo uuden tason. Z-indeksi maarittaa piirtojarjestyksen.
{ 
  "cmd": "LAYER_CREATE", 
  "id": "world_layer", 
  "z": 10, 
  "flags": { "scrollable": true, "clickable": true } 
}
// Asettaa kameran maailmankoordinaatit (liikuttaa kaikkia 'scrollable'
-tasoja)
{ "cmd": "SET_CAMERA", "x": 1500, "y": 2000 }
// Vaihtoehtoisesti: Lukitsee kameran seuraamaan tiettya Spritea pehmeasti
{ "cmd": "TARGET_CAMERA", "target_id": "player_ship", "smoothness": 0.1 }

**3. Spritet ja Objektit (Sprites & Scene Graph)**

// Luo uuden spriten ja sitoo sen tasoon
{
  "cmd": "SPRITE_CREATE",
  "id": "unit_42",
  "layer_id": "world_layer",
  "asset_id": "units_spritesheet",
  "frame": 4,  // Indeksi spritesheetissa
  "x": 1500, "y": 2000,
  "flags": { "selectable": true, "clickable": true },
  "metadata": { "hp": 100, "type": "tank" } // Tallennettaan clientin muistiin
tapahtumia varten
}
// Client-side Tweening (Pehmea animaatio viiveella)
{
  "cmd": "SPRITE_MOVE",
  "id": "unit_42",
  "to_x": 1600, "to_y": 2000,
  "duration_ms": 500,
  "easing": "ease-out" // linear, ease-in, ease-out, ease-in-out
}
// Asettaa focuksen tai valinnan suoraan serverilta kasin
{ "cmd": "SET_SELECTION", "ids": ["unit_42", "unit_43"] }

**4. Resurssit ja Lohkot (Assets & Chunks)**

// Lataa bittikartta muistiin (URL tai Base64)
{ "cmd": "ASSET_LOAD", "id": "units_spritesheet", "type": "BITMAP", "data":
"url/or/base64" }
// Lataa maastolohko ja piirtaa sen Hardware Layerille
{ "cmd": "CHUNK_LOAD", "layer_id": "bg_layer", "cx": 0, "cy": 1, "data": "..."
}
// Vapauttaa lohkon tai resurssin muistista
{ "cmd": "FREE_CHUNK", "cx": 0, "cy": -2 }

### OSASIO 2: OUT (Thin ClientiltC$ Serverille)

**1. Hiiritapahtumat (Point-and-Click / RTS Control)**

{
  "event": "MOUSE_CLICK",
  "button": "left",
  "global_x": 320,  // Ruutukoordinaatti (kankaan sisalla)
  "global_y": 240,
  
  // Thin clientin Raycaster etsi korkeimman Z-indeksin 'clickable' olion:
  "hit_target": {
    "id": "world_layer",       // Osui maastoon (koska ei osunut keneenkaan
yksikkoon)
    "local_x": 1820,           // KAMERAN OFFSET ON JO LASKETTU MUKAAN!
    "local_y": 2240            // Tama on suora maailmankoordinaatti!
  },
  
  // Mita kayttajalla on juuri nyt aktiivisena valintana:
  "selection": [
    { "id": "unit_42", "metadata": { "hp": 100, "type": "tank" } }
  ],
  
  // Onko koko ruudun input-focus sidottu johonkin (esim. ohjattavaan
alukseen)
  "focus": null 
}

**2. NC$ppC$imistC6tapahtumat (Action Control)**

{
  "event": "KEY_DOWN",
  "key": "W",
  "modifiers": ["shift"], // ctrl, alt, shift
  "focus": "player_ship", // Jos focus on asetettu, serveri tietaa kuka painoi
kaasua
  "selection": []
}

**3. Clientin elinkaaritapahtumat (Lifecycle)**

// Kerrotaan serverille etta naytto on alustettu ja resurssit (kuten
aani/kuva) ovat ladattu
{ "event": "READY", "viewport": { "w": 640, "h": 480 } }
// Kerrotaan etta animaatio on paattynyt, serveri voi jatkaa logiikkaa
{ "event": "TWEEN_COMPLETE", "id": "unit_42", "x": 1600, "y": 2000 }

---

TC$llC$ mC$C$rittelyllC$ saavutamme tC$ydellisen vapauden. Voimme ajaa tC$llC$
`INIT_SCREEN` komennolla perinteisen tekstiseikkailun, VFB-pohjaisen Jupiter
Landerin tai monimutkaisen isometrisen RTS-pelin.
 Landerin tai monimutkaisen isometrisen RTS-pelin.