Releases: nmlgc/ReC98
Release list
P0335
A TH03-focused release with a major fix for the rare score reduction and extend glitches! And a few minor rendering fixes.
Anniversary Editions (built on top of the debloated builds)
-
[TH03] Transfer pellets drawn with their left edge at
((x % 16) == 6)and((x % 16) == 14)now look identical to pellets drawn at other X positions. In the original game, a 1×2-pixel line at the left edge of these sprite variants was accidentally shifted 2 pixels to the right.
See https://rec98.nmlgc.net/blog/2025-12-31#pellets-2025-12-31 for an image and a video of the original bug. -
[TH03] Exploding fireballs are now drawn at the correct position that matches their internal coordinates used in collision detection. The original game drew them 8 pixels lower.
See https://rec98.nmlgc.net/blog/2026-03-16#explosions-2026-03-16 for a video of the original bug, under the "from fireball" tab.
Debloated builds
- [TH03] The rare glitches that would either reduce score or grant extends under seemingly random circumstances have been removed.
These occurred when running the original game on particularly unlucky combinations of PC-98 operating system, sound card model, and machine speed. When such a system receives a VSync, PMD, or keyboard interrupt within a specific window of CPU instructions, an uninitialized variable with an otherwise deterministic value would receive a value derived from the memory range the game's code got loaded at. If this value then lies within a certain range while destroying a fireball with anything other than an explosion, the resulting out-of-bounds access would turn into either of these two glitches. Hence, they are easily fixed by locking down the variable's deterministic value instead of leaving it uninitialized, thus classifying this fix as a landmine rather than a bug.
See https://rec98.nmlgc.net/blog/2026-03-16#glitches-2026-03-16 for more details about the glitches and their cause.
Setup
Drop the ANNIV*.EXE and/or DEBLOAT*.EXE binaries into the directory of an existing installation of the respective game, and run either ANNIV or DEBLOAT from the DOS prompt to start the game.
If you run the games from .HDI images, use image editing tools like DiskExplorer to modify your installation.
To simplify distribution and reduce clutter in the game directory, the ANNIV and DEBLOAT binaries perform advanced witchcraft to automatically launch any required drivers as necessary, without needing a batch file. Doing this is technically impossible and prone to hypothetical failure, and thus only recommended for development and testing. Repacks should prefer starting the game with the included GAME*.BAT files instead:
| File name | starts build |
|---|---|
GAMEA.BAT |
ANNIV, regular |
GAMEAC.BAT |
ANNIV, CanBe |
GAMED.BAT |
DEBLOAT, regular |
GAMEDC.BAT |
DEBLOAT, CanBe |
See the troubleshooting section below for more info on the CanBe difference.
Command-line options for TH01
TH01's DEBLOAT.EXE and ANNIV.EXE preserve all command-line features of the original three executables:
-
The stage selection, test and debug modes can be entered with the
s,t, anddparameters, respectively:> anniv s > debloat s > anniv t > debloat t > anniv d > debloat d -
The original hidden ending preview feature has also been retained, and is available via the
fuuin t1andfuuin tparameters. Requires an externally launched MDRV98, just like the original binary.> anniv fuuin t > debloat fuuin t > anniv fuuin t1 > debloat fuuin t1
Troubleshooting
-
❓ The TH01 Anniversary Edition flickers worse than the original game on Neko Project
❗ Make sure you've checked the Screen → Disp vsync option. -
❓ TH02-TH05 freeze on CanBe models
❗ CanBe models use a special kind of FM sound chip that can't be automatically detected and requires dedicated PMD drivers:- Get
PMDPPZ.COMfrom (preferably) KAJA's home page - Place
PMDPPZ.COMin the directory of the affected games - Run the game using the
-cor--canbecommand-line switch:
> anniv --canbe > debloat --canbe > anniv -c > debloat -c - Get
Source code: https://github.com/nmlgc/ReC98/tree/anniversary
Full changelog compared to the previous release: P0323...P0335
Previous release: https://github.com/nmlgc/ReC98/releases/tag/P0323
Summary blog post: https://rec98.nmlgc.net/blog/2026-03-16
P0323
The initial release of the debloated TH02-TH05 builds, as well as TH03's Anniversary Edition! Primarily reduces lag in menus and cutscenes as a first step towards portability, but also comes with a single actual new feature:

A new Quit option in the VS Start menu! 🙌
The detailed changelog:
Anniversary Editions (built on top of the debloated builds)
- [TH03] The VS Start menu now features a
Quitoption.
Debloated builds
-
[TH01/TH02/TH03] The VRAM text renderer now renders illegal two-byte Shift-JIS codepoints as whitespace rather than equals signs (
=). -
[TH01] The game now exits with an error message if it failed to allocate the resident structure.
-
[TH01] All previous debloated and Anniversary Edition builds would only shut down a self-spawned MDRV2 when quitting from the initial main menu back to DOS. Once you started a game round, MDRV2 would continue to reside in memory even after quitting the game. This has now been fixed by tracking the necessary flag in the resident structure.
-
[TH02/TH03/TH04/TH05] All .PI images in menus and cutscenes are now loaded using a faster library and kept in memory in a format that's friendlier to the PC-98's graphics hardware. This reduces loading and rendering lag, and helps slower systems and emulators to get closer to hitting the exact frame durations ZUN specified in the code.
-
[TH02/TH03/TH04/TH05] Fixed the following specific instances of screen tearing:
- TH02:
- Title screen animation (first frame, palette changes, last frame)
- Music Room (entry, animation frames, exit)
- Main menu high score viewer (entry, exit)
- Shot type selection (entry)
- TH03:
- Music Room (entry, animation frames, exit)
- Character selection (entry, slow frames, palette flashes, fadeout)
- TH04:
- Main menu (returning from character selection, Music Room, or High Score viewer)
- Music Room (entry, animation frames)
- TH05:
- Main menu (returning from character selection, Music Room, or High Score viewer)
- Music Room (entry)
- TH02:
-
[TH02] The Music Room now stops the currently playing track before loading the new one. This avoids the risk of PMD or MMD playing back garbage during that load time, which might be noticeable on slow storage devices.
-
[TH03] The GDC clock speed check at startup has been removed. There are no known issues with running the game at a GDC clock speed of 5 MHz compared to the 2.5 MHz that ZUN originally enforces, even on real hardware.
-
[TH04/TH05] The ending scripts (
_ED*.TXT) now get loaded into a dynamically allocated buffer that matches their file size, just like in TH03. This removes the 8,192-byte limit that TH04 and TH05 originally imposed on these scripts. -
[TH04] The High Score viewer accessible from the main menu no longer renders garbage data if
GENSOU.SCRis corrupted. -
[TH04] The game no longer crashes after Reimu's Stage 5 pre-battle dialog when playing without an EMS driver. The original landmine is documented here.
-
[TH04/TH05] If any of the character/difficulty sections inside
GENSOU.SCRis corrupted, the games now recreate only that affected section with default data. This preserves the remaining valid sections instead of recreating the entire file as done in ZUN's original code. -
[TH04/TH05]
GENSOU.SCRis no longer fully re-encoded with newly randomized encryption keys when entering a new score after clearing the game or the Extra Stage.
Setup
Drop the ANNIV*.EXE and/or DEBLOAT*.EXE binaries into the directory of an existing installation of the respective game, and run either ANNIV or DEBLOAT from the DOS prompt to start the game.
If you run the games from .HDI images, use image editing tools like DiskExplorer to modify your installation.
To simplify distribution and reduce clutter in the game directory, the ANNIV and DEBLOAT binaries perform advanced witchcraft to automatically launch any required drivers as necessary, without needing a batch file. Doing this is technically impossible and prone to hypothetical failure, and thus only recommended for development and testing. Repacks should prefer starting the game with the included GAME*.BAT files instead:
| File name | starts build |
|---|---|
GAMEA.BAT |
ANNIV, regular |
GAMEAC.BAT |
ANNIV, CanBe |
GAMED.BAT |
DEBLOAT, regular |
GAMEDC.BAT |
DEBLOAT, CanBe |
See the troubleshooting section below for more info on the CanBe difference.
Command-line options for TH01
TH01's DEBLOAT.EXE and ANNIV.EXE preserve all command-line features of the original three executables:
-
The stage selection, test and debug modes can be entered with the
s,t, anddparameters, respectively:> anniv s > debloat s > anniv t > debloat t > anniv d > debloat d -
The original hidden ending preview feature has also been retained, and is available via the
fuuin t1andfuuin tparameters. Requires an externally launched MDRV98, just like the original binary.> anniv fuuin t > debloat fuuin t > anniv fuuin t1 > debloat fuuin t1
Troubleshooting
-
❓ The TH01 Anniversary Edition flickers worse than the original game on Neko Project
❗ Make sure you've checked the Screen → Disp vsync option. -
❓ TH02-TH05 freeze on CanBe models
❗ CanBe models use a special kind of FM sound chip that can't be automatically detected and requires dedicated PMD drivers:- Get
PMDPPZ.COMfrom (preferably) KAJA's home page - Place
PMDPPZ.COMin the directory of the affected games - Run the game using the
-cor--canbecommand-line switch:
> anniv --canbe > debloat --canbe > anniv -c > debloat -c - Get
Source code: https://github.com/nmlgc/ReC98/tree/anniversary
Full changelog compared to the previous release: c5e51e6...P0323
Previous release: https://github.com/nmlgc/ReC98/releases/tag/P0239
Summary blog post: https://rec98.nmlgc.net/blog/2025-09-29
P0239 (TH01 Anniversary Edition)
(Refer to the initial release of this fork for a description of what this fork is about, and how to run this binary.)
Just a minor release, featuring ½ of a push worth of small bug fixes:
-
ANNIV.EXEnow runsZUNSOFT.COMtogether with MDRV98 if the latter isn't resident at startup time. With the ZUN Soft logo animation included,ANNIV.EXEis now fully independent ofGAME.BAT. -
The optional
AUTOEXEC.BATis now correctly encoded in Shift-JIS instead of accidentally being UTF-8. This fixes the mojibake in its finalECHOline seen in the previous two releases. -
The stage selection debug feature (
anniv s) now works reliably. ZUN's original code forgot to initialize the internal debug flag for thesmode, which causedgame sto only work if a specific byte in conventional DOS RAM was written to before starting the game. This happens on a certain widely circulated .HDI copy of TH01 that boots MS-DOS 3.30C, which might be the whole reason whygame sis widely documented to trigger a stage selection to begin with. -
All bugs in the 1×1 particle system during the Mima fight have been fixed:
- They are now rendered with basically no flickering, and only rip barely visible 1×1 holes into the sprites they overlap.
- The original game had an off-by-one error that disabled the very first particle after spawning the 41st one on the 80th frame of the fight, leaving it on the screen until another sprite overlaps it.
See https://rec98.nmlgc.net/blog/2021-10-09 for a recording of the original bug.
-
The score popups for flipped cards are now displayed without flickering.
-
The flashing ドカーン image in the 地獄/Jigoku Bad Ending is now displayed without tearing. Both of the images in this effect are now shown for two frames each, matching the intention of ZUN's code. With some new image display optimizations, the whole animation is now also way more likely to complete within ZUN's defined amount of frames, slightly speeding up this ending compared to the original game.
See https://rec98.nmlgc.net/blog/2022-06-17 for a documentation of the original bug. -
The
bombvalue shown in the lowest line of the in-game debug mode output is now right-aligned together with the rest of the values. This ensures that the game always writes a consistent number of characters to TRAM, regardless of the magnitude of thebombvalue, preventing the seemingly wrongtimervalues that appeared in the original game whenever the value of thebombvariable changed to a lower number of digits.
Source code: https://github.com/nmlgc/ReC98/tree/anniversary
Full changelog compared to the previous release: c7bdc1a...P0239
Previous release: https://github.com/nmlgc/ReC98/releases/tag/P0234-1
Summary blog post: https://rec98.nmlgc.net/blog/2023-05-01
P0234-1 (TH01 Anniversary Edition)
(Refer to the initial release of this fork for a description of what this fork is about, and how to run this binary.)
Small fix for a (non-ZUN) bug introduced in P0234. When defeating Sariel's first form, a previously undocumented ZUN quirk causes all pellets in a delay cloud state to be carried over to the second form. Being unaware of this quirk, I didn't keep it in mind when rewriting the pellet rendering code, which accidentally ended up rendering such pellets as white streaks across their trajectory once their delay cloud animation finished:
2023-03-14-TH01-Sariel-delay-cloud-carry-P0234.webm
This issue is fixed in this build. Thanks to mu021 for reporting!
Source code: https://github.com/nmlgc/ReC98/tree/anniversary
Full changelog compared to the previous release: P0234...P0234-1
Previous release: https://github.com/nmlgc/ReC98/releases/tag/P0234
Summary blog post: https://rec98.nmlgc.net/blog/2023-03-14
P0234 (TH01 Anniversary Edition)
First release of the TH01 東方靈異伝 ~ The Highly Responsive to Prayers Anniversary Edition: a bugfixed and optimized version of the original game with smoother rendering and less flicker. All improvements are purely visual; gameplay remains unmodified compared to ZUN's original release.
Notable changes
-
Interlaced pellet rendering was removed from the Stage 15 and 20 boss fights, effectively doubling their perceived frame rate. During these stages, the original game separated all active pellets into two halves which it rendered on alternate frames, resulting in a noticeably choppy game performance. This was likely done to work around the enormous amount of wasted CPU cycles in the original pellet rendering code, and to reduce tearing due to the game being single-buffered. By optimizing the renderer, this build solves the root problem, and easily manages twice the number of pellets without flickering.
-
Flickering from pellets that overlap other sprites has been significantly reduced, and is now limited to a correct 8×8 rectangle instead of using a 16×8 or even 32×8 rectangle depending on the pellet position.
-
The Sariel fight features two animations that are not displayed in the original game because of type confusion bugs:
- The spawn cross circle in the red bird pattern was supposed to smoothly fly off the playfield, but suddenly vanishes after spawning all bird eggs.
- The "swaying leaves" pattern in her second form contains an unused splash animation once the sparks hit the top of the playfield and turn into leaves. The intended delay between these two states remains in the original game, lending further proof to this being a bug.
Both animations were restored in this build. See https://rec98.nmlgc.net/blog/2022-01-31 for comparison videos.
-
The game now stores its main code in a single binary instead of splitting it up into three executables (
OP.EXE,REIIDEN.EXE, andFUUIN.EXE). After removing a bit of bloat, the newANNIV.EXEended up even smaller than the originalREIIDEN.EXE.
Setup
Drop ANNIV.EXE into the directory of an existing TH01 installation, and run this file from the DOS prompt to play the game.
If you run the game from an .HDI image, use image editing tools like DiskExplorer to modify your installation. In this case, you can also copy the included AUTOEXEC.BAT to automatically boot into the Anniversary Edition, showing the ZUN Soft logo before the main menu.
To simplify distribution and reduce clutter in the game directory, ANNIV.EXE performs advanced witchcraft to automatically launch MDRV98.COM if necessary, without needing a batch file. Doing this is technically impossible and prone to hypothetical failure, and thus only recommended for development. Repacks should create a custom version of the original GAME.BAT that replaces the call to OP.EXE with ANNIV.EXE.
Command-line options
ANNIV.EXE preserves all command-line features of the original three executables:
- The test and debug modes can be entered with
anniv t, andanniv d, respectively. - The original hidden ending preview feature has also been retained, and is available via
anniv fuuin t1andanniv fuuin t. Requires an externally launched MDRV98, just like the original binary.
Troubleshooting
- If you're playing on Neko Project and seeing more flickering than in the original game, make sure you've checked the Screen → Disp vsync option.
Source code: https://github.com/nmlgc/ReC98/tree/anniversary
Summary blog post: https://rec98.nmlgc.net/blog/2023-03-05