Commit Graph

521 Commits

Author SHA1 Message Date
nmlgc 1e41fa0617 [Maintenance] Remove redundant `#include`s
Part of P0285, funded by [Anonymous] and iruleatgames.
2024-07-09 08:46:51 +02:00
nmlgc b61e612fdf [Maintenance] #include each header's dependencies within the header itself
OK, this is the big one. We still keep using `#include` guards only
where we absolutely need to, but with each header now being valid in
isolation, this can now actually help *minimize* the length of each
translation unit's `#include` list. Turns out that after removing all
the duplicates, we only *actually* need to guard 29 headers across all
5 games.

Part of P0285, funded by [Anonymous] and iruleatgames.
2024-07-09 08:46:42 +02:00
nmlgc e353800f46 [Maintenance] Hidden #include dependency removal: TH04
Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:42:24 +02:00
nmlgc 7c0f05f735 [Maintenance] Hidden #include dependency removal: Rank
Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:42:13 +02:00
nmlgc dba448965e [Maintenance] Hidden #include dependency removal: Subpixels
Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:42:09 +02:00
nmlgc ab41c89327 [Maintenance] Hidden #include dependency removal: kaja.h
Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:42:06 +02:00
nmlgc a7463cf4cd [Maintenance] Sound: Move implementation details into a separate header
No need to add a dependency on `x86real.h` to every translation unit
that includes `snd.h`.

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:41:46 +02:00
nmlgc 15f89da4ee [Maintenance] master.hpp: Split off all PC-98 graphics-related declarations
Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:41:33 +02:00
nmlgc 3fad323d14 [Maintenance] master.hpp: Move into the master.lib directory
With the upcoming `#include` cleanup, it finally makes sense to split
off all graphics-related code into its own header. In turn, it makes
more sense to store all of these future master.lib headers in, well,
the master.lib directory, which provides a new 8 characters for their
file names. Turns out that the rationale I gave for the root directory
placement in 8266bbd didn't hold up 3½ years later…
(Also, the `pc98.h` declarations will eventually be split into
`game/coords.hpp` and something in `platform/x86real/pc98/`.)

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:41:24 +02:00
nmlgc bb419fa649 [Maintenance] [th04/th05] OP.EXE: Move page synchronization into its own header
Three `#include`s for such a small function… (And soon it's going to be
4!)

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:41:15 +02:00
nmlgc 110d0534ed [Maintenance] Move `extern "C"` into the headers it applies to
The translation units were probably a better place back when most of
the codebase was still compiled in C mode, we only had a few C++ TUs,
almost everything needed to be declared as `extern "C"`, and moving
these declarations into the headers would have been really noisy with
all the `#ifdef __cplusplus` / `#endif` required. Nowadays though,
we've greatly reduced that surface area. And given that headers will
include even more headers as part of the upcoming `#include` cleanup,
it makes sense to make the jump now.

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:40:49 +02:00
nmlgc c85c0e2483 [Maintenance] Remove `extern "C"` from more areas of code
Much more than usual, now that we've got a snappy build system! This
commit covers
• All .PI functions across all games
• TH02's High Score entry functions
• TH03's shots_update() and shots_render()
• All functions declared in `th04/op/op.hpp`
• TH04/TH05's bb_txt_put_8_raw(), bullet_template_clip(),
  player_pos_update_and_clamp(), score_update_and_render(), and
  slowdown_frame_delay()
• TH05's reimu_stars_update_and_render(), score_delta_commit(),
  stage2_invalidate(), stage2_update(), and space_window_set()

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:40:43 +02:00
nmlgc 1bc91fd93b [Maintenance] Move the `grcg_off` macro override into an explicit header
Not only would the `(GAME != 2)` need to include TH03 in the future,
but this `#undef` trickery will blow up once we start reorganizing the
`#include`s in the next few commits.
Sadly, a few source files use master.lib's grcg_off() function in one
game and the macro in the other, which makes it infeasible to assign a
distinct name for every function.

Part of P0284, funded by [Anonymous] and Blue Bolt.
2024-07-09 08:40:14 +02:00
nmlgc c95d7c5aa8 [Build] Move ZUN.COM generation code into the `Pipeline/` directory
These are just as much of a part of the PC-98 Touhou build pipeline as
the sprite compiler. The future Tupfile will use the tupblocks concept
of treating the build configuration as a branching tree, so we'd like
everything under `Pipeline/` to share a single set of configuration
flags.

Part of P0002, funded by GhostPhanom.
2024-06-30 05:53:13 +02:00
nmlgc b9d5c743a2 [Build] [th05] Use a separate translation unit for `scoreupd.asm`
Finally removing that one inconsistency that dates back to 1f1847d.
Now, every file in the `th0?/` subdirectory is meant to be assembled
with `/dGAME=?`.

