vs4vijay / M5Doom

M5-Doom - A port of the iconic Doom game for M5Cardputer, bringing classic FPS action to your M5 Stack devices.
GNU General Public License v2.0
5 stars 0 forks source link
arduino c cpp doom esp32 m5cardputer m5stack m5stickcplus m5unified platformio

IN-DEVELOPMENT

M5 Doom

Relive the Classic Doom Experience on Your M5Cardputer!

Welcome to the Doom port for M5 Stack devices, specifically for M5Cardputer! This project aims to bring the classic Doom experience to the M5 Stack platform, allowing you to relive the iconic game on modern hardware.


The purpose of doomgeneric is to make porting Doom easier. Of course Doom is already portable but with doomgeneric it is possible with just a few functions.

To try it you will need a WAD file (game data). If you don't own the game, shareware version is freely available (doom1.wad).


Compiling


# Windows with SDL
make -j4 -f Makefile.sdl

Running


# Windows with SDL
./doomgeneric.exe -iwad doom1.wad
./doomgeneric.exe -iwad miniwad.wad

porting

Create a file named doomgeneric_yourplatform.c and just implement these functions to suit your platform.

Functions Description
DG_Init Initialize your platfrom (create window, framebuffer, etc...).
DG_DrawFrame Frame is ready in DG_ScreenBuffer. Copy it to your platform's screen.
DG_SleepMs Sleep in milliseconds.
DG_GetTicksMs The ticks passed since launch in milliseconds.
DG_GetKey Provide keyboard events.
DG_SetWindowTitle Not required. This is for setting the window title as Doom sets this from WAD file.

main loop

At start, call doomgeneric_Create().

In a loop, call doomgeneric_Tick().

In simplest form:

int main(int argc, char **argv)
{
    doomgeneric_Create(argc, argv);

    while (1)
    {
        doomgeneric_Tick();
    }

    return 0;
}

sound

Sound is much harder to implement! If you need sound, take a look at SDL port. It fully supports sound and music! Where to start? Define FEATURE_SOUND, assign DG_sound_module and DG_music_module.

platforms

Ported platforms include Windows, X11, SDL, emscripten. Just look at (doomgeneric_win.c, doomgeneric_xlib.c, doomgeneric_sdl.c). Makefiles provided for each platform.

emscripten

You can try it directly here: https://ozkl.github.io/doomgeneric/

emscripten port is based on SDL port, so it supports sound and music! For music, timidity backend is used.

Windows

Windows

X11 - Ubuntu

Ubuntu

X11 - FreeBSD

FreeBSD

SDL

SDL