(Mostly) document EnSyatekiDekunuts (Shooting Gallery Deku Scrub) (#1095)

* (Mostly) document EnSyatekiDekunuts (Shooting Gallery Deku Scrub)

* Respond to Elliptic's review
This commit is contained in:
Tom Overton
2022-09-30 23:55:05 -03:00
committed by GitHub
parent 4935ec7ba1
commit bbc8aec36a
9 changed files with 280 additions and 214 deletions
@@ -83,7 +83,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
path = &play->setupPathList[path->unk1];
}
for (i = 0; i < EN_SYATEKI_CROW_GET_NUMBER(&this->actor); i++) {
for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) {
path = &play->setupPathList[path->unk1];
}
@@ -95,7 +95,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
this->collider.elements[0].dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f);
if ((path == NULL) || (EN_SYATEKI_CROW_GET_NUMBER(&this->actor) >= 0x80)) {
if ((path == NULL) || (EN_SYATEKI_CROW_GET_INDEX(&this->actor) >= 0x80)) {
Actor_MarkForDeath(&this->actor);
return;
}
@@ -133,7 +133,7 @@ void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true) &&
(syatekiMan->guayFlags & (1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor)))) {
(syatekiMan->guayFlags & (1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor)))) {
EnSyatekiCrow_SetupWaitToMove(this);
} else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->isActive = true;
@@ -202,7 +202,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
this->currentPointIndex++;
} else {
this->isActive = false;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor));
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
EnSyatekiCrow_SetupWaitForSpawn(this);
}
@@ -241,7 +241,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) {
if (this->deathTimer > 20) {
func_800B3030(play, &this->actor.world.pos, &sZeroVec, &sZeroVec, this->actor.scale.x * 10000.0f, 0, 0);
syatekiMan->guayHitCounter++;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor));
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
EnSyatekiCrow_SetupWaitForSpawn(this);
}
@@ -6,8 +6,8 @@
#define EN_SYATEKI_CROW_GET_WAIT_MOD(thisx) ((thisx)->params & 0xF)
#define EN_SYATEKI_CROW_GET_SPEED_MOD(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_CROW_GET_NUMBER(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_CROW_PARAMS(number, speedMod, waitMod) (((number << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF))
#define EN_SYATEKI_CROW_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_CROW_PARAMS(index, speedMod, waitMod) (((index << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF))
struct EnSyatekiCrow;
File diff suppressed because it is too large Load Diff
@@ -4,10 +4,15 @@
#include "global.h"
#include "objects/object_dekunuts/object_dekunuts.h"
#define EN_SYATEKI_DEKUNUTS_GET_PARAM_F(thisx) ((thisx)->params & 0xF)
#define EN_SYATEKI_DEKUNUTS_GET_NUMBER(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_DEKUNUTS_GET_TYPE(thisx) ((thisx)->params & 0xF)
#define EN_SYATEKI_DEKUNUTS_GET_INDEX(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_DEKUNUTS_PARAMS(unkFF00, number, unkF) (((unkFF00 << 8) & 0xFF00) | ((number << 4) & 0xF0) | (unkF & 0xF))
#define EN_SYATEKI_DEKUNUTS_PARAMS(unkFF00, index, type) (((unkFF00 << 8) & 0xFF00) | ((index << 4) & 0xF0) | (type & 0xF))
typedef enum {
/* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points
/* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS, // Worth 100 points
} EnSyatekiDekunutsType;
struct EnSyatekiDekunuts;
@@ -18,18 +23,18 @@ typedef struct EnSyatekiDekunuts {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnSyatekiDekunutsActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
/* 0x1D8 */ s16 unk_1D8;
/* 0x1DA */ s16 unk_1DA;
/* 0x1CD */ s16 unk_1DC;
/* 0x1D8 */ s16 timer;
/* 0x1DA */ s16 waitTimer;
/* 0x1CD */ s16 unk_1DC; // Initialized, but never used
/* 0x1DE */ UNK_TYPE1 unk_1DE[0x4];
/* 0x1E2 */ s16 unk_1E2;
/* 0x1E4 */ Vec3s* unk_1E4;
/* 0x1E8 */ s16 unk_1E8;
/* 0x1EA */ s16 unk_1EA;
/* 0x1EC */ s16 unk_1EC;
/* 0x1EE */ s16 unk_1EE;
/* 0x1F0 */ s16 unk_1F0;
/* 0x1F2 */ s16 unk_1F2;
/* 0x1E2 */ s16 isAlive;
/* 0x1E4 */ Vec3s* flowerPos;
/* 0x1E8 */ s16 index;
/* 0x1EA */ s16 flowerCount;
/* 0x1EC */ s16 shouldDrawFlowers;
/* 0x1EE */ s16 timeToBurrow;
/* 0x1F0 */ s16 headdressType;
/* 0x1F2 */ s16 headdressRotZ;
/* 0x1F4 */ Vec3s jointTable[DEKU_SCRUB_LIMB_MAX];
/* 0x230 */ Vec3s morphTable[DEKU_SCRUB_LIMB_MAX];
/* 0x26C */ UNK_TYPE1 unk_26C[0x4];
@@ -103,13 +103,20 @@ typedef struct {
static SwampTargetActorEntry sNormalSwampTargetActorList[] = {
{ ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(1, 3, 0) },
{ ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(0, 2, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 2, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 3, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 4, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, 1) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, 1) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 2, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 3, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 4, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 0) },
@@ -129,8 +136,10 @@ static SwampTargetActorEntry sNormalSwampTargetActorList[] = {
static SwampTargetActorEntry sUnusedSwampTargetActorList[] = {
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, 1) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, 1) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
{ ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 2) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 2) },
{ ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 3) },
@@ -151,7 +151,7 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
path = &play->setupPathList[path->unk1];
}
for (i = 0; i < EN_SYATEKI_WF_GET_NUMBER(&this->actor); i++) {
for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) {
path = &play->setupPathList[path->unk1];
}
@@ -224,7 +224,7 @@ void func_80A201CC(EnSyatekiWf* this) {
this->actor.draw = NULL;
this->unk_2A4 = 1;
this->unk_298 = 0;
syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_NUMBER(&this->actor));
syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_INDEX(&this->actor));
this->actionFunc = func_80A20284;
}
@@ -236,7 +236,7 @@ void func_80A20284(EnSyatekiWf* this, PlayState* play) {
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_298 == 1)) {
func_80A200E0(this);
func_80A2030C(this);
} else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_NUMBER(&this->actor))) {
} else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_INDEX(&this->actor))) {
this->unk_298 = 1;
}
}
@@ -5,8 +5,8 @@
#include "objects/object_wf/object_wf.h"
#define EN_SYATEKI_WF_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_WF_GET_NUMBER(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_WF_PARAMS(number, unkF0, unused) (((number << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unused & 0xF))
#define EN_SYATEKI_WF_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_WF_PARAMS(index, unkF0, unused) (((index << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unused & 0xF))
struct EnSyatekiWf;
+17 -17
View File
@@ -10063,23 +10063,23 @@
0x80A2B390:("BgDblueMovebg_Draw",),
0x80A2BC00:("EnSyatekiDekunuts_Init",),
0x80A2BE28:("EnSyatekiDekunuts_Destroy",),
0x80A2BE54:("func_80A2BE54",),
0x80A2BF18:("func_80A2BF18",),
0x80A2BFC4:("func_80A2BFC4",),
0x80A2C0F8:("func_80A2C0F8",),
0x80A2C150:("func_80A2C150",),
0x80A2C168:("func_80A2C168",),
0x80A2C1AC:("func_80A2C1AC",),
0x80A2C208:("func_80A2C208",),
0x80A2C27C:("func_80A2C27C",),
0x80A2C2E0:("func_80A2C2E0",),
0x80A2C33C:("func_80A2C33C",),
0x80A2C3AC:("func_80A2C3AC",),
0x80A2C3F0:("func_80A2C3F0",),
0x80A2C478:("func_80A2C478",),
0x80A2C48C:("func_80A2C48C",),
0x80A2C4D0:("func_80A2C4D0",),
0x80A2C5DC:("func_80A2C5DC",),
0x80A2BE54:("EnSyatekiDekunuts_SetupWaitForSpawn",),
0x80A2BF18:("EnSyatekiDekunuts_WaitForSpawn",),
0x80A2BFC4:("EnSyatekiDekunuts_SetupSpawn",),
0x80A2C0F8:("EnSyatekiDekunuts_Spawn",),
0x80A2C150:("EnSyatekiDekunuts_SetupWaitToEmerge",),
0x80A2C168:("EnSyatekiDekunuts_WaitToEmerge",),
0x80A2C1AC:("EnSyatekiDekunuts_SetupEmerge",),
0x80A2C208:("EnSyatekiDekunuts_Emerge",),
0x80A2C27C:("EnSyatekiDekunuts_SetupLookAround",),
0x80A2C2E0:("EnSyatekiDekunuts_LookAround",),
0x80A2C33C:("EnSyatekiDekunuts_BonusLookAround",),
0x80A2C3AC:("EnSyatekiDekunuts_SetupBurrow",),
0x80A2C3F0:("EnSyatekiDekunuts_Burrow",),
0x80A2C478:("EnSyatekiDekunuts_SetupGameEnd",),
0x80A2C48C:("EnSyatekiDekunuts_GameEnd",),
0x80A2C4D0:("EnSyatekiDekunuts_SetupDead",),
0x80A2C5DC:("EnSyatekiDekunuts_Dead",),
0x80A2C78C:("EnSyatekiDekunuts_Update",),
0x80A2C8A0:("EnSyatekiDekunuts_OverrideLimbDraw",),
0x80A2C8E8:("EnSyatekiDekunuts_Draw",),
+9 -9
View File
@@ -11112,15 +11112,15 @@
0x80A2BBF4:("D_80A2BBF4","UNK_TYPE1","",0x1),
0x80A2BBF5:("D_80A2BBF5","UNK_TYPE1","",0x1),
0x80A2CA90:("En_Syateki_Dekunuts_InitVars","UNK_TYPE1","",0x1),
0x80A2CAB0:("D_80A2CAB0","UNK_TYPE1","",0x1),
0x80A2CADC:("D_80A2CADC","UNK_TYPE4","",0x4),
0x80A2CAE8:("D_80A2CAE8","UNK_PTR","",0x4),
0x80A2CB90:("D_80A2CB90","UNK_TYPE1","",0x1),
0x80A2CB9C:("D_80A2CB9C","UNK_TYPE4","",0x4),
0x80A2CBA0:("D_80A2CBA0","UNK_TYPE1","",0x1),
0x80A2CBAC:("D_80A2CBAC","UNK_TYPE1","",0x1),
0x80A2CBB8:("D_80A2CBB8","UNK_TYPE1","",0x1),
0x80A2CBBC:("D_80A2CBBC","UNK_TYPE1","",0x1),
0x80A2CAB0:("sCylinderInit","UNK_TYPE1","",0x1),
0x80A2CADC:("sBonusDekuScrubColliderDimensions","UNK_TYPE4","",0x4),
0x80A2CAE8:("sAnimationInfo","UNK_PTR","",0x4),
0x80A2CB90:("sInitChain","UNK_TYPE1","",0x1),
0x80A2CB9C:("sDrawFlowers","UNK_TYPE4","",0x4),
0x80A2CBA0:("sVelocity","UNK_TYPE1","",0x1),
0x80A2CBAC:("sAccel","UNK_TYPE1","",0x1),
0x80A2CBB8:("sPrimColor","UNK_TYPE1","",0x1),
0x80A2CBBC:("sEnvColor","UNK_TYPE1","",0x1),
0x80A2CBC0:("D_80A2CBC0","f32","",0x4),
0x80A2D1C0:("Elf_Msg3_InitVars","UNK_TYPE1","",0x1),
0x80A2D1E0:("D_80A2D1E0","UNK_TYPE1","",0x1),