Commit Graph

734 Commits

Author SHA1 Message Date
wintiger0222 2b617dfa75 [Reverse-engineering] [th05] Music Room piano coordinates 2019-12-17 23:26:55 +01:00
wintiger0222 b74b7f9bce [Reverse-engineering] [th05] Music Room piano label font 2019-12-17 23:26:55 +01:00
wintiger0222 d0c4de0c7f [Naming] [th04/th05] GameCore 2019-12-17 23:26:55 +01:00
wintiger0222 895884fc7a [Naming] [th02/th04/th05] HUD display functions 2019-12-17 23:26:55 +01:00
wintiger0222 25903719a3 [Naming] [th02] Current and high score 2019-12-17 23:26:55 +01:00
wintiger0222 1ffa121821 [Naming] [th02] Gaiji loading
Renaming these to gaiji_load() and gaiji_free() for consistency with
other functions that load files. --Nmlgc
2019-12-17 23:26:54 +01:00
wintiger0222 0b084b83c3 [Reverse-engineering] [th04/th05] graph_putsa_fx 2019-12-17 23:26:54 +01:00
wintiger0222 75f05c8b90 [Reverse-engineering] [th04/th05] graph_putsa_fx tables 2019-12-17 23:26:54 +01:00
wintiger0222 6e09a2c15f [Naming] [th04/th05] graph_putsa_fx 2019-12-17 22:44:30 +01:00
wintiger0222 811ba84e3f [Reverse-engineering] [th03/th04/th05] snd_delay_until_measure 2019-12-17 22:44:27 +01:00
wintiger0222 e8c9876bef [Reverse-engineering] [th05] Current BGM measure
Split off from the delay function in this game, since the ending syncs
a bunch of things independent from any frame delays. -Nmlgc
2019-12-17 22:44:23 +01:00
nmlgc a23dab3154 [Reverse-engineering] MMD ticks-per-quarter-note constant
And then, ZUN hardcodes all measure-related functions to 4/4…
2019-12-17 22:40:05 +01:00
nmlgc 5f4f5d87dc [Decompilation] [th03] Shot update and render functions
Meh, can't overload arithmetic operators that take a Subpixel without
generating a needless load and store, even with -Z. But heck, slightly
uglifying subpixel/subpixel arithmetic is exactly the right trade-off.

Completes P0061, funded by Touhou Patch Center.
2019-12-05 21:41:31 +01:00
nmlgc 8b01c60f44 [Maintenance] Move PC-98 hardware constants to a separate include file
SPRITE16 would also like to refer to those later.

Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:38:39 +01:00
nmlgc 5c1a864432 [Reverse-engineering] [th03] Shot pair structure
Yup, one structure instance describes one *pair* of shot sprites in
TH03.

Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:38:32 +01:00
nmlgc 296f9f61c2 [Reverse-engineering] [th03] Playfield shaking
Which only applies to the set of sprites considered to be in the
foreground, so no EGC acceleration.

Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:36:02 +01:00
nmlgc 4030ef737a [Reverse-engineering] [th03] Character movement and gauge charge speeds
Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:35:02 +01:00
nmlgc 4d3d6acd28 [Decompilation] Templatize subpixels to offer both 16-bit and 8-bit variants
Yup, TH03 actually uses a 4.4 fixed-point format.

Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:27:53 +01:00
nmlgc bb6b0f1cc3 [Maintenance] Move the Subpixel class to a separate header, under TH03
Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:21:56 +01:00
nmlgc 04d24ccf1c [Reverse-engineering] [th03] Character IDs
Part of P0061, funded by Touhou Patch Center.
2019-12-05 21:21:49 +01:00
32th System 96684f45dc [Reverse-engineering] [th04/th05] Pause menu 2019-11-30 19:36:07 +01:00
nmlgc 30e6b7c3db [Maintenance] Correctly declare all input functions
The pascal calling convention for TH03's input mode functions actually
sort of matters, since we have this nice function pointer type that
expects pascal.
2019-11-30 19:34:55 +01:00
nmlgc a6a805f008 [ZUN symbols] key_det / shiftkey
Not applying this leak to TH03 since it would have more than one
`key_det` variable, resulting in names that are as much fanfiction as
the current ones…
2019-11-30 19:32:10 +01:00
nmlgc 73f5ae79a0 [Reverse-engineering] [th03] Demo frame counter
My dumb parser identified this as a reference to the PI header slots,
which is why it's here now!

Completes P0060, funded by Touhou Patch Center.
2019-11-28 23:23:30 +01:00
nmlgc 5bffab4f43 [Position independence] [th04/th05] Remaining references to PI slots
Part of P0060, funded by Touhou Patch Center.
2019-11-28 23:23:30 +01:00
nmlgc 619203a1c9 [Position independence] [th02/th03/th04/th05] Color palettes
Part of P0060, funded by Touhou Patch Center.
2019-11-28 23:23:29 +01:00
nmlgc b6e0330ff6 [Decompilation] [th03] Sprite display calls
Yes, decompilation, of something that was so obviously originally
written in ASM. We're still left with two un-decompilable instructions
here, but I'm amazed at how nicely I was able to abstract away all of
the gory register details, leading to pretty clear, readable, and dare
I say *portable* code?! Turbo C++ was once again pretty helpful here:

