doom-jev
ViZDoom agent where Jev picks macro goal, target, movement, rotation, jump and fire at about 10 Hz from a YAML situation report.
Overview
DOOM-JEV is an autonomous Doom agent built on ViZDoom and Jev. It decouples the game's native 35 ticks per second from network inference: the simulation loop renders smoothly while an asynchronous inference loop queries Jev at about 10 Hz. Between decisions, a carry-hold actuation layer replays and adjusts actions with geometric tracking so no frames are dropped.
Perception turns the depth buffer, rendered labels and game variables into a YAML situation report using depth sampling, sector raycasting and line-of-sight filtering. Jev answers structured questions for macro goal, target, movement, rotation, jump and fire, returning choices with confidences. A hybrid control layer adds trigonometric aim tracking and a trigger lock, then maps everything to the eight-channel action array. A Rich terminal HUD shows live decisions.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | What should the macro goal be? | — |
| Choice | Which target should be engaged? | — |
| Choice | Which movement / rotation should be applied? | — |
| Yes / no | Should the agent jump / fire now?(inferred) | yes · no |
How it works
- Serialise game state into a YAML situation report
- Query Jev asynchronously at about 10 Hz
- Combine answers with geometric aim tracking
- Map to ViZDoom actions every tick
Strengths
- Smooth play despite network latency
- Clear split between model decisions and geometric control
- Live terminal HUD
Caveats
- Hobby project
- Requires a TypeSafe key
Getting started
python -m venv jevEnv, pip install -r requirements.txt, set the TypeSafe key, then python main.py.At a glance
- Type
- Project
- Status
- prototype
- Language
- Python
- Runtime
- ViZDoom + terminal HUD
- Has code
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
A ViZDoom Agent that uses Jev to choose movement, targets and firing from structured game state.
logicrw/awesome-jev-projects
Frequently asked questions
How often does Jev decide?
About 10 times per second, asynchronously from the 35 Hz game loop.
What does Jev control?
Macro goal, target, movement, rotation, jumping and firing.
How is aiming done?
With trigonometric tracking in code, not by the model.
Related projects
Source for browser chess and Chess960 where code computes each legal move's facts and Jev picks one per turn as a typed Choice.
ProjectproductionTypeScriptBrowser 1v1 sniper arena where Jev reads match state about 9 times a second and chooses movement, aim, ADS, firing and jumping.
ServicebetaTypeScriptInstrumented 2048 web lab where every move is a Jev Choice over four directions, with probabilities, latency and cost shown live.
ProjectbetaTypeScriptFifteen live arcade games where Jev and LLMs play each other, led by WikiRace in which Jev picks only real links.
ProjectbetaTypeScriptReal-time bot battles where you write a fighter's strategy in plain English and a System One model pilots it several times a second.
ProjectbetaTypeScriptBrowser extension that lets Jev, local Laya or an OpenAI-compatible model take over a running ra2web (WannaFire) RTS match.
ProjectbetaTypeScript