gore

package module
v0.0.0-...-c6cf88e Latest Latest
Warning

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

Go to latest
Published: Aug 30, 2026 License: GPL-2.0 Imports: 19 Imported by: 0

README

go-doom/engine

go-doom / engine

6-arch CI CGO License

Pure-Go DOOM (id Tech 1, 1993) engine for bare-metal TamaGo + UEFI under the cloud-boot loader. Sibling of the go-quake1 family (go-quake1 / go-quake2 / go-quake3 — the id Tech 1/2/3 ports).

Fork origin

This repository is a fork of AndreRenaud/gore at commit 7dc6c65493b8a29e0b93dd00dac21a2f10a0068a (2026-05-11).

gore itself is a Go transpilation of doomgeneric performed with modernc.org/ccgo/v4 and then hand-cleaned. The engine has no CGO dependency, only standard library, and exposes its host bindings through a small DoomFrontend interface -- exactly the shape we need to wire DOOM into cloud-boot's virtio device tree.

The upstream README.md is preserved as README.upstream.md.

Why this fork exists

cloud-boot is building an OS-agnostic OCI boot architecture on top of TamaGo + UEFI. To showcase Phase 3 we want to run classic DOOM as the "OS payload", with rendering, sound, and input wired straight to virtio devices instead of SDL / X11 / a kernel.

This fork therefore adds:

  • backend/tamago/ -- a new DoomFrontend implementation that drives cloud-boot's virtio-gpu, virtio-sound, and virtio-input drivers (currently stub interfaces; real wiring lands once go-virtio/sound and go-virtio/input ship in their sibling sprints).
  • internal/embedwad/ -- an io/fs.FS shim that serves a WAD blob from memory, so the engine can load the IWAD without a real filesystem.

The upstream gore engine (doom.go, ~990 KB of transpiled code, plus doom_test.go) and its existing terminal / web / Ebitengine / SDL examples are kept verbatim, so we can rebase against upstream cleanly.

License boundary

  • The DOOM engine (doom.go, doom_test.go, LICENSE) inherits GPL-2.0-only from doomgeneric / gore. All cloud-boot additions in this repository (backend/tamago, internal/embedwad) are released under the same license, by necessity (linking + derived work).
  • The rest of the cloud-boot stack is BSD-3-Clause and is not affected: cloud-boot's bootloader, runtime, and host components do not import this package. The integration happens via a thin separate "livedoom" boot artifact whose only job is to call godoom.Run. That artifact will itself be GPL-2.0, isolated to a single directory in the cloud-boot/tamago-uefi tree.

Layout

