P0256
This build starts the gradual migration to cross-platform low-level game libraries as part of the Linux port. SDL is now used for window creation, frame rate limiting, and input, while sound is handled through miniaudio.
Changes unique to the regular / cross-platform library build
-
The game now limits its frame rate by properly sleeping the process instead of the original's busy-waiting code that permanently used 100% of one CPU core to wait for the next frame. On modern systems, this should drop CPU usage into the 0%-2% range during regular gameplay.
-
Since the game no longer uses DirectInput 7, antivirus scanners shouldn't complain about the .EXE file anymore.
-
Thanks to SDL, the game should now support every possible controller, including more modern ones that maybe weren't supported by the original game.
-
The game now reads inputs from every connected controller, not just the one that is configured as the preferred device for older applications in the Control Panel.
- All controllers can be freely hot-plugged and removed while the game is running, just like the single controller in the original game.
-
Sound effects are slightly crispier when upsampled to native sampling rates of ≥44100 Hz, due to miniaudio's differently implemented low-pass filter.
-
Direct3DWindower no longer works properly, but DxWnd does.
Changes present in both builds
-
When playing the game through external DirectDraw windowing tools, the game window can now be moved.
-
The original game's rapid-fire screenshot feature has been restored. The original game mapped this feature to the PrintScreen key, which invokes Windows' own focus-stealing screenshot UI in recent Windows versions. For this reason, it's remapped to the P key in this build, which is consistent with all Windows Touhou games since TH08.
When holding the P key, the game will now save every rendered frame to a .BMP file. -
The
Joy Pad
menu in the original game allowed joypad actions to be unmapped by pressing more than one button simultaneously. This was indicated with[Button 0]
, which might falsely suggest that the game starts numbering joypad buttons at 0, especially since theSpeedDown
andESC
action start out in this unmapped state. This build replaces[Button 0]
with a much clearer[--------]
label. -
The game loop now keeps running at the end of the in-game Game Over animation, and doesn't freeze until pressing and releasing a key or joypad button anymore.
-
The game now immediately renders the High Score screen when entering it through the
Score
option in the main menu. The original game showed just a black screen until the ⏎ Return/Z key or corresponding joypad button was released. -
When registering a new high score, any held ⏎ Return/Z or corresponding joypad inputs are now flushed before entering the High Score screen. This avoids an
A
being added to the name seemingly automatically when entering this screen by pressing one of those inputs after a Game Over. -
Errors are now logged in UTF-8. To avoid mixed encodings in the originally Shift-JIS-encoded
ErrLOG2.TXT
file, new logs are written toErrLOG_UTF8.TXT
instead.
Troubleshooting
D3DWindower can no longer be used with the SDL2/non-i586 version, but DxWnd still works. Import this configuration via File → Import, then adjust the path to your GIAN07.exe
.
If the game runs slow on your system, or doesn't render anything at all:
-
Delete any reference to
GIAN07.exe
from the following registry keys:- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
-
Make sure that the 32-bit mode is activated in the Config → Graphic menu.
Summary blog post: https://rec98.nmlgc.net/blog/2023-09-30
Full changelog compared to the previous release: P0251...P0256
Previous release: https://github.com/nmlgc/ssg/releases/tag/P0251