Digger was originally created by Windmill Software in 1983 and released as a copy-protected, bootable 5.25" floppy disk for the IBM PC. As it requires a genuine CGA card, it didn't work on modern PCs.
In 1998, Andrew Jenner aj@digger.org, created Digger Remastered, which runs on all PCs with CGA or better and plays just like the original. See http://digger.org for more information about his remake, the history of the game as well as the history of Windmill Software and their other games.
Later on, Maksym Sobolyev sobomax@gmail.com, ported Adnrew's code to run on Linux/FreeBSD/Windows using SDL library, or on FreeBSD console using native "VGL" VESA graphics interface. That version is now being actively developed to move Digger into XXI century.
Furthermore, Michael Knigge michael.knigge@gmx.de, did some minor enhancements, cleaned up the code a little bit, fixed some minor bugs, gave the "redefine keyboard" dialog a new look and feel and provided an Installer for Microsoft Windows along with the Appveyor CI scripts.
Very recently, the WebAssembly version has been added as well, allowing Digger to run directly in your browser.
Two-player network play is enabled with the /N: option. There are two
supported modes:
-
Peer-to-peer: one side acts as a small local SIP registrar and listens on UDP
5060, while the other side registers to it directly.Examples:
- Host/listener:
/N:alice-bob - Peer connecting to host
192.168.50.10:/N:bob@192.168.50.10-alice
- Host/listener:
-
Via a SIP server: both sides use a normal SIP server, register there, and place the game call through that server.
Examples:
- Alice via SIP server:
/N:alice[:password]@sip.example.com[:5060]-bob - Bob via SIP server:
/N:bob[:password]@sip.example.com[:5060]-alice
- Alice via SIP server:
In both modes, the value before - is the local SIP user and the value after
- is the peer SIP user. In peer-to-peer mode the host side omits @server
and binds to *:5060, or to the local address and/or port given after the
peer user (e.g. /N:alice-bob@:5070, with the peer using
/N:bob@192.168.50.10:5070-alice); in SIP-server mode @server[:port] is
required.
Some plans for the future releases include:
-
2.0, aka "Digger Reset"
- SDL 2.0 port
- fullscreen mode for Windows
- toggle fullscreen and window mode with Alt-Enter
- installer for Windows
- revised redefine keyboard
- make CGA graphics available again (for nostalgia)
- further code cleanup (in-progress)
- move logic into high-level objects
- remove obsolete command line options
- 64-bit Windows build
- remove obsolete DOS functions (i. e. function s0setupsound() and so on)
- remove ARM specific code (SDL 2.0 is not available on ARM, so the ARM specific code is useless)
- remove DIGGER_VERSION and give Digger a regular version number
- headless (VNC?) mode
- network play for 2 players
- screen update framerate that is independent of game perceived speed, "sub-pixel" updates
-
3.0, aka "Digger Reloaded"
- bigger (open?) game world
- MMOG mode
- deathmatch mode
- new capabilities to the characters (i.e. superpowers), and interactions between them (i.e. gradual damage)
- few types of diggers: scout, soldier, sniper etc.
- monster AI 2.0?
- digger AI to make teamplay/deathmatch interesting even in single-player mode
- teamplay
The source code will be free and open at all times. Digger Remastered is source code has been contributed by different people and licensed under the terms of several licenses including Public Domain, Beer-Ware, 2-clause BSD and GNU General Public License version 2. Please refer to a specific source file as well as source code history to find out more.
DIGGER_WARNINGS_AS_ERRORS treats compiler warnings as build failures using
-Werror (or /WX with MSVC). It defaults to OFF for local builds. Enable
it with -DDIGGER_WARNINGS_AS_ERRORS=ON in CMake or
DIGGER_WARNINGS_AS_ERRORS=ON in GNU make. Clean before changing the option
with make; CMake stores it in its cache.
All CI builds of Digger enable this option, including Linux, Windows (GitHub Actions and AppVeyor), macOS, WebAssembly, Docker, Debian packages, and sanitizer builds. The test build scripts also enable it for both Debug and production builds; Debian package builds always enable it.
scripts/cmake_flags.sub contains CMAKE_FLAGS_debug, CMAKE_FLAGS_release,
and CMAKE_FLAGS_relwithdebinfo, plus the test and production instrumentation
settings. It also derives MAKE_FLAGS_debug and MAKE_FLAGS_production for
GNU make test builds from the same option assignments. The test build scripts,
CMake CI configure steps, and Debian package rules source it. Expand these
flag variables unquoted so each flag becomes a separate build argument; keep
paths and other values that may contain spaces in separately quoted arguments.
DIGGER_INSTRUMENTATION enables NetSim replay tests and fault injection. It
is off by default for production builds and on for Debug builds. Set
-DDIGGER_INSTRUMENTATION=ON with CMake or DIGGER_INSTRUMENTATION=ON with
GNU make to enable it in a production test build (OFF disables it).
Clean before changing the option with make; CMake stores it in its cache.
The test build scripts explicitly enable it in both configurations.
Requesting DIGGER_NETSIM_REPLAY without instrumentation reports an error
and exits immediately.
The option controls these environment variables and their supporting code:
DIGGER_NETSIM_REPLAY,DIGGER_NETSIM_REPLAY_START: feed a two-player eDRF recording over the network and optionally start the session.DIGGER_NETSIM_RX_DROP_EVERY,DIGGER_NETSIM_TX_DROP_EVERY: synthetic packet loss, 1 in N packets at random;DIGGER_NETSIM_LOSS_SEEDreplays the losses of a run (each run logs the seed it used).DIGGER_NETSIM_SIP_DROP_2XX,DIGGER_NETSIM_SIP_NO_ACK,DIGGER_NETSIM_MUTE_AFTER_ACK: simulate lost SIP answers, missing ACKs, or a vanished peer.DIGGER_NETSIM_EXPECT_NO_ACK: assert that a SIP answer went without ACK.DIGGER_NETSIM_SIP_TIMER_L,DIGGER_NETSIM_SYNC_TIMEOUT: override test timeouts; production uses the normal built-in values.DIGGER_NETSIM_TRACE: emit per-frame game-state comparison hashes.
DIGGER_NETSIM_DEBUG remains available in production for diagnosing network
sessions. DIGGER_NETSIM_PROTO_DEBUG keeps its existing DIGGER_DEBUG
guard. Normal recording and local playback remain available without
instrumentation.
Debian builds produce two co-installable packages: digger has instrumentation
disabled, while digger-instrumentation installs the test executable as
/usr/lib/digger/digger-instrumented. The package test script runs local
playback against the installed digger and NetSim tests against that separate
executable. For other builds, NETSIM_DIGGER_BIN selects an instrumented
executable for just the NetSim portion of scripts/do-test-run.sh; it defaults
to DIGGER_BIN when unset.
Linux CI runs ASan with GCC and Clang, and MSan with Clang, over the short
playback suite and NetSim tests. These builds enable DIGGER_INSTRUMENTATION,
retain the normal LTO setting and frame pointers, and fail on sanitizer
reports. MSan also tracks the origin of uninitialized values.