.
|-- doom.go                     # upstream gore engine (transpiled DOOM)
|-- doom_test.go                # upstream gore reference-frame tests
|-- example/                    # upstream gore examples (termdoom, web, ...)
|-- backend/
|   `-- tamago/                 # NEW: DoomFrontend over virtio-gpu/sound/input
|-- internal/
|   `-- embedwad/               # NEW: io/fs.FS shim over an in-memory WAD
|-- PORT.md                     # Adaptation plan (read this)
`-- README.md

Status

Aspect Status
Pure Go (CGO=0) yes (engine + all new code)
Builds on Go 1.26.4 yes (lib + tamago backend + pure-Go examples)
Cross-compiles linux/amd64 yes (CGO=0)
Cross-compiles linux/arm64 yes (CGO=0)
Runs shareware DOOM1.WAD yes (engine ticks; verified via TestMenus harness)
TamaGo backend wired scaffold only; real drivers land in follow-up sprint
Music (MUS/MIDI + OPL2/OPL3 synth) yes -- pure-Go OPL path (see music/)
Multiplayer (netgame lockstep) yes -- protocol + lockstep (see netgame/)

Music and multiplayer (pure Go, CGO=0)

The chocolate-doom-faithful music and netgame paths ship as standalone, differentially-tested packages, all CGO-free and building on the six 64-bit arches:

Package Role
music/mus DMX MUS (D_* lumps) parse + mus2mid MUS->MIDI conversion
music/midi Standard MIDI File parser (port of midifile.c)
music/genmidi GENMIDI lump (the DMX OPL instrument bank) parser
music/opl Nuked OPL3 (Yamaha YMF262) emulator -> PCM
music/oplplayer MIDI + GENMIDI -> OPL register writes -> PCM (i_oplmusic)
netgame classic doomcom/ticcmd lockstep protocol + transport seam

The engine installs the OPL synth as its music_module (see music_opl.go); the host frontend pulls synthesised stereo PCM through gore.ReadMusicPCM.

Differential oracles. music/mus conversion is asserted byte-identical to chocolate-doom's mus2mid.c (compiled as an oracle over synthetic MUS vectors). music/opl is validated bit-exact against a Nuked OPL3 C register->PCM trace. music/oplplayer is checked against a captured i_oplmusic.c register-write trace for D_INTRO. netgame runs two, three and four in-process engines over an in-memory transport and asserts they stay in lockstep with byte-identical per-tic state hashes; ticcmd serialisation is byte-faithful to the engine's own vanilla layout.

Music and multiplayer do not perturb the frame/audio determinism oracles: the oracle/ frames and audio-event log remain byte-equal after wiring.

Quick smoke test (host)

# 1. fetch the shareware IWAD (free re-release):
curl -sSL -o doom1.wad https://distro.ibiblio.org/slitaz/sources/packages/d/doom1.wad

# 2. terminal renderer (pure Go):
CGO_ENABLED=0 go run ./example/termdoom -iwad doom1.wad

cloud-boot integration points

The TamaGo backend in backend/tamago/ consumes three driver interfaces declared in that package:

Frontend method Backend interface Driver repo (sibling)
DrawFrame(*image.RGBA) GPU.Flip github.com/go-virtio/gpu
CacheSound / PlaySound Sound.Cache/Play github.com/go-virtio/sound
GetEvent(*DoomEvent) Input.Poll github.com/go-virtio/input

The WAD is delivered to the engine via gore.SetVirtualFileSystem(fs.FS) using the internal/embedwad helper, whose backing bytes can come from either (a) a go:embed blob in the cloud-boot "livedoom" boot artifact, or (b) a runtime stream from a cloud-boot OCI artifact mount.

The actual wire-in (phase3_oci_doom_boot.go in cloud-boot/tamago-uefi) is a follow-up sprint and is intentionally NOT done here.

See PORT.md for the detailed adaptation plan.

How to verify the cloud-boot DOOM demo is operational (R-doom1g)

The provable test protocol lives in cloud-boot/docs/docs/architecture/doom-provable-protocol.md. Short version:

# Re-harvest the host oracle (byte-equal reproducible — proves
# engine + WAD + determinism hooks are intact):
cd go-doom/engine
GOWORK=off go run ./cmd/harvest-reference \
    -wad embedwad/doom1.wad \
    -seed 0 \
    -checkpoints 1,35,70,140,350,1050 \
    -out /tmp/fresh-oracle

# Compare against the committed oracle — every SHA must match.
diff <(cd oracle && sha256sum frame_tic*.ppm) \
     <(cd /tmp/fresh-oracle && sha256sum frame_tic*.ppm)

For the full guest-stack gate (boots the EFI probe in QEMU+EDK2 and compares virtio-gpu output against the guest oracle):

cd cloud-boot/tamago-uefi
task doomboot:efi:amd64
bash internal/livedoomboot/provable_test.sh amd64

The oracle/ directory is committed (~1.1 MiB of PPMs + manifest). The WAD itself is .gitignored (see embedwad/.gitignore). The determinism hooks live in seed.go (sibling of doom.go, never modifying the transpiled engine source).

Documentation

Index

Constants

View Source
const AM_NUMMARKPOINTS = 10
View Source
const ANG1801 = 2147483648
View Source
const ANG18011 = 2147483648
View Source
const ANG18013 = 2147483648
View Source
const ANG18015 = 2147483648
View Source
const ANG1803 = 2147483648
View Source
const ANG1805 = 2147483648
View Source
const ANG1807 = 2147483648
View Source
const ANG1809 = 2147483648
View Source
const ANG2701 = 3221225472
View Source
const ANG2703 = 3221225472
View Source
const ANG2705 = 3221225472
View Source
const ANG451 = 536870912
View Source
const ANG453 = 536870912
View Source
const ANG455 = 536870912
View Source
const ANG457 = 536870912
View Source
const ANG901 = 1073741824
View Source
const ANG903 = 1073741824
View Source
const ANG905 = 1073741824
View Source
const ANG907 = 1073741824
View Source
const ANG909 = 1073741824
View Source
const ANGLETOFINESHIFT = 19
View Source
const ANGLETOSKYSHIFT = 22
View Source
const ANIM_ALWAYS = 0
View Source
const ANIM_LEVEL = 2
View Source
const ANIM_RANDOM = 1
View Source
const BACKUPTICS = 128
View Source
const BASETHRESHOLD = 100
View Source
const BASEYCENTER = 100
View Source
const BLACK = 0
View Source
const BODYQUESIZE = 32
View Source
const BONUSADD = 6
View Source
const BOXBOTTOM = 1
View Source
const BOXLEFT = 2
View Source
const BOXRIGHT = 3
View Source
const BOXTOP = 0
View Source
const BUTTONTIME = 35
View Source
const CF_GODMODE = 2
View Source
const CF_NOCLIP = 1
View Source
const CF_NOMOMENTUM = 4
View Source
const DEFAULT_FLOAT = 3
View Source
const DEFAULT_INT_HEX = 1
View Source
const DEFAULT_KEY = 4
View Source
const DEFAULT_RAM = 16
View Source
const DEFAULT_SPECHIT_MAGIC = 29400216
View Source
const DEFAULT_STRING = 2
View Source
const DEH_DEFAULT_BFG_CELLS_PER_SHOT = 40
View Source
const DEH_DEFAULT_BLUE_ARMOR_CLASS = 2
View Source
const DEH_DEFAULT_GOD_MODE_HEALTH = 100
View Source
const DEH_DEFAULT_GREEN_ARMOR_CLASS = 1
View Source
const DEH_DEFAULT_IDFA_ARMOR = 200
View Source
const DEH_DEFAULT_IDFA_ARMOR_CLASS = 2
View Source
const DEH_DEFAULT_IDKFA_ARMOR = 200
View Source
const DEH_DEFAULT_IDKFA_ARMOR_CLASS = 2
View Source
const DEH_DEFAULT_INITIAL_BULLETS = 50
View Source
const DEH_DEFAULT_INITIAL_HEALTH = 100
View Source
const DEH_DEFAULT_MAX_ARMOR = 200
View Source
const DEH_DEFAULT_MAX_HEALTH = 200
View Source
const DEH_DEFAULT_MAX_SOULSPHERE = 200
View Source
const DEH_DEFAULT_MEGASPHERE_HEALTH = 200
View Source
const DEH_DEFAULT_SOULSPHERE_HEALTH = 100
View Source
const DEH_DEFAULT_SPECIES_INFIGHTING = 0
View Source
const DEMOMARKER = 128
View Source
const DISTMAP = 2
View Source
const DI_EAST = 0
View Source
const DI_NODIR = 8
View Source
const DI_NORTH = 2
View Source
const DI_NORTHEAST = 1
View Source
const DI_NORTHWEST = 3
View Source
const DI_SOUTH = 6
View Source
const DI_SOUTHEAST = 7
View Source
const DI_SOUTHWEST = 5
View Source
const DI_WEST = 4
View Source
const DM_KILLERSX = 10
View Source
const DM_KILLERSY = 100
View Source
const DM_MATRIXX = 42
View Source
const DM_MATRIXY = 68
View Source
const DM_SPACINGX = 40
View Source
const DM_TOTALSX = 269
View Source
const DM_VICTIMSX = 5
View Source
const DM_VICTIMSY = 50
View Source
const DONUT_FLOORHEIGHT_DEFAULT = 0
View Source
const DONUT_FLOORPIC_DEFAULT = 22
View Source
const DOOM_191_VERSION = 111
View Source
const DOS_MEM_DUMP_SIZE = 10
View Source
const EISDIR = 21
View Source
const FASTDARK = 15
View Source
const FF_FRAMEMASK1 = 32767
View Source
const FF_FRAMEMASK3 = 32767
View Source
const FF_FULLBRIGHT1 = 32768
View Source
const FIELDOFVIEW = 2048
View Source
const FINEANGLES = 8192
View Source
const FRACBITS = 16
View Source
const FRACUNIT = 1 << FRACBITS
View Source
const FRICTION = 59392
View Source
const FUZZTABLE = 50
View Source
const F_PANINC = 4
View Source
const F_STAGE_ARTSCREEN = 1
View Source
const F_STAGE_CAST = 2
View Source
const F_STAGE_TEXT = 0
View Source
const GLOWSPEED = 8
View Source
const GRAYSRANGE = 16
View Source
const GREENRANGE = 16
View Source
const HEIGHTBITS = 12
View Source
const HU_BROADCAST = 5
View Source
const HU_MAXLINELENGTH = 80
View Source
const HU_MSGHEIGHT = 1
View Source
const HU_MSGX = 0
View Source
const HU_MSGY = 0
View Source
const HU_TITLEX = 0
View Source
const INFRATICS = 4200
View Source
const INT_MAX1 = 2147483647
View Source
const INT_MAX11 = 2147483647
View Source
const INT_MAX13 = 2147483647
View Source
const INT_MAX15 = 2147483647
View Source
const INT_MAX17 = 2147483647
View Source
const INT_MAX19 = 2147483647
View Source
const INT_MAX5 = 2147483647
View Source
const INT_MAX7 = 2147483647
View Source
const INT_MAX9 = 2147483647
View Source
const INVERSECOLORMAP = 32
View Source
const INVISTICS = 2100
View Source
const INVULNTICS = 1050
View Source
const IRONTICS = 2100
View Source
const ITEMQUESIZE = 128
View Source
const KEY_BACKSPACE1 = 127
View Source
const KEY_BACKSPACE3 = 127
View Source
const KEY_DOWNARROW1 = 175
View Source
const KEY_ENTER = 13
View Source
const KEY_EQUALS1 = 61
View Source
const KEY_ESCAPE = 27
View Source
const KEY_FIRE1 = 163
View Source
const KEY_LEFTARROW1 = 172
View Source
const KEY_MINUS1 = 45
View Source
const KEY_PAUSE1 = 255
View Source
const KEY_RIGHTARROW1 = 174
View Source
const KEY_STRAFE_L1 = 160
View Source
const KEY_STRAFE_R1 = 161
View Source
const KEY_TAB = 9
View Source
const KEY_UPARROW1 = 173
View Source
const KEY_USE1 = 162
View Source
const LIGHTLEVELS = 16
View Source
const LIGHTSCALESHIFT = 12
View Source
const LIGHTSEGSHIFT = 4
View Source
const LIGHTZSHIFT = 20
View Source
const LINEHEIGHT = 16
View Source
const MAPBLOCKUNITS = 128
View Source
const MAXBOB = 1048576
View Source
const MAXBUTTONS = 16
View Source
const MAXCEILINGS = 30
View Source
const MAXDRAWSEGS = 256
View Source
const MAXEVENTS = 64
View Source
const MAXHEALTH = 100
View Source
const MAXINTERCEPTS_ORIGINAL = 128
View Source
const MAXLIGHTSCALE = 48
View Source
const MAXLIGHTZ = 128
View Source
const MAXLINEANIMS = 64
View Source
const MAXPLATS = 30
View Source
const MAXPLAYERS = 4
View Source
const MAXSPECIALCROSS_ORIGINAL = 8
View Source
const MAXSWITCHES = 50
View Source
const MAX_ADJOINING_SECTORS = 20
View Source
const MAX_CAPTURES = 32
View Source
const MAX_JOY_BUTTONS = 20
View Source
const MAX_MOUSE_BUTTONS = 8
View Source
const MINFRAGMENT = 64
View Source
const MIN_RAM = 16
View Source
const MOUSE_SPEED_BOX_HEIGHT = 9
View Source
const MOUSE_SPEED_BOX_WIDTH = 120
View Source
const MTF_AMBUSH = 8
View Source
const MusicSampleRate = 44100

MusicSampleRate is the stereo sample rate (Hz) at which the OPL music module renders. The host frontend should pull ReadMusicPCM at this rate.

View Source
const NET_MAXPLAYERS = 8
View Source
const NF_SUBSECTOR1 = 32768
View Source
const NF_SUBSECTOR3 = 32768
View Source
const NF_SUBSECTOR5 = 32768
View Source
const NG_SPACINGX = 64
View Source
const NG_STATSY = 50
View Source
const NORM_SEP = 128
View Source
const NUMAMMO = 4
View Source
const NUMBONUSPALS = 4
View Source
const NUMCARDS = 6
View Source
const NUMCOLORMAPS = 32
View Source
const NUMKEYS = 256
View Source
const NUMMAPS = 9
View Source
const NUMMOBJTYPES = 137
View Source
const NUMMUSIC = 68
View Source
const NUMPOWERS = 6
View Source
const NUMPSPRITES = 2
View Source
const NUMREDPALS = 8
View Source
const NUMSFX = 109
View Source
const NUMWEAPONS = 9
View Source
const NUM_QUITMESSAGES = 8
View Source
const NUM_VIRTUAL_BUTTONS = 10
View Source
const NoState = -1
View Source
const PLATWAIT = 3
View Source
const PT_ADDLINES = 1
View Source
const PT_ADDTHINGS = 2
View Source
const PT_EARLYOUT = 4
View Source
const Pst_DEAD = 1
View Source
const Pst_LIVE = 0
View Source
const Pst_REBORN = 2
View Source
const QUEUESIZE = 128
View Source
const RADIATIONPAL = 13
View Source
const REDRANGE = 16
View Source
const SAVEGAMESIZE = 180224
View Source
const SAVEGAME_EOF = 29
View Source
const SAVESTRINGSIZE = 24
View Source
const SBARHEIGHT = 32
View Source
const SCREENHEIGHT = 200
View Source
const SCREENHEIGHT_4_3 = 240
View Source
const SCREENWIDTH = 320
View Source
const SCREENWIDTH_4_3 = 256
View Source
const SHOWNEXTLOCDELAY = 4
View Source
const SHRT_MAX1 = 32767
View Source
const SIL_BOTH = 3
View Source
const SIL_BOTTOM = 1
View Source
const SIL_TOP = 2
View Source
const SLOPEBITS = 11
View Source
const SLOPERANGE = 2048
View Source
const SLOWDARK = 35
View Source
const SLOWTURNTICS = 6
View Source
const SNDDEVICE_ADLIB = 2
View Source
const SNDDEVICE_GENMIDI = 8
View Source
const SNDDEVICE_GUS = 5
View Source
const SNDDEVICE_SB = 3
View Source
const SP_STATSX = 50
View Source
const SP_STATSY = 50
View Source
const SP_TIMEX = 16
View Source
const STARTBONUSPALS = 9
View Source
const STARTREDPALS = 1
View Source
const STOPSPEED = 4096
View Source
const STROBEBRIGHT = 5
View Source
const ShowNextLoc = 1
View Source
const StatCount = 0
View Source
const TEXTSPEED = 3
View Source
const TEXTWAIT = 250
View Source
const TICRATE = 35
View Source
const TURBOTHRESHOLD = 50
View Source
const VDOORWAIT = 150
View Source
const VERSIONSIZE = 16
View Source
const WI_SPACINGY = 33
View Source
const WI_TITLEY = 2
View Source
const ZONEID = 1919505

Variables

View Source
var DG_ScreenBuffer *image.RGBA
View Source
var EpiDef menu_t
View Source
var EpisodeMenu [4]menuitem_t
View Source
var I_VideoBuffer []byte
View Source
var LoadDef menu_t
View Source
var LoadMenu [6]menuitem_t
View Source
var M_QuitResponse = func(key int32) {
	if key != key_menu_confirm {
		return
	}
	if netgame == 0 {
		if gamemode == commercial {
			s_StartSound(nil, quitsounds2[gametic>>2&7])
		} else {
			s_StartSound(nil, quitsounds[gametic>>2&7])
		}
	}
	i_Quit()
}
View Source
var MainDef menu_t
View Source
var MainMenu [6]menuitem_t
View Source
var NUMANIMS = [4]int32{
	0: int32(len(epsd0animinfo)),
	1: int32(len(epsd1animinfo)),
	2: int32(len(epsd2animinfo)),
}
View Source
var NUMCMAPS int32

C documentation

// # of commercial levels
View Source
var NewDef menu_t
View Source
var NewGameMenu [5]menuitem_t
View Source
var OptionsDef menu_t
View Source
var OptionsMenu [8]menuitem_t
View Source
var ReadDef1 menu_t
View Source
var ReadDef2 menu_t
View Source
var ReadMenu1 [1]menuitem_t
View Source
var ReadMenu2 [1]menuitem_t
View Source
var S_music [68]musicinfo_t
View Source
var S_sfx [NUMSFX]sfxinfo_t
View Source
var SaveDef menu_t
View Source
var SaveMenu [6]menuitem_t

C documentation

//
// SAVE GAME MENU
//
View Source
var SoundDef menu_t
View Source
var SoundMenu [4]menuitem_t
View Source
var TRACEANGLE angle_t

Functions

func CurrentTic

func CurrentTic() int32

CurrentTic returns the engine's current tic counter as observed by i_GetTime. Useful for the harvest-reference tool to checkpoint framebuffers at exact tic boundaries: callers poll CurrentTic from the DrawFrame callback and snapshot when CurrentTic matches an expected checkpoint value.

In deterministic mode this is exactly equal to the number of completed tics since ResetClock; in wall-clock mode it is the wall-clock-derived tic count and is therefore non-deterministic.

func EnableQuitting

func EnableQuitting(enable bool)

func I_GetTimeMS

func I_GetTimeMS() int32

func RandomState

func RandomState() (prnd, mrnd int32)

RandomState returns the current (prndindex, rndindex) pair. The harvest-reference tool records this value alongside the framebuffer hash at every checkpoint, so the test runner can detect PRNG drift independently of frame-pixel drift — useful when a frame mismatch could plausibly come from either a PRNG step or a missed input.

func ReadMusicPCM

func ReadMusicPCM(buf []int16) int

ReadMusicPCM renders interleaved stereo int16 music PCM into buf (len must be even), advancing the OPL player's clock, and returns the number of stereo FRAMES written. It is safe to call from a host audio-callback goroutine. If no song is playing it zero-fills buf and returns len(buf)/2. This is the seam by which a frontend mixes music alongside SFX, mirroring chocolate-doom's OPL audio callback.

func ResetClock

func ResetClock()

ResetClock zeroes the synthetic tic counter (dg_fake_tics) and the monotonic basetime so that the next i_GetTime returns 0. Combined with SetDeterministicTics(true) this gives the engine a clean "tic 0 at Run entry" starting condition, which is the second precondition for the provable protocol (alongside SeedRandom).

Calling between two Run invocations is supported and recommended: without it the second run inherits the first run's basetime and the tic timeline jumps mid-execution.

func Run

func Run(fg DoomFrontend, args []string)

func SeedRandom

func SeedRandom(seed uint8)

SeedRandom resets DOOM's two PRNG indices (p_random + m_random) to a known starting position. The DOOM PRNG is the canonical 256-entry table indexed by `prndindex` / `rndindex` (see doom.go around the p_Random / m_Random definitions); reset to a known index produces a fully deterministic random sequence for the rest of the engine run, which is exactly the precondition the provable-protocol test runner needs.

Calling with seed == 0 reproduces the historical DOOM startup state (both indices == 0). Any 0..255 value is valid; values outside that range are taken modulo 256.

SAFETY: must be called BEFORE Run, or from within the engine's main thread between tics. Concurrent invocation while the engine is reading the indices is undefined.

func SetDeterministicTics

func SetDeterministicTics(enable bool)

SetDeterministicTics switches the engine's internal clock from wall-clock (time.Since(start_time)) to a frame-driven counter: every call to i_Sleep increments a synthetic tic counter, and every call to i_GetTicks reads that counter. The effect is a tic-locked run where one i_Sleep == one tic, regardless of host scheduling.

This is the existing `dg_run_full_speed` knob that the engine's own TestDoomDemo + TestLoadSave already rely on. Exposing it here lets host-side test runners (and the harvest-reference tool) opt into the same determinism without reaching into unexported state.

SAFETY: same caveats as SeedRandom — set before Run for a clean fully-deterministic execution.

func SetVirtualFileSystem

func SetVirtualFileSystem(a fs.FS)

SetVirtualFileSystem sets the virtual file system

func Stop

func Stop()

Types

type DoomEvent

type DoomEvent struct {
	Type  Evtype_t
	Key   uint8
	Mouse struct {
		Button1 bool
		Button2 bool
		XPos    float64 // from 0-1
		YPos    float64 // from 0-1
	}
}

type DoomFrontend

type DoomFrontend interface {
	DrawFrame(img *image.RGBA)
	SetTitle(title string)
	GetEvent(event *DoomEvent) bool

	CacheSound(name string, data []byte)
	PlaySound(name string, channel, volume, sep int)
}

type Evtype_t

type Evtype_t int32
const Ev_joystick Evtype_t = 3
const Ev_keydown Evtype_t = 0
const Ev_keyup Evtype_t = 1
const Ev_mouse Evtype_t = 2
const Ev_quit Evtype_t = 4

Directories

Path Synopsis
backend
tamago
Package tamago provides a [gore.DoomFrontend] implementation that drives DOOM output and input through cloud-boot's bare-metal virtio device tree.
Package tamago provides a [gore.DoomFrontend] implementation that drives DOOM output and input through cloud-boot's bare-metal virtio device tree.
cmd
Package embedwad is a scaffold for serving the DOOM WAD to the engine in a TamaGo bare-metal target, where there is no filesystem.
Package embedwad is a scaffold for serving the DOOM WAD to the engine in a TamaGo bare-metal target, where there is no filesystem.
example
doomocracy command
ebitengine command
sdldoom command
termdoom command
webserver command
music
genmidi
Package genmidi parses the DMX GENMIDI lump, the OPL instrument bank used by DOOM's Adlib/OPL music playback.
Package genmidi parses the DMX GENMIDI lump, the OPL instrument bank used by DOOM's Adlib/OPL music playback.
midi
Package midi parses Standard MIDI Files (type 0 and 1) into tracks of timestamped events.
Package midi parses Standard MIDI Files (type 0 and 1) into tracks of timestamped events.
mus
Package mus parses the DMX MUS music format used by DOOM's D_* lumps and converts it to a Standard MIDI File, matching chocolate-doom's mus2mid conversion byte-for-byte.
Package mus parses the DMX MUS music format used by DOOM's D_* lumps and converts it to a Standard MIDI File, matching chocolate-doom's mus2mid conversion byte-for-byte.
opl
oplplayer
Package oplplayer is a pure-Go port of chocolate-doom's DMX OPL music player (i_oplmusic.c).
Package oplplayer is a pure-Go port of chocolate-doom's DMX OPL music player (i_oplmusic.c).
Package netgame implements the classic DOOM netgame (multiplayer) protocol as a self-contained, testable pure-Go package: the doomcom / doomdata / ticcmd lockstep exchange modelled after id Software's d_net.c / i_net.c (the chocolate-doom-faithful behaviour).
Package netgame implements the classic DOOM netgame (multiplayer) protocol as a self-contained, testable pure-Go package: the doomcom / doomdata / ticcmd lockstep exchange modelled after id Software's d_net.c / i_net.c (the chocolate-doom-faithful behaviour).

Jump to

Keyboard shortcuts

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