Commit Graph

1198 Commits

Author SHA1 Message Date
nmlgc 10b60b3824 [Maintenance] [th03/th04/th05] Declare the symbol gaiji inherited from TH02
Part of P0116, funded by [Anonymous] and Lmocinemod.
2020-09-12 11:29:20 +02:00
nmlgc d973380a9c [Reverse-engineering] [th03/th04/th05] High score menu: Entered place
Part of P0116, funded by [Anonymous] and Lmocinemod.
2020-09-12 11:29:09 +02:00
nmlgc e5328a32fc [Reverse-engineering] [th05] Staff roll: Verdict bitmap
28,160 bytes of global data just for a overly large 320×704 bitmap
that allows you to scroll between the general verdict and the
individual end-of-stage scores with the Up and Down keys. That's one
benefit of splitting your game into multiple executables, I guess?

Completes P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:28:01 +02:00
nmlgc 827aee427c [Reverse-engineering] [th05] Staff roll: Star positions
Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:27:51 +02:00
nmlgc d54fe1b041 [Reverse-engineering] [th05] Staff roll: Orb trail positions
Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:27:41 +02:00
nmlgc ba1f9e230e [Reverse-engineering] [th05] Staff roll: Orb particle structure
Subpixels with 32-bit X and Y components?! That's new.
And yeah, they still just use 4 bits for the fractional part.

Also, let's try something revolutionary for these declarations that are
only used in a single .ASM dump file, and put them all straight before
the first function they are used in. Then we certainly don't forget to
delete them once we're done decompiling that stuff 🙃

Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:23:41 +02:00
nmlgc 498fa0c7fc [Reduction] #713: super_put_tiny_small
Still finding new unmodified master.lib functions in 2020, apparently…

Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:21:54 +02:00
nmlgc 4e6bedf20d [Decompilation] [th05] Staff roll: Space window coordinates
Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:21:44 +02:00
nmlgc c59283969e [Reverse-engineering] [th05] Staff roll: Space camera velocity
Part of P0115, funded by Lmocinemod and Blue Bolt.
2020-09-12 11:11:40 +02:00
nmlgc 967bb8b633 [Decompilation] [th03] Input mode and delay functions
Nice to see that Borland C++ optimizes bit-tests to cover just the high
or low byte of a word if possible, and that these don't have to be
two-byte structures after all.

Completes P0114, funded by Lmocinemod.
2020-09-07 21:18:40 +02:00
nmlgc aee8a13958 [Separate translation units] [th02] game_exit_to_dos(), zun_error(), graph_putsa_fx()
Oh, wait. Due to ridiculously unlucky alignment, we can't actually
approach TH03's OP.EXE from the top of code segment 2… without
covering way too many functions at once, that is.
At least TH02 works out with "just" three functions at once. *If* we
add seg2 back to OP.EXE, where we previously needed to delete it… 😵

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:40 +02:00
nmlgc f467b6818f [Maintenance] Declare game_exit() and game_exit_to_dos() as __cdecl
Again, no `pascal` convention unless necessary…

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:40 +02:00
nmlgc 716a925636 [Decompilation] [th03] YUME.CFG loading and saving
Oh, I just needed something in TH03's OP.EXE before code segment 2.

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:40 +02:00
nmlgc f6757fe76a [Maintenance] Fix DEFCONV declarations, and remove them where possible
Wow, this is the first time we're about to call any of these from C
land in ≥TH03? Found no built-in way to just uppercase an identifier
in TASM, so apparently we have to spell out the names in both lower-
and uppercase.
So, let's go back to regular, non-macro PUBLIC / PROC / ENDP code
wherever we can – for all functions introduced in ≥TH03, and for
everything that takes no parameters. It's simply not worth the
trouble.

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:39 +02:00
nmlgc d40547e601 [Maintenance] Drop the `slot` infix for PI-related identifiers
ZUN doesn't ever use PI functions without these slots, making that infix
kind of redundant.

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:39 +02:00
nmlgc 50b17d640b [Reverse-engineering] [th03] SPRITE16 setup for double-buffered blitting
Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:39 +02:00
nmlgc 5a6ac29f50 [Separate translation units] [th03] CDG: Non-alpha display (undecompilable)
Reason: Self-modifying. -.-

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:39 +02:00
nmlgc 97ce07bfc9 [Reverse-engineering] [th03] CDG: VRAM plane iteration
Which is where ZUN adds those additional 0x2000 to make the jump from
the 0xB800 plane to the 0xE000 plane.

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc ecc1372842 [Decompilation] [th03] Lookup table for horizontally flipping planar pixels
In which we exchange variable names for the ability to decompile more
than just 3 instructions here.
… yeah, "decompilation" is still a stretch.