• `static_cast<char>(_BX) = _AL` actually compiles into `MOV BL, AL`,
  as you would have intended,
• and no-op assignments like _DI = _DI are optimized away, allowing
  us to leave them in for clarity, so that we can have all parameter
  assignments for the SPRITE16 display call in a single place.

I love this compiler.

Part of P0060, funded by Touhou Patch Center.
2019-11-28 23:14:21 +01:00
nmlgc 2269d0c29c [Reverse-engineering] [th03] Playfield sprite clipping coordinates
Part of P0060, funded by Touhou Patch Center.
2019-11-28 23:12:10 +01:00
wintiger0222 29385dd7cb [Naming] [th02] text_wipe 2019-11-24 16:02:43 +01:00
wintiger0222 61a2df2d71 [Naming] [th04/th05] EMS area setup 2019-11-24 16:02:43 +01:00
wintiger0222 37fb6eba32 [Naming] [th02/th04/th05] Demo loading and playback 2019-11-24 14:14:13 +01:00
nmlgc 7c80fb01f2 [Contributing] Establish how to cite ZUN's source code leaks 2019-11-24 14:14:13 +01:00
wintiger0222 22bf71d170 [Reduction] [th03/th04/th05] game_init_main 2019-11-24 14:14:13 +01:00
wintiger0222 9b9f487d6c [Naming] [th03/th04/th05] graph_putsa_fx
Let's cover this one during decompilation.
2019-11-24 14:14:05 +01:00
wintiger0222 09edcab744 [Reduction] [th03/th04/th05] game_init_op 2019-11-24 14:04:36 +01:00
nmlgc 71c737c4ee [Maintenance] Move DOS memory assignment sizes to separate files
Ideally, these could be calculated from some other game-specific
parameters? Anyone else who wants to look into this?
2019-11-24 14:04:36 +01:00
nmlgc 3f25caa5df [Reverse-engineering] [th02/th03/th04/th05] DOS memory assignment sizes
Changing the variable suffix to _paras rather than _siz here, since
master.lib uses the latter for byte sizes, while these are paragraphs.
2019-11-24 14:04:34 +01:00
wintiger0222 0009c3c161 [Reduction] [th03/th04/th05] game_exit_to_dos 2019-11-24 12:45:25 +01:00
wintiger0222 34b7b61964 [Reduction] [th03/th04/th05] game_exit 2019-11-24 12:45:17 +01:00
wintiger0222 5f0b2642ea [Maintenance] Fix #include syntax for mdrv2.c 2019-11-24 12:45:08 +01:00
nmlgc e9453bffe0 [Contributing] Add a rule against decompiling self-modifying code
Will come up soon in TH03, actually.
2019-11-20 00:22:43 +01:00
nmlgc afbc7eb381 [Contributing] Add some welcoming words for new contributors
And the explicit permission to also do something as seemingly trivial
as naming functions or data on separate branches, which apparently
still needed to be said somewhere.
2019-11-20 00:22:26 +01:00
nmlgc c196cdb41e [Contributing] Fix a few minor typos and omissions 2019-11-19 23:09:36 +01:00
nmlgc 8b627803a3 [Position independence] Vector calls and variables
Raw, uninteresting position independence work. Or maybe not, given that
this was one of the few things that also apply to TH01, and reveal just
how chaotically this game was coded. And so we've got three ways that
ZUN stored regular 2D points: Regularly (X first, Y second), Y first
and X second, and multiple points stored in a structure of arrays…

Completes P0059, funded by [Anonymous] and -Tom-.
2019-11-18 22:24:24 +01:00
nmlgc 550bba9b3c [Position independence] False positives in master.lib EGC function calls
Mostly used for screen shaking.

Part of P0059, funded by [Anonymous] and -Tom-.
2019-11-18 22:21:34 +01:00
nmlgc 3d7211b128 [Position independence] Remaining motion structures and comparisons
Part of P0059, funded by [Anonymous] and -Tom-.
2019-11-18 22:21:29 +01:00
nmlgc ad22ce26c2 [Reverse-engineering] [th04/th05] Player position clamping
Part of P0059, funded by [Anonymous] and -Tom-.
2019-11-18 22:21:23 +01:00
nmlgc b37611b1be [Maintenance] Add an underscore to the player_pos variable
No need to declare them as `pascal` on the C side only because I messed
up when naming them first.

Part of P0059, funded by [Anonymous] and -Tom-.
2019-11-18 22:21:15 +01:00
wintiger0222 01de2900dd [Decompilation] [th01] frame_delay
Closes #7.
2019-11-18 21:29:43 +01:00
nmlgc fef0299fbc [Reverse-engineering] [th04/th05] Midboss / boss explosion phase constants
In the end, the explosions remain the only constant in these phases,
everything else ("defeat"? "last phase"?) could have been
misunderstood. And yes, the algorithm really treated these 111
constants as potential memory references…

Completes P0058, funded by -Tom-.
2019-11-14 00:57:38 +01:00