Help us shape the future of Go! Take the 2026 Go Developer Survey

dark-magic

module
v0.0.0-...-361b1e1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2026 License: MIT

README

Dark Magic

An open-source Diablo II: Lord of Destruction engine rewrite

Dark Magic is a clean-room engine rewrite targeting feature parity with Diablo II: Lord of Destruction Expansion 1.13c and 1.14d. The project aims to reproduce the game's authored behavior and presentation on a modern, deterministic, scriptable engine while making the systems underneath it easier to inspect, test, extend, and mod.

Dark Magic is under active development and is not yet a complete Diablo II replacement. It does not distribute Blizzard assets; running the real-asset client and tools requires legally obtained Diablo II game data.

How Dark Magic is developed

Most of Dark Magic has been implemented with repository-aware LLM coding agents under active maintainer direction. Agents are used for codebase analysis, research synthesis, implementation, tests, documentation, and repeated review passes. The maintainer sets the target, curates evidence, decides architecture, and remains accountable for every merged change.

This is not a bulk-generated “ship whatever the model wrote” codebase. Work is scoped to linked GitHub issues and milestone acceptance boundaries, checked against existing ownership rules, exercised by tests and real-asset tooling where appropriate, and revised or discarded when it does not hold up. Review focuses on the resulting evidence and maintainability, not whether every line was typed by hand.

Performance is handled deliberately. Egregious problems—unbounded work, repeated asset I/O, accidental quadratic paths, runaway allocation, or long owner-thread stalls—are corrected when discovered. Broader profiling and optimization passes normally follow coherent foundations, completed acceptance work, or milestone closure, when the code is stable enough to measure and worth tuning. Contributors are encouraged to use the same workflow described in CONTRIBUTING.md.

TODO: gameplay GIF — short loop showing real-asset game_world movement, combat, drops, UI, and world presentation.

TODO: labs GIF — short montage of Composite Lab, DT1/DS1 Lab, Monster Lab, Missile Lab, Mapgen Lab, Combat Lab, and Warp Lab.

Project direction

Dark Magic has one authoritative, renderer-independent game simulation shared by offline play, listen servers, dedicated servers, and Realm-managed games. The current focus is completing Diablo II gameplay on that foundation rather than building parallel implementations for each mode.

The project deliberately targets:

  • Expansion 1.13c and 1.14d feature parity. These releases share the core gameplay feature set; later patches added targeted fixes and platform changes. Known differences remain version-specific. Classic mode, other patches, and Diablo II: Resurrected are outside the product target. See the patch-history research for the evidence and its limits. Current owned game data and runtime probes are pinned to 1.14d; they do not by themselves verify 1.13c behavior.
  • Faithful, evidence-driven behavior. Mechanics are reconstructed from game data, repeatable observation, reverse-engineering research, and independent implementations rather than guessed where evidence exists.
  • One authoritative simulation. Networking, replay, checkpointing, offline play, and Realm play share the same gameplay boundaries.
  • Lua-owned Diablo policy, Go-owned engine mechanisms. The first-party d2legacy package defines Diablo rules; Go owns reusable simulation, rendering, transport, storage, audio, and lifecycle infrastructure.
  • First-class modding. Versioned capabilities, deterministic content layering, and extension packages are part of the architecture rather than an afterthought.

Live implementation status and ordered work are tracked in the Roadmap project, issues, and milestones. See ROADMAP.md for the stable high-level direction and docs/ARCHITECTURE.md for package ownership and dependency rules.

Client, server, and Realm

Dark Magic has three cooperating process roles. They share versioned content and session contracts, but each owns a different boundary.

Process Responsibility
client Native player-facing application. It owns input, windowing, audio, UI, rendering, local profiles, and asset/mod mounting. Offline and listen-server play can compose the same authority locally; remote play consumes authenticated, player-scoped views from a server.
server Headless authoritative game-session process. It runs one deterministic simulation, validates player commands, owns canonical world state, and produces checkpoints and bounded per-player projections. It can run standalone for self-hosted play or as a Realm-supervised worker.
realm Account and session control plane. It owns verified accounts, trusted Realm characters, channels and named games, worker allocation, admission, leases, checkpoints, durable commits, recovery, and audit. It allocates and supervises server workers but never executes gameplay ticks.

Realm is deliberately topology-neutral. Its first deployment contract uses PostgreSQL and ordinary server worker processes on one machine. The deferred cloud target adapts that same contract to a Cloudflare/HTTPS edge, Kubernetes ingress, managed PostgreSQL, and an Agones warm fleet of one-game server workers. Protected game assets remain outside container images and public storage and are mounted read-only only by game workers; native gameplay continues over QUIC/UDP. Cloudflare, Kubernetes, Agones, and the chosen cloud provider are deployment adapters rather than dependencies of Realm's domain logic.

Cloud deployment is a target, not a claim that production manifests or hosted infrastructure already exist. See the Realm overview, cloud deployment contract, and networking architecture.

Run the game and labs

Set MPQ_DIRECTORY to a legally obtained Diablo II installation or MPQ directory. The repository currently uses Go 1.25.

export MPQ_DIRECTORY=/path/to/diablo-ii
make play-game-world

Raylib is the default native client backend. An experimental Ebitengine build uses the same gameplay, Lua scenes, retained composer, logical input, and capture path:

go run -tags ebitengine ./cmd/client --start-scene ui_lab

Use make build-client-backends to compile both choices and MPQ_DIRECTORY=/path/to/diablo-ii make profile-render-backends for a matched, audio-muted A/B capture. See docs/PERFORMANCE.md for the current compile/runtime measurements, known Ebitengine parity gaps, and artifact layout.

The development labs are intentionally small entry points into production systems. They are useful both for contributors and for exploring what the engine can already do.

Entry point What it exercises Run it
Game World Authored world, player movement, camera, collision, UI make play-game-world
Combat Lab Production world + authoritative combat diagnostics make play-combat-lab
Monster Lab Typed monster records and composites make play-monster-lab
Missile Lab Typed missile records and presentation make play-missile-lab
Spell Lab Production assignment, casts, missiles, states, and summon families make play-spell-lab
Warp Lab Production movement, interaction, and level transitions make play-warp-lab
Composite Lab Player composite animation assembly go run ./cmd/client --start-scene=composite_lab
DT1 Lab Tileset decoding and inspection go run ./cmd/client --start-scene=dt1_lab
DS1 Lab Map stamps, authored tiles, objects, and collision go run ./cmd/client --start-scene=ds1_lab
Map Editor Standalone DS1 authoring tool; edit, preview, and atomically save tile layers go run ./tools/ds1-editor --output=/path/to/mod
Mapgen Lab Deterministic level-generation topology and decisions go run ./cmd/client --start-scene=mapgen_lab

Most visual scenes can also be captured locally through the Makefile capture targets. Captures remain outside the repository so original game imagery is not committed.

Where to look

The README is intentionally only an orientation guide. Detailed design, implementation notes, evidence, acceptance criteria, configuration, and tooling live with the documents and packages that own them.

If you are interested in... Start here
Current progress and next work Roadmap project, issues, and milestones
High-level product direction ROADMAP.md
Engine boundaries and package ownership docs/ARCHITECTURE.md
Diablo gameplay rules internal/content/d2legacy and its Lua modules
Deterministic game/session mechanisms internal/game
Client presentation and native rendering internal/presentation and internal/platform/desktop
Realm, accounts, sessions, persistence, and deployment docs/realm/README.md
Mod architecture and authoring docs/MODS.md, docs/MODDING_API.md, and the mod_template
Game-system research and fidelity evidence docs/research/GAME_SYSTEMS_INDEX.md
File-format provenance and codec policy docs/formats/SOURCE_MATRIX.md and CODECS.md
Developer inspection/capture tools internal/dev/tools and the Makefile
Process configuration docs/CONFIGURATION.md

At a high level, cmd contains composition roots, internal/game contains generic deterministic game mechanisms, and internal/content/d2legacy contains the first-party Diablo II rules/content package. There is intentionally no public Go API under pkg; independently versioned Diablo file codecs live in separate repositories.

Development

Run the main test suites with:

make test
make test-race

Before adding a long-lived engine component, read the architecture guide. Contribution expectations are kept in CONTRIBUTING.md.

Research, lineage, and community

Dark Magic exists because decades of Diablo II modders, preservationists, reverse engineers, tool authors, and independent engine developers documented behavior that the original executable kept implicit. The project descends from OpenDiablo2, but its current architecture and gameplay implementation are being rebuilt around Dark Magic's own boundaries and evidence requirements.

Principal research and corroboration sources include:

  • Paul Siramy's research and tools and the wider Phrozen Keep community, especially for maps, formats, editing/generation, animations, and engine behavior.
  • ThePhrozenKeep/D2MOO, a major reverse-engineered Diablo II 1.10f runtime reference.
  • jaenster/libd2, including independent 1.14d implementation evidence and strong retail-capture/holdout verification.
  • Riiablo, including format, composite, rendering, UI, quest, dialogue, and object research.
  • OpenD2 and AbyssEngine as independent behavioral and presentation references.
  • nokka/d2s, community data-format guides, historical patch notes, forum research, and the many tools and references cited in the repository's research ledgers.

These sources are evidence, not code-generation templates. Dark Magic restates behavior independently, respects source licenses, records version conflicts and uncertainty, and prefers repeatable observations of lawfully owned game data. Detailed provenance and confidence tracking live in the format source matrix, gameplay-systems source matrix, and research index.

If you have contributed research, tools, code, testing, documentation, or knowledge to the Diablo II community: thank you. Dark Magic is built on that shared body of work.

Join development and discussion on the Dark Magic Discord.

Directories