Part of P0114, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc 6204fdd450 [Separate translation units] [th02/th03/th04] frame_delay_2()
Completes P0113, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc f0511221b7 [Maintenance] [th02/th03/th04/th05] Establish a common name for code segment 2
About time I finally developed this piece of tech. Towards TH05, this
segment got more and more undecompilable ASM functions mixed inbetween
C ones. Which means that pretty much all of the current ASM land
`#include`s in that segment will have to become translation units. And
we *really* don't want an additional layer of numbered, per-binary
translation units that just `#include` maybe one or two functions.

Also yeah, no _TEXT suffix, to drive home the point that this is a
"library" segment, and not really "owned" by any one file.

Part of P0113, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc 687752160c [Maintenance] Start a new file for x86 FLAGS comparison macros
Part of P0113, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc be22a72b25 [Maintenance] [th03/th04/th05] Declare CDG loading/freeing functions in C land
No need to make the function names more complicated if we already
expressed the one subtle format difference between TH03 and TH04/TH05
in the plane layout enum.

Part of P0113, funded by Lmocinemod.
2020-09-07 21:18:38 +02:00
nmlgc d1ba6306cc [Maintenance] [th03/th04/th05] Declare the CDG slot structure in C land
Third iteration on the field names, now consistent with how the naming
has evolved since 2017…

Part of P0113, funded by Lmocinemod.
2020-09-07 21:18:37 +02:00
nmlgc ec8668264c [Pipeline] bmp2arr: Fail if any non-#000/#FFF pixels are found
And that's all the minimum functionality I wanted to have.
Closes #8.

Part of P0113, funded by Lmocinemod.
2020-09-07 21:18:34 +02:00
nmlgc fea00067d7 [Pipeline] bmp2arr: Extend debug output to cover *all* relevant fields
And with that, we might even get away with not having command-line
help 😛

Part of P0113, funded by Lmocinemod.
2020-09-07 17:36:01 +02:00
nmlgc 23bf61b773 [Pipeline] bmp2arr: Add -q for silencing debug output on stderr
Part of P0113, funded by Lmocinemod.
2020-09-07 17:32:04 +02:00
nmlgc ea8d2466fe [Pipeline] bmp2arr: Require the output type to be provided explicitly
Part of P0113, funded by Lmocinemod.
2020-09-07 17:29:45 +02:00
nmlgc 24699942e6 [Pipeline] bmp2arr: Introduce error codes, and a separate reporting function
Part of P0113, funded by Lmocinemod.
2020-09-07 17:29:44 +02:00
nmlgc 66b72477d2 [Pipeline] bmp2arr: Use bitflags for the preshift/upside-down/debug BMP options
More ergonomic in initializer lists when used as a library.

Part of P0113, funded by Lmocinemod.
2020-09-07 17:29:43 +02:00
nmlgc 1f1847de48 [Build] Assemble all .ASM files in the 32-bit build part
Yeah, why *were* we assembling them in the 16-bit part before?!
Possible reasons:
• In a time before Tup, it made no actual difference whether these
  little files were assembled in the 32-bit or 16-bit part. Now it sort
  of does, since we've temporarily given up on minimal rebuilds in the
  16-bit part.
• Emphasizing the temporary nature of the 32-bit part by deliberately
  moving everything to the 16-bit part as early as possible?
• It all started with the ZUN.COM ASM code, which doesn't include any
  other files, and can therefore be perfectly tracked by a Makefile.
  Which *was* superior than the exclusive dumb batch file we had in the
  past. And then I've simply cargo-culted all new .ASM translation
  units into the 16-bit part well.

Oh, and another positive side effect of temporarily not using 16-bit
TASM: The build process now also runs on Windows 95.

Part of P0113, funded by Lmocinemod.
2020-09-07 17:25:56 +02:00
nmlgc 150d2c66d8 [Readme] Document the fix for TLINK's `Loader error (0000)` on 32-bit Windows
We have a winner! This turns 32-bit Windows ≥Vista into the optimal OS
to build ReC98 on.

Completes P0001, funded by GhostPhanom.
2020-09-03 22:50:29 +02:00
nmlgc b18866232b [Build] 32-bit: Fall back on a dumb full .bat rebuild if Tup can't run
And that's how we can still have a reliable 32-bit build part that runs
on XP or earlier.

