The one where Elis' bat form fires a slow spread group every 16 frames.
Interestingly, it's easiest on Lunatic, where the pellets are always
fired downwards and you just have to not stand below Elis. On every
other difficulty, the pellets are aimed to the player.
And what's this, an appropriately used local variable?!
Part of P0195, funded by Yanga.
The one where Elis fires pellets from 5 random blue rifts around her
sprite, first with random angles firing downwards, then with random
angles in all directions.
A~nd we've reached Konngara levels of copy-pasta again. 🍝
Part of P0194, funded by Ember2528.
Nice that this is a dedicated function. ZUN could have easily
copy-pasted it into every pattern, just as we've seen with Konngara… 🎺
Part of P0194, funded by Ember2528.
Oh hey, ZUN wrote a function to help with the very meaningful task of
expressing the Star of David's point coordinates in polar form!
Part of P0194, funded by Ember2528.
The one where Elis, on Lunatic, runs past the pellet cap of 100 by
spawning 160 slow aimed pellets along a circle in a single frame, and
that's not the only janky quirk in there.
Completes P0193, funded by Ember2528.
The one where Elis fires missiles from random locations around her
sprite, aimed at random angles towards the bottom of the playfield.
Part of P0193, funded by Ember2528.
The one where Elis fires 11 (yes, 11) evenly spaced lasers from her
left eye (?) across the whole playfield, from either the left or right
edge to the other one. First pattern you see in the fight.
Part of P0193, funded by Ember2528.
Yup, assigning this one to Elis, even though its proximity to the rest
of the generic boss variables might suggest that it was intended as a
generic boss state variable. Nope, that idea has already demonstrated
its uglyness in the previous TH04 and TH05 pushes…
Part of P0193, funded by Ember2528.
It's slowly starting to make sense, as it eliminates the need for both
separate `*_COUNT` macros in places where the count isn't used for
anything else, as well as custom class declarations.
Part of P0193, funded by Ember2528.
In which all the declarations expand the C++ code to take up more lines
than the previous compressed ASM representation.
Part of P0166, funded by Ember2528.
The one with the yellow random stars on top of Elis.
And you know what, I'm just going to accept these incorrect 4 bytes
temporarily. The easy workaround for the three calls in the first
conditional branch inverts the order of that branch and the next one
in the generated ASM, and working around *that* will cause a
disproportionately greater mess. The code generation here is
semantically equivalent to the original ASM, doesn't add or remove a
single byte, and the issue is going to fix itself 5 commits from now.
Part of P0166, funded by Ember2528.
In which ZUN wanted to use a parameter to distinguish between taking
the position from Stationary-Or-Wavy-Elis and Attacking-Elis, but then
sets the latter's position to the former's before doing anything with
that parameter.
Part of P0166, funded by Ember2528.
Common sense: Entity backgrounds always go into slot X, missile sprites
into slot Y, and wave sprites into slot Z
ZUN: "Nah, let's set aside two slots, and bosses can just freely use
them as they want 🎺"
Part of P0165, funded by Ember2528.
Functions with 12 parameters are hard to describe, y'know. Looking
forward to decompiling these giant expressions for the actual
boss↔orb collision parameter passed to this function…
Oh well, at least we're now totally ready for some boss code next
year. 😌
Completes P0131, funded by Yanga.
And we're right back to things not being nice. Because yeah, why
shouldn't these three distinct rendering functions be part of a single
function, selected by magic numbers?
Or why shouldn't the 16×16 wrapper around a 32×32 set of graphics
functions be used to handle backgrounds for 16×8 sprites, resulting in
needlessly complex parameter calculations that lead to sloppy code?
Part of P0131, funded by Yanga.
And with that, TH01 is pushed over the 50% completion mark! 🎉
This time, it's only YuugenMagan who gets no own copy. Giant RE% gains
from all these calls, but let's hope I don't regret already decompiling
this one for all bosses. It's not quite at the beginning of SinGyoku's,
Mima's, and Elis' code segment, after all…
Part of P0130, funded by Yanga.