Run the Python virtual GPU in one shell:
cd virtual_hw
uv sync
uv run virtualhw --scale 4
Run the game against it in another shell:
cd sw
make game
VOXEL_GPU_BACKEND=socket ./game
On macOS, build the desktop-safe test targets instead; the interactive game
uses Linux /dev/input/event* headers and devices:
cd sw
make tests
VOXEL_GPU_BACKEND=socket ./tests/renderer_static_test
Mirror commands to both the FPGA driver and the virtual GPU:
cd sw
VOXEL_GPU_BACKEND=tee ./game
Run the virtual GPU headless and dump frames:
cd virtual_hw
uv run virtualhw --headless --dump-dir /tmp/voxel_frames
Press T in-game to open chat, or press / to open chat already seeded with
a slash. Lines starting with / are parsed as commands:
-
Press
Tabwhile typing a command to cycle valid completions for the current word, e.g./physics set <Tab>cycles physics properties. -
Press
Upwhile chat is open to recall previously submitted text or commands; pressDownto move back toward the current draft. -
/time set dayor/time day -
/time set nightor/time night -
/gamemode set survivalor/gamemode survival -
/gamemode set creativeor/gamemode creative -
/gamemode set spectatoror/gamemode spectator -
/gm ...and/mode ...are shorthand aliases for/gamemode .... -
/physics set gravity 12.5,/physics set speed 6,/physics set jump_height 2,/physics set fly_speed 10, and/physics reset. -
/setblock <x> <y> <z> <block>edits one block. -
/fill <x1> <y1> <z1> <x2> <y2> <z2> <block>edits a region. -
/give <item> [count]or/give me <item> [count]adds items to the player's survival inventory. -
/items [page]lists names accepted by/give. -
Coordinates can be absolute integers or Minecraft-style relative values such as
~,~-1, and~3; block names use underscores, e.g.air,stone,glass,diamond_block. -
/killrespawns the player at spawn, preserving the current mode. -
/helpprints the supported command forms in chat.
VOXEL_GPU_BACKEND=hwis the default and uses/dev/voxel_gpu.VOXEL_GPU_BACKEND=socketavoids the kernel driver entirely../gamereads keyboard and mouse input from/dev/input/event*on Linux.- The input layer prefers relative mice, grabs pointer devices by default, and falls back to absolute VM tablet devices only when needed.
- Press
Escto pause and release the grabbed mouse; resuming gameplay re-captures it. - The pause menu can adjust render distance, mouse sensitivity, and FOV at runtime.
- Use
VOXEL_MOUSE_INVERT_X=1and/orVOXEL_MOUSE_INVERT_Y=1to flip axes. - Use
VOXEL_MOUSE_SENS=0.004to override mouse sensitivity at launch. - Use
VOXEL_MOUSE_GRAB=0to leave the guest cursor free, orVOXEL_MOUSE_ALLOW_ABS=0to disable absolute tablet fallback when a relative mouse is present. - World edits are saved under
../worlds/defaultwhen the game is launched fromsw/; setVOXEL_WORLD_DIR=/path/to/worldto use a different save root. - The save format keeps a small
world.metafile plus per-chunk snapshots inchunks/<x>_<z>.chk, layered on top of the procedural world seed.
If input only works under sudo, add your user to the input group and start
a new login session:
sudo usermod -aG input $USER
sw/READMEcovers the kernel module, renderer tests, and transport modes.hw/README.mdcovers Quartus / Platform Designer notes, including the Quartus 19.1 HDL-regeneration workaround for the SDRAM controller IP.virtual_hw/README.mdcovers the Python virtual GPU package and options.PROJECT_NOTES.mdis the active engineering note index; long historical debug ledgers live underdocs/notes/.