From 065fa3e8c89ae6a2ae9bce760f919771e9ee7775 Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Sat, 16 Aug 2025 18:23:48 -0500 Subject: [PATCH] code_83340 -> propModelList --- decompressed.pal.yaml | 8 +- decompressed.us.v10.yaml | 8 +- include/core1/core1.h | 2 +- include/core2/file.h | 2 +- include/functions.h | 2 +- include/prop.h | 38 ++-- manual_syms.pal.txt | 2 +- src/FP/ch/twinklymuncher.c | 2 +- src/GV/ch/trunker.c | 2 +- src/MM/ch/orange.c | 2 +- src/TTC/ma/castle.c | 8 +- src/core1/code_15B30.c | 2 +- src/core1/code_1D00.c | 16 +- src/core1/memory.c | 4 +- src/core2/ba/marker.c | 8 +- src/core2/ch/collectible.c | 6 +- src/core2/code_5BEB0.c | 6 +- src/core2/code_5FD90.c | 12 +- src/core2/code_7AF80.c | 36 ++-- src/core2/code_83340.c | 224 -------------------- src/core2/code_91E10.c | 18 +- src/core2/code_9E370.c | 6 +- src/core2/code_A4D00.c | 2 +- src/core2/code_A5BC0.c | 415 ++++++++++++++++++------------------- src/core2/code_AD110.c | 31 +-- src/core2/code_AD5B0.c | 6 +- src/core2/code_C9F00.c | 16 +- src/core2/code_CC1E0.c | 2 +- src/core2/file.c | 2 +- src/core2/propModelList.c | 230 ++++++++++++++++++++ src/core2/spawnqueue.c | 9 +- src/fight/chfinalboss.c | 2 +- 32 files changed, 568 insertions(+), 561 deletions(-) delete mode 100644 src/core2/code_83340.c create mode 100644 src/core2/propModelList.c diff --git a/decompressed.pal.yaml b/decompressed.pal.yaml index c398432b..8a8fb49d 100644 --- a/decompressed.pal.yaml +++ b/decompressed.pal.yaml @@ -769,7 +769,7 @@ segments: # - [0xFD00C0, c, fx/airscore] #DONE # - [0xFD08E0, c, code_7AF80] # - [0xFD7960, c, mapModel] #DONE - # - [0xFD8CA0, c, code_83340] #DONE + # - [0xFD8CA0, c, propModelList] #DONE # - [0xFD96D0, c, gc/section] #DONE # - [0xFD9A30, c, gc/sky] #DONE # - [0xFD9DD0, c, gc/transition] #DONE @@ -1045,7 +1045,7 @@ segments: # - [0x1039330, .data, fx/airscore] # - [0x1039380, .data, code_7AF80] # - [0x10395B0, .data, mapModel] - # - [0x103A1D0, .data, code_83340] + # - [0x103A1D0, .data, propModelList] # - [0x103A1E0, .data, gc/section] # - [0x103A710, .data, gc/sky] # - [0x103AB20, .data, gc/transition] @@ -1293,7 +1293,7 @@ segments: # - [0x1045E60, .rodata, fx/airscore] # - [0x1045E80, .rodata, code_7AF80] # - [0x1045F40, .rodata, mapModel] - # - [0x1046100, .rodata, code_83340] + # - [0x1046100, .rodata, propModelList] # - [0x1046110, .rodata, gc/section] # - [0x1046E10, .rodata, gc/sky] # - [0x1046E20, .rodata, gc/transition] @@ -1560,7 +1560,7 @@ segments: # - [0x0106C980, .bss, fx/airscore] # - [0x0106C980, .bss, code_7AF80] # - [0x0106C980, .bss, mapModel] - # - [0x0106C980, .bss, code_83340] + # - [0x0106C980, .bss, propModelList] # - [0x0106C980, .bss, gc/section] # - [0x0106C980, .bss, gc/sky] # - [0x0106C980, .bss, gc/transition] diff --git a/decompressed.us.v10.yaml b/decompressed.us.v10.yaml index f27b9d75..f661f16d 100644 --- a/decompressed.us.v10.yaml +++ b/decompressed.us.v10.yaml @@ -769,7 +769,7 @@ segments: - [0xFD00C0, c, fx/airscore] - [0xFD08E0, c, code_7AF80] - [0xFD7960, c, mapModel] - - [0xFD8CA0, c, code_83340] + - [0xFD8CA0, c, propModelList] - [0xFD96D0, c, gc/section] - [0xFD9A30, c, gc/sky] - [0xFD9DD0, c, gc/transition] @@ -1044,7 +1044,7 @@ segments: - [0x1039330, .data, fx/airscore] - [0x1039380, .data, code_7AF80] - [0x10395B0, .data, mapModel] - - [0x103A1D0, .data, code_83340] + - [0x103A1D0, .data, propModelList] - [0x103A1E0, .data, gc/section] - [0x103A710, .data, gc/sky] - [0x103AB20, .data, gc/transition] @@ -1291,7 +1291,7 @@ segments: - [0x1045E60, .rodata, fx/airscore] - [0x1045E80, .rodata, code_7AF80] - [0x1045F40, .rodata, mapModel] - - [0x1046100, .rodata, code_83340] + - [0x1046100, .rodata, propModelList] - [0x1046110, .rodata, gc/section] - [0x1046E10, .rodata, gc/sky] - [0x1046E20, .rodata, gc/transition] @@ -1558,7 +1558,7 @@ segments: - [0x1048560, .bss, fx/airscore] - [0x1048560, .bss, code_7AF80] - [0x1048560, .bss, mapModel] - - [0x1048560, .bss, code_83340] + - [0x1048560, .bss, propModelList] - [0x1048560, .bss, gc/section] - [0x1048560, .bss, gc/sky] - [0x1048560, .bss, gc/transition] diff --git a/include/core1/core1.h b/include/core1/core1.h index a6ef1e11..c5fcc653 100644 --- a/include/core1/core1.h +++ b/include/core1/core1.h @@ -100,7 +100,7 @@ extern u16 gFramebuffers[2][DEFAULT_FRAMEBUFFER_WIDTH * DEFAULT_FRAMEBUFFER_HEIG void func_80253550(void); void func_8025357C(void); -void func_802535A8(Gfx **arg0, Gfx **arg1, UNK_TYPE(s32) arg2, UNK_TYPE(s32) arg3); +void func_802535A8(Acmd *arg0, Acmd*arg1, OSMesgQueue *arg2, UNK_TYPE(s32) arg3); void func_80253640(Gfx ** gdl, void *arg1); void scissorBox_SetForGameMode(Gfx **gdl, s32 framebuffer_idx); void setupScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_address); diff --git a/include/core2/file.h b/include/core2/file.h index 2464f814..7d6aff50 100644 --- a/include/core2/file.h +++ b/include/core2/file.h @@ -43,7 +43,7 @@ void file_getShort(File *file, s16 *dst); void file_getNShorts(File *file, s16 *dst, s32 cnt); bool file_isNextByteExpected(File *file, s32 expected); bool file_getByte_ifExpected(File *file, s32 expected, u8 *dst); -bool file_getNBytes_ifExpected(File *file, s32 expected, u8 *dst, s32 cnt); +bool file_getNBytes_ifExpected(File *file, s32 expected, void *dst, s32 cnt); bool file_getFloat_ifExpected(File *file, s32 expected, f32 *dst); bool file_getNFloats_ifExpected(File *file, s32 expected, f32 *dst, s32 cnt); bool file_getWord_ifExpected(File *file, s32 expected, s32 *dst); diff --git a/include/functions.h b/include/functions.h index bc28e861..2510ff03 100644 --- a/include/functions.h +++ b/include/functions.h @@ -326,7 +326,7 @@ extern s32 func_802F9AA8(enum sfx_e); Actor * func_803055E0(enum actor_e id, s32 pos[3], s32 arg2, s32 arg3, s32 arg4); Actor * __actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 yaw); f32 mapModel_getFloorY(f32[3]); -BKModelBin *func_8030A428(s32); +BKModelBin *propModelList_getModel(s32); u8 sfxsource_createSfxsourceAndReturnIndex(void); void sfxsource_setSfxId(u8 indx, enum sfx_e uid); void sfxsource_playSfxAtVolume(u8, f32); diff --git a/include/prop.h b/include/prop.h index 5e4e2520..fa4b26f2 100644 --- a/include/prop.h +++ b/include/prop.h @@ -9,44 +9,42 @@ #include "core2/skeletalanim.h" typedef struct sprite_prop_s{ - u32 unk0_31:0xC; + u32 sprite_index:0xC; u32 unk0_19:0x1; - u32 unk0_18:0x3; - u32 unk0_15:0x3; - u32 unk0_12:0x3; - u32 unk0_9:0x8; - u32 unk0_1:0x1; - u32 unk0_0:0x1; + u32 r:0x3; + u32 b:0x3; + u32 g:0x3; + u32 scale:0x8; + u32 mirrored:0x1; s16 unk4[3]; - u16 unk8_15: 5; + u16 frame: 5; u16 unk8_10: 5; u16 unk8_5: 1; u16 unk8_4: 1; u16 unk8_3: 1; u16 unk8_2: 1; - u16 unk8_1:1; - u16 unk8_0:1; + u16 is_3d:1; + u16 is_actor:1; } SpriteProp; typedef struct model_prop_s{ union{ u16 unk0; struct{ - u16 unk0_31:12; + u16 model_index:12; u16 pad0_19:4; }; }; - u8 unk0_15; - u8 unk0_7; - s16 unk4[3]; - u8 unkA; + u8 yaw; + u8 roll; + s16 position[3]; + u8 scale; u8 padB_7 :2; u8 unkB_5 :1; u8 unkB_4 :1; u8 padB_3 :4; } ModelProp; - typedef struct actor_prop_s{ union { struct { @@ -60,8 +58,8 @@ typedef struct actor_prop_s{ u16 unk8_4:1; u16 unk8_3:1; u16 unk8_2:1; - u16 unk8_1:1; - u16 unk8_0:1; + u16 is_3d:1; + u16 is_actor:1; }; s32 words[3]; }; @@ -335,8 +333,8 @@ typedef union prop_s u16 unk8_4: 1; u16 unk8_3: 1; u16 unk8_2: 1; - u16 unk8_1: 1; - u16 markerFlag: 1; + u16 is_3d: 1; + u16 is_actor: 1; }; } Prop; diff --git a/manual_syms.pal.txt b/manual_syms.pal.txt index b4579dcc..35e37c82 100644 --- a/manual_syms.pal.txt +++ b/manual_syms.pal.txt @@ -270,7 +270,7 @@ func_80305344 = 0x803054e4; func_803084F0 = 0x80308690; func_80309B48 = 0x80309ce8; func_80309D58 = 0x80309ef8; -func_8030A850 = 0x8030a9f0; +propModelList_flush = 0x8030a9f0; gctransition_done = 0x8030bf38; gctransition_8030BDC0 = 0x8030bf60; gctransition_reset = 0x8030c07c; diff --git a/src/FP/ch/twinklymuncher.c b/src/FP/ch/twinklymuncher.c index 2ae1d40c..5363bf50 100644 --- a/src/FP/ch/twinklymuncher.c +++ b/src/FP/ch/twinklymuncher.c @@ -76,7 +76,7 @@ Actor *func_8038DF34(Actor *this){ this->marker->unk38[2] = sp18[2] - this->position[2]; prop = func_80320EB0(this->marker, 75.0f, 1); - if(prop && prop->unk8_0){ + if(prop && prop->is_actor){ other = marker_getActor(prop->marker); marker_id = other->marker->id; if( marker_id == MARKER_200_TWINKLY_BLUE diff --git a/src/GV/ch/trunker.c b/src/GV/ch/trunker.c index 0ad21a0e..8fb1f553 100644 --- a/src/GV/ch/trunker.c +++ b/src/GV/ch/trunker.c @@ -48,7 +48,7 @@ Actor *chTrucker_draw(ActorMarker *this_marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) sp2C[1] = this->yaw + 220.0f; sp2C[2] = this->roll; modelRender_setDepthMode(MODEL_RENDER_DEPTH_COMPARE); - modelRender_draw(gfx, mtx, sp38, sp2C, 1.0f, NULL, func_8030A428(3)); + modelRender_draw(gfx, mtx, sp38, sp2C, 1.0f, NULL, propModelList_getModel(3)); return this; } diff --git a/src/MM/ch/orange.c b/src/MM/ch/orange.c index cc97b618..72150533 100644 --- a/src/MM/ch/orange.c +++ b/src/MM/ch/orange.c @@ -95,7 +95,7 @@ Actor *chorange_draw(ActorMarker *this, Gfx **dl, Mtx **mptr, Vtx **vtx) { modelRender_setAlpha((s32) MIN(255.0f, actorPtr->lifetime_value)); modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL); - modelRender_draw(dl, mptr, position, rotation, actorPtr->actor_specific_1_f, sp60, func_8030A428(0x18)); + modelRender_draw(dl, mptr, position, rotation, actorPtr->actor_specific_1_f, sp60, propModelList_getModel(0x18)); actorPtr->position_y -= 1.9; if (actorPtr->actor_specific_1_f < 2.428) { diff --git a/src/TTC/ma/castle.c b/src/TTC/ma/castle.c index 892afa45..00f72b63 100644 --- a/src/TTC/ma/castle.c +++ b/src/TTC/ma/castle.c @@ -11,9 +11,6 @@ extern BKModel *mapModel_getModel(s32); extern u8 gCompletedBottleBonusGames[7]; /* .h */ -static void __maCastle_resetSecretCheatCodeProgress(void); -static u32 __maCastle_scrambleAddressForSecretCheatCode(); - typedef struct { u8 *code; @@ -43,7 +40,12 @@ typedef struct s16 maxId; } BannedCheatCodeRange; + +static void __maCastle_resetSecretCheatCodeProgress(void); +static u32 __maCastle_scrambleAddressForSecretCheatCode(); static s32 __maCastle_getNumberOfBannedCheatCodesEntered(); +static bool __maCastle_isFloorTileValidForSecretCheatCode(LetterFloorTile *floor_tile); +static bool __maCastle_isCurrentSecretCheatCodeCharacter0(); /* .data */ static s32 sSecretCheatCodeRelatedValue = NULL; diff --git a/src/core1/code_15B30.c b/src/core1/code_15B30.c index c399068b..aeb96534 100644 --- a/src/core1/code_15B30.c +++ b/src/core1/code_15B30.c @@ -27,7 +27,7 @@ void func_8025357C(void){ osSendMesg(&D_802831F0, NULL, OS_MESG_BLOCK); } -void func_802535A8(Gfx **arg0, Gfx **arg1, UNK_TYPE(s32) arg2, UNK_TYPE(s32) arg3) { +void func_802535A8(Acmd *arg0, Acmd *arg1, OSMesgQueue *arg2, UNK_TYPE(s32) arg3) { Struct_Core1_15B30 *sp1C; func_80253550(); diff --git a/src/core1/code_1D00.c b/src/core1/code_1D00.c index 1787f63e..a8b90efb 100644 --- a/src/core1/code_1D00.c +++ b/src/core1/code_1D00.c @@ -40,10 +40,6 @@ typedef struct Struct_1D00_3_s{ u32 unk10; } Struct_1D00_3; -typedef struct{ - u8 pad0[0x18]; -}Struct_core1_1D00_4; - typedef struct struct_core1_1D00_5_s{ struct struct_core1_1D00_5_s * next; u8 type; @@ -154,7 +150,7 @@ s32 D_8027D004; OSMesgQueue D_8027D008; OSMesg D_8027D020[3000/FRAMERATE]; OSIoMesg D_8027D0E8; -Struct_core1_1D00_4 D_8027D100[3000/FRAMERATE]; +OSIoMesg D_8027D100[3000/FRAMERATE]; struct { u8 unk0; Struct_1D00_3 *unk4; @@ -474,9 +470,9 @@ s32 func_80240204(s32 addr, s32 len, void *state){ return osVirtualToPhysical(D_8027D5B0.unk4); } D_8027D5B0.unk8 = phi_s0->unk0.next; - alUnlink(phi_s0); + alUnlink(&phi_s0->unk0); if (sp30 != NULL) { - alLink(phi_s0, sp30); + alLink(&phi_s0->unk0, &sp30->unk0); } else { phi_v0 = D_8027D5B0.unk4; if (phi_v0 != NULL) { @@ -559,7 +555,7 @@ s32 func_80240204(s32 addr, s32 len, void *state){ void *func_802403B8(void *state) { if (D_8027D5B0.unk0 == 0) { D_8027D5B0.unk4 = NULL; - D_8027D5B0.unk8 = &D_8027D5C0; + D_8027D5B0.unk8 = D_8027D5C0; D_8027D5B0.unk0 = 1; } *(void **)state = &D_8027D5B0; @@ -591,9 +587,9 @@ void func_802403F0(void) { phi_s1 = (Struct_1D00_3 *)phi_s0_2->unk0.next; if (phi_s0_2->unkC + 1 < D_8027DCC8) { if (phi_s0_2 == D_8027D5B0.unk4) { - D_8027D5B0.unk4 = phi_s0_2->unk0.next; + D_8027D5B0.unk4 = (Struct_1D00_3 *)phi_s0_2->unk0.next; } - alUnlink(phi_s0_2); + alUnlink(&phi_s0_2->unk0); if (D_8027D5B0.unk8 != NULL) { alLink(&phi_s0_2->unk0, &D_8027D5B0.unk8->unk0); } else { diff --git a/src/core1/memory.c b/src/core1/memory.c index 4ce2dbeb..9586f302 100644 --- a/src/core1/memory.c +++ b/src/core1/memory.c @@ -347,7 +347,7 @@ void *malloc(s32 size){ D_80283234 = NULL; func_803306C8(2); if(!func_80254B84(0)) - func_8030A850(2); + propModelList_flush(2); if(!func_80254B84(0)) animCache_flushStale(); @@ -364,7 +364,7 @@ void *malloc(s32 size){ func_803306C8(3); //modelCache if(!func_80254B84(0)) - func_8030A850(3); //propModelCache + propModelList_flush(3); //propModelCache if(!func_80254B84(0)) func_8032AD7C(2); //actorArray diff --git a/src/core2/ba/marker.c b/src/core2/ba/marker.c index e5a73e8c..f0df9374 100644 --- a/src/core2/ba/marker.c +++ b/src/core2/ba/marker.c @@ -820,9 +820,9 @@ void __baMarker_resolveCollision(Prop *other_prop){ func_8032B258(actor, obj_collision_type); } } - else if(other_prop->unk8_1)//L8028D0B0 //ModelProp + else if(other_prop->is_3d)//L8028D0B0 //ModelProp { - tmp2 = other_prop->modelProp.unk0_31 + 0x2D1; + tmp2 = other_prop->modelProp.model_index + 0x2D1; switch (tmp2) { case 0x2E8: @@ -837,7 +837,7 @@ void __baMarker_resolveCollision(Prop *other_prop){ } } else{//L8028D10C //SpriteProp - tmp3 = other_prop->spriteProp.unk0_31 + 0x572; + tmp3 = other_prop->spriteProp.sprite_index + 0x572; switch (tmp3) { case 0x6D6: //L8028D144 @@ -927,7 +927,7 @@ void baMarker_update(void){ func_80320ED8(playerMarker, temp_s0_2[i], 1); while(other_prop = func_8032F528()){//L8028D480 if(!other_prop->unk8_2){ - if(!D_8037BF8C && other_prop->markerFlag && other_prop->unk8_1){ + if(!D_8037BF8C && other_prop->is_actor && other_prop->is_3d){ D_8037BF8C = other_prop->actorProp.marker; } __baMarker_resolveCollision(other_prop); diff --git a/src/core2/ch/collectible.c b/src/core2/ch/collectible.c index 2b190c99..9cb4d101 100644 --- a/src/core2/ch/collectible.c +++ b/src/core2/ch/collectible.c @@ -97,7 +97,7 @@ s32 chCollectible_collectEgg(ActorProp *arg0){ Actor *actPtr = NULL; if(arg0 != NULL){ fxSparkle_blueEgg(&arg0->x); - if(arg0->unk8_0) + if(arg0->is_actor) actPtr = marker_getActor(arg0->marker); } chCollectible_collectItem(actPtr, FILEPROG_5_BLUE_EGG_TEXT, 0xD9E, COMUSIC_C_EGG_COLLECTED, 0xD, 2.0f); @@ -106,7 +106,7 @@ s32 chCollectible_collectEgg(ActorProp *arg0){ void chCollectible_collectRedFeather(ActorProp *arg0){ Actor *actPtr = NULL; fxSparkle_redFeather(&arg0->x); - if(arg0->unk8_0) + if(arg0->is_actor) actPtr = marker_getActor(arg0->marker); chCollectible_collectItem(actPtr, FILEPROG_6_RED_FEATHER_TEXT, 0xD9F, COMUSIC_B_RED_FEATHER_COLLECTED, 0xF, 4.0f); } @@ -114,7 +114,7 @@ void chCollectible_collectRedFeather(ActorProp *arg0){ void chCollectible_collectGoldFeather(ActorProp *arg0){ Actor *actPtr = NULL; fxSparkle_goldFeather(&arg0->x); - if(arg0->unk8_0) + if(arg0->is_actor) actPtr = marker_getActor(arg0->marker); chCollectible_collectItem(actPtr, FILEPROG_7_GOLD_FEATHER_TEXT, 0xDA0, COMUSIC_14_GOLD_FEATHER_COLLECTED, ITEM_10_GOLD_FEATHER, 6.0f); } diff --git a/src/core2/code_5BEB0.c b/src/core2/code_5BEB0.c index ca102b92..c065f44e 100644 --- a/src/core2/code_5BEB0.c +++ b/src/core2/code_5BEB0.c @@ -57,7 +57,7 @@ void mapSavestate_save(enum map_e map) valPtr = (u32 *) D_8037E650[map]; *valPtr = mapSpecificFlags_getAll(); iBit = 0x20; - func_80308230(1); + cubeList_sort(1); func_803083B0(-1); for (reg_s4 = func_803083B0(-2); reg_s4 != (-1); reg_s4 = func_803083B0(-2)) { @@ -96,7 +96,7 @@ void mapSavestate_apply(enum map_e map_id) { flag_ptr = reinterpret_cast(u32*, D_8037E650[map_id]); mapSpecificFlags_setAll(*flag_ptr); iBit += 8 * sizeof(u32); - func_80308230(1); + cubeList_sort(1); func_803083B0(-1); while ( @@ -105,7 +105,7 @@ void mapSavestate_apply(enum map_e map_id) { ) { iBit++; } - func_80308230(0); + cubeList_sort(0); actor_list_ptr = (ActorListSaveState *)D_8037E650[map_id] + (((iBit + (0x80 - 1)) >> 7) * 4); func_8032A09C(D_8037E650[map_id], actor_list_ptr); diff --git a/src/core2/code_5FD90.c b/src/core2/code_5FD90.c index c0c523d9..86b42141 100644 --- a/src/core2/code_5FD90.c +++ b/src/core2/code_5FD90.c @@ -405,18 +405,18 @@ BKCollisionTri *func_802E76B0(BKCollisionList *collisionList, BKVertexList *vert return result_collision; } -BKCollisionTri *func_802E805C(BKCollisionList *collision_list, BKVertexList *vtxList, f32 arg2[3], f32 arg3[3], f32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8){ +BKCollisionTri *func_802E805C(BKCollisionList *collision_list, BKVertexList *vtxList, f32 arg2[3], f32 rotation[3], f32 scale, s32 arg5, s32 arg6, s32 arg7, s32 arg8){ f32 sp44[3]; f32 sp38[3]; int sp34; int i; - if(!func_802E74A0(arg2, vtxList->global_norm*arg4, arg5, arg6)){ + if(!func_802E74A0(arg2, vtxList->global_norm*scale, arg5, arg6)){ return 0; } else{ mlMtxIdent(); - func_80252CC4(arg2, arg3, arg4, 0); + func_80252CC4(arg2, rotation, scale, 0); mlMtx_apply_vec3f(sp44, arg5); mlMtx_apply_vec3f(sp38, arg6); sp34 = func_802E76B0(collision_list, vtxList, sp44, sp38, arg7, arg8); @@ -425,15 +425,15 @@ BKCollisionTri *func_802E805C(BKCollisionList *collision_list, BKVertexList *vtx } else{ mlMtxIdent(); - func_80252C08(arg2, arg3, arg4, NULL); + func_80252C08(arg2, rotation, scale, NULL); mlMtx_apply_vec3f(arg6, sp38); mlMtxIdent(); - func_80252C08(NULL, arg3, 1.0f, 0); + func_80252C08(NULL, rotation, 1.0f, 0); mlMtx_apply_vec3f(arg7, arg7); mlMtxIdent(); - func_80252C08(arg2, arg3, arg4, 0); + func_80252C08(arg2, rotation, scale, 0); for(i = 0; i < 3; i++){ mlMtx_apply_vec3f(D_8037EAA8[i], D_8037EAA8[i]); diff --git a/src/core2/code_7AF80.c b/src/core2/code_7AF80.c index cd7a3d88..5a1c9775 100644 --- a/src/core2/code_7AF80.c +++ b/src/core2/code_7AF80.c @@ -518,7 +518,7 @@ static Cube *__code7AF80_getCubeAtPosition(s32 position[3]) { (position[2] - sCubeList.min[2]) * sCubeList.stride[1]; } -Cube *cube_atPosition_s32(s32 position[3]) { +Cube *cubeList_GetCubeAtPosition_s32(s32 position[3]) { s32 sp1C[3]; s32 i; // Cube *out; @@ -542,13 +542,13 @@ Cube *cube_atPosition_s32(s32 position[3]) { + diff[2]*sCubeList.stride[1]; } -Cube *cube_atPosition_f32(f32 position[3]){ +Cube *cubeList_GetCubeAtPosition_f32(f32 position[3]){ s32 pos_s32[3]; pos_s32[0] = (s32)position[0]; pos_s32[1] = (s32)position[1]; pos_s32[2] = (s32)position[2]; - return cube_atPosition_s32(pos_s32); + return cubeList_GetCubeAtPosition_s32(pos_s32); } Cube *func_8030364C(void){ @@ -692,7 +692,7 @@ void func_80303C54(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *arg while (*arg4 != -1){ phi_s0 = func_803322F0(cube, marker, arg2, arg3, arg4); if (phi_s0 != NULL) { - if (phi_s0->unk8_0 && phi_s0->marker->unk58 != NULL) { + if (phi_s0->is_actor && phi_s0->marker->unk58 != NULL) { if (phi_s0->marker->unk58(phi_s0->marker, marker) == 0) { phi_s0 = NULL; } @@ -2126,19 +2126,19 @@ u32 func_80307EA8(s32 arg0, s32 position[3], s32 *arg2, s32 *arg3) { NodeProp *func_803080C8(s32 arg0) { s32 sp3C[3]; - u32 var_v1; - Cube *temp_v0; + u32 i_prop; + Cube *current_cube; for(sp3C[1] = sCubeList.min[1]; sp3C[1] <= sCubeList.max[1]; sp3C[1]++){ if(func_80305C30(sp3C[1] - sCubeList.min[1])){ for(sp3C[0] = sCubeList.min[0]; sp3C[0] <= sCubeList.max[0]; sp3C[0]++){ for(sp3C[2] = sCubeList.min[2]; sp3C[2] <= sCubeList.max[2]; sp3C[2]++){ - temp_v0 = __code7AF80_getCubeAtPosition(sp3C); - if (temp_v0 != NULL) { - for(var_v1 = 0; var_v1 < temp_v0->prop1Cnt; var_v1++){ - if (arg0 == temp_v0->prop1Ptr[var_v1].unk10_31) { - D_8036A9DC = temp_v0; - return &temp_v0->prop1Ptr[var_v1]; + current_cube = __code7AF80_getCubeAtPosition(sp3C); + if (current_cube != NULL) { + for(i_prop = 0; i_prop < current_cube->prop1Cnt; i_prop++){ + if (arg0 == current_cube->prop1Ptr[i_prop].unk10_31) { + D_8036A9DC = current_cube; + return ¤t_cube->prop1Ptr[i_prop]; } } @@ -2155,13 +2155,13 @@ Cube *func_80308224(void){ return D_8036A9DC; } -void func_80308230(s32 arg0) { +void cubeList_sort(s32 absolute_positon) { Cube *iCube; for(iCube = sCubeList.cubes; iCube < sCubeList.cubes + sCubeList.cubeCnt; iCube++){ - if (arg0 == 0) { - func_8032D158(iCube); //sort cube props (dist from viewport) + if (absolute_positon == 0) { + cube_sortRelative(iCube); //sort cube props (dist from viewport) } else { - func_8032D120(iCube); //sort cube props (dist from origin) + cube_sortAbsolute(iCube); //sort cube props (dist from origin) } } } @@ -2171,7 +2171,7 @@ bool func_803082D8(Cube *arg0, s32 *arg1, bool arg2, bool arg3) { bool var_a0; var_v0 = arg0->prop2Ptr + *arg1; - while ((var_v0->markerFlag == 1) && (*arg1 < arg0->prop2Cnt)) { + while ((var_v0->is_actor == 1) && (*arg1 < arg0->prop2Cnt)) { (*arg1)++; var_v0++; } @@ -2435,7 +2435,7 @@ void func_80308D2C(Gfx **gfx, Mtx **mtx, Vtx **vtx) { cube = &sCubeList.cubes[D_80382150[phi_s4]]; if (viewport_cube_isInFrustum(cube)) { viewport_getPosition_vec3w(vp_pos); - vp_cube_index = cube_atPosition_s32(vp_pos) - sCubeList.cubes; + vp_cube_index = cubeList_GetCubeAtPosition_s32(vp_pos) - sCubeList.cubes; for(phi_s0 = 0; (phi_s0 < D_80382150[phi_s4 + 1]) && (vp_cube_index != D_80382150[phi_s0 + 2]); phi_s0++) { } if (phi_s0 < D_80382150[phi_s4 + 1]) { diff --git a/src/core2/code_83340.c b/src/core2/code_83340.c deleted file mode 100644 index ef90919e..00000000 --- a/src/core2/code_83340.c +++ /dev/null @@ -1,224 +0,0 @@ -#include -#include "functions.h" -#include "variables.h" - - -extern f32 func_8033A244(f32); - -typedef struct{ - BKModelBin *unk0; - s32 unk4; - f32 unk8; -}struct_7AF80_0; - -typedef struct{ - BKSprite *unk0; - BKSpriteDisplayData *unk4; - s32 unk8; - f32 unkC; -}struct_7AF80_1; - -BKModelBin *func_8030A428(s32 arg0); - -/* .data */ -s32 D_8036B800 = 0; - -/* .bss */ -struct_7AF80_0 *D_80382390; //prop models ??? -struct_7AF80_1 *D_80382394; //prop_sprites ??? - -BKSpriteDisplayData *func_8030A4D4(s32 arg0); - - -void func_8030A2D0(Gfx **gfx, Mtx **mtx, Vtx **vtx, f32 arg3[3], f32 arg4[3], f32 arg5, s32 arg6, Cube* arg7){ - BKModelBin * sp2C; - - sp2C = func_8030A428(arg6); - func_8033A244(3700.0f); - func_8033A28C(1); - modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL); - func_8033A1FC(); - modelRender_draw(gfx, mtx, arg3, arg4, arg5, NULL, sp2C); -} - -void func_8030A350(Gfx **gfx, Mtx **mtx, Vtx **Vtx, f32 arg3[3], f32 arg4, s32 arg5, Cube *arg6, s32 arg7, s32 arg8, s32 arg9, s32 argA, s32 argB) { - f32 sp2C[3]; - BKSpriteDisplayData *sp28; - - sp28 = func_8030A4D4(arg5); - sp2C[0] = arg4; - sp2C[1] = arg4; - sp2C[2] = arg4; - func_80338338(0xFF - (arg7 * 0x10), 0xFF - (arg8 * 0x10), 0xFF - (arg9 * 0x10)); - if (func_80344C20(sp28) & 0xB00) { - func_803382E4(0xB); - } else { - func_803382E4(0xE); - } - func_80335D30(gfx); - func_80344138(sp28, argB, argA, arg3, sp2C, gfx, mtx); - func_8033687C(gfx); -} - -BKModelBin *func_8030A428(s32 arg0){ - if(D_80382390[arg0].unk0 == NULL){ - D_80382390[arg0].unk0 = assetcache_get(0x2d1 + arg0); - } - D_80382390[arg0].unk4 = globalTimer_getTime(); - return D_80382390[arg0].unk0; -} - -BKModelBin *func_8030A4B4(s32 arg0){ - return D_80382390[arg0].unk0; -} - -BKSpriteDisplayData *func_8030A4D4(s32 arg0) -{ - - if (((struct_7AF80_1 *)((s32)D_80382394 + arg0*sizeof(struct_7AF80_1)))->unk0 == 0){ - ((struct_7AF80_1 *)((s32)D_80382394 + arg0*sizeof(struct_7AF80_1)))->unk0 = func_8033B6C4(arg0 + 0x572, &((struct_7AF80_1 *)((s32)D_80382394 + arg0*sizeof(struct_7AF80_1)))->unk4); - } - D_80382394[arg0].unk8 = globalTimer_getTime(); - return D_80382394[arg0].unk4; -} - -BKSprite *func_8030A55C(s32 arg0){ - func_8030A4D4(arg0); - return D_80382394[arg0].unk0; -} - -f32 func_8030A590(Prop *arg0){ - if(arg0->unk8_1){ - ModelProp* ModelProp = &arg0->modelProp; - return D_80382390[arg0->spriteProp.unk0_31].unk8; - } - else{//L8030A65C - SpriteProp *spriteProp = &arg0->spriteProp; - return D_80382394[spriteProp->unk0_31].unkC; - } -} - -void func_8030A5EC(Prop *arg0, f32 arg1){ - if(arg0->unk8_1){ - ModelProp* ModelProp = &arg0->modelProp; - D_80382390[arg0->spriteProp.unk0_31].unk8 = (f32)ModelProp->unkA*arg1/100.0f; - } - else{//L8030A65C - SpriteProp *spriteProp = &arg0->spriteProp; - D_80382394[spriteProp->unk0_31].unkC = (f32)spriteProp->unk0_9*arg1/100.0f; - } -} - -void func_8030A6B0(void){//clear - struct_7AF80_0* iPtr; - struct_7AF80_1* jPtr; - - for(iPtr = D_80382390; iPtr < &D_80382390[0x2A2]; iPtr++){ - if(iPtr->unk0){ - assetcache_release(iPtr->unk0); - } - } - for(jPtr = D_80382394; jPtr < &D_80382394[0x168]; jPtr++){ - if(jPtr->unk0){ - func_8033B338(&jPtr->unk0, &jPtr->unk4); - } - } - free(D_80382390); - D_80382390 = NULL; - free(D_80382394); - D_80382394 = NULL; -} - -void func_8030A78C(void){//init - struct_7AF80_0* iPtr; - struct_7AF80_1* jPtr; - - D_80382390 = (struct_7AF80_0 *)malloc(0x2A2 * sizeof(struct_7AF80_0)); - D_80382394 = (struct_7AF80_1 *)malloc(0x168 * sizeof(struct_7AF80_1)); - D_8036B800 = 0; - for(iPtr = D_80382390; iPtr < &D_80382390[0x2A2]; iPtr++){ - iPtr->unk0 = NULL; - iPtr->unk8 = 0.0f; - } - for(jPtr = D_80382394; jPtr < &D_80382394[0x168]; jPtr++){ - jPtr->unk0 = NULL; - jPtr->unkC = 0.0f; - } -} - -void func_8030A850(s32 arg0) { - static s32 D_8036B804 = 0; - static s32 D_8036B808 = 0; - s32 temp_s3; - s32 var_s0; - struct_7AF80_0 *sp3C; - struct_7AF80_1 *temp_a0_2; - - temp_s3 = globalTimer_getTime() - func_80255B08(arg0); - for(var_s0 = 0; (D_80382390 != NULL) && (var_s0 < ((arg0 == 1) ? 0x28 : 0x2A1)); var_s0++, D_8036B804 = (D_8036B804 >= 0x2A1)? 0: D_8036B804 + 1){ - sp3C = (struct_7AF80_0*)((u32)D_80382390 + sizeof(struct_7AF80_0)*D_8036B804); - if ((sp3C->unk0 != 0) && ((sp3C->unk4 < temp_s3) || (arg0 == 3))){ - assetcache_release(sp3C->unk0); - sp3C->unk0 = 0; - if( (arg0 != 1) && (func_80254BC4(1))){ - return; - } - } - } - - for(var_s0 = 0; (D_80382394 != NULL) && (var_s0 < ((arg0 == 1) ? 0x28 : 0x167)); var_s0++, D_8036B808 = (D_8036B808 >= 0x167)? 0: D_8036B808 + 1){ - temp_a0_2 = (struct_7AF80_1*)((u32)D_80382394 + sizeof(struct_7AF80_1)*D_8036B808); - if ((temp_a0_2->unk0 != 0) && ((temp_a0_2->unk8 < temp_s3) || (arg0 == 3))){ - func_8033B338(&temp_a0_2->unk0, &temp_a0_2->unk4); - if( (arg0 != 1) && (func_80254BC4(1))){ - return; - } - } - } -} - -void func_8030AA6C(void) { - BKModelBin *temp_a0; - s32 phi_s2; - - D_80382394 = (struct_7AF80_1 *) defrag(D_80382394); - D_80382390 = (struct_7AF80_0 *) defrag(D_80382390); - if (!func_802559A0() && !func_80255AE4() && D_80382390 != NULL) { - for(phi_s2 = 0x14; (phi_s2 != 0) && !func_80255AE4(); phi_s2--){ - D_8036B800++; - if (D_8036B800 >= 0x2A2) { - D_8036B800 = 0; - } - temp_a0 = D_80382390[D_8036B800].unk0; - if (temp_a0 != NULL && (func_802546E4(temp_a0) < 0x2AF8)) { - D_80382390[D_8036B800].unk0 = func_80255888(D_80382390[D_8036B800].unk0); - } - } - } -} - -void func_8030ABA4(void) { - s32 temp_lo; - s32 temp_t7; - struct_7AF80_1 *phi_s0; - s32 phi_s2; - struct_7AF80_0 *phi_s0_2; - - for(phi_s0 = D_80382394; phi_s0 < D_80382394 + 360; phi_s0++){ - if (phi_s0->unk0 != NULL) { - temp_t7 = phi_s0 - D_80382394; - func_8033B338(&phi_s0->unk0, &phi_s0->unk4); - phi_s2 = temp_t7 *sizeof(struct_7AF80_1); - *(BKSprite **)((s32)D_80382394 + phi_s2) = func_8033B6C4(temp_t7 + 0x572, (BKSpriteDisplayData **)((s32)D_80382394 + phi_s2 + 4)); - } - } - - for(phi_s0_2 = D_80382390; phi_s0_2 < D_80382390 + 674; phi_s0_2++){ - if(phi_s0_2->unk0 != NULL){ - temp_lo = phi_s0_2 - D_80382390; - assetcache_release(phi_s0_2->unk0); - D_80382390[temp_lo].unk0 = (BKModelBin *) assetcache_get(temp_lo + 0x2D1); - - } - } -} diff --git a/src/core2/code_91E10.c b/src/core2/code_91E10.c index 66e4bfa3..f6719872 100644 --- a/src/core2/code_91E10.c +++ b/src/core2/code_91E10.c @@ -38,7 +38,7 @@ typedef struct { } QuizQuestionBin; typedef struct{ - s32 answer_options[4][4]; // first dimension = zoombox index, second dimension = value (0-3), third dimension = answer + char *answer_options[4][4]; // first dimension = zoombox index, second dimension = value (0-3), third dimension = answer } QuizQuestionStruct; typedef struct { @@ -289,7 +289,7 @@ static bool __gcquiz_func_803192A4(enum ff_question_type_e q_type, s32 q_index, sD_803830E0->unkC = (QuizQuestionBin *) assetcache_get(quiz_question_index); } - char_iter = sD_803830E0->unkC; + char_iter = (char *)sD_803830E0->unkC; quiz_question_bin_unk0 = *(char_iter++); // NEXT quiz_question_bin_unk1 = *(char_iter++); // NEXT quiz_question_bin_unk2 = *(char_iter++); // NEXT @@ -312,7 +312,7 @@ static bool __gcquiz_func_803192A4(enum ff_question_type_e q_type, s32 q_index, char_iter += 2*code94620_func_8031B5B0(); // SKIP phi_v1 = *(char_iter++); // NEXT phi_v1 += (*(char_iter++) << 8); - char_iter = (s32)sD_803830E0->unkC + phi_v1; + char_iter = (char *)((s32)sD_803830E0->unkC + phi_v1); str_cnt = *(char_iter++); // NEXT char_iter = 5 for(phi_a1 = 0; phi_a1 < 4; phi_a1++){ @@ -404,10 +404,10 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){ gczoombox_func_803184C8(sD_803830E0->zoomboxes[i], (f32)sD_803830E0->unk17, 5, 2, __gcquiz_animation_duration(i), __gcquiz_isZero(i), 0); } } - timedFunc_set_1(0.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_3_UNKNOWN); - timedFunc_set_1(0.0f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 1); - timedFunc_set_1(0.2f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 2); - timedFunc_set_1(0.4f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 3); + timedFunc_set_1(0.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_3_UNKNOWN); + timedFunc_set_1(0.0f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 1); + timedFunc_set_1(0.2f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 2); + timedFunc_set_1(0.4f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 3); break; case GCQUIZ_STATE_3_UNKNOWN: @@ -445,7 +445,7 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){ } } } - timedFunc_set_1(1.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_8_UNKNOWN); + timedFunc_set_1(1.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_8_UNKNOWN); item_set(ITEM_6_HOURGLASS, FALSE); break; @@ -455,7 +455,7 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){ } else { comusic_playTrack(COMUSIC_2B_DING_B); } - timedFunc_set_1(1.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_9_UNKNOWN); + timedFunc_set_1(1.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_9_UNKNOWN); break; case GCQUIZ_STATE_9_UNKNOWN: diff --git a/src/core2/code_9E370.c b/src/core2/code_9E370.c index 84139508..dfe0e97b 100644 --- a/src/core2/code_9E370.c +++ b/src/core2/code_9E370.c @@ -1055,7 +1055,7 @@ static void __actor_free(ActorMarker *arg0, Actor *arg1){ marker_free(arg0); } -Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 (* pos)[3], s32 rot){ +Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 rot){ return __actor_spawnWithYaw_s32(id, pos, rot); } @@ -1095,12 +1095,12 @@ Actor *func_80328230(enum actor_e id, f32 pos[3], f32 rot[3]){ return actor; } -Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 (* pos)[3], s32 yaw){ +Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 pos[3], s32 yaw){ s32 sp24[3]; int i; for(i = 0; i< 3; i++){ - sp24[i] = (*pos)[i]; + sp24[i] = pos[i]; } return __actor_spawnWithYaw_s32(id, &sp24, yaw); diff --git a/src/core2/code_A4D00.c b/src/core2/code_A4D00.c index 9674d9e6..ec45a6dd 100644 --- a/src/core2/code_A4D00.c +++ b/src/core2/code_A4D00.c @@ -349,7 +349,7 @@ bool func_8032C850(Actor *actor, f32 arg1[3], s32 arg2, s32 arg3, bool nonactor) func_80320ED8(actor->marker, temp_f0 / 2, 2); actor->marker->collidable = stored_collidability; for (var_v1 = func_8032F528(); var_v1 != NULL; var_v1 = func_8032F528()) { - if (nonactor || (var_v1->markerFlag && (var_v1->actorProp.marker->id == actor->marker->id))) { + if (nonactor || (var_v1->is_actor && (var_v1->actorProp.marker->id == actor->marker->id))) { D_803833D0 = var_v1; actor->position[0] = (f32) arg1[0]; actor->position[1] = (f32) arg1[1]; diff --git a/src/core2/code_A5BC0.c b/src/core2/code_A5BC0.c index 30e64773..677ca62c 100644 --- a/src/core2/code_A5BC0.c +++ b/src/core2/code_A5BC0.c @@ -8,6 +8,10 @@ #define AssetCacheSize 0x3D5 +extern Cube *cubeList_GetCubeAtPosition_s32(s32 position[3]); +extern Cube *func_8030364C(void); +extern NodeProp *func_803080C8(s32); +extern Cube *func_80308224(void); extern int func_802E74A0(f32[3], f32, s32, s32); extern s32 func_802E9118(BKCollisionList * collision_list, BKVertexList *vtx_list, f32 arg2[3], s32 arg3, f32 arg4, f32 arg5[3], f32 arg6[3], f32 arg7, f32 arg8[3], s32 arg9, s32 argA); extern f32 vtxList_getGlobalNorm(BKVertexList *); @@ -17,9 +21,11 @@ extern void func_80340200(s32, f32[3], f32[3], f32, s32, s32, BKVertexList *, s3 extern s32 func_802E9DD8(BKCollisionList *collisionList, BKVertexList *vtxList, f32 arg2[3], f32 *arg3, f32 arg4, f32 arg5[3], f32 arg6, f32 arg7[3], s32 arg8); extern void *func_802EBAE0(UNK_TYPE(s32), f32 position[3], f32 rotation[3], f32 scale, UNK_TYPE(s32), UNK_TYPE(s32), UNK_TYPE(s32), f32, UNK_TYPE(s32)); extern BKCollisionTri *func_802E805C(BKCollisionList *, BKVertexList *, f32[3], f32[3], f32, f32[3], f32[3], f32[3], u32); +extern BKCollisionList *model_getCollisionList(BKModelBin *); -extern f32 func_8030A590(void); -extern void func_8030A5EC(Prop *, f32); + +extern f32 propModelList_getScale(Prop *); +extern void propModelList_setScale(Prop *, f32); Prop *func_80303F7C(s32, f32, s32, s32); s32 func_803058C0(f32); @@ -27,12 +33,12 @@ void func_80305CD8(s32, s32); void code_A5BC0_initCubePropActorProp(Cube*); ActorMarker * func_80332A60(void); extern void func_8032F3D4(s32 [3], ActorMarker *, s32); -extern void func_8030A350(Gfx **, Mtx **, Vtx **, f32[3], f32, s32, Cube*,s32 ,s32, s32, s32, s32); -extern void func_8030A2D0(Gfx **, Mtx **, Vtx **, f32[3], f32[3], f32, s32, Cube*); +extern void propModelList_drawSprite(Gfx **, Mtx **, Vtx **, f32[3], f32, s32, Cube*,s32 ,s32, s32, s32, s32); +extern void propModelList_drawModel(Gfx **, Mtx **, Vtx **, f32[3], f32[3], f32, s32, Cube*); s32 func_8032D9C0(Cube*, Prop*); void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3); void func_80332B2C(ActorMarker * arg0); -BKSprite *func_8030A55C(s32 arg0); +BKSprite *propModelList_getSprite(s32 arg0); typedef union{ struct{ @@ -74,7 +80,7 @@ s32 D_803833F0[3]; s32 D_803833FC; s32 D_80383400; Cube *D_80383404; -s32 D_80383408; +Prop *D_80383408; s32 D_8038340C; //BREAK??? @@ -92,7 +98,7 @@ s32 D_8038355C; /* .code */ // This function sorts a cube's props based on distance -void func_8032CB50(Cube *cube, bool global) { +static void __cube_sort(Cube *cube, bool global) { s32 ref_position[3]; Prop *var_v1; Prop *start_prop; @@ -178,9 +184,8 @@ void func_8032CD60(Prop *prop) { bool var_t5; s32 var_v1; - // if(prop->markerFlag){ var_v0 = ((u32)(((u16*)prop)[5]) & 1) ? func_80330F50(prop->actorProp.marker) - : func_8030A55C((u32)(((u16*)prop)[0]) >> 4); + : propModelList_getSprite((u32)(((u16*)prop)[0]) >> 4); if ((var_v0 != NULL) && ((var_v0->unkC.bit27 != 0))) { sp48 = var_v0->unkC.bit31; sp44 = var_v0->unkC.bit27; @@ -246,24 +251,24 @@ void func_8032CD60(Prop *prop) { var_v1 += (sp34) ? sp40 : -sp40; var_v1 = (var_v1 < 0) ? var_v1 +sp38 : var_v1 % sp38; - prop->spriteProp.unk8_15 = var_v1; + prop->spriteProp.frame = var_v1; if (((u32)(((u16*)prop)[5]) & 1)) { prop->spriteProp.unk8_5 = sp3C; } else{ - prop->spriteProp.unk0_1 = sp3C; + prop->spriteProp.mirrored = sp3C; } } } -void func_8032D120(Cube *cube){ +void cube_sortAbsolute(Cube *cube){ if(cube->prop2Cnt >= 2) - func_8032CB50(cube, 1); + __cube_sort(cube, 1); } -void func_8032D158(Cube *cube){ +void cube_sortRelative(Cube *cube){ if(cube->prop2Cnt >= 2) - func_8032CB50(cube, 0); + __cube_sort(cube, 0); } static void __marker_draw(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx){ @@ -319,33 +324,33 @@ void func_8032D3A8(void){ void func_8032D3D8(Gfx **gdl, Mtx **mptr, Vtx **vptr){ int i; for(i = 0; i < vector_size(D_80383550); i++){ - __marker_draw(*(u32*) vector_at(D_80383550, i), gdl, mptr, vptr); + __marker_draw(*(ActorMarker **) vector_at(D_80383550, i), gdl, mptr, vptr); } } void func_8032D474(Gfx **gdl, Mtx **mptr, Vtx **vptr){ int i; for(i = 0; i < vector_size(D_80383554); i++){ - __marker_draw(*(u32*) vector_at(D_80383554, i), gdl, mptr, vptr); + __marker_draw(*(ActorMarker **) vector_at(D_80383554, i), gdl, mptr, vptr); } } void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){ Prop *iProp; int i; - f32 sp94[3]; - f32 sp88[3]; + f32 position[3]; + f32 rotation[3]; tmp_bitfield tmp_v0; int iOffset; ActorMarker **markerPtr; if(cube->prop2Cnt == 0 ) return; - func_8032CB50(cube, 0); + __cube_sort(cube, 0); iOffset = 0; for(i = 0; i < cube->prop2Cnt; i++){//L8032D5A0 iOffset = i * 0xC; - iProp = ((s32)cube->prop2Ptr + iOffset); + iProp = (Prop *)((s32)cube->prop2Ptr + iOffset); tmp_v0.word = *(u32 *)((s32)iProp + 0x8); if(!tmp_v0.unk4){ @@ -368,23 +373,23 @@ void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){ }//L8032D62C } else{//L8032D640 - sp94[0] = (f32)iProp->modelProp.unk4[0]; - sp94[1] = (f32)iProp->modelProp.unk4[1]; - sp94[2] = (f32)iProp->modelProp.unk4[2]; - if(iProp->unk8_1){ - sp88[0] = 0.0f; - sp88[1] = (f32)((s32)iProp->modelProp.unk0_15*2); - sp88[2] = (f32)((s32)iProp->modelProp.unk0_7*2); - func_8030A2D0(gfx, mtx, vtx, - sp94, sp88, (f32)iProp->modelProp.unkA/100.0, - iProp->modelProp.unk0_31, cube + position[0] = (f32)iProp->modelProp.position[0]; + position[1] = (f32)iProp->modelProp.position[1]; + position[2] = (f32)iProp->modelProp.position[2]; + if(iProp->is_3d){ + rotation[0] = 0.0f; + rotation[1] = (f32)((s32)iProp->modelProp.yaw*2); + rotation[2] = (f32)((s32)iProp->modelProp.roll*2); + propModelList_drawModel(gfx, mtx, vtx, + position, rotation, (f32)iProp->modelProp.scale/100.0, + iProp->modelProp.model_index, cube ); } else{//L8032D72C - func_8030A350( gfx, mtx, vtx, - sp94, (f32)iProp->spriteProp.unk0_9/100.0, iProp->spriteProp.unk0_31, cube, - iProp->spriteProp.unk0_18, iProp->spriteProp.unk0_15, iProp->spriteProp.unk0_12, - iProp->spriteProp.unk0_1, iProp->spriteProp.unk8_15 + propModelList_drawSprite( gfx, mtx, vtx, + position, (f32)iProp->spriteProp.scale/100.0, iProp->spriteProp.sprite_index, cube, + iProp->spriteProp.r, iProp->spriteProp.b, iProp->spriteProp.g, + iProp->spriteProp.mirrored, iProp->spriteProp.frame ); } }//L8032D7C4 @@ -404,7 +409,7 @@ Prop *__codeA5BC0_initProp2Ptr(Cube *cube) { cube->prop2Ptr = malloc(sizeof(Prop)); } sp1C = &cube->prop2Ptr[cube->prop2Cnt-1]; - sp1C->markerFlag = FALSE; + sp1C->is_actor = FALSE; code_A5BC0_initCubePropActorProp(cube); return sp1C; } @@ -427,7 +432,7 @@ s32 func_8032D9C0(Cube *cube, Prop* prop){ sp24 = 0; if(cube->prop2Cnt != 0){ - sp24 = prop->unk8_1; + sp24 = prop->is_3d; if(func_80305D14()){ func_80305CD8(func_803058C0(prop->unk4[1]), -1); } @@ -489,11 +494,11 @@ ActorMarker *func_8032DCAC(void){ SpriteProp *func_8032DCB8(Cube *cube) { SpriteProp *sp1C; - sp1C = __codeA5BC0_initProp2Ptr(cube); - sp1C->unk8_0 = FALSE; - sp1C->unk8_1 = FALSE; - sp1C->unk8_15 = 0; - sp1C->unk0_1 = 0; + sp1C = (SpriteProp *)__codeA5BC0_initProp2Ptr(cube); + sp1C->is_actor = FALSE; + sp1C->is_3d = FALSE; + sp1C->frame = 0; + sp1C->mirrored = 0; sp1C->unk8_10 = randf() * 32.0f; sp1C->unk8_3 = FALSE; sp1C->unk8_2 = FALSE; @@ -501,21 +506,22 @@ SpriteProp *func_8032DCB8(Cube *cube) { return sp1C; } -void func_8032DDD8(Cube *cube) { +ModelProp * func_8032DDD8(Cube *cube) { Prop *temp_v0; temp_v0 = __codeA5BC0_initProp2Ptr(cube); - temp_v0->markerFlag = FALSE; - temp_v0->unk8_1 = TRUE; + temp_v0->is_actor = FALSE; + temp_v0->is_3d = TRUE; temp_v0->unk8_5 = FALSE; temp_v0->unk8_3 = FALSE; temp_v0->unk8_2 = FALSE; temp_v0->unk8_4 = TRUE; + return (ModelProp *)temp_v0; } void func_8032DE2C(ModelProp *model_prop, enum asset_e sprite_id){ - model_prop->unk0_31 = sprite_id - 0x2d1; + model_prop->model_index = sprite_id - 0x2d1; } void func_8032DE48(ModelProp *model_prop, enum asset_e *model_id_ptr){\ @@ -523,37 +529,37 @@ void func_8032DE48(ModelProp *model_prop, enum asset_e *model_id_ptr){\ } void func_8032DE5C(SpriteProp *sprite_prop, enum asset_e sprite_id){ - sprite_prop->unk0_31 = sprite_id - 0x572; + sprite_prop->sprite_index = sprite_id - 0x572; } void func_8032DE78(SpriteProp *sprite_prop, enum asset_e *sprite_id_ptr){ - *sprite_id_ptr = sprite_prop->unk0_31 + 0x572; + *sprite_id_ptr = sprite_prop->sprite_index + 0x572; } void func_8032DE8C(SpriteProp *sprite_prop, s32 *arg1){ - *arg1 = sprite_prop->unk0_9; + *arg1 = sprite_prop->scale; } -void func_8032DEA0(SpriteProp *sprite_prop, s32 *arg1, s32 *arg2, s32 *arg3){ - *arg1 = sprite_prop->unk0_18; - *arg2 = sprite_prop->unk0_15; - *arg3 = sprite_prop->unk0_12; +void func_8032DEA0(SpriteProp *sprite_prop, s32 *r, s32 *b, s32 *g){ + *r = sprite_prop->r; + *b = sprite_prop->b; + *g = sprite_prop->g; } void func_8032DECC(SpriteProp *sprite_prop, s32 *arg1){ - *arg1 = ((*(u32*)sprite_prop) << 0x1e) >> 0x1f;//sprite_prop->unk0_0; + *arg1 = sprite_prop->mirrored; } void func_8032DEE0(SpriteProp *sprite_prop, s32 arg1){ - sprite_prop->unk0_9 = arg1; + sprite_prop->scale = arg1; } void func_8032DEFC(ModelProp *prop_prop, s32 arg1){ - prop_prop->unkA = arg1; + prop_prop->scale = arg1; } void func_8032DF04(ModelProp *prop_prop, s32 *arg1){ - *arg1 = prop_prop->unkA; + *arg1 = prop_prop->scale; } void func_8032DF10(SpriteProp *sprite_prop, bool *arg1){ @@ -561,23 +567,23 @@ void func_8032DF10(SpriteProp *sprite_prop, bool *arg1){ } void func_8032DF24(SpriteProp *sprite_prop, bool arg1){ - sprite_prop->unk0_1 = arg1; + sprite_prop->mirrored = arg1; } void func_8032DF40(ModelProp *prop_prop, s32 arg1, s32 arg2){ - prop_prop->unk0_15 = arg1; - prop_prop->unk0_7 = arg2; + prop_prop->yaw = arg1; + prop_prop->roll = arg2; } void func_8032DF4C(ModelProp *prop_prop, s32 *arg1, s32 *arg2){ - *arg1 = prop_prop->unk0_15; - *arg2 = prop_prop->unk0_7; + *arg1 = prop_prop->yaw; + *arg2 = prop_prop->roll; } -void func_8032DF60(SpriteProp *sprite_prop, s32 arg1, s32 arg2, s32 arg3){ - sprite_prop->unk0_18 = arg1; - sprite_prop->unk0_15 = arg2; - sprite_prop->unk0_12 = arg3; +void func_8032DF60(SpriteProp *sprite_prop, s32 r, s32 b, s32 g){ + sprite_prop->r = r; + sprite_prop->b = b; + sprite_prop->g = g; } void func_8032DFA0(SpriteProp *sprite_prop, bool arg1){ @@ -624,7 +630,7 @@ void cube_free(Cube *cube){ if(cube->prop2Ptr){ for(iProp = cube->prop2Ptr; iProp < cube->prop2Ptr +cube->prop2Cnt; iProp++){ - if(iProp->markerFlag){ + if(iProp->is_actor){ func_80332B2C(iProp->actorProp.marker); } } @@ -881,10 +887,10 @@ void code7AF80_initCubeFromFile(File *file_ptr, Cube *cube) { } else if (file_getByte_ifExpected(file_ptr, 6, &cube1_count)) { __codeA5BC0_freeCube1Pointer(cube, cube1_count); - cube->prop1Ptr = (OtherNode*) malloc(cube1_count * sizeof(OtherNode)); - node_prop_ptr = (OtherNode*) malloc(cube1_count * sizeof(OtherNode)); + cube->prop1Ptr = (NodeProp*) malloc(cube1_count * sizeof(OtherNode)); + node_prop_ptr = (NodeProp*) malloc(cube1_count * sizeof(OtherNode)); file_getNBytes_ifExpected(file_ptr, 7, node_prop_ptr, cube->prop1Cnt * sizeof(OtherNode)); - for(other_prop_ptr = node_prop_ptr; other_prop_ptr < (OtherNode*)&node_prop_ptr[cube1_count]; other_prop_ptr++){ + for(other_prop_ptr = (OtherNode *)node_prop_ptr; other_prop_ptr < (OtherNode*)&node_prop_ptr[cube1_count]; other_prop_ptr++){ if(other_prop_ptr->unk4_0 && !other_prop_ptr->unkC_0){ other_prop_ptr->unk4_17 = 0; other_prop_ptr->unk10_4 = 0; @@ -907,12 +913,12 @@ void code7AF80_initCubeFromFile(File *file_ptr, Cube *cube) { file_getNBytes_ifExpected(file_ptr, 9, cube->prop2Ptr, cube->prop2Cnt * sizeof(Prop)); for(var_v1_2 = cube->prop2Ptr; var_v1_2 < cube->prop2Ptr + sp47; var_v1_2++){ var_v1_2->unk8_4 = 1; - if (var_v1_2->unk8_1) { + if (var_v1_2->is_3d) { var_v1_2->unk8_5 = 0; } if (sp34) { - if (!(var_v1_2->markerFlag) && !(var_v1_2->unk8_1)){ - temp_v0_5 = var_v1_2->spriteProp.unk0_31 + 0x572; + if (!(var_v1_2->is_actor) && !(var_v1_2->is_3d)){ + temp_v0_5 = var_v1_2->spriteProp.sprite_index + 0x572; if((temp_v0_5 == 0x580) || (temp_v0_5 == 0x6D1) || (temp_v0_5 == 0x6D6) || (temp_v0_5 == 0x6D7)){ var_v1_2->unk8_4 = 0; } @@ -949,7 +955,7 @@ void func_8032EE2C(s32 arg0[3], s32 arg1, s32 arg2) { D_80383400 = arg1; D_803833FC = arg2 * arg2; D_80383404 = 0; - D_80383408 = 0; + D_80383408 = NULL; D_8038340C = 0; } @@ -963,9 +969,9 @@ void func_8032EE80(Cube *cube) { if ((cube->prop2Cnt != 0) && ((D_80383400 == 1) || (D_80383400 == 2))) { var_a1 = cube->prop2Ptr; for(var_t0 = 0; var_t0 < cube->prop2Cnt; var_t0++, var_a1++){ - if (!var_a1->markerFlag) { + if (!var_a1->is_actor) { if (((var_a1->unk4[0] - D_803833F0[0]) * (var_a1->unk4[0] - D_803833F0[0])) + ((var_a1->unk4[1] - D_803833F0[1]) * (var_a1->unk4[1] - D_803833F0[1])) + ((var_a1->unk4[2] - D_803833F0[2]) * (var_a1->unk4[2] - D_803833F0[2])) < D_803833FC) { - var_v0 = (var_a1->unk8_1) ? 2 : 1; + var_v0 = (var_a1->is_3d) ? 2 : 1; if (var_v0 == D_80383400) { D_803833FC = ((var_a1->unk4[0] - D_803833F0[0]) * (var_a1->unk4[0] - D_803833F0[0])) + ((var_a1->unk4[1] - D_803833F0[1]) * (var_a1->unk4[1] - D_803833F0[1])) + ((var_a1->unk4[2] - D_803833F0[2]) * (var_a1->unk4[2] - D_803833F0[2])); D_80383404 = cube; @@ -985,7 +991,7 @@ void func_8032EE80(Cube *cube) { if (D_80383558 == NULL || D_80383558(var_s0, D_8038355C)) { D_803833FC = ((var_s0->x - D_803833F0[0]) * (var_s0->x - D_803833F0[0])) + ((var_s0->y - D_803833F0[1]) * (var_s0->y - D_803833F0[1])) + ((var_s0->z - D_803833F0[2]) * (var_s0->z - D_803833F0[2])); D_80383404 = cube; - D_80383408 = var_s0; + D_80383408 = (Prop*)var_s0; D_8038340C = D_80383400; } } @@ -1013,7 +1019,7 @@ void func_8032F194(ActorMarker *marker, s32 position[3], Cube *cube) { v0->y = position[1]; v0->z = position[2]; - func_8032F21C(cube, position, marker, func_8032D9C0(marker->cubePtr, propPtr)); + func_8032F21C(cube, position, marker, func_8032D9C0(marker->cubePtr, (Prop *)propPtr)); propPtr = marker->propPtr; propPtr->words[1] = sp24.words[1]; @@ -1024,12 +1030,12 @@ void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3) ActorProp *sp1C; sp1C = &__codeA5BC0_initProp2Ptr(cube)->actorProp; - sp1C->unk8_0 = TRUE; + sp1C->is_actor = TRUE; sp1C->x = (s16) position[0]; sp1C->y = (s16) position[1]; sp1C->z = (s16) position[2]; sp1C->marker = marker; - sp1C->unk8_1 = arg3; + sp1C->is_3d = arg3; sp1C->unk8_15 = 0; sp1C->unk8_5 = FALSE; @@ -1045,7 +1051,7 @@ void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3) } void func_8032F3D4(s32 arg0[3], ActorMarker *marker, s32 arg2){ - func_8032F21C((marker->unk40_23)? func_8030364C() : cube_atPosition_s32(arg0), arg0, marker, arg2); + func_8032F21C((marker->unk40_23)? func_8030364C() : cubeList_GetCubeAtPosition_s32(arg0), arg0, marker, arg2); } void marker_free(ActorMarker *this){ @@ -1060,7 +1066,7 @@ void func_8032F464(bool arg0){ void func_8032F470(s32 *pos, ActorMarker *arg1){ Cube *cubePtr; - cubePtr = (arg1->unk40_23)? func_8030364C(): cube_atPosition_s32(pos); + cubePtr = (arg1->unk40_23)? func_8030364C(): cubeList_GetCubeAtPosition_s32(pos); if(cubePtr == arg1->cubePtr){ arg1->propPtr->x = pos[0]; @@ -1096,13 +1102,13 @@ void func_8032F5B0(f32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { func_80320EB0(marker, arg2, arg3); } -void func_8032F5E8(s32 arg0[3], s32 arg1, f32 arg2, s32 arg3) { - f32 sp1C[3]; +void func_8032F5E8(s32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) { + f32 position_f[3]; - sp1C[0] = arg0[0]; - sp1C[1] = arg0[1]; - sp1C[2] = arg0[2]; - func_8032F5B0(sp1C, arg1, arg2, arg3); + position_f[0] = position[0]; + position_f[1] = position[1]; + position_f[2] = position[2]; + func_8032F5B0(position_f, marker, arg2, arg3); } void func_8032F64C(f32 *pos, ActorMarker * marker){ @@ -1243,13 +1249,12 @@ void marker_callCollisionFunc(ActorMarker *this, ActorMarker *other, enum marker } } -void func_80330078(ActorMarker *marker, ActorMarker *other_marker, s16 *arg2){ +void func_80330078(ActorMarker *marker, ActorMarker *other_marker, u16 *arg2){ if(marker != NULL && marker->unk54 != NULL){ marker->unk54(marker, other_marker, arg2); } } -//marker_setCollisionMethods void marker_setCollisionScripts(ActorMarker *this, MarkerCollisionFunc ow_func, MarkerCollisionFunc arg2, MarkerCollisionFunc die_func){ this->collisionFunc = ow_func; this->collision2Func = arg2; @@ -1292,7 +1297,7 @@ void code_A5BC0_initCubePropActorProp(Cube *cube) { prop_ptr = cube->prop2Ptr; prop_cnt = cube->prop2Cnt; while(prop_cnt != 0){ - if(prop_ptr->markerFlag == TRUE){ + if(prop_ptr->is_actor == TRUE){ prop_ptr->actorProp.marker->propPtr = &prop_ptr->actorProp; prop_ptr->actorProp.marker->cubePtr = cube; } @@ -1435,7 +1440,7 @@ void func_803306C8(s32 arg0) { void func_803308A0(void) { s32 i; ModelCache *var_s0; - void *var_a1; + s32 var_a1; for (i = 0; i < 0x3D5; i++) { var_s0 = &modelCache[i]; @@ -1513,7 +1518,7 @@ BKModelBin *marker_loadModelBin(ActorMarker *this){ func_8032ACA8(thisActor); } func_8032AB84(thisActor); - if(!this->unk18 && this->propPtr->unk8_1 && modelInfo->modelPtr && func_8033A12C(modelInfo->modelPtr)){ + if(!this->unk18 && this->propPtr->is_3d && modelInfo->modelPtr && func_8033A12C(modelInfo->modelPtr)){ this->unk18 = func_80330B10(); } modelInfo->unk10 = globalTimer_getTime(); @@ -1679,48 +1684,48 @@ bool func_80331158(ActorMarker *arg0, s32 arg1, s32 arg2) { return FALSE; } -BKCollisionTri *func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 arg4) { +BKCollisionTri *func_803311D4(Cube *cube, f32 *arg1, f32 *arg2, f32 *arg3, u32 arg4) { Actor *temp_s2_2; ActorMarker *temp_a0; BKModelBin *var_a0; BKModelBin *var_s0 = NULL; BKVertexList *temp_a1; Prop *var_s1; - f32 spAC[3]; - f32 spA0[3]; + f32 model_position[3]; + f32 model_rotation[3]; BKCollisionList *temp_s0; BKCollisionTri *temp_s0_2; BKCollisionList *temp_s2; - f32 sp88[3]; - f32 sp7C[3]; + f32 actor_position[3]; + f32 actor_rotation[3]; BKCollisionTri *var_s6; BKCollisionTri *var_v0; u32 var_s5; var_s6 = NULL; - for(var_s1 = arg0->prop2Ptr, var_s5 = arg0->prop2Cnt; var_s5 > 0; var_s5--, var_s1++) { + for(var_s1 = cube->prop2Ptr, var_s5 = cube->prop2Cnt; var_s5 > 0; var_s5--, var_s1++) { if(var_s1); - if (!var_s1->markerFlag && var_s1->unk8_1 && var_s1->unk8_4) { //ModelProp - var_s0 = func_8030A4B4(((u32)var_s1->modelProp.unk0 >> 0x4)); - if ((var_s0 != NULL) || (func_8028F280() && ((var_s0 = func_8030A428(((u32)var_s1->modelProp.unk0 >> 0x4))) != NULL))) { + if (!var_s1->is_actor && var_s1->is_3d && var_s1->unk8_4) { //ModelProp + var_s0 = propModelList_getModelIfActive(((u32)var_s1->modelProp.unk0 >> 0x4)); + if ((var_s0 != NULL) || (func_8028F280() && ((var_s0 = propModelList_getModel(((u32)var_s1->modelProp.unk0 >> 0x4))) != NULL))) { temp_s2 = model_getCollisionList(var_s0); if (temp_s2 != 0) { - spAC[0] = (f32) var_s1->modelProp.unk4[0]; - spAC[1] = (f32) var_s1->modelProp.unk4[1]; - spAC[2] = (f32) var_s1->modelProp.unk4[2]; - spA0[0] = 0.0f; - spA0[1] = (f32) (var_s1->modelProp.unk0_15 * 2); - spA0[2] = (f32) (var_s1->modelProp.unk0_7 * 2); - var_v0 = func_802E805C(temp_s2, model_getVtxList(var_s0), spAC, spA0, (f32)var_s1->modelProp.unkA / 100.0, arg1, arg2, arg3, arg4); + model_position[0] = (f32) var_s1->modelProp.position[0]; + model_position[1] = (f32) var_s1->modelProp.position[1]; + model_position[2] = (f32) var_s1->modelProp.position[2]; + model_rotation[0] = 0.0f; + model_rotation[1] = (f32) (var_s1->modelProp.yaw * 2); + model_rotation[2] = (f32) (var_s1->modelProp.roll * 2); + var_v0 = func_802E805C(temp_s2, model_getVtxList(var_s0), model_position, model_rotation, (f32)var_s1->modelProp.scale / 100.0, arg1, arg2, arg3, arg4); if (var_v0 != NULL) { var_s6 = var_v0; } } } - } else if (var_s1->markerFlag && var_s1->unk8_3 && var_s1->unk8_4 && !func_80331158(var_s1->actorProp.marker, arg1, arg2)) { + } else if (var_s1->is_actor && var_s1->unk8_3 && var_s1->unk8_4 && !func_80331158(var_s1->actorProp.marker, arg1, arg2)) { if (!(var_s1->actorProp.marker->unk3E_0 && (marker_getActor(var_s1->actorProp.marker)->unk3C & 0x008000000))) { var_a0 = func_80330DE4(var_s1->actorProp.marker); } else { @@ -1732,13 +1737,13 @@ BKCollisionTri *func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 a if (temp_s0 != 0) { temp_s2_2 = marker_getActor(var_s1->actorProp.marker); temp_a1 = func_80330C74(temp_s2_2); - sp88[0] = (f32) var_s1->actorProp.x; - sp88[1] = (f32) var_s1->actorProp.y; - sp88[2] = (f32) var_s1->actorProp.z; - sp7C[0] = (f32) var_s1->actorProp.marker->pitch; - sp7C[1] = (f32) var_s1->actorProp.marker->yaw; - sp7C[2] = (f32) var_s1->actorProp.marker->roll; - temp_s0_2 = func_802E805C(temp_s0, temp_a1, &sp88, &sp7C, temp_s2_2->scale, arg1, arg2, arg3, arg4); + actor_position[0] = (f32) var_s1->actorProp.x; + actor_position[1] = (f32) var_s1->actorProp.y; + actor_position[2] = (f32) var_s1->actorProp.z; + actor_rotation[0] = (f32) var_s1->actorProp.marker->pitch; + actor_rotation[1] = (f32) var_s1->actorProp.marker->yaw; + actor_rotation[2] = (f32) var_s1->actorProp.marker->roll; + temp_s0_2 = func_802E805C(temp_s0, temp_a1, actor_position, actor_rotation, temp_s2_2->scale, arg1, arg2, arg3, arg4); if ((temp_s0_2 != NULL) && (func_8029453C())) { marker_loadModelBin(var_s1->actorProp.marker); if (var_s1->actorProp.marker->unk50 != 0) { @@ -1757,7 +1762,7 @@ BKCollisionTri *func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 a } } } - } else if (var_s1->markerFlag) { + } else if (var_s1->is_actor) { if (var_s1->actorProp.marker->unk18 != NULL) { if (var_s1->actorProp.marker->unk18->unk0 != NULL) { var_v0 = var_s1->actorProp.marker->unk18->unk0(var_s1->actorProp.marker, arg1, arg2, arg3, arg4); @@ -1797,9 +1802,9 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s new_var2 = sp8C; for (; var_s3 != 0; var_s0++, var_s3--) { - if (((!var_s0->markerFlag) && var_s0->unk8_1) && var_s0->unk8_4) + if (((!var_s0->is_actor) && var_s0->is_3d) && var_s0->unk8_4) { - model_bin = func_8030A4B4(((u32) (*((u16 *) (&var_s0->modelProp)))) >> 4); + model_bin = propModelList_getModelIfActive(((u32) (*((u16 *) (&var_s0->modelProp)))) >> 4); if (model_bin == 0) { continue; @@ -1809,15 +1814,15 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s { continue; } - spBC[0] = (f32) var_s0->modelProp.unk4[0]; - spBC[1] = (f32) var_s0->modelProp.unk4[1]; - spBC[2] = (f32) var_s0->modelProp.unk4[2]; + spBC[0] = (f32) var_s0->modelProp.position[0]; + spBC[1] = (f32) var_s0->modelProp.position[1]; + spBC[2] = (f32) var_s0->modelProp.position[2]; spB0[0] = 0.0f; - spB0[1] = (f32) (var_s0->modelProp.unk0_15 * 2); + spB0[1] = (f32) (var_s0->modelProp.yaw * 2); new_var = spB0; - spB0[2] = (f32) (var_s0->modelProp.unk0_7 * 2); + spB0[2] = (f32) (var_s0->modelProp.roll * 2); var_v0 = func_802E9118(model_collision_list, model_getVtxList(model_bin), - spBC, new_var, (f32) (((f32) var_s0->modelProp.unkA) / 100.0), + spBC, new_var, (f32) (((f32) var_s0->modelProp.scale) / 100.0), arg1, arg2, arg3, arg4, arg5, flags ); if (var_v0 != 0) @@ -1826,7 +1831,7 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s } } else - if ((var_s0->markerFlag && var_s0->unk8_3) && var_s0->unk8_4) + if ((var_s0->is_actor && var_s0->unk8_3) && var_s0->unk8_4) { model_collision_list = func_80330DE4(var_s0->actorProp.marker); pad9C = model_collision_list; @@ -1856,7 +1861,7 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s } } else - if (var_s0->markerFlag) + if (var_s0->is_actor) { temp_a0 = var_s0->actorProp.marker; temp_v0_7 = temp_a0->unk18; @@ -1881,86 +1886,78 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s BKCollisionTri *func_803319C0(Cube *cube, f32 position[3], f32 radius, s32 arg3, f32 arg4[3], u32 arg5){ BKCollisionTri *var_s7; BKCollisionTri *var_v0; - s32 var_s3; - Prop *var_s0; + s32 i; + Prop *prop_ptr; BKCollisionList *model_collision_list; BKVertexList *temp_a1; - f32 spAC[3]; - f32 spA0[3]; + f32 model_position[3]; + f32 model_rotation[3]; BKModelBin *model_bin; BKModelBin *new_var; ModelProp *mProp; - f32 sp88[3]; - f32 sp7C[3]; + f32 actor_position[3]; + f32 actor_rotation[3]; Actor *temp_v0_6; - ActorProp *aProp = &var_s0->actorProp; + ActorProp *aProp = &prop_ptr->actorProp; - var_s7 = 0; - var_s0 = cube->prop2Ptr; - for (var_s3 = cube->prop2Cnt; var_s3 != 0; var_s3--, var_s0++) { - if (((!var_s0->markerFlag) && var_s0->unk8_1) && var_s0->unk8_4) - { - mProp = &var_s0->modelProp; - new_var = func_8030A4B4(mProp->unk0_31); + var_s7 = NULL; + prop_ptr = cube->prop2Ptr; + for (i = cube->prop2Cnt; i != 0; i--, prop_ptr++) { + if (((!prop_ptr->is_actor) && prop_ptr->is_3d) && prop_ptr->unk8_4) { + mProp = &prop_ptr->modelProp; + new_var = propModelList_getModelIfActive(mProp->model_index); if (1) { } if (1) { } if (1) { } model_bin = new_var; - if (model_bin != 0){ + if (model_bin != NULL){ model_collision_list = model_getCollisionList(model_bin); if (model_collision_list != 0){ - spAC[0] = (f32) mProp->unk4[0]; - spAC[1] = (f32) mProp->unk4[1]; - spAC[2] = (f32) mProp->unk4[2]; - spA0[0] = 0.0f; - spA0[1] = (f32) (mProp->unk0_15 * 2); + model_position[0] = (f32) mProp->position[0]; + model_position[1] = (f32) mProp->position[1]; + model_position[2] = (f32) mProp->position[2]; + model_rotation[0] = 0.0f; + model_rotation[1] = (f32) (mProp->yaw * 2); model_bin = model_bin; - spA0[2] = (f32) (mProp->unk0_7 * 2); - var_v0 = func_802E9DD8(model_collision_list, model_getVtxList(model_bin), spAC, spA0, ((f32) mProp->unkA) / 100.0, position, radius, arg3, arg4); - if (var_v0 != 0) + model_rotation[2] = (f32) (mProp->roll * 2); + var_v0 = func_802E9DD8(model_collision_list, model_getVtxList(model_bin), model_position, model_rotation, ((f32) mProp->scale) / 100.0, position, radius, arg3, arg4); + if (var_v0 != NULL) var_s7 = var_v0; } } } else { - aProp = &var_s0->actorProp; - if ((var_s0->markerFlag && var_s0->unk8_3) && var_s0->unk8_4) - { - model_bin = func_80330DE4(aProp->marker); - if (model_bin != 0) { - new_var = model_getCollisionList(model_bin); - if (new_var != 0) - { - - temp_v0_6 = marker_getActor(aProp->marker); - temp_a1 = func_80330C74(temp_v0_6); - sp88[0] = (f32) aProp->x; - sp88[1] = (f32) aProp->y; - sp88[2] = (f32) aProp->z; - sp7C[0] = aProp->marker->pitch; - sp7C[1] = aProp->marker->yaw; - sp7C[2] = aProp->marker->roll; - var_v0 = func_802E9DD8(new_var, temp_a1, sp88, sp7C, temp_v0_6->scale, position, radius, arg3, arg4); - if (var_v0 != 0) - { - var_s7 = var_v0; - } - } - } - } - else - if (var_s0->markerFlag) - { - Struct6Cs *temp_v0_7; - temp_v0_7 = aProp->marker->unk18; - if (temp_v0_7 != 0) - { - if (temp_v0_7->unk8 != 0) - { - var_v0 = temp_v0_7->unk8(aProp->marker, position, radius, arg3, arg4); - if (var_v0 != 0) - { - var_s7 = var_v0; - } - } - } + aProp = &prop_ptr->actorProp; + if ((prop_ptr->is_actor && prop_ptr->unk8_3) && prop_ptr->unk8_4) { + model_bin = func_80330DE4(aProp->marker); + if (model_bin != 0) { + new_var = model_getCollisionList(model_bin); + if (new_var != 0) + { + + temp_v0_6 = marker_getActor(aProp->marker); + temp_a1 = func_80330C74(temp_v0_6); + actor_position[0] = (f32) aProp->x; + actor_position[1] = (f32) aProp->y; + actor_position[2] = (f32) aProp->z; + actor_rotation[0] = aProp->marker->pitch; + actor_rotation[1] = aProp->marker->yaw; + actor_rotation[2] = aProp->marker->roll; + var_v0 = func_802E9DD8(new_var, temp_a1, actor_position, actor_rotation, temp_v0_6->scale, position, radius, arg3, arg4); + if (var_v0 != 0) + { + var_s7 = var_v0; + } + } + } + } else if (prop_ptr->is_actor) { + Struct6Cs *temp_v0_7; + temp_v0_7 = aProp->marker->unk18; + if (temp_v0_7 != 0) { + if (temp_v0_7->unk8 != 0) { + var_v0 = temp_v0_7->unk8(aProp->marker, position, radius, arg3, arg4); + if (var_v0 != 0) { + var_s7 = var_v0; + } + } + } } } } @@ -1986,7 +1983,7 @@ f32 func_80331D20(BKSprite *sprite) { f32 func_80331E34(Prop *arg0){ - return func_80331D20(func_8030A55C(arg0->spriteProp.unk0_31)); + return func_80331D20(propModelList_getSprite(arg0->spriteProp.sprite_index)); } f32 func_80331E64(ActorMarker *marker) { @@ -2005,7 +2002,7 @@ f32 func_80331E64(ActorMarker *marker) { f32 func_80331F1C(Prop *arg0){ - return vtxList_getGlobalNorm(model_getVtxList(func_8030A428(arg0->modelProp.unk0_31))); + return vtxList_getGlobalNorm(model_getVtxList(propModelList_getModel(arg0->modelProp.model_index))); } f32 func_80331F54(ActorMarker *marker) { @@ -2033,7 +2030,7 @@ f32 func_80332050(Prop *prop, ActorMarker *marker, s32 arg2) { ActorMarker * phi_v0; f32 phi_f2; - phi_v0 =(prop->markerFlag) ? prop->actorProp.marker : NULL; + phi_v0 =(prop->is_actor) ? prop->actorProp.marker : NULL; phi_f2 = prop->unk4[arg2] - (&marker->propPtr->x)[arg2] - marker->unk38[arg2]; if (phi_v0 != NULL) { phi_f2 += phi_v0->unk38[arg2]; @@ -2060,9 +2057,9 @@ f32 func_803320BC(ActorProp *prop, f32 (*arg1)(ActorMarker *)) { f32 func_80332220(Prop * prop, f32 (*arg1)(Prop *)) { f32 phi_f12; - phi_f12 = func_8030A590(); + phi_f12 = propModelList_getScale(prop); if (phi_f12 == 0.0f) { - func_8030A5EC(prop, phi_f12 = arg1(prop) * 0.5); + propModelList_setScale(prop, phi_f12 = arg1(prop) * 0.5); } return phi_f12; } @@ -2072,7 +2069,7 @@ f32 func_8033229C(ActorMarker *marker) { ActorProp *prop; prop = marker->propPtr; - if (prop->unk8_1) { + if (prop->is_3d) { return func_803320BC(prop, func_80331F54); } else{ @@ -2097,16 +2094,16 @@ Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *ar phi_s1 = &cube->prop2Ptr[(*arg4)++]; for(phi_s3 = phi_s3; phi_s3 != 0; phi_s3--){ if (phi_s1->unk8_4) { - if( phi_s1->markerFlag && (!phi_s1->actorProp.marker->unk3E_0 || !marker_getActor(phi_s1->actorProp.marker)->despawn_flag)){ + if( phi_s1->is_actor && (!phi_s1->actorProp.marker->unk3E_0 || !marker_getActor(phi_s1->actorProp.marker)->despawn_flag)){ if (phi_s1->actorProp.marker->collidable && (marker != phi_s1->actorProp.marker)) { if( (phi_s1->actorProp.marker->modelId) && (func_803327A8(phi_s1->actorProp.marker->modelId) & arg3) ) { - if( phi_s1->actorProp.unk8_1 + if( phi_s1->actorProp.is_3d && (phi_s1->actorProp.marker->unk18 != NULL) && (phi_s1->actorProp.marker->unk18->unkC != NULL) ) { - func_803320BC(phi_s1, &func_80331F54); + func_803320BC(&phi_s1->actorProp, &func_80331F54); sp68[0] = (f32) (marker->unk38[0] + marker->propPtr->x); sp68[1] = (f32) (marker->unk38[1] + marker->propPtr->y); sp68[2] = (f32) (marker->unk38[2] + marker->propPtr->z); @@ -2116,12 +2113,12 @@ Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *ar } else{ phi_f24 = func_80332050(phi_s1, marker, 0); phi_f22 = func_80332050(phi_s1, marker, 2); - if (phi_s1->actorProp.unk8_1) { + if (phi_s1->actorProp.is_3d) { phi_f20 = func_80332050(phi_s1, marker, 1); - phi_f2 = func_803320BC(phi_s1, func_80331F54); + phi_f2 = func_803320BC(&phi_s1->actorProp, func_80331F54); } else { phi_f20 = func_80332050(phi_s1, marker, 1); - phi_f2 = func_803320BC(phi_s1, &func_80331E64); + phi_f2 = func_803320BC(&phi_s1->actorProp, &func_80331E64); } phi_f2 = phi_f2 + arg2; if ((phi_f24*phi_f24 + phi_f20*phi_f20 + phi_f22*phi_f22) < phi_f2*phi_f2) { @@ -2131,8 +2128,8 @@ Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *ar } } } - else if (phi_s1->unk8_1) {//ModelProp - if (func_803327A8(phi_s1->modelProp.unk0_31 + 0x2D1) & arg3) { + else if (phi_s1->is_3d) {//ModelProp + if (func_803327A8(phi_s1->modelProp.model_index + 0x2D1) & arg3) { phi_f24 = func_80332050(phi_s1, marker, 0); phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331F1C); phi_f22 = func_80332050(phi_s1, marker, 2); @@ -2143,7 +2140,7 @@ Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *ar } } else{ - if (func_803327A8(phi_s1->spriteProp.unk0_31 + 0x572) & arg3) { + if (func_803327A8(phi_s1->spriteProp.sprite_index + 0x572) & arg3) { phi_f24 = func_80332050(phi_s1, marker, 0);\ phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331E34);\ phi_f22 = func_80332050(phi_s1, marker, 2); @@ -2208,8 +2205,8 @@ void func_80332894(void) { }while(i != size); func_8033283C(0x34D, 0x3A6, 3); func_8033283C(0x3A6, 0x572, 3); - func_803327D4(&D_8036E7E0, 1); - func_803327D4(&D_8036E7FC, 2); + func_803327D4(D_8036E7E0, 1); + func_803327D4(D_8036E7FC, 2); func_8032D330(); } diff --git a/src/core2/code_AD110.c b/src/core2/code_AD110.c index 842a5f5b..974c02b9 100644 --- a/src/core2/code_AD110.c +++ b/src/core2/code_AD110.c @@ -64,7 +64,7 @@ extern void warp_lairEnterCCWPuzzleFromPointingGruntyStatueRoom(s32, s32); extern void warp_lairEnterPointingGruntyStatueFromCCWPuzzleRoom(s32, s32); extern void warp_lairEnterRBBLobbyFromRBBPuzzleRoom(s32, s32); extern void warp_lairEnterRBBLobbyFromMMMPuzzleRoom(s32, s32); -extern void func_80334430(s32, s32); +extern void func_80334430(NodeProp *, ActorMarker *); extern void func_80363388(s32, s32); extern void chOrangePad_handleOrangeCollision(s32, s32); extern void func_80388BEC(s32, s32); @@ -289,18 +289,20 @@ extern void warp_gvEnterSNSChamper(s32, s32); extern void warp_gvExitSNSChamper(s32, s32); extern void warp_lairEnterLairFromSMLevel(s32, s32); -extern void func_802C1674(s32, s32); -extern void func_802C169C(s32, s32); -extern void chTreasurehunt_checkStepProgress0(s32, s32); -extern void chTreasurehunt_checkStepProgress1(s32, s32); -extern void chTreasurehunt_checkStepProgress2(s32, s32); -extern void chTreasurehunt_checkStepProgress3(s32, s32); -extern void chTreasurehunt_checkStepProgress4(s32, s32); -extern void chTreasurehunt_checkStepProgress5(s32, s32); -extern void chMumbo_detransformWarn(s32, s32); -extern void chMumbo_detransformTrigger(s32, s32); +extern void func_802C1674(NodeProp *, ActorMarker *); +extern void func_802C169C(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress0(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress1(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress2(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress3(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress4(NodeProp *, ActorMarker *); +extern void chTreasurehunt_checkStepProgress5(NodeProp *, ActorMarker *); +extern void chMumbo_detransformWarn(NodeProp *, ActorMarker *); +extern void chMumbo_detransformTrigger(NodeProp *, ActorMarker *); extern void func_8033443C(NodeProp *arg0, ActorMarker *arg1); +typedef void (*CodeAD110Callback)(NodeProp *arg0, ActorMarker *arg1); + typedef struct { f32 unk0[3]; @@ -310,10 +312,9 @@ typedef struct { u8 pad1D[3]; }Struct_core2_AD110_0; -typedef void (*CodeAD110Callback)(NodeProp *arg0, ActorMarker *arg1); /* .data */ -CodeAD110Callback sWarpFunctions[] = { +void * sWarpFunctions[] = { func_80388BEC, func_80334430, chOrangePad_handleOrangeCollision, chOrangePad_handleOrangeCollision, chOrangePad_handleOrangeCollision, warp_gvEnterJinxy, warp_gvExitJinxy, func_8038F10C, func_8038F130, warp_bgsEnterMumbosHut, warp_bgsExitMumbosHut, warp_ttcExitNipper, @@ -545,7 +546,7 @@ void func_803343F8(s32 indx){ void func_80334428(void){} -void func_80334430(s32 arg0, s32 arg1){} +void func_80334430(NodeProp *arg0, ActorMarker *arg1){} void func_8033443C(NodeProp *arg0, ActorMarker *arg1){} @@ -556,7 +557,7 @@ void func_80334448(NodeProp *arg0, ActorMarker *arg1) { case 3: // warp (L80334480) global_timer_time = globalTimer_getTime(); if ((codeA5BC0_getNodePropUnkC(arg0) + 1) != global_timer_time) { - sWarpFunctions[codeA5BC0_getNodePropUnk8(arg0)](arg0, arg1); + ((CodeAD110Callback) sWarpFunctions[codeA5BC0_getNodePropUnk8(arg0)])(arg0, arg1); } codeA5BC0_setNodePropUnkC(arg0, global_timer_time); break; diff --git a/src/core2/code_AD5B0.c b/src/core2/code_AD5B0.c index 63425541..d60899eb 100644 --- a/src/core2/code_AD5B0.c +++ b/src/core2/code_AD5B0.c @@ -159,7 +159,7 @@ void func_80334910(void) { cubeList_free(); func_8031B710(); mapModel_free(); - func_8030A6B0(); + propModelList_free(); lighting_free(); sky_free(); func_8034C8D8(); @@ -233,7 +233,7 @@ void func_80334B20(enum map_e map, s32 arg1, s32 arg2) { pem_setAllInactive(); pem_initDependencies(); func_802F7D30(); - func_8030A78C(); + propModelList_init(); lighting_init(); sky_reset(); func_803343D0(); @@ -337,7 +337,7 @@ s32 func_80334ECC(void) { func_803465E4(); func_8031B790(); func_8034C9D4(); - func_8030A850(1); + propModelList_flush(1); sky_update(); partEmitMgr_update(); func_8034F918(); diff --git a/src/core2/code_C9F00.c b/src/core2/code_C9F00.c index 2ef36e76..098433d3 100644 --- a/src/core2/code_C9F00.c +++ b/src/core2/code_C9F00.c @@ -201,17 +201,17 @@ Struct68s * func_8035126C(f32 position[3], f32 arg1[3], f32 arg2, s32 arg3, enum void func_803513EC(ModelProp *arg0, s32 arg1) { f32 sp3C[3]; s32 pad30; - f32 sp2C[3]; + f32 rotation[3]; arg0->unkB_5 = TRUE; arg0->unkB_4 = FALSE; - sp3C[0] = (f32) arg0->unk4[0]; - sp3C[1] = (f32) arg0->unk4[1]; - sp3C[2] = (f32) arg0->unk4[2]; - sp2C[0] = 0.0f; - sp2C[1] = (f32) (arg0->unk0_15 * 2); - sp2C[2] = (f32) (arg0->unk0_7 * 2); - func_8035126C(sp3C, sp2C, (f32) (arg0->unkA / 100.0), arg1, arg0->unk0_31 + 0x2D1); + sp3C[0] = (f32) arg0->position[0]; + sp3C[1] = (f32) arg0->position[1]; + sp3C[2] = (f32) arg0->position[2]; + rotation[0] = 0.0f; + rotation[1] = (f32) (arg0->yaw * 2); + rotation[2] = (f32) (arg0->roll * 2); + func_8035126C(sp3C, rotation, (f32) (arg0->scale / 100.0), arg1, arg0->model_index + 0x2D1); } diff --git a/src/core2/code_CC1E0.c b/src/core2/code_CC1E0.c index 8c234c4f..b2e68e8b 100644 --- a/src/core2/code_CC1E0.c +++ b/src/core2/code_CC1E0.c @@ -64,7 +64,7 @@ s32 func_803531C8(u8 projectile_indx, s32 arg1){ projectile_getPosition(projectile_indx, egg_position); marker->unk38[1] = 0x1E; prop = func_80320EB0(marker, 30.0f, 1); - if(prop != NULL && prop->unk8_0){ + if(prop != NULL && prop->is_actor){ other_marker = prop->marker; sp34 =other_marker->id; if(!func_8033D410(marker, other_marker)){ diff --git a/src/core2/file.c b/src/core2/file.c index 310b2d18..577b9f9a 100644 --- a/src/core2/file.c +++ b/src/core2/file.c @@ -201,7 +201,7 @@ bool file_getByte_ifExpected(File *file, s32 expected, u8 *dst) { } } -bool file_getNBytes_ifExpected(File *file, s32 expected, u8 *dst, s32 cnt) { +bool file_getNBytes_ifExpected(File *file, s32 expected, void *dst, s32 cnt) { if (!file_isNextByteExpected(file, expected)) { return FALSE; } else { diff --git a/src/core2/propModelList.c b/src/core2/propModelList.c new file mode 100644 index 00000000..b9e8adcf --- /dev/null +++ b/src/core2/propModelList.c @@ -0,0 +1,230 @@ +#include +#include "functions.h" +#include "variables.h" + + +extern f32 func_8033A244(f32); + +typedef struct{ + BKModelBin *model_bin; + s32 timestamp; + f32 scale; +}propModelListModel; + +typedef struct{ + BKSprite *sprite; + BKSpriteDisplayData *display; + s32 timestamp; + f32 scale; +}propModelListSprite; + +BKModelBin *propModelList_getModel(s32 arg0); + +/* .data */ +s32 D_8036B800 = 0; + +/* .bss */ +static propModelListModel *sPropModelList; +static propModelListSprite *sPropSpriteList; + +BKSpriteDisplayData *propModelList_getSpriteDisplayList(s32 arg0); + +void propModelList_drawModel(Gfx **gfx, Mtx **mtx, Vtx **vtx, f32 position[3], f32 rotation[3], f32 scale, s32 model_index, Cube* arg7){ + BKModelBin * model; + + model = propModelList_getModel(model_index); + func_8033A244(3700.0f); + func_8033A28C(1); + modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL); + func_8033A1FC(); + modelRender_draw(gfx, mtx, position, rotation, scale, NULL, model); +} + +void propModelList_drawSprite(Gfx **gfx, Mtx **mtx, Vtx **Vtx, f32 position[3], f32 scale, s32 sprite_index, Cube *arg6, s32 r, s32 b, s32 g, s32 mirrored, s32 frame) { + f32 scale_f3[3]; + BKSpriteDisplayData *sprite; + + sprite = propModelList_getSpriteDisplayList(sprite_index); + scale_f3[0] = scale; + scale_f3[1] = scale; + scale_f3[2] = scale; + func_80338338(0xFF - (r * 0x10), 0xFF - (b * 0x10), 0xFF - (g * 0x10)); + if (func_80344C20(sprite) & 0xB00) { + func_803382E4(0xB); + } else { + func_803382E4(0xE); + } + func_80335D30(gfx); + func_80344138(sprite, frame, mirrored, position, scale_f3, gfx, mtx); + func_8033687C(gfx); +} + +BKModelBin *propModelList_getModel(s32 arg0){ + if(sPropModelList[arg0].model_bin == NULL){ + sPropModelList[arg0].model_bin = assetcache_get(0x2d1 + arg0); + } + sPropModelList[arg0].timestamp = globalTimer_getTime(); + return sPropModelList[arg0].model_bin; +} + +BKModelBin *propModelList_getModelIfActive(s32 arg0){ + return sPropModelList[arg0].model_bin; +} + +BKSpriteDisplayData *propModelList_getSpriteDisplayList(s32 arg0) +{ + + if (((propModelListSprite *)((s32)sPropSpriteList + arg0*sizeof(propModelListSprite)))->sprite == 0){ + ((propModelListSprite *)((s32)sPropSpriteList + arg0*sizeof(propModelListSprite)))->sprite = func_8033B6C4(arg0 + 0x572, &((propModelListSprite *)((s32)sPropSpriteList + arg0*sizeof(propModelListSprite)))->display); + } + sPropSpriteList[arg0].timestamp = globalTimer_getTime(); + return sPropSpriteList[arg0].display; +} + +BKSprite *propModelList_getSprite(s32 arg0){ + propModelList_getSpriteDisplayList(arg0); + return sPropSpriteList[arg0].sprite; +} + +f32 propModelList_getScale(Prop *arg0){ + if(arg0->is_3d){ + ModelProp* ModelProp = &arg0->modelProp; + return sPropModelList[arg0->spriteProp.sprite_index].scale; + } + else{//L8030A65C + SpriteProp *spriteProp = &arg0->spriteProp; + return sPropSpriteList[spriteProp->sprite_index].scale; + } +} + +void propModelList_setScale(Prop *arg0, f32 arg1){ + if(arg0->is_3d){ + ModelProp* ModelProp = &arg0->modelProp; + sPropModelList[arg0->spriteProp.sprite_index].scale = (f32)ModelProp->scale*arg1/100.0f; + } + else{//L8030A65C + SpriteProp *spriteProp = &arg0->spriteProp; + sPropSpriteList[spriteProp->sprite_index].scale = (f32)spriteProp->scale*arg1/100.0f; + } +} + +void propModelList_free(void){ + propModelListModel* iPtr; + propModelListSprite* jPtr; + + for(iPtr = sPropModelList; iPtr < &sPropModelList[0x2A2]; iPtr++){ + if(iPtr->model_bin){ + assetcache_release(iPtr->model_bin); + } + } + for(jPtr = sPropSpriteList; jPtr < &sPropSpriteList[0x168]; jPtr++){ + if(jPtr->sprite){ + func_8033B338(&jPtr->sprite, &jPtr->display); + } + } + free(sPropModelList); + sPropModelList = NULL; + free(sPropSpriteList); + sPropSpriteList = NULL; +} + +void propModelList_init(void){//init + propModelListModel* iPtr; + propModelListSprite* jPtr; + + sPropModelList = (propModelListModel *)malloc(0x2A2 * sizeof(propModelListModel)); + sPropSpriteList = (propModelListSprite *)malloc(0x168 * sizeof(propModelListSprite)); + D_8036B800 = 0; + for(iPtr = sPropModelList; iPtr < &sPropModelList[0x2A2]; iPtr++){ + iPtr->model_bin = NULL; + iPtr->scale = 0.0f; + } + for(jPtr = sPropSpriteList; jPtr < &sPropSpriteList[0x168]; jPtr++){ + jPtr->sprite = NULL; + jPtr->scale = 0.0f; + } +} + +/** + * @brief This function flushes old models from the prop model and sprite list. + * + * @param level 1 = checks timestamp of 40 oldest models + * 2 = checks timestamp of all models + * 3 = flushes ALL models despites age + */ +void propModelList_flush(s32 level) { + static s32 D_8036B804 = 0; + static s32 D_8036B808 = 0; + s32 oldest_active_time; + s32 var_s0; + propModelListModel *sp3C; + propModelListSprite *temp_a0_2; + + oldest_active_time = globalTimer_getTime() - func_80255B08(level); + for(var_s0 = 0; (sPropModelList != NULL) && (var_s0 < ((level == 1) ? 0x28 : 0x2A1)); var_s0++, D_8036B804 = (D_8036B804 >= 0x2A1)? 0: D_8036B804 + 1){ + sp3C = (propModelListModel*)((u32)sPropModelList + sizeof(propModelListModel)*D_8036B804); + if ((sp3C->model_bin != NULL) && ((sp3C->timestamp < oldest_active_time) || (level == 3))){ + assetcache_release(sp3C->model_bin); + sp3C->model_bin = NULL; + if( (level != 1) && (func_80254BC4(1))){ + return; + } + } + } + + for(var_s0 = 0; (sPropSpriteList != NULL) && (var_s0 < ((level == 1) ? 0x28 : 0x167)); var_s0++, D_8036B808 = (D_8036B808 >= 0x167)? 0: D_8036B808 + 1){ + temp_a0_2 = (propModelListSprite*)((u32)sPropSpriteList + sizeof(propModelListSprite)*D_8036B808); + if ((temp_a0_2->sprite != 0) && ((temp_a0_2->timestamp < oldest_active_time) || (level == 3))){ + func_8033B338(&temp_a0_2->sprite, &temp_a0_2->display); + if( (level != 1) && (func_80254BC4(1))){ + return; + } + } + } +} + +void propModelList_defrag(void) { + BKModelBin *temp_a0; + s32 phi_s2; + + sPropSpriteList = (propModelListSprite *) defrag(sPropSpriteList); + sPropModelList = (propModelListModel *) defrag(sPropModelList); + if (!func_802559A0() && !func_80255AE4() && sPropModelList != NULL) { + for(phi_s2 = 0x14; (phi_s2 != 0) && !func_80255AE4(); phi_s2--){ + D_8036B800++; + if (D_8036B800 >= 0x2A2) { + D_8036B800 = 0; + } + temp_a0 = sPropModelList[D_8036B800].model_bin; + if (temp_a0 != NULL && (func_802546E4(temp_a0) < 0x2AF8)) { + sPropModelList[D_8036B800].model_bin = func_80255888(sPropModelList[D_8036B800].model_bin); + } + } + } +} + +void propModelList_refresh(void) { + s32 model_list_index; + s32 temp_t7; + propModelListSprite *phi_s0; + s32 phi_s2; + propModelListModel *phi_s0_2; + + for(phi_s0 = sPropSpriteList; phi_s0 < sPropSpriteList + 360; phi_s0++){ + if (phi_s0->sprite != NULL) { + temp_t7 = phi_s0 - sPropSpriteList; + func_8033B338(&phi_s0->sprite, &phi_s0->display); + phi_s2 = temp_t7 *sizeof(propModelListSprite); + *(BKSprite **)((s32)sPropSpriteList + phi_s2) = func_8033B6C4(temp_t7 + 0x572, (BKSpriteDisplayData **)((s32)sPropSpriteList + phi_s2 + 4)); + } + } + + for(phi_s0_2 = sPropModelList; phi_s0_2 < sPropModelList + 674; phi_s0_2++){ + if(phi_s0_2->model_bin != NULL){ + model_list_index = phi_s0_2 - sPropModelList; + assetcache_release(phi_s0_2->model_bin); + sPropModelList[model_list_index].model_bin = (BKModelBin *) assetcache_get(model_list_index + 0x2D1); + + } + } +} diff --git a/src/core2/spawnqueue.c b/src/core2/spawnqueue.c index c5f18213..d5730c3b 100644 --- a/src/core2/spawnqueue.c +++ b/src/core2/spawnqueue.c @@ -10,11 +10,18 @@ void spawnQueue_unlock(void); void spawnQueue_lock(void); +extern Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 pos[3], s32 yaw); +extern Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 yaw); +extern Actor *bundle_spawn_s32(enum bundle_e bundle_id, s32 position[3]); +extern Actor *bundle_spawn_f32(enum bundle_e bundle_id, f32 position[3]); + + Actor *func_802D7558(s32 *, s32, ActorInfo*, u32); Actor *func_802D75B4(s32 *, s32, ActorInfo*, u32); Actor *func_802D7610(s32 *, s32, ActorInfo*, u32); Actor *chBottlesBonus_new(s32 *, s32, ActorInfo*, u32); + extern ActorInfo gameSelect_banjoSleeping; //banjo.without_right_hand extern ActorInfo gameSelect_banjoGameboy; //banjo.playing_gameboy extern ActorInfo gameSelect_banjoCooking; //banjo.cooking @@ -417,7 +424,7 @@ void spawnQueue_free(void){ void spawnQueue_func_802C39D4(void){ func_803268B4(); if(!levelSpecificFlags_validateCRC2()){ - eeprom_writeBlocks(0, 0, 0x80749530, EEPROM_MAXBLOCKS); + eeprom_writeBlocks(0, 0, (void*)0x80749530, EEPROM_MAXBLOCKS); } } diff --git a/src/fight/chfinalboss.c b/src/fight/chfinalboss.c index 2ae65d19..dd02cc84 100644 --- a/src/fight/chfinalboss.c +++ b/src/fight/chfinalboss.c @@ -1503,7 +1503,7 @@ ActorMarker *chfinalboss_findCollidingJinjo(Actor *this, f32 arg1) { func_80320ED8(this->marker, arg1, 1); prop = func_8032F528(); while(prop !=NULL){ - if (prop->markerFlag){ + if (prop->is_actor){ jinjo = marker_getActor(prop->actorProp.marker); jinjo_marker_id = jinjo->marker->id; if(