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

View File

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

View File

@@ -100,7 +100,7 @@ extern u16 gFramebuffers[2][DEFAULT_FRAMEBUFFER_WIDTH * DEFAULT_FRAMEBUFFER_HEIG
void func_80253550(void);
void func_8025357C(void);
void func_802535A8(Gfx **arg0, Gfx **arg1, UNK_TYPE(s32) arg2, UNK_TYPE(s32) arg3);
void func_802535A8(Acmd *arg0, Acmd*arg1, OSMesgQueue *arg2, UNK_TYPE(s32) arg3);
void func_80253640(Gfx ** gdl, void *arg1);
void scissorBox_SetForGameMode(Gfx **gdl, s32 framebuffer_idx);
void setupScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_address);

View File

@@ -43,7 +43,7 @@ void file_getShort(File *file, s16 *dst);
void file_getNShorts(File *file, s16 *dst, s32 cnt);
bool file_isNextByteExpected(File *file, s32 expected);
bool file_getByte_ifExpected(File *file, s32 expected, u8 *dst);
bool file_getNBytes_ifExpected(File *file, s32 expected, u8 *dst, s32 cnt);
bool file_getNBytes_ifExpected(File *file, s32 expected, void *dst, s32 cnt);
bool file_getFloat_ifExpected(File *file, s32 expected, f32 *dst);
bool file_getNFloats_ifExpected(File *file, s32 expected, f32 *dst, s32 cnt);
bool file_getWord_ifExpected(File *file, s32 expected, s32 *dst);

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

View File

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

View File

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

