Skip to content

P0256

Compare
Choose a tag to compare
@nmlgc nmlgc released this 30 Sep 21:26
· 140 commits to master since this release

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 the SpeedDown and ESC action start out in this unmapped state. This build replaces [Button 0] with a much clearer [--------] label.

    Joypad button unbinding in the P0256 build of Shuusou Gyoku, using 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 to ErrLOG_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