Commit Graph

23 Commits

Author SHA1 Message Date
nmlgc b9402be979 [Maintenance] Simplify two-state entity flags
Changing the type to `bool` highlights that these have only two states.
No `switch` required.

Part of P0236, funded by Yanga.
2023-03-29 12:36:55 +02:00
nmlgc 990588a4ea [Research] Finally figure out relativity of near references
Biggest decompilation breakthrough of the year already? Completely
removes the need for the "set near pointer to far function" hack, and
solves quite a few upcoming issues.
The TASM manuals did have a few pages on the topic of segments and
groups, but there's absolutely nothing about it in the TCC ones beyond
the three-sentence description of `#pragma codeseg` and that completely
unhelpful "🤷" of an explanation for the `Fixup overflow` error…

Part of P0227, funded by nrook.
2023-01-16 12:05:29 +01:00
nmlgc 650c1e3364 [Maintenance] Review any redundancies and label them as ZUN bloat
Or quirk, in the case of the slow TH01 ending picture blitting.

Part of P0216, funded by JonathKane.
2022-08-16 01:43:14 +02:00
nmlgc fb924f7f9a [Decompilation] [th04/th05] Bosses: Backdrop rendering
Part of P0192, funded by [Anonymous], nrook, and -Tom-.
2022-05-01 00:22:03 +02:00
nmlgc 71cb7b5e93 [Decompilation] [th05] Shinki: Main function
3rd PC-98 Touhou boss completely decompiled, 28 to go… and the code
quality is taking a nosedive again, especially with that unnecessary
"relative phase" variable that collides with the laser activation flag
in the Devil pattern.
(The nearfunc_t_near workarounds are our fault, though!)

Completes P0191, funded by nrook.
2022-05-01 00:22:03 +02:00
nmlgc 1898ee4564 [Reverse-engineering] [th04/th05] Bosses: Patterns seen / defeat bonus flag
There's the meaning I was looking for in 6ff427a! Far from everything
that's done with this "mode change" variable though – and as we've seen
in 426a531, it's mostly a waste of time to immediately RE all meanings
of this variable across all bosses. So, let's keep using the raw
"phase_state" variable in ASM land.

Part of P0191, funded by nrook.
2022-05-01 00:22:03 +02:00
nmlgc da1558d9ff [Maintenance] [th04/th05] Bosses: Merge BSS definitions into a single file
Part of P0190, funded by nrook.
2022-04-30 14:37:40 +02:00
nmlgc b8907097fa [Reverse-engineering] [th05] Bosses: 16 shared state bytes
Oh *come on*. TH05 not only reuses this bad idea from TH04, it also
uses them 4× as often as TH04, even for midbosses. Unfortunately, even
the first two bytes that are only (properly) used for a single thing in
the Yumeko fight make more sense as part of this array – then, it's a
consistent 16 bytes for both games. The fact that I didn't look further
in b02147b probably also contributed to me missing them in 426a531 last
month.
But yeah, no sense in researching the TH05 ones deeper this time.
b4876b6 has already proven that to be a waste of time.

Part of P0190, funded by nrook.
2022-04-30 14:37:35 +02:00
nmlgc ac7822ec71 [Decompilation] [th04/th05] Boss and midboss player shot collision handling
Awesome! The last of the shared TH04/TH05 boss functions, completed
just as the money for that sort of thing ran out. Time to decompile
some actual bosses!

Part of P0188, funded by [Anonymous] and nrook.
2022-03-27 01:50:07 +01:00
nmlgc 354a4724f3 [Decompilation] [th04/th05] Bosses: Defeat sequence
With TH04's version hardcoding not only Gengetsu's dialog and
initialization, but also the Bad Ending after having clearing Stage 5
with continues or on Easy difficulty.

Part of P0188, funded by [Anonymous] and nrook.
2022-03-27 01:35:37 +01:00
nmlgc 426a531882 [Reverse-engineering] [th04] Bosses: 16 shared state bytes
With a different meaning (and sometimes, even type) every time they are
used, forcing me to look at details of boss fights way before I wanted…
wonderful. Not sure yet whether they're involved in Kurumi's and
Marisa's division-by-0 crashes, but that kind of wildly shared state is
exactly what causes bugs like these to happen. I did manage to
reproduce the Marisa crash during this research!

Temporarily breaking the rule of immediately reflecting ASM land
declarations in C land, because it makes more sense to render these as
macros, local to their respective pattern functions, and it's way too
early for declaring these. Or late, given that I've now got to add a
third push to this stretch…

Completes P0187, funded by [Anonymous] and Blue Bolt.
2022-03-27 00:48:12 +01:00
nmlgc e9b2a98363 [Decompilation] [th04/th05] Bosses / Midbosses: End-of-phase score bonus
Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-27 00:33:51 +01:00
nmlgc 66bcd56272 [Naming] [th04/th05] Bosses: Rename `*_phase_end` to `*_phase_next`
Another slightly imprecise uth05win naming convention we can improve
on.

Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-26 20:44:54 +01:00
nmlgc 6400e6a689 [Maintenance] [th04/th05] Boss explosions: Update to current coding standards
Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-26 20:44:54 +01:00
nmlgc db05bffca3 [Maintenance] Turn motion_t into a template
motion_t is also used for certain animations in MAINE.EXE, so not all
instances refer to entities in playfield space. Explicitly specifying
the latter now allows us to gain…

Part of P0149, funded by Blue Bolt, Ember2528, and -Tom-.
2021-07-31 09:33:50 +02:00
nmlgc c940059037 [Decompilation] [th05] Shinki + EX-Alice: Background rendering
Palette hacks not included yet. Yup, that's how all phases can use
hardware color #0 as their background color.

Completes P0147, funded by -Tom- and Ember2528.
2021-06-21 15:48:42 +02:00
nmlgc b265134541 [Reverse-engineering] [th04/th05] Background rendering function pointers
That could have easily been architected without forcing every boss to
manually set the "background to be drawn while bombing" function
pointer.
And without the laziness of just redrawing all tiles during the blocky
opening animation of certain bombs…

Part of P0147, funded by -Tom- and Ember2528.
2021-06-21 15:48:38 +02:00
nmlgc d6f634631f [Maintenance] Declare distinct types for pixel and VRAM sizes
Oh wait, we also need one of those for an upcoming structure!

Part of P0111, funded by [Anonymous] and Blue Bolt.
2020-08-28 14:53:33 +02:00
nmlgc 18a8eccd2f [Decompilation] [th05] Bosses: Smooth random movement
Part of P0109, funded by [Anonymous] and Blue Bolt.
2020-08-16 21:41:34 +02:00
nmlgc 023417a1b4 [Maintenance] Move boss declarations to boss.hpp
Part of P0109, funded by [Anonymous] and Blue Bolt.
2020-08-16 21:40:35 +02:00
nmlgc cf68f49803 [Reverse-engineering] [th04/th05] Boss phase end functions
…which I'd like to cover all at once.

Part of P0086, funded by [Anonymous] and Blue Bolt.
2020-04-15 21:34:19 +02:00
nmlgc 4bab289d8a [Maintenance] [th04/th05] Declare boss explosions in C land
Part of P0086, funded by [Anonymous] and Blue Bolt.
2020-04-15 21:34:13 +02:00
nmlgc cb8da961c9 [Reverse-engineering] [th04/th05] Boss item drops
Part of P0086, funded by [Anonymous] and Blue Bolt.
2020-04-15 21:01:59 +02:00