View File

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

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[2] = this->roll;
modelRender_setDepthMode(MODEL_RENDER_DEPTH_COMPARE);
modelRender_draw(gfx, mtx, sp38, sp2C, 1.0f, NULL, func_8030A428(3));
modelRender_draw(gfx, mtx, sp38, sp2C, 1.0f, NULL, propModelList_getModel(3));
return this;
}

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_setDepthMode(MODEL_RENDER_DEPTH_FULL);
modelRender_draw(dl, mptr, position, rotation, actorPtr->actor_specific_1_f, sp60, func_8030A428(0x18));
modelRender_draw(dl, mptr, position, rotation, actorPtr->actor_specific_1_f, sp60, propModelList_getModel(0x18));
actorPtr->position_y -= 1.9;
if (actorPtr->actor_specific_1_f < 2.428) {

View File

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

View File

@@ -27,7 +27,7 @@ void func_8025357C(void){
osSendMesg(&D_802831F0, NULL, OS_MESG_BLOCK);
}
void func_802535A8(Gfx **arg0, Gfx **arg1, UNK_TYPE(s32) arg2, UNK_TYPE(s32) arg3) {
void func_802535A8(Acmd *arg0, Acmd *arg1, OSMesgQueue *arg2, UNK_TYPE(s32) arg3) {
Struct_Core1_15B30 *sp1C;
func_80253550();

View File

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

View File

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

View File

@@ -820,9 +820,9 @@ void __baMarker_resolveCollision(Prop *other_prop){
func_8032B258(actor, obj_collision_type);
}
}
else if(other_prop->unk8_1)//L8028D0B0 //ModelProp
else if(other_prop->is_3d)//L8028D0B0 //ModelProp
{
tmp2 = other_prop->modelProp.unk0_31 + 0x2D1;
tmp2 = other_prop->modelProp.model_index + 0x2D1;
switch (tmp2)
{
case 0x2E8:
@@ -837,7 +837,7 @@ void __baMarker_resolveCollision(Prop *other_prop){
}
}
else{//L8028D10C //SpriteProp
tmp3 = other_prop->spriteProp.unk0_31 + 0x572;
tmp3 = other_prop->spriteProp.sprite_index + 0x572;
switch (tmp3)
{
case 0x6D6: //L8028D144
@@ -927,7 +927,7 @@ void baMarker_update(void){
func_80320ED8(playerMarker, temp_s0_2[i], 1);
while(other_prop = func_8032F528()){//L8028D480
if(!other_prop->unk8_2){
if(!D_8037BF8C && other_prop->markerFlag && other_prop->unk8_1){
if(!D_8037BF8C && other_prop->is_actor && other_prop->is_3d){
D_8037BF8C = other_prop->actorProp.marker;
}
__baMarker_resolveCollision(other_prop);

View File

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

View File

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

View File

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

View File

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

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;
typedef struct{
s32 answer_options[4][4]; // first dimension = zoombox index, second dimension = value (0-3), third dimension = answer
char *answer_options[4][4]; // first dimension = zoombox index, second dimension = value (0-3), third dimension = answer
} QuizQuestionStruct;
typedef struct {
@@ -289,7 +289,7 @@ static bool __gcquiz_func_803192A4(enum ff_question_type_e q_type, s32 q_index,
sD_803830E0->unkC = (QuizQuestionBin *) assetcache_get(quiz_question_index);
}
char_iter = sD_803830E0->unkC;
char_iter = (char *)sD_803830E0->unkC;
quiz_question_bin_unk0 = *(char_iter++); // NEXT
quiz_question_bin_unk1 = *(char_iter++); // NEXT
quiz_question_bin_unk2 = *(char_iter++); // NEXT
@@ -312,7 +312,7 @@ static bool __gcquiz_func_803192A4(enum ff_question_type_e q_type, s32 q_index,
char_iter += 2*code94620_func_8031B5B0(); // SKIP
phi_v1 = *(char_iter++); // NEXT
phi_v1 += (*(char_iter++) << 8);
char_iter = (s32)sD_803830E0->unkC + phi_v1;
char_iter = (char *)((s32)sD_803830E0->unkC + phi_v1);
str_cnt = *(char_iter++); // NEXT char_iter = 5
for(phi_a1 = 0; phi_a1 < 4; phi_a1++){
@@ -404,10 +404,10 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){
gczoombox_func_803184C8(sD_803830E0->zoomboxes[i], (f32)sD_803830E0->unk17, 5, 2, __gcquiz_animation_duration(i), __gcquiz_isZero(i), 0);
}
}
timedFunc_set_1(0.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_3_UNKNOWN);
timedFunc_set_1(0.0f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 1);
timedFunc_set_1(0.2f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 2);
timedFunc_set_1(0.4f, __gcquiz_openZoomboxAndMaximizeWithStringsAt, 3);
timedFunc_set_1(0.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_3_UNKNOWN);
timedFunc_set_1(0.0f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 1);
timedFunc_set_1(0.2f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 2);
timedFunc_set_1(0.4f, (GenFunction_1)__gcquiz_openZoomboxAndMaximizeWithStringsAt, 3);
break;
case GCQUIZ_STATE_3_UNKNOWN:
@@ -445,7 +445,7 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){
}
}
}
timedFunc_set_1(1.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_8_UNKNOWN);
timedFunc_set_1(1.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_8_UNKNOWN);
item_set(ITEM_6_HOURGLASS, FALSE);
break;
@@ -455,7 +455,7 @@ static void __gcquiz_advanceStateTo(enum gcquiz_state state){
} else {
comusic_playTrack(COMUSIC_2B_DING_B);
}
timedFunc_set_1(1.0f, __gcquiz_advanceStateTo, GCQUIZ_STATE_9_UNKNOWN);
timedFunc_set_1(1.0f, (GenFunction_1)__gcquiz_advanceStateTo, GCQUIZ_STATE_9_UNKNOWN);
break;
case GCQUIZ_STATE_9_UNKNOWN:

View File

@@ -1055,7 +1055,7 @@ static void __actor_free(ActorMarker *arg0, Actor *arg1){
marker_free(arg0);
}
Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 (* pos)[3], s32 rot){
Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 rot){
return __actor_spawnWithYaw_s32(id, pos, rot);
}
@@ -1095,12 +1095,12 @@ Actor *func_80328230(enum actor_e id, f32 pos[3], f32 rot[3]){
return actor;
}
Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 (* pos)[3], s32 yaw){
Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 pos[3], s32 yaw){
s32 sp24[3];
int i;
for(i = 0; i< 3; i++){
sp24[i] = (*pos)[i];
sp24[i] = pos[i];
}
return __actor_spawnWithYaw_s32(id, &sp24, yaw);

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);
actor->marker->collidable = stored_collidability;
for (var_v1 = func_8032F528(); var_v1 != NULL; var_v1 = func_8032F528()) {
if (nonactor || (var_v1->markerFlag && (var_v1->actorProp.marker->id == actor->marker->id))) {
if (nonactor || (var_v1->is_actor && (var_v1->actorProp.marker->id == actor->marker->id))) {
D_803833D0 = var_v1;
actor->position[0] = (f32) arg1[0];
actor->position[1] = (f32) arg1[1];

View File

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

View File

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

View File

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

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

View File

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

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)) {
return FALSE;
} 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_lock(void);
extern Actor *actor_spawnWithYaw_s16(enum actor_e id, s16 pos[3], s32 yaw);
extern Actor *actor_spawnWithYaw_s32(enum actor_e id, s32 pos[3], s32 yaw);
extern Actor *bundle_spawn_s32(enum bundle_e bundle_id, s32 position[3]);
extern Actor *bundle_spawn_f32(enum bundle_e bundle_id, f32 position[3]);
Actor *func_802D7558(s32 *, s32, ActorInfo*, u32);
Actor *func_802D75B4(s32 *, s32, ActorInfo*, u32);
Actor *func_802D7610(s32 *, s32, ActorInfo*, u32);
Actor *chBottlesBonus_new(s32 *, s32, ActorInfo*, u32);
extern ActorInfo gameSelect_banjoSleeping; //banjo.without_right_hand
extern ActorInfo gameSelect_banjoGameboy; //banjo.playing_gameboy
extern ActorInfo gameSelect_banjoCooking; //banjo.cooking
@@ -417,7 +424,7 @@ void spawnQueue_free(void){
void spawnQueue_func_802C39D4(void){
func_803268B4();
if(!levelSpecificFlags_validateCRC2()){
eeprom_writeBlocks(0, 0, 0x80749530, EEPROM_MAXBLOCKS);
eeprom_writeBlocks(0, 0, (void*)0x80749530, EEPROM_MAXBLOCKS);
}
}

View File

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