Skip to content

sabino/DoomGeo

 
 

Repository files navigation

DoomGeo

DoomGeo is a Neo Geo AES research prototype that pushes Doom-like gameplay through the hardware the way the machine wants to draw: sprite strips, pre-baked graphics, fix-layer UI, and very small runtime data.

It is not a framebuffer Doom source port. The build tools read Doom-format WAD data offline, convert the map and assets into Neo Geo-friendly structures, and the 68000 runtime drives the scene by updating sprite control blocks rather than drawing pixels.

Current DoomGeo gameplay

Current State

Area Status
WAD conversion Converts E1M1 map lumps, player start, doors, exits, secrets, damaging sectors, texture classes, sector heights, and runtime things into a centered 48x36 Neo Geo grid for the normal experimental WAD path. The current default playable ROM uses the lower-complexity handmade DOOM_SIMPLE_MAP=1 showcase instead, so the menu boots a stable 16x16 NGRayEx-style level with Doom HUD/weapons/things. WAD-derived 16x16 chunks generated by tools/doom_chunk_convert.py remain available as an opt-in experiment through the chunk targets. Generated map arrays are split into doom_map_generated.h declarations and doom_map_generated.c table definitions.
Rendering Default playable build uses the original NGRayEx-style 80-column, full-height grid DDA proportions, with Doom wall/door atlases, HUD, weapons, world sprites, and pre-baked moving floor/ceiling planes. The older 48x36 converted-WAD renderer remains available with DOOM_SIMPLE_MAP=0 for comparison and converter work. Failed/missing or wall-hidden sprite strips no longer consume visible thing slots.
HUD Doom STBAR, face frames, key/weapon indicators, large red status digits, and compact ammo counters.
Weapons Fist, pistol, shotgun, chaingun, rocket launcher, plasma rifle, BFG, and chainsaw have playable runtime paths when the selected IWAD supplies the matching psprite art. The default shareware build masks unavailable plasma/BFG psprites instead of drawing fake placeholders; explicit Freedoom builds exercise the full redistributable weapon-art path.
RIPDOOM-lite geometry make ripdoom-map ripdoom-check ripdoom-runtime-check ripdoom-render-check emits and validates a compact, SNES-inspired geometry package from real Doom VERTEXES, LINEDEFS, SIDEDEFS, SECTORS, SEGS, SSECTORS, NODES, REJECT, BLOCKMAP, and THINGS, plus a linedef-to-seg index for cheap local renderer candidates. DOOM_RIPDOOM_RENDER=1 compiles the C BSP/blockmap query layer and an opt-in local ray-hit wall renderer into a ROM; opened generated chunk doors and lifts are skipped by the RIPDOOM ray path so collision and visual state stay aligned. This is the next converter contract for BSP/seg-driven rendering; the render mode is experimental and not the default gameplay path yet.
Gameplay Pickups, keys, timed powerups, doors, exits, secrets, hurt/bonus/muzzle feedback, monsters with baked Doom rotation frames, barrels, corpses, drops, projectiles, and compact AI are present. Two-sided lines use Doom-like player-height and step-height checks, so small stairs stay passable while high ledges remain blocking. make combat-test-rom, make encounter-test-rom, make monster-gallery-rom, and make arsenal-test-rom boot isolated verification ROMs.
Map The main playable map is now a compact handmade 16x16 showcase with enemies, pickups, a key door, and an exit, chosen because it is currently much more playable on Neo Geo sprite-strip constraints than the full converted E1M1 map. The converted-WAD and chunked map paths remain buildable experiments. Opening and normal closing spread fix-layer work across frames instead of blocking on full one-frame redraws.
Flow Normal ROMs boot to a fix-layer block-letter intro/menu and start the current compiled playable map with B or D. Focused verification ROMs skip the intro so smoke captures still launch directly into their scenario.
Audio Null sound path only. YM2610/Z80 sound and music conversion are not implemented yet.
Browser build GitHub Pages package runs the ROM through EmulatorJS/FBNeo, plus a separate 68000 ASM demo build.

Screenshots

