code_83340 -> propModelList

This commit is contained in:
Banjo Kazooie
2025-08-16 18:23:48 -05:00
parent b47170c745
commit 065fa3e8c8
32 changed files with 568 additions and 561 deletions

View File

@@ -769,7 +769,7 @@ segments:
# - [0xFD00C0, c, fx/airscore] #DONE # - [0xFD00C0, c, fx/airscore] #DONE
# - [0xFD08E0, c, code_7AF80] # - [0xFD08E0, c, code_7AF80]
# - [0xFD7960, c, mapModel] #DONE # - [0xFD7960, c, mapModel] #DONE
# - [0xFD8CA0, c, code_83340] #DONE # - [0xFD8CA0, c, propModelList] #DONE
# - [0xFD96D0, c, gc/section] #DONE # - [0xFD96D0, c, gc/section] #DONE
# - [0xFD9A30, c, gc/sky] #DONE # - [0xFD9A30, c, gc/sky] #DONE
# - [0xFD9DD0, c, gc/transition] #DONE # - [0xFD9DD0, c, gc/transition] #DONE
@@ -1045,7 +1045,7 @@ segments:
# - [0x1039330, .data, fx/airscore] # - [0x1039330, .data, fx/airscore]
# - [0x1039380, .data, code_7AF80] # - [0x1039380, .data, code_7AF80]
# - [0x10395B0, .data, mapModel] # - [0x10395B0, .data, mapModel]
# - [0x103A1D0, .data, code_83340] # - [0x103A1D0, .data, propModelList]
# - [0x103A1E0, .data, gc/section] # - [0x103A1E0, .data, gc/section]
# - [0x103A710, .data, gc/sky] # - [0x103A710, .data, gc/sky]
# - [0x103AB20, .data, gc/transition] # - [0x103AB20, .data, gc/transition]
@@ -1293,7 +1293,7 @@ segments:
# - [0x1045E60, .rodata, fx/airscore] # - [0x1045E60, .rodata, fx/airscore]
# - [0x1045E80, .rodata, code_7AF80] # - [0x1045E80, .rodata, code_7AF80]
# - [0x1045F40, .rodata, mapModel] # - [0x1045F40, .rodata, mapModel]
# - [0x1046100, .rodata, code_83340] # - [0x1046100, .rodata, propModelList]
# - [0x1046110, .rodata, gc/section] # - [0x1046110, .rodata, gc/section]
# - [0x1046E10, .rodata, gc/sky] # - [0x1046E10, .rodata, gc/sky]
# - [0x1046E20, .rodata, gc/transition] # - [0x1046E20, .rodata, gc/transition]
@@ -1560,7 +1560,7 @@ segments:
# - [0x0106C980, .bss, fx/airscore] # - [0x0106C980, .bss, fx/airscore]
# - [0x0106C980, .bss, code_7AF80] # - [0x0106C980, .bss, code_7AF80]
# - [0x0106C980, .bss, mapModel] # - [0x0106C980, .bss, mapModel]
# - [0x0106C980, .bss, code_83340] # - [0x0106C980, .bss, propModelList]
# - [0x0106C980, .bss, gc/section] # - [0x0106C980, .bss, gc/section]
# - [0x0106C980, .bss, gc/sky] # - [0x0106C980, .bss, gc/sky]
# - [0x0106C980, .bss, gc/transition] # - [0x0106C980, .bss, gc/transition]

View File

@@ -769,7 +769,7 @@ segments:
- [0xFD00C0, c, fx/airscore] - [0xFD00C0, c, fx/airscore]
- [0xFD08E0, c, code_7AF80] - [0xFD08E0, c, code_7AF80]
- [0xFD7960, c, mapModel] - [0xFD7960, c, mapModel]
- [0xFD8CA0, c, code_83340] - [0xFD8CA0, c, propModelList]
- [0xFD96D0, c, gc/section] - [0xFD96D0, c, gc/section]
- [0xFD9A30, c, gc/sky] - [0xFD9A30, c, gc/sky]
- [0xFD9DD0, c, gc/transition] - [0xFD9DD0, c, gc/transition]
@@ -1044,7 +1044,7 @@ segments:
- [0x1039330, .data, fx/airscore] - [0x1039330, .data, fx/airscore]
- [0x1039380, .data, code_7AF80] - [0x1039380, .data, code_7AF80]
- [0x10395B0, .data, mapModel] - [0x10395B0, .data, mapModel]
- [0x103A1D0, .data, code_83340] - [0x103A1D0, .data, propModelList]
- [0x103A1E0, .data, gc/section] - [0x103A1E0, .data, gc/section]
- [0x103A710, .data, gc/sky] - [0x103A710, .data, gc/sky]
- [0x103AB20, .data, gc/transition] - [0x103AB20, .data, gc/transition]
@@ -1291,7 +1291,7 @@ segments:
- [0x1045E60, .rodata, fx/airscore] - [0x1045E60, .rodata, fx/airscore]
- [0x1045E80, .rodata, code_7AF80] - [0x1045E80, .rodata, code_7AF80]
- [0x1045F40, .rodata, mapModel] - [0x1045F40, .rodata, mapModel]
- [0x1046100, .rodata, code_83340] - [0x1046100, .rodata, propModelList]
- [0x1046110, .rodata, gc/section] - [0x1046110, .rodata, gc/section]
- [0x1046E10, .rodata, gc/sky] - [0x1046E10, .rodata, gc/sky]
- [0x1046E20, .rodata, gc/transition] - [0x1046E20, .rodata, gc/transition]
@@ -1558,7 +1558,7 @@ segments:
- [0x1048560, .bss, fx/airscore] - [0x1048560, .bss, fx/airscore]
- [0x1048560, .bss, code_7AF80] - [0x1048560, .bss, code_7AF80]
- [0x1048560, .bss, mapModel] - [0x1048560, .bss, mapModel]
- [0x1048560, .bss, code_83340] - [0x1048560, .bss, propModelList]
- [0x1048560, .bss, gc/section] - [0x1048560, .bss, gc/section]
- [0x1048560, .bss, gc/sky] - [0x1048560, .bss, gc/sky]
- [0x1048560, .bss, gc/transition] - [0x1048560, .bss, gc/transition]

View File

@@ -100,7 +100,7 @@ extern u16 gFramebuffers[2][DEFAULT_FRAMEBUFFER_WIDTH * DEFAULT_FRAMEBUFFER_HEIG
void func_80253550(void); void func_80253550(void);
void func_8025357C(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 func_80253640(Gfx ** gdl, void *arg1);
void scissorBox_SetForGameMode(Gfx **gdl, s32 framebuffer_idx); void scissorBox_SetForGameMode(Gfx **gdl, s32 framebuffer_idx);
void setupScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_address); void setupScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_address);

View File

@@ -43,7 +43,7 @@ void file_getShort(File *file, s16 *dst);
void file_getNShorts(File *file, s16 *dst, s32 cnt); void file_getNShorts(File *file, s16 *dst, s32 cnt);
bool file_isNextByteExpected(File *file, s32 expected); bool file_isNextByteExpected(File *file, s32 expected);
bool file_getByte_ifExpected(File *file, s32 expected, u8 *dst); 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_getFloat_ifExpected(File *file, s32 expected, f32 *dst);
bool file_getNFloats_ifExpected(File *file, s32 expected, f32 *dst, s32 cnt); bool file_getNFloats_ifExpected(File *file, s32 expected, f32 *dst, s32 cnt);
bool file_getWord_ifExpected(File *file, s32 expected, s32 *dst); bool file_getWord_ifExpected(File *file, s32 expected, s32 *dst);

View File

@@ -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 * 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); Actor * __actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 yaw);
f32 mapModel_getFloorY(f32[3]); f32 mapModel_getFloorY(f32[3]);
BKModelBin *func_8030A428(s32); BKModelBin *propModelList_getModel(s32);
u8 sfxsource_createSfxsourceAndReturnIndex(void); u8 sfxsource_createSfxsourceAndReturnIndex(void);
void sfxsource_setSfxId(u8 indx, enum sfx_e uid); void sfxsource_setSfxId(u8 indx, enum sfx_e uid);
void sfxsource_playSfxAtVolume(u8, f32); void sfxsource_playSfxAtVolume(u8, f32);

View File

@@ -9,44 +9,42 @@
#include "core2/skeletalanim.h" #include "core2/skeletalanim.h"
typedef struct sprite_prop_s{ typedef struct sprite_prop_s{
u32 unk0_31:0xC; u32 sprite_index:0xC;
u32 unk0_19:0x1; u32 unk0_19:0x1;
u32 unk0_18:0x3; u32 r:0x3;
u32 unk0_15:0x3; u32 b:0x3;
u32 unk0_12:0x3; u32 g:0x3;
u32 unk0_9:0x8; u32 scale:0x8;
u32 unk0_1:0x1; u32 mirrored:0x1;
u32 unk0_0:0x1;
s16 unk4[3]; s16 unk4[3];
u16 unk8_15: 5; u16 frame: 5;
u16 unk8_10: 5; u16 unk8_10: 5;
u16 unk8_5: 1; u16 unk8_5: 1;
u16 unk8_4: 1; u16 unk8_4: 1;
u16 unk8_3: 1; u16 unk8_3: 1;
u16 unk8_2: 1; u16 unk8_2: 1;
u16 unk8_1:1; u16 is_3d:1;
u16 unk8_0:1; u16 is_actor:1;
} SpriteProp; } SpriteProp;
typedef struct model_prop_s{ typedef struct model_prop_s{
union{ union{
u16 unk0; u16 unk0;
struct{ struct{
u16 unk0_31:12; u16 model_index:12;
u16 pad0_19:4; u16 pad0_19:4;
}; };
}; };
u8 unk0_15; u8 yaw;
u8 unk0_7; u8 roll;
s16 unk4[3]; s16 position[3];
u8 unkA; u8 scale;
u8 padB_7 :2; u8 padB_7 :2;
u8 unkB_5 :1; u8 unkB_5 :1;
u8 unkB_4 :1; u8 unkB_4 :1;
u8 padB_3 :4; u8 padB_3 :4;
} ModelProp; } ModelProp;
typedef struct actor_prop_s{ typedef struct actor_prop_s{
union { union {
struct { struct {
@@ -60,8 +58,8 @@ typedef struct actor_prop_s{
u16 unk8_4:1; u16 unk8_4:1;
u16 unk8_3:1; u16 unk8_3:1;
u16 unk8_2:1; u16 unk8_2:1;
u16 unk8_1:1; u16 is_3d:1;
u16 unk8_0:1; u16 is_actor:1;
}; };
s32 words[3]; s32 words[3];
}; };
@@ -335,8 +333,8 @@ typedef union prop_s
u16 unk8_4: 1; u16 unk8_4: 1;
u16 unk8_3: 1; u16 unk8_3: 1;
u16 unk8_2: 1; u16 unk8_2: 1;
u16 unk8_1: 1; u16 is_3d: 1;
u16 markerFlag: 1; u16 is_actor: 1;
}; };
} Prop; } Prop;

