Commit Graph

44 Commits

Author SHA1 Message Date
nmlgc 3afb73eada [Reverse-engineering] [th01] Pellets: Document missing resets for delay clouds
The exact reason why pellets can be carried over from Sariel's first
form to her second… and why you probably shouldn't carelessly use that
redundant count of alive pellets to skip loops in the Anniversary
Edition, because that count will be incorrect after a reset.
Thanks to mu021 for reporting this issue!
2023-03-14 00:18:23 +01:00
nmlgc 4548b874d6 [Platform] [PC-98] Font ROM glyph types
Moving the code from TH01 to a new platform layer, and deciding against
the `pc98_` prefix, which is sort of implied by the directory of the
header file it came from. Namespaces would be ideal, but Turbo C++ 4.0J
sadly doesn't support them.

Part of P0232, funded by [Anonymous].
2023-02-28 08:08:17 +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 4a0d2f3f20 [Maintenance] [th01] Introduce a top/left coordinate type for other branches
I'd really like to keep the semantics in usage code instead of using
`screen_point_t` everywhere.

Part of P0230, funded by [Anonymous].
2023-02-28 08:07:53 +01:00
nmlgc 010d6ae918 [Maintenance] [th01] Interpret redundant resident structure copies as such
And dissolve the "vars" units, which would be too annoying to merge on
the `debloated` branch otherwise. This interpretation of these globals
further highlights the type differences between REIIDEN.EXE and
FUUIN.EXE.
Placing them in directly in `resident.hpp`; on the `debloated` branch,
we could neatly define each of these fields in a matching .cpp file,
but that file would need to be compiled twice due to the aforementioned
differences between binaries. Better to keep those in `op_01.cpp`,
`main_01.cpp`, or `fuuin_01.cpp`, respectively.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc cb7b67bfe3 [Naming] [th01] Extra bombs per life lost
This variable makes more sense if we name it after its one actual and
consistent usage. All others make more sense when interpreted as a bug
or bloat.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 357573eaf7 [Naming] [th01] Use a consistent `rem_` prefix for current lives and bombs
Same rationale here – this naming scheme clarifies how these variables
are just redundant copies out of the resident structure.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc e0e9741f92 [Naming] [th01] Use a consistent `credit_` prefix for starting lives
The `credit_` prefix may seem redundant within the REIIDEN.CFG
structure, but consistency seems more important here. Makes it much
easier to follow how these fields are copied around.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 4716948b57 [Maintenance] [th01] Declare types for signed and unsigned scores
Will make it much easier for modders to resolve this inconsistency.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 841d8be376 [Maintenance] [th01] Stage objects: Define X/Y counts without playfield metrics
Clean subsystem hierarchy restored.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 24c07c72df [Maintenance] [th01] Replace generic C types with more specific ones
In all places visited during the next 6 pushes: The resident structure
and copies of its values, the packfile implementation, boss entities,
rendering font ROM glyphs to VRAM, and overall inconsistent code
between the three binaries.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 9b46ff7d99 [Maintenance] [th01] Move TH01-exclusive VRAM text functions to a new header
Neatly dissolves two of the three game-specific preprocessor branches
in `th01/hardware/grppsafx.h`. Moving at least one function into a
corresponding .cpp file will also simplify the corresponding debloating
commit on the respective branch.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc e83d0772b2 [Maintenance] Turn TRAM width types into Shift-JIS width types
These are more generally useful for general text width calculations
that don't necessarily involve TRAM.

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 16:46:35 +01:00
nmlgc ab7dbf0462 [Decompilation] [th01] OP.EXE: Move the final pieces of data to C land
100%.

Part of P0216, funded by JonathKane.
2022-08-16 01:54:03 +02:00
nmlgc e1b65b6eed [Naming] [th01] MDRV2: Rename the board check function
Since it also sets an activation flag, it does much more in context
than checking for a board. This name also highlights why OP.EXE and
FUUIN.EXE ignore the BGM mode specified in the option menu.

