Skip to content

Dedicated Server: standalone game loader with web visualizer #383

@zed-assistant

Description

@zed-assistant

Summary

Implement a standalone dedicated server that loads ONI game DLLs without the full Unity game binary.

Related community requests: #60, #380

Architecture

  • Console .NET app (net48) loads Assembly-CSharp.dll via Mono runtime
  • Harmony patches replace Unity InternalCall methods (reuses test infrastructure from MultiplayerMod.Test)
  • Boots game world: Grid, singletons, state machines — no rendering required
  • HTTP server (HttpListener) exposes world state API
  • Web visualizer (React + Canvas 2D) renders the world in-browser

Current Status

Phase 1: Web Visualizer ✅ (PR #384, merged)

  • HTML Canvas world renderer with element/temperature/mass overlays
  • Zoom, pan, cell tooltips

Phase 2: Game DLL Loader ✅ (PR #385)

  • Loads all 191 elements from game YAML
  • Real WorldGen (SandstoneDefault, 256x384, seed-based)
  • SimDLL physics simulation running headless
  • Standalone Mono execution (no test runner needed)

Phase 3: World Simulation ✅

  • SimDLL ticking at 200ms intervals
  • Grid pointers wired to DLL-owned memory
  • Real biomes, temperature, mass from physics engine

Phase 4: Multiplayer (planned)

  • WebSocket transport for client connections
  • Command synchronization
  • Multiple connected visualizer clients

Run

export ONI_STREAMING_ASSETS="path/to/OxygenNotIncluded_Data/StreamingAssets"
arch -x86_64 mono DedicatedServer.exe

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions