
laya-duum is a focused, offline demo in which the Laya Core ML decision model
plays the pure-Python Duum engine from compact
semantic state. Rendered pixels are never sent to the model.
Proof of concept "jev" clone of doom playing system. But using laya. Uses python implementation "duum" and freedoom1.wad.
The repository contains only the Duum adapter, its tests and evaluation
artifacts, plus the freely redistributable freedoom1.wad. The Core ML model is
used from the sibling laya-coreml checkout so its 649 MB bundle is not copied.
From this directory:
uv sync
uv run --offline laya-duum \
--pilot laya-assisted \
--model ../laya-coreml/models/snake
The included freedoom1.wad is the default. To use another legally obtained
IWAD, pass --wad /path/to/file.wad.
Useful modes:
# Manual window
uv run --offline laya-duum --pilot manual
# Deterministic headless run
uv run --offline laya-duum --pilot scripted --headless --ticks 600
# Eight paired policy experiments
uv run --offline laya-duum-eval \
--model ../laya-coreml/models/snake \
--map E1M1 --ticks 3600
The interactive Laya view uses one window: game in the center, state and controls on the left, and model timing/probabilities on the right. Completed levels advance automatically.
See docs/DUUM_INTEGRATION.md for architecture, benchmarking, recording and replay details.
Adapter code is Apache-2.0. Duum is MPL-2.0 and remains an external dependency. The included Freedoom Phase 1 IWAD is distributed under Freedoom's BSD 3-Clause license; see FREEDOOM_LICENSE.txt.
Python
100.0%

laya-duum is a focused, offline demo in which the Laya Core ML decision model
plays the pure-Python Duum engine from compact
semantic state. Rendered pixels are never sent to the model.
Proof of concept "jev" clone of doom playing system. But using laya. Uses python implementation "duum" and freedoom1.wad.
The repository contains only the Duum adapter, its tests and evaluation
artifacts, plus the freely redistributable freedoom1.wad. The Core ML model is
used from the sibling laya-coreml checkout so its 649 MB bundle is not copied.
From this directory:
uv sync
uv run --offline laya-duum \
--pilot laya-assisted \
--model ../laya-coreml/models/snake
The included freedoom1.wad is the default. To use another legally obtained
IWAD, pass --wad /path/to/file.wad.
Useful modes:
# Manual window
uv run --offline laya-duum --pilot manual
# Deterministic headless run
uv run --offline laya-duum --pilot scripted --headless --ticks 600
# Eight paired policy experiments
uv run --offline laya-duum-eval \
--model ../laya-coreml/models/snake \
--map E1M1 --ticks 3600
The interactive Laya view uses one window: game in the center, state and controls on the left, and model timing/probabilities on the right. Completed levels advance automatically.
See docs/DUUM_INTEGRATION.md for architecture, benchmarking, recording and replay details.
Adapter code is Apache-2.0. Duum is MPL-2.0 and remains an external dependency. The included Freedoom Phase 1 IWAD is distributed under Freedoom's BSD 3-Clause license; see FREEDOOM_LICENSE.txt.
Python
100.0%