-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
93 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,67 +1,37 @@ | ||
# 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. | ||
# Doom Generic (Lilka edition) | ||
|
||
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). | ||
Ця бібліотека містить модифікований код з <https://github.com/ozkl/doomgeneric>. | ||
|
||
# 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 | ||
Оскільки ESP32-S3 має всього 400 КБ SRAM, деякі масиви не поміщаються в RAM, і їх потрібно динамічно ініціалізувати в heap всередині PSRAM. | ||
Тому найважливіша зміна - це заміна деяких стекових алокацій пам'яті на динамічну (malloc/free), наприклад: | ||
|
||
|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. | ||
```cpp | ||
// До: | ||
|
||
### main loop | ||
At start, call doomgeneric_Create(). | ||
#define MAXVISPLANES 128 | ||
visplane_t visplanes[MAXVISPLANES]; | ||
#define MAXOPENINGS SCREENWIDTH*64 | ||
short openings[MAXOPENINGS]; | ||
|
||
In a loop, call doomgeneric_Tick(). | ||
// Після: | ||
|
||
In simplest form: | ||
``` | ||
int main(int argc, char **argv) | ||
#define MAXVISPLANES 128 | ||
visplane_t* visplanes; | ||
#define MAXOPENINGS SCREENWIDTH*64 | ||
short* openings; | ||
|
||
void R_AllocPlanes (void) | ||
{ | ||
doomgeneric_Create(argc, argv); | ||
visplanes = malloc (sizeof(visplane_t) * MAXVISPLANES); | ||
openings = malloc (sizeof(short) * MAXOPENINGS); | ||
} | ||
|
||
while (1) | ||
{ | ||
doomgeneric_Tick(); | ||
} | ||
return 0; | ||
void R_FreePlanes (void) | ||
{ | ||
free (visplanes); | ||
free (openings); | ||
} | ||
``` | ||
# 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](screenshots/windows.png) | ||
|
||
## X11 - Ubuntu | ||
![Ubuntu](screenshots/ubuntu.png) | ||
|
||
## X11 - FreeBSD | ||
![FreeBSD](screenshots/freebsd.png) | ||
|
||
## SDL | ||
![SDL](screenshots/sdl.png) | ||
Повний перелік нових алокацій знаходиться в <./d_alloc.c>. | ||
Він викликається в <./doomgeneric.c>. |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# 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](screenshots/windows.png) | ||
|
||
## X11 - Ubuntu | ||
![Ubuntu](screenshots/ubuntu.png) | ||
|
||
## X11 - FreeBSD | ||
![FreeBSD](screenshots/freebsd.png) | ||
|
||
## SDL | ||
![SDL](screenshots/sdl.png) |