1
0
Fork
You've already forked doomgeneric
0
fork of https://github.com/ozkl/doomgeneric for use in https://codeberg.org/KittyShopper/balatro-doom and anything else where you want doom as a Lua native library
  • C 99.8%
2025年01月13日 09:18:55 +03:00
.vscode supply custom iwad 2024年12月23日 15:04:27 +03:00
doomgeneric cleanup 2025年01月13日 09:18:55 +03:00
love cleanup 2025年01月13日 09:18:55 +03:00
screenshots Renamed all occurrences of 'osx' to 'sdl', deleted binary files (doomgeneric, doomgeneric/DOOM1.WAD) 2020年11月26日 17:03:42 +01:00
.gitignore native windows toolchain 2025年01月12日 08:09:14 +03:00
doomgeneric.sln Windows GDI port 2019年08月04日 23:02:31 +03:00
LICENSE Create LICENSE 2019年08月18日 10:50:39 +03:00
README.md may have fixed the freezing 2025年01月12日 18:23:18 +03:00
README.TXT Update README.TXT 2023年04月23日 20:14:39 +03:00
vcpkg-configuration.json native windows toolchain 2025年01月12日 08:09:14 +03:00
vcpkg.json native windows toolchain 2025年01月12日 08:09:14 +03:00

local doom = require "doom"

a lua native module for doomgeneric, allowing doom to be embedded inside games written in lua and can load native libraries (say, ones using love2d)

example code on the love/ directory. bring your own doom1.wad

compiles on linux (requires luajit but will likely work with lua as well), and windows (visual studio w/ vcpkg). mingw is kinda fucky but you may be able to get it working.

original doomgeneric readme follows:

doomgeneric

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).

porting

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

  • DG_Init
  • DG_DrawFrame
  • DG_SleepMs
  • DG_GetTicksMs
  • DG_GetKey
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