Motion showcase
Animated DoomGeo default ROM showcase with forward walking, turning, and shooting
Intro/menu Current gameplay
Block-letter DoomGeo intro menu for the compiled sample map Current sample-map wall, floor, weapon, and HUD state
Minimap overlay
Fix-layer minimap overlay with map markers
Combat test ROM Shotgun fire frame
Combat verification ROM with a visible imp and shotgun HUD state Combat interaction smoke with restrained weapon muzzle flash preserving shotgun detail
Combat kill smoke
Combat interaction smoke after killing the visible imp
Sample encounter Sample scout route
Focused sample-map verification ROM with a visible monster Sample-map scout ROM with pickups and enemies visible
Melee test ROM Monster gallery ROM
Close-combat verification ROM with chainsaw equipped and a nearby imp Living monster gallery ROM with multiple shareware Doom enemy sprites and a barrel
Arsenal test ROM Held-C weapon shortcut
Arsenal verification ROM with available WAD-backed weapons, keycards, ammo, and armor Held-C weapon shortcut smoke after pressing Right to select the chaingun
Death/drop test ROM
Death/drop verification ROM with Doom corpses and a dropped shotgun rendered in the playfield
Powerup test ROM
Powerup verification ROM with Doom powerup pickups and a visible imp

The checked-in screenshot and motion-GIF set is currently captured from the optimized hand-authored sample map, not from the experimental converted-WAD renderer. Native Doom comparison tooling remains available through tools/capture_compare.sh for future converter work.

Controls

Input Action
D-pad Up / Down on intro menu Move menu selection
B or D on intro menu Confirm selection / start compiled map
A on submenu Return to the main intro menu
D-pad Up / Down Move forward/back
D-pad Left / Right Turn
Hold A + Left/Right Strafe
B Fire weapon
C Cycle to next ready weapon
Hold C + D-pad Fast weapon shortcuts: Up shotgun, Right chaingun, Down rocket, Down+Right plasma, Down+Left BFG, Left close/basic. Direction-first and C-first chords both work.
D Use facing door
Hold A + C Toggle minimap
D after DEAD/EXIT Restart compiled level

Default GnGeo keyboard mapping used by the repo launchers: Neo Geo A=Z, B=X, C=A, D=S, Start=1, Coin=3, and movement uses the arrow keys. That means the minimap toggle is keyboard Z + A.

Manual Chunk Test Build

The default make cart path now boots the hand-authored sample map. For the experimental converted E1M1 chunk/RIPDOOM-lite path, use:

make chunk-playable-rom DOOM_IWAD=/path/to/Doom1.WAD
make chunk-playable-gngeo DOOM_IWAD=/path/to/Doom1.WAD

This differs from chunk-movement-test-rom, which intentionally overrides input with a scripted forward-walk sequence for regression testing.

The default GnGeo keyboard mapping is:

Neo Geo Keyboard
A / B / C / D Z / X / A / S
Start / Coin 1 / 3
D-pad Arrow keys
Menu Esc

Build And Run

Tools and downloaded WAD data are kept under .tools/, which is ignored by git. The default build uses the Doom 1 shareware WAD zip. To compare against an owned Doom 1 IWAD, pass DOOM_IWAD=/path/to/DOOM.WAD; to test the full redistributable weapon-art path explicitly, pass DOOM_IWAD=$(FREEDOOM_ZIP).

python3 tools/doomgeo_build.py install
python3 tools/doomgeo_build.py doctor
python3 tools/doomgeo_build.py build
SDL_VIDEODRIVER=x11 make gngeo

Useful variants:

make cart                         # default simple 16x16 showcase, DOOM_DETAIL=quality
make cart DOOM_DETAIL=clarity     # simple showcase with clarity-tier assets
make cart DOOM_DETAIL=quality     # simple showcase with quality-tier assets
make cart DOOM_DETAIL=balanced    # simple showcase with balanced-tier assets
make cart DOOM_DETAIL=speed       # simple showcase with speed-tier assets
make cart DOOM_SIMPLE_MAP=0       # experimental converted-WAD grid renderer
make route-check
make DOOM_MAP=E1M1 BUILDDIR=build/chunk-e1m1 chunk-map chunk-route-check chunk-visibility-check chunk-stream-check chunk-movement-check
make DOOM_MAP=E1M1 BUILDDIR=build/ripdoom-e1m1 ripdoom-map ripdoom-check
make DOOM_MAP=E1M1 BUILDDIR=build/ripdoom-e1m1 ripdoom-runtime-check
make DOOM_MAP=E1M1 DOOM_SIMPLE_MAP=1 DOOM_RIPDOOM_RENDER=1 BUILDDIR=build/ripdoom-render-e1m1 ROM=build/ripdoom-render-e1m1-cart GFX_ROM_DIR=build/ripdoom-render-e1m1-assets cart
make bsp-asset-check
tools/smoke_gameplay.sh
make key-test-rom
make key-test-gngeo
make key-door-test-rom
make key-door-test-gngeo
tools/smoke_key_door.sh
make combat-test-rom
make combat-test-gngeo
tools/smoke_combat_interaction.sh
make encounter-test-rom
make encounter-test-gngeo
tools/smoke_e1m1_encounter.sh
make exit-test-rom
make exit-test-gngeo
tools/smoke_e1m1_exit.sh
tools/smoke_enemy_visibility.sh
make monster-gallery-rom
make monster-gallery-gngeo
make arsenal-test-rom
make arsenal-test-gngeo
make death-test-rom
make death-test-gngeo
tools/smoke_death_drop.sh
make powerup-test-rom
make powerup-test-gngeo
tools/smoke_powerup.sh
tools/stress_movement.sh
tools/bench_movement.sh
make DOOM_MAP=E1M2
make DOOM_IWAD=/path/to/DOOM.WAD DOOM_MAP=E1M1
make DOOM_MAP=E1M1 DOOM_MAP_WIDTH=38 DOOM_MAP_HEIGHT=27
make DOOM_MAP=E1M1 DOOM_SKILL_MASK=2
python3 tools/doomgeo_build.py pages --out dist/pages
make smoke-screenshot
DOOM_MAP=E1M1 tools/capture_compare.sh
COMPARE_WAYPOINT=e1m1-scout tools/capture_compare.sh
COMPARE_WAYPOINT=e1m2-start tools/capture_compare.sh
python3 tools/inspect_map_specials.py --map E1M2

You must provide your own Neo Geo BIOS for local emulation. The browser package uses a separate Freedoom-based ROM and an FBNeo-compatible packaging path. The browser player launches a magdrop2 romset package internally so the arcade core accepts the generated DoomGeo homebrew ROM zip.

Documentation

Reference Ports

Special thanks to Dimitris Giannakis, MVG / Modern Vintage Gamer, for the Neo Geo Doom/raycasting video reference that motivated the sprite-strip direction: https://www.youtube.com/watch?v=4f1-7c6WX10

These projects are useful references, but code is not copied into this branch:

  • SNES Doom / DOOM-FX is the closest low-power console Doom reference for map packaging, preprocessed render data, and the tradeoffs around leaving floors/ceilings simpler than PC Doom.
  • doomgeneric shows a compact platform API around Doom's tick/frame/input model.
  • PureDOOM shows a single-header, callback-oriented Doom source packaging style and a clear license section.
  • id Software DOOM is the historical source release used for license and architecture context.

Any future code import from these projects must be deliberate, attributed, and license-compatible. Current work adapts ideas and terminology only.

License And Assets

DoomGeo is research/homebrew work derived from this repo's Neo Geo raycaster code plus original conversion/runtime code written here. It does not include a commercial Doom IWAD, a Neo Geo BIOS, or proprietary id Software game data. The default build downloads shareware/Freedoom-compatible WAD data under .tools/ for local conversion.

The official id Software DOOM source release is distributed under GPL-2.0. The historical DOOM Source Code License text, included below because several Doom ports keep it visible for provenance, is not a grant for commercial Doom asset redistribution.

Historical DOOM Source Code License text
      LIMITED USE SOFTWARE LICENSE AGREEMENT

        This Limited Use Software License Agreement (the "Agreement")
is a legal agreement between you, the end-user, and Id Software, Inc.
("ID").  By downloading or purchasing the software material, which
includes source code (the "Source Code"), artwork data, music and
software tools (collectively, the "Software"), you are agreeing to
be bound by the terms of this Agreement.  If you do not agree to the
terms of this Agreement, promptly destroy the Software you may have
downloaded or copied.

ID SOFTWARE LICENSE

1.      Grant of License.  ID grants to you the right to use the
Software.  You have no ownership or proprietary rights in or to the
Software, or the Trademark. For purposes of this section, "use" means
loading the Software into RAM, as well as installation on a hard disk
or other storage device. The Software, together with any archive copy
thereof, shall be destroyed when no longer used in accordance with
this Agreement, or when the right to use the Software is terminated.
You agree that the Software will not be shipped, transferred or
exported into any country in violation of the U.S. Export
Administration Act (or any other law governing such matters) and that
you will not utilize, in any other manner, the Software in violation
of any applicable law.

2.      Permitted Uses.  For educational purposes only, you, the
end-user, may use portions of the Source Code, such as particular
routines, to develop your own software, but may not duplicate the
Source Code, except as noted in paragraph 4.  The limited right
referenced in the preceding sentence is hereinafter referred to as
"Educational Use."  By so exercising the Educational Use right you
shall not obtain any ownership, copyright, proprietary or other
interest in or to the Source Code, or any portion of the Source
Code.  You may dispose of your own software in your sole discretion.
With the exception of the Educational Use right, you may not
otherwise use the Software, or an portion of the Software, which
includes the Source Code, for commercial gain.

3.      Prohibited Uses:  Under no circumstances shall you, the
end-user, be permitted, allowed or authorized to commercially exploit
the Software. Neither you nor anyone at your direction shall do any
of the following acts with regard to the Software, or any portion
thereof:

        Rent;

        Sell;

        Lease;

        Offer on a pay-per-play basis;

        Distribute for money or any other consideration; or

        In any other manner and through any medium whatsoever
commercially exploit or use for any commercial purpose.

Notwithstanding the foregoing prohibitions, you may commercially
exploit the software you develop by exercising the Educational Use
right, referenced in paragraph 2. hereinabove.

4.      Copyright.  The Software and all copyrights related thereto
(including all characters and other images generated by the Software
or depicted in the Software) are owned by ID and is protected by
United States  copyright laws and international treaty provisions.
Id shall retain exclusive ownership and copyright in and to the
Software and all portions of the Software and you shall have no
ownership or other proprietary interest in such materials. You must
treat the Software like any other copyrighted material. You may not
otherwise reproduce, copy or disclose to others, in whole or in any
part, the Software.  You may not copy the written materials
accompanying the Software.  You agree to use your best efforts to
see that any user of the Software licensed hereunder complies with
this Agreement.

5.      NO WARRANTIES.  ID DISCLAIMS ALL WARRANTIES, BOTH EXPRESS
IMPLIED, INCLUDING BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE WITH RESPECT
TO THE SOFTWARE.  THIS LIMITED WARRANTY GIVES YOU SPECIFIC LEGAL
RIGHTS.  YOU MAY HAVE OTHER RIGHTS WHICH VARY FROM JURISDICTION TO
JURISDICTION.  ID DOES NOT WARRANT THAT THE OPERATION OF THE SOFTWARE
WILL BE UNINTERRUPTED, ERROR FREE OR MEET YOUR SPECIFIC REQUIREMENTS.
THE WARRANTY SET FORTH ABOVE IS IN LIEU OF ALL OTHER EXPRESS
WARRANTIES WHETHER ORAL OR WRITTEN.  THE AGENTS, EMPLOYEES,
DISTRIBUTORS, AND DEALERS OF ID ARE NOT AUTHORIZED TO MAKE
MODIFICATIONS TO THIS WARRANTY, OR ADDITIONAL WARRANTIES ON BEHALF
OF ID.

        Exclusive Remedies.  The Software is being offered to you
free of any charge.  You agree that you have no remedy against ID, its
affiliates, contractors, suppliers, and agents for loss or damage
caused by any defect or failure in the Software regardless of the form
of action, whether in contract, tort, includinegligence, strict
liability or otherwise, with regard to the Software.  This Agreement
shall be construed in accordance with and governed by the laws of the
State of Texas.  Copyright and other proprietary matters will be
governed by United States laws and international treaties.  IN ANY
CASE, ID SHALL NOT BE LIABLE FOR LOSS OF DATA, LOSS OF PROFITS, LOST
SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR OTHER
SIMILAR DAMAGES ARISING FROM BREACH OF WARRANTY, BREACH OF CONTRACT,
NEGLIGENCE, OR OTHER LEGAL THEORY EVEN IF ID OR ITS AGENT HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY
OTHER PARTY. Some jurisdictions do not allow the exclusion or
limitation of incidental or consequential damages, so the above
limitation or exclusion may not apply to you.

Acknowledgements

Built against ngdevkit. Hardware details were cross-referenced with the Neo Geo Development Wiki.

About

A real-time, first-person raycaster demonstration for the SNK Neo Geo AES, written in C.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 47.3%
  • Python 40.3%
  • Shell 7.0%
  • Makefile 5.4%