View File

@@ -270,7 +270,7 @@ func_80305344 = 0x803054e4;
func_803084F0 = 0x80308690; func_803084F0 = 0x80308690;
func_80309B48 = 0x80309ce8; func_80309B48 = 0x80309ce8;
func_80309D58 = 0x80309ef8; func_80309D58 = 0x80309ef8;
func_8030A850 = 0x8030a9f0; propModelList_flush = 0x8030a9f0;
gctransition_done = 0x8030bf38; gctransition_done = 0x8030bf38;
gctransition_8030BDC0 = 0x8030bf60; gctransition_8030BDC0 = 0x8030bf60;
gctransition_reset = 0x8030c07c; gctransition_reset = 0x8030c07c;

View File

@@ -76,7 +76,7 @@ Actor *func_8038DF34(Actor *this){
this->marker->unk38[2] = sp18[2] - this->position[2]; this->marker->unk38[2] = sp18[2] - this->position[2];
prop = func_80320EB0(this->marker, 75.0f, 1); prop = func_80320EB0(this->marker, 75.0f, 1);
if(prop && prop->unk8_0){ if(prop && prop->is_actor){
other = marker_getActor(prop->marker); other = marker_getActor(prop->marker);
marker_id = other->marker->id; marker_id = other->marker->id;
if( marker_id == MARKER_200_TWINKLY_BLUE if( marker_id == MARKER_200_TWINKLY_BLUE

View File

@@ -48,7 +48,7 @@ Actor *chTrucker_draw(ActorMarker *this_marker, Gfx **gfx, Mtx **mtx, Vtx **vtx)
sp2C[1] = this->yaw + 220.0f; sp2C[1] = this->yaw + 220.0f;
sp2C[2] = this->roll; sp2C[2] = this->roll;
modelRender_setDepthMode(MODEL_RENDER_DEPTH_COMPARE); 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; return this;
} }

View File

@@ -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_setAlpha((s32) MIN(255.0f, actorPtr->lifetime_value));
modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL); 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; actorPtr->position_y -= 1.9;
if (actorPtr->actor_specific_1_f < 2.428) { if (actorPtr->actor_specific_1_f < 2.428) {

View File

@@ -11,9 +11,6 @@ extern BKModel *mapModel_getModel(s32);
extern u8 gCompletedBottleBonusGames[7]; extern u8 gCompletedBottleBonusGames[7];
/* .h */ /* .h */
static void __maCastle_resetSecretCheatCodeProgress(void);
static u32 __maCastle_scrambleAddressForSecretCheatCode();
typedef struct typedef struct
{ {
u8 *code; u8 *code;
@@ -43,7 +40,12 @@ typedef struct
s16 maxId; s16 maxId;
} BannedCheatCodeRange; } BannedCheatCodeRange;
static void __maCastle_resetSecretCheatCodeProgress(void);
static u32 __maCastle_scrambleAddressForSecretCheatCode();
static s32 __maCastle_getNumberOfBannedCheatCodesEntered(); static s32 __maCastle_getNumberOfBannedCheatCodesEntered();
static bool __maCastle_isFloorTileValidForSecretCheatCode(LetterFloorTile *floor_tile);
static bool __maCastle_isCurrentSecretCheatCodeCharacter0();
/* .data */ /* .data */
static s32 sSecretCheatCodeRelatedValue = NULL; static s32 sSecretCheatCodeRelatedValue = NULL;

View File

@@ -27,7 +27,7 @@ void func_8025357C(void){
osSendMesg(&D_802831F0, NULL, OS_MESG_BLOCK); 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; Struct_Core1_15B30 *sp1C;
func_80253550(); func_80253550();

View File

@@ -40,10 +40,6 @@ typedef struct Struct_1D00_3_s{
u32 unk10; u32 unk10;
} Struct_1D00_3; } Struct_1D00_3;
typedef struct{
u8 pad0[0x18];
}Struct_core1_1D00_4;
typedef struct struct_core1_1D00_5_s{ typedef struct struct_core1_1D00_5_s{
struct struct_core1_1D00_5_s * next; struct struct_core1_1D00_5_s * next;
u8 type; u8 type;
@@ -154,7 +150,7 @@ s32 D_8027D004;
OSMesgQueue D_8027D008; OSMesgQueue D_8027D008;
OSMesg D_8027D020[3000/FRAMERATE]; OSMesg D_8027D020[3000/FRAMERATE];
OSIoMesg D_8027D0E8; OSIoMesg D_8027D0E8;
Struct_core1_1D00_4 D_8027D100[3000/FRAMERATE]; OSIoMesg D_8027D100[3000/FRAMERATE];
struct { struct {
u8 unk0; u8 unk0;
Struct_1D00_3 *unk4; Struct_1D00_3 *unk4;
@@ -474,9 +470,9 @@ s32 func_80240204(s32 addr, s32 len, void *state){
return osVirtualToPhysical(D_8027D5B0.unk4); return osVirtualToPhysical(D_8027D5B0.unk4);
} }
D_8027D5B0.unk8 = phi_s0->unk0.next; D_8027D5B0.unk8 = phi_s0->unk0.next;
alUnlink(phi_s0); alUnlink(&phi_s0->unk0);
if (sp30 != NULL) { if (sp30 != NULL) {
alLink(phi_s0, sp30); alLink(&phi_s0->unk0, &sp30->unk0);
} else { } else {
phi_v0 = D_8027D5B0.unk4; phi_v0 = D_8027D5B0.unk4;
if (phi_v0 != NULL) { if (phi_v0 != NULL) {
@@ -559,7 +555,7 @@ s32 func_80240204(s32 addr, s32 len, void *state){
void *func_802403B8(void *state) { void *func_802403B8(void *state) {
if (D_8027D5B0.unk0 == 0) { if (D_8027D5B0.unk0 == 0) {
D_8027D5B0.unk4 = NULL; D_8027D5B0.unk4 = NULL;
D_8027D5B0.unk8 = &D_8027D5C0; D_8027D5B0.unk8 = D_8027D5C0;
D_8027D5B0.unk0 = 1; D_8027D5B0.unk0 = 1;
} }
*(void **)state = &D_8027D5B0; *(void **)state = &D_8027D5B0;
@@ -591,9 +587,9 @@ void func_802403F0(void) {
phi_s1 = (Struct_1D00_3 *)phi_s0_2->unk0.next; phi_s1 = (Struct_1D00_3 *)phi_s0_2->unk0.next;
if (phi_s0_2->unkC + 1 < D_8027DCC8) { if (phi_s0_2->unkC + 1 < D_8027DCC8) {
if (phi_s0_2 == D_8027D5B0.unk4) { 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) { if (D_8027D5B0.unk8 != NULL) {
alLink(&phi_s0_2->unk0, &D_8027D5B0.unk8->unk0); alLink(&phi_s0_2->unk0, &D_8027D5B0.unk8->unk0);
} else { } else {

View File

@@ -347,7 +347,7 @@ void *malloc(s32 size){
D_80283234 = NULL; D_80283234 = NULL;
func_803306C8(2); func_803306C8(2);
if(!func_80254B84(0)) if(!func_80254B84(0))
func_8030A850(2); propModelList_flush(2);
if(!func_80254B84(0)) if(!func_80254B84(0))
animCache_flushStale(); animCache_flushStale();
@@ -364,7 +364,7 @@ void *malloc(s32 size){
func_803306C8(3); //modelCache func_803306C8(3); //modelCache
if(!func_80254B84(0)) if(!func_80254B84(0))
func_8030A850(3); //propModelCache propModelList_flush(3); //propModelCache
if(!func_80254B84(0)) if(!func_80254B84(0))
func_8032AD7C(2); //actorArray func_8032AD7C(2); //actorArray

View File

@@ -820,9 +820,9 @@ void __baMarker_resolveCollision(Prop *other_prop){
func_8032B258(actor, obj_collision_type); 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) switch (tmp2)
{ {
case 0x2E8: case 0x2E8:
@@ -837,7 +837,7 @@ void __baMarker_resolveCollision(Prop *other_prop){
} }
} }
else{//L8028D10C //SpriteProp else{//L8028D10C //SpriteProp
tmp3 = other_prop->spriteProp.unk0_31 + 0x572; tmp3 = other_prop->spriteProp.sprite_index + 0x572;
switch (tmp3) switch (tmp3)
{ {
case 0x6D6: //L8028D144 case 0x6D6: //L8028D144
@@ -927,7 +927,7 @@ void baMarker_update(void){
func_80320ED8(playerMarker, temp_s0_2[i], 1); func_80320ED8(playerMarker, temp_s0_2[i], 1);
while(other_prop = func_8032F528()){//L8028D480 while(other_prop = func_8032F528()){//L8028D480
if(!other_prop->unk8_2){ 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; D_8037BF8C = other_prop->actorProp.marker;
} }
__baMarker_resolveCollision(other_prop); __baMarker_resolveCollision(other_prop);

View File

@@ -97,7 +97,7 @@ s32 chCollectible_collectEgg(ActorProp *arg0){
Actor *actPtr = NULL; Actor *actPtr = NULL;
if(arg0 != NULL){ if(arg0 != NULL){
fxSparkle_blueEgg(&arg0->x); fxSparkle_blueEgg(&arg0->x);
if(arg0->unk8_0) if(arg0->is_actor)
actPtr = marker_getActor(arg0->marker); actPtr = marker_getActor(arg0->marker);
} }
chCollectible_collectItem(actPtr, FILEPROG_5_BLUE_EGG_TEXT, 0xD9E, COMUSIC_C_EGG_COLLECTED, 0xD, 2.0f); 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){ void chCollectible_collectRedFeather(ActorProp *arg0){
Actor *actPtr = NULL; Actor *actPtr = NULL;
fxSparkle_redFeather(&arg0->x); fxSparkle_redFeather(&arg0->x);
if(arg0->unk8_0) if(arg0->is_actor)
actPtr = marker_getActor(arg0->marker); actPtr = marker_getActor(arg0->marker);
chCollectible_collectItem(actPtr, FILEPROG_6_RED_FEATHER_TEXT, 0xD9F, COMUSIC_B_RED_FEATHER_COLLECTED, 0xF, 4.0f); 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){ void chCollectible_collectGoldFeather(ActorProp *arg0){
Actor *actPtr = NULL; Actor *actPtr = NULL;
fxSparkle_goldFeather(&arg0->x); fxSparkle_goldFeather(&arg0->x);
if(arg0->unk8_0) if(arg0->is_actor)
actPtr = marker_getActor(arg0->marker); 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); chCollectible_collectItem(actPtr, FILEPROG_7_GOLD_FEATHER_TEXT, 0xDA0, COMUSIC_14_GOLD_FEATHER_COLLECTED, ITEM_10_GOLD_FEATHER, 6.0f);
} }

View File

@@ -57,7 +57,7 @@ void mapSavestate_save(enum map_e map)
valPtr = (u32 *) D_8037E650[map]; valPtr = (u32 *) D_8037E650[map];
*valPtr = mapSpecificFlags_getAll(); *valPtr = mapSpecificFlags_getAll();
iBit = 0x20; iBit = 0x20;
func_80308230(1); cubeList_sort(1);
func_803083B0(-1); func_803083B0(-1);
for (reg_s4 = func_803083B0(-2); reg_s4 != (-1); reg_s4 = func_803083B0(-2)) 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]); flag_ptr = reinterpret_cast(u32*, D_8037E650[map_id]);
mapSpecificFlags_setAll(*flag_ptr); mapSpecificFlags_setAll(*flag_ptr);
iBit += 8 * sizeof(u32); iBit += 8 * sizeof(u32);
func_80308230(1); cubeList_sort(1);
func_803083B0(-1); func_803083B0(-1);
while ( while (
@@ -105,7 +105,7 @@ void mapSavestate_apply(enum map_e map_id) {
) { ) {
iBit++; iBit++;
} }
func_80308230(0); cubeList_sort(0);
actor_list_ptr = (ActorListSaveState *)D_8037E650[map_id] + (((iBit + (0x80 - 1)) >> 7) * 4); actor_list_ptr = (ActorListSaveState *)D_8037E650[map_id] + (((iBit + (0x80 - 1)) >> 7) * 4);
func_8032A09C(D_8037E650[map_id], actor_list_ptr); func_8032A09C(D_8037E650[map_id], actor_list_ptr);

View File

@@ -405,18 +405,18 @@ BKCollisionTri *func_802E76B0(BKCollisionList *collisionList, BKVertexList *vert
return result_collision; 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 sp44[3];
f32 sp38[3]; f32 sp38[3];
int sp34; int sp34;
int i; int i;
if(!func_802E74A0(arg2, vtxList->global_norm*arg4, arg5, arg6)){ if(!func_802E74A0(arg2, vtxList->global_norm*scale, arg5, arg6)){
return 0; return 0;
} }
else{ else{
mlMtxIdent(); mlMtxIdent();
func_80252CC4(arg2, arg3, arg4, 0); func_80252CC4(arg2, rotation, scale, 0);
mlMtx_apply_vec3f(sp44, arg5); mlMtx_apply_vec3f(sp44, arg5);
mlMtx_apply_vec3f(sp38, arg6); mlMtx_apply_vec3f(sp38, arg6);
sp34 = func_802E76B0(collision_list, vtxList, sp44, sp38, arg7, arg8); sp34 = func_802E76B0(collision_list, vtxList, sp44, sp38, arg7, arg8);
@@ -425,15 +425,15 @@ BKCollisionTri *func_802E805C(BKCollisionList *collision_list, BKVertexList *vtx
} }
else{ else{
mlMtxIdent(); mlMtxIdent();
func_80252C08(arg2, arg3, arg4, NULL); func_80252C08(arg2, rotation, scale, NULL);
mlMtx_apply_vec3f(arg6, sp38); mlMtx_apply_vec3f(arg6, sp38);
mlMtxIdent(); mlMtxIdent();
func_80252C08(NULL, arg3, 1.0f, 0); func_80252C08(NULL, rotation, 1.0f, 0);
mlMtx_apply_vec3f(arg7, arg7); mlMtx_apply_vec3f(arg7, arg7);
mlMtxIdent(); mlMtxIdent();
func_80252C08(arg2, arg3, arg4, 0); func_80252C08(arg2, rotation, scale, 0);
for(i = 0; i < 3; i++){ for(i = 0; i < 3; i++){
mlMtx_apply_vec3f(D_8037EAA8[i], D_8037EAA8[i]); mlMtx_apply_vec3f(D_8037EAA8[i], D_8037EAA8[i]);

View File

@@ -518,7 +518,7 @@ static Cube *__code7AF80_getCubeAtPosition(s32 position[3]) {
(position[2] - sCubeList.min[2]) * sCubeList.stride[1]; (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 sp1C[3];
s32 i; s32 i;
// Cube *out; // Cube *out;
@@ -542,13 +542,13 @@ Cube *cube_atPosition_s32(s32 position[3]) {
+ diff[2]*sCubeList.stride[1]; + diff[2]*sCubeList.stride[1];
} }
Cube *cube_atPosition_f32(f32 position[3]){ Cube *cubeList_GetCubeAtPosition_f32(f32 position[3]){
s32 pos_s32[3]; s32 pos_s32[3];
pos_s32[0] = (s32)position[0]; pos_s32[0] = (s32)position[0];
pos_s32[1] = (s32)position[1]; pos_s32[1] = (s32)position[1];
pos_s32[2] = (s32)position[2]; pos_s32[2] = (s32)position[2];
return cube_atPosition_s32(pos_s32); return cubeList_GetCubeAtPosition_s32(pos_s32);
} }
Cube *func_8030364C(void){ Cube *func_8030364C(void){
@@ -692,7 +692,7 @@ void func_80303C54(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *arg
while (*arg4 != -1){ while (*arg4 != -1){
phi_s0 = func_803322F0(cube, marker, arg2, arg3, arg4); phi_s0 = func_803322F0(cube, marker, arg2, arg3, arg4);
if (phi_s0 != NULL) { 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) { if (phi_s0->marker->unk58(phi_s0->marker, marker) == 0) {
phi_s0 = NULL; phi_s0 = NULL;
} }
@@ -2126,19 +2126,19 @@ u32 func_80307EA8(s32 arg0, s32 position[3], s32 *arg2, s32 *arg3) {
NodeProp *func_803080C8(s32 arg0) { NodeProp *func_803080C8(s32 arg0) {
s32 sp3C[3]; s32 sp3C[3];
u32 var_v1; u32 i_prop;
Cube *temp_v0; Cube *current_cube;
for(sp3C[1] = sCubeList.min[1]; sp3C[1] <= sCubeList.max[1]; sp3C[1]++){ for(sp3C[1] = sCubeList.min[1]; sp3C[1] <= sCubeList.max[1]; sp3C[1]++){
if(func_80305C30(sp3C[1] - sCubeList.min[1])){ if(func_80305C30(sp3C[1] - sCubeList.min[1])){
for(sp3C[0] = sCubeList.min[0]; sp3C[0] <= sCubeList.max[0]; sp3C[0]++){ 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]++){ for(sp3C[2] = sCubeList.min[2]; sp3C[2] <= sCubeList.max[2]; sp3C[2]++){
temp_v0 = __code7AF80_getCubeAtPosition(sp3C); current_cube = __code7AF80_getCubeAtPosition(sp3C);
if (temp_v0 != NULL) { if (current_cube != NULL) {
for(var_v1 = 0; var_v1 < temp_v0->prop1Cnt; var_v1++){ for(i_prop = 0; i_prop < current_cube->prop1Cnt; i_prop++){
if (arg0 == temp_v0->prop1Ptr[var_v1].unk10_31) { if (arg0 == current_cube->prop1Ptr[i_prop].unk10_31) {
D_8036A9DC = temp_v0; D_8036A9DC = current_cube;
return &temp_v0->prop1Ptr[var_v1]; return &current_cube->prop1Ptr[i_prop];
} }
} }
@@ -2155,13 +2155,13 @@ Cube *func_80308224(void){
return D_8036A9DC; return D_8036A9DC;
} }
void func_80308230(s32 arg0) { void cubeList_sort(s32 absolute_positon) {
Cube *iCube; Cube *iCube;
for(iCube = sCubeList.cubes; iCube < sCubeList.cubes + sCubeList.cubeCnt; iCube++){ for(iCube = sCubeList.cubes; iCube < sCubeList.cubes + sCubeList.cubeCnt; iCube++){
if (arg0 == 0) { if (absolute_positon == 0) {
func_8032D158(iCube); //sort cube props (dist from viewport) cube_sortRelative(iCube); //sort cube props (dist from viewport)
} else { } 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; bool var_a0;
var_v0 = arg0->prop2Ptr + *arg1; var_v0 = arg0->prop2Ptr + *arg1;
while ((var_v0->markerFlag == 1) && (*arg1 < arg0->prop2Cnt)) { while ((var_v0->is_actor == 1) && (*arg1 < arg0->prop2Cnt)) {
(*arg1)++; (*arg1)++;
var_v0++; var_v0++;
} }
@@ -2435,7 +2435,7 @@ void func_80308D2C(Gfx **gfx, Mtx **mtx, Vtx **vtx) {
cube = &sCubeList.cubes[D_80382150[phi_s4]]; cube = &sCubeList.cubes[D_80382150[phi_s4]];
if (viewport_cube_isInFrustum(cube)) { if (viewport_cube_isInFrustum(cube)) {
viewport_getPosition_vec3w(vp_pos); 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++) { 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]) { if (phi_s0 < D_80382150[phi_s4 + 1]) {

View File

@@ -1,224 +0,0 @@
#include <ultra64.h>
#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);
}
}
}

View File

@@ -38,7 +38,7 @@ typedef struct {
} QuizQuestionBin; } QuizQuestionBin;
typedef struct{ 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; } QuizQuestionStruct;
typedef struct { 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); 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_unk0 = *(char_iter++); // NEXT
quiz_question_bin_unk1 = *(char_iter++); // NEXT quiz_question_bin_unk1 = *(char_iter++); // NEXT
quiz_question_bin_unk2 = *(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 char_iter += 2*code94620_func_8031B5B0(); // SKIP
phi_v1 = *(char_iter++); // NEXT phi_v1 = *(char_iter++); // NEXT
phi_v1 += (*(char_iter++) << 8); 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 str_cnt = *(char_iter++); // NEXT char_iter = 5
for(phi_a1 = 0; phi_a1 < 4; phi_a1++){ 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); 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, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_3_UNKNOWN);
timedFunc_set_1(0.0f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 1); timedFunc_set_1(0.0f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 1);
timedFunc_set_1(0.2f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 2); timedFunc_set_1(0.2f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 2);
timedFunc_set_1(0.4f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 3); timedFunc_set_1(0.4f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 3);
break; break;
case GCQUIZ_STATE_3_UNKNOWN: 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); item_set(ITEM_6_HOURGLASS, FALSE);
break; break;
@@ -455,7 +455,7 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){
} else { } else {
comusic_playTrack(COMUSIC_2B_DING_B); 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; break;
case GCQUIZ_STATE_9_UNKNOWN: case GCQUIZ_STATE_9_UNKNOWN:

View File

@@ -1055,7 +1055,7 @@ static void __actor_free(ActorMarker *arg0, Actor *arg1){
marker_free(arg0); 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); 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; 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]; s32 sp24[3];
int i; int i;
for(i = 0; i< 3; i++){ for(i = 0; i< 3; i++){
sp24[i] = (*pos)[i]; sp24[i] = pos[i];
} }
return __actor_spawnWithYaw_s32(id, &sp24, yaw); return __actor_spawnWithYaw_s32(id, &sp24, yaw);

View File

@@ -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); func_80320ED8(actor->marker, temp_f0 / 2, 2);
actor->marker->collidable = stored_collidability; actor->marker->collidable = stored_collidability;
for (var_v1 = func_8032F528(); var_v1 != NULL; var_v1 = func_8032F528()) { 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; D_803833D0 = var_v1;
actor->position[0] = (f32) arg1[0]; actor->position[0] = (f32) arg1[0];
actor->position[1] = (f32) arg1[1]; actor->position[1] = (f32) arg1[1];

View File

@@ -8,6 +8,10 @@
#define AssetCacheSize 0x3D5 #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 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 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 *); 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 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 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 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); Prop *func_80303F7C(s32, f32, s32, s32);
s32 func_803058C0(f32); s32 func_803058C0(f32);
@@ -27,12 +33,12 @@ void func_80305CD8(s32, s32);
void code_A5BC0_initCubePropActorProp(Cube*); void code_A5BC0_initCubePropActorProp(Cube*);
ActorMarker * func_80332A60(void); ActorMarker * func_80332A60(void);
extern void func_8032F3D4(s32 [3], ActorMarker *, s32); 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 propModelList_drawSprite(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_drawModel(Gfx **, Mtx **, Vtx **, f32[3], f32[3], f32, s32, Cube*);
s32 func_8032D9C0(Cube*, Prop*); s32 func_8032D9C0(Cube*, Prop*);
void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3); void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3);
void func_80332B2C(ActorMarker * arg0); void func_80332B2C(ActorMarker * arg0);
BKSprite *func_8030A55C(s32 arg0); BKSprite *propModelList_getSprite(s32 arg0);
typedef union{ typedef union{
struct{ struct{
@@ -74,7 +80,7 @@ s32 D_803833F0[3];
s32 D_803833FC; s32 D_803833FC;
s32 D_80383400; s32 D_80383400;
Cube *D_80383404; Cube *D_80383404;
s32 D_80383408; Prop *D_80383408;
s32 D_8038340C; s32 D_8038340C;
//BREAK??? //BREAK???
@@ -92,7 +98,7 @@ s32 D_8038355C;
/* .code */ /* .code */
// This function sorts a cube's props based on distance // 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]; s32 ref_position[3];
Prop *var_v1; Prop *var_v1;
Prop *start_prop; Prop *start_prop;
@@ -178,9 +184,8 @@ void func_8032CD60(Prop *prop) {
bool var_t5; bool var_t5;
s32 var_v1; s32 var_v1;
// if(prop->markerFlag){
var_v0 = ((u32)(((u16*)prop)[5]) & 1) ? func_80330F50(prop->actorProp.marker) 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))) { if ((var_v0 != NULL) && ((var_v0->unkC.bit27 != 0))) {
sp48 = var_v0->unkC.bit31; sp48 = var_v0->unkC.bit31;
sp44 = var_v0->unkC.bit27; sp44 = var_v0->unkC.bit27;
@@ -246,24 +251,24 @@ void func_8032CD60(Prop *prop) {
var_v1 += (sp34) ? sp40 : -sp40; var_v1 += (sp34) ? sp40 : -sp40;
var_v1 = (var_v1 < 0) ? var_v1 +sp38 : var_v1 % sp38; 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)) { if (((u32)(((u16*)prop)[5]) & 1)) {
prop->spriteProp.unk8_5 = sp3C; prop->spriteProp.unk8_5 = sp3C;
} }
else{ else{
prop->spriteProp.unk0_1 = sp3C; prop->spriteProp.mirrored = sp3C;
} }
} }
} }
void func_8032D120(Cube *cube){ void cube_sortAbsolute(Cube *cube){
if(cube->prop2Cnt >= 2) 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) if(cube->prop2Cnt >= 2)
func_8032CB50(cube, 0); __cube_sort(cube, 0);
} }
static void __marker_draw(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx){ 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){ void func_8032D3D8(Gfx **gdl, Mtx **mptr, Vtx **vptr){
int i; int i;
for(i = 0; i < vector_size(D_80383550); 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){ void func_8032D474(Gfx **gdl, Mtx **mptr, Vtx **vptr){
int i; int i;
for(i = 0; i < vector_size(D_80383554); 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){ void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Prop *iProp; Prop *iProp;
int i; int i;
f32 sp94[3]; f32 position[3];
f32 sp88[3]; f32 rotation[3];
tmp_bitfield tmp_v0; tmp_bitfield tmp_v0;
int iOffset; int iOffset;
ActorMarker **markerPtr; ActorMarker **markerPtr;
if(cube->prop2Cnt == 0 ) return; if(cube->prop2Cnt == 0 ) return;
func_8032CB50(cube, 0); __cube_sort(cube, 0);
iOffset = 0; iOffset = 0;
for(i = 0; i < cube->prop2Cnt; i++){//L8032D5A0 for(i = 0; i < cube->prop2Cnt; i++){//L8032D5A0
iOffset = i * 0xC; iOffset = i * 0xC;
iProp = ((s32)cube->prop2Ptr + iOffset); iProp = (Prop *)((s32)cube->prop2Ptr + iOffset);
tmp_v0.word = *(u32 *)((s32)iProp + 0x8); tmp_v0.word = *(u32 *)((s32)iProp + 0x8);
if(!tmp_v0.unk4){ if(!tmp_v0.unk4){
@@ -368,23 +373,23 @@ void func_8032D510(Cube *cube, Gfx **gfx, Mtx **mtx, Vtx **vtx){
}//L8032D62C }//L8032D62C
} }
else{//L8032D640 else{//L8032D640
sp94[0] = (f32)iProp->modelProp.unk4[0]; position[0] = (f32)iProp->modelProp.position[0];
sp94[1] = (f32)iProp->modelProp.unk4[1]; position[1] = (f32)iProp->modelProp.position[1];
sp94[2] = (f32)iProp->modelProp.unk4[2]; position[2] = (f32)iProp->modelProp.position[2];
if(iProp->unk8_1){ if(iProp->is_3d){
sp88[0] = 0.0f; rotation[0] = 0.0f;
sp88[1] = (f32)((s32)iProp->modelProp.unk0_15*2); rotation[1] = (f32)((s32)iProp->modelProp.yaw*2);
sp88[2] = (f32)((s32)iProp->modelProp.unk0_7*2); rotation[2] = (f32)((s32)iProp->modelProp.roll*2);
func_8030A2D0(gfx, mtx, vtx, propModelList_drawModel(gfx, mtx, vtx,
sp94, sp88, (f32)iProp->modelProp.unkA/100.0, position, rotation, (f32)iProp->modelProp.scale/100.0,
iProp->modelProp.unk0_31, cube iProp->modelProp.model_index, cube
); );
} }
else{//L8032D72C else{//L8032D72C
func_8030A350( gfx, mtx, vtx, propModelList_drawSprite( gfx, mtx, vtx,
sp94, (f32)iProp->spriteProp.unk0_9/100.0, iProp->spriteProp.unk0_31, cube, position, (f32)iProp->spriteProp.scale/100.0, iProp->spriteProp.sprite_index, cube,
iProp->spriteProp.unk0_18, iProp->spriteProp.unk0_15, iProp->spriteProp.unk0_12, iProp->spriteProp.r, iProp->spriteProp.b, iProp->spriteProp.g,
iProp->spriteProp.unk0_1, iProp->spriteProp.unk8_15 iProp->spriteProp.mirrored, iProp->spriteProp.frame
); );
} }
}//L8032D7C4 }//L8032D7C4
@@ -404,7 +409,7 @@ Prop *__codeA5BC0_initProp2Ptr(Cube *cube) {
cube->prop2Ptr = malloc(sizeof(Prop)); cube->prop2Ptr = malloc(sizeof(Prop));
} }
sp1C = &cube->prop2Ptr[cube->prop2Cnt-1]; sp1C = &cube->prop2Ptr[cube->prop2Cnt-1];
sp1C->markerFlag = FALSE; sp1C->is_actor = FALSE;
code_A5BC0_initCubePropActorProp(cube); code_A5BC0_initCubePropActorProp(cube);
return sp1C; return sp1C;
} }
@@ -427,7 +432,7 @@ s32 func_8032D9C0(Cube *cube, Prop* prop){
sp24 = 0; sp24 = 0;
if(cube->prop2Cnt != 0){ if(cube->prop2Cnt != 0){
sp24 = prop->unk8_1; sp24 = prop->is_3d;
if(func_80305D14()){ if(func_80305D14()){
func_80305CD8(func_803058C0(prop->unk4[1]), -1); func_80305CD8(func_803058C0(prop->unk4[1]), -1);
} }
@@ -489,11 +494,11 @@ ActorMarker *func_8032DCAC(void){
SpriteProp *func_8032DCB8(Cube *cube) { SpriteProp *func_8032DCB8(Cube *cube) {
SpriteProp *sp1C; SpriteProp *sp1C;
sp1C = __codeA5BC0_initProp2Ptr(cube); sp1C = (SpriteProp *)__codeA5BC0_initProp2Ptr(cube);
sp1C->unk8_0 = FALSE; sp1C->is_actor = FALSE;
sp1C->unk8_1 = FALSE; sp1C->is_3d = FALSE;
sp1C->unk8_15 = 0; sp1C->frame = 0;
sp1C->unk0_1 = 0; sp1C->mirrored = 0;
sp1C->unk8_10 = randf() * 32.0f; sp1C->unk8_10 = randf() * 32.0f;
sp1C->unk8_3 = FALSE; sp1C->unk8_3 = FALSE;
sp1C->unk8_2 = FALSE; sp1C->unk8_2 = FALSE;
@@ -501,21 +506,22 @@ SpriteProp *func_8032DCB8(Cube *cube) {
return sp1C; return sp1C;
} }
void func_8032DDD8(Cube *cube) { ModelProp * func_8032DDD8(Cube *cube) {
Prop *temp_v0; Prop *temp_v0;
temp_v0 = __codeA5BC0_initProp2Ptr(cube); temp_v0 = __codeA5BC0_initProp2Ptr(cube);
temp_v0->markerFlag = FALSE; temp_v0->is_actor = FALSE;
temp_v0->unk8_1 = TRUE; temp_v0->is_3d = TRUE;
temp_v0->unk8_5 = FALSE; temp_v0->unk8_5 = FALSE;
temp_v0->unk8_3 = FALSE; temp_v0->unk8_3 = FALSE;
temp_v0->unk8_2 = FALSE; temp_v0->unk8_2 = FALSE;
temp_v0->unk8_4 = TRUE; temp_v0->unk8_4 = TRUE;
return (ModelProp *)temp_v0;
} }
void func_8032DE2C(ModelProp *model_prop, enum asset_e sprite_id){ 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){\ 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){ 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){ 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){ 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){ void func_8032DEA0(SpriteProp *sprite_prop, s32 *r, s32 *b, s32 *g){
*arg1 = sprite_prop->unk0_18; *r = sprite_prop->r;
*arg2 = sprite_prop->unk0_15; *b = sprite_prop->b;
*arg3 = sprite_prop->unk0_12; *g = sprite_prop->g;
} }
void func_8032DECC(SpriteProp *sprite_prop, s32 *arg1){ 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){ 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){ void func_8032DEFC(ModelProp *prop_prop, s32 arg1){
prop_prop->unkA = arg1; prop_prop->scale = arg1;
} }
void func_8032DF04(ModelProp *prop_prop, s32 *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){ 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){ 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){ void func_8032DF40(ModelProp *prop_prop, s32 arg1, s32 arg2){
prop_prop->unk0_15 = arg1; prop_prop->yaw = arg1;
prop_prop->unk0_7 = arg2; prop_prop->roll = arg2;
} }
void func_8032DF4C(ModelProp *prop_prop, s32 *arg1, s32 *arg2){ void func_8032DF4C(ModelProp *prop_prop, s32 *arg1, s32 *arg2){
*arg1 = prop_prop->unk0_15; *arg1 = prop_prop->yaw;
*arg2 = prop_prop->unk0_7; *arg2 = prop_prop->roll;
} }
void func_8032DF60(SpriteProp *sprite_prop, s32 arg1, s32 arg2, s32 arg3){ void func_8032DF60(SpriteProp *sprite_prop, s32 r, s32 b, s32 g){
sprite_prop->unk0_18 = arg1; sprite_prop->r = r;
sprite_prop->unk0_15 = arg2; sprite_prop->b = b;
sprite_prop->unk0_12 = arg3; sprite_prop->g = g;
} }
void func_8032DFA0(SpriteProp *sprite_prop, bool arg1){ void func_8032DFA0(SpriteProp *sprite_prop, bool arg1){
@@ -624,7 +630,7 @@ void cube_free(Cube *cube){
if(cube->prop2Ptr){ if(cube->prop2Ptr){
for(iProp = cube->prop2Ptr; iProp < cube->prop2Ptr +cube->prop2Cnt; iProp++){ for(iProp = cube->prop2Ptr; iProp < cube->prop2Ptr +cube->prop2Cnt; iProp++){
if(iProp->markerFlag){ if(iProp->is_actor){
func_80332B2C(iProp->actorProp.marker); 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)) { } else if (file_getByte_ifExpected(file_ptr, 6, &cube1_count)) {
__codeA5BC0_freeCube1Pointer(cube, cube1_count); __codeA5BC0_freeCube1Pointer(cube, cube1_count);
cube->prop1Ptr = (OtherNode*) malloc(cube1_count * sizeof(OtherNode)); cube->prop1Ptr = (NodeProp*) malloc(cube1_count * sizeof(OtherNode));
node_prop_ptr = (OtherNode*) 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)); 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){ if(other_prop_ptr->unk4_0 && !other_prop_ptr->unkC_0){
other_prop_ptr->unk4_17 = 0; other_prop_ptr->unk4_17 = 0;
other_prop_ptr->unk10_4 = 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)); 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++){ for(var_v1_2 = cube->prop2Ptr; var_v1_2 < cube->prop2Ptr + sp47; var_v1_2++){
var_v1_2->unk8_4 = 1; var_v1_2->unk8_4 = 1;
if (var_v1_2->unk8_1) { if (var_v1_2->is_3d) {
var_v1_2->unk8_5 = 0; var_v1_2->unk8_5 = 0;
} }
if (sp34) { if (sp34) {
if (!(var_v1_2->markerFlag) && !(var_v1_2->unk8_1)){ if (!(var_v1_2->is_actor) && !(var_v1_2->is_3d)){
temp_v0_5 = var_v1_2->spriteProp.unk0_31 + 0x572; 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)){ if((temp_v0_5 == 0x580) || (temp_v0_5 == 0x6D1) || (temp_v0_5 == 0x6D6) || (temp_v0_5 == 0x6D7)){
var_v1_2->unk8_4 = 0; var_v1_2->unk8_4 = 0;
} }
@@ -949,7 +955,7 @@ void func_8032EE2C(s32 arg0[3], s32 arg1, s32 arg2) {
D_80383400 = arg1; D_80383400 = arg1;
D_803833FC = arg2 * arg2; D_803833FC = arg2 * arg2;
D_80383404 = 0; D_80383404 = 0;
D_80383408 = 0; D_80383408 = NULL;
D_8038340C = 0; D_8038340C = 0;
} }
@@ -963,9 +969,9 @@ void func_8032EE80(Cube *cube) {
if ((cube->prop2Cnt != 0) && ((D_80383400 == 1) || (D_80383400 == 2))) { if ((cube->prop2Cnt != 0) && ((D_80383400 == 1) || (D_80383400 == 2))) {
var_a1 = cube->prop2Ptr; var_a1 = cube->prop2Ptr;
for(var_t0 = 0; var_t0 < cube->prop2Cnt; var_t0++, var_a1++){ 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) { 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) { 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_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; D_80383404 = cube;
@@ -985,7 +991,7 @@ void func_8032EE80(Cube *cube) {
if (D_80383558 == NULL || D_80383558(var_s0, D_8038355C)) { 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_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_80383404 = cube;
D_80383408 = var_s0; D_80383408 = (Prop*)var_s0;
D_8038340C = D_80383400; D_8038340C = D_80383400;
} }
} }
@@ -1013,7 +1019,7 @@ void func_8032F194(ActorMarker *marker, s32 position[3], Cube *cube) {
v0->y = position[1]; v0->y = position[1];
v0->z = position[2]; 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 = marker->propPtr;
propPtr->words[1] = sp24.words[1]; propPtr->words[1] = sp24.words[1];
@@ -1024,12 +1030,12 @@ void func_8032F21C(Cube *cube, s32 position[3], ActorMarker *marker, bool arg3)
ActorProp *sp1C; ActorProp *sp1C;
sp1C = &__codeA5BC0_initProp2Ptr(cube)->actorProp; sp1C = &__codeA5BC0_initProp2Ptr(cube)->actorProp;
sp1C->unk8_0 = TRUE; sp1C->is_actor = TRUE;
sp1C->x = (s16) position[0]; sp1C->x = (s16) position[0];
sp1C->y = (s16) position[1]; sp1C->y = (s16) position[1];
sp1C->z = (s16) position[2]; sp1C->z = (s16) position[2];
sp1C->marker = marker; sp1C->marker = marker;
sp1C->unk8_1 = arg3; sp1C->is_3d = arg3;
sp1C->unk8_15 = 0; sp1C->unk8_15 = 0;
sp1C->unk8_5 = FALSE; 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){ 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){ void marker_free(ActorMarker *this){
@@ -1060,7 +1066,7 @@ void func_8032F464(bool arg0){
void func_8032F470(s32 *pos, ActorMarker *arg1){ void func_8032F470(s32 *pos, ActorMarker *arg1){
Cube *cubePtr; 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){ if(cubePtr == arg1->cubePtr){
arg1->propPtr->x = pos[0]; 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); func_80320EB0(marker, arg2, arg3);
} }
void func_8032F5E8(s32 arg0[3], s32 arg1, f32 arg2, s32 arg3) { void func_8032F5E8(s32 position[3], ActorMarker *marker, f32 arg2, s32 arg3) {
f32 sp1C[3]; f32 position_f[3];
sp1C[0] = arg0[0]; position_f[0] = position[0];
sp1C[1] = arg0[1]; position_f[1] = position[1];
sp1C[2] = arg0[2]; position_f[2] = position[2];
func_8032F5B0(sp1C, arg1, arg2, arg3); func_8032F5B0(position_f, marker, arg2, arg3);
} }
void func_8032F64C(f32 *pos, ActorMarker * marker){ 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){ if(marker != NULL && marker->unk54 != NULL){
marker->unk54(marker, other_marker, arg2); marker->unk54(marker, other_marker, arg2);
} }
} }
//marker_setCollisionMethods
void marker_setCollisionScripts(ActorMarker *this, MarkerCollisionFunc ow_func, MarkerCollisionFunc arg2, MarkerCollisionFunc die_func){ void marker_setCollisionScripts(ActorMarker *this, MarkerCollisionFunc ow_func, MarkerCollisionFunc arg2, MarkerCollisionFunc die_func){
this->collisionFunc = ow_func; this->collisionFunc = ow_func;
this->collision2Func = arg2; this->collision2Func = arg2;
@@ -1292,7 +1297,7 @@ void code_A5BC0_initCubePropActorProp(Cube *cube) {
prop_ptr = cube->prop2Ptr; prop_ptr = cube->prop2Ptr;
prop_cnt = cube->prop2Cnt; prop_cnt = cube->prop2Cnt;
while(prop_cnt != 0){ 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->propPtr = &prop_ptr->actorProp;
prop_ptr->actorProp.marker->cubePtr = cube; prop_ptr->actorProp.marker->cubePtr = cube;
} }
@@ -1435,7 +1440,7 @@ void func_803306C8(s32 arg0) {
void func_803308A0(void) { void func_803308A0(void) {
s32 i; s32 i;
ModelCache *var_s0; ModelCache *var_s0;
void *var_a1; s32 var_a1;
for (i = 0; i < 0x3D5; i++) { for (i = 0; i < 0x3D5; i++) {
var_s0 = &modelCache[i]; var_s0 = &modelCache[i];
@@ -1513,7 +1518,7 @@ BKModelBin *marker_loadModelBin(ActorMarker *this){
func_8032ACA8(thisActor); func_8032ACA8(thisActor);
} }
func_8032AB84(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(); this->unk18 = func_80330B10();
} }
modelInfo->unk10 = globalTimer_getTime(); modelInfo->unk10 = globalTimer_getTime();
@@ -1679,48 +1684,48 @@ bool func_80331158(ActorMarker *arg0, s32 arg1, s32 arg2) {
return FALSE; 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; Actor *temp_s2_2;
ActorMarker *temp_a0; ActorMarker *temp_a0;
BKModelBin *var_a0; BKModelBin *var_a0;
BKModelBin *var_s0 = NULL; BKModelBin *var_s0 = NULL;
BKVertexList *temp_a1; BKVertexList *temp_a1;
Prop *var_s1; Prop *var_s1;
f32 spAC[3]; f32 model_position[3];
f32 spA0[3]; f32 model_rotation[3];
BKCollisionList *temp_s0; BKCollisionList *temp_s0;
BKCollisionTri *temp_s0_2; BKCollisionTri *temp_s0_2;
BKCollisionList *temp_s2; BKCollisionList *temp_s2;
f32 sp88[3]; f32 actor_position[3];
f32 sp7C[3]; f32 actor_rotation[3];
BKCollisionTri *var_s6; BKCollisionTri *var_s6;
BKCollisionTri *var_v0; BKCollisionTri *var_v0;
u32 var_s5; u32 var_s5;
var_s6 = NULL; 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);
if (!var_s1->markerFlag && var_s1->unk8_1 && var_s1->unk8_4) { //ModelProp if (!var_s1->is_actor && var_s1->is_3d && var_s1->unk8_4) { //ModelProp
var_s0 = func_8030A4B4(((u32)var_s1->modelProp.unk0 >> 0x4)); var_s0 = propModelList_getModelIfActive(((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_s0 != NULL) || (func_8028F280() && ((var_s0 = propModelList_getModel(((u32)var_s1->modelProp.unk0 >> 0x4))) != NULL))) {
temp_s2 = model_getCollisionList(var_s0); temp_s2 = model_getCollisionList(var_s0);
if (temp_s2 != 0) { if (temp_s2 != 0) {
spAC[0] = (f32) var_s1->modelProp.unk4[0]; model_position[0] = (f32) var_s1->modelProp.position[0];
spAC[1] = (f32) var_s1->modelProp.unk4[1]; model_position[1] = (f32) var_s1->modelProp.position[1];
spAC[2] = (f32) var_s1->modelProp.unk4[2]; model_position[2] = (f32) var_s1->modelProp.position[2];
spA0[0] = 0.0f; model_rotation[0] = 0.0f;
spA0[1] = (f32) (var_s1->modelProp.unk0_15 * 2); model_rotation[1] = (f32) (var_s1->modelProp.yaw * 2);
spA0[2] = (f32) (var_s1->modelProp.unk0_7 * 2); model_rotation[2] = (f32) (var_s1->modelProp.roll * 2);
var_v0 = func_802E805C(temp_s2, model_getVtxList(var_s0), spAC, spA0, (f32)var_s1->modelProp.unkA / 100.0, arg1, arg2, arg3, arg4); 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) { if (var_v0 != NULL) {
var_s6 = var_v0; 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))) { if (!(var_s1->actorProp.marker->unk3E_0 && (marker_getActor(var_s1->actorProp.marker)->unk3C & 0x008000000))) {
var_a0 = func_80330DE4(var_s1->actorProp.marker); var_a0 = func_80330DE4(var_s1->actorProp.marker);
} else { } else {
@@ -1732,13 +1737,13 @@ BKCollisionTri *func_803311D4(Cube *arg0, f32 *arg1, f32 *arg2, f32 *arg3, u32 a
if (temp_s0 != 0) { if (temp_s0 != 0) {
temp_s2_2 = marker_getActor(var_s1->actorProp.marker); temp_s2_2 = marker_getActor(var_s1->actorProp.marker);
temp_a1 = func_80330C74(temp_s2_2); temp_a1 = func_80330C74(temp_s2_2);
sp88[0] = (f32) var_s1->actorProp.x; actor_position[0] = (f32) var_s1->actorProp.x;
sp88[1] = (f32) var_s1->actorProp.y; actor_position[1] = (f32) var_s1->actorProp.y;
sp88[2] = (f32) var_s1->actorProp.z; actor_position[2] = (f32) var_s1->actorProp.z;
sp7C[0] = (f32) var_s1->actorProp.marker->pitch; actor_rotation[0] = (f32) var_s1->actorProp.marker->pitch;
sp7C[1] = (f32) var_s1->actorProp.marker->yaw; actor_rotation[1] = (f32) var_s1->actorProp.marker->yaw;
sp7C[2] = (f32) var_s1->actorProp.marker->roll; actor_rotation[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); 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())) { if ((temp_s0_2 != NULL) && (func_8029453C())) {
marker_loadModelBin(var_s1->actorProp.marker); marker_loadModelBin(var_s1->actorProp.marker);
if (var_s1->actorProp.marker->unk50 != 0) { 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 != NULL) {
if (var_s1->actorProp.marker->unk18->unk0 != 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); 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; new_var2 = sp8C;
for (; var_s3 != 0; var_s0++, var_s3--) 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) if (model_bin == 0)
{ {
continue; continue;
@@ -1809,15 +1814,15 @@ s32 func_80331638(Cube *cube, f32 arg1[3], f32 arg2[3], f32 arg3, f32 arg4[3], s
{ {
continue; continue;
} }
spBC[0] = (f32) var_s0->modelProp.unk4[0]; spBC[0] = (f32) var_s0->modelProp.position[0];
spBC[1] = (f32) var_s0->modelProp.unk4[1]; spBC[1] = (f32) var_s0->modelProp.position[1];
spBC[2] = (f32) var_s0->modelProp.unk4[2]; spBC[2] = (f32) var_s0->modelProp.position[2];
spB0[0] = 0.0f; spB0[0] = 0.0f;
spB0[1] = (f32) (var_s0->modelProp.unk0_15 * 2); spB0[1] = (f32) (var_s0->modelProp.yaw * 2);
new_var = spB0; 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), 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 arg1, arg2, arg3, arg4, arg5, flags
); );
if (var_v0 != 0) 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 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); model_collision_list = func_80330DE4(var_s0->actorProp.marker);
pad9C = model_collision_list; 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 else
if (var_s0->markerFlag) if (var_s0->is_actor)
{ {
temp_a0 = var_s0->actorProp.marker; temp_a0 = var_s0->actorProp.marker;
temp_v0_7 = temp_a0->unk18; temp_v0_7 = temp_a0->unk18;
@@ -1881,48 +1886,46 @@ 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 *func_803319C0(Cube *cube, f32 position[3], f32 radius, s32 arg3, f32 arg4[3], u32 arg5){
BKCollisionTri *var_s7; BKCollisionTri *var_s7;
BKCollisionTri *var_v0; BKCollisionTri *var_v0;
s32 var_s3; s32 i;
Prop *var_s0; Prop *prop_ptr;
BKCollisionList *model_collision_list; BKCollisionList *model_collision_list;
BKVertexList *temp_a1; BKVertexList *temp_a1;
f32 spAC[3]; f32 model_position[3];
f32 spA0[3]; f32 model_rotation[3];
BKModelBin *model_bin; BKModelBin *model_bin;
BKModelBin *new_var; BKModelBin *new_var;
ModelProp *mProp; ModelProp *mProp;
f32 sp88[3]; f32 actor_position[3];
f32 sp7C[3]; f32 actor_rotation[3];
Actor *temp_v0_6; Actor *temp_v0_6;
ActorProp *aProp = &var_s0->actorProp; ActorProp *aProp = &prop_ptr->actorProp;
var_s7 = 0; var_s7 = NULL;
var_s0 = cube->prop2Ptr; prop_ptr = cube->prop2Ptr;
for (var_s3 = cube->prop2Cnt; var_s3 != 0; var_s3--, var_s0++) { for (i = cube->prop2Cnt; i != 0; i--, prop_ptr++) {
if (((!var_s0->markerFlag) && var_s0->unk8_1) && var_s0->unk8_4) if (((!prop_ptr->is_actor) && prop_ptr->is_3d) && prop_ptr->unk8_4) {
{ mProp = &prop_ptr->modelProp;
mProp = &var_s0->modelProp; new_var = propModelList_getModelIfActive(mProp->model_index);
new_var = func_8030A4B4(mProp->unk0_31);
if (1) { } if (1) { } if (1) { } if (1) { } if (1) { } if (1) { }
model_bin = new_var; model_bin = new_var;
if (model_bin != 0){ if (model_bin != NULL){
model_collision_list = model_getCollisionList(model_bin); model_collision_list = model_getCollisionList(model_bin);
if (model_collision_list != 0){ if (model_collision_list != 0){
spAC[0] = (f32) mProp->unk4[0]; model_position[0] = (f32) mProp->position[0];
spAC[1] = (f32) mProp->unk4[1]; model_position[1] = (f32) mProp->position[1];
spAC[2] = (f32) mProp->unk4[2]; model_position[2] = (f32) mProp->position[2];
spA0[0] = 0.0f; model_rotation[0] = 0.0f;
spA0[1] = (f32) (mProp->unk0_15 * 2); model_rotation[1] = (f32) (mProp->yaw * 2);
model_bin = model_bin; model_bin = model_bin;
spA0[2] = (f32) (mProp->unk0_7 * 2); model_rotation[2] = (f32) (mProp->roll * 2);
var_v0 = func_802E9DD8(model_collision_list, model_getVtxList(model_bin), spAC, spA0, ((f32) mProp->unkA) / 100.0, position, radius, arg3, arg4); 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 != 0) if (var_v0 != NULL)
var_s7 = var_v0; var_s7 = var_v0;
} }
} }
} else { } else {
aProp = &var_s0->actorProp; aProp = &prop_ptr->actorProp;
if ((var_s0->markerFlag && var_s0->unk8_3) && var_s0->unk8_4) if ((prop_ptr->is_actor && prop_ptr->unk8_3) && prop_ptr->unk8_4) {
{
model_bin = func_80330DE4(aProp->marker); model_bin = func_80330DE4(aProp->marker);
if (model_bin != 0) { if (model_bin != 0) {
new_var = model_getCollisionList(model_bin); new_var = model_getCollisionList(model_bin);
@@ -1931,32 +1934,26 @@ BKCollisionTri *func_803319C0(Cube *cube, f32 position[3], f32 radius, s32 arg3,
temp_v0_6 = marker_getActor(aProp->marker); temp_v0_6 = marker_getActor(aProp->marker);
temp_a1 = func_80330C74(temp_v0_6); temp_a1 = func_80330C74(temp_v0_6);
sp88[0] = (f32) aProp->x; actor_position[0] = (f32) aProp->x;
sp88[1] = (f32) aProp->y; actor_position[1] = (f32) aProp->y;
sp88[2] = (f32) aProp->z; actor_position[2] = (f32) aProp->z;
sp7C[0] = aProp->marker->pitch; actor_rotation[0] = aProp->marker->pitch;
sp7C[1] = aProp->marker->yaw; actor_rotation[1] = aProp->marker->yaw;
sp7C[2] = aProp->marker->roll; actor_rotation[2] = aProp->marker->roll;
var_v0 = func_802E9DD8(new_var, temp_a1, sp88, sp7C, temp_v0_6->scale, position, radius, arg3, arg4); var_v0 = func_802E9DD8(new_var, temp_a1, actor_position, actor_rotation, temp_v0_6->scale, position, radius, arg3, arg4);
if (var_v0 != 0) if (var_v0 != 0)
{ {
var_s7 = var_v0; var_s7 = var_v0;
} }
} }
} }
} } else if (prop_ptr->is_actor) {
else
if (var_s0->markerFlag)
{
Struct6Cs *temp_v0_7; Struct6Cs *temp_v0_7;
temp_v0_7 = aProp->marker->unk18; temp_v0_7 = aProp->marker->unk18;
if (temp_v0_7 != 0) if (temp_v0_7 != 0) {
{ if (temp_v0_7->unk8 != 0) {
if (temp_v0_7->unk8 != 0)
{
var_v0 = temp_v0_7->unk8(aProp->marker, position, radius, arg3, arg4); var_v0 = temp_v0_7->unk8(aProp->marker, position, radius, arg3, arg4);
if (var_v0 != 0) if (var_v0 != 0) {
{
var_s7 = var_v0; var_s7 = var_v0;
} }
} }
@@ -1986,7 +1983,7 @@ f32 func_80331D20(BKSprite *sprite) {
f32 func_80331E34(Prop *arg0){ 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) { f32 func_80331E64(ActorMarker *marker) {
@@ -2005,7 +2002,7 @@ f32 func_80331E64(ActorMarker *marker) {
f32 func_80331F1C(Prop *arg0){ 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) { f32 func_80331F54(ActorMarker *marker) {
@@ -2033,7 +2030,7 @@ f32 func_80332050(Prop *prop, ActorMarker *marker, s32 arg2) {
ActorMarker * phi_v0; ActorMarker * phi_v0;
f32 phi_f2; 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]; phi_f2 = prop->unk4[arg2] - (&marker->propPtr->x)[arg2] - marker->unk38[arg2];
if (phi_v0 != NULL) { if (phi_v0 != NULL) {
phi_f2 += phi_v0->unk38[arg2]; 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 func_80332220(Prop * prop, f32 (*arg1)(Prop *)) {
f32 phi_f12; f32 phi_f12;
phi_f12 = func_8030A590(); phi_f12 = propModelList_getScale(prop);
if (phi_f12 == 0.0f) { 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; return phi_f12;
} }
@@ -2072,7 +2069,7 @@ f32 func_8033229C(ActorMarker *marker) {
ActorProp *prop; ActorProp *prop;
prop = marker->propPtr; prop = marker->propPtr;
if (prop->unk8_1) { if (prop->is_3d) {
return func_803320BC(prop, func_80331F54); return func_803320BC(prop, func_80331F54);
} }
else{ else{
@@ -2097,16 +2094,16 @@ Prop *func_803322F0(Cube *cube, ActorMarker *marker, f32 arg2, s32 arg3, s32 *ar
phi_s1 = &cube->prop2Ptr[(*arg4)++]; phi_s1 = &cube->prop2Ptr[(*arg4)++];
for(phi_s3 = phi_s3; phi_s3 != 0; phi_s3--){ for(phi_s3 = phi_s3; phi_s3 != 0; phi_s3--){
if (phi_s1->unk8_4) { 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->collidable && (marker != phi_s1->actorProp.marker)) {
if( (phi_s1->actorProp.marker->modelId) if( (phi_s1->actorProp.marker->modelId)
&& (func_803327A8(phi_s1->actorProp.marker->modelId) & arg3) && (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 != NULL)
&& (phi_s1->actorProp.marker->unk18->unkC != 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[0] = (f32) (marker->unk38[0] + marker->propPtr->x);
sp68[1] = (f32) (marker->unk38[1] + marker->propPtr->y); sp68[1] = (f32) (marker->unk38[1] + marker->propPtr->y);
sp68[2] = (f32) (marker->unk38[2] + marker->propPtr->z); 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{ } else{
phi_f24 = func_80332050(phi_s1, marker, 0); phi_f24 = func_80332050(phi_s1, marker, 0);
phi_f22 = func_80332050(phi_s1, marker, 2); 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_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 { } else {
phi_f20 = func_80332050(phi_s1, marker, 1); 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; phi_f2 = phi_f2 + arg2;
if ((phi_f24*phi_f24 + phi_f20*phi_f20 + phi_f22*phi_f22) < phi_f2*phi_f2) { 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 else if (phi_s1->is_3d) {//ModelProp
if (func_803327A8(phi_s1->modelProp.unk0_31 + 0x2D1) & arg3) { if (func_803327A8(phi_s1->modelProp.model_index + 0x2D1) & arg3) {
phi_f24 = func_80332050(phi_s1, marker, 0); phi_f24 = func_80332050(phi_s1, marker, 0);
phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331F1C); phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331F1C);
phi_f22 = func_80332050(phi_s1, marker, 2); 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{ 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_f24 = func_80332050(phi_s1, marker, 0);\
phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331E34);\ phi_f20 = func_80332050(phi_s1, marker, 1) + func_80332220(phi_s1, &func_80331E34);\
phi_f22 = func_80332050(phi_s1, marker, 2); phi_f22 = func_80332050(phi_s1, marker, 2);
@@ -2208,8 +2205,8 @@ void func_80332894(void) {
}while(i != size); }while(i != size);
func_8033283C(0x34D, 0x3A6, 3); func_8033283C(0x34D, 0x3A6, 3);
func_8033283C(0x3A6, 0x572, 3); func_8033283C(0x3A6, 0x572, 3);
func_803327D4(&D_8036E7E0, 1); func_803327D4(D_8036E7E0, 1);
func_803327D4(&D_8036E7FC, 2); func_803327D4(D_8036E7FC, 2);
func_8032D330(); func_8032D330();
} }

View File

@@ -64,7 +64,7 @@ extern void warp_lairEnterCCWPuzzleFromPointingGruntyStatueRoom(s32, s32);
extern void warp_lairEnterPointingGruntyStatueFromCCWPuzzleRoom(s32, s32); extern void warp_lairEnterPointingGruntyStatueFromCCWPuzzleRoom(s32, s32);
extern void warp_lairEnterRBBLobbyFromRBBPuzzleRoom(s32, s32); extern void warp_lairEnterRBBLobbyFromRBBPuzzleRoom(s32, s32);
extern void warp_lairEnterRBBLobbyFromMMMPuzzleRoom(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 func_80363388(s32, s32);
extern void chOrangePad_handleOrangeCollision(s32, s32); extern void chOrangePad_handleOrangeCollision(s32, s32);
extern void func_80388BEC(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_gvExitSNSChamper(s32, s32);
extern void warp_lairEnterLairFromSMLevel(s32, s32); extern void warp_lairEnterLairFromSMLevel(s32, s32);
extern void func_802C1674(s32, s32); extern void func_802C1674(NodeProp *, ActorMarker *);
extern void func_802C169C(s32, s32); extern void func_802C169C(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress0(s32, s32); extern void chTreasurehunt_checkStepProgress0(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress1(s32, s32); extern void chTreasurehunt_checkStepProgress1(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress2(s32, s32); extern void chTreasurehunt_checkStepProgress2(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress3(s32, s32); extern void chTreasurehunt_checkStepProgress3(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress4(s32, s32); extern void chTreasurehunt_checkStepProgress4(NodeProp *, ActorMarker *);
extern void chTreasurehunt_checkStepProgress5(s32, s32); extern void chTreasurehunt_checkStepProgress5(NodeProp *, ActorMarker *);
extern void chMumbo_detransformWarn(s32, s32); extern void chMumbo_detransformWarn(NodeProp *, ActorMarker *);
extern void chMumbo_detransformTrigger(s32, s32); extern void chMumbo_detransformTrigger(NodeProp *, ActorMarker *);
extern void func_8033443C(NodeProp *arg0, ActorMarker *arg1); extern void func_8033443C(NodeProp *arg0, ActorMarker *arg1);
typedef void (*CodeAD110Callback)(NodeProp *arg0, ActorMarker *arg1);
typedef struct { typedef struct {
f32 unk0[3]; f32 unk0[3];
@@ -310,10 +312,9 @@ typedef struct {
u8 pad1D[3]; u8 pad1D[3];
}Struct_core2_AD110_0; }Struct_core2_AD110_0;
typedef void (*CodeAD110Callback)(NodeProp *arg0, ActorMarker *arg1);
/* .data */ /* .data */
CodeAD110Callback sWarpFunctions[] = { void * sWarpFunctions[] = {
func_80388BEC, func_80334430, chOrangePad_handleOrangeCollision, chOrangePad_handleOrangeCollision, func_80388BEC, func_80334430, chOrangePad_handleOrangeCollision, chOrangePad_handleOrangeCollision,
chOrangePad_handleOrangeCollision, warp_gvEnterJinxy, warp_gvExitJinxy, func_8038F10C, chOrangePad_handleOrangeCollision, warp_gvEnterJinxy, warp_gvExitJinxy, func_8038F10C,
func_8038F130, warp_bgsEnterMumbosHut, warp_bgsExitMumbosHut, warp_ttcExitNipper, func_8038F130, warp_bgsEnterMumbosHut, warp_bgsExitMumbosHut, warp_ttcExitNipper,
@@ -545,7 +546,7 @@ void func_803343F8(s32 indx){
void func_80334428(void){} 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){} void func_8033443C(NodeProp *arg0, ActorMarker *arg1){}
@@ -556,7 +557,7 @@ void func_80334448(NodeProp *arg0, ActorMarker *arg1) {
case 3: // warp (L80334480) case 3: // warp (L80334480)
global_timer_time = globalTimer_getTime(); global_timer_time = globalTimer_getTime();
if ((codeA5BC0_getNodePropUnkC(arg0) + 1) != global_timer_time) { 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); codeA5BC0_setNodePropUnkC(arg0, global_timer_time);
break; break;

View File

@@ -159,7 +159,7 @@ void func_80334910(void) {
cubeList_free(); cubeList_free();
func_8031B710(); func_8031B710();
mapModel_free(); mapModel_free();
func_8030A6B0(); propModelList_free();
lighting_free(); lighting_free();
sky_free(); sky_free();
func_8034C8D8(); func_8034C8D8();
@@ -233,7 +233,7 @@ void func_80334B20(enum map_e map, s32 arg1, s32 arg2) {
pem_setAllInactive(); pem_setAllInactive();
pem_initDependencies(); pem_initDependencies();
func_802F7D30(); func_802F7D30();
func_8030A78C(); propModelList_init();
lighting_init(); lighting_init();
sky_reset(); sky_reset();
func_803343D0(); func_803343D0();
@@ -337,7 +337,7 @@ s32 func_80334ECC(void) {
func_803465E4(); func_803465E4();
func_8031B790(); func_8031B790();
func_8034C9D4(); func_8034C9D4();
func_8030A850(1); propModelList_flush(1);
sky_update(); sky_update();
partEmitMgr_update(); partEmitMgr_update();
func_8034F918(); func_8034F918();

View File

@@ -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) { void func_803513EC(ModelProp *arg0, s32 arg1) {
f32 sp3C[3]; f32 sp3C[3];
s32 pad30; s32 pad30;
f32 sp2C[3]; f32 rotation[3];
arg0->unkB_5 = TRUE; arg0->unkB_5 = TRUE;
arg0->unkB_4 = FALSE; arg0->unkB_4 = FALSE;
sp3C[0] = (f32) arg0->unk4[0]; sp3C[0] = (f32) arg0->position[0];
sp3C[1] = (f32) arg0->unk4[1]; sp3C[1] = (f32) arg0->position[1];
sp3C[2] = (f32) arg0->unk4[2]; sp3C[2] = (f32) arg0->position[2];
sp2C[0] = 0.0f; rotation[0] = 0.0f;
sp2C[1] = (f32) (arg0->unk0_15 * 2); rotation[1] = (f32) (arg0->yaw * 2);
sp2C[2] = (f32) (arg0->unk0_7 * 2); rotation[2] = (f32) (arg0->roll * 2);
func_8035126C(sp3C, sp2C, (f32) (arg0->unkA / 100.0), arg1, arg0->unk0_31 + 0x2D1); func_8035126C(sp3C, rotation, (f32) (arg0->scale / 100.0), arg1, arg0->model_index + 0x2D1);
} }

View File

@@ -64,7 +64,7 @@ s32 func_803531C8(u8 projectile_indx, s32 arg1){
projectile_getPosition(projectile_indx, egg_position); projectile_getPosition(projectile_indx, egg_position);
marker->unk38[1] = 0x1E; marker->unk38[1] = 0x1E;
prop = func_80320EB0(marker, 30.0f, 1); prop = func_80320EB0(marker, 30.0f, 1);
if(prop != NULL && prop->unk8_0){ if(prop != NULL && prop->is_actor){
other_marker = prop->marker; other_marker = prop->marker;
sp34 =other_marker->id; sp34 =other_marker->id;
if(!func_8033D410(marker, other_marker)){ if(!func_8033D410(marker, other_marker)){

View File

@@ -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)) { if (!file_isNextByteExpected(file, expected)) {
return FALSE; return FALSE;
} else { } else {

230
src/core2/propModelList.c Normal file
View File

@@ -0,0 +1,230 @@
#include <ultra64.h>
#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);
}
}
}

View File

@@ -10,11 +10,18 @@
void spawnQueue_unlock(void); void spawnQueue_unlock(void);
void spawnQueue_lock(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_802D7558(s32 *, s32, ActorInfo*, u32);
Actor *func_802D75B4(s32 *, s32, ActorInfo*, u32); Actor *func_802D75B4(s32 *, s32, ActorInfo*, u32);
Actor *func_802D7610(s32 *, s32, ActorInfo*, u32); Actor *func_802D7610(s32 *, s32, ActorInfo*, u32);
Actor *chBottlesBonus_new(s32 *, s32, ActorInfo*, u32); Actor *chBottlesBonus_new(s32 *, s32, ActorInfo*, u32);
extern ActorInfo gameSelect_banjoSleeping; //banjo.without_right_hand extern ActorInfo gameSelect_banjoSleeping; //banjo.without_right_hand
extern ActorInfo gameSelect_banjoGameboy; //banjo.playing_gameboy extern ActorInfo gameSelect_banjoGameboy; //banjo.playing_gameboy
extern ActorInfo gameSelect_banjoCooking; //banjo.cooking extern ActorInfo gameSelect_banjoCooking; //banjo.cooking
@@ -417,7 +424,7 @@ void spawnQueue_free(void){
void spawnQueue_func_802C39D4(void){ void spawnQueue_func_802C39D4(void){
func_803268B4(); func_803268B4();
if(!levelSpecificFlags_validateCRC2()){ if(!levelSpecificFlags_validateCRC2()){
eeprom_writeBlocks(0, 0, 0x80749530, EEPROM_MAXBLOCKS); eeprom_writeBlocks(0, 0, (void*)0x80749530, EEPROM_MAXBLOCKS);
} }
} }

View File

@@ -1503,7 +1503,7 @@ ActorMarker *chfinalboss_findCollidingJinjo(Actor *this, f32 arg1) {
func_80320ED8(this->marker, arg1, 1); func_80320ED8(this->marker, arg1, 1);
prop = func_8032F528(); prop = func_8032F528();
while(prop !=NULL){ while(prop !=NULL){
if (prop->markerFlag){ if (prop->is_actor){
jinjo = marker_getActor(prop->actorProp.marker); jinjo = marker_getActor(prop->actorProp.marker);
jinjo_marker_id = jinjo->marker->id; jinjo_marker_id = jinjo->marker->id;
if( if(