EnOkuta (Octorok and its projectiles) OK and documented (#1641)

* Match EnOkuta

* Match data

* Use the generated reloc

* Delete extern stuff and format

* Extract the DL

* Fix lots of stuff

* Copy a lot of names over from EnSyatekiOkuta

* SFX enums

* Lots more stuff

* Constants and other stuff

* Some more stuff I missed

* Name more functions using OoT/SyatekiOkuta as reference

* An easy function I missed

* Some floats

* Getter macros

* Types enum

* Name the cylinder inits a little clearer

* Create bodyparts enum and name all data

* Name all functions

* Name `timer` struct var and all temps

* Name the `jumpHeight` struct var

* Create damage effect enum

* Name the extracted DL

* Name `numConsecutiveProjectiles`

* Finish docs

* Document XML

* Clarify that this blue Octorok isn't the shooting gallery one

* Respond to reviews

* Stuff

---------

Co-authored-by: Synray <31429825+Synray@users.noreply.github.com>
Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
This commit is contained in:
Tom Overton 2024-06-23 18:09:22 -07:00 committed by GitHub
parent 3682a13ec5
commit bb221b4a0f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 1210 additions and 243 deletions

View File

@ -0,0 +1,7 @@
<Root>
<!-- Octorok assets -->
<File Name="ovl_En_Okuta" BaseAddress="0x8086DE20" RangeStart="0x2A50" RangeEnd="0x2A60">
<!-- DisplayList that turns the Octorok blue. In the final game, the blue Octorok variant is unused. -->
<DList Name="gOctorokBlueMaterialDL" Offset="0x2A50"/>
</File>
</Root>

View File

@ -301,17 +301,6 @@ D_06021E34 = 0x06021E34;
D_06022728 = 0x06022728;
D_06022CAC = 0x06022CAC;
// ovl_En_Okuta
D_0600044C = 0x0600044C;
D_06003250 = 0x06003250;
D_060033D0 = 0x060033D0;
D_06003958 = 0x06003958;
D_06003B24 = 0x06003B24;
D_06003EE4 = 0x06003EE4;
D_06004204 = 0x06004204;
D_0600466C = 0x0600466C;
// ovl_En_Zl4
D_06013328 = 0x06013328;

3
spec
View File

@ -758,8 +758,7 @@ beginseg
name "ovl_En_Okuta"
compress
include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Okuta/z_en_okuta.o"
include "$(BUILD_DIR)/data/ovl_En_Okuta/ovl_En_Okuta.data.o"
include "$(BUILD_DIR)/data/ovl_En_Okuta/ovl_En_Okuta.reloc.o"
include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Okuta/ovl_En_Okuta_reloc.o"
endseg
beginseg

View File

@ -616,32 +616,30 @@ s32 EnBb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
}
/**
* This maps a given limb based on its limbIndex to its appropriate index
* in the bodyPartsPos/Velocity arrays.
* This maps a given limb based on its limbIndex to its appropriate index in the `bodyPartsPos/Velocity` arrays.
*/
static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = {
BODYPART_NONE, // BUBBLE_LIMB_NONE
BODYPART_NONE, // BUBBLE_LIMB_ROOT
BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT
BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT
BUBBLE_BODYPART_0, // BUBBLE_LIMB_JAW
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT
BUBBLE_BODYPART_1, // BUBBLE_LIMB_LEFT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT
BUBBLE_BODYPART_2, // BUBBLE_LIMB_RIGHT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE
BUBBLE_BODYPART_3, // BUBBLE_LIMB_CRANIUM
BODYPART_NONE, // BUBBLE_LIMB_NONE
BODYPART_NONE, // BUBBLE_LIMB_ROOT
BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT
BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT
BUBBLE_BODYPART_JAW, // BUBBLE_LIMB_JAW
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT
BUBBLE_BODYPART_LEFT_WING_WEBBING, // BUBBLE_LIMB_LEFT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT
BUBBLE_BODYPART_RIGHT_WING_WEBBING, // BUBBLE_LIMB_RIGHT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE
BUBBLE_BODYPART_CRANIUM, // BUBBLE_LIMB_CRANIUM
};
/**
* The last element of the bodyParts arrays is a duplicate of the cranium
* limb, which is then offset by a certain amount. There is no display list
* associated with this, so it is only used for effects.
* The last element of the `bodyParts` arrays is not tied to any particular limb and is instead used to control the
* placement of effects. The positions of these effects are offset by a certain amount from the Bubble's cranium limb.
*/
static Vec3f sEffectsBodyPartOffset = { 1000.0f, -700.0f, 0.0f };
@ -652,10 +650,10 @@ void EnBb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (this->bodyPartDrawStatus == BB_BODY_PART_DRAW_STATUS_ALIVE) {
if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) {
if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_0) {
Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_0]);
} else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_3) {
Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_3]);
if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_JAW) {
Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_JAW]);
} else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_CRANIUM) {
Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_CRANIUM]);
Matrix_MultVec3f(&sEffectsBodyPartOffset, &this->bodyPartsPos[BUBBLE_BODYPART_EFFECTS]);
} else {
Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]);