Part of P0216, funded by JonathKane.
2022-08-16 01:54:03 +02:00
nmlgc 47cd413064 [Maintenance] Reclassify previously labeled ZUN bugs as quirks where applicable
Part of P0216, funded by JonathKane.
2022-08-16 01:44:16 +02: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 201722d25a [Maintenance] [th01] Finally add a BGM mode type
And name the FM state in a way that already prepares modded PMD
support. That's the number 1 TH01 mod idea, after all.

Part of P0216, funded by JonathKane.
2022-08-16 01:42:29 +02:00
nmlgc c4302b4ab7 [Maintenance] [th01] #include common.h from the resident structure header
Part of P0216, funded by JonathKane.
2022-08-16 01:41:14 +02:00
nmlgc ed3fbde7d7 [Maintenance] Correctly define `nullptr` as `far` for far-data memory models
Turns out I've misread the execl() documentation. That function does in
fact *not* need a second `nullptr` parameter for envp, because it
doesn't pass envp.

Part of P0216, funded by JonathKane.
2022-08-16 01:41:02 +02:00
nmlgc 690b4df14b [Maintenance] Fix another bunch of accumulated typos and dead code
Part of P0216, funded by JonathKane.
2022-08-16 01:38:12 +02:00
nmlgc 65ce43443c [Decompilation] [th01] REIIDEN.EXE: Move the final pieces of data to C land
100%. What a giant, uncategorizable mess of data.

Part of P0215, funded by Ember2528.
2022-08-15 00:44:05 +02:00
nmlgc 08e064fce0 [Decompilation] [th01] REIIDEN.EXE: main()
Three nested infinite loops, and negative glitch stages in debug mode.
What a fitting end, indeed.

Part of P0215, funded by Ember2528 and Yanga.
2022-08-15 00:44:05 +02:00
nmlgc 0fbc674973 [Decompilation] [th01] Bosses: Freeing function switch
Alright, time for the last bigger one.

Part of P0215, funded by Ember2528 and Yanga.
2022-08-14 23:27:11 +02:00
nmlgc 7b79d185bd [Decompilation] [th01] Pellets: Committing the destroy score
The final dumb function to remain in REIIDEN.EXE, and it only was the
4th last one to be decompiled…

Part of P0215, funded by Ember2528 and Yanga.
2022-08-14 23:26:48 +02:00
nmlgc 36958c2c1f [Decompilation] [th01] Error message for invalid resident state
The only game to show an error message if you try directly launching a
game through its main executable without setting up sound drivers or
the resident structure, and a really good one at that. "Please start
from the batch file" is the most user-friendly sentence you could print
in that case.

Part of P0215, funded by Ember2528 and Yanga.
2022-08-14 23:26:20 +02:00
nmlgc 2174245229 [Decompilation] [th01] Redundant and incomplete graphics freeing function
Part of P0215, funded by Ember2528 and Yanga.
2022-08-14 23:25:57 +02:00
nmlgc 414770c717 [Decompilation] [th01] Memory info screen
Hiding a lot of dynamic .PTN buffer size information behind misleading
labels. Nothing there to tell ZUN that he could have just easily saved
20% of all this memory by using a structure without an unneeded alpha
plane.

Completes P0214, funded by Ember2528.
2022-08-14 23:24:53 +02:00
nmlgc ea8e2a2f9f [Decompilation] [th01] REIIDEN.EXE: Out-of-memory handler
Part of P0214, funded by Ember2528.
2022-08-14 23:24:29 +02:00
nmlgc 44dbae8062 [Decompilation] [th01] Score-based extends
Part of P0214, funded by Ember2528.
2022-08-14 23:24:06 +02:00
nmlgc 9814f769fb [Decompilation] [th01] Player: Game Over animation
Where ZUN forgets the trigonometry functions used everywhere else in
the game, attempts to implement a velocity calculation from scratch
instead, and fails in every way possible. Oh, and it also has an
out-of-bounds memory access…