Completes P0001, funded by GhostPhanom.
2020-09-03 19:04:20 +02:00
nmlgc a39a76bf99 [Build] 32-bit: Fix bin/th0? directory creation for Windows 9x
Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:19 +02:00
nmlgc 953e957f00 [Build] 32-bit: Fix tool checks and remove stderr redirection for Windows 9x
Containing ridiculous ERRORLEVEL hacks, because Windows 9x leaves it
untouched for nonexistent commands…

Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:18 +02:00
nmlgc e31d232584 [Build] 32-bit: Use Tup as a proper build system for the 32-bit part
This Tupfile does in fact date back to January 2017, and I've been
using it myself ever since. Time to finally deliver it on master!

Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:17 +02:00
nmlgc 51b775bd41 [Build] 16-bit: Don't explictly specify the .OBJ extension in TASM rules
If the output file already exists, TASM interprets a filename with
extension as a directory, and then concatenates the implicitly
generated output file name to that path… yup.

Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:16 +02:00
nmlgc 61358c1082 [Build] 16-bit: Unconditionally rebuild everything by default
Yup, let's completely avoid any of the benefits a Makefile might have
had, because they're completely unreliable without spelling out every
single #include. Such a trash technology, unsuited for pretty much
anything it's touted for.

Oh well, you can still call `maker` manually without the -B flag, if
you know for a fact that you've only modified the dependencies
currently listed. 🤷
At least this flag exists, and we don't have to add something like a
dummy .OBJ to each and every list of dependencies, so that we then can
force rebuilds by simply `touch`ing that one file…

Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:15 +02:00
nmlgc e5f28204a5 [Build] 32-bit: Actually create `bin/Pipeline` during the 32-bit part -.-
Lol, this led the bmp2arr compilation to fail on a clean checkout.
Lesson learned: Always test on a clean clone, not in your separate test
repo that you just `git pull` up to the final commit in a push, but
with all the build artifacts still in there…

Also, yes, `mkdir` only supports backslashes.

Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:15 +02:00
nmlgc e9cba933bb [Build] 32-bit: Sanely reorder the initialization steps
Part of P0001, funded by GhostPhanom.
2020-09-03 19:04:10 +02:00
nmlgc e447a2d687 [Position independence] [th04/th05] Final data references in TH05's MAIN.EXE
And that's it, actual position dependence achieved! 🎉 Again, the
website won't quite show 100% PI, but that (again) are all false
positives, to be covered in an upcoming push…

Completes P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 16:21:20 +02:00
wintiger0222 db206f9d41 [Reverse-engineering] [th02/th04/th05] HUD: Bar colors
Reviewed and merged as part of P0112, funded by [Anonymous] and Blue
Bolt.
2020-08-28 16:21:13 +02:00
nmlgc 6cd11b0a44 [Reverse-engineering] [th05] Bullets: Pellet delay cloud render list
Making sure that we don't ever have to iterate over the 8×8 pellet part
of the bullet array during rendering… sure, but why not give the same
optimization treatment to the 16×16 bullets?

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:31:02 +02:00
nmlgc db0adbc58f [Maintenance] [th02/th04/th05] Rename `HUD_TRAM_W` to `HUD_KANJI_W`
Right, *_TRAM_W refers to 8-pixel halfwidth characters, and *_KANJI_W
to 16-pixel full-width characters… which also include gaiji, which are
what the entire HUD is made out of.

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:30:34 +02:00
nmlgc ed113d9c30 [Reverse-engineering] [th04/th05] Stage tiles: Initial ring buffer filling
…Wow. A 32-element lookup table for the very computationally expensive
operation of (i * 320), needlessly limiting the amount of unique 384×80
tile sections in a stage to 32… and then TH05 further "optimizes" this
lookup by pre-multiplying all section IDs in the .STD file with the
element size of that table, to save a grand total of 1 x86 instruction.

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:28:26 +02:00
nmlgc a89836c18e [Decompilation] [th05] Bombs: Reimu's blue star animation
After ternary expressions straight out of Jigoku in 57be510, we now got
pointer arithmetic straight out of Jigoku… with, unsurprisingly, two
ZUN bugs.

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:22:28 +02:00
nmlgc a7a053fb52 [Reverse-engineering] [th05] Bombs: Character-specific animation structures
Final structure in TH05's `MAIN.EXE`! And, just like this game's custom
entities, every character uses the same structure fields with vastly
different semantics and high-level types… yup, time for separate
structures again.

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:18:15 +02:00
nmlgc fb67d4d054 [Maintenance] Rename all old *_X and *_Y constants to *_LEFT and *_TOP
Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:14:22 +02:00
nmlgc 8e686dd564 [Maintenance] [th04/th05] Declare circles in C land
No structure declaration in the header file needed, since the game
doesn't party on its members from outside, for once!

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:14:21 +02:00
nmlgc b034e606bc [Maintenance] Subpixels: Differentiate between pixel and subpixel types
Which does have the practical effect of communicating more information
via IntelliSense during regular development!

Part of P0112, funded by [Anonymous] and Blue Bolt.
2020-08-28 15:14:21 +02:00