View File

@ -11,10 +11,10 @@ struct EnBb;
typedef void (*EnBbActionFunc)(struct EnBb*, PlayState*);
typedef enum BubbleBodyPart {
/* 0 */ BUBBLE_BODYPART_0,
/* 1 */ BUBBLE_BODYPART_1,
/* 2 */ BUBBLE_BODYPART_2,
/* 3 */ BUBBLE_BODYPART_3,
/* 0 */ BUBBLE_BODYPART_JAW,
/* 1 */ BUBBLE_BODYPART_LEFT_WING_WEBBING,
/* 2 */ BUBBLE_BODYPART_RIGHT_WING_WEBBING,
/* 3 */ BUBBLE_BODYPART_CRANIUM,
/* 4 */ BUBBLE_BODYPART_EFFECTS,
/* 5 */ BUBBLE_BODYPART_MAX
} BubbleBodyPart;

View File

@ -652,32 +652,30 @@ s32 EnBbfall_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
}
/**
* This maps a given limb based on its limbIndex to its appropriate index
* in the bodyPartsPos/Velocity arrays.
* This maps a given limb based on its limbIndex to its appropriate index in the `bodyPartsPos/Velocity` arrays.
*/
static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = {
BODYPART_NONE, // BUBBLE_LIMB_NONE
BODYPART_NONE, // BUBBLE_LIMB_ROOT
BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT
BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT
BUBBLE_BODYPART_0, // BUBBLE_LIMB_JAW
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT
BUBBLE_BODYPART_1, // BUBBLE_LIMB_LEFT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT
BUBBLE_BODYPART_2, // BUBBLE_LIMB_RIGHT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE
BUBBLE_BODYPART_3, // BUBBLE_LIMB_CRANIUM
BODYPART_NONE, // BUBBLE_LIMB_NONE
BODYPART_NONE, // BUBBLE_LIMB_ROOT
BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT
BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT
BUBBLE_BODYPART_JAW, // BUBBLE_LIMB_JAW
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT
BUBBLE_BODYPART_LEFT_WING_WEBBING, // BUBBLE_LIMB_LEFT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT
BUBBLE_BODYPART_RIGHT_WING_WEBBING, // BUBBLE_LIMB_RIGHT_WING_WEBBING
BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE
BUBBLE_BODYPART_CRANIUM, // BUBBLE_LIMB_CRANIUM
};
/**
* The last element of the bodyParts arrays is a duplicate of the cranium
* limb, which is then offset by a certain amount. There is no display list
* associated with this, so it is only used for effects.
* The last element of the `bodyParts` arrays is not tied to any particular limb and is instead used to control the
* placement of effects. The positions of these effects are offset by a certain amount from the Bubble's cranium limb.
*/
static Vec3f sEffectsBodyPartOffset = { 1000.0f, -700.0f, 0.0f };
@ -688,10 +686,10 @@ void EnBbfall_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
if (this->bodyPartDrawStatus == BBFALL_BODY_PART_DRAW_STATUS_ALIVE) {
if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) {
if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_0) {
Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_0]);
} else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_3) {
Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_3]);
if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_JAW) {
Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_JAW]);
} else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_CRANIUM) {
Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_CRANIUM]);
Matrix_MultVec3f(&sEffectsBodyPartOffset, &this->bodyPartsPos[BUBBLE_BODYPART_EFFECTS]);
} else {
Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]);

View File

