ReC98

@rec98.nmlgc.net

https://rec98.nmlgc.net

github.com/nmlgc/rec98.... [💰] Confirm T0440 A final €400 from Ember2528 for the announced and AI-unrelated farewell gift: Kioh Gyoku SC-88Pro BGM packs, releasing my loop builder, and better loop detection to support a mystery goal. Thank you for all the years of support. 🙏

On October 5, 2019, I launched the ReC98 crowdfunding website. Today, 7 years later, there really is no more incredible journey to be had. So here's is my final feature and retirement announcement. No matter how this is received, I have already won. 😮‍💨 rec98.nmlgc.net/blog/2026-10...

Screenshot of the output of the new Shuusou Gyoku command-line replay simulation tool, showing the end result of an full Extra Stage 4M10B Homing Shot replay, together with the surprisingly short amount of 179.3 ms it took to run through all 26212 frames of this replay. This translates to a validation frame rate of 179.3 ms. The caption reads: "As usual, the performance corresponds to the 32-bit Windows build running on my aging Intel Core i5-8400T. No one else gave me performance numbers."Screenshot of a table that visualizes the growth in complexity of the ReC98 blog posts from 2020 to 2026, comparing total and average text bytes and asset count. Taken from the ReC98 2026-10-05 blog post. The caption reads: "Excluding the three policy-bugfix posts and the order advice post. Complexity is calculated as the geometric mean of the average text bytes increase and the average asset count increase since 2020, i.e., √((Average text bytes / 4,234) × (Average asset count / 0.9))."

You could use this code to procedurally generate optimal Shuusou Gyoku runs from your favorite programming language via old-school machine learning or something. In reality, nobody cares, and you'll all just be here for one thing. >18,700 words coming to you in a few hours.

1. Point items with negative values?
2. Defining the scope of "game logic"
   • The unexpectedly big scope of RNG
3. Researching locale bloat in MSVC's sprintf()
4. Safely bypassing MSVC's C++ exception handling
5. Completing the separation of game logic
   • Implementation details
   • Changing debug invincibility
6. The birth of a shared ReC98 source port engine
7. A replay validation CLI
   • Validation performance
8. Future work
9. Retirement announcement
   • Epilogue

Finished the retirement part of the next blog post. >7,700 words with the full timeline, nuance, and plenty of burned bridges that hopefully close off any way back into this hellhole I should have left in 2011. The vibecoders will soon appear like the sanest actors in the room.

OK, received tons of words, but zero serious offers to continue working in this scene in any capacity, matching the trend started in April. Hence, this business model has run its course, I made the right call, and the decision is final. First round of refunds has been sent out.

Yup. Even if funding improved again, vibecoders *will* set the standard for QoL features. So this can only go two ways: • Ignore them → community splits along a silly pro- vs. anti-AI divide • Work with them → ReC98 degenerates into playing catch-up Both are undesirable. bsky.app/profile/gens...

Popfan@gensakudan.com · 4mo ago

But on the other hand, I understand how demoralizing it must be to do this all by hand and with a human element, all while so many around you choose the easy, more prolific option that sacrifices quality. Not even ample financial compensation can really offset that in the long run.

ReC98 will end after the next delivery. I don't have it in me to compete with vibecoders, especially when y'all cheer them on for instantly delivering what you've wanted all along. And if you aren't cheering yet, you soon will; they're only getting better and more numerous.

Many thanks to this month's subscribers! RL consumed lots of time this month. Regaining focus has been tough with the final steps being as difficult as ever. Wondering how ReC98 can possibly survive after all the forks (many of them vibe-coded) I've seen in this month alone.

Active ReC98 subscriptions for June 2026:

• €125 from [Anonymous] towards anything (including tooling)
• €50 from Ember2528 towards better replays for Shuusou Gyoku, followed by a long-term plan to first decompile TH03, adding replays, porting it to modern systems, and then implementing netplay (although we're also going for a more short-term option of having netplay on PC-98)
• €35 from [Anonymous] towards TH03 RE
• €10 from Root towards porting SDL to Windows 98 to get Shuusou Gyoku running there again

140-175 ms for simulating the full 7 minutes of Shuusou Gyoku's Extra Stage on the command line. On an 8-year-old Core i5. Single-threaded. With MSVC's horrid codegen and several untapped optimization opportunities. And that's the heaviest case. Regular stages are much faster.

Output of the upcoming Shuusou Gyoku command-line replay simulation tool, showing the end result of two Extra Stage and one Lunatic Stage 4 replay, together with the surprisingly short amount of time it took to gather these results – 141.3 ms for a Wide Shot Extra Stage run, 173.3 ms for a Homing Missile Extra Stage run, and 44.8 ms for a Laser run of Stage 4 on Lunatic difficulty, translating to validation frame rates of 191894, 151244 and 242082 FPS, respectively.

Finally, Shuusou Gyoku's game logic, isolated in a reusable, freestanding DLL. No global state. No Win32 API dependencies besides GetProcessHeap(), HeapAlloc(), and HeapFree(). No instructions newer than i586. Still simulates blazingly fast. (Have fun guessing how fast exactly!)

Screenshot of the Windows 11 Properties dialog displaying the new Shuusou Gyoku game logic DLL, with a size of 73,216 bytes.Screenshot of Dependency Walker running on Windows 98 displaying the new Shuusou Gyoku game logic DLL and showing off its minimal imports of GetProcessHeap(), HeapAlloc(), and HeapFree().

(Yes, I've heard the news and will go right back to work! Just let me finish this really cool thing for Shuusou Gyoku I've been working on for the past few months, and then I'm going to spend an extended amount of time with the main business. OK?)

Many thanks to this month's subscribers! The splitting process has escalated to not only cover Shuusou Gyoku's logic, but also my SDL-based engine, laying the groundwork for future modern-system builds. Only missing the CLI now, and of course the blog post. Mid-June, maybe?

Active ReC98 subscriptions for May 2026:

• €125 from [Anonymous] towards anything (including tooling)
• €50 from Ember2528 towards better replays for Shuusou Gyoku, followed by a long-term plan to first decompile TH03, adding replays, porting it to modern systems, and then implementing netplay (although we're also going for a more short-term option of having netplay on PC-98)
• €35 from [Anonymous] towards TH03 RE
• €10 from Root towards porting SDL to Windows 98 to get Shuusou Gyoku running there again

Full list of seemingly decorative aspects in Shuusou Gyoku that are actually game logic and must always be simulated because they draw from and advance the single global RNG: • The hearts shown when losing a life • The sparks shown when grazing bullets or hitting an enemy

First Shuusou Gyoku comparison screenshot of the randomness in 1) the hearts shown when losing a life, and 2) the sparks shown when grazing bullets. Taken at the start of Stage 5.Second Shuusou Gyoku comparison screenshot of the randomness in 1) the hearts shown when losing a life, and 2) the sparks shown when grazing bullets. Taken at the start of Stage 5.

Point items in Shuusou Gyoku will award negative points if you collect them below the bottom edge of the playfield during the respawn animation. And nobody noticed because 1) the game's 5×7-digit font doesn't have a - sign, and 2) the total score can't decrease, only increase.

Many thanks to this month's subscribers! Very slow month, but I still managed to move enough code to push the headless Shuusou Gyoku subproject to over 100 commits. Very close to solving the hardest issues while juggling Windows 9x and FFI use cases. 4 pushes for sure, though.

Active ReC98 subscriptions for April 2026:

• €125 from [Anonymous] towards anything (including tooling)
• €50 from Ember2528 towards better replays for Shuusou Gyoku, followed by a long-term plan to first decompile TH03, adding replays, porting it to modern systems, and then implementing netplay (although we're also going for a more short-term option of having netplay on PC-98)
• €35 from [Anonymous] towards TH03 RE
• €10 from Root towards porting SDL2 to Windows 98 to get Shuusou Gyoku running there again

Debug builds of Shuusou Gyoku had a menu option that turns off collision detection. Past tense because this forks gameplay, desyncs replays recorded with the opposite value, and is therefore very bad. I'll replace it with the alternative approach of just setting lives to 255.

Screenshot of Shuusou Gyoku's Config → Difficulty menu in a build compiled with the PBG_DEBUG macro, showing pbg's four debug options, with the collision-detection-deactivating `Hit [O F F]` option highlighted. The help window describes it as 「[DebugMode] 当たり判定」.

Many thanks to this month's subscribers! Untangling Shuusou Gyoku's game logic into a library isn't the worst thing in the world, but still nontrivial. Will definitely end up closer to 2 pushes than to 1. Probably doing a bit of TH02 RE after that, given its recent funding.

Active ReC98 subscriptions for March 2026:

• €125 from [Anonymous] towards anything (including tooling)
• €50 from Ember2528 towards better replays for Shuusou Gyoku, followed by a long-term plan to first decompile TH03, adding replays, porting it to modern systems, and then implementing netplay (although we're also going for a more short-term option of having netplay on PC-98)
• €35 from [Anonymous] towards TH03 RE
• €10 from Root towards porting SDL2 to Windows 98 to get Shuusou Gyoku running there again

🚚 TH03's enemy, fireball, explosion, chaining, and combo systems have been fully decompiled and researched! Hardest piece of game logic in all of PC-98 Touhou, by far. 1% of overall code, 6% of TH03 itself. 🐞 1 bug 💣 5 landmines 🎺 8 quirks 🪨 61 pieces of bloat

Screenshot of a video that visualizes TH03's frame data of a fireball-originating explosion against a pellet, demonstrating how these explosions are rendered 8 pixels lower than the position that collision detection uses for their hitbox. Taken from the ReC98 2026-03-16 blog post. The caption reads: "Thanks to the anonymous backer for providing the Anything budget for these multi-row tabs at the end of the 6th push!"Screenshot of a video showcasing what happens when exceeding TH03's 40-enemy cap when constructing a formation sequence that starts with a 12-enemy formation followed by the 16-enemy "Four Lines of Four" formation.  Demonstrates how closely timed bombs can reserve a majority of TH03's enemy slots for explosions, which prevents successive formations with high enemy counts from being spawned for one of the players, which in turn causes them to skip a lot of formations in its internal 256-formation cycle (29 in this example). Taken from the ReC98 2026-03-16 blog post.Screenshot of a video showcasing how removing the enemy damage cap of TH03's explosions can change the timing and placement of explosions. Demonstrated by chaining formation #4 (Racetrack) and colorizing the resulting explosions based on the amount of damage they've dealt to enemies. The caption reads: "I chose black for explosions that currently can't deal damage to enemies. The other 6 colors (dark green, light green, dark red, light red, dark blue, and light blue to represent 0 to 5 dealt hits in this order) are TH03's regular in-game VRAM colors from #5 to #10." Taken from the ReC98 2026-03-16 blog post.Screenshot of a video of a TH03 explosion destroying a fireball and spawning two red fireballs in response, recorded from 1:04 minutes into the Kotohime vs. Marisa demo on Kotohime's playfield. The caption reads: "Note how the "primary" new fireball described above is spawned from the center of its explosion, while the "additional" new fireball is spawned from the center of the explosion that caused the old fireball to explode." Taken from the ReC98 2026-03-16 blog post.

TH03 is about to get thoroughly analyzed and documented down to its core. ≥13,100 words. Heaviest blog post by HTML size so far. 2.36× more PC-98 Touhou reverse-engineering than the previously biggest RE post. Out in a few hours.

The table of contents of the upcoming 2026-03-16 post on the ReC98 blog. It reads:

1. An important note about durations in TH03
2. TH03's chaining system
3. Difficulty-specific tuning
   • round_speed
   • enemy_speed
     • Angle tuning
4. TH03's combo system
   • Boss Attacks and Panics
5. TH03's enemy formation scripts
   • Gameplay details
   • Function reference
6. TH03's enemies themselves
7. TH03's explosions
8. TH03's fireballs
   • Destroying fireballs with regular player shots or Charge Shots
9. TH03's score reduction and extend glitches
   • The fix (← new builds here!)
10. Completing the Fediverse migration
    • Polls
    • Bluesky rant, part 2

Almost done writing! Still need to spend some more coding time on the blog UX though, so that you can seamlessly switch between two layers of tabs and the 30 hitbox videos underneath. (Word count already above 10,000, by the way.)

Work-in-progress screenshot of the TH03 explosion hitbox figure from the upcoming ReC98 blog post, displaying the hitbox of an explosion that originated from a 48×48-pixel enemy against a 64×64-pixel enemy. With 5 different kinds of explosions (from 16×16/32×32/48×48/64×64 enemies or fireballs) that can hit 6 different types of gameplay entities (16×16/32×32/48×48/64×64 enemies, pellets, or fireballs), there are a total of 5 × 6 = 30 hitboxes that the blog post has to visualize, which necessitates two layers of tabs and some coding effort to make it work nicely.

Many thanks to this month's subscribers! Life priorities have shifted and I'll likely be even slower in the foreseeable future. Then again, what else is left in PC-98 Touhou that's as complex as TH03's enemies, fireballs, and explosions? Blog post should be out next week.

Active ReC98 subscriptions for February 2026:

• €125 from [Anonymous] towards anything (including tooling)
• €35 from [Anonymous] towards TH03 RE
• €10 from Root towards porting the SDL 3 build of Shuusou Gyoku back to Windows 98

Bluesky confirmed for having the worst video processing pipeline in the entire social media landscape. Reducing *frame rates* is disgusting at a level that even Twitter wouldn't step down to.

Command-line output showing a metadata comparison between the original lossless WebM file for TH03's enemy formation #3 and the resulting blob of the Bluesky upload, downloaded via `goat blob export`, via ffprobe. Shows how Bluesky not only converted the video to H264 with YUV420P chroma subsampling (the same format Twitter enforces for its videos, which is bad enough), but even chopped the video down to 30 FPS, losing almost half of all frames in the original video.

Alright, TH03 formation code! I'm going to post all 18 scripts over the next few days. Structure/logic by ZUN, formation names by the gameplay community, function/parameter names by me, order as in ENEDAT.DAT. Videos recorded on Lunatic, where enemy speed equals script durations.