Part of P0002, funded by GhostPhanom.
2024-06-30 05:53:13 +02:00
nmlgc 8d5b08306f [Build] 32-bit: Move ASM land `GAME` constants onto the build command line
More complex now, less complex in the Lua rewrite.

Part of P0002, funded by GhostPhanom.
2024-06-30 05:52:59 +02:00
nmlgc f7dbc0b497 [Build] Use a single set of `CFLAGS` in the Makefile
Turns out that all of the previous inconsistencies in the Makefile are
covered by just 8 additional `#pragma`s in the code. Most of those
applied to code that already needed way more flags than the Makefile
bothered to address, such as the extremely silly `-O-`.

Part of P0002, funded by GhostPhanom.
2024-06-24 00:21:31 +02:00
nmlgc 6d702988af [Maintenance] Remove `extern "C"` from more areas of code
Covering every input function across all games.

Part of P0278, funded by Yanga.
2024-04-11 23:17:45 +02:00
nmlgc 311138a2d9 [Naming] .PI: Mention palette mutation and 640×400 in the load→put→free macro
Also dropping the `_8` as it's irrelevant to a fullscreen image.
And yes, we'll see a version without palette mutation.

Part of P0278, funded by Yanga.
2024-04-11 23:16:21 +02:00
nmlgc c9c3b621ec [Maintenance] Remove the SHARED_ segment and all related workarounds
Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc fd0c95dcd1 [Decompilation] [th04/th05] MAINE.EXE: main()
So anticlimactic, again…
Also, note how renaming the `end_sequence_t` constants to better match
their usage also simplifies the explanatory comment for TH04's
not-quirk.

Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc 09c324fbed [Maintenance] [th04/th05] MAINE.EXE: Duplicate resident pointer loading
With the implementation moved to the header, it makes sense to
duplicate the function in the unfortunate place where the filename is
supposed to be.

Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc c57992caa9 [Maintenance] [th03/th04/th05] Move resident pointer loading to its own header
Which also highlights that TH05 uses both a master.lib and raw DOS
implementation.

Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc 2480c76a56 [Naming] [th04/th05] MAINE.EXE: Top-level menu and scene functions
Also formalizing the `*_menu()` naming convention I've been following
for a while.

Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc f30fa98be8 [Decompilation] [th03/th04/th05] Music Room: Move all remaining data to C land
Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:48 +01:00
nmlgc b7c8f13d19 [Decompilation] [th03/th04/th05] Music Room: Main function
Part of P0265, funded by [Anonymous] and iruleatgames.
2024-02-03 08:59:47 +01:00
nmlgc cbcb540c54 [Decompilation] [th03/th04/th05] Music Room: Comment loading
Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-03 08:59:47 +01:00
nmlgc a520b0c283 [Decompilation] [th03/th04/th05] Music Room: Rendering a single title
Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-03 08:59:47 +01:00
nmlgc 5b4f24aa0c [Decompilation] [th03/th04/th05] Music Room: Move titles and files to C land
Featuring a return of the recently developed `$ -` tech, along with
some unfortunate PI breaks… But hey, at least it makes sense to start
out with this move!

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-03 08:59:47 +01:00
nmlgc 9651bcf7ee [Naming] [th04/th05] bgimage_put_rect(): Annotate the 16-pixel alignment
This will later become relevant in a piece of ZUN bloat.

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:59:35 +01:00
nmlgc 05721ea8fb [Maintenance] [th05] Music Room piano: Move shared coordinates into the header
Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:59:35 +01:00
nmlgc 062aa7ae1d [Maintenance] Purge the C-style `typedef struct` syntax
I might change this convention again in the future, particularly once
someone wants to fund C89 conformance, but let's stay consistent for
now.

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:59:34 +01:00
nmlgc 26926080bc [Maintenance] Remove `extern "C"` from more areas of code
This commit covers
• TH02/TH03/TH04/TH05's frame_delay() and frame_delay_2() (finally!)
• TH02/TH03/TH04/TH05's game_init_main()
• TH02's graph_copy_rect_1_to_0_16()
• TH03/TH04/TH05's cfg_load_resident_ptr()
• TH05's piano_setup_and_put_initial() and piano_render()

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:59:34 +01:00
nmlgc 607200d0ed [Maintenance] Move the space-changing point union to a separate header
Yup, there's more! About time we started a general coordinate header
that will ultimately be independent of `pc98.h`.

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:52:26 +01:00
nmlgc ef57125be2 [Maintenance] [th02/th03/th04/th05] Split segment #1 before the Music Room
Yup, TH02 as well.

