Boss07 (Majora) OK and documented [mm-n64-us.z64 OK] (#1753)

* more matches

* more functions

* merge, I hope

* wrath done-ish

* 5 nonmatchings

* more matchings

* more improvements

* more stuff

* stuff

* docs part 1 / infinity

* more docs

* .

* more adjustments

* linked assets

* Document object_boss07 and match Boss07_Incarnation_Intro (thanks Synray!)

* more stuff

* play part 2

* lol merge

* update

* unk types

* SWEET GOOGLY MOOGLY IT MATCHES

* cam fixes

* adjust damage stuff

* if?

* stuff

* signs

* macro stuff. clean up later

* names

* Some small cleanup

* cleanup and docs

* more cleanup

* Wrath shadow docs

* Use `EVENTINF_INTRO_CS_WATCHED_MAJORA` after merging

* Update functions.txt

* Types cleanup

* Some low hanging fruit

* Undefined_syms.txt

* More static -> battle handler

* Lots of naming cleanup

* Remove z_boss_07_dmgtbl.inc
The reasoning behind removing this file is simple; it wasn't all that long, so extracting it out to an included file didn't really add much, and it made refactoring and/or things much harder, since you needed to check in multiple places to change things.

* Get most of the limb stuff named (and actually update the spec)

* Some minor cleanup

* Updating the repo with what we talked about in discord

* Some syncing with Odolwa and other misc name stuff

* Some Odolwa/Bio Baba sync

* Another bit of Odolwa/Bio Baba sync

* Name a lot of incarnation limb variables

* Finalize the incarnation intro variable stuff

* Fix a goof

* `incarnationWrathTransition` variables

* `generalCollider` and always use "tentacle"

* Completely remove "shot," always use "projectile"

* Clean up `Boss07_Mask_Draw`

* Name `maskShakeTimer`

* Give better names to a few more things

* Some beam-related struct vars

* undefined_syms

* More beam names

* More beam stuff

* Beam, pt 100000

* Some intro struct members

* Some timers

* More non-beam stuff, back to beam

* Done with beam finally

* All but one of the subcam variables, some other stuff

* Some variable names and cleanup

* More cleanup

* jumpSfxTimer -> landSfxTimer

* actionState -> subAction and a little bit of syncing with Odolwa

* A couple more variables sync

* Buncha variables

* Lots of non-whip variables

* Commit what I have before starting on some of the grab stuff

* All but one struct var done

* Lots of header cleanup

* Finish the header file

* Fix build after merging main

* Damage effect enums

* Update damage effect enums for Incarnation and Wrath

* Update damage effect enums for Mask and Remains

* First pass at top damage effects

* Do a few sub action enums so I have something to show

* Fix the damage effect enums, clean up a lot of subaction enums

* All remaining sub action enums, cleanup damage effect enums, other misc cleanup

* Finish enums

* Finish data

* Push up what I have

* Consistency

* scroll -> texScroll

* low hanging fruit

* PR + small fix

* Happy with >20% of functions

* Happy with >40% of functions

* Happy with >60% of functions

* Happy with >75% of functions

* Happy with >90% of functions

* Happy with >95% of functions

* Happy with `Boss07_Wrath_DeathCutscene`

* Happy with `Boss07_Mask_FireBeam`

* Happy with `Boss07_Wrath_CheckWhipCollisions`

* Happy with everything but `Boss07_Mask_Draw`

* Happy with all functions I think?

* Clean up forward declarations

* Write a half-decent file header

* Fix after merging

* Fix some minor stuff here and there

* Minor fix in the file header because I forgot I renamed this

* Respond to engineer's review

* Respond to Anghelo's review

* Replace as many actor lookups with for-loops as I can in Odolwa/Majora

* Change the comment about the hookshot from a `@note` to a `@bug`

* `drag` -> `deceleration`

* Extra scopes for the matrix stuff in `Boss07_Mask_DrawBeam`

* Use decimal numbers in the various `FillShadowTex` functions

---------

Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: petrie911 <pmontag@Monday.localdomain>
Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@PHYS-S129.iowa.uiowa.edu>
Co-authored-by: petrie911 <petrie911@users.noreply.github.com>
Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
This commit is contained in:
Tom Overton 2024-12-10 18:06:55 -08:00 committed by GitHub
parent 3c16f534de
commit fa240048cf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 8288 additions and 992 deletions

View File

@ -4,7 +4,7 @@
<!-- Majora's Incarnation Animations -->
<Animation Name="gMajorasIncarnationPirouetteAnim" Offset="0x194" /> <!-- Original name is "last2_bd" (probably short for "ballet dance") -->
<Animation Name="gMajorasIncarnationEnergyBallAttackAnim" Offset="0x428" /> <!-- Original name is "last2_beam02" -->
<Animation Name="gMajorasIncarnationDamageAnim" Offset="0xD0C" /> <!-- Original name is "last2_dam" -->
<Animation Name="gMajorasIncarnationDamagedAnim" Offset="0xD0C" /> <!-- Original name is "last2_dam" -->
<Animation Name="gMajorasIncarnationIntroDanceAnim" Offset="0x2C40" /> <!-- Original name is "last2_hensin" ("metamorphosis/transformation") -->
<Animation Name="gMajorasIncarnationJerkingAnim" Offset="0x2D84" /> <!-- Original name is "last2_hensin2" -->
<Animation Name="gMajorasIncarnationPumpingUpAnim" Offset="0x31E4" /> <!-- Original name is "last2_hensin3" -->
@ -154,14 +154,14 @@
<Animation Name="gMajorasWrathDoubleKickAndJumpBackAnim" Offset="0x1C430" /> <!-- Unused. Original name is "last_ac02" -->
<Animation Name="gMajorasWrathBackflipUppercutAttackAnim" Offset="0x1CFF0" /> <!-- Unused. Original name is "last_ac03" -->
<Animation Name="gMajorasWrathHighKickAnim" Offset="0x1D974" /> <!-- Unused and almost identical to gMajorasWrathKickAnim. Original name is "last_ac04" -->
<Animation Name="gMajorasWrathDamageAnim" Offset="0x1DEB4" /> <!-- Original name is "last_dam" -->
<Animation Name="gMajorasWrathDamagedAnim" Offset="0x1DEB4" /> <!-- Original name is "last_dam" -->
<Animation Name="gMajorasWrathDeathAnim" Offset="0x22BB4" /> <!-- Original name is "last_dead" -->
<Animation Name="gMajorasWrathTiptoeWhipAttackAnim" Offset="0x23A44" /> <!-- Unused. Original name is "last_def" -->
<Animation Name="gMajorasWrathHeavyBreathingAnim" Offset="0x23DAC" /> <!-- Original name is "last_hen" (short for "metamorphosis/transformation") -->
<Animation Name="gMajorasWrathIntroAnim" Offset="0x25018" /> <!-- Original name is "last_hen2" -->
<Animation Name="gMajorasWrathBackflipAnim" Offset="0x25878" /> <!-- Original name is "last_jump" -->
<Animation Name="gMajorasWrathKickAnim" Offset="0x26204" /> <!-- Original name is "last_kick" -->
<Animation Name="gMajorasWrathReleaseTopAnim" Offset="0x269EC" /> <!-- Original name is "last_koma" ("spinning top") -->
<Animation Name="gMajorasWrathThrowTopAnim" Offset="0x269EC" /> <!-- Original name is "last_koma" ("spinning top") -->
<Animation Name="gMajorasWrathGrabAnim" Offset="0x26EA0" /> <!-- Original name is "last_link" -->
<Animation Name="gMajorasWrathThrowAnim" Offset="0x27270" /> <!-- Original name is "last_link2" -->

View File

@ -177,7 +177,7 @@ s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePoi
Actor* SubS_FindActorCustom(struct PlayState* play, Actor* actor, Actor* actorListStart, u8 actorCategory, s16 actorId, void* verifyData, VerifyFindActorFunc verifyActorFunc);
s32 SubS_OfferTalkExchangeCustom(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, void* data, VerifyTalkExchangeActorFunc verifyActorFunc);
s32 SubS_ActorAndPlayerFaceEachOther(struct PlayState* play, Actor* actor, void* data);
s32 SubS_ArePlayerAndActorFacing(struct PlayState* play, Actor* actor, void* data);
s32 SubS_OfferTalkExchangeFacing(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, s16 playerYawRange, s16 actorYawRange);
s32 SubS_TrackPointStep(Vec3f* worldPos, Vec3f* focusPos, s16 shapeYRot, Vec3f* yawTarget, Vec3f* pitchTarget, s16* headZRotStep, s16* headXRotStep, s16* torsoZRotStep, s16* torsoXRotStep, u16 headZRotStepMax, u16 headXRotStepMax, u16 torsoZRotStepMax, u16 torsoXRotStepMax);

View File

@ -21,84 +21,10 @@ D_01000000 = 0x01000000;
// segment 0x04
D_04023348 = 0x04023348;
D_040233B8 = 0x040233B8;
D_04023428 = 0x04023428;
D_0406AB30 = 0x0406AB30;
// segment 0x05
// segment 0x06
// ovl_Boss_07
D_06000194 = 0x06000194;
D_06000428 = 0x06000428;
D_06000D0C = 0x06000D0C;
D_06002C40 = 0x06002C40;
D_06002D84 = 0x06002D84;
D_060031E4 = 0x060031E4;
D_06003854 = 0x06003854;
D_06003A64 = 0x06003A64;
D_060099A0 = 0x060099A0;
D_06009C7C = 0x06009C7C;
D_06009EA8 = 0x06009EA8;
D_0600A194 = 0x0600A194;
D_0600A400 = 0x0600A400;
D_0600A6AC = 0x0600A6AC;
D_0600AE40 = 0x0600AE40;
D_0600AFB0 = 0x0600AFB0;
D_0600B020 = 0x0600B020;
D_0600C7D8 = 0x0600C7D8;
D_0600CEE8 = 0x0600CEE8;
D_060149A0 = 0x060149A0;
D_06016090 = 0x06016090;
D_06017DE0 = 0x06017DE0;
D_06019328 = 0x06019328;
D_06019C58 = 0x06019C58;
D_06019E48 = 0x06019E48;
D_0601DEB4 = 0x0601DEB4;
D_06022BB4 = 0x06022BB4;
D_06023DAC = 0x06023DAC;
D_06025018 = 0x06025018;
D_06025878 = 0x06025878;
D_06026204 = 0x06026204;
D_060269EC = 0x060269EC;
D_06026EA0 = 0x06026EA0;
D_06027270 = 0x06027270;
D_0602EE50 = 0x0602EE50;
D_0602EEC8 = 0x0602EEC8;
D_0602EEF8 = 0x0602EEF8;
D_0602EF68 = 0x0602EF68;
D_0602EF88 = 0x0602EF88;
D_0602EFE8 = 0x0602EFE8;
D_0602F640 = 0x0602F640;
D_0602F840 = 0x0602F840;
D_06030C40 = 0x06030C40;
D_06032040 = 0x06032040;
D_060335F0 = 0x060335F0;
D_06033F80 = 0x06033F80;
D_06034E64 = 0x06034E64;
D_060358C4 = 0x060358C4;
D_06036A7C = 0x06036A7C;
D_06037ADC = 0x06037ADC;
D_0603918C = 0x0603918C;
D_0603B330 = 0x0603B330;
D_0603C4E0 = 0x0603C4E0;
D_0603CBD0 = 0x0603CBD0;
D_0603D224 = 0x0603D224;
D_0603D7F0 = 0x0603D7F0;
D_0603DD1C = 0x0603DD1C;
D_0603DD30 = 0x0603DD30;
D_0603ED30 = 0x0603ED30;
D_0603F130 = 0x0603F130;
D_06040130 = 0x06040130;
D_06040930 = 0x06040930;
D_06040B30 = 0x06040B30;
D_06041B30 = 0x06041B30;
D_06042330 = 0x06042330;
D_06043330 = 0x06043330;
// segment 0x07
// segment 0x08

4
spec
View File

@ -2510,9 +2510,7 @@ beginseg
name "ovl_Boss_07"
compress
include "$(BUILD_DIR)/src/overlays/actors/ovl_Boss_07/z_boss_07.o"
include "$(BUILD_DIR)/data/ovl_Boss_07/ovl_Boss_07.data.o"
include "$(BUILD_DIR)/data/ovl_Boss_07/ovl_Boss_07.bss.o"
include "$(BUILD_DIR)/data/ovl_Boss_07/ovl_Boss_07.reloc.o"
include "$(BUILD_DIR)/src/overlays/actors/ovl_Boss_07/ovl_Boss_07_reloc.o"
endseg
beginseg

View File

@ -1553,7 +1553,7 @@ s32 SubS_OfferTalkExchangeCustom(Actor* actor, PlayState* play, f32 xzRange, f32
return canAccept;
}
s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data) {
s32 SubS_ArePlayerAndActorFacing(PlayState* play, Actor* actor, void* data) {
Player* player = GET_PLAYER(play);
Vec3s* yawRanges = (Vec3s*)data;
s16 playerYaw = ABS(BINANG_SUB(Actor_WorldYawTowardActor(&player->actor, actor), player->actor.shape.rot.y));
@ -1579,7 +1579,7 @@ s32 SubS_OfferTalkExchangeFacing(Actor* actor, PlayState* play, f32 xzRange, f32
yawRanges.x = playerYawRange;
yawRanges.y = actorYawRange;
return SubS_OfferTalkExchangeCustom(actor, play, xzRange, yRange, exchangeItemAction, &yawRanges,
SubS_ActorAndPlayerFaceEachOther);
SubS_ArePlayerAndActorFacing);
}
/**

View File

@ -236,8 +236,8 @@ typedef enum {
// Deals damage and has no special effect.
/* 0xD */ ODOLWA_DMGEFF_DAMAGE,
// Deals damage and checks the timer that tracks how long Odolwa should be in his damaged state. If the timer is 7
// or more, it will reset the timer to 20 frames keep Odolwa in the damaged state for longer. If the timer is 6 or
// Deals damage and checks the timer that tracks how long Odolwa should be in his damaged state. If the timer is 5
// or more, it will reset the timer to 20 frames keep Odolwa in the damaged state for longer. If the timer is 4 or
// less, it will disable Odolwa's collision for 20 frames to ensure he can jump away without taking further damage.
/* 0xE */ ODOLWA_DMGEFF_DAMAGE_TIMER_CHECK,
@ -958,16 +958,15 @@ void Boss01_Destroy(Actor* thisx, PlayState* play) {
* Checks every explosive actor to see if Odolwa is close enough to any of them. If he is, then he'll jump.
*/
void Boss01_JumpAwayFromExplosive(Boss01* this, PlayState* play) {
Actor* explosive = play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].first;
Actor* explosive;
while (explosive != NULL) {
for (explosive = play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].first; explosive != NULL;
explosive = explosive->next) {
if (sqrtf(SQ(explosive->world.pos.x - this->actor.world.pos.x) +
SQ(explosive->world.pos.y - this->actor.world.pos.y) +
SQ(explosive->world.pos.z - this->actor.world.pos.z)) < 150.0f) {
Boss01_SetupJump(this, play, false);
}
explosive = explosive->next;
}
}
@ -1224,7 +1223,7 @@ void Boss01_SummonBugsCutscene(Boss01* this, PlayState* play) {
pos.z = Rand_CenteredFloat(200.0f) + (this->actor.world.pos.z + offset.z);
Audio_PlaySfx(NA_SE_PL_DEKUNUTS_DROP_BOMB);
Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_01, pos.x, 1200.0f, pos.z, 0, Rand_ZeroFloat(0x10000),
0, ODOLWA_TYPE_BUG);
0, ODOLWA_PARAMS(ODOLWA_TYPE_BUG));
}
}
@ -1424,7 +1423,7 @@ void Boss01_Wait(Boss01* this, PlayState* play) {
case ODOLWA_WAIT_ARM_SWING_DANCE:
case ODOLWA_WAIT_THRUST_ATTACK:
Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_01, pos.x, pos.y, pos.z, 0, Rand_ZeroFloat(0x10000), 0,
ODOLWA_TYPE_BUG);
ODOLWA_PARAMS(ODOLWA_TYPE_BUG));
break;
case ODOLWA_WAIT_SIDE_TO_SIDE_DANCE:
@ -1906,9 +1905,9 @@ void Boss01_ShieldBash(Boss01* this, PlayState* play) {
* function will transition him to that state and start a 20 frame timer; when this timer reaches 0, he will recover and
* jump away. However, if he is already in the "damaged" state, and if the player attacked him with an attack that has
* the ODOLWA_DMGEFF_DAMAGE_TIMER_CHECK damage effect, then one of two things will happen:
* - If the attack hit while his current action timer is 7 or more, the timer will be set to 20 again; this will keep
* - If the attack hit while his current action timer is 5 or more, the timer will be set to 20 again; this will keep
* Odolwa in the "damaged" state for longer and allow the player to attack him more.
* - If the attack hit while his current action timer is 6 or less, Odolwa will disable all of his collision for 20
* - If the attack hit while his current action timer is 4 or less, Odolwa will disable all of his collision for 20
* frames to ensure that the player cannot hit him with subsequent attacks.
*/
void Boss01_SetupDamaged(Boss01* this, PlayState* play, u8 damageEffect) {
@ -2150,8 +2149,8 @@ void Boss01_DeathCutscene(Boss01* this, PlayState* play) {
this->subCamAt.z = mainCam->at.z;
diffX = this->subCamEye.x - this->actor.world.pos.x;
diffZ = this->subCamEye.z - this->actor.world.pos.z;
this->deathCsInitialSubCamRot = Math_Atan2F_XY(diffZ, diffX);
this->deathCsSubCamRot = -0.5f;
this->deathCsInitialSubCamRotY = Math_Atan2F_XY(diffZ, diffX);
this->deathCsSubCamRotY = -0.5f;
FALLTHROUGH;
case ODOLWA_DEATH_CS_STATE_PLAY_ANIM_AND_FALL_FORWARD:
if (this->cutsceneTimer < 15) {
@ -2170,11 +2169,11 @@ void Boss01_DeathCutscene(Boss01* this, PlayState* play) {
}
FALLTHROUGH;
case ODOLWA_DEATH_CS_STATE_BURST_INTO_FLAMES_AND_SHRINK:
Math_ApproachF(&this->deathCsSubCamRot, 1.3f, 0.1f, 0.008f);
Math_ApproachF(&this->deathCsSubCamRotY, 1.3f, 0.1f, 0.008f);
subCamOffset.x = 0.0f;
subCamOffset.y = 30.0f;
subCamOffset.z = 300.0f;
Matrix_RotateYF(this->deathCsInitialSubCamRot + this->deathCsSubCamRot, MTXMODE_NEW);
Matrix_RotateYF(this->deathCsInitialSubCamRotY + this->deathCsSubCamRotY, MTXMODE_NEW);
Matrix_MultVec3f(&subCamOffset, &this->subCamEyeNext);
this->subCamEyeNext.x += this->pelvisPos.x;
this->subCamEyeNext.y += this->pelvisPos.y;
@ -2327,7 +2326,7 @@ void Boss01_Thaw(Boss01* this, PlayState* play) {
* Returns true if Odolwa's model is rotated such that he is looking at the player *and* if the player's model is
* rotated such that they are looking at Odolwa.
*/
s32 Boss01_ArePlayerAndOdolwaFacing(Boss01* this, PlayState* play) {
s32 Boss01_ArePlayerAndActorFacing(Boss01* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 0x3000) &&
@ -2440,7 +2439,7 @@ void Boss01_Update(Actor* thisx, PlayState* play2) {
// normally evades attacks, so long as the player is far enough to the side or behind him.
if (this->canGuardOrEvade &&
((player->unk_D57 != 0) || ((player->unk_ADC != 0) && (this->actor.xzDistToPlayer <= 120.0f))) &&
Boss01_ArePlayerAndOdolwaFacing(this, play)) {
Boss01_ArePlayerAndActorFacing(this, play)) {
if ((Rand_ZeroOne() < 0.25f) && (this->actionFunc != Boss01_Guard)) {
Boss01_SetupJump(this, play, false);
this->disableCollisionTimer = 10;
@ -2458,10 +2457,10 @@ void Boss01_Update(Actor* thisx, PlayState* play2) {
if (((this->frameCounter & (this->afterimageSpawnFrameMask - 1)) == 0) && (this->afterimageSpawnFrameMask != 0)) {
s16 afterimageTimer = (this->actionFunc == Boss01_SpinAttack) ? 4 : 10;
s32 pad;
Boss01* child =
(Boss01*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BOSS_01, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x,
this->actor.world.rot.y, afterimageTimer, ODOLWA_TYPE_AFTERIMAGE);
Boss01* child = (Boss01*)Actor_SpawnAsChild(
&play->actorCtx, &this->actor, play, ACTOR_BOSS_01, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, afterimageTimer,
ODOLWA_PARAMS(ODOLWA_TYPE_AFTERIMAGE));
if (child != NULL) {
for (i = 0; i < ODOLWA_LIMB_MAX; i++) {
@ -2804,22 +2803,22 @@ static s8 sLimbToBodyParts[] = {
void Boss01_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
Boss01* this = THIS;
PlayState* play = play2;
s8 index;
s8 bodyPartIndex;
Vec3f pos;
if (limbIndex == ODOLWA_LIMB_HEAD) {
Matrix_MultZero(&this->actor.focus.pos);
}
index = sLimbToBodyParts[limbIndex];
if (index > BODYPART_NONE) {
Matrix_MultZero(&this->bodyPartsPos[index]);
bodyPartIndex = sLimbToBodyParts[limbIndex];
if (bodyPartIndex > BODYPART_NONE) {
Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]);
}
index = sLimbToColliderBodyParts[limbIndex];
if (index > BODYPART_NONE) {
Matrix_MultVec3f(&sLimbColliderOffsets[index], &pos);
Boss01_SetColliderSphere(index, &this->bodyCollider, &pos);
bodyPartIndex = sLimbToColliderBodyParts[limbIndex];
if (bodyPartIndex > BODYPART_NONE) {
Matrix_MultVec3f(&sLimbColliderOffsets[bodyPartIndex], &pos);
Boss01_SetColliderSphere(bodyPartIndex, &this->bodyCollider, &pos);
}
if (limbIndex == ODOLWA_LIMB_PELVIS) {
@ -3041,7 +3040,7 @@ void Boss01_FillShadowTex(Boss01* this, u8* tex, f32 weight) {
baseY = (u16)((s32)startVec.y * 64);
if (sShadowSizes[i] == ODOLWA_SHADOW_SIZE_EXTRA_LARGE) {
for (y = 0, addY = -0x180; y < ARRAY_COUNT(sShadowExtraLargeMap); y++, addY += 0x40) {
for (y = 0, addY = -384; y < ARRAY_COUNT(sShadowExtraLargeMap); y++, addY += 64) {
for (x = -sShadowExtraLargeMap[y]; x < sShadowExtraLargeMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < ODOLWA_SHADOW_TEX_SIZE)) {
@ -3050,7 +3049,7 @@ void Boss01_FillShadowTex(Boss01* this, u8* tex, f32 weight) {
}
}
} else if (sShadowSizes[i] == ODOLWA_SHADOW_SIZE_LARGE) {
for (y = 0, addY = -0x100; y < ARRAY_COUNT(sShadowLargeMap); y++, addY += 0x40) {
for (y = 0, addY = -256; y < ARRAY_COUNT(sShadowLargeMap); y++, addY += 64) {
for (x = -sShadowLargeMap[y]; x < sShadowLargeMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < ODOLWA_SHADOW_TEX_SIZE)) {
@ -3059,7 +3058,7 @@ void Boss01_FillShadowTex(Boss01* this, u8* tex, f32 weight) {
}
}
} else if (sShadowSizes[i] == ODOLWA_SHADOW_SIZE_MEDIUM) {
for (y = 0, addY = -0xC0; y < ARRAY_COUNT(sShadowMediumMap); y++, addY += 0x40) {
for (y = 0, addY = -192; y < ARRAY_COUNT(sShadowMediumMap); y++, addY += 64) {
for (x = -sShadowMediumMap[y]; x < sShadowMediumMap[y] - 1; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < ODOLWA_SHADOW_TEX_SIZE)) {
@ -3068,7 +3067,7 @@ void Boss01_FillShadowTex(Boss01* this, u8* tex, f32 weight) {
}
}
} else {
for (y = 0, addY = -0x80; y < ARRAY_COUNT(sShadowSmallMap); y++, addY += 0x40) {
for (y = 0, addY = -128; y < ARRAY_COUNT(sShadowSmallMap); y++, addY += 64) {
for (x = -sShadowSmallMap[y]; x < sShadowSmallMap[y] - 1; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < ODOLWA_SHADOW_TEX_SIZE)) {

View File

@ -8,6 +8,7 @@ struct Boss01;
#define ODOLWA_GET_TYPE(thisx) ((thisx)->params)
#define ODOLWA_GET_AFTERIMAGE_DESPAWN_TIMER(thisx) ((thisx)->world.rot.z)
#define ODOLWA_PARAMS(type) (type)
#define ODOLWA_SHADOW_TEX_WIDTH 64
#define ODOLWA_SHADOW_TEX_HEIGHT 64
@ -85,7 +86,7 @@ typedef struct Boss01 {
/* 0x14E */ s16 timers[3];
/* 0x154 */ f32 animMorphFrames1;
/* 0x158 */ f32 animMorphFrames2;
/* 0x15C */ s16 damagedTimer;
/* 0x15C */ s16 damagedTimer; // TODO: Revisit this name when the equivalent Player variables are named
/* 0x15E */ s16 damagedFlashTimer;
/* 0x160 */ u8 isPerformingVerticalSlash; // set, but never checked
/* 0x160 */ u8 landedFromJump;
@ -133,8 +134,8 @@ typedef struct Boss01 {
/* 0x9F0 */ Vec3f subCamAt;
/* 0x9FC */ Vec3f subCamUp;
/* 0xA08 */ Vec3f subCamEyeNext;
/* 0xA14 */ f32 deathCsInitialSubCamRot;
/* 0xA18 */ f32 deathCsSubCamRot;
/* 0xA14 */ f32 deathCsInitialSubCamRotY;
/* 0xA18 */ f32 deathCsSubCamRotY;
/* 0xA1C */ f32 subCamVelocity;
/* 0xA20 */ f32 deathShrinkSpeed;
/* 0xA24 */ f32 screenShakeOffsetY;

File diff suppressed because it is too large Load Diff

View File

@ -2,15 +2,299 @@
#define Z_BOSS_07_H
#include "global.h"
#include "assets/objects/object_boss07/object_boss07.h"
struct Boss07;
typedef void (*Boss07ActionFunc)(struct Boss07*, PlayState*);
#define MAJORA_TENTACLE_LENGTH 10
#define MAJORA_TENTACLE_COUNT_MAX 100
#define MAJORA_WHIP_LENGTH_MAX 50
#define MAJORA_DEATH_LIGHT_COUNT 30
#define MAJORA_LIMB_COUNT MAX((s32)MAJORAS_MASK_LIMB_MAX, MAX((s32)MAJORAS_INCARNATION_LIMB_MAX, (s32)MAJORAS_WRATH_LIMB_MAX))
#define MAJORAS_WRATH_SHADOW_TEX_WIDTH 64
#define MAJORAS_WRATH_SHADOW_TEX_HEIGHT 64
#define MAJORAS_WRATH_SHADOW_TEX_SIZE ((s32)sizeof(u8[MAJORAS_WRATH_SHADOW_TEX_HEIGHT][MAJORAS_WRATH_SHADOW_TEX_WIDTH]))
#define MAJORA_GET_TYPE(thisx) ((thisx)->params)
#define MAJORA_PARAMS(type) (type)
typedef void (*Boss07ActionFunc)(struct Boss07*, struct PlayState*);
typedef enum MajoraType {
/* 0 */ MAJORA_TYPE_BATTLE_INIT, // initializes effects, spawns the battle handler, etc. Becomes `MAJORA_TYPE_MASK` after one frame.
/* 10 */ MAJORA_TYPE_MASK = 10,
/* 11 */ MAJORA_TYPE_MASK_UNK, // immediately crashes if spawned
/* 20 */ MAJORA_TYPE_INCARNATION = 20,
/* 21 */ MAJORA_TYPE_INCARNATION_AFTERIMAGE,
/* 30 */ MAJORA_TYPE_WRATH = 30,
/* 100 */ MAJORA_TYPE_PROJECTILE_REMAINS = 100,
/* 101 */ MAJORA_TYPE_PROJECTILE_INCARNATION,
/* 150 */ MAJORA_TYPE_BATTLE_HANDLER = 150, // handles effects, lens flare, the Remains activation cutscene, etc.
/* 180 */ MAJORA_TYPE_TOP = 180,
/* 200 */ MAJORA_TYPE_REMAINS = 200
} MajoraType;
typedef enum MajoraRemainsType {
/* 0 */ MAJORA_REMAINS_TYPE_ODOLWA,
/* 1 */ MAJORA_REMAINS_TYPE_GYORG,
/* 2 */ MAJORA_REMAINS_TYPE_GOHT,
/* 3 */ MAJORA_REMAINS_TYPE_TWINMOLD,
/* 4 */ MAJORA_REMAINS_TYPE_MAX
} MajoraRemainsType;
typedef struct MajoraTentacle {
/* 0x00 */ Vec3f base;
/* 0x0C */ Vec3f pos[MAJORA_TENTACLE_LENGTH];
/* 0x84 */ Vec3f rot[MAJORA_TENTACLE_LENGTH];
/* 0xFC */ Vec3f velocity[MAJORA_TENTACLE_LENGTH];
} MajoraTentacle; // size = 0x174
typedef struct MajoraWhip {
/* 0x000 */ Vec3s baseRot;
/* 0x008 */ f32 gravity;
/* 0x00C */ f32 mobility;
/* 0x010 */ f32 deceleration;
/* 0x014 */ f32 tension;
/* 0x018 */ Vec3f basePos;
/* 0x024 */ Vec3f pos[MAJORA_WHIP_LENGTH_MAX];
/* 0x27C */ Vec3f rot[MAJORA_WHIP_LENGTH_MAX];
/* 0x4D4 */ Vec3f velocity[MAJORA_WHIP_LENGTH_MAX];
/* 0x72C */ f32 unk_72C[MAJORA_WHIP_LENGTH_MAX];
} MajoraWhip; // size = 0x7F4
typedef enum MajorasWrathBodyPart {
/* 0 */ MAJORAS_WRATH_BODYPART_HEAD,
/* 1 */ MAJORAS_WRATH_BODYPART_TORSO,
/* 2 */ MAJORAS_WRATH_BODYPART_PELVIS,
/* 3 */ MAJORAS_WRATH_BODYPART_LEFT_UPPER_ARM,
// This body part is redundant; it's located at the exact same position as `MAJORAS_WRATH_BODYPART_LEFT_FOREARM`.
/* 4 */ MAJORAS_WRATH_BODYPART_LEFT_LOWER_ARM_ROOT,
/* 5 */ MAJORAS_WRATH_BODYPART_LEFT_FOREARM,
/* 6 */ MAJORAS_WRATH_BODYPART_RIGHT_UPPER_ARM,
// This body part is redundant; it's located at the exact same position as `MAJORAS_WRATH_BODYPART_RIGHT_FOREARM`.
/* 7 */ MAJORAS_WRATH_BODYPART_RIGHT_LOWER_ARM_ROOT,
/* 8 */ MAJORAS_WRATH_BODYPART_RIGHT_FOREARM,
/* 9 */ MAJORAS_WRATH_BODYPART_RIGHT_THIGH,
/* 10 */ MAJORAS_WRATH_BODYPART_RIGHT_SHIN,
/* 11 */ MAJORAS_WRATH_BODYPART_RIGHT_FOOT,
/* 12 */ MAJORAS_WRATH_BODYPART_LEFT_THIGH,
/* 13 */ MAJORAS_WRATH_BODYPART_LEFT_SHIN,
/* 14 */ MAJORAS_WRATH_BODYPART_LEFT_FOOT,
/* 15 */ MAJORAS_WRATH_BODYPART_MAX
} MajorasWrathBodyPart;
typedef enum MajorasIncarnationBodyPart {
/* 0 */ MAJORAS_INCARNATION_BODYPART_EYESTALK,
// This body part is redundant; it's located at the exact same position as `MAJORAS_INCARNATION_BODYPART_LEFT_UPPER_ARM`.
// Additionally, the developers used this index for both the mask limb and the left arm root limb; since the left arm
// root limb has a larger `limbIndex` than the mask limb, that's the limb this body part ends up attached to.
/* 1 */ MAJORAS_INCARNATION_BODYPART_LEFT_ARM_ROOT,
// This body part is redundant; it's located at the exact same position as `MAJORAS_INCARNATION_BODYPART_RIGHT_THIGH`.
/* 2 */ MAJORAS_INCARNATION_BODYPART_RIGHT_LEG_ROOT,
/* 3 */ MAJORAS_INCARNATION_BODYPART_LEFT_UPPER_ARM,
/* 4 */ MAJORAS_INCARNATION_BODYPART_LEFT_FOREARM,
/* 5 */ MAJORAS_INCARNATION_BODYPART_LEFT_HAND,
/* 6 */ MAJORAS_INCARNATION_BODYPART_RIGHT_UPPER_ARM,
/* 7 */ MAJORAS_INCARNATION_BODYPART_RIGHT_FOREARM,
/* 8 */ MAJORAS_INCARNATION_BODYPART_RIGHT_HAND,
/* 9 */ MAJORAS_INCARNATION_BODYPART_RIGHT_THIGH,
/* 10 */ MAJORAS_INCARNATION_BODYPART_RIGHT_SHIN,
/* 11 */ MAJORAS_INCARNATION_BODYPART_RIGHT_FOOT,
/* 12 */ MAJORAS_INCARNATION_BODYPART_LEFT_THIGH,
/* 13 */ MAJORAS_INCARNATION_BODYPART_LEFT_SHIN,
/* 14 */ MAJORAS_INCARNATION_BODYPART_LEFT_FOOT,
/* 15 */ MAJORAS_INCARNATION_BODYPART_MAX
} MajorasIncarnationBodyPart;
#define MAJORA_BODYPART_MAX MAX((s32)MAJORAS_WRATH_BODYPART_MAX, (s32)MAJORAS_INCARNATION_BODYPART_MAX)
typedef enum MajorasWrathColliderBodyPart {
/* 0 */ MAJORAS_WRATH_COLLIDER_BODYPART_HEAD,
/* 1 */ MAJORAS_WRATH_COLLIDER_BODYPART_TORSO,
/* 2 */ MAJORAS_WRATH_COLLIDER_BODYPART_PELVIS,
/* 3 */ MAJORAS_WRATH_COLLIDER_BODYPART_LEFT_UPPER_ARM,
/* 4 */ MAJORAS_WRATH_COLLIDER_BODYPART_LEFT_FOREARM,
/* 5 */ MAJORAS_WRATH_COLLIDER_BODYPART_RIGHT_UPPER_ARM,
/* 6 */ MAJORAS_WRATH_COLLIDER_BODYPART_RIGHT_FOREARM,
/* 7 */ MAJORAS_WRATH_COLLIDER_BODYPART_LEFT_THIGH,
/* 8 */ MAJORAS_WRATH_COLLIDER_BODYPART_LEFT_SHIN,
/* 9 */ MAJORAS_WRATH_COLLIDER_BODYPART_RIGHT_THIGH,
/* 10 */ MAJORAS_WRATH_COLLIDER_BODYPART_RIGHT_SHIN,
/* 11 */ MAJORAS_WRATH_COLLIDER_BODYPART_MAX
} MajorasWrathColliderBodyPart;
typedef enum MajorasIncarnationColliderBodyPart {
/* 0 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_EYESTALK,
// The developers used this index for both the mask limb and the left arm root limb; since the left arm
// root limb has a larger `limbIndex` than the mask limb, that's the limb this body part ends up initially
// attached to. However, the developers seemingly accounted for this by offsetting the collider such that
// it actually appears attached to the mask limb instead.
/* 1 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_MASK,
// This collider is positioned at the room origin because it isn't attached to any of Incarnation's limbs
// within `sLimbToColliderBodyParts`; since the memory for an actor's instance is zeroed out before it's
// used, and since this collider isn't attached to any limbs, its position will remain stuck at (0, 0, 0).
// It seems like the developers *tried* to work around this by giving this collider a massive offset within
// `sLimbColliderOffsets`, but it doesn't work because the offset is only applied if the collider actually
// corresponds to a limb.
/* 2 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_ROOM_ORIGIN,
/* 3 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_LEFT_UPPER_ARM,
/* 4 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_LEFT_FOREARM,
/* 5 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_RIGHT_UPPER_ARM,
/* 6 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_RIGHT_FOREARM,
/* 7 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_LEFT_THIGH,
/* 8 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_LEFT_SHIN,
/* 9 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_RIGHT_THIGH,
/* 10 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_RIGHT_SHIN,
/* 11 */ MAJORAS_INCARNATION_COLLIDER_BODYPART_MAX
} MajorasIncarnationColliderBodyPart;
#define MAJORA_COLLIDER_BODYPART_MAX MAX((s32)MAJORAS_WRATH_COLLIDER_BODYPART_MAX, (s32)MAJORAS_INCARNATION_COLLIDER_BODYPART_MAX)
typedef enum MajorasIncarnationGrowBodyPart {
/* 0 */ MAJORAS_INCARNATION_GROW_BODYPART_RIGHT_ARM,
/* 1 */ MAJORAS_INCARNATION_GROW_BODYPART_LEFT_ARM,
/* 2 */ MAJORAS_INCARNATION_GROW_BODYPART_RIGHT_LEG,
/* 3 */ MAJORAS_INCARNATION_GROW_BODYPART_LEFT_LEG,
/* 4 */ MAJORAS_INCARNATION_GROW_BODYPART_MAX
} MajorasIncarnationGrowBodyPart;
typedef enum MajorasIncarnationFoot {
/* 0 */ MAJORAS_INCARNATION_FOOT_RIGHT,
/* 1 */ MAJORAS_INCARNATION_FOOT_LEFT,
/* 2 */ MAJORAS_INCARNATION_FOOT_MAX
} MajorasIncarnationFoot;
typedef enum MajorasWrathKickCollider {
/* 0 */ MAJORAS_WARTH_KICK_COLLIDER_RIGHT_FOOT,
/* 1 */ MAJORAS_WARTH_KICK_COLLIDER_MAX
} MajorasWrathKickCollider;
typedef struct Boss07 {
/* 0x0000 */ Actor actor;
/* 0x0144 */ Boss07ActionFunc actionFunc;
/* 0x0148 */ char unk_148[0xAAD8];
/* 0x0148 */ u8 shouldStartDeath;
/* 0x0149 */ u8 shouldUpdateTentaclesOrWhips;
/* 0x014A */ u8 lightSettingsMode;
/* 0x014B */ u8 lightSettingsIndex;
/* 0x014C */ s16 frameCounter;
/* 0x014E */ u8 subAction;
/* 0x014F */ u8 whipCrackTimer;
/* 0x0150 */ s16 timers[3];
/* 0x0156 */ s16 landSfxTimer;
/* 0x0158 */ s16 disableCollisionTimer;
/* 0x015A */ s16 whipCollisionTimer;
/* 0x015C */ s16 damagedTimer; // TODO: Revisit this name when the equivalent Player variables are named
/* 0x015E */ s16 damagedFlashTimer;
/* 0x0160 */ s16 motionBlurAlpha;
/* 0x0164 */ Vec3f targetPos;
/* 0x0170 */ f32 speedToTarget;
/* 0x0174 */ u8 canEvade;
/* 0x0178 */ f32 topSpinAngle;
/* 0x017C */ f32 topSpinAngularVelocity;
/* 0x0180 */ s16 topPrecessionVelocity; // also used as a target rotation for Incarnation's various dance moves
/* 0x0184 */ f32 wrathLeanRotY;
/* 0x0188 */ f32 wrathLeanRotX;
/* 0x018C */ f32 flySpeedTarget;
/* 0x0190 */ SkelAnime skelAnime;
/* 0x01D4 */ f32 animEndFrame;
/* 0x01D8 */ s32 maxDecayPixels;
/* 0x01DC */ Vec3s jointTable[MAJORA_LIMB_COUNT];
/* 0x0284 */ Vec3s morphTable[MAJORA_LIMB_COUNT];
/* 0x032C */ f32 shockOrbScale;
/* 0x0330 */ f32 shockSparkScale;
/* 0x0334 */ Vec3f bodyPartsPos[MAJORA_BODYPART_MAX];
/* 0x03E8 */ ColliderJntSph bodyCollider;
/* 0x0408 */ ColliderJntSphElement bodyColliderElements[MAJORA_COLLIDER_BODYPART_MAX];
/* 0x06C8 */ ColliderJntSph kickCollider;
/* 0x06E8 */ ColliderJntSphElement kickColliderElements[MAJORAS_WARTH_KICK_COLLIDER_MAX];
/* 0x0728 */ ColliderCylinder unusedCollider;
/* 0x0774 */ u8 startRemainsCs;
/* 0x0778 */ s32 whipTopIndex; // unlike other index variables, this is an index from the *end* of the whip, not from the beginning of it.
/* 0x077C */ f32 whipLengthScale;
/* 0x0780 */ s32 whipShockMaxIndex;
/* 0x0784 */ s32 whipShockMinIndex;
/* 0x0788 */ MajoraWhip rightWhip;
/* 0x0F7C */ s16 whipWrapStartIndex;
/* 0x0F7E */ s16 whipWrapEndOffset;
/* 0x0F80 */ Vec3f whipGrabPos;
/* 0x0F8C */ f32 whipWrapRotY;
/* 0x0F90 */ f32 whipWrapRotX;
/* 0x0F94 */ MajoraWhip leftWhip;
/* 0x1788 */ Vec3f incarnationFeetPos[MAJORAS_INCARNATION_FOOT_MAX];
/* 0x17A0 */ Vec3f incarnationLeftHandPos;
/* 0x17AC */ Vec3f incarnationRightHandPos;
/* 0x17B8 */ f32 incarnationIntroBodyPartsScale[MAJORAS_INCARNATION_GROW_BODYPART_MAX];
/* 0x17C8 */ f32 incarnationIntroBodyPartsScaleTarget[MAJORAS_INCARNATION_GROW_BODYPART_MAX];
/* 0x17D8 */ Vec3s cutsceneHeadRot;
/* 0x17E0 */ f32 incarnationArmScale; // also has some unused functionality to scale most of Wrath's limbs, see `Boss07_Wrath_TransformLimbDraw`
/* 0x17E4 */ f32 incarnationLegScale;
/* 0x17E8 */ f32 incarnationWrathTransitionScale;
/* 0x17E8 */ f32 incarnationWrathTransitionAmplitude;
/* 0x17F0 */ f32 incarnationMaskScaleY;
/* 0x17F4 */ f32 incarnationMaskScaleX;
/* 0x17F8 */ f32 drawDmgEffScale;
/* 0x17FC */ f32 drawDmgEffFrozenSteamScale;
/* 0x1800 */ f32 drawDmgEffAlpha;
/* 0x1804 */ u8 drawDmgEffType;
/* 0x1805 */ u8 drawDmgEffState; // see `MajoraDrawDmgEffState`
/* 0x1806 */ s16 drawDmgEffTimer;
/* 0x1808 */ u8 lensFlareOn;
/* 0x180c */ f32 lensFlareScale;
/* 0x1810 */ Vec3f lensFlarePos;
/* 0x181C */ s16 projectileColorIndex;
/* 0x1820 */ ColliderCylinder generalCollider;
/* 0x186C */ s16 maskShakeTimer;
/* 0x1870 */ f32 tentacleLengthScale;
/* 0x1874 */ u8 tentacleState; // see `MajorasMaskTentacleState`
/* 0x1878 */ Vec3f tentacleBasePos;
/* 0x1884 */ s32 maskEyeTexIndex; // see `MajorasMaskEyeTexture`
/* 0x1888 */ u8 bgCheckTimer;
/* 0x188C */ f32 eyeBeamsLengthScale; // also used as a scale for the light orbs that surround the Remains during the intro cutscene
/* 0x1890 */ f32 eyeBeamsFocusOrbScale;
/* 0x1894 */ f32 beamLengthScale;
/* 0x1898 */ f32 beamBaseScale;
/* 0x189C */ Vec3f beamStartPos;
/* 0x18A8 */ Vec3f beamEndPos;
/* 0x18B4 */ Vec3f reflectedBeamEndPos;
/* 0x18C0 */ f32 reflectedBeamLengthScale;
/* 0x18C4 */ s16 reflectedBeamPitch;
/* 0x18C6 */ s16 reflectedBeamYaw;
/* 0x18C8 */ s16 introRemainsOrbRot;
/* 0x18CC */ f32 knockbackMovementX;
/* 0x18D0 */ f32 knockbackMovementZ;
/* 0x18D4 */ s16 angularVelocity;
/* 0x18D6 */ s16 fireTimer; // also used as a timer for spawning afterimages in `Boss07_Incarnation_Update`
/* 0x18D8 */ s16 beamDamageTimer;
/* 0x18DA */ u8 burnOnLanding;
/* 0x18DB */ u8 tryFireProjectile;
/* 0x18DC */ s32 effectIndex;
/* 0x18E0 */ Vec3f prevBeamTireMarkPos;
/* 0x18EC */ u8 beamTireMarkEnabled;
/* 0x18ED */ u8 prevBeamTireMarkEnabled;
/* 0x18F0 */ ColliderQuad maskFrontCollider;
/* 0x1970 */ ColliderQuad maskBackCollider;
/* 0x19F0 */ MajoraTentacle tentacles[MAJORA_TENTACLE_COUNT_MAX];
/* 0xAB40 */ s16 miscTimer; // used for making the remains bob up and down in the intro and for Incarnation running SFX
/* 0xAB44 */ f32 introPlayerOrbScale;
/* 0xAB48 */ u8 disableShadow;
/* 0xAB4C */ f32 deathOrbScale;
/* 0xAB50 */ f32 deathLightScale[MAJORA_DEATH_LIGHT_COUNT];
/* 0xABC8 */ u32 cutsceneTimer; // also used as an animation loop count in `Boss07_Incarnation_Hopak`
/* 0xABCC */ s32 sfxTimer; // also used as an index in `Boss07_Mask_IntroCutscene`
/* 0xABD0 */ s16 cutsceneState; // also used to control whether Majora's Mask should target the player or avoid them in `Boss07_Mask_SpinAttack`
/* 0xABD2 */ s16 subCamId;
/* 0xABD4 */ Vec3f subCamEye;
/* 0xABE0 */ Vec3f subCamAt;
/* 0xABEC */ Vec3f subCamEyeNext;
/* 0xABF8 */ Vec3f subCamAtNext;
/* 0xAC04 */ f32 subCamRotY;
/* 0xAC08 */ f32 subCamAngularVelocity;
/* 0xAC0C */ f32 subCamVelocity;
/* 0xAC10 */ UNK_TYPE1 unkAC10[4];
/* 0xAC14 */ f32 subCamEyeModY;
/* 0xAC18 */ UNK_TYPE1 unkAC18[8];
} Boss07; // size = 0xAC20
#endif // Z_BOSS_07_H

View File

@ -3603,7 +3603,7 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) {
baseY = (u16)((s32)startVec.y * 64);
if (sShadowSizes[i] == GOHT_SHADOW_SIZE_EXTRA_LARGE) {
for (y = 0, addY = -0x180; y < ARRAY_COUNT(sShadowExtraLargeMap); y++, addY += 0x40) {
for (y = 0, addY = -384; y < ARRAY_COUNT(sShadowExtraLargeMap); y++, addY += 64) {
for (x = -sShadowExtraLargeMap[y]; x < sShadowExtraLargeMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) {
@ -3612,7 +3612,7 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) {
}
}
} else if (sShadowSizes[i] == GOHT_SHADOW_SIZE_LARGE) {
for (y = 0, addY = -0x100; y < ARRAY_COUNT(sShadowLargeMap); y++, addY += 0x40) {
for (y = 0, addY = -256; y < ARRAY_COUNT(sShadowLargeMap); y++, addY += 64) {
for (x = -sShadowLargeMap[y]; x < sShadowLargeMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) {
@ -3621,7 +3621,7 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) {
}
}
} else if (sShadowSizes[i] == GOHT_SHADOW_SIZE_MEDIUM) {
for (y = 0, addY = -0xC0; y < ARRAY_COUNT(sShadowMediumMap); y++, addY += 0x40) {
for (y = 0, addY = -192; y < ARRAY_COUNT(sShadowMediumMap); y++, addY += 64) {
for (x = -sShadowMediumMap[y]; x < sShadowMediumMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) {
@ -3630,7 +3630,7 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) {
}
}
} else {
for (y = 0, addY = -0x80; y < ARRAY_COUNT(sShadowSmallMap); y++, addY += 0x40) {
for (y = 0, addY = -128; y < ARRAY_COUNT(sShadowSmallMap); y++, addY += 64) {
for (x = -sShadowSmallMap[y]; x < sShadowSmallMap[y]; x++) {
index = baseX + x + baseY + addY;
if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) {

View File

@ -146,10 +146,10 @@ void func_809469C0(Player* player, u8* shadowTexture, f32 arg2) {
temp_t1 = sp7C.y * 64.0f;
if (D_80947AEC[i] == 2) {
for (j = 0, phi_a3 = -0x180; j < 12; j++, phi_a3 += 0x40) {
for (j = 0, phi_a3 = -384; j < 12; j++, phi_a3 += 64) {
for (phi_a0 = -D_80947A98[j]; phi_a0 < D_80947A98[j]; phi_a0++) {
temp_v1 = temp_t0 + phi_a0;
if ((temp_v1 >= 0) && (temp_v1 < 0x40)) {
if ((temp_v1 >= 0) && (temp_v1 < 64)) {
temp_v0 = temp_t1 + phi_a3;
if ((temp_v0 >= 0) && (temp_v0 < 0x1000)) {
shadowTexture[temp_v1 + temp_v0] = 255;
@ -158,10 +158,10 @@ void func_809469C0(Player* player, u8* shadowTexture, f32 arg2) {
}
}
} else if (D_80947AEC[i] == 1) {
for (j = 0, phi_a3 = -0x100; j < 8; j++, phi_a3 += 0x40) {
for (j = 0, phi_a3 = -256; j < 8; j++, phi_a3 += 64) {
for (phi_a0 = -D_80947A88[j]; phi_a0 < D_80947A88[j]; phi_a0++) {
temp_v1 = temp_t0 + phi_a0;
if ((temp_v1 >= 0) && (temp_v1 < 0x40)) {
if ((temp_v1 >= 0) && (temp_v1 < 64)) {
temp_v0 = temp_t1 + phi_a3;
if ((temp_v0 >= 0) && (temp_v0 < 0x1000)) {
shadowTexture[temp_v1 + temp_v0] = 255;
@ -170,10 +170,10 @@ void func_809469C0(Player* player, u8* shadowTexture, f32 arg2) {
}
}
} else if (D_80947AEC[i] == 0) {
for (j = 0, phi_a3 = -0xC0; j < 7; j++, phi_a3 += 0x40) {
for (j = 0, phi_a3 = -192; j < 7; j++, phi_a3 += 64) {
for (phi_a0 = -D_80947A78[j]; phi_a0 < D_80947A78[j] - 1; phi_a0++) {
temp_v1 = temp_t0 + phi_a0;
if ((temp_v1 >= 0) && (temp_v1 < 0x40)) {
if ((temp_v1 >= 0) && (temp_v1 < 64)) {
temp_v0 = temp_t1 + phi_a3;
if ((temp_v0 >= 0) && (temp_v0 < 0x1000)) {
shadowTexture[temp_v1 + temp_v0] = 255;
@ -182,10 +182,10 @@ void func_809469C0(Player* player, u8* shadowTexture, f32 arg2) {
}
}
} else if (D_80947AEC[i] == 4) {
for (j = 0, phi_a3 = -0x1C0; j < 14; j++, phi_a3 += 0x40) {
for (j = 0, phi_a3 = -448; j < 14; j++, phi_a3 += 64) {
for (phi_a0 = -D_80947AB0[j]; phi_a0 < D_80947AB0[j]; phi_a0++) {
temp_v1 = temp_t0 + phi_a0;
if ((temp_v1 >= 0) && (temp_v1 < 0x40)) {
if ((temp_v1 >= 0) && (temp_v1 < 64)) {
temp_v0 = temp_t1 + phi_a3;
if ((temp_v0 >= 0) && (temp_v0 < 0x1000)) {
shadowTexture[temp_v1 + temp_v0] = 255;
@ -194,10 +194,10 @@ void func_809469C0(Player* player, u8* shadowTexture, f32 arg2) {
}
}
} else {
for (j = 0, phi_a3 = -0x80; j < 6; j++, phi_a3 += 0x40) {
for (j = 0, phi_a3 = -128; j < 6; j++, phi_a3 += 64) {
for (phi_a0 = -D_80947A6C[j]; phi_a0 < D_80947A6C[j] - 1; phi_a0++) {
temp_v1 = temp_t0 + phi_a0;
if ((temp_v1 >= 0) && (temp_v1 < 0x40)) {
if ((temp_v1 >= 0) && (temp_v1 < 64)) {
temp_v0 = temp_t1 + phi_a3;
if ((temp_v0 >= 0) && (temp_v0 < 0x1000)) {
shadowTexture[temp_v1 + temp_v0] = 255;

View File

@ -473,10 +473,9 @@ void func_809289E4(ObjTsubo* this, PlayState* play) {
//! player->currentMask, but in this case is garbage in the collider
Player_PlaySfx((Player*)&this->actor, NA_SE_PL_PULL_UP_POT);
func_80928D6C(this);
} else if ((this->unk_19B != 0) ||
(acHit && (this->cylinderCollider.elem.acHitElem->atDmgInfo.dmgFlags & 0x058BFFBC))) {
} else if (this->unk_19B || (acHit && (this->cylinderCollider.elem.acHitElem->atDmgInfo.dmgFlags & 0x058BFFBC))) {
typeData = &sPotTypeData[type];
this->unk_19B = 0;
this->unk_19B = false;
if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 15.0f)) {
typeData->breakPot3(this, play);
} else {

View File

@ -2707,7 +2707,7 @@
0x8013E5CC:("SubS_LineSegVsPlane",),
0x8013E640:("SubS_FindActorCustom",),
0x8013E748:("SubS_OfferTalkExchangeCustom",),
0x8013E7C0:("SubS_ActorAndPlayerFaceEachOther",),
0x8013E7C0:("SubS_ArePlayerAndActorFacing",),
0x8013E8F8:("SubS_OfferTalkExchangeFacing",),
0x8013E950:("SubS_TrackPointStep",),
0x8013EC10:("Rumble_Update",),
@ -9267,7 +9267,7 @@
0x809D441C:("Boss01_SetupStunned",),
0x809D4464:("Boss01_Stunned",),
0x809D44C0:("Boss01_Thaw",),
0x809D4668:("Boss01_ArePlayerAndOdolwaFacing",),
0x809D4668:("Boss01_ArePlayerAndActorFacing",),
0x809D46E4:("Boss01_Update",),
0x809D519C:("Boss01_DrawSwordTrail",),
0x809D5584:("Boss01_OverrideLimbDraw",),
@ -9435,142 +9435,142 @@
0x809F2EE8:("Boss06_CurtainDestroyed",),
0x809F2F0C:("Boss06_Update",),
0x809F334C:("Boss06_Draw",),
0x809F4980:("func_809F4980",),
0x809F49A0:("func_809F49A0",),
0x809F49C0:("func_809F49C0",),
0x809F4AE8:("func_809F4AE8",),
0x809F4BB0:("func_809F4BB0",),
0x809F4C40:("func_809F4C40",),
0x809F4CBC:("func_809F4CBC",),
0x809F4D10:("func_809F4D10",),
0x809F4D54:("func_809F4D54",),
0x809F4FAC:("func_809F4FAC",),
0x809F4FF8:("func_809F4FF8",),
0x809F51E8:("func_809F51E8",),
0x809F52CC:("func_809F52CC",),
0x809F536C:("func_809F536C",),
0x809F5494:("func_809F5494",),
0x809F4980:("Boss07_Remains_PlayDamageSfx",),
0x809F49A0:("Boss07_InitRand",),
0x809F49C0:("Boss07_RandZeroOne",),
0x809F4AE8:("Boss07_SpawnFlameEffect",),
0x809F4BB0:("Boss07_SetColliderSphere",),
0x809F4C40:("Boss07_ArePlayerAndActorFacing",),
0x809F4CBC:("Boss07_SmoothStop",),
0x809F4D10:("Boss07_RandXZ",),
0x809F4D54:("Boss07_Incarnation_SpawnDust",),
0x809F4FAC:("Boss07_MovePlayer",),
0x809F4FF8:("Boss07_Wrath_SpawnDustAtPos",),
0x809F51E8:("Boss07_Wrath_ChooseJump",),
0x809F52CC:("Boss07_Wrath_JumpAwayFromExplosive",),
0x809F536C:("Boss07_Wrath_BombWhip",),
0x809F5494:("Boss07_Wrath_CheckBombWhips",),
0x809F552C:("Boss07_Init",),
0x809F5DA0:("Boss07_Destroy",),
0x809F5E14:("func_809F5E14",),
0x809F5E88:("func_809F5E88",),
0x809F64F4:("func_809F64F4",),
0x809F65F4:("func_809F65F4",),
0x809F7400:("func_809F7400",),
0x809F748C:("func_809F748C",),
0x809F7688:("func_809F7688",),
0x809F76D0:("func_809F76D0",),
0x809F77A8:("func_809F77A8",),
0x809F783C:("func_809F783C",),
0x809F7968:("func_809F7968",),
0x809F7AB4:("func_809F7AB4",),
0x809F7BC4:("func_809F7BC4",),
0x809F7D2C:("func_809F7D2C",),
0x809F805C:("func_809F805C",),
0x809F8658:("func_809F8658",),
0x809F86B8:("func_809F86B8",),
0x809F87C8:("func_809F87C8",),
0x809F8908:("func_809F8908",),
0x809F8AB0:("func_809F8AB0",),
0x809F8B1C:("func_809F8B1C",),
0x809F8D04:("func_809F8D04",),
0x809F8DEC:("func_809F8DEC",),
0x809F8E68:("func_809F8E68",),
0x809F8EC8:("func_809F8EC8",),
0x809F91D4:("func_809F91D4",),
0x809F9280:("func_809F9280",),
0x809F93DC:("func_809F93DC",),
0x809F94AC:("func_809F94AC",),
0x809F99C4:("func_809F99C4",),
0x809F9CEC:("func_809F9CEC",),
0x809F9E94:("func_809F9E94",),
0x809FA1B4:("Boss07_Update",),
0x809FAA44:("func_809FAA44",),
0x809FB114:("func_809FB114",),
0x809FB504:("func_809FB504",),
0x809FB55C:("func_809FB55C",),
0x809FB728:("func_809FB728",),
0x809FB7D4:("func_809FB7D4",),
0x809FBB9C:("func_809FBB9C",),
0x809FBF94:("func_809FBF94",),
0x809FC1C8:("Boss07_Draw",),
0x809FC4C0:("func_809FC4C0",),
0x809FC8B0:("func_809FC8B0",),
0x809FC960:("func_809FC960",),
0x809FCBC8:("func_809FCBC8",),
0x809FCC70:("func_809FCC70",),
0x809FCCCC:("func_809FCCCC",),
0x809FD5F8:("func_809FD5F8",),
0x809FD710:("func_809FD710",),
0x809FD818:("func_809FD818",),
0x809FD89C:("func_809FD89C",),
0x809FD984:("func_809FD984",),
0x809FDAB0:("func_809FDAB0",),
0x809FDB2C:("func_809FDB2C",),
0x809FDBA0:("func_809FDBA0",),
0x809FDEDC:("func_809FDEDC",),
0x809FDF54:("func_809FDF54",),
0x809FE068:("func_809FE068",),
0x809FE0E4:("func_809FE0E4",),
0x809FE2D4:("func_809FE2D4",),
0x809FE348:("func_809FE348",),
0x809FE4B0:("func_809FE4B0",),
0x809FE524:("func_809FE524",),
0x809FE6B0:("func_809FE6B0",),
0x809FE734:("func_809FE734",),
0x809FEE70:("func_809FEE70",),
0x809FF0E4:("func_809FF0E4",),
0x809FF12C:("func_809FF12C",),
0x809FF5CC:("func_809FF5CC",),
0x809FF678:("func_809FF678",),
0x809FF6B0:("func_809FF6B0",),
0x809FF810:("func_809FF810",),
0x809FF900:("func_809FF900",),
0x809FFA04:("func_809FFA04",),
0x809FFA80:("func_809FFA80",),
0x809FFE64:("func_809FFE64",),
0x809FFEAC:("func_809FFEAC",),
0x80A0021C:("func_80A0021C",),
0x80A00274:("func_80A00274",),
0x80A00484:("func_80A00484",),
0x80A00554:("func_80A00554",),
0x80A006D0:("func_80A006D0",),
0x80A006F4:("func_80A006F4",),
0x80A00720:("func_80A00720",),
0x80A016E4:("func_80A016E4",),
0x80A01750:("func_80A01750",),
0x80A025AC:("func_80A025AC",),
0x80A0264C:("func_80A0264C",),
0x80A02B30:("func_80A02B30",),
0x80A02C54:("func_80A02C54",),
0x80A03238:("func_80A03238",),
0x80A036C4:("func_80A036C4",),
0x80A03868:("func_80A03868",),
0x80A03F18:("func_80A03F18",),
0x80A03F5C:("func_80A03F5C",),
0x80A0434C:("func_80A0434C",),
0x80A045A8:("func_80A045A8",),
0x80A04768:("func_80A04768",),
0x80A04878:("func_80A04878",),
0x80A04890:("func_80A04890",),
0x80A04DE0:("func_80A04DE0",),
0x80A04E5C:("func_80A04E5C",),
0x80A055E0:("func_80A055E0",),
0x80A05608:("func_80A05608",),
0x80A05694:("func_80A05694",),
0x80A057A0:("func_80A057A0",),
0x80A05AF8:("func_80A05AF8",),
0x80A05B50:("func_80A05B50",),
0x80A05C88:("func_80A05C88",),
0x80A05DDC:("func_80A05DDC",),
0x80A06500:("func_80A06500",),
0x80A06990:("func_80A06990",),
0x80A06C64:("func_80A06C64",),
0x80A06E24:("func_80A06E24",),
0x80A06F48:("func_80A06F48",),
0x80A07604:("func_80A07604",),
0x80A07638:("func_80A07638",),
0x80A07740:("func_80A07740",),
0x809F5E14:("Boss07_Wrath_SetupIntroCutscene",),
0x809F5E88:("Boss07_Wrath_IntroCutscene",),
0x809F64F4:("Boss07_Wrath_SetupDeathCutscene",),
0x809F65F4:("Boss07_Wrath_DeathCutscene",),
0x809F7400:("Boss07_Wrath_SetupIdle",),
0x809F748C:("Boss07_Wrath_Idle",),
0x809F7688:("Boss07_Wrath_SetupJump",),
0x809F76D0:("Boss07_Wrath_StartJump",),
0x809F77A8:("Boss07_Wrath_Jump",),
0x809F783C:("Boss07_Wrath_SetupFlip",),
0x809F7968:("Boss07_Wrath_Flip",),
0x809F7AB4:("Boss07_Wrath_SetupSidestep",),
0x809F7BC4:("Boss07_Wrath_Sidestep",),
0x809F7D2C:("Boss07_Wrath_SetupAttack",),
0x809F805C:("Boss07_Wrath_Attack",),
0x809F8658:("Boss07_Wrath_SetupTryGrab",),
0x809F86B8:("Boss07_Wrath_TryGrab",),
0x809F87C8:("Boss07_Wrath_GrabPlayer",),
0x809F8908:("Boss07_Wrath_ThrowPlayer",),
0x809F8AB0:("Boss07_Wrath_SetupShock",),
0x809F8B1C:("Boss07_Wrath_ShockWhip",),
0x809F8D04:("Boss07_Wrath_ShockStunned",),
0x809F8DEC:("Boss07_Wrath_SetupStunned",),
0x809F8E68:("Boss07_Wrath_SetupThrowTop",),
0x809F8EC8:("Boss07_Wrath_ThrowTop",),
0x809F91D4:("Boss07_Wrath_Stunned",),
0x809F9280:("Boss07_Wrath_SetupDamaged",),
0x809F93DC:("Boss07_Wrath_Damaged",),
0x809F94AC:("Boss07_Wrath_CheckWhipCollisions",),
0x809F99C4:("Boss07_Wrath_UpdateDamage",),
0x809F9CEC:("Boss07_Wrath_Thaw",),
0x809F9E94:("Boss07_UpdateDamageEffects",),
0x809FA1B4:("Boss07_Wrath_Update",),
0x809FAA44:("Boss07_Wrath_UpdateWhips",),
0x809FB114:("Boss07_Wrath_DrawWhip",),
0x809FB504:("Boss07_Wrath_OverrideLimbDraw",),
0x809FB55C:("Boss07_Wrath_PostLimbDraw",),
0x809FB728:("Boss07_Wrath_TransformLimbDraw",),
0x809FB7D4:("Boss07_Wrath_DrawShocks",),
0x809FBB9C:("Boss07_Wrath_DrawDeathLights",),
0x809FBF94:("Boss07_BattleHandler_DrawIntroPlayerLightOrb",),
0x809FC1C8:("Boss07_Wrath_Draw",),
0x809FC4C0:("Boss07_Wrath_FillShadowTex",),
0x809FC8B0:("Boss07_Wrath_GenShadowTex",),
0x809FC960:("Boss07_Wrath_DrawShadowTex",),
0x809FCBC8:("Boss07_Incarnation_AvoidPlayer",),
0x809FCC70:("Boss07_Incarnation_SetupIntroCutscene",),
0x809FCCCC:("Boss07_Incarnation_IntroCutscene",),
0x809FD5F8:("Boss07_Incarnation_SetupTaunt",),
0x809FD710:("Boss07_Incarnation_Taunt",),
0x809FD818:("Boss07_Incarnation_SetupStunned",),
0x809FD89C:("Boss07_Incarnation_Stunned",),
0x809FD984:("Boss07_Incarnation_SetupDamaged",),
0x809FDAB0:("Boss07_Incarnation_Damaged",),
0x809FDB2C:("Boss07_Incarnation_SetupRun",),
0x809FDBA0:("Boss07_Incarnation_Run",),
0x809FDEDC:("Boss07_Incarnation_SetupAttack",),
0x809FDF54:("Boss07_Incarnation_Attack",),
0x809FE068:("Boss07_Incarnation_SetupSquattingDance",),
0x809FE0E4:("Boss07_Incarnation_SquattingDance",),
0x809FE2D4:("Boss07_Incarnation_SetupMoonwalk",),
0x809FE348:("Boss07_Incarnation_Moonwalk",),
0x809FE4B0:("Boss07_Incarnation_SetupPirouette",),
0x809FE524:("Boss07_Incarnation_Pirouette",),
0x809FE6B0:("Boss07_Incarnation_SetupDeathCutscene",),
0x809FE734:("Boss07_Incarnation_DeathCutscene",),
0x809FEE70:("Boss07_Incarnation_UpdateDamage",),
0x809FF0E4:("Boss07_IncarnationAfterimage_Update",),
0x809FF12C:("Boss07_Incarnation_Update",),
0x809FF5CC:("Boss07_IncarnationAfterimage_Draw",),
0x809FF678:("Boss07_Incarnation_OverrideLimbDraw",),
0x809FF6B0:("Boss07_Incarnation_PostLimbDraw",),
0x809FF810:("Boss07_Incarnation_TransformLimbDraw",),
0x809FF900:("Boss07_Incarnation_Draw",),
0x809FFA04:("Boss07_Mask_SetupIdle",),
0x809FFA80:("Boss07_Mask_Idle",),
0x809FFE64:("Boss07_Mask_SetupSpinAttack",),
0x809FFEAC:("Boss07_Mask_SpinAttack",),
0x80A0021C:("Boss07_Mask_SetupStunned",),
0x80A00274:("Boss07_Mask_Stunned",),
0x80A00484:("Boss07_Mask_SetupDamaged",),
0x80A00554:("Boss07_Mask_Damaged",),
0x80A006D0:("Boss07_Mask_StopBeam",),
0x80A006F4:("Boss07_Mask_SetupFireBeam",),
0x80A00720:("Boss07_Mask_FireBeam",),
0x80A016E4:("Boss07_Mask_SetupIntroCutscene",),
0x80A01750:("Boss07_Mask_IntroCutscene",),
0x80A025AC:("Boss07_Mask_SetupDeathCutscene",),
0x80A0264C:("Boss07_Mask_DeathCutscene",),
0x80A02B30:("Boss07_Mask_UpdateDamage",),
0x80A02C54:("Boss07_Mask_Update",),
0x80A03238:("Boss07_Mask_UpdateTentacles",),
0x80A036C4:("Boss07_Mask_DrawTentacles",),
0x80A03868:("Boss07_Mask_DrawBeam",),
0x80A03F18:("Boss07_Mask_PostLimbDraw",),
0x80A03F5C:("Boss07_Mask_Draw",),
0x80A0434C:("Boss07_Projectile_Update",),
0x80A045A8:("Boss07_Projectile_Draw",),
0x80A04768:("Boss07_Remains_UpdateDamage",),
0x80A04878:("Boss07_Remains_SetupIntroCutscene",),
0x80A04890:("Boss07_Remains_IntroCutscene",),
0x80A04DE0:("Boss07_Remains_SetupMove",),
0x80A04E5C:("Boss07_Remains_Move",),
0x80A055E0:("Boss07_Remains_SetupStunned",),
0x80A05608:("Boss07_Remains_Stunned",),
0x80A05694:("Boss07_Remains_Update",),
0x80A057A0:("Boss07_Remains_Draw",),
0x80A05AF8:("Boss07_Top_SetupThrown",),
0x80A05B50:("Boss07_Top_Thrown",),
0x80A05C88:("Boss07_Top_SetupMove",),
0x80A05DDC:("Boss07_Top_Move",),
0x80A06500:("Boss07_Top_CheckTopCollision",),
0x80A06990:("Boss07_Top_UpdateDamage",),
0x80A06C64:("Boss07_Top_Update",),
0x80A06E24:("Boss07_Top_Draw",),
0x80A06F48:("Boss07_BattleHandler_Update",),
0x80A07604:("Boss07_BattleHandler_Draw",),
0x80A07638:("Boss07_BattleHandler_UpdateEffects",),
0x80A07740:("Boss07_BattleHandler_DrawEffects",),
0x80A0A8A0:("BgDyYoseizo_Init",),
0x80A0A95C:("BgDyYoseizo_Destroy",),
0x80A0A96C:("BgDyYoseizo_UpdateEyes",),

View File

@ -10180,78 +10180,66 @@
0x809F4974:("sBoss06Seed1","UNK_TYPE4","",0x4),
0x809F4978:("sBoss06Seed2","UNK_TYPE4","",0x4),
0x809F497C:("sBoss06Seed3","UNK_TYPE4","",0x4),
0x80A07950:("D_80A07950","UNK_TYPE2","",0x2),
0x80A07952:("D_80A07952","UNK_TYPE2","",0x2),
0x80A07954:("D_80A07954","UNK_TYPE2","",0x2),
0x80A07968:("D_80A07968","UNK_TYPE1","",0x1),
0x80A07980:("D_80A07980","UNK_TYPE1","",0x1),
0x80A079A0:("D_80A079A0","UNK_TYPE1","",0x1),
0x80A079C0:("D_80A079C0","UNK_TYPE1","",0x1),
0x80A079E0:("D_80A079E0","UNK_TYPE1","",0x1),
0x80A07A00:("D_80A07A00","UNK_TYPE1","",0x1),
0x80A07A20:("Boss_07_Profile","UNK_TYPE1","",0x1),
0x80A07A40:("D_80A07A40","UNK_TYPE1","",0x1),
0x80A07A8C:("D_80A07A8C","UNK_TYPE2","",0x2),
0x80A07A90:("D_80A07A90","UNK_TYPE2","",0x2),
0x80A07BCC:("D_80A07BCC","UNK_TYPE1","",0x1),
0x80A07BDC:("D_80A07BDC","UNK_TYPE1","",0x1),
0x80A07C08:("D_80A07C08","UNK_TYPE1","",0x1),
0x80A07C2C:("D_80A07C2C","UNK_TYPE1","",0x1),
0x80A07C3C:("D_80A07C3C","UNK_TYPE1","",0x1),
0x80A07C8C:("D_80A07C8C","UNK_TYPE1","",0x1),
0x80A07CDC:("D_80A07CDC","UNK_TYPE1","",0x1),
0x80A07E68:("D_80A07E68","UNK_TYPE1","",0x1),
0x80A07E78:("D_80A07E78","UNK_TYPE1","",0x1),
0x80A07EA4:("D_80A07EA4","UNK_TYPE1","",0x1),
0x80A07ED0:("D_80A07ED0","UNK_TYPE1","",0x1),
0x80A07EFC:("D_80A07EFC","UNK_TYPE1","",0x1),
0x80A07F00:("D_80A07F00","UNK_TYPE1","",0x1),
0x80A07F04:("D_80A07F04","UNK_TYPE1","",0x1),
0x80A07F08:("D_80A07F08","UNK_TYPE1","",0x1),
0x80A07F0C:("D_80A07F0C","UNK_TYPE1","",0x1),
0x80A07F3C:("D_80A07F3C","UNK_TYPE1","",0x1),
0x80A07F54:("D_80A07F54","UNK_TYPE2","",0x2),
0x80A07F5C:("D_80A07F5C","EffectTireMarkInit","",0x8),
0x80A07F64:("D_80A07F64","EffectTireMarkInit","",0x8),
0x80A07F6C:("D_80A07F6C","UNK_TYPE4","",0x4),
0x80A07FA8:("D_80A07FA8","UNK_TYPE4","",0x4),
0x80A07FB4:("D_80A07FB4","UNK_TYPE4","",0x4),
0x80A07FC0:("D_80A07FC0","UNK_TYPE4","",0x4),
0x80A07FCC:("D_80A07FCC","UNK_TYPE1","",0x1),
0x80A07FD0:("D_80A07FD0","UNK_TYPE1","",0x1),
0x80A07FD4:("D_80A07FD4","UNK_TYPE1","",0x1),
0x80A07FE0:("D_80A07FE0","UNK_TYPE4","",0x4),
0x80A07FEC:("D_80A07FEC","UNK_TYPE1","",0x1),
0x80A07FF8:("D_80A07FF8","UNK_TYPE1","",0x1),
0x80A07FFC:("D_80A07FFC","UNK_TYPE1","",0x1),
0x80A07FFD:("D_80A07FFD","UNK_TYPE1","",0x1),
0x80A07FFE:("D_80A07FFE","UNK_TYPE1","",0x1),
0x80A07FFF:("D_80A07FFF","UNK_TYPE1","",0x1),
0x80A08002:("D_80A08002","UNK_TYPE1","",0x1),
0x80A08004:("D_80A08004","UNK_TYPE1","",0x1),
0x80A08006:("D_80A08006","UNK_TYPE1","",0x1),
0x80A0800C:("D_80A0800C","UNK_TYPE1","",0x1),
0x80A08090:("D_80A08090","UNK_TYPE1","",0x1),
0x80A080B0:("D_80A080B0","UNK_TYPE1","",0x1),
0x80A080BC:("D_80A080BC","UNK_TYPE4","",0x4),
0x80A080D4:("D_80A080D4","UNK_TYPE4","",0x4),
0x80A080F0:("D_80A080F0","UNK_TYPE4","",0x4),
0x80A08110:("D_80A08110","UNK_TYPE4","",0x4),
0x80A08140:("D_80A08140","UNK_TYPE4","",0x4),
0x80A0817C:("D_80A0817C","UNK_TYPE1","",0x1),
0x80A0818C:("D_80A0818C","UNK_TYPE1","",0x1),
0x80A08198:("D_80A08198","UNK_TYPE1","",0x1),
0x80A081A0:("D_80A081A0","UNK_TYPE1","",0x1),
0x80A081A8:("D_80A081A8","UNK_TYPE1","",0x1),
0x80A081C8:("D_80A081C8","UNK_TYPE1","",0x1),
0x80A081E8:("D_80A081E8","UNK_TYPE1","",0x1),
0x80A0826C:("D_80A0826C","UNK_TYPE1","",0x1),
0x80A0828C:("D_80A0828C","UNK_TYPE1","",0x1),
0x80A082A4:("D_80A082A4","UNK_TYPE1","",0x1),
0x80A082BC:("D_80A082BC","UNK_TYPE4","",0x4),
0x80A082C8:("D_80A082C8","UNK_TYPE4","",0x4),
0x80A082D4:("D_80A082D4","UNK_TYPE4","",0x4),
0x80A082E0:("D_80A082E0","UNK_TYPE1","",0x1),
0x80A07950:("sProjectileEnvColors","s16","[4][3]",0x18),
0x80A07968:("sProjectilePrimColors","s16","[4][3]",0x18),
0x80A07980:("sMajorasMaskDamageTable","DamageTable","",0x20),
0x80A079A0:("sMajorasIncarnationDamageTable","DamageTable","",0x20),
0x80A079C0:("sMajorasWrathDamageTable","DamageTable","",0x20),
0x80A079E0:("sRemainsDamageTable","DamageTable","",0x20),
0x80A07A00:("sTopDamageTable","DamageTable","",0x20),
0x80A07A20:("Boss_07_Profile","ActorProfile","",0x20),
0x80A07A40:("sWrathBodyColliderJntSphElementsInit","ColliderJntSphElementInit","[11]",0x18C),
0x80A07BCC:("sWrathBodyColliderJntSphInit","ColliderJntSphInit","",0x10),
0x80A07BDC:("sWrathCylinderInit","ColliderCylinderInit","",0x2C),
0x80A07C08:("sWrathKickColliderJntSphElementsInit","ColliderJntSphElementInit","[1]",0x24),
0x80A07C2C:("sWrathKickColliderJntSphInit","ColliderJntSphInit","",0x10),
0x80A07C3C:("sMaskFrontQuadInit","ColliderQuadInit","",0x50),
0x80A07C8C:("sMaskBackQuadInit","ColliderQuadInit","",0x50),
0x80A07CDC:("sIncarnationBodyJntSphElementsInit","ColliderJntSphElementInit","[11]",0x18C),
0x80A07E68:("sIncarnationBodyColliderJntSphInit","ColliderJntSphInit","",0x10),
0x80A07E78:("sProjectileCylinderInit","ColliderCylinderInit","",0x2C),
0x80A07EA4:("sRemainsCylinderInit","ColliderCylinderInit","",0x2C),
0x80A07ED0:("sTopCylinderInit","ColliderCylinderInit","",0x2C),
0x80A07EFC:("sDustPrimColor","Color_RGBA8","",0x4),
0x80A07F00:("sDustEnvColor","Color_RGBA8","",0x4),
0x80A07F04:("sDustPrimColor","Color_RGBA8","",0x4),
0x80A07F08:("sDustEnvColor","Color_RGBA8","",0x4),
0x80A07F0C:("sRemainsStartTargetOffset","Vec3f","[4]",0x30),
0x80A07F3C:("sRemainsEndTarget","Vec3s","[4]",0x18),
0x80A07F54:("sMajoraRemainsParams","s16","[4]",0x8),
0x80A07F5C:("sTopTireMarkInit","EffectTireMarkInit","",0x8),
0x80A07F64:("sMaskTireMarkInit","EffectTireMarkInit","",0x8),
0x80A07F6C:("sCamPoints","MajorasWrathIntroCutsceneCamPoints","[5]",0x3C),
0x80A07FA8:("subCamAtOffset","Vec3f","",0xC),
0x80A07FB4:("hahenVelocity","Vec3f","",0xC),
0x80A07FC0:("hahenAccel","Vec3f","",0xC),
0x80A07FCC:("sIcePrimColor","Color_RGBA8","",0x4),
0x80A07FD0:("sIceEnvColor","Color_RGBA8","",0x4),
0x80A07FD4:("sIceAccel","Vec3f","",0xC),
0x80A07FE0:("baseSegVec","Vec3f","",0xC),
0x80A07FEC:("sWrathLimbToColliderBodyParts","s8","[30]",0x1E),
0x80A0800C:("sWrathLimbColliderOffsets","Vec3f","[11]",0x84),
0x80A08090:("sWrathLimbToBodyParts","s8","[30]",0x1E),
0x80A080B0:("sWhipOffset","Vec3f","",0xC),
0x80A080BC:("sShadowSmallMap","s32","[6]",0x18),
0x80A080D4:("sShadowMediumMap","s32","[7]",0x1C),
0x80A080F0:("sShadowLargeMap","s32","[8]",0x20),
0x80A08110:("sShadowExtraLargeMap","s32","[12]",0x38),
0x80A08140:("sParentShadowBodyParts","s32","[15]",0x3C),
0x80A0817C:("sShadowSizes","u8","[15]",0xE),
0x80A0818C:("sTauntAnimations","AnimationHeader*","[3]",0xC),
0x80A08198:("sPrevLightSettings","u8","[8]",0x8),
0x80A081A0:("sLightSettings","u8","[8]",0x8),
0x80A081A8:("sIncarnationLimbToColliderBodyParts","s8","[30]",0x1E),
0x80A081C8:("sIncarnationLimbToPumpBodyParts","s8","[30]",0x1E),
0x80A081E8:("sIncarnationLimbColliderOffsets","Vec3f","[11]",0x84),
0x80A0826C:("sIncarnationLimbToBodyParts","s8","[30]",0x1E),
0x80A0828C:("sRemainsAttachSubCamEyes","Vec3s","[4]",0x18),
0x80A082A4:("sRemainsAttachSubCamAts","Vec3s","[4]",0x18),
0x80A082BC:("hahenVelocity","Vec3f","",0xC),
0x80A082C8:("hahenAccel","Vec3f","",0xC),
0x80A082D4:("baseSegVec","Vec3f","",0xC),
0x80A082E0:("sMaskEyeTextures","UNK_TYPE1","",0x1),
0x80A082F0:("D_80A082F0","f32","",0x4),
0x80A082F4:("D_80A082F4","f32","",0x4),
0x80A082F8:("D_80A082F8","f32","",0x4),
@ -10428,22 +10416,19 @@
0x80A08794:("D_80A08794","f32","",0x4),
0x80A08798:("D_80A08798","f32","",0x4),
0x80A09740:("D_80A09740","UNK_TYPE1","",0x1),
0x80A09A40:("D_80A09A40","UNK_TYPE1","",0x1),
0x80A09A4C:("D_80A09A4C","UNK_TYPE1","",0x1),
0x80A09A50:("D_80A09A50","UNK_TYPE4","",0x4),
0x80A09A54:("D_80A09A54","UNK_TYPE4","",0x4),
0x80A09A58:("D_80A09A58","UNK_TYPE4","",0x4),
0x80A09A5C:("D_80A09A5C","UNK_TYPE4","",0x4),
0x80A09A60:("D_80A09A60","UNK_TYPE4","",0x4),
0x80A09A64:("D_80A09A64","UNK_TYPE4","",0x4),
0x80A09A68:("D_80A09A68","UNK_TYPE4","",0x4),
0x80A09A6C:("D_80A09A6C","UNK_TYPE4","",0x4),
0x80A09A70:("D_80A09A70","UNK_TYPE1","",0x1),
0x80A09A71:("D_80A09A71","UNK_TYPE1","",0x1),
0x80A09A78:("D_80A09A78","UNK_TYPE1","",0x1),
0x80A0A888:("D_80A0A888","UNK_TYPE4","",0x4),
0x80A0A88C:("D_80A0A88C","UNK_TYPE4","",0x4),
0x80A0A890:("D_80A0A890","UNK_TYPE4","",0x4),
0x80A09A40:("sMajoraSfxPos","Vec3f","",0xC),
0x80A09A4C:("sHeartbeatTimer","u8","",0x1),
0x80A09A50:("sWhipLength","s32","",0x4),
0x80A09A54:("sMajorasWrath","Boss07*","",0x4),
0x80A09A58:("sMajoraBattleHandler","Boss07*","",0x4),
0x80A09A5C:("sMajorasMask","Boss07*","",0x4),
0x80A09A60:("sMajoraRemains","Boss07*","[4]",0x10),
0x80A09A70:("sKillAllProjectiles","u8","",0x1),
0x80A09A71:("sMusicStartTimer","u8","",0x1),
0x80A09A78:("sMajoraEffects","MajoraEffect","[50]",0xE10),
0x80A0A888:("sMajoraRandSeed1","s32","",0x4),
0x80A0A88C:("sMajoraRandSeed2","s32","",0x4),
0x80A0A890:("sMajoraRandSeed3","s32","",0x4),
0x80A0C4A0:("Bg_Dy_Yoseizo_Profile","UNK_TYPE1","",0x1),
0x80A0C4C0:("sAnimations","AnimationHeader*","9",0x24),
0x80A0C4E4:("sEffectPrimColors","Color_RGB8","6",0x12),

View File

@ -2221,7 +2221,7 @@ asm/non_matchings/code/z_sub_s/SubS_ConstructPlane.s,SubS_ConstructPlane,0x8013E
asm/non_matchings/code/z_sub_s/SubS_LineSegVsPlane.s,SubS_LineSegVsPlane,0x8013E5CC,0x1D
asm/non_matchings/code/z_sub_s/SubS_FindActorCustom.s,SubS_FindActorCustom,0x8013E640,0x42
asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeCustom.s,SubS_OfferTalkExchangeCustom,0x8013E748,0x1E
asm/non_matchings/code/z_sub_s/SubS_ActorAndPlayerFaceEachOther.s,SubS_ActorAndPlayerFaceEachOther,0x8013E7C0,0x4E
asm/non_matchings/code/z_sub_s/SubS_ArePlayerAndActorFacing.s,SubS_ArePlayerAndActorFacing,0x8013E7C0,0x4E
asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeFacing.s,SubS_OfferTalkExchangeFacing,0x8013E8F8,0x16
asm/non_matchings/code/z_sub_s/SubS_TrackPointStep.s,SubS_TrackPointStep,0x8013E950,0xB0
asm/non_matchings/code/code_8013EC10/Rumble_Update.s,Rumble_Update,0x8013EC10,0xD

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
2221 asm/non_matchings/code/z_sub_s/SubS_LineSegVsPlane.s SubS_LineSegVsPlane 0x8013E5CC 0x1D
2222 asm/non_matchings/code/z_sub_s/SubS_FindActorCustom.s SubS_FindActorCustom 0x8013E640 0x42
2223 asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeCustom.s SubS_OfferTalkExchangeCustom 0x8013E748 0x1E
2224 asm/non_matchings/code/z_sub_s/SubS_ActorAndPlayerFaceEachOther.s asm/non_matchings/code/z_sub_s/SubS_ArePlayerAndActorFacing.s SubS_ActorAndPlayerFaceEachOther SubS_ArePlayerAndActorFacing 0x8013E7C0 0x4E
2225 asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeFacing.s SubS_OfferTalkExchangeFacing 0x8013E8F8 0x16
2226 asm/non_matchings/code/z_sub_s/SubS_TrackPointStep.s SubS_TrackPointStep 0x8013E950 0xB0
2227 asm/non_matchings/code/code_8013EC10/Rumble_Update.s Rumble_Update 0x8013EC10 0xD