Releases: ReflectionHLE/ReflectionHLE
Sep 26, 2024 (v0.44.0)
10th anniversary release.
If you're upgrading from a version preceding 0.40.0, please check
migration notes for v0.40.0. The project was renamed to "ReflectionHLE"
at the time, and as a side-effect, older settings and saved games
have to be manually migrated.
This might be an opportunity to mention Arno, the maintainer of CatacombGL,
who helped earlier with at least a few bug reports and additional feedbacks.
- With emphasis on Wolfenstein 3D and derived games, proper support for
modified game data is now present, almost 10 years after ReflectionHLE's
initial release. That covers map packs and other modifications compatible
with the original unmodified DOS executables.
Directories with modified game data may either be selected from
the launcher, or specified via command-line arguments, including "-mod".
The command-line arguments are usable only if the launcher is skipped.
For Spear of Destiny (including the mission packs), the .SOD file extension
should be used for modified game data in order to be recognized, even if
the base game's data uses a different extension (like .SD2 or .SD3).
Modifications require compatible base game installations,
even if originally made for shareware versions of Wolfenstein 3D.
Further note that there might be incompatibilities with
modified data (including map packs) reproducing behaviors
dependent on the layout of a game's DOS exe. - Other games might lack the scope of compatible modifications as available
for Wolfenstein 3D and derived, due to having much less (if any) mods
changing just the game data, as well as resources related to the
data (like map headers) being embedded in the DOS executables. - As a consequence of adding mod support, the hidden setting
"manualgamevermode", originally introduced in November 2015, is now removed.
It hadn't really been tested for years, either way. - Nuked OPL3 is now at git revision cfedb09efc03f1d7b5fc1f04dd449d77d8c49d50.
- Fix updated location of Wolf3D/SOD game data (thanks Blzut3).
- Some other changes to game data file access logics. Modified files are now
allowed not just from any selected mod dir, but also from the directory used
for writing files like saved games. Additionally, file integrity checks
previously restricted to Spear of Destiny and its mission packs
(due to possibly unknown file extensions, e.g., .SOD or .SD3)
are used in general now, for unmodified game data. - Made compatible with Android 11 (API level 30)'s scoped storage.
A different storage access permission is now requested on Android 11 and later.
Technically speaking, a side-effect of this is allowing greater write access,
even if ReflectionHLE has no need for it, but that's been a simple solution
for now, at least for manually downloaded APK files. - Internally sort game installations by version id also after
adding a new one from the launcher. - Split the launcher's game selection menu. Version is chosen after game now,
with Wolfenstein 3D, Spear of Destiny and Super 3-D Noah's Ark falling under
the category of a single "game". - Further split the launcher's command-line arguments for the games
into a separate setting per game, as similarly done for mods. - Misc. minor textual edits in the launcher.
- Use a version identifier based on the git hash for dev builds.
- Disable mouse binds used for showing controller UI that lets the user select
a scroll in Catacomb 3-D/Abyss, as well as the UI for selecting a function key.
By design, the given implementation won't show such UI if touch input isn't
in use and no compatible game controller is detected.
This also exposed an unexpected sanity check failure in the code,
occurring upon trying to show debug keys with the mouse while another
kind of controller UI is supposed to appear but does not.
The sanity check failure was fixed. On the other hand, as the usefulness
of the mouse binds isn't currently clear, it was decided to disable them. - Other miscellaneous changes.
Oct 14, 2022 (v0.40.1)
If you're upgrading from a version preceding 0.40.0, please check
migration notes for v0.40.0. The project was renamed to "ReflectionHLE"
at the time, and as a side-effect, older settings and saved games
have to be manually migrated.
- Add a toggle for showing/hiding the ENDOOM screen on exit,
currently identified in the launcher as "Wait for input on exit".
Regardless of the toggle, it'll still appear in case of a nonzero exit code.
Other screens specific to shareware versions of certain games might
further keep appearing, or introduce their own delays. - Updated search paths for Wolfenstein 3D and Spear of Destiny game data.
- Keyboard overrides don't fully replace the original uses of the keys
as of this version. For instance, if the launcher is used to select
the key W for moving forward in Catacomb 3-D, it can still be used
as a part of debug keys for warping to another level.
On the other hand, the familiar functionality of the key otherwise used
for the same in-game action will be disabled. To clarify for the example
of moving forward, the key generally used for this purpose from
Catacomb 3-D's own control panel (the Up arrow by default)
will not actually be used for moving forward.
Note that mouse button overrides are still full overrides and there's
no change in behaviors as describe above. - Miscellaneous internal changes related to user input, related in part to
keyboard overrides. One example is a bug fix, where pressing on a key
moving Keen left, followed by another key moving Keen right, and then
releasing one of the keys, would make Keen stop moving altogether.
Also, as of this version, the analog motion is explicitly reserved for analog
controller axes; novert impacts these, as well as ordinary mouse movement. - Use more locks for the audio mixer. This particularly
helped resolving unexpected slowdowns in Android builds
with BE_ST_MANAGE_INT_CALLS_SEPARATELY_FROM_AUDIO=1,
during playback of digitized sounds in Wolf3D. - BE_ST_MANAGE_INT_CALLS_SEPARATELY_FROM_AUDIO=1 is used for Android again.
- Other updates related to Android builds.
- Made a few changes removing dependencies on libgcc and C++ libraries
as long as we don't actually need any of them. - Other miscellaneous edits.
Dec 31, 2021 (v0.40.0) - ReflectionHLE
The project is renamed "ReflectionHLE" as of this version.
As a side-effect, users of earlier Reflection Keen versions will have to
manually migrate older settings and saved games. See paths given below.
Windows: %APPDATA%\reflection-keen => %APPDATA%\reflectionhle
macOS: ~/Library/Application Support/reflection-keen
=> ~/Library/Application Support/reflectionhle
Linux - two paths (assuming $XDG_CONFIG_HOME and $XDG_DATA_HOME aren't set):
~/.config/reflection-keen => ~/.config/reflectionhle
~/.local/share/reflection-keen => ~/.local/share/reflectionhle
- The project was renamed from "Reflection Keen" to "ReflectionHLE".
- A single executable can now be used for running the supported games.
It is identified as "ReflectionHLE". - Due to using one exe, the application icon had its game identifiers removed.
- Additionally, the cfg file was split, with game-specific settings residing
in their own separate cfg files. Some cfg key and value names were further
renamed. Code was added for automatic migration of these from v0.33.1, but
this does not cover the directories which store the cfg files and saved games. - The command-line options -skipintro and -showslides were removed. Instead,
you can show the intro or slides with sub-gamever selection via -gamever. - Added the command-line option -listgamevers. It can be used for listing
supported game versions, instead of -?, which doesn't do so anymore. - There's now experimental support for keyboard and mouse button overrides,
applying to in-game actions during gameplay. - Note that these take a higher priority than in-game settings for the
same keys. They also have a higher priority than hardcoded behaviors of them.
For instance, it might be impossible to use a cheat code. You can still
use a cheat code via the on-screen debug keys, though. - The on-screen keyboard with debug keys can now be displayed even
if there's no use of touch input or any game controller. - Revert the impact of changes from v0.33.0 to the way controller buttons
get mapped under the modern controller scheme. Instead of mapping to the
default settings of a game, mapping is now done to the matching actions.
For instance, in Keen Dreams, you can map a button to Jump instead
of Ctrl (the default key for jumping in the original releases).
This is still done in a different manner from versions preceding 0.33.0,
as it's now less tied to the original games' keyboard settings. - As a side-effect, there are changes to the impacts of the analog motion
toggles, even while using a D-pad. Additionally, the novert toggle should
also impact vertical motion from a game controller or touch input. - Catacomb Abyss: Ensure it's possible to scroll through HELP.TXT using a game
controller or touch input, even if movement keys were changed in config.abs. - General restructuring of the launcher's menus, following the support for
multiple games from a single exe and the addition of key/button overrides. - Android builds are now possible again, albeit without audio resampling.
Generally speaking, these builds should be considered less supported. - For technical reasons, sound output is done somewhat differently on Android.
There may still be problems with audio, including delays. - Improvements to timing of sound playback during the intermission screen
in Wolfenstein 3D, Spear of Destiny and Super 3-D Noah's Ark. This
might be more noticeable while VSync is toggled on. - Launcher control bindings for Wolfenstein 3D and Super 3-D Noah's Ark:
The weapons/feeders are now referred to by their numbers,
instead of game-specific descriptions. - Emulation of mouse motion via game controllers was made
less frame rate dependent. - Fix a typo impacting startup of Catacomb Apocalypse's hint book. The offset
of a textual screen as present in the original exe was wrong. The bug was
introduced during a refactor after the release of v0.30.1.
This screen is actually used just in the electronic catalog of the supported
shareware version of Catacomb Abyss, upon trying to print the catalog. - Catacombs, Wolf3D: Fix building in case "char" is an unsigned type.
- Additional miscellaneous refactors, edits and fixes.
Aug 24 2021 (v0.33.1: Loud Edition)
- Identified as "Loud Edition" in-game, since changes related to audio mixing
increased the default sound volumes, at least outside of the PC Speaker. - Nuked OPL3 is now at git revision bb5c8d08a85779c42b75c79d7b84f365a1b93b66.
- Introduce slider UI for a few launcher settings.
- Add a new Sound Blaster emulation option, currently relevant just for Wolf3D.
Use SB for mono output, and SB Pro or SB 16 for stereo panning of
digitized sounds. Note that it's more significant after choosing SB 16. - Volumes for SB stereo panning, and internally also for OPL emulation
with relation to the SB Pro/16, are based on tables of dB values
posted here by James-F: https://www.vogons.org/viewtopic.php?t=54269 - Add user-accessible per-device volume controls, independent of what was
described earlier (e.g., Wolf3D's stereo panning). Note that these volumes
are configurable per-device. - In particular, you cannot separate the OPL (AdLib) volumes
of music and sound effects in Catacomb 3-D or Wolfenstein 3D. - Also, before playing Keen Dreams using the data from the 2015 port,
you should use the digitized sound volume slider. Reason is that
the sound effects were re-recorded into digitized forms. - Balance the default PC Speaker volume, following the changes.
- Fix a sound mixing bug. Previously, the more sound sources were added to
the mixer, the quieter each of them would be in the mixed output. Instead
of taking the average of the sources, take the sum and clamp the result. - Other miscellaneous changes.
Aug 02 2021 (v0.33.0)
- Additional restructurings of game-agnostic code.
- Nuked OPL3 is updated to the last revision.
- Keen Dreams: Try to fix memory allocation problems
while using the data from the 2015 port. - Keen Dreams, 3D Catacombs: For an uncached map, if the map header offset
being read is nonnegative but smaller than 8, just quit with an appropriate
error message. This fixes behaviors which greatly depend on the memory layout,
including a possible hang. - Catacomb Abyss: Make it possible to warp to map 19, at least in general.
Also fix crashes upon attempts to load map 20 or 21 by
outputting a new error message. - 3D Catacombs, Wolfenstein 3D: Add a "novert" toggle, letting the user
limit in-game mouse movements for turning/moving left and right. - Wolfenstein 3D: Add a "lowfps" toggle, used for explicitly lowering the
frame rate. The purpose of this is controlling, to an extent, how far can
pushwalls move. Reason is, they were intended to move for 2 tiles, but
it turned out that they could move for 3 tiles as computers were
becoming faster. The Fake Hitler's fireballs also turned out
to move slower while the frame rate was higher. - Wolfenstein 3D: Emulate, to an extent, the consequences of a
buffer overflow that follows a press on a pushwall while it's moving.
This is basically a Vanilla Bug, in which such walls are operated as if
they were doors, and unintentional changes to static objects may occur. - Wolfenstein 3D: Upon trying to load a non-existent level
(say, in the March 1992 prototype), just report that the map isn't 64*64.
This is mostly similar to the outputs of the original executables,
while skipping potential undefined behaviors. - Wolfenstein 3D: Fix menu navigation with the mouse while using a window.
- Change the way controller buttons get mapped under
the modern controller scheme. Basically, rather than parsing
the game's own configuration of keys and then using it as a base
for the mappings, just use the game's default bindings internally.
For instance, if a button was previously configured to be mapped
to "Jump" in Keen Dreams, it'll now map to the Ctrl key instead. - Note that such buttons may internally get mapped to mouse buttons
instead of keyboard keys, in case "Motion emulation mode" is set to
"Mouse". The behaviors should remain unmodified in such a case. - Further note that the above-mentioned changes impact
touch input, albeit the UI remains as-is. - Amend controller usability fix from v0.32.1 to work better
when the setting "Motion Emulation Mode" is set to "Mouse". - Add REFKEEN-NOTES.txt files to the source tree, describing technical changes
from the original versions of games, including cases in which such changes
exist for the purpose of emulating vanilla bugs. The information was
collected by looking for mentions of the word REFKEEN in the sources. - Other miscellaneous fixes.
Jun 06 2021 (v0.32.1)
- Redistributable application bundles can now be built for macOS with CMake.
(Thanks to Blzut3 for this addition.) - Fix a possible crash, reproduced while binding an in-game action
to a controller button in the launcher with SDL 2.0.14 (thanks chungy).
This was a side-effect of an increase of SDL_CONTROLLER_BUTTON_MAX's value. - More generally, mentions of enumerated controller buttons and axes
from SDL2 were replaced with equivalents defined in be_st.h. A few
related range checks were further added. - The Xbox Elite controller's paddles can now be used as an additional
alternative to buttons, in case SDL 2.0.14 or compatible is used. - Fix a significant usability problem with game controllers. When an
axis' value changes sign, a proper "release" notification should now
be sent for the original sign. Previously, the user could unexpectedly
get stuck in a specific state, like a continuously rotating protagonist.
Dec 25 2020 (v0.32.0)
- KDreams, Catacombs (and Wolf3D): Make it possible
to bind actions to a game controller's D-pad. - Wolf3D: Support game controllers, in a similar manner to
what's already been covered for Keen Dreams and the Catacombs.
Further add mappings for touch input. - Wolf3D: Support stereo panning. This might not be fully accurate,
but hopefully, it's not that far. - Wolf3D: Support saved games. They should be read and written using the same
formats as the original DOS versions. This may currently be buggy by nature. - SD_TimeCountWaitFromSrc/SD_TimeCountWaitForDest timing fix, applying to
all games, but especially noticeable while playing back demos in Wolf3D. - Add support for Spear of Destiny FormGen version 1.0, as well as the
variation of FormGen version 1.4 which is actually identified as "V1.4"
in-game. Currently, the one mistakenly identified as "V1.0" won't be detected.
The mission packs' data still needs to be the same as in the
Activision version, thus e.g., including the UAC logs. - When game installations are shown in the launcher, don't print their
locations for now. This might become more useful later, in case it will
be possible to choose any of multiple game installations which otherwise
match the same version (e.g., due to somewhat differing game data).
It shouldn't matter as much for now. - A change that may potentially break saved games made
with older versions of the KDreams and Catacombs ports:
The macros COMPAT_OBJ_CONVERT_OBJ_PTR_TO_DOS_PTR and
COMPAT_OBJ_CONVERT_DOS_PTR_TO_OBJ_PTR were fixed. The original sizes
of the object structs, as present in the DOS executables from the 90s,
are now used, instead of sizeof(objtype) from the source po 8000 rts. - Other misc. fixes and modifications. Thanks to Blzut3 for
assistance with a subset of the changes in this version.
Oct 16 2020 (v0.31.0)
- Support more than one possible filename for game data and EXE names.
Following this, a file named "NOAH3D.EXE" can now be identified as
a part of Super 3-D Noah's Ark, in addition to "NOAH3DOS.EXE".
This refers just to the matching DOS executable.
File integrity check is done using the size and crc32. - Additionally, again thanks to the above, support for the
Spear of Destiny Mission Packs is now in. Reason it's related
is that the file extension of the mission-specific game data can vary,
depending on the game installation being in use and its current state.
For all missions (including the original), .SOD and .SD4 are valid
file extensions. Other allowed extensions: .SD1 for the base game,
.SD2 for mission 2 and .SD3 for mission 3. - Note that as a side-effect, data integrity checks are now done for all
game data (graphics, maps, sounds) read from the Wolfenstein 3D codebase.
In addition to earlier uses of it, the hidden "manualgamevergame" setting
can now be used to disable this, albeit this might make it impossible
to properly start Super 3-D Noah's Ark or any of the Spear of Destiny
missions, depending on the filenames. - Add support for more versions of Wolfenstein 3D, again by using code from
gamesrc-ver-recreation. This covers Apogee 6-episodes versions 1.1, 1.2 and
1.4, two GT Interactive releases, an id Software release, Apogee 3-episodes
versions 1.2 and 1.4, an Imagineer version and the March '92 prototype.
(Thanks to the wolf3denginepatches repository and Chris for assistance.) - Add detection of Wolfenstein 3D as it used to be offered via the
last incarnation of 3drealms.com, either on its own or as a part
of the 3D Realms Anthology. (Thanks Lunick.) - Add detection of Wolfenstein 3D, Spear of Destiny and Super 3-D Noah's Ark
as currently available from GOG.com. (Thanks WayneCa and chungy.) - Improve detection of game installations which is done by inspecting
the Windows Registry. Basically, this is now done by attempting to
inspect data for 32-bit and 64-bit applications altogether, while
additionally still trying to get data with SHGetValue as usual. - Wolf3D: The UPLOAD macro was replaced with an UPLOAD variable.
- Internally rename the wl1ap12 namespace to wl6ap11, and do the same with
other mentions of such strings. Most noticeable impact is probably
that when separate Wolf3D EXEs are build, reflection-wl6ap11 is
created instead of reflection-wl6ap12. - Typo fix: Do show "Wolfenstein 3D Shareware v1.4 (Local)" when referring
to shareware v1.4, instead of mistakenly mentioning v1.2 in the string. - Use a bit shorter descriptions for certain Wolfenstein 3D and
Spear of Destiny versions, so they can fit as launcher titles
(BE_Launcher_Handler_SupportedGameVersionSelection). - Add high level XMS and EMS implementations, use them in Wolf3D's
Page Manager, and also remove the REFKEEN_SIMPLIFIED/NOEMS/NOXMS
implementations from Wolf3D. (Thanks Blzut3.) - Wolf3D: Following the removal of the REFKEEN_SIMPLIFIED-specific code
from id_pm.c, pointers can now be appropriately converted in ShapeTest. - A small fix for using page up/down in the launcher while
none of the menu items can be selected. - A couple of fixes for bugs introduced after the audio mixer refactoring,
specific to runs without the audio subsystem. - Separate more audio and timing related code into more files, while reducing
direct references to SDL (albeit it's still used in the same manner). - Generally, continue splitting the contents of be_cross_fs.c and
making other restructurings and differing changes related to this code. - Wolf3D: Fix a possible buffer overflow in US_CheckParm, reproduced by
passing an argument with no alphabetical character. A good example is
the second argument in the following arguments string: "-tedlevel 1". - Make the codebase more usable with Visual Studio.
- Launcher: Add a missing comment about the impact of the
scale type setting on the border porches. - Bug fix: Conditionally hide or show the mouse cursor after
toggling fullscreen, depending on game-specific setups. - Fix an instance in which the in-game contents don't get
appropriately resized after toggling fullscreen. - Wolf3D: Make the mouse cursor usable while the game
is paused, if a fullscreen isn't used. - Other misc. fixes/changes.
Sep 28 2020 (v0.30.1)
- Don't show controller settings specific to the Catacombs for Wolf3D.
- When letting the user choose a root drive on Windows for locating
game data, append a backslash. For instance, use "C:\" instead of "C:".
Otherwise, the wrong locations may get accessed with _topendir. - Fix dir resource leak in BEL_Cross_DirSelection_PrepareDirsAndGetNames.
- Wolf3D: Fix the occurrence of a stale menu item in the
main menu for the GOODTIMES and SPEAR versions. - Improve the scrolling in the launcher a little bit,
mostly while pressing on up/down.
Sep 26 2020 (v0.30.0)
- 6-years anniversary release.
- Initial support for Wolfenstein 3D, Spear of Destiny
(minus the mission packs) and Super 3-D Noah's Ark (DOS version).
For Wolfenstein 3D, this covers all known shareware Apogee versions
which allow cheating, as well as 6-episodes Activision version 1.4.
For Spear of Destiny, this covers FormGen demo version 1.0 and
Activision version 1.4. For Super 3-D Noah's Ark, this covers
the one known version. - Note that for technical reasons, the Spear of Destiny mission packs
cannot be loaded as-is. - Additionally, Super 3-D Noah's Ark can only be loaded if the original
EXE for DOS is found and named "noah3dos.exe". That's because this is
the way it's currently offered from Steam, and right now, there's no
good way of supporting detection of the same data with another file name. - Currently unsupported in all games from the modified Wolfenstein 3D codebase:
Game saving/loading, modern game controller scheme, probably more. - The rate of palette updates in Wolfenstein 3D is at least somewhat imprecise.
- VSync was changed to be disabled by default for now. There are other
potential problems with timing in Wolfenstein 3D, which might partially
be related to instances in which the game tries to render more often
than the host display's refresh rate. - It is now possible to make a single exe that can be used for starting any
of the supported Catacomb titles. It is identified as "Reflection Catacomb".
This requires building the code as C++, since it makes use of namespacing. - The exact same method can be used for building a single exe covering
all currently supported versions of Wolfenstein 3D, Spear of Destiny
and Super 3-D Noah's Ark. This exe is identified
as "Reflection Wolfenstein 3D". - Template instantiations of reads and writes are now done
from the game-specific code, so be_cross_fs.c doesn't need
to include kd_def.h/c3_def.h/def.h. - Game definition structs were moved to separate headers.
- 256-colors VGA graphics can now be drawn for Wolfenstein 3D.
This was done with a subset of the existing EGA drawing routines as a base. - The overscan border is now shown only if aspect correction is toggled on.
An original goal of the aspect correction toggle was to make the source ports
more usable with displays that have a greater risk of screen burn-in. - Refactor the audio mixing code, so PC Speaker, AdLib / OPL and
digitized sounds can be concurrently played back in Wolfenstein 3D.
There's now a single audio mixer callback which can obtain data
from multiple sound sources, resample the inputs to the output
sampling rate and then mix them after resampling. - Use a pre-calculated sintable array for the Catacombs, as well as
Wolfenstein 3D. It is present in a newly added fixed_sintable.c file.
This fixes possible rendering errors, as well as errors related to gameplay.
The source of the problem (as checked with one of the Catacombs)
was that sintable[90] could be set to 0x10000, while it was
rather set to 0xFFFF with the original executables. - Switch to Nuked OPL3 for OPL emulation.
- Make it possible to toggle fullscreen via a key combo. This combo should
generally be Alt+Enter. While untested, Command+Enter should be used on macOS. - Revert to updating ticks (e.g., the games' TimeCount variables) from the
main thread instead of the SDL audio callback thread, albeit with the
code in general still being closer to the later revisions. - Migrate to CMake for building the executables.
- Other varying fixes and modifications.