An open API service indexing awesome lists of open source software.

https://github.com/danielgatis/go-doom

Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.
https://github.com/danielgatis/go-doom

doom doom-2 go golang vanilla-doom

Last synced: 3 months ago
JSON representation

Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.

Awesome Lists containing this project

README

          

# Go - Doom

[![Go Report Card](https://goreportcard.com/badge/github.com/danielgatis/go-doom?style=flat-square)](https://goreportcard.com/report/github.com/danielgatis/go-doom)
[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/danielgatis/go-doom/master/LICENSE)
[![Go Doc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/danielgatis/go-doom)

Play classic DOOM in pure Go! Single binary with embedded game data, cross-platform, zero dependencies.

https://github.com/user-attachments/assets/4ad9b6f9-6e56-4a5d-9b9f-24f1153c7740

## Features

- All-in-one binary with embedded WADs, WASM engine and SoundFont
- Runs DOOM WASM module using [wazero](https://github.com/tetratelabs/wazero) (no CGO)
- Graphics rendering with [Ebitengine](https://ebitengine.org/)
- Sound effects and MIDI music via [go-soundfont](https://github.com/danielgatis/go-soundfont)
- Cross-platform: Windows, macOS, Linux

## Installation

```bash
go install github.com/danielgatis/go-doom@latest
```

Or download pre-built binaries from the [Releases](https://github.com/danielgatis/go-doom/releases) page.

## Usage

```bash
doom [game] [flags]
```

### Games

| Game | Description |
|------------|-------------------------------------|
| `doom1` | Doom Shareware (default) |
| `doom` | Doom Registered |
| `doomu` | Ultimate Doom |
| `doom2` | Doom II: Hell on Earth |
| `plutonia` | Final Doom: The Plutonia Experiment |
| `tnt` | Final Doom: TNT Evilution |

### Examples

```bash
doom # Play Doom Shareware
doom doom2 # Play Doom II
doom -s 2 # Play with 2x scale
doom doom2 -s 3 # Play Doom II with 3x scale
doom -w ~/wads/mywad.wad # Play custom WAD file
doom -f ~/soundfonts/gm.sf2 # Use custom SoundFont
```

### Flags

| Flag | Description |
|-------------------|----------------------------------|
| `-w, --wad` | Path to custom WAD file |
| `-f, --soundfont` | Path to custom SoundFont file |
| `-s, --scale` | Window scale factor (default: 1) |
| `-v, --verbose` | Show DOOM log output |
| `-V, --version` | Show version |
| `-h, --help` | Show help |

### Controls

| Key | Action |
|--------------|----------------------------|
| Arrow keys | Move |
| Ctrl / Z | Fire |
| Space / X | Use (open doors, activate) |
| Shift | Run |
| Alt | Strafe |
| 1-7 | Select weapon |
| Escape | Menu |
| Enter | Confirm |
| Tab | Automap |
| +/- | Zoom automap |
| F1 | Help |
| F2 | Save game |
| F3 | Load game |
| F4 | Sound volume |
| F5 | Detail level |
| F6 | Quicksave |
| F9 | Quickload |
| F10 | Quit |
| F11 | Gamma correction |
| Pause | Pause game |

## Building from Source

```bash
git clone https://github.com/danielgatis/go-doom.git
cd go-doom

# Build all game variants
make all

# Or build a specific game
make doom1 # Doom Shareware (18MB)
make doom2 # Doom II (28MB)

# Build default (doom1)
make build
```

### Available Binaries

| Binary | Game | Size |
|--------|------|------|
| `doom1` | Doom Shareware | ~18MB |
| `doom` | Doom Registered | ~24MB |
| `doomu` | Ultimate Doom | ~26MB |
| `doom2` | Doom II | ~28MB |
| `plutonia` | Plutonia Experiment | ~30MB |
| `tnt` | TNT Evilution | ~31MB |

Binaries are placed in the `bin/` directory.

## Buy me a coffee

If you find this project useful, consider buying me a coffee!

[![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/danielgatis)

## License

MIT License - see [LICENSE](./LICENSE) file.

## Author

Daniel Gatis