diff --git a/src/game/game_0109d0.c b/src/game/game_0109d0.c index dc422d8fb..b325c81b1 100644 --- a/src/game/game_0109d0.c +++ b/src/game/game_0109d0.c @@ -120,8 +120,8 @@ glabel func0f010aec GLOBAL_ASM( glabel func0f010b04 -/* f010b04: 3c02800a */ lui $v0,%hi(var8009d0c0) -/* f010b08: 2442d0c0 */ addiu $v0,$v0,%lo(var8009d0c0) +/* f010b04: 3c02800a */ lui $v0,%hi(g_HolographCriterias) +/* f010b08: 2442d0c0 */ addiu $v0,$v0,%lo(g_HolographCriterias) /* f010b0c: 8c4e0000 */ lw $t6,0x0($v0) /* f010b10: ac8e000c */ sw $t6,0xc($a0) /* f010b14: 03e00008 */ jr $ra diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 41ce4076f..9f3849db1 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -55323,7 +55323,7 @@ void objectiveCheckMultiroomEntered(s32 arg0, s16 *requiredrooms) } GLOBAL_ASM( -glabel func0f096088 +glabel objectiveCheckHolograph /* f096088: 27bdff50 */ addiu $sp,$sp,-176 /* f09608c: afb10034 */ sw $s1,0x34($sp) /* f096090: 3c11800a */ lui $s1,0x800a @@ -55514,6 +55514,56 @@ glabel func0f096088 /* f09635c: 00000000 */ sll $zero,$zero,0x0 ); +// Too much stack usage and unknown functions to decompile this accurately +// at the moment. +//void objectiveCheckHolograph(s32 arg0) +//{ +// struct criteria_holograph *criteria = g_HolographCriterias; +// +// while (criteria) { +// if (g_Vars.stagenum == STAGE_CITRAINING) { +// criteria->status = OBJECTIVE_INCOMPLETE; +// } +// +// if (criteria->status == OBJECTIVE_INCOMPLETE) { +// struct defaultobj *obj = objFindByTagId(criteria->obj); +// +// if (obj && obj->prop && obj->prop->flags & 2 && obj->prop->z > 0 && func0f0869a8(obj)) { +// f32 fVar11 = arg0; +// s32 a[2]; +// s32 b[2]; +// s32 c[2]; +// +// if (fVar11 != 0.00000000) { +// float xdiff = obj->prop->pos.x - g_Vars.currentplayer->unk1bb0.x; +// float zdiff = obj->prop->pos.z - g_Vars.currentplayer->unk1bb0.z; +// pass = xdiff * xdiff + zdiff * zdiff < fVar11 * fVar11; +// } else { +// pass = fVar11 > -1; +// } +// +// if (pass && func0f0899dc(obj->prop, a, b, c)) { +// func0f06803c(a, b, c, &fStack56); +// +// if (func0f0b57f8() < fStack56 && fStack56 < func0f0b57d8() + func0f0b57f8() && +// func0f0b57f8() < fStack64 && fStack64 < func0f0b57d8() + func0f0b57f8() && +// func0f0b5808() < fStack52 && fStack52 < func0f0b57e8() + func0f0b5808() && +// func0f0b5808() < fStack60 && fStack60 < func0f0b57e8() + func0f0b5808()) { +// criteria->status = OBJECTIVE_COMPLETE; +// +// if (g_Vars.stagenum == STAGE_CITRAINING) { +// struct trainingdata *data = ciGetTrainingData(); +// data->holographedpc = true; +// } +// } +// } +// } +// } +// +// criteria = criteria->next; +// } +//} + GLOBAL_ASM( glabel func0f096360 /* f096360: 27bdffd8 */ addiu $sp,$sp,-40 diff --git a/src/game/game_1668e0.c b/src/game/game_1668e0.c index 87a1159cf..46be14d1c 100644 --- a/src/game/game_1668e0.c +++ b/src/game/game_1668e0.c @@ -4184,7 +4184,7 @@ glabel func0f169374 /* f16a088: 14600010 */ bnez $v1,.L0f16a0cc /* f16a08c: 00000000 */ sll $zero,$zero,0x0 /* f16a090: 44816000 */ mtc1 $at,$f12 -/* f16a094: 0fc25822 */ jal func0f096088 +/* f16a094: 0fc25822 */ jal objectiveCheckHolograph /* f16a098: 00000000 */ sll $zero,$zero,0x0 /* f16a09c: 3c048009 */ lui $a0,0x8009 /* f16a0a0: 8c845200 */ lw $a0,0x5200($a0) diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 39b98abe7..ff9e4c677 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -16326,7 +16326,7 @@ u32 var8009d0b0 = 0; u32 var8009d0b4 = 0; struct criteria_roomentered *g_RoomEnteredCriterias = NULL; struct criteria_multiroomentered *g_MultiroomEnteredCriterias = NULL; -u32 var8009d0c0 = 0; +struct criteria_holograph *g_HolographCriterias = NULL; // 8009d0c4 s32 g_NumTags = 0; diff --git a/src/include/game/game_066310.h b/src/include/game/game_066310.h index ffc09b37d..8c9f4fcd5 100644 --- a/src/include/game/game_066310.h +++ b/src/include/game/game_066310.h @@ -389,7 +389,7 @@ u32 func0f095c04(void); u32 func0f095d64(void); void objectiveCheckRoomEntered(s32 currentroom); void objectiveCheckMultiroomEntered(s32 arg0, s16 *requiredrooms); -u32 func0f096088(void); +void objectiveCheckHolograph(s32 arg0); u32 func0f096360(void); u32 func0f0964b4(void); u32 func0f0965e4(void); diff --git a/src/include/game/game_0b28d0.h b/src/include/game/game_0b28d0.h index 37ac8fd00..fad448dcf 100644 --- a/src/include/game/game_0b28d0.h +++ b/src/include/game/game_0b28d0.h @@ -51,10 +51,10 @@ u32 func0f0b5778(void); u32 func0f0b5798(void); u32 func0f0b57a8(void); u32 func0f0b57b8(void); -u32 func0f0b57d8(void); -u32 func0f0b57e8(void); -u32 func0f0b57f8(void); -u32 func0f0b5808(void); +f32 func0f0b57d8(void); +f32 func0f0b57e8(void); +f32 func0f0b57f8(void); +f32 func0f0b5808(void); u32 func0f0b5828(void); u32 func0f0b5838(void); u32 func0f0b5b9c(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index f39760889..dc1f521bc 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -586,7 +586,7 @@ extern u32 var8009d0b0; extern u32 var8009d0b4; extern struct criteria_roomentered *g_RoomEnteredCriterias; extern struct criteria_multiroomentered *g_MultiroomEnteredCriterias; -extern u32 var8009d0c0; +extern struct criteria_holograph *g_HolographCriterias; extern u32 var8009d0d0; extern u32 var8009d0d8; extern u32 var8009d0e0; diff --git a/src/include/types.h b/src/include/types.h index 3221c2b5c..cdceb6cdd 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -36,7 +36,7 @@ struct prop { }; /*0x08*/ struct coord pos; - /*0x14*/ u32 z; + /*0x14*/ f32 z; /*0x18*/ struct prop *parent; /*0x1c*/ struct prop *child; /*0x20*/ struct prop *next; @@ -2653,9 +2653,7 @@ struct player { /*0x1ba4*/ u32 unk1ba4; /*0x1ba8*/ u32 unk1ba8; /*0x1bac*/ u32 unk1bac; - /*0x1bb0*/ u32 unk1bb0; - /*0x1bb4*/ u32 unk1bb4; - /*0x1bb8*/ u32 unk1bb8; + /*0x1bb0*/ struct coord *unk1bb0; /*0x1bbc*/ u32 unk1bbc; /*0x1bc0*/ u32 unk1bc0; /*0x1bc4*/ u32 unk1bc4; @@ -4693,4 +4691,11 @@ struct criteria_multiroomentered { struct criteria_multiroomentered *next; }; +struct criteria_holograph { + u32 unk00; + u32 obj; + u32 status; + struct criteria_holograph *next; +}; + #endif