@ -551,7 +551,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.6f;
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.2f);
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 0.030000001f)) {
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 30.0f * 0.001f)) {
Actor_PlaySfx_Flagged(&this->picto.actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -2,16 +2,53 @@
#define Z_EN_OKUTA_H
#include "global.h"
#include "objects/object_okuta/object_okuta.h"
struct EnOkuta;
typedef void (*EnOkutaActionFunc)(struct EnOkuta*, PlayState*);
#define EN_OKUTA_GET_NUM_CONSECUTIVE_PROJECTILES(thisx) (((thisx)->params >> 8) & 0xFF)
#define EN_OKUTA_GET_TYPE(thisx) ((thisx)->params)
typedef enum EnOkutaType {
/* 0 */ EN_OKUTA_TYPE_RED_OCTOROK,
/* 1 */ EN_OKUTA_TYPE_BLUE_OCTOROK, // Unused in the final game. This variant is invincible to all attacks and can chase the player underwater if they dive.
/* 16 */ EN_OKUTA_TYPE_PROJECTILE_BASE = 16,
/* 16 */ EN_OKUTA_TYPE_RED_PROJECTILE = EN_OKUTA_TYPE_RED_OCTOROK + EN_OKUTA_TYPE_PROJECTILE_BASE,
/* 17 */ EN_OKUTA_TYPE_BLUE_PROJECTILE = EN_OKUTA_TYPE_BLUE_OCTOROK + EN_OKUTA_TYPE_PROJECTILE_BASE
} EnOkutaType;
typedef enum EnOkutaBodyPart {
/* 0 */ EN_OKUTA_BODYPART_BODY,
/* 1 */ EN_OKUTA_BODYPART_FRONT_LEFT_ARM_END,
/* 2 */ EN_OKUTA_BODYPART_FRONT_RIGHT_ARM_END,
/* 3 */ EN_OKUTA_BODYPART_BACK_LEFT_ARM_END,
/* 4 */ EN_OKUTA_BODYPART_BACK_RIGHT_ARM_END,
/* 5 */ EN_OKUTA_BODYPART_SNOUT,
/* 6 */ EN_OKUTA_BODYPART_HEAD,
/* 7 */ EN_OKUTA_BODYPART_EFFECTS_1,
/* 8 */ EN_OKUTA_BODYPART_EFFECTS_2,
/* 9 */ EN_OKUTA_BODYPART_EFFECTS_3,
/* 10 */ EN_OKUTA_BODYPART_MAX
} EnOkutaBodyPart;
typedef struct EnOkuta {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x44];
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnOkutaActionFunc actionFunc;
/* 0x18C */ char unk_18C[0x1A8];
/* 0x18C */ u8 drawDmgEffType;
/* 0x18E */ s16 timer;
/* 0x190 */ s16 numConsecutiveProjectiles; // when the Octorok starts shooting projectiles, it will shoot this many projectiles in a row before stopping
/* 0x192 */ Vec3s jointTable[OCTOROK_LIMB_MAX];
/* 0x1F2 */ Vec3s morphTable[OCTOROK_LIMB_MAX];
/* 0x254 */ f32 drawDmgEffAlpha;
/* 0x258 */ f32 drawDmgEffScale;
/* 0x25C */ f32 drawDmgEffFrozenSteamScale;
/* 0x260 */ f32 jumpHeight;
/* 0x264 */ Vec3f headScale;
/* 0x270 */ Vec3f bodyPartsPos[EN_OKUTA_BODYPART_MAX];
/* 0x2E8 */ ColliderCylinder collider;
} EnOkuta; // size = 0x334
#endif // Z_EN_OKUTA_H

View File

@ -124,11 +124,11 @@ void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play) {
/**
* Spawns the puff of smoke that appears when the Octorok disappears when it dies.
*/
void EnSyatekiOkuta_SpawnDust(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) {
static Color_RGBA8 sDustPrimColor = { 255, 255, 255, 255 };
static Color_RGBA8 sDustEnvColor = { 150, 150, 150, 255 };
void EnSyatekiOkuta_SpawnSmoke(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) {
static Color_RGBA8 sSmokePrimColor = { 255, 255, 255, 255 };
static Color_RGBA8 sSmokeEnvColor = { 150, 150, 150, 255 };
func_800B0DE0(play, pos, velocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 400, scaleStep);
func_800B0DE0(play, pos, velocity, &gZeroVec3f, &sSmokePrimColor, &sSmokeEnvColor, 400, scaleStep);
}
/**
@ -308,7 +308,7 @@ void EnSyatekiOkuta_Die(EnSyatekiOkuta* this, PlayState* play) {
velocity.x = 0.0f;
velocity.y = -0.5f;
velocity.z = 0.0f;
EnSyatekiOkuta_SpawnDust(&pos, &velocity, -20, play);
EnSyatekiOkuta_SpawnSmoke(&pos, &velocity, -20, play);
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
}
@ -502,8 +502,9 @@ void EnSyatekiOkuta_UpdateHeadScale(EnSyatekiOkuta* this) {
}
/**
* Returns true if the snout scale should be updated, false otherwise. The snout scale is returned via the scale
* parameter.
* Gets the scaling factor for animating the snout limb. If the limb is not being transformed, no scale value is
* returned. Returns true if the snout scale should be updated, false otherwise. The snout scale is returned via the
* `scale` parameter.
*/
s32 EnSyatekiOkuta_GetSnoutScale(EnSyatekiOkuta* this, f32 curFrame, Vec3f* scale) {
if (this->actionFunc == EnSyatekiOkuta_Appear) {

View File

@ -5060,41 +5060,41 @@
0x8086D898:("EnPametfrog_Draw",),
0x8086DE20:("EnOkuta_Init",),
0x8086E058:("EnOkuta_Destroy",),
0x8086E084:("func_8086E084",),
0x8086E0F0:("func_8086E0F0",),
0x8086E168:("func_8086E168",),
0x8086E214:("func_8086E214",),
0x8086E27C:("func_8086E27C",),
0x8086E2C0:("func_8086E2C0",),
0x8086E378:("func_8086E378",),
0x8086E3B8:("func_8086E3B8",),
0x8086E4FC:("func_8086E4FC",),
0x8086E52C:("func_8086E52C",),
0x8086E5E8:("func_8086E5E8",),
0x8086E658:("func_8086E658",),
0x8086E7A8:("func_8086E7A8",),
0x8086E7E8:("func_8086E7E8",),
0x8086E8E8:("func_8086E8E8",),
0x8086E948:("func_8086E948",),
0x8086EAE0:("func_8086EAE0",),
0x8086EC00:("func_8086EC00",),
0x8086EE8C:("func_8086EE8C",),
0x8086EF14:("func_8086EF14",),
0x8086EF90:("func_8086EF90",),
0x8086EFE8:("func_8086EFE8",),
0x8086F2FC:("func_8086F2FC",),
0x8086F434:("func_8086F434",),
0x8086F4B0:("func_8086F4B0",),
0x8086F4F4:("func_8086F4F4",),
0x8086F57C:("func_8086F57C",),
0x8086F694:("func_8086F694",),
0x8086F8FC:("func_8086F8FC",),
0x8086FCA4:("func_8086FCA4",),
0x8086E084:("EnOkuta_Freeze",),
0x8086E0F0:("EnOkuta_Thaw",),
0x8086E168:("EnOkuta_SpawnBubbles",),
0x8086E214:("EnOkuta_SpawnSmoke",),
0x8086E27C:("EnOkuta_SpawnSplash",),
0x8086E2C0:("EnOkuta_SpawnRipple",),
0x8086E378:("EnOkuta_GetFloatHeight",),
0x8086E3B8:("EnOkuta_SpawnProjectile",),
0x8086E4FC:("EnOkuta_SetupWaitToAppear",),
0x8086E52C:("EnOkuta_WaitToAppear",),
0x8086E5E8:("EnOkuta_SetupAppear",),
0x8086E658:("EnOkuta_Appear",),
0x8086E7A8:("EnOkuta_SetupHide",),
0x8086E7E8:("EnOkuta_Hide",),
0x8086E8E8:("EnOkuta_SetupFloat",),
0x8086E948:("EnOkuta_Float",),
0x8086EAE0:("EnOkuta_SetupShoot",),
0x8086EC00:("EnOkuta_Shoot",),
0x8086EE8C:("EnOkuta_SetupDamaged",),
0x8086EF14:("EnOkuta_Damaged",),
0x8086EF90:("EnOkuta_SetupDie",),
0x8086EFE8:("EnOkuta_Die",),
0x8086F2FC:("EnOkuta_SetupFrozen",),
0x8086F434:("EnOkuta_FrozenInIceBlock",),
0x8086F4B0:("EnOkuta_Frozen",),
0x8086F4F4:("EnOkuta_SetupSpin",),
0x8086F57C:("EnOkuta_Spin",),
0x8086F694:("EnOkuta_Projectile_Fly",),
0x8086F8FC:("EnOkuta_UpdateHeadScale",),
0x8086FCA4:("EnOkuta_UpdateDamage",),
0x8086FDE0:("EnOkuta_Update",),
0x808700C0:("func_808700C0",),
0x80870254:("func_80870254",),
0x808704DC:("func_808704DC",),
0x808705C8:("func_808705C8",),
0x808700C0:("EnOkuta_Projectile_Update",),
0x80870254:("EnOkuta_GetSnoutScale",),
0x808704DC:("EnOkuta_OverrideLimbDraw",),
0x808705C8:("EnOkuta_PostLimbDraw",),
0x808706E0:("EnOkuta_Draw",),
0x80870DB0:("EnBom_Init",),
0x80870FF8:("EnBom_Destroy",),
@ -10217,7 +10217,7 @@
0x80A35DDC:("ObjBell_Draw",),
0x80A35FF0:("EnSyatekiOkuta_Init",),
0x80A3611C:("EnSyatekiOkuta_Destroy",),
0x80A36148:("EnSyatekiOkuta_SpawnDust",),
0x80A36148:("EnSyatekiOkuta_SpawnSmoke",),
0x80A361B0:("EnSyatekiOkuta_SpawnSplash",),
0x80A361F4:("EnSyatekiOkuta_IsHiddenByAnotherOctorok",),
0x80A36260:("EnSyatekiOkuta_SetupAttachToShootingGalleryMan",),

View File

@ -5389,23 +5389,20 @@
0x8086DA94:("D_8086DA94","f32","",0x4),
0x8086DA98:("D_8086DA98","f32","",0x4),
0x8086DA9C:("D_8086DA9C","f32","",0x4),
0x80870870:("D_80870870","UNK_TYPE1","",0x1),
0x80870880:("En_Okuta_InitVars","UNK_TYPE1","",0x1),
0x808708A0:("D_808708A0","UNK_TYPE1","",0x1),
0x808708CC:("D_808708CC","UNK_TYPE1","",0x1),
0x808708EC:("D_808708EC","UNK_TYPE2","",0x2),
0x808708EE:("D_808708EE","UNK_TYPE2","",0x2),
0x808708F8:("D_808708F8","UNK_TYPE1","",0x1),
0x80870900:("D_80870900","UNK_TYPE1","",0x1),
0x80870920:("D_80870920","UNK_TYPE1","",0x1),
0x80870928:("D_80870928","UNK_TYPE1","",0x1),
0x8087092C:("D_8087092C","UNK_TYPE1","",0x1),
0x80870930:("D_80870930","UNK_TYPE1","",0x1),
0x8087093C:("D_8087093C","UNK_TYPE1","",0x1),
0x80870940:("D_80870940","UNK_TYPE1","",0x1),
0x80870944:("D_80870944","UNK_TYPE1","",0x1),
0x80870954:("D_80870954","UNK_TYPE1","",0x1),
0x80870978:("D_80870978","UNK_TYPE1","",0x1),
0x80870870:("gOctorokBlueMaterialDL","Gfx","[2]",0x10),
0x80870880:("En_Okuta_InitVars","ActorInit","",0x20),
0x808708A0:("sProjectileCylinderInit","ColliderCylinderInit","",0x2C),
0x808708CC:("sOctorokCylinderInit","ColliderCylinderInit","",0x2C),
0x808708F8:("sColChkInfoInit","CollisionCheckInfoInit","",0x4),
0x80870900:("sDamageTable","DamageTable","",0x20),
0x80870920:("sInitChain","InitChainEntry","[2]",0x8),
0x80870928:("sSmokePrimColor","Color_RGBA8","",0x4),
0x8087092C:("sSmokeEnvColor","Color_RGBA8","",0x4),
0x80870930:("sBubbleAccel","Vec3f","",0xC),
0x8087093C:("sBubblePrimColor","Color_RGBA8","",0x4),
0x80870940:("sBubbleEnvColor","Color_RGBA8","",0x4),
0x80870944:("sLimbToBodyParts","s8","[16]",0x10),
0x80870954:("sEffectsBodyPartOffsets","Vec3f","[3]",0x24),
0x80870980:("D_80870980","f32","",0x4),
0x80870984:("D_80870984","f32","",0x4),
0x80870988:("D_80870988","f32","",0x4),
@ -11058,8 +11055,8 @@
0x80A37A88:("D_80A37A88","UNK_TYPE1","",0x1),
0x80A37B08:("D_80A37B08","UNK_TYPE1","",0x1),
0x80A37B88:("D_80A37B88","UNK_TYPE1","",0x1),
0x80A37B90:("sDustPrimColor","UNK_TYPE1","",0x1),
0x80A37B94:("sDustEnvColor","UNK_TYPE1","",0x1),
0x80A37B90:("sSmokePrimColor","UNK_TYPE1","",0x1),
0x80A37B94:("sSmokeEnvColor","UNK_TYPE1","",0x1),
0x80A37B98:("sBubbleAccel","UNK_TYPE1","",0x1),
0x80A37BA4:("sBubblePrimColor","UNK_TYPE1","",0x1),
0x80A37BA8:("sBubbleEnvColor","UNK_TYPE1","",0x1),