diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index 53c7083688..9d6fc0a548 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -1,3 +1,9 @@ +/* + * File: z_obj_kibako.c + * Overlay: ovl_Obj_Kibako + * Description: Small grabbable crate + */ + #include "z_obj_kibako.h" #define FLAGS 0x04000010 @@ -80,9 +86,10 @@ void ObjKibako_SpawnCollectible(ObjKibako* this, GlobalContext* globalCtx) { s32 collectible; if (this->isDropCollected == 0) { - collectible = func_800A8150(this->actor.params & 0x3F); + collectible = func_800A8150(KIBAKO_COLLECTIBLE_ID(&this->actor)); if (collectible >= 0) { - Item_DropCollectible(globalCtx, &this->actor.world.pos, collectible | GET_KIBAKO_COLLECTIBLE_ID(this)); + Item_DropCollectible(globalCtx, &this->actor.world.pos, + collectible | KIBAKO_COLLECTIBLE_FLAG(&this->actor) << 8); this->isDropCollected = 1; } } @@ -131,7 +138,7 @@ void ObjKibako_Init(Actor* thisx, GlobalContext* globalCtx2) { GlobalContext* globalCtx = globalCtx2; s32 whichBankIndex; - whichBankIndex = (this->actor.params >> 0xF) & 1; + whichBankIndex = KIBAKO_BANK_INDEX(thisx); Actor_ProcessInitChain(&this->actor, sInitChain); Actor_SetScale(&this->actor, 0.15f); if (whichBankIndex == 0) { @@ -192,7 +199,7 @@ void ObjKibako_AirBreak(ObjKibako* this, GlobalContext* globalCtx) { EffectSsKakera_Spawn( globalCtx, &pos, &velocity, worldPos, -200, phi_s0, 20, 0, 0, (Rand_ZeroOne() * 38.0f) + 10.0f, 0, 0, 60, - -1, sObjectIdList[(this->actor.params >> 0xF) & 1], sKakeraDisplayLists[(this->actor.params >> 0xF) & 1]); + -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)], sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]); } func_800BBFB0(globalCtx, worldPos, 40.0f, 3, 0x32, 0x8C, 1); @@ -236,7 +243,7 @@ void ObjKibako_WaterBreak(ObjKibako* this, GlobalContext* globalCtx) { EffectSsKakera_Spawn( globalCtx, &pos, &velocity, worldPos, -180, phi_s0, 50, 5, 0, (Rand_ZeroOne() * 35.0f) + 10.0f, 0, 0, 70, - -1, sObjectIdList[(this->actor.params >> 0xF) & 1], sKakeraDisplayLists[(this->actor.params >> 0xF) & 1]); + -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)], sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]); } } @@ -266,7 +273,7 @@ void ObjKibako_Idle(ObjKibako* this, GlobalContext* globalCtx) { ObjKibako_SetupHeld(this); this->actor.room = -1; this->actor.colChkInfo.mass = 0x78; - if (func_800A817C(this->actor.params & 0x3F)) { + if (func_800A817C(KIBAKO_COLLECTIBLE_ID(&this->actor))) { ObjKibako_SpawnCollectible(this, globalCtx); } func_800B8E58(&this->actor, NA_SE_PL_PULL_UP_WOODBOX); @@ -297,7 +304,7 @@ void ObjKibako_Idle(ObjKibako* this, GlobalContext* globalCtx) { this->collider.base.acFlags &= ~AC_HIT; - if ((this->actor.params >> 7) & 1) { + if (KIBAKO_BOMBER_CAN_HIDE_IN_BOX(&this->actor)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base); @@ -411,5 +418,5 @@ void ObjKibako_Update(Actor* thisx, GlobalContext* globalCtx) { } void ObjKibako_Draw(Actor* thisx, GlobalContext* globalCtx) { - func_800BDFC0(globalCtx, sDisplayLists[((thisx->params >> 0xF) & 1)]); + func_800BDFC0(globalCtx, sDisplayLists[KIBAKO_BANK_INDEX(thisx)]); } diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h index 6dfc24042d..6df8b48ee1 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h @@ -3,7 +3,10 @@ #include "global.h" -#define GET_KIBAKO_COLLECTIBLE_ID(x) (((x->actor.params >> 0x8) & 0x7F) << 8) +#define KIBAKO_COLLECTIBLE_ID(thisx) ((thisx)->params & 0x3F) +#define KIBAKO_COLLECTIBLE_FLAG(thisx) (((thisx)->params >> 0x8) & 0x7F) +#define KIBAKO_BANK_INDEX(thisx) (((thisx)->params >> 0xF) & 1) +#define KIBAKO_BOMBER_CAN_HIDE_IN_BOX(thisx) (((thisx)->params >> 7) & 1) struct ObjKibako; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 524e2fd8ce..eba62a5cd7 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7030,24 +7030,24 @@ 0x80924818:("ArrowLight_Update",), 0x8092486C:("ArrowLight_Draw",), 0x809261B0:("ObjKibako_SpawnCollectible",), - 0x80926224:("func_80926224",), + 0x80926224:("ObjKibako_SetShadow",), 0x809262BC:("func_809262BC",), 0x80926318:("func_80926318",), 0x80926394:("func_80926394",), 0x809263C8:("ObjKibako_Init",), 0x809264E0:("ObjKibako_Destroy",), - 0x8092650C:("func_8092650C",), - 0x809267EC:("func_809267EC",), + 0x8092650C:("ObjKibako_AirBreak",), + 0x809267EC:("ObjKibako_WaterBreak",), 0x80926B40:("func_80926B40",), 0x80926B54:("func_80926B54",), - 0x80926BE0:("func_80926BE0",), - 0x80926BF4:("func_80926BF4",), - 0x80926EF4:("func_80926EF4",), - 0x80926F08:("func_80926F08",), - 0x8092703C:("func_8092703C",), - 0x809270F8:("func_809270F8",), + 0x80926BE0:("ObjKibako_SetupIdle",), + 0x80926BF4:("ObjKibako_Idle",), + 0x80926EF4:("ObjKibako_SetupHeld",), + 0x80926F08:("ObjKibako_Held",), + 0x8092703C:("ObjKibako_SetupThrown",), + 0x809270F8:("ObjKibako_Thrown",), 0x80927304:("ObjKibako_Update",), - 0x80927334:("func_80927334",), + 0x80927334:("ObjKibako_Draw",), 0x809275C0:("func_809275C0",), 0x8092762C:("func_8092762C",), 0x80927690:("func_80927690",),