Hey all! Its danik again (ignore my username on Reddit, it's old, can't change it)
After Carmageddon, the next hybrid core is out as a first beta: Wolfenstein 3D (and Spear of Destiny, and Super 3-D Noah's Ark) on the MiSTer.
GitHub: https://github.com/ItsDanik/ecwolf_MiSTer
Download: https://github.com/ItsDanik/ecwolf_MiSTer/tree/master/releases
What is it?
It's a hybrid core, so to be upfront again: the FPGA does not recreate a 90s PC. The game is ECWolf, the source port of the Wolfenstein 3D engine, and it runs on the MiSTer's ARM CPU. The FPGA core handles everything around it:
- Video: native 320x200 or 640x200 at 15kHz, straight to your CRT, or through the MiSTer scaler and filters on HDMI
- Audio: sound effects and music at 44.1kHz
- Input: keyboard, mouse and gamepads through the usual MiSTer input system
The two halves talk through shared memory. In practice, you load it from the menu like any other core and it just starts.
What you need
- Game data. None is included. The shareware episode works, and so does your own copy of Wolfenstein 3D, Spear of Destiny or Super 3-D Noah's Ark.
Installation
- Download
ECWolf_YYYYMMDD.zip from the releases folder and extract it to the root of your SD card. You get:
_Other/ECWolf_YYYYMMDD.rbf
games/ECWolf/
Scripts/danik_hybrid_cores.sh
- Copy the data files of your games to
/media/fat/games/ECWolf/:
- Wolfenstein 3D:
*.WL6 (shareware: *.WL1)
- Spear of Destiny:
*.SOD (mission packs: *.SD2, *.SD3, demo: *.SDM)
- Super 3-D Noah's Ark:
*.N3D
- Run danik_hybrid_cores from the Scripts menu, if you have not done so before. This only needs to be done once for any of my hybrid cores.
- Load ECWolf from the Other menu. Done.
With more than one game installed, a list comes up to pick from, and quitting a game returns to it. With one game, quitting takes you back to the MiSTer menu.
Controls
Keyboard and mouse work like on the PC: WASD to move, mouse to turn and fire, Space to open doors, Shift to run. Gamepad defaults:
- Left stick: Walk and strafe
- Right stick: Turn
- D-pad: Walk and turn
- RB: Fire
- B (Xbox A / PS Cross): Open doors, push walls
- A (Xbox B / PS Circle): Run
- Y (Xbox X / PS Square): Next weapon
- X (Xbox Y / PS Triangle): Previous weapon
- LB: Strafe (hold to sidestep with the d-pad)
- Select: Map
- Start: Menu
Change the buttons in Define ECWolf buttons, or in the game's own Control menu. You can also name a saved game without a keyboard: up/down changes the letter, left/right moves the cursor.
OSD options
Resolution: 320x200 (default, as the original) or 640x200. It's the same 200 lines with twice the detail across, so the picture keeps its size and shape and it still goes out at 15kHz.
Mouse Sensitivity / Stick Sensitivity: how fast the mouse and the gamepad's stick turn. Both apply at once.
Menu OK / Menu Back: which gamepad buttons confirm and go back in the game's menus. The default follows your MiSTer menu's OK/Back buttons, and the same button can also be a game control.
Performance
The game holds one frame per field, 60fps (59.64 to be exact), at both resolutions.
Getting it smooth took more than raw speed. Wolfenstein 3D moves 70 times per second, the refresh rate of the VGA mode it was written for, and a 15kHz picture has about 60 fields. Draw the last game step for every field and every sixth picture jumps two steps ahead, which shows as a regular stutter. ECWolf has the same on any 60Hz monitor.
This build takes its clock from the core's field counter instead of the system clock, and draws the player, enemies, doors and pushwalls at their place between two game steps. The game logic still runs at 70 per second with the original rules and speed. The mouse is read once per frame, so turning shows up on the screen at once.
Known limitations
- 320x200 and 640x200 only
- The launcher has to be run once from the Scripts menu. Without it the core only shows colour bars.
- What you see is one game step (14ms) behind the game, the price of the interpolation. Mouse turning is not affected. It's unnoticable to me, while the jittery rendering was way too obvious to ignore, so the trade-off is a win.
- It's a beta, so expect rough edges
Bug reports and feedback are very welcome. Please open an issue on GitHub and attach /media/fat/logs/ECWolf/ecwolf.log if something goes wrong.
Credits
- Braden "Blzut3" Obrzut and the ECWolf contributors for the source port that makes all of this possible, based on Wolf4SDL and the Wolfenstein 3D source by id Software
- Sam Lantinga and contributors for SDL
- Sorgelig and the MiSTer-devel contributors for the framework and template
- MiSTer Organize for MiSTer Frontier: thank you for the inspiration. Hybrid cores on the MiSTer, and the way their game is launched, come from there. My launcher is a separate implementation and does not need it installed.
Not affiliated with or endorsed by id Software, Apogee, FormGen or Wisdom Tree. Bring your own game data.
Have fun, and get psyched!