Path Synopsis
cmd
client command
Command client is the native client composition root.
Command client is the native client composition root.
realm command
Command realm is the Realm control-plane composition root.
Command realm is the Realm control-plane composition root.
server command
Command server is the authoritative game-session composition root.
Command server is the authoritative game-session composition root.
internal
acceptance
Package acceptance contains cross-system tests and architecture constraints that verify Dark Magic from its public process boundaries.
Package acceptance contains cross-system tests and architecture constraints that verify Dark Magic from its public process boundaries.
app/clientapp
Package clientapp assembles the interactive Dark Magic client and owns the lifetime ordering between native backends, Lua components, sessions, and UI.
Package clientapp assembles the interactive Dark Magic client and owns the lifetime ordering between native backends, Lua components, sessions, and UI.
app/clientsession
Package clientsession owns the transport-facing client side of one remote authoritative game session without depending on presentation or input implementations.
Package clientsession owns the transport-facing client side of one remote authoritative game session without depending on presentation or input implementations.
app/ds1editorapp
Package ds1editorapp assembles the standalone DS1 authoring tool.
Package ds1editorapp assembles the standalone DS1 authoring tool.
app/envconfig
Package envconfig installs and loads the per-process environment files used by Dark Magic composition roots.
Package envconfig installs and loads the per-process environment files used by Dark Magic composition roots.
app/filewatch
Package filewatch provides deterministic development-time directory polling.
Package filewatch provides deterministic development-time directory polling.
app/gameserver
Package gameserver composes one renderer-free authoritative game session.
Package gameserver composes one renderer-free authoritative game session.
app/headlessshell
Package headlessshell composes the shared administration shell for targets that do not own a renderer.
Package headlessshell composes the shared administration shell for targets that do not own a renderer.
app/host
Package host provides the explicit lifecycle boundary for Dark Magic's long-lived native and scripted components.
Package host provides the explicit lifecycle boundary for Dark Magic's long-lived native and scripted components.
app/hotreload
Package hotreload coordinates VFS invalidation and transactional Lua component replacement for development-time source changes.
Package hotreload coordinates VFS invalidation and transactional Lua component replacement for development-time source changes.
app/networkclock
Package networkclock maintains the client timelines derived from authoritative simulation ticks.
Package networkclock maintains the client timelines derived from authoritative simulation ticks.
app/networktrust
Package networktrust persists direct-game host identity and client TOFU pins.
Package networktrust persists direct-game host identity and client TOFU pins.
app/realm
Package realm owns game-worker allocation and lifetime, not gameplay state.
Package realm owns game-worker allocation and lifetime, not gameplay state.
app/realmportal
Package realmportal owns the browser-facing Realm experience.
Package realmportal owns the browser-facing Realm experience.
app/realmportal/assets
Package assets derives the small, allowlisted set of Realm portal images from the user's game archives and stores the results in a private cache.
Package assets derives the small, allowlisted set of Realm portal images from the user's game archives and stores the results in a private cache.
app/runtimeapi
Package runtimeapi exposes the narrow development-time component management surface.
Package runtimeapi exposes the narrow development-time component management surface.
app/serverapp
Package serverapp owns standalone game-server process composition below the deliberately thin cmd/server entry point.
Package serverapp owns standalone game-server process composition below the deliberately thin cmd/server entry point.
assets/catalog
Package assetcatalog verifies documented Diablo II asset knowledge against a content filesystem.
Package assetcatalog verifies documented Diablo II asset knowledge against a content filesystem.
assets/decode
Package assetdecode decodes presentation assets stored in Diablo II content archives.
Package assetdecode decodes presentation assets stored in Diablo II content archives.
assets/inspect
Package assetinspect provides a headless way to verify and describe assets from either a directory or an archive-backed fs.FS.
Package assetinspect provides a headless way to verify and describe assets from either a directory or an archive-backed fs.FS.
audio
Package audio defines the renderer-thread command boundary for audio.
Package audio defines the renderer-thread command boundary for audio.
branding
Package branding provides artwork embedded in Dark Magic binaries.
Package branding provides artwork embedded in Dark Magic binaries.
cache
Package cache provides the weighted, generation-aware cache used by engine subsystems that own decoded or uploaded resources.
Package cache provides the weighted, generation-aware cache used by engine subsystems that own decoded or uploaded resources.
content
Package content provides Dark Magic's layered game-content filesystem.
Package content provides Dark Magic's layered game-content filesystem.
dev/capture
Package capture records local visual-review artifacts without embedding game imagery in tests or source control.
Package capture records local visual-review artifacts without embedding game imagery in tests or source control.
dev/profiling
Package profiling captures reviewable performance artifacts for native runs.
Package profiling captures reviewable performance artifacts for native runs.
dev/testapps/shell command
Command shell is the renderer-free development harness for the same shell session that client, game-server, and realm adapters consume.
Command shell is the renderer-free development harness for the same shell session that client, game-server, and realm adapters consume.
dev/tools/bik_view command
Command bik_view validates and plays a BIK from a file, directory, ZIP, MPQ, or standard Diablo II MPQ directory without permanently extracting it.
Command bik_view validates and plays a BIK from a file, directory, ZIP, MPQ, or standard Diablo II MPQ directory without permanently extracting it.
dev/tools/cast_rate_probe command
Command cast_rate_probe validates and normalizes sanitized cast-timing observations from an owned Expansion 1.14d runtime.
Command cast_rate_probe validates and normalizes sanitized cast-timing observations from an owned Expansion 1.14d runtime.
dev/tools/curse_presentation_probe command
Command curse_presentation_probe validates and normalizes sanitized visual observations from an owned Expansion 1.14d runtime.
Command curse_presentation_probe validates and normalizes sanitized visual observations from an owned Expansion 1.14d runtime.
dev/tools/d2legacy_lua_test command
Command d2legacy_lua_test creates a readable sidecar suite for a d2legacy Lua module.
Command d2legacy_lua_test creates a readable sidecar suite for a d2legacy Lua module.
dev/tools/d2legacy_pack command
Command d2legacy_pack writes the embedded d2legacy content as a deterministic distribution archive.
Command d2legacy_pack writes the embedded d2legacy content as a deterministic distribution archive.
dev/tools/defense_outcome_probe command
Command defense_outcome_probe validates and normalizes sanitized visual observations from an owned Expansion 1.14d runtime.
Command defense_outcome_probe validates and normalizes sanitized visual observations from an owned Expansion 1.14d runtime.
dev/tools/ds1_editor_assets command
Command ds1_editor_assets converts generated source sheets into compact, palette-indexed DC6 frames owned by the standalone DS1 editor package.
Command ds1_editor_assets converts generated source sheets into compact, palette-indexed DC6 frames owned by the standalone DS1 editor package.
dev/tools/dt1_catalog command
Command dt1_catalog prints the renderer-independent identities contained in one or more DT1 files.
Command dt1_catalog prints the renderer-independent identities contained in one or more DT1 files.
dev/tools/env_config command
Command env_config installs or updates per-process Dark Magic environment files.
Command env_config installs or updates per-process Dark Magic environment files.
dev/tools/fire_golem_death_probe command
Command fire_golem_death_probe validates and normalizes an instrumented observation from an owned Expansion 1.14d runtime.
Command fire_golem_death_probe validates and normalizes an instrumented observation from an owned Expansion 1.14d runtime.
dev/tools/knockback_probe command
Command knockback_probe validates and normalizes sanitized observations from an owned Expansion 1.14d runtime.
Command knockback_probe validates and normalizes sanitized observations from an owned Expansion 1.14d runtime.
dev/tools/lua_syntax command
Command lua_syntax compiles Lua sources with the game's gopher-lua compiler (Lua 5.1 plus goto), so the check matches what the runtime can load rather than whichever system luac happens to be installed.
Command lua_syntax compiles Lua sources with the game's gopher-lua compiler (Lua 5.1 plus goto), so the check matches what the runtime can load rather than whichever system luac happens to be installed.
dev/tools/missile_audio_probe command
Command missile_audio_probe validates and normalizes sanitized audio/video observations from an owned Expansion 1.14d runtime.
Command missile_audio_probe validates and normalizes sanitized audio/video observations from an owned Expansion 1.14d runtime.
dev/tools/mpq2file command
Command mpq2file extracts one asset from a directory, ZIP, or MPQ source.
Command mpq2file extracts one asset from a directory, ZIP, or MPQ source.
dev/tools/party_xp_probe command
Command party_xp_probe validates and normalizes sanitized observations from an owned expansion 1.14d runtime.
Command party_xp_probe validates and normalizes sanitized observations from an owned expansion 1.14d runtime.
dev/tools/player_death_probe command
Command player_death_probe validates and normalizes sanitized visual observations from a probe-created character in an owned Expansion 1.14d runtime.
Command player_death_probe validates and normalizes sanitized visual observations from a probe-created character in an owned Expansion 1.14d runtime.
dev/tools/profile_check command
Command profile_check verifies scene diagnostic snapshots against tracked performance budgets.
Command profile_check verifies scene diagnostic snapshots against tracked performance budgets.
dev/tools/realm_acceptance command
Command realm_acceptance exercises the native Realm-to-worker session path.
Command realm_acceptance exercises the native Realm-to-worker session path.
dev/tools/render_backend_compare command
Command render_backend_compare summarizes matched native-backend profiles.
Command render_backend_compare summarizes matched native-backend profiles.
dev/tools/skill_behavior_coverage command
Command skill_behavior_coverage reports target Skills.txt behavior-family coverage from owned, mounted expansion 1.14d archives.
Command skill_behavior_coverage reports target Skills.txt behavior-family coverage from owned, mounted expansion 1.14d archives.
dev/tools/skill_evidence command
Command skill_evidence joins exact target skill rows to layered localized descriptions and cross-skill formula references.
Command skill_evidence joins exact target skill rows to layered localized descriptions and cross-skill formula references.
distribution
Package distribution owns product packaging defaults.
Package distribution owns product packaging defaults.
game/data/model
Package models defines typed representations of Diablo II's authored TSV records and the legacy token types referenced by those records.
Package models defines typed representations of Diablo II's authored TSV records and the legacy token types referenced by those records.
game/data/store
Package recordstore loads Diablo tabular records directly from layered content.
Package recordstore loads Diablo tabular records directly from layered content.
game/data/typed
Package typed binds one immutable generic record table to a caller-selected Go schema.
Package typed binds one immutable generic record table to a caller-selected Go schema.
game/ecs
Package ecs owns Dark Magic's deterministic entity simulation schedule.
Package ecs owns Dark Magic's deterministic entity simulation schedule.
game/session
Package session owns one transport- and renderer-independent authoritative game simulation session.
Package session owns one transport- and renderer-independent authoritative game simulation session.
game/simulation
Package simulation defines replay-stable primitives shared by offline and authoritative game simulation.
Package simulation defines replay-stable primitives shared by offline and authoritative game simulation.
game/world
Package world decodes deterministic gameplay facts from DS1 stamps and DT1 tilesets.
Package world decodes deterministic gameplay facts from DS1 stamps and DT1 tilesets.
game/worldgen
Package worldgen defines the generic, deterministic recipe boundary between a mod's world-generation policy and engine-owned world materialization.
Package worldgen defines the generic, deterministic recipe boundary between a mod's world-generation policy and engine-owned world materialization.
inputstate
Package inputstate defines backend-neutral, frame-stable input snapshots.
Package inputstate defines backend-neutral, frame-stable input snapshots.
loading
Package loading coordinates engine-owned work required by scene transitions.
Package loading coordinates engine-owned work required by scene transitions.
localization
Package localization loads layered Diablo string tables.
Package localization loads layered Diablo string tables.
logging
Package logging configures process-wide structured logging for Dark Magic.
Package logging configures process-wide structured logging for Dark Magic.
mapeditor
Package mapeditor owns editable DS1 source documents.
Package mapeditor owns editable DS1 source documents.
mod/d2legacy
Package d2legacy composes the canonical first-party gameplay mod on top of generic engine services.
Package d2legacy composes the canonical first-party gameplay mod on top of generic engine services.
mod/d2legacy/adapter/catalog
Package catalog exposes immutable, recovered Diablo II relationships to the d2legacy Lua mod.
Package catalog exposes immutable, recovered Diablo II relationships to the d2legacy Lua mod.
mod/d2legacy/adapter/entryworld
Package entryworld prepares the first authoritative d2legacy game world for every topology.
Package entryworld prepares the first authoritative d2legacy game world for every topology.
mod/d2legacy/adapter/mapgen
Package mapgen boots the authoritative d2legacy map-generation policy and transports its immutable recipes back to the generic engine materializer.
Package mapgen boots the authoritative d2legacy map-generation policy and transports its immutable recipes back to the generic engine materializer.
mod/d2legacy/adapter/movement
Package movement adapts native pointer and keyboard input into d2legacy player movement commands.
Package movement adapts native pointer and keyboard input into d2legacy player movement commands.
mod/d2legacy/adapter/player
Package player defines authoritative player entity materialization.
Package player defines authoritative player entity materialization.
mod/d2legacy/adapter/presentation
Package presentation adapts d2legacy's authored presentation documents at the client composition boundary.
Package presentation adapts d2legacy's authored presentation documents at the client composition boundary.
mod/d2legacy/adapter/worldobjects
Package worldobjects joins Diablo DS1 act-local identities to recovered and decoded d2legacy records.
Package worldobjects joins Diablo DS1 act-local identities to recovered and decoded d2legacy records.
mod/d2legacy/behaviorcoverage
Package behaviorcoverage inventories target Skills.txt server behavior signatures without inferring implementation support from resemblance.
Package behaviorcoverage inventories target Skills.txt server behavior signatures without inferring implementation support from resemblance.
mod/d2legacy/data/recovered
Package recovered parses declarative game relationships recovered by clean-room engine projects and carried in the first-party d2legacy mod.
Package recovered parses declarative game relationships recovered by clean-room engine projects and carried in the first-party d2legacy mod.
mod/d2legacy/skillevidence
Package skillevidence joins target Skills/SkillDesc records to layered TBL text and makes cross-skill formula references explicit for lawful research.
Package skillevidence joins target Skills/SkillDesc records to layered TBL text and makes cross-skill formula references explicit for lawful research.
modcache
Package modcache installs immutable mod packages and resolves user-selected profiles into an exact, dependency-ordered session set.
Package modcache installs immutable mod packages and resolves user-selected profiles into an exact, dependency-ordered session set.
paths
Package paths expands user-facing host paths consistently across supported operating systems while leaving virtual content paths untouched.
Package paths expands user-facing host paths consistently across supported operating systems while leaving virtual content paths untouched.
platform/desktop
Package desktop selects the native interactive client backend at build time.
Package desktop selects the native interactive client backend at build time.
platform/raylib/common
Package common contains shared support used only by Raylib platform adapters.
Package common contains shared support used only by Raylib platform adapters.
platform/raylib/input
Package input adapts Raylib keyboard, pointer, and controller events to the renderer-independent input capability.
Package input adapts Raylib keyboard, pointer, and controller events to the renderer-independent input capability.
platform/raylib/renderer
Package raylibRenderer owns the Raylib window, native renderer thread, textures, audio device, and presentation command execution.
Package raylibRenderer owns the Raylib window, native renderer thread, textures, audio device, and presentation command execution.
preferences
Package preferences owns validated, persistent client preferences.
Package preferences owns validated, persistent client preferences.
presentation/easing
Package easing preserves deterministic interpolation curves for presentation transitions and animation timing.
Package easing preserves deterministic interpolation curves for presentation transitions and animation timing.
presentation/maprender
Package maprender adapts immutable game-world tile placements into sparse presentation images.
Package maprender adapts immutable game-world tile placements into sparse presentation images.
presentation/navigation
Package navigation manages short-lived screens and overlays independently of the application component lifecycle.
Package navigation manages short-lived screens and overlays independently of the application component lifecycle.
presentation/render
Package render defines the backend-neutral retained composition model.
Package render defines the backend-neutral retained composition model.
presentation/scene
Package scene contains renderer-independent interactive scene state.
Package scene contains renderer-independent interactive scene state.
runtime/lua
Package modruntime hosts Dark Magic's serialized Lua execution environment.
Package modruntime hosts Dark Magic's serialized Lua execution environment.
shell
Package shell owns renderer-independent interactive shell sessions shared by graphical clients, headless game servers, and realms.
Package shell owns renderer-independent interactive shell sessions shared by graphical clients, headless game servers, and realms.
shell/luashell
Package luashell adapts a serialized Lua runtime to the shared shell core.
Package luashell adapts a serialized Lua runtime to the shared shell core.
shell/raylib
Package raylib presents a shared shell session inside the graphical client.
Package raylib presents a shared shell session inside the graphical client.
shell/tui
Package tui presents a shared shell session in a renderer-free terminal.
Package tui presents a shared shell session in a renderer-free terminal.
video
Package video defines the backend-neutral contract for cinematic playback.
Package video defines the backend-neutral contract for cinematic playback.
tools
ds1-editor command
DS1 Editor is a standalone content-authoring program.
DS1 Editor is a standalone content-authoring program.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL