Commit Graph

264 Commits

Author SHA1 Message Date
nmlgc 9a8e0fc0fd [Maintenance] Move the point structures into `pc98.h`
Unfortunately, it's still premature to start a separate header file for
display-space coordinates like I'm doing with Shuusou Gyoku. What does
make sense, though, is moving the display-space vector types next to
the display-space scalar types in `pc98.h`. This makes much more sense
than keeping them in `master.hpp` just because master.lib also has a
Point type. Would have thought that this lets us remove more than two
`master.hpp` inclusions, though…

Part of P0240, funded by JonathKane.
2023-05-25 15:17:01 +02:00
nmlgc 45c9e71533 [Maintenance] Fix another bunch of accumulated typos and dead code
Part of P0239, funded by Ember2528.
2023-04-28 22:21:21 +02:00
nmlgc ea59e023d0 [Maintenance] Gaiji: Move variable-width bars to TH02
Part of P0237, funded by Yanga.
2023-03-29 18:03:05 +02:00
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 49a6834c4a [Maintenance] Move OUT for 8-bit port numbers to x86real.h
We'd like to use this optimization in the platform layer as well.
Turning it into an inline function via __emit__() also allows us to
turn a bunch of other macros into proper inline functions.

Part of P0232, funded by [Anonymous].
2023-02-28 08:08:17 +01:00
nmlgc bff375d99d [Maintenance] Introduce a VRAM byte bit constant
log₂(BYTE_DOTS), just like SUBPIXEL_FACTOR and SUBPIXEL_BITS.

Part of P0232, funded by [Anonymous].
2023-02-28 08:08:17 +01:00
nmlgc 055cc20f79 [Platform] [x86 Real Mode] CPU flag macros
Over on the `debloated` branch, we're going to use them in our own
platform-specific code, which obviously is not decompiled from
anything.

Part of P0232, funded by [Anonymous].
2023-02-28 08:08:16 +01:00
nmlgc c22299e0c8 [Contributing] Introduce a new "ZUN landmine" label for invisible bugs
Thanks to Clerish for the naming inspiration:

	https://twitter.com/Clerish/status/1623990678937034752

Part of P0231, funded by [Anonymous].
2023-02-28 08:08:10 +01:00
nmlgc cc42f949e1 [Maintenance] Remove the vsync_reset_*() macros
They obscure the simple nature of these VSync counters more than they
help.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc bfd24c6ae3 [Decompilation] Turn the FS/GS prefix workaround into a full-on code generator
If we double down on this concept by defining all needed prefix and R/M
opcodes, the code turns out much simpler if we __emit__() even the
basic, non-broken case. And if the inlined functions directly take
the opcode bytes as parameters, we don't even need templates.

Completes P0227, funded by nrook.
2023-01-17 11:40:36 +01:00
nmlgc 7cae44a31f [Reverse-engineering] snd_delay_until_measure(): Corner cases
The 2022 edition of "fundamental KAJA function I haven't looked into
more deeply during all these years"…

Part of P0225, funded by Yanga, Blue Bolt, and 32th System.
2022-11-30 22:46:22 +01:00
nmlgc 0f98341c34 [Research] Document the master.lib graph_gaiji_*() carry flag bug
Fixed in TH04's and TH05's master.lib version, but TH03 still had to
work around it with code that might look like a ZUN bug at first.

Part of P0225, funded by Enderwolf, Blue Bolt, 32th System, and Yanga.
2022-11-30 22:46:22 +01:00
nmlgc 6d977a9df7 [Decompilation] [th03/th04/th05] Cutscenes: Main script parsing loop
Part of P0225, funded by Enderwolf, Blue Bolt, 32th System, and Yanga.
2022-11-30 22:46:22 +01:00
nmlgc 8118e61c77 [Decompilation] [th03/th04/th05] Cutscenes: Script opcode interpreter
Even that part's the same in these three games… except for the 27 small
places where it isn't, 7 of which are purely coding style cosmetics.

Completes P0224, funded by Splashman and -Tom-.
2022-11-30 22:46:22 +01:00
nmlgc f01e46700d [Maintenance] [th04/th05] Cutscenes: Move box code to the main translation unit
With the script parsing and picture/box rendering functions being as
interleaved as they are, it makes little sense to keep the cutscene
code in more than one translation unit. How would those translation
units even be called? This time, having everything in one file should
beat the few hundred preprocessor-removed lines of code that we end up
adding to each one of the three affected games – and ultimately, you'd
want to merge those systems into one translation unit anyway.

Part of P0224, funded by Splashman and -Tom-.
2022-11-30 19:31:14 +01:00
nmlgc ac3fba3dce [Decompilation] [th03/th04/th05] Cutscenes: Line and box feeds
Part of P0224, funded by Splashman and -Tom-.
2022-11-30 19:26:55 +01:00
nmlgc 0d85265931 [Decompilation] [th03/th04/th05] Cutscenes: 3-digit number parsing
Used for all ASCII number parameters to script functions, as well as
for TH04's dialog script.

Part of P0224, funded by Splashman and -Tom-.
2022-11-30 19:22:48 +01:00
nmlgc 371292dab2 [Decompilation] [th03/th04] Cutscenes: Box background blitting and unblitting
Completes P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:16:47 +01:00
nmlgc 6f8b32ca4a [Decompilation] [th03/th04/th05] Cutscenes: Masked blitting of new pictures
Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:16:35 +01:00
nmlgc 684c149bef [Decompilation] [th03/th04] Cutscenes: Copying pictures from VRAM page 0→1
And another variation of an EGC-accelerated inter-page copy. At least
it's slightly more optimized compared to TH01's horribly slow one.
But wait, page *0* to page *1*? That seems kind of backwards…

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:11:06 +01:00
nmlgc fb9f18e967 [Decompilation] [th03/th04/th05] Cutscenes: EGC initialization
That only leaves the TH02 versions of this function that really should
have been defined at one central location.

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:08:52 +01:00
nmlgc 023cdacc36 [Decompilation] [th03/th04/th05] Cutscenes: Script loading and freeing
Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:08:28 +01:00
nmlgc 576f49129a [Decompilation] [th05] Cutscenes: Return key wait animation
Needlessly blitting glyphs to VRAM until the very end, eh?

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:08:05 +01:00
nmlgc 815bcc8308 [Decompilation] [th03/th04/th05] Cutscenes: Input handling
Here's an entire commit to point out why the difference between these
function names matters and shouldn't be #define'd away in some central
input header file.

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:08:02 +01:00
nmlgc 7cda9e28b2 [Decompilation] [th04/th05] Cutscenes: Text blending animation
Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 17:11:00 +01:00
nmlgc ee717c1d19 [Reverse-engineering] [th03/th04/th05] Cutscenes: State variables
You can fast-forward through cutscenes by holding Escape in these
games?! And the script interpreter adds automatic line breaks?!

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 17:10:19 +01:00
nmlgc 2458172c98 [Maintenance] [th02/th03/th04/th05] Define a constant for a white VRAM color
Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 17:00:42 +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 08fa2151ca [Maintenance] Make the locked condition handler macro publicly available
I've been thinking about a new directory for any core cross-platform
code that these game typically need. These range from stuff like the
hardware-independent pixel_t types (you shouldn't need to #include a
file named "pc98.h" for those), to stuff like this. "logic" might have
been a good directory name, but does it encompass rendering as well?
So, it'll just be "game" for now. 😶

Part of P0216, funded by JonathKane.
2022-08-16 01:39:29 +02:00
nmlgc cf95cc8717 [Maintenance] [th01] Remove `extern "C"` from all remaining areas of code
Nothing says "we're getting things done" quite as much as this.

Part of P0214, funded by Ember2528.
2022-08-14 23:03:15 +02:00
nmlgc b93f216982 [Maintenance] Correctly declare unsigned VRAM byte amount types -.-
Part of P0212, funded by GhostRiderCog, Lmocinemod, and LeyDud.
2022-08-11 18:34:34 +02:00
nmlgc 60a7e44b53 [Maintenance] Introduce proper Shift-JIS and JIS X 0208 types
Much more semantic than that twobyte_t abomination.

Part of P0212, funded by GhostRiderCog, Lmocinemod, and LeyDud.
2022-08-11 15:53:13 +02:00
nmlgc a10fe95b31 [Maintenance] Fix comment↔code associations
• Comments that describe all lines of code until a blank one are placed
  into the lines immediately above
• Comments that describe an entire demarcated block are placed
  immediately below the dash row at the top
• In any case, there should be a blank line after the top comment of
  a demarcated block, to keep IntelliSense-style systems from applying
  the block comment to the first actual line of code…
• …but there shouldn't be one before the dash row at the bottom, where
  it'd be redundant.

Part of P0207, funded by GhostPhanom.
2022-08-08 20:10:53 +02:00
nmlgc 456768a4ff [Contributing] Define `struct`, `class` and `template` naming conventions
Again, these are what I've been mostly following, apart from a few
inconsistencies which this commit also fixes.

Part of P0207, funded by GhostPhanom.
2022-08-08 20:10:38 +02:00
nmlgc 0c682b5bc0 [Maintenance] Declare the optimization_barrier() a single time
And put that single instance into the compiler optimization workaround
section of `decomp.hpp`.

Part of P0204, funded by [Anonymous].
2022-07-10 13:45:18 +02:00
nmlgc 901eda4594 [Maintenance] Consistently indent preprocessor macros
Let's see if anyone ever tries to compile this codebase with a pre-C89
compiler that enforces the # at the beginning of the line.

Part of P0203, funded by [Anonymous] and GhostRiderCog.
2022-07-10 13:06:26 +02:00
nmlgc bca1b7d38a [Maintenance] Add a `nullptr` polyfill to platform.h
Which allows us to remove <stddef.h> from translation units that just
needed it for `NULL`.

Part of P0203, funded by [Anonymous] and GhostRiderCog.
2022-07-10 13:02:51 +02:00
nmlgc 3b21a75cab [Decompilation] [th05] Shinki: Pattern 5/11
The one where Shinki spawns her wings, which fire 50 quick random
bullets as soon as they appear. Featuring the first reliance on a piece
of state set by an earlier boss, which technically affects gameplay!

Part of P0190, funded by nrook.
2022-05-01 00:22:02 +02:00
nmlgc 270d376089 [Maintenance] Add min/max abstractions for constrained random numbers
Way easier to read compared to the mental gymnastics of the original
"offset + range" form, especially since we can also abstract away
subpixels with another layer of wrapper functions. Also brings a bunch
of new speed/angle symmetries to light.

Part of P0190, funded by nrook.
2022-04-30 14:37:23 +02:00
nmlgc a2358bef47 [Maintenance] Remove `extern "C"` from `x86real.h` and `decomp.hpp`
One of those per delivery now, eh?

Part of P0189, funded by Arandui and Lmocinemod.
2022-04-16 23:53:46 +02: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 08488e2594 [Maintenance] [th03/th04/th05] Drop the `_lebcd` suffix from score variables
What is this, reversed Hungarian notation? For gaiji strings, it makes
sense because there's no difference in the access code to regular
strings, but you can't really do anything with a union itself.
(Besides passing it to a function in a type-safe way, but that's cool.)

Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-27 01:29:03 +01:00
nmlgc 4242480b9a [Maintenance] Move the contents of `music/` subdirectories under `op/`
Making it more obvious that it's Music *Room* code, not BGM code.

Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-25 14:10:59 +01:00
nmlgc 9432e0d2bf [Maintenance] Macros: Update to current coding standards
Less fancy token pasting, replacing them with inline functions where
possible, entirely removing unnecessary ones, and fixing smaller
issues here and there.

Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-25 14:05:36 +01:00
nmlgc ea54e59f93 [Maintenance] Macros: Avoid references to implicit local variables
If the macro itself is local to a function, these can work in certain
scenarios, but never for global ones.

Part of P0186, funded by [Anonymous] and Blue Bolt.
2022-03-25 14:03:53 +01:00
nmlgc f9d983e0c0 [Decompilation] [th03] Player: Collision detection
8×8-pixel* player hitbox confirmed.

(* 8×4 in VRAM terms)

Completes P0183, funded by Yanga and [Anonymous].
2022-02-18 09:36:34 +01:00
nmlgc ff3d2cafe4 [Maintenance] Highlight dependencies on pseudoregisters with the `asm` keyword
These make up 41% of all our current inline ASM blocks, and *should*
break on other compilers.

Part of P0183, funded by Yanga and [Anonymous].
2022-02-18 09:36:34 +01:00
nmlgc ba9fe94b42 [Maintenance] Consistently use { brackets } for inline assembly
Part of P0183, funded by Yanga and [Anonymous].
2022-02-18 09:36:34 +01:00
nmlgc 6058395372 [Maintenance] Change the inline assembly keyword to `_asm`
The single underscore version is actually slightly more supported among
the compilers I've seen so far. Also added the exact list now.

Part of P0183, funded by Yanga and [Anonymous].
2022-02-18 09:36:34 +01:00
nmlgc c1d8e210f6 [Reverse-engineering] [th03] Player: Useless ID / attack sprite offset variable
And doubly so, with both of the values being redundant.

Part of P0183, funded by Yanga and [Anonymous].
2022-02-18 09:36:34 +01:00