Part of P0264, funded by [Anonymous] and Blue Bolt.
2024-02-02 23:49:04 +01:00
nmlgc 46cd6e74bd [Decompilation] [th05] Title screen animation
And with that, we end up exactly in front of the Music Room data in all
three remaining games.

Completes P0263, funded by [Anonymous].
2023-11-30 23:34:24 +01:00
nmlgc 49c1cda526 [Decompilation] [th05] OP.EXE: .CDG loading and freeing
It's absolutely not worth decompiling the TH04 counterpart right now.

Part of P0263, funded by [Anonymous].
2023-11-30 20:55:36 +01:00
nmlgc f5d14ca7ec [Decompilation] [th05] MIKO.CFG: Move all data to C land
Part of P0263, funded by [Anonymous].
2023-11-30 20:54:46 +01:00
nmlgc 17ef96772c [Decompilation] [th04/th05] ZUN Soft logo: Move data to C land
Ah, the first time I encountered Q12.4 subpixels, way back in early
2018… I'd like this to be the final piece of code decompiled in either
of these games, but its data needs to be moved to C land now since it
blocks the Music Room.
And yes, we even have to compile this one twice.

Part of P0263, funded by [Anonymous].
2023-11-30 20:53:29 +01:00
nmlgc 7c3160c38d [Reverse-engineering] [th04/th05] Setup menu: MSWIN.BFT sprite IDs
And yes, replicating them in ASM land does speed up decompilation, as I
don't have to pause and manually look up each value.
Too bad that the two resident structure assignments and the different
.PI freeing functions are the only reasons why we have to compile the
entire thing twice. Would have been nicer if ZUN had directly saved the
selection to MIKO.CFG instead 😛

Part of P0263, funded by [Anonymous].
2023-11-30 20:25:50 +01:00
nmlgc cc1eea41ad [Maintenance] [th04/th05] Move OP.EXE clear flags to their own header
Removes `op.hpp`'s dependency on the headers that declare RANK_COUNT
and PLAYCHAR_COUNT.

Part of P0263, funded by [Anonymous].
2023-11-30 20:00:53 +01:00
nmlgc d55c2cbad0 [Maintenance] [th03/th04/th05] Split OP.EXE into two assembly units
Wow, that was unexpectedly painless – even for TH03 where we have to
deal with a significant number of un-RE'd pieces of data. And for TH04
and TH05, it turns out that we not only *want* to move the entire _TEXT
segment into the new unit to keep the amount of `extern` declarations
to a minimum, but in fact *have* to because of graph_putsa_fx()'s fancy
labels in the data segment.

Part of P0263, funded by [Anonymous].
2023-11-30 20:00:39 +01:00
nmlgc cafdd6ee3e [Maintenance] [th05] #include `common.h` directly inside `resident.hpp`
The asymmetry of having to do this for TH05's resident structure but
not for TH04's has finally become annoying enough.

Part of P0263, funded by [Anonymous].
2023-11-30 19:55:18 +01:00
nmlgc 741d889c07 [Decompilation] [th04/th05] Main menu: Move decompiled data to C land
Completes P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:50:52 +01:00
nmlgc b4980bbd8a [Decompilation] [th04/th05] OP.EXE: main()
Not the final function to be decompiled this time around!

Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:43:57 +01:00
nmlgc ad4cd15bb6 [Decompilation] [th04/th05] Main menu: Top-level menu update/render function
Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:37:58 +01:00
nmlgc 050afe83b5 [Decompilation] [th04/th05] Main menu: Top-level menu blitting
We don't really gain anything from pretending that these description
IDs are anything other than raw array indices.

Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:30:31 +01:00
nmlgc 1d047a504b [Reverse-engineering] [th04/th05] Main menu: Sprite IDs
Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:30:17 +01:00
nmlgc dfb48561d6 [Maintenance] [th04] Move MIKO.CFG code into the main menu translation unit
Wait, *what*, the alignment issues even stretch up to those functions?
And since TH05's version of the MIKO.CFG code lies much further down,
we now end up with this horrible #include placement asymmetry between
the two games. At least we now don't need a cross-TU workaround for
TH04's "MIKO.CFG" string either.

Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:30:17 +01:00
nmlgc 86f1f44522 [Maintenance] [th04/th05] #include game start code from a shared source file
Once again, word alignment of a `switch` jump table forces us to put
both the game start and main menu code into the same translation unit,
despite the former being fundamentally different between the two games.
Oh well, this also avoids the need for a cross-TU workaround for the
"main" and "deb" binary filename strings.

Part of P0262, funded by [Anonymous] and Blue Bolt.
2023-11-30 19:22:42 +01:00