Part of P0214, funded by Ember2528.
2022-08-14 23:23:25 +02:00
nmlgc a981007b7a [Decompilation] [th01] Continue menu
Part of P0214, funded by Ember2528.
2022-08-14 23:22:47 +02:00
nmlgc f075c0904e [Maintenance] [th01] REIIDEN.EXE: Merge the first two translation units again
Part of P0214, funded by Ember2528.
2022-08-14 23:22:35 +02:00
nmlgc 2f9304781f [Maintenance] [th01] Split segment #1 before the pellet speed modification code
There might only be three functions between the second and new third
split, but these seem to depend on the entire rest of the code for
card-flipping stages…

Part of P0160, funded by Yanga.
2021-10-08 18:39:04 +02:00
nmlgc 0d497452ef [Maintenance] [th01] Use a single header file for bomb declarations
Part of P0159, funded by Yanga.
2021-09-28 18:05:25 +02:00
nmlgc bf7bb7ed73 [Decompilation] [th01] 16× TRAM letters: HARRY UP
Largely copy-pasted from the previous function, once again.

Completes P0157, funded by Yanga.
2021-09-12 20:31:41 +02:00
nmlgc d0275f7ba6 [Decompilation] [th01] 16× TRAM letters: STAGE + number
Part of P0157, funded by Yanga.
2021-09-12 20:31:41 +02:00
nmlgc 84a3d465dc [Decompilation] [th01] 16× TRAM letters: Single transparent centered kanji
Used for the 東方★靈異伝 effect at the beginning of each scene. Good
that there's this second TRAM page, that's how we can be lazy and just
write into the 26th row :tannedcirno:

Part of P0157, funded by Yanga.
2021-09-12 20:31:41 +02:00
nmlgc b7a10e1a0a [Decompilation] [th01] 16× TRAM letters: Printing fullwidth JIS characters
A small function that prompted lots of research into whether it's
actually correct… which then revealed that every single widely used
PC-98 emulator is broken in this regard. More about that in two
upcoming pushes…

Part of P0157, funded by Yanga.
2021-09-12 20:31:39 +02:00
nmlgc 27bf06751a [Maintenance] master.hpp transition: Keyboard functions
Part of P0133, funded by [Anonymous].
2021-01-30 18:34:14 +01:00
nmlgc ec8be31cd3 [Maintenance] Move PC-98 keyboard declarations to their own header file
140 lines that are only used in, like, 7 translation units.

Part of P0133, funded by [Anonymous].
2021-01-30 18:26:46 +01:00
nmlgc 43c97ccaa1 [Maintenance] Decide on __asm as the keyword for inline assembly
Which works in both Borland C++, Open Watcom, and Visual C++.

Not that we're about to port any of the games to these compilers, just
something I noticed while evaluating 32-bit compilers for ReC98's own
32-bit pipeline tools. Modders might want to look into that though,
since 100% position independence also makes it easier to change
compilers.
2020-06-21 22:18:00 +02:00
nmlgc 51de73bcc9 [Decompilation] [th01] Orb physics
"Physics". Not only did ZUN restrict the X velocity to the 5 discrete
states of -8, -4, 0, 4, and 8 (because hey, unaligned blitting is slow
anyway?), but gravity is also only applied every 5 frames.

We're still missing quite a bit of usage code, but these are the core
functions. One of which turned out to be undecompilable, due to… a
rigorously defined instruction order when performing arithmetic between
`double`s and `float`s?! Still, spelling out all this stuff in ASM
seems much better than somehow splitting the data segment, just so that
we can immediately use literals there.

Part of P0097, funded by Ember2528.
2020-06-13 21:15:27 +02:00
nmlgc f2543c8336 [Decompilation] [th01] Keyboard input in REIIDEN.EXE
Yes, TH01's memory info screen will recurse into itself for every 3
frames the PgUp key is held, requiring one additional PgDown press per
recursion to actually get out of it.
You can, of course, also crash the system via a stack overflow this
way, if that's your thing.

Part of P0091, funded by Ember2528.
2020-05-12 15:06:11 +02:00