Added JFDuke3D, Duke Nukem 3D source port for smaller Pis
Homepage: https://jonof.id.au/jfduke3d/
This old source port is the original base of EDuke32, according to its own wiki, and provides an OpenGL ES 2 renderer which runs extremely fast on a Raspberry Pi 3 B+; it shouldn't run any slower in older models. On the mentioned Pi 3B+, it can be played on 1280x720 with no visible slowdown, and unlike EDuke32, this resolution (and any resolution) is presented in actual fullscreen.
In greater hardware, it supports GL 2 and Polymost.
Uses SDL2 Game Controller for input (among others), so any gamepad can be supported as long as a gamecontrollerdb.txt file is included in $romdir/ports/duke3d.
Downside is: it seems that it doesn't support addons. It does support NAM at least (couldn't test it, I don't have it, or the Duke addons).
Seriously, just give it a go, on any platform. Script was based on the existing EDuke32 one, so it should run on anything supported by RetroPie.
Semi-unrelated note: EDuke32 installer didn't detect DUKE.GRP file if it's all uppercase, so it installed the shareware version of Duke, no matter if you had the full version on $romdir/ports/duke3d. Having both the full and shareware version of the game at the same time (with filenames using different letter cases) may work with EDuke32, but will crash JFDuke3D (actually, it just tries to use the *.CON files of the full version with the shareware one, failing to start because of it). Make sure you have only one version of the game installed.
This jfduke3d script properly detects the existence of DUKE.GRP, no matter if upper or lowercase. The same logic was applied for the eduke32 script (second commit). Replaces PR https://github.com/RetroPie/RetroPie-Setup/pull/3478 .
From the same author (Jonathon Fowler) there's a Shadow Warrior port, which uses the same Build engine port, obtained in a git submodule. Seeing that its compilation process is not that different from JFDuke3D, I opted to include it here. Its name is JFShadowWarrior, or JFSW for short.
Credits and thanks to @Exarkuniv for the detection and addition of the game's expansions, which is included in RetroPie-Extra.
If you're reading this, I hope you don't mind. The difference with it is that with this one detects more platforms than the Pi 4 alone.
In terms of performance, in a RPi 3B+ you'll have to disable Voxel Sprites to get JFDuke3D's speed. Otherwise, just keep it at 640x480 resolution.
Note that here the "new way" of keeping config directories (/retropie_dir/configs/ports/game_name/port_name/) is followed, something I couldn't do with JFDuke3D, since EDuke32 saves directly to configs/ports/duke3d.
Thank you. I think we could avoid some duplication as the build logic looks the same. the shadow warrior port could call the build call from the jfduke3d module.
I think we could avoid some duplication as the build logic looks the same. the shadow warrior port could call the build call from the jfduke3d module.
Done, now JFShadowWarrior is completely dependent on JFDuke3D. I hope you aren't bothered by the parametrization (not a fan of the way it was handled in the eduke32/ionfury pairing). Note that I removed the specific commit to clone from both projects' repos. They don't update that often, so missing any bug fixing is not worth it. Also removed forcing the ALSA driver for music on x86.
@protocultor The emulator works great after adding your script. Is this the right place to mention issues for controls specific to this ~emulator~ game?
@newhinton no, I don't think so, this is for the addition of the scripts to RetroPie... unless your problem is so terrible that it makes these scripts not worth adding. Try the official documentation, or better yet, my post in the official RetroPie forums. I'll try to help you there.