From 8aabd2cda6956ef99c9b4eececb322982894c145 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 24 Apr 2024 23:38:14 -0500 Subject: [PATCH 1/4] Decompile more of m401dll --- config/GMPE01_00/rels/m401Dll/symbols.txt | 4 +- include/REL/m401Dll.h | 52 ++ include/ext_math.h | 2 + src/REL/m401Dll/main.c | 677 +++++++++++++++++++++- 4 files changed, 721 insertions(+), 14 deletions(-) diff --git a/config/GMPE01_00/rels/m401Dll/symbols.txt b/config/GMPE01_00/rels/m401Dll/symbols.txt index b74724ac..d997bf79 100644 --- a/config/GMPE01_00/rels/m401Dll/symbols.txt +++ b/config/GMPE01_00/rels/m401Dll/symbols.txt @@ -447,8 +447,8 @@ lbl_2_data_118 = .data:0x00000118; // type:object size:0xC lbl_2_data_124 = .data:0x00000124; // type:object size:0x14 data:4byte lbl_2_data_138 = .data:0x00000138; // type:object size:0x20 data:4byte lbl_2_data_158 = .data:0x00000158; // type:object size:0x140 -lbl_2_data_298 = .data:0x00000298; // type:object size:0x30 -lbl_2_data_2C8 = .data:0x000002C8; // type:object size:0x30 +lbl_2_data_298 = .data:0x00000298; // type:object size:0x30 data:float +lbl_2_data_2C8 = .data:0x000002C8; // type:object size:0x30 data:float jumptable_2_data_2F8 = .data:0x000002F8; // type:object size:0x30 scope:local lbl_2_data_32C = .data:0x0000032C; // type:object size:0x8 lbl_2_data_334 = .data:0x00000334; // type:object size:0xF0 diff --git a/include/REL/m401Dll.h b/include/REL/m401Dll.h index 085cd726..89bdf388 100644 --- a/include/REL/m401Dll.h +++ b/include/REL/m401Dll.h @@ -9,11 +9,63 @@ extern float lbl_2_bss_128; extern float lbl_2_bss_124; extern s16 lbl_2_bss_120; +typedef struct m401_work_player { + s16 unk0; + s32 unk4; + s32 unk8; + Vec unkC; + Vec unk18; + Vec unk24; + Vec unk30; + Vec unk3C; + omObjData *unk48; + omObjData *unk4C; + omObjData *unk50; + omObjData *unk54; + Vec unk58; + float unk64; + s16 unk68; + s16 unk6A; + s16 unk6C; + s16 unk6E; + s16 unk70; + s16 unk72; + s16 unk74; + s16 unk76; + s16 unk78; + s16 unk7A; + s16 unk7C; + s16 unk7E; + float unk80; + s16 unk84; + s16 unk86; + float unk88; + s16 unk8C; + s16 unk8E; + s16 unk90; + s16 unk92; + Vec unk94; + s8 unkA0; + s8 unkA1; +} M401WorkPlayer; + +typedef struct unkwork_10A88 { + Vec unk0; + omObjData *unkC; + s16 unk10; + s16 unk12; + s16 unk14; + s32 unk18; + float unk1C; +} UnkWork10A88; + void fn_2_10240(Vec *arg0, Vec *arg1); void fn_2_1041C(void); void fn_2_10710(void); void fn_2_1079C(void); +omObjData *fn_2_10A88(Vec *arg0, s16 arg1); + omObjData *fn_2_14640(Process *objman); #endif \ No newline at end of file diff --git a/include/ext_math.h b/include/ext_math.h index 2c709a82..6f1703c9 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -12,6 +12,8 @@ typedef struct vec2f { #define ABS(x) (((x) < 0) ? -(x) : (x)) #define VECDistanceXZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->z-(b)->z)*((a)->z-(b)->z))) +#define VECDistanceAlt(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->y-(b)->y)*((a)->y-(b)->y))+(((a)->z-(b)->z)*((a)->z-(b)->z))) + #define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z)) #define sind(x) sin(M_PI*(x)/180.0) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index 308cd7a8..9b6ed04c 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -1,14 +1,19 @@ #include "game/object.h" #include "game/memory.h" #include "game/hsfman.h" +#include "game/hsfmotion.h" #include "game/objsub.h" #include "game/minigame_seq.h" #include "game/gamework_data.h" #include "game/wipe.h" #include "game/esprite.h" #include "game/sprite.h" +#include "game/frand.h" +#include "game/chrman.h" #include "REL/m401Dll.h" +#include "math.h" +#include "ext_math.h" #include "rel_sqrt_consts.h" @@ -178,15 +183,6 @@ void ModuleProlog(void) lbl_2_bss_11C = HuAudFXPlay(1290); } -typedef struct m401_work_player { - s16 unk0; - u8 unk2[0x66]; - s16 unk68; - u8 unk6A[8]; - s16 unk72; - s16 unk74; -} M401WorkPlayer; - void fn_2_70C(omObjData *object) { s32 temp_r31; @@ -509,7 +505,6 @@ void fn_2_1A38(omObjData *object); void fn_2_1B80(omObjData *object); void fn_2_1CF0(omObjData *object); void fn_2_1DE8(omObjData *object); -void fn_2_1DE8(omObjData *object); void fn_2_20B0(omObjData *object); void fn_2_2CBC(omObjData *object); void fn_2_2D64(omObjData *object); @@ -517,7 +512,7 @@ void fn_2_2DCC(omObjData *object); void fn_2_2E20(omObjData *object); void fn_2_2ED0(omObjData *object); -omObjFunc lbl_2_data_CC[] = { +omObjFunc lbl_2_data_CC[][2] = { fn_2_1A38, fn_2_2CBC, fn_2_1B80, @@ -579,7 +574,6 @@ void fn_2_1B80(omObjData *object) Vec sp8; omObjData *temp_r31; HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[1]); - temp_r30->type = 2; sp14.x = -1000; sp14.y = 0; @@ -610,4 +604,663 @@ void fn_2_1CF0(omObjData *object) sp8.y = 0; sp8.z = -16300; fn_2_FC40(40, &sp20, &sp14, &sp8); +} + +void fn_2_91AC(omObjData *object, Vec *pos); + +void fn_2_1DE8(omObjData *object) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + omObjData *temp_r31; + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[3]); + temp_r30->type = 2; + sp2C.x = 0; + sp2C.y = -150.0f+((1.0f/255.0f)*(300.0f*(u32)frand8())); + sp2C.z = -23000; + fn_2_91AC(lbl_2_bss_100[0], &sp2C); + sp2C.x = 0; + sp2C.y = -150.0f+((1.0f/255.0f)*(300.0f*(u32)frand8())); + sp2C.z = -25000; + fn_2_91AC(lbl_2_bss_100[1], &sp2C); + sp2C.x = 5500; + sp2C.y = 0; + sp2C.z = -29800; + sp20.x = 100; + sp20.y = 100; + sp20.z = 100; + sp14.x = -1500; + sp14.y = 0; + sp14.z = -24900; + temp_r31 = fn_2_FC40(20, &sp2C, &sp20, &sp14); + fn_2_E6BC((omObjData *)temp_r31->work[0], 6, 1.5f, 0.2f, 0.8f, 3.5f); + sp8.x = -650; + sp8.y = -360; + sp8.z = -26300; + lbl_2_bss_D0 = fn_2_10A88(&sp8, 3); + lbl_2_bss_90[0] = HuAudFXEmiterPlay(1291, &sp8); +} + +void fn_2_20B0(omObjData *object) +{ + Vec sp8; + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[4]); + temp_r30->type = 2; + Hu3DModelAttrReset(object->model[7], 1); + sp8.x = 0; + sp8.y = -370; + sp8.z = -43000; + lbl_2_bss_8 = fn_2_10A88(&sp8, 3); + lbl_2_bss_90[1] = HuAudFXEmiterPlay(1291, &sp8); + sp8.x = 380; + sp8.y = -440; + sp8.z = -32000; + lbl_2_bss_CC = fn_2_10A88(&sp8, 3); + lbl_2_bss_90[2] = HuAudFXEmiterPlay(1291, &sp8); + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelAttrSet(object->model[2], 0xC0000001); +} + +void fn_2_21F8(omObjData *object) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r30; + HsfObject *temp_r29 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[0]); + s32 temp_r28; + temp_r29->type = 2; + Hu3DModelAttrReset(object->model[0], 1); + Hu3DModelAttrReset(object->model[1], 1); + Hu3DModelAttrSet(object->model[0], 0x40000001); + Hu3DModelAttrSet(object->model[1], 0x40000001); + Hu3DModelAttrReset(object->model[3], 1); + lbl_2_bss_44.x = 0; + lbl_2_bss_44.y = 100; + lbl_2_bss_44.z = 0; + lbl_2_bss_38.x = 0; + lbl_2_bss_38.y = 1000; + lbl_2_bss_38.z = -1500; + lbl_2_bss_2C.x = 0; + lbl_2_bss_2C.y = 1; + lbl_2_bss_2C.z = 0; + Hu3DCameraPosSetV(1, &lbl_2_bss_44, &lbl_2_bss_2C, &lbl_2_bss_38); + Hu3DCameraPerspectiveSet(1, lbl_2_bss_12C, lbl_2_bss_128, lbl_2_bss_124, 1.2f); + lbl_2_bss_54 = lbl_2_bss_44; + fn_2_D088(NULL); + sp20 = lbl_2_bss_44; + VECSubtract(&lbl_2_bss_38, &lbl_2_bss_44, &sp2C); + VECNormalize(&sp2C, &sp2C); + HuAudFXListnerSetEX(&sp20, &sp2C, lbl_2_bss_88, lbl_2_bss_84, 300, 300, 300); + sp14.x = 300; + sp14.y = -450; + sp14.z = -3100; + lbl_2_bss_D8 = fn_2_10A88(&sp14, 3); + lbl_2_bss_90[0] = HuAudFXEmiterPlay(1291, &sp14); + sp14.x = -300; + sp14.y = -340; + sp14.z = -4720; + lbl_2_bss_D4 = fn_2_10A88(&sp14, 3); + lbl_2_bss_90[1] = HuAudFXEmiterPlay(1291, &sp14); + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelAttrSet(object->model[2], 0xC0000001); + temp_r28 = 4; + for(temp_r30=0; temp_r30model[4], 1); + Hu3DModelClusterAttrSet(object->model[4], 0, 0xC0000001); + Hu3DModelAttrReset(object->model[8], 1); + Hu3DModelAttrSet(object->model[8], 0x40000001); + Hu3DModelAttrSet(object->model[4], 0x40000001); + Hu3DModelShadowMapSet(object->model[4]); + Hu3DModelAttrReset(object->model[5], 1); + Hu3DModelPosSet(object->model[4], 0, 0, 0); + Hu3DModelAmbSet(object->model[4], 1, 1, 1); + Hu3DModelPosSet(object->model[5], 0, 0, 0); + Hu3DModelPosSet(object->model[6], 0, 0, 0); + temp_r30 = lbl_2_bss_10C->data; + if(lbl_2_bss_BA) { + temp_r30->unk14[0].x = 210; + temp_r30->unk14[0].y = 1018; + temp_r30->unk14[0].z = 0; + temp_r30->unk14[1].x = -160; + temp_r30->unk14[1].y = 1020; + temp_r30->unk14[1].z = -50; + for(temp_r29=0; temp_r29<2; temp_r29++) { + Hu3DModelPosSet(object->model[temp_r29+9], temp_r30->unk14[temp_r29].x, temp_r30->unk14[temp_r29].y, temp_r30->unk14[temp_r29].z); + Hu3DModelAttrReset(object->model[temp_r29+9], 1); + } + Hu3DMotionSet(object->model[10], object->motion[0]); + Hu3DMotionSet(object->model[9], object->motion[2]); + } else { + temp_r30->unk14[0].x = 210; + temp_r30->unk14[0].y = 1018; + temp_r30->unk14[0].z = 0; + temp_r30->unk14[1].x = -160; + temp_r30->unk14[1].y = 1020; + temp_r30->unk14[1].z = -50; + for(temp_r29=0; temp_r29<2; temp_r29++) { + Hu3DModelPosSet(object->model[temp_r29+9], temp_r30->unk14[temp_r29].x, temp_r30->unk14[temp_r29].y, temp_r30->unk14[temp_r29].z); + Hu3DModelAttrReset(object->model[temp_r29+9], 1); + } + Hu3DMotionSet(object->model[10], object->motion[1]); + Hu3DMotionSet(object->model[9], object->motion[2]); + } + Hu3DModelAttrSet(object->model[9], 0x40000001); + Hu3DModelAttrSet(object->model[10], 0x40000001); + Hu3DModelRotSet(object->model[9], 0, 90, 0); + Hu3DModelPosSet(object->model[11], 210, 1018, 0); + Hu3DModelRotSet(object->model[11], 0, 90, 0); + Hu3DModelAttrReset(object->model[11], 1); + Hu3DModelAttrSet(object->model[11], 0x40000001); + sp2C.x = 0; + sp2C.y = 1300; + sp2C.z = 1300; + sp20.x = 0; + sp20.y = 920; + sp20.z = -100; + sp14.x = 0; + sp14.y = 1; + sp14.z = 0; + Hu3DCameraPosSetV(1, &sp2C, &sp14, &sp20); + lbl_2_bss_12C = 45; + Hu3DShadowData.unk_08.x = lbl_2_bss_12C; + MTXLightPerspective(Hu3DShadowData.unk_68, lbl_2_bss_12C, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + Hu3DCameraPerspectiveSet(1, lbl_2_bss_12C, lbl_2_bss_128, lbl_2_bss_124, 1.2f); + VECSubtract(&sp20, &sp2C, &sp8); + VECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp2C, &sp8); +} + +void fn_2_2CBC(omObjData *object) +{ + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[0]); + temp_r30->type = -1; + Hu3DModelAttrSet(object->model[3], 1); + lbl_2_bss_D8->work[0] = 1; + Hu3DModelAttrSet(object->model[2], 1); + HuAudFXStop(lbl_2_bss_90[0]); + HuAudFXStop(lbl_2_bss_90[1]); +} + +void fn_2_2D64(omObjData *object) +{ + HsfObject *temp_r31 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[1]); + temp_r31->type = -1; + lbl_2_bss_D4->work[0] = 1; +} + +void fn_2_2DCC(omObjData *object) +{ + HsfObject *temp_r31 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[2]); + temp_r31->type = -1; +} + +void fn_2_2E20(omObjData *object) +{ + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[3]); + temp_r30->type = -1; + Hu3DModelAttrSet(lbl_2_bss_100[0]->model[0], 1); + Hu3DModelAttrSet(lbl_2_bss_100[1]->model[0], 1); + lbl_2_bss_D0->work[0] = 1; + HuAudFXStop(lbl_2_bss_90[0]); +} + +void fn_2_2ED0(omObjData *object) +{ + HsfObject *temp_r30 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[4]); + temp_r30->type = -1; + Hu3DModelAttrSet(object->model[7], 1); + Hu3DModelAttrSet(object->model[0], 1); + lbl_2_bss_8->work[0] = 1; + lbl_2_bss_CC->work[0] = 1; + Hu3DModelAttrSet(object->model[2], 1); + HuAudFXStop(lbl_2_bss_90[1]); + HuAudFXStop(lbl_2_bss_90[2]); +} + +void fn_2_2F9C(omObjData *object) +{ + +} + +void fn_2_2FA0(omObjData *object) +{ + +} + +void fn_2_33B4(omObjData *object); + +void fn_2_2FA4(omObjData *object) +{ + Work2FA4 *temp_r30; + s32 temp_r29; + HsfObject *temp_r28; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work2FA4), MEMORY_DEFAULT_NUM); + temp_r30 = object->data; + fn_2_D088(NULL); + temp_r30->unk0 = 0; + temp_r30->unk8.x = 0; + temp_r30->unk8.y = 0; + temp_r30->unk8.z = 0; + temp_r30->unk2C = 0; + object->model[0] = Hu3DModelCreateFile(0x200000); + Hu3DModelAttrSet(object->model[0], 1); + object->model[1] = Hu3DModelCreateFile(0x200001); + Hu3DModelAttrSet(object->model[1], 1); + object->model[2] = Hu3DModelCreateFile(0x200007); + Hu3DModelAttrSet(object->model[2], 1); + Hu3DModelAttrSet(object->model[2], 0x40000001); + object->model[3] = Hu3DModelCreateFile(0x20001F); + Hu3DModelAttrSet(object->model[3], 1); + object->model[4] = Hu3DModelCreateFile(0x200020); + Hu3DModelAttrSet(object->model[4], 1); + object->model[11] = Hu3DModelCreateFile(0x20002C); + Hu3DModelAttrSet(object->model[11], 1); + object->model[7] = Hu3DModelCreateFile(0x200003); + Hu3DModelAttrSet(object->model[7], 1); + object->model[8] = Hu3DModelCreateFile(0x200023); + Hu3DModelAttrSet(object->model[8], 1); + object->model[9] = Hu3DModelCreateFile(0x200028); + Hu3DModelAttrSet(object->model[9], 1); + object->model[10] = Hu3DModelCreateFile(0x200028); + Hu3DModelAttrSet(object->model[10], 1); + Hu3DModelShadowSet(object->model[10]); + object->model[5] = Hu3DModelCreateFile(0x200021); + Hu3DModelAttrSet(object->model[5], 1); + object->model[6] = Hu3DModelCreateFile(0x200022); + Hu3DModelAttrSet(object->model[6], 1); + object->motion[0] = Hu3DJointMotionFile(object->model[10], 0x200029); + object->motion[1] = Hu3DJointMotionFile(object->model[10], 0x20002A); + object->motion[2] = Hu3DJointMotionFile(object->model[9], 0x20002B); + Hu3DModelPosSet(object->model[1], 0, 0, -1500); + Hu3DModelShadowMapSet(object->model[0]); + for(temp_r29=0; temp_r29<5; temp_r29++) { + temp_r28 = Hu3DModelObjPtrGet(object->model[0], lbl_2_data_124[temp_r29]); + temp_r28->type = -1; + } + fn_2_21F8(object); + object->func = fn_2_33B4; +} + +void fn_2_33B4(omObjData *object) +{ + Hu3DModelPosSet(object->model[3], 110, 5.0*sind(lbl_2_bss_10), -1500); + lbl_2_bss_10 += 2.0f; + if(lbl_2_bss_10 >= 360.0f) { + lbl_2_bss_10 -= 360.0f; + } +} + +void fn_2_9E28(float arg1, float arg2); + +void fn_2_34B8(omObjData *object) +{ + Vec sp8; + Work2FA4 *temp_r31; + s32 temp_r30; + s32 temp_r28; + temp_r31 = object->data; + if(lbl_2_bss_60.z < -5000.0f && temp_r31->unk0 == 0) { + temp_r31->unk0 = 1; + fn_2_9E28(-15500, -20000); + } + if(lbl_2_bss_6C.z <= lbl_2_data_A0[lbl_2_bss_C]) { + lbl_2_bss_C++; + lbl_2_data_CC[lbl_2_bss_C][0](object); + } + if(lbl_2_bss_6C.z <= lbl_2_data_B4[lbl_2_bss_E]) { + lbl_2_data_CC[lbl_2_bss_E][1](object); + lbl_2_bss_E++; + } + if(lbl_2_bss_6C.z <= -40000.0f) { + lbl_2_bss_BE = 1; + } + if(temp_r31->unk2C) { + temp_r31->unk2C--; + } else { + temp_r31->unk2C = 274; + if(lbl_2_bss_60.z > -31260.0f) { + temp_r28 = 4; + for(temp_r30=0; temp_r30data; + temp_r31->unk4 = 5.0*sind(temp_r31->unk8.x); + temp_r31->unk8.y += temp_r31->unk8.z; + Hu3DModelPosSet(object->model[4], temp_r31->unk8.y, temp_r31->unk4, 0); + Hu3DModelPosSet(object->model[5], temp_r31->unk8.y, 0, 0); + Hu3DModelScaleSet(object->model[5], 1.0f-(0.09f*(temp_r31->unk4/5.0f)), 1.0f, 1.0f-(0.09f*(temp_r31->unk4/5.0f))); + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_f31 = temp_r31->unk14[temp_r29].y+(5.0*sind(temp_r31->unk8.x)); + temp_r31->unk14[temp_r29].x += temp_r31->unk8.z; + Hu3DModelPosSet(object->model[temp_r29+9], temp_r31->unk14[temp_r29].x, temp_f31, temp_r31->unk14[temp_r29].z); + } + Hu3DModelPosSet(object->model[11], temp_r31->unk14[0].x, temp_f31, temp_r31->unk14[0].z); + temp_r31->unk8.z *= 1.04f; + if(temp_r31->unk8.z > 12.0f) { + temp_r31->unk8.z = 12.0f; + } + temp_r31->unk8.x += 2.0f; + if(temp_r31->unk8.x >= 360.0f) { + temp_r31->unk8.x -= 360.0f; + } + lbl_2_data_30.x = temp_r31->unk8.y; + lbl_2_data_48.x = temp_r31->unk8.y; + Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); +} + +void fn_2_3F28(omObjData *object); + +s32 lbl_2_data_158[][10] = { + 0x005F002A, + 0x00200031, + 0x005F0000, + 0x005F002B, + 0x005F0005, + 0x005F0017, + 0x00200039, + 0x00200041, + 0x005F0022, + 0x00200049, + 0x001A002A, + 0x00200032, + 0x001A0000, + 0x001A002B, + 0x001A0005, + 0x001A0017, + 0x0020003A, + 0x00200042, + 0x001A0022, + 0x0020004A, + 0x006D002A, + 0x00200033, + 0x006D0000, + 0x006D002B, + 0x006D0005, + 0x006D0017, + 0x0020003B, + 0x00200043, + 0x006D0022, + 0x0020004B, + 0x008A002A, + 0x00200034, + 0x008A0000, + 0x008A002B, + 0x008A0005, + 0x008A0017, + 0x0020003C, + 0x00200044, + 0x008A0022, + 0x0020004C, + 0x0085002A, + 0x00200035, + 0x00850000, + 0x0085002B, + 0x00850005, + 0x00850017, + 0x0020003D, + 0x00200045, + 0x00850022, + 0x0020004D, + 0x0011002A, + 0x00200036, + 0x00110000, + 0x0011002B, + 0x00110005, + 0x00110017, + 0x0020003E, + 0x00200046, + 0x00110022, + 0x0020004E, + 0x000D002A, + 0x00200037, + 0x000D0000, + 0x000D002B, + 0x000D0005, + 0x000D0017, + 0x0020003F, + 0x00200047, + 0x000D0022, + 0x0020004F, + 0x0081002A, + 0x00200038, + 0x00810000, + 0x0081002B, + 0x00810005, + 0x00810017, + 0x00200040, + 0x00200048, + 0x00810022, + 0x00200050, +}; + +Vec lbl_2_data_298[] = { + -150, 1250, -1400, + -50, 1250, -1400, + 50, 1250, -1400, + 150, 1250, -1400, +}; + +Vec lbl_2_data_2C8[] = { + -300, 0, -1500, + -100, 0, -1500, + 100, 0, -1500, + 300, 0, -1500, +}; + +void fn_2_3F28(omObjData *object); + +void fn_2_3B24(omObjData *object) +{ + M401WorkPlayer *temp_r31; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M401WorkPlayer), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + temp_r29 = object->work[0]; + temp_r31->unk4 = temp_r29; + temp_r31->unk8 = GWPlayerCfg[temp_r29].pad_idx; + temp_r27 = GWPlayerCfg[temp_r29].character; + temp_r31->unk86 = lbl_2_data_4[temp_r27]; + object->model[0] = CharModelCreate(temp_r31->unk86, 4); + if(temp_r29 == 0) { + object->model[2] = Hu3DModelCreateFile(0x200025); + object->model[3] = Hu3DModelCreateFile(0x200027); + } else { + object->model[2] = Hu3DModelLink(lbl_2_bss_118[0]->model[2]); + object->model[3] = Hu3DModelCreateFile(0x200027); + } + Hu3DModelAttrSet(object->model[3], 0x40000002); + Hu3DModelClusterAttrSet(object->model[3], 0, 0xC0000002); + Hu3DModelLayerSet(object->model[3], 7); + for(temp_r28=0; temp_r28<10; temp_r28++) { + object->motion[temp_r28] = CharModelMotionCreate(lbl_2_data_4[temp_r27], lbl_2_data_158[temp_r27][temp_r28]); + } + CharModelMotionSet(temp_r31->unk86, object->motion[2]); + Hu3DModelAttrSet(object->model[0], 0x40000001); + Hu3DModelAttrSet(object->model[2], 1); + Hu3DModelAttrSet(object->model[2], 0x40000001); + Hu3DModelLayerSet(object->model[2], 2); + Hu3DModelAmbSet(object->model[0], 1, 1, 1); + Hu3DModelShadowSet(object->model[0]); + CharModelVoiceEnableSet(lbl_2_data_4[temp_r27], object->motion[4], 0); + temp_r31->unkC = lbl_2_data_2C8[temp_r29]; + temp_r31->unk58.z = 0; + omSetTra(object, lbl_2_data_298[temp_r29].x, lbl_2_data_298[temp_r29].y, lbl_2_data_298[temp_r29].z); + temp_r31->unk0 = 0; + temp_r31->unk6E = 70; + temp_r31->unk24.x = lbl_2_data_2C8[temp_r29].x; + temp_r31->unk24.y = lbl_2_data_2C8[temp_r29].y; + temp_r31->unk24.z = 800+lbl_2_data_2C8[temp_r29].z; + temp_r31->unk6A = 0; + temp_r31->unk72 = 0; + temp_r31->unk74 = 0; + temp_r31->unk78 = 0; + temp_r31->unk7A = 0; + temp_r31->unk7C = 0; + temp_r31->unk76 = 0; + temp_r31->unk88 = 0; + temp_r31->unk84 = 0; + temp_r31->unk8C = 0; + temp_r31->unk8E = 0; + temp_r31->unk94.x = temp_r31->unk94.y = temp_r31->unk94.z = 0; + temp_r31->unk90 = 0; + temp_r31->unkA0 = temp_r31->unkA1 = 0; + CharModelMotionDataClose(temp_r31->unk86); + object->func = fn_2_3F28; +} + +void fn_2_6B44(omObjData *object); +void fn_2_D3E8(omObjData *object); + +void fn_2_3F28(omObjData *object) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + M401WorkPlayer *temp_r31; + CameraData *temp_r29; + omObjData *temp_r28; + UnkWork10A88 *temp_r27; + float temp_f27; + temp_r31 = object->data; + switch(temp_r31->unk0) { + case 0: + if(--temp_r31->unk6E == 0) { + temp_r31->unk0 = 1; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[4], 0, 20, 0); + temp_r31->unk58.x = 16; + temp_r31->unk58.y = 0; + } + break; + + case 1: + if(object->trans.y < 1100) { + + + temp_r31->unk0 = 2; + temp_f27 = VECDistanceAlt(&object->trans, &temp_r31->unk24); + temp_r31->unk58.z = temp_f27; + temp_r31->unk58.y = 0; + temp_r31->unk6E = 110; + temp_r28 = fn_2_10A88(&lbl_2_data_298[temp_r31->unk4], 2); + temp_r31->unk50 = temp_r28; + temp_r27 = temp_r28->data; + temp_r27->unkC = object; + fn_2_6B44(object); + temp_r28 = fn_2_10A88(&lbl_2_data_298[temp_r31->unk4], 4); + temp_r27 = temp_r28->data; + temp_r27->unkC = object; + temp_r31->unk4C = temp_r28; + temp_r28 = fn_2_10A88(&lbl_2_data_298[temp_r31->unk4], 5); + temp_r27 = temp_r28->data; + temp_r27->unkC = object; + temp_r31->unk48 = temp_r28; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[1], 0, 80, 0x40000001); + temp_r31->unk30.x = object->trans.x; + temp_r31->unk30.y = object->trans.y; + temp_r31->unk30.z = object->trans.z; + Hu3DModelAttrReset(object->model[3], 1); + Hu3DModelAttrReset(object->model[3], 0x40000002); + Hu3DModelClusterAttrReset(object->model[3], 0, 0xC0000002); + Hu3DModelPosSet(object->model[3], object->trans.x, 100, 100+object->trans.z); + Hu3DMotionTimeSet(object->model[3], 0); + if(temp_r31->unk4 == 0) { + HuAudFXPlay(1281); + } + omVibrate(temp_r31->unk4, 12, 4, 2); + } else { + object->trans.y += temp_r31->unk58.x-(0.07f*temp_r31->unk58.y*temp_r31->unk58.y); + object->trans.z += 2.0f; + temp_r31->unk58.y += 1.0f; + } + break; + + case 2: + temp_r29 = &Hu3DCamera[0]; + sp1C = temp_r31->unk24; + sp10 = temp_r31->unk30; + VECSubtract(&sp1C, &sp10, &sp28); + VECNormalize(&sp28, &sp28); + object->trans.x = temp_r31->unk30.x+(temp_r31->unk58.z*(sp28.x*sind(temp_r31->unk58.y))); + object->trans.y = temp_r31->unk30.y+(temp_r31->unk58.z*(sp28.y*sind(temp_r31->unk58.y))); + object->trans.z = temp_r31->unk30.z+(temp_r31->unk58.z*(sp28.z*sind(temp_r31->unk58.y))); + temp_r31->unk58.y += 9.0f/11.0f; + omSetRot(object, atan2d(sp28.y, sp28.z)+90.0, 0, 0); + temp_f27 = VECDistanceAlt(&object->trans, &sp1C); + if(--temp_r31->unk6E == 60 && temp_r31->unk4 == 0 && lbl_2_bss_4 == NULL) { + temp_r29 = &Hu3DCamera[0]; + lbl_2_bss_4 = omAddObjEx(HuPrcCurrentGet(), 1400, 0, 0, -1, fn_2_D3E8); + lbl_2_bss_4->trans.x = temp_r29->pos.x; + lbl_2_bss_4->trans.y = temp_r29->pos.y; + lbl_2_bss_4->trans.z = temp_r29->pos.z; + lbl_2_bss_4->rot.x = temp_r29->target.x; + lbl_2_bss_4->rot.y = temp_r29->target.y; + lbl_2_bss_4->rot.z = temp_r29->target.z; + lbl_2_bss_4->scale.x = 0; + } + if(temp_r31->unk6E == 0) { + temp_r31->unk0 = 3; + temp_r31->unk4C->work[0] = 1; + temp_r31->unk48->work[0] = 1; + } + fn_2_6B44(object); + break; + + case 3: + sp1C.x = lbl_2_bss_108->trans.x; + sp1C.y = lbl_2_data_298[temp_r31->unk4].y; + sp1C.z = lbl_2_bss_108->trans.z; + sp10.x = object->trans.x; + sp10.y = object->trans.y; + sp10.z = object->trans.z; + VECSubtract(&sp1C, &sp10, &sp28); + VECNormalize(&sp28, &sp28); + object->rot.x *= 0.95f; + if(object->rot.x < 1.0f) { + object->rot.x = 0.0f; + } + omSetRot(object, object->rot.x, atan2d(sp28.x, sp28.z), 0); + fn_2_6B44(object); + break; + } } \ No newline at end of file From dec7f57c75624d5a304356458b0a9659207cb77c Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 24 Apr 2024 23:42:04 -0500 Subject: [PATCH 2/4] Fix switch case --- src/REL/m401Dll/main.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index 9b6ed04c..bbbc503d 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -1175,8 +1175,6 @@ void fn_2_3F28(omObjData *object) case 1: if(object->trans.y < 1100) { - - temp_r31->unk0 = 2; temp_f27 = VECDistanceAlt(&object->trans, &temp_r31->unk24); temp_r31->unk58.z = temp_f27; From 4229bfe0c1d39f69d05095fe60491291144ddf0d Mon Sep 17 00:00:00 2001 From: mrshigure Date: Thu, 25 Apr 2024 05:15:29 -0700 Subject: [PATCH 3/4] Matched REL/w04/big_boo + applying new macros --- config/GMPE01_00/rels/w04Dll/splits.txt | 4 +- config/GMPE01_00/rels/w04Dll/symbols.txt | 234 ++--- configure.py | 2 +- include/REL/w04Dll.h | 11 +- src/REL/w01Dll/main.c | 52 +- src/REL/w01Dll/mg_coin.c | 12 +- src/REL/w01Dll/mg_item.c | 34 +- src/REL/w04Dll/big_boo.c | 1175 ++++++++++++++++++++++ src/REL/w04Dll/boo_event.c | 54 +- src/REL/w04Dll/bridge.c | 36 +- src/REL/w04Dll/main.c | 10 +- src/REL/w06Dll/bowser.c | 22 +- src/REL/w06Dll/bridge.c | 4 +- src/REL/w06Dll/fire.c | 4 +- src/REL/w06Dll/mg_coin.c | 26 +- src/REL/w06Dll/mg_item.c | 12 +- src/game/board/battle.c | 6 +- src/game/board/lottery.c | 18 +- src/game/board/ui.c | 10 +- 19 files changed, 1449 insertions(+), 277 deletions(-) create mode 100755 src/REL/w04Dll/big_boo.c diff --git a/config/GMPE01_00/rels/w04Dll/splits.txt b/config/GMPE01_00/rels/w04Dll/splits.txt index 8c5ba783..cb8d3809 100644 --- a/config/GMPE01_00/rels/w04Dll/splits.txt +++ b/config/GMPE01_00/rels/w04Dll/splits.txt @@ -17,13 +17,13 @@ REL/w04Dll/main.c: .bss start:0x00000000 end:0x00000038 REL/w04Dll/bridge.c: - .text start:0x000012FC end:0x00002044 + .text start:0x000012FC end:0x000020EC .rodata start:0x00000040 end:0x00000098 .data start:0x00000298 end:0x000002D0 .bss start:0x00000038 end:0x00000048 REL/w04Dll/boo_event.c: - .text start:0x00002044 end:0x00006024 + .text start:0x000020EC end:0x00006024 .rodata start:0x00000098 end:0x00000180 .data start:0x000002D0 end:0x000003A8 .bss start:0x00000048 end:0x00000100 diff --git a/config/GMPE01_00/rels/w04Dll/symbols.txt b/config/GMPE01_00/rels/w04Dll/symbols.txt index ca7ccedd..1787c5bb 100644 --- a/config/GMPE01_00/rels/w04Dll/symbols.txt +++ b/config/GMPE01_00/rels/w04Dll/symbols.txt @@ -53,22 +53,22 @@ fn_1_5980 = .text:0x00005980; // type:function size:0x44 scope:local fn_1_59C4 = .text:0x000059C4; // type:function size:0x68 scope:local fn_1_5A2C = .text:0x00005A2C; // type:function size:0x5F8 scope:local fn_1_6024 = .text:0x00006024; // type:function size:0x28C -fn_1_62B0 = .text:0x000062B0; // type:function size:0x628 -fn_1_68D8 = .text:0x000068D8; // type:function size:0x420 -fn_1_6CF8 = .text:0x00006CF8; // type:function size:0x608 -fn_1_7300 = .text:0x00007300; // type:function size:0x27C -fn_1_757C = .text:0x0000757C; // type:function size:0x5C -fn_1_75D8 = .text:0x000075D8; // type:function size:0x2B0 -fn_1_7888 = .text:0x00007888; // type:function size:0x11D8 -fn_1_8A60 = .text:0x00008A60; // type:function size:0xE40 -fn_1_98A0 = .text:0x000098A0; // type:function size:0x294 -fn_1_9B34 = .text:0x00009B34; // type:function size:0xA8 -fn_1_9BDC = .text:0x00009BDC; // type:function size:0x3C -fn_1_9C18 = .text:0x00009C18; // type:function size:0x290 -fn_1_9EA8 = .text:0x00009EA8; // type:function size:0x14 +fn_1_62B0 = .text:0x000062B0; // type:function size:0x628 scope:local +fn_1_68D8 = .text:0x000068D8; // type:function size:0x420 scope:local +fn_1_6CF8 = .text:0x00006CF8; // type:function size:0x608 scope:local +fn_1_7300 = .text:0x00007300; // type:function size:0x27C scope:local +fn_1_757C = .text:0x0000757C; // type:function size:0x5C scope:local +fn_1_75D8 = .text:0x000075D8; // type:function size:0x2B0 scope:local +fn_1_7888 = .text:0x00007888; // type:function size:0x11D8 scope:local +fn_1_8A60 = .text:0x00008A60; // type:function size:0xE40 scope:local +fn_1_98A0 = .text:0x000098A0; // type:function size:0x294 scope:local +fn_1_9B34 = .text:0x00009B34; // type:function size:0xA8 scope:local +fn_1_9BDC = .text:0x00009BDC; // type:function size:0x3C scope:local +fn_1_9C18 = .text:0x00009C18; // type:function size:0x290 scope:local +fn_1_9EA8 = .text:0x00009EA8; // type:function size:0x14 scope:local fn_1_9EBC = .text:0x00009EBC; // type:function size:0x94 -fn_1_9F50 = .text:0x00009F50; // type:function size:0x124 -fn_1_A074 = .text:0x0000A074; // type:function size:0x84 +fn_1_9F50 = .text:0x00009F50; // type:function size:0x124 scope:local +fn_1_A074 = .text:0x0000A074; // type:function size:0x84 scope:local fn_1_A0F8 = .text:0x0000A0F8; // type:function size:0xF8 fn_1_A1F0 = .text:0x0000A1F0; // type:function size:0x52C fn_1_A71C = .text:0x0000A71C; // type:function size:0xCC @@ -174,73 +174,73 @@ lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data: lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 data:double -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0xC data:4byte -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0xC data:4byte -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0xC scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0xC scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:float lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float @@ -341,23 +341,23 @@ lbl_1_data_368 = .data:0x00000368; // type:object size:0x8 scope:local data:stri lbl_1_data_370 = .data:0x00000370; // type:object size:0x12 scope:local data:string lbl_1_data_382 = .data:0x00000382; // type:object size:0x11 scope:local data:string lbl_1_data_393 = .data:0x00000393; // type:object size:0x10 scope:local -lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x8 data:string -lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x9 data:string -lbl_1_data_3B9 = .data:0x000003B9; // type:object size:0x6 data:string -lbl_1_data_3BF = .data:0x000003BF; // type:object size:0x5 data:string -lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x5 data:string -lbl_1_data_3CC = .data:0x000003CC; // type:object size:0x14 data:4byte -lbl_1_data_3E0 = .data:0x000003E0; // type:object size:0x14 -lbl_1_data_3F4 = .data:0x000003F4; // type:object size:0x20 -lbl_1_data_414 = .data:0x00000414; // type:object size:0x10 -lbl_1_data_424 = .data:0x00000424; // type:object size:0x30 data:2byte -lbl_1_data_454 = .data:0x00000454; // type:object size:0xB data:string -lbl_1_data_45F = .data:0x0000045F; // type:object size:0x2 data:string -lbl_1_data_461 = .data:0x00000461; // type:object size:0xC data:string -lbl_1_data_46D = .data:0x0000046D; // type:object size:0x1B -lbl_1_data_488 = .data:0x00000488; // type:object size:0x3 data:string -lbl_1_data_48B = .data:0x0000048B; // type:object size:0xF data:string -lbl_1_data_49C = .data:0x0000049C; // type:object size:0x50 +lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x8 scope:local data:string +lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x9 scope:local data:string +lbl_1_data_3B9 = .data:0x000003B9; // type:object size:0x6 scope:local data:string +lbl_1_data_3BF = .data:0x000003BF; // type:object size:0x5 scope:local data:string +lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x5 scope:local data:string +lbl_1_data_3CC = .data:0x000003CC; // type:object size:0x14 scope:local data:4byte +lbl_1_data_3E0 = .data:0x000003E0; // type:object size:0x14 scope:local +lbl_1_data_3F4 = .data:0x000003F4; // type:object size:0x20 scope:local +lbl_1_data_414 = .data:0x00000414; // type:object size:0x10 scope:local +lbl_1_data_424 = .data:0x00000424; // type:object size:0x30 scope:local data:2byte +lbl_1_data_454 = .data:0x00000454; // type:object size:0xB scope:local data:string +lbl_1_data_45F = .data:0x0000045F; // type:object size:0x2 scope:local data:string +lbl_1_data_461 = .data:0x00000461; // type:object size:0xC scope:local data:string +lbl_1_data_46D = .data:0x0000046D; // type:object size:0x1B scope:local data:string +lbl_1_data_488 = .data:0x00000488; // type:object size:0x3 scope:local data:string +lbl_1_data_48B = .data:0x0000048B; // type:object size:0xF scope:local data:string +lbl_1_data_49C = .data:0x0000049C; // type:object size:0x50 scope:local lbl_1_data_4F0 = .data:0x000004F0; // type:object size:0x6 data:string lbl_1_data_4F6 = .data:0x000004F6; // type:object size:0x6 data:string lbl_1_data_4FC = .data:0x000004FC; // type:object size:0x6 data:string @@ -389,7 +389,7 @@ lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 scope:local data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x20 data:2byte -lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 data:4byte +lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 scope:local data:4byte lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0xC scope:local lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 scope:local data:4byte lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 scope:local data:4byte @@ -411,23 +411,23 @@ lbl_1_bss_D4 = .bss:0x000000D4; // type:object size:0x10 scope:local lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x10 scope:local lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0x6 scope:local data:2byte lbl_1_bss_FA = .bss:0x000000FA; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_100 = .bss:0x00000100; // type:object size:0x4 data:4byte -lbl_1_bss_104 = .bss:0x00000104; // type:object size:0x4 data:4byte -lbl_1_bss_108 = .bss:0x00000108; // type:object size:0xC -lbl_1_bss_114 = .bss:0x00000114; // type:object size:0x20 -lbl_1_bss_134 = .bss:0x00000134; // type:object size:0x6 -lbl_1_bss_13A = .bss:0x0000013A; // type:object size:0x2 data:2byte -lbl_1_bss_13C = .bss:0x0000013C; // type:object size:0xD4 data:2byte -lbl_1_bss_210 = .bss:0x00000210; // type:object size:0x30 -lbl_1_bss_240 = .bss:0x00000240; // type:object size:0x30 -lbl_1_bss_270 = .bss:0x00000270; // type:object size:0x2 data:2byte -lbl_1_bss_272 = .bss:0x00000272; // type:object size:0x2 data:2byte -lbl_1_bss_274 = .bss:0x00000274; // type:object size:0x2 data:2byte -lbl_1_bss_278 = .bss:0x00000278; // type:object size:0x4 data:4byte -lbl_1_bss_27C = .bss:0x0000027C; // type:object size:0x2 data:2byte -lbl_1_bss_27E = .bss:0x0000027E; // type:object size:0x2 data:2byte -lbl_1_bss_280 = .bss:0x00000280; // type:object size:0x2 data:2byte -lbl_1_bss_282 = .bss:0x00000282; // type:object size:0x2 data:2byte +lbl_1_bss_100 = .bss:0x00000100; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_104 = .bss:0x00000104; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_108 = .bss:0x00000108; // type:object size:0xC scope:local +lbl_1_bss_114 = .bss:0x00000114; // type:object size:0x20 scope:local +lbl_1_bss_134 = .bss:0x00000134; // type:object size:0x6 scope:local +lbl_1_bss_13A = .bss:0x0000013A; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_13C = .bss:0x0000013C; // type:object size:0xD2 scope:local data:2byte +lbl_1_bss_210 = .bss:0x00000210; // type:object size:0x30 scope:local +lbl_1_bss_240 = .bss:0x00000240; // type:object size:0x30 scope:local +lbl_1_bss_270 = .bss:0x00000270; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_272 = .bss:0x00000272; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_274 = .bss:0x00000274; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_278 = .bss:0x00000278; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_27C = .bss:0x0000027C; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_27E = .bss:0x0000027E; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_280 = .bss:0x00000280; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_282 = .bss:0x00000282; // type:object size:0x2 scope:local data:2byte lbl_1_bss_288 = .bss:0x00000288; // type:object size:0x4 data:4byte lbl_1_bss_28C = .bss:0x0000028C; // type:object size:0x8 data:4byte lbl_1_bss_294 = .bss:0x00000294; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index 8af7f133..ce7790ab 100644 --- a/configure.py +++ b/configure.py @@ -1402,7 +1402,7 @@ config.libs = [ Object(Matching, "REL/w04Dll/main.c"), Object(Matching, "REL/w04Dll/bridge.c"), Object(Matching, "REL/w04Dll/boo_event.c"), - Object(NonMatching, "REL/w04Dll/big_boo.c"), + Object(Matching, "REL/w04Dll/big_boo.c"), Object(NonMatching, "REL/w04Dll/mg_item.c"), Object(NonMatching, "REL/w04Dll/mg_coin.c"), } diff --git a/include/REL/w04Dll.h b/include/REL/w04Dll.h index 0ca359a3..282e9825 100755 --- a/include/REL/w04Dll.h +++ b/include/REL/w04Dll.h @@ -10,13 +10,18 @@ enum { MAPOBJ_MAX = 16 }; +typedef struct { + s8 unk00; + u8 unk01; +} UnkW04BoardData; + extern s32 fn_1_1130(s16 arg0, float arg1, float arg2); extern void fn_1_12FC(void); extern void fn_1_15C8(void); extern void fn_1_1618(void); - extern void fn_1_2058(void); + extern void fn_1_55B4(void); extern void fn_1_6024(void); @@ -33,8 +38,6 @@ extern void fn_1_C7D4(void); extern s16 lbl_1_bss_14[MAPOBJ_MAX]; extern BoardMapObject lbl_1_data_0[MAPOBJ_MAX]; -extern s8 *lbl_1_bss_0; - -extern Process *lbl_1_bss_38; +extern UnkW04BoardData *lbl_1_bss_0; #endif diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 96a8cd79..c17f0a58 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -29,7 +29,7 @@ #include "game/board/map_object.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -768,8 +768,8 @@ static void fn_1_1B3C(void) { PSMTXConcat(lbl_1_bss_678, sp48, lbl_1_bss_678); } else { if (sp30.z != 0.0f || sp30.x != 0.0f) { - lbl_1_bss_660.y = 180.0 * (atan2(sp30.x, sp30.z) / M_PI); - lbl_1_bss_660.x = -(180.0 * (atan2(sp30.y, sqrtf(sp30.x * sp30.x + sp30.z * sp30.z)) / M_PI)); + lbl_1_bss_660.y = atan2d(sp30.x, sp30.z); + lbl_1_bss_660.x = -atan2d(sp30.y, VECMagXZ(&sp30)); } else { lbl_1_bss_660.x = lbl_1_bss_660.y = 0.0f; } @@ -816,7 +816,7 @@ static void fn_1_1FA4(void) { PSVECAdd(&spC, &lbl_1_bss_618, &lbl_1_bss_618); PSVECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &spC); if (spC.x != 0.0f || spC.z != 0.0f) { - temp_f29 = atan2f(spC.y, sqrtf(spC.x * spC.x + spC.z * spC.z)); + temp_f29 = atan2f(spC.y, VECMagXZ(&spC)); temp_f28 = atan2f(-spC.x, -spC.z); } else { temp_f29 = temp_f28 = 0.0f; @@ -833,9 +833,9 @@ static void fn_1_1FA4(void) { } else { var_f27 = 2500.0f; } - sp18.x = sp18.x + var_f27 * sin(1.4137166738510132); // 81 * M_PI / 180.0 + sp18.x = sp18.x + var_f27 * sin(1.4137166738510132); // TODO: should be sind(81) sp18.y = sp18.y + -150.0f; - sp18.z = sp18.z + var_f27 * cos(1.4137166738510132); // 81 * M_PI / 180.0 + sp18.z = sp18.z + var_f27 * cos(1.4137166738510132); // TODO: should be cosd(81) PSVECSubtract(&sp18, &lbl_1_bss_630, &spC); PSVECScale(&spC, &spC, lbl_1_bss_66C); PSVECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630); @@ -880,7 +880,7 @@ static float fn_1_2524(void) { return 0.0f; } PSVECSubtract(&sp18, &sp24, &spC); - var_f30 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + var_f30 = atan2d(spC.x, spC.z); if (var_f30 > 0.0f) { var_f30 = 45.0f; } else { @@ -946,8 +946,8 @@ static void fn_1_2F18(void) { BoardModelPosGet(lbl_1_bss_6C4[0], &spC); PSVECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp18); if (sp18.z != 0.0f || sp18.x != 0.0f) { - sp24.y = 180.0 * (atan2(sp18.x, sp18.z) / M_PI); - sp24.x = -(180.0 * (atan2(sp18.y, sqrtf(sp18.x * sp18.x + sp18.z * sp18.z)) / M_PI)); + sp24.y = atan2d(sp18.x, sp18.z); + sp24.x = -atan2d(sp18.y, VECMagXZ(&sp18)); } else { sp24.x = sp24.y = 0.0f; } @@ -1096,9 +1096,9 @@ static void fn_1_3624(void) { BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, NULL, 150.0f, -1.0f, 2); BoardCameraMotionWait(); BoardModelPosGet(lbl_1_bss_6C4[0], &lbl_1_bss_618); - lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sin(sp30.y * M_PI / 180.0) * cos(sp30.x * M_PI / 180.0)); - lbl_1_bss_630.y = lbl_1_bss_618.y + 1000.0 * -sin(sp30.x * M_PI / 180.0); - lbl_1_bss_630.z = lbl_1_bss_618.z + 1000.0 * (cos(sp30.y * M_PI / 180.0) * cos(sp30.x * M_PI / 180.0)); + lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sind(sp30.y) * cosd(sp30.x)); + lbl_1_bss_630.y = lbl_1_bss_618.y + 1000.0 * -sind(sp30.x); + lbl_1_bss_630.z = lbl_1_bss_618.z + 1000.0 * (cosd(sp30.y) * cosd(sp30.x)); PSMTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678); @@ -1273,7 +1273,7 @@ static s32 fn_1_48B4(void) { BoardSpacePosGet(0, temp_r28, &sp14); PSVECSubtract(&sp14, &sp20, &sp8); PSVECNormalize(&sp8, &sp8); - var_f31 = 180.0 * (atan2(-sp8.x, -sp8.z) / M_PI); + var_f31 = atan2d(-sp8.x, -sp8.z); BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r30, temp_r28); while (GWPlayer[lbl_1_bss_6B4].moving) { @@ -1331,7 +1331,7 @@ static s32 fn_1_48B4(void) { BoardCameraTargetPlayerSet(lbl_1_bss_6B4); PSVECSubtract(&sp20, &sp14, &sp8); PSVECNormalize(&sp8, &sp8); - var_f31 = 180.0 * (atan2(-sp8.x, -sp8.z) / M_PI); + var_f31 = atan2d(-sp8.x, -sp8.z); BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r28, temp_r30); while (GWPlayer[lbl_1_bss_6B4].moving) { @@ -1410,13 +1410,13 @@ static void fn_1_50D4(void) { } PSVECSubtract(&sp14, &temp_r31->pos, &sp8); PSVECNormalize(&sp8, &sp8); - var_f31 = 180.0 * (atan2(sp8.z, sp8.x) / M_PI); + var_f31 = atan2d(sp8.z, sp8.x); if (var_r27 != 0) { var_f31 += 180.0f; } - sp20.x = temp_r31->pos.x + temp_f30 * sin(var_f31 * M_PI / 180.0); + sp20.x = temp_r31->pos.x + temp_f30 * sind(var_f31); sp20.y = temp_r31->pos.y + 80.0f; - sp20.z = temp_r31->pos.z + temp_f30 * cos(var_f31 * M_PI / 180.0); + sp20.z = temp_r31->pos.z + temp_f30 * cosd(var_f31); BoardModelPosSetV(lbl_1_bss_5D0[i], &sp20); BoardModelVisibilitySet(lbl_1_bss_5D0[i], 1); sp14 = temp_r31->pos; @@ -1752,7 +1752,7 @@ static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1) { OSu8tof32(&arg0->unk01, &temp_f29); temp_f29 -= 12.0f; temp_f29 = 90.0f * (temp_f29 / 12.5f); - var_f28 = cos(temp_f29 * M_PI / 180.0); + var_f28 = cosd(temp_f29); if (var_f28 < 0.1f) { var_f28 = 0.1f; } @@ -1779,7 +1779,7 @@ static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1) { arg1->scale.y = sp20.y; arg1->scale.z = sp20.z; BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, 0); - BoardPlayerRotYSet(GWSystem.player_curr, 180.0 * (atan2(sp8.x, sp8.z) / M_PI)); + BoardPlayerRotYSet(GWSystem.player_curr, atan2d(sp8.x, sp8.z)); arg0->unk00_field1 = 3; arg0->unk01 = 0; } @@ -1820,7 +1820,7 @@ static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1) { OSu8tof32(&arg0->unk01, &temp_f29); temp_f29 -= 12.0f; temp_f29 = 90.0f * (temp_f29 / 12.5f); - var_f28 = sin(temp_f29 * M_PI / 180.0); + var_f28 = sind(temp_f29); if (var_f28 < 0.1f) { var_f28 = 0.1f; } @@ -2157,7 +2157,7 @@ static void fn_1_8988(BssCData *arg0, omObjData *arg1) { BoardModelPosGet(*lbl_1_bss_6C4, &sp20); BoardPlayerPosGet(arg0->unk01, &sp14); PSVECSubtract(&sp20, &sp14, &sp8); - BoardPlayerRotYSet(arg0->unk01, 180.0 * (atan2(sp8.x, sp8.z) / M_PI)); + BoardPlayerRotYSet(arg0->unk01, atan2d(sp8.x, sp8.z)); arg0->unk00 = 1; } @@ -2199,7 +2199,7 @@ static void fn_1_8B6C(BssCData *arg0, omObjData *arg1) { BoardPlayerPosGet(arg0->unk01, &arg0->unk14); BoardModelPosGet(lbl_1_bss_6C4[0], &sp20); PSVECSubtract(&sp20, &arg0->unk14, &sp14); - BoardPlayerRotYSet(arg0->unk01, -(180.0 * (atan2(sp14.x, sp14.z) / M_PI))); + BoardPlayerRotYSet(arg0->unk01, -atan2d(sp14.x, sp14.z)); BoardPlayerMotionStart(arg0->unk01, 3, 0x40000001); BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f); temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6AE); @@ -2265,8 +2265,8 @@ static void fn_1_8DDC(BssCData *arg0, omObjData *arg1) { PSMTXTranspose(sp54, arg0->unk20); } else { if (sp24.z != 0.0f || sp24.x != 0.0f) { - sp3C.y = 180.0 * (atan2(sp24.x, sp24.z) / M_PI); - sp3C.x = -(180.0 * (atan2(sp24.y, sqrtf(sp24.x * sp24.x + sp24.z * sp24.z)) / M_PI)); + sp3C.y = atan2d(sp24.x, sp24.z); + sp3C.x = -atan2d(sp24.y, VECMagXZ(&sp24)); } else { sp3C.x = sp3C.y = 0.0f; } @@ -2296,7 +2296,7 @@ static void fn_1_918C(BssCData *arg0, omObjData *arg1) { BoardPlayerPosGet(arg0->unk01, &sp14); BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); PSVECSubtract(&sp20, &sp14, &sp8); - BoardPlayerRotYSet(arg0->unk01, 180.0 * (atan2(-sp8.z, -sp8.x) / M_PI)); + BoardPlayerRotYSet(arg0->unk01, atan2d(-sp8.z, -sp8.x)); BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 20); arg0->unk00 = 5; } @@ -2547,7 +2547,7 @@ static void fn_1_9BBC(Bss20Work *arg0) { BoardModelVisibilitySet(temp_r31->unk02, 0); } else { if (temp_r31->unk00 <= 3) { - temp_r31->unk04 = sin(30.0f * temp_r31->unk00 * M_PI / 180.0); + temp_r31->unk04 = sind(30.0f * temp_r31->unk00); } PSVECAdd(&temp_r31->unk08, &temp_r31->unk14, &temp_r31->unk08); BoardModelMtxSet(temp_r31->unk02, &lbl_1_bss_678); diff --git a/src/REL/w01Dll/mg_coin.c b/src/REL/w01Dll/mg_coin.c index 2c8a1668..9520710c 100755 --- a/src/REL/w01Dll/mg_coin.c +++ b/src/REL/w01Dll/mg_coin.c @@ -22,7 +22,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { /* 0x00 */ Vec unk00; @@ -640,7 +640,7 @@ static void fn_1_B478(omObjData *arg0) { MGSeqParamSet(lbl_1_bss_744, 2, -1); lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; BoardPlayerPosGet(lbl_1_bss_798, &spC); - var_f28 = sqrtf((temp_r31->unk04.x - spC.x) * (temp_r31->unk04.x - spC.x) + (temp_r31->unk04.z - spC.z) * (temp_r31->unk04.z - spC.z)); + var_f28 = VECDistanceXZ(&temp_r31->unk04, &spC); fn_1_C94C(&spC, &temp_r31->unk04, &temp_r31->unk10); temp_r31->unk10.y = 0.0f; temp_r31->unk10.x *= var_f28 / 30.0f; @@ -664,7 +664,7 @@ static void fn_1_BAF8(omObjData *arg0) { BoardPlayerPosGet(lbl_1_bss_798, &sp14); sp14.x += temp_r31->unk10.x; sp14.z += temp_r31->unk10.z; - sp14.y = lbl_1_bss_738.y + 80.0 * sin(6.0f * temp_r31->unk20 * M_PI / 180.0); + sp14.y = lbl_1_bss_738.y + 80.0 * sind(6.0f * temp_r31->unk20); BoardModelPosGet(lbl_1_bss_714[lbl_1_bss_730]->work[0], &sp8); if ((temp_r31->unk20 += 1.0f) == 30.0f) { sp14.y = sp8.y + 5.0f; @@ -892,7 +892,7 @@ static float fn_1_C998(Vec *arg0) { return 270.0f; } } - temp_f31 = 180.0 * (atan2(arg0->z, arg0->x) / M_PI); + temp_f31 = atan2d(arg0->z, arg0->x); if (arg0->z < 0.0f) { temp_f31 = 90.0f - temp_f31; } else { @@ -1051,8 +1051,8 @@ static void fn_1_D114(ModelData *model, ParticleData *particle, Mtx matrix) { var_r31->unk24 = 0.0f; } temp_r26 = 80.0f * (2.0f * ((sp8.x - var_r31->unk08.x) / 15.0f) - rand8() / 255.0f); - var_r31->unk20 = 8.0 * sin(temp_r26 * M_PI / 180.0); - var_r31->unk28 = 8.0 * cos(temp_r26 * M_PI / 180.0); + var_r31->unk20 = 8.0 * sind(temp_r26); + var_r31->unk28 = 8.0 * cosd(temp_r26); } var_r31->unk24 -= 0.35f; if ((var_r31->unk14.x -= 25.5f) < 0.0f) { diff --git a/src/REL/w01Dll/mg_item.c b/src/REL/w01Dll/mg_item.c index 2ebff385..a2c6333e 100755 --- a/src/REL/w01Dll/mg_item.c +++ b/src/REL/w01Dll/mg_item.c @@ -23,7 +23,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" static void fn_1_E100(void); static void fn_1_E154(void); @@ -308,7 +308,7 @@ static void fn_1_E44C(omObjData *arg0) { arg0->trans.x = spC.x; arg0->trans.y = spC.y; arg0->trans.z = spC.z; - arg0->rot.x = sqrtf((lbl_1_bss_7D8.x - sp18.x) * (lbl_1_bss_7D8.x - sp18.x) + (lbl_1_bss_7D8.z - sp18.z) * (lbl_1_bss_7D8.z - sp18.z)); + arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7D8, &sp18); arg0->rot.y = 10.0f; arg0->rot.z = sp18.y; arg0->scale.x = 0.0f; @@ -327,7 +327,7 @@ static void fn_1_E914(omObjData *arg0) { spC.z += arg0->trans.z * arg0->rot.x / 32.760002f; spC.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x; arg0->scale.x += 1.0f; - if (sqrtf((lbl_1_bss_7D8.x - spC.x) * (lbl_1_bss_7D8.x - spC.x) + (lbl_1_bss_7D8.z - spC.z) * (lbl_1_bss_7D8.z - spC.z)) < 2.0f) { + if (VECDistanceXZ(&lbl_1_bss_7D8, &spC) < 2.0f) { spC = lbl_1_bss_7D8; BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10BB0(arg0->work[2]), 0.0f); lbl_1_bss_7EC = 0.05f; @@ -460,7 +460,7 @@ static void fn_1_F3F8(omObjData *arg0) { arg0->trans.x = spC.x; arg0->trans.y = spC.y; arg0->trans.z = spC.z; - arg0->rot.x = sqrtf((lbl_1_bss_7C4.x - sp18.x) * (lbl_1_bss_7C4.x - sp18.x) + (lbl_1_bss_7C4.z - sp18.z) * (lbl_1_bss_7C4.z - sp18.z)); + arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7C4, &sp18); arg0->scale.y = 20.0f + 40.0f * (arg0->rot.x / 445.0f); arg0->rot.y = 0.016666668f * (arg0->scale.y / 2) * (arg0->scale.y / 2); arg0->rot.z = sp18.y; @@ -673,8 +673,8 @@ static void fn_1_101B8(s16 arg0) { if (var_f31 >= 360.0f) { var_f31 -= 360.0f; } - temp_f30 = lbl_1_bss_80C.x - 100.0 * cos(var_f31 * M_PI / 180.0); - temp_f28 = lbl_1_bss_80C.z - 100.0 * sin(var_f31 * M_PI / 180.0); + temp_f30 = lbl_1_bss_80C.x - 100.0 * cosd(var_f31); + temp_f28 = lbl_1_bss_80C.z - 100.0 * sind(var_f31); temp_f29 = lbl_1_bss_80C.y + 66.0f + 1.0f; omSetTra(var_r31, temp_f30, temp_f29, temp_f28); var_r31->work[0] = 0; @@ -715,7 +715,7 @@ static void fn_1_10664(omObjData *arg0) { } omSetSca(arg0, var_f31, var_f31, var_f31); } else { - arg0->trans.y += sin(temp_r31[1] * M_PI / 180.0); + arg0->trans.y += sind(temp_r31[1]); temp_r31[1] += 4.0f; if (temp_r31[1] >= 360.0f) { temp_r31[1] -= 360.0f; @@ -739,7 +739,7 @@ static void fn_1_10820(omObjData *arg0) { sp24.y = 0.0f; PSVECSubtract(&sp24, &sp18, &spC); PSVECNormalize(&spC, &spC); - var_f28 = sqrtf((sp24.x - sp18.x) * (sp24.x - sp18.x) + (sp24.z - sp18.z) * (sp24.z - sp18.z)); + var_f28 = VECDistanceXZ(&sp24, &sp18); if (var_f28 < 8.0f) { arg0->trans.x = sp24.x; arg0->trans.z = sp24.z; @@ -749,7 +749,7 @@ static void fn_1_10820(omObjData *arg0) { arg0->trans.z += 8.0f * spC.z; } } - arg0->trans.y += sin(temp_r30[1] * M_PI / 180.0); + arg0->trans.y += sind(temp_r30[1]); temp_r30[1] += 4.0f; if (temp_r30[1] >= 360.0f) { temp_r30[1] -= 360.0f; @@ -836,7 +836,7 @@ static float fn_1_10EB8(Vec *arg0) { return 270.0f; } } - var_f31 = 180.0 * (atan2(arg0->z, arg0->x) / M_PI); + var_f31 = atan2d(arg0->z, arg0->x); if (arg0->z < 0.0f) { var_f31 = 90.0f - var_f31; } else { @@ -877,8 +877,8 @@ static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix) { if (var_r28 != particle->unk_30) { temp_f30 = 0.003921569f * frand8() * 360.0f; temp_f29 = 0.003921569f * frand8() * 70.0f * temp_f31; - var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sin(temp_f30 * M_PI / 180.0); - var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sind(temp_f30); + var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cosd(temp_f30); var_r31->unk34.y = lbl_1_bss_7F0->trans.y + temp_f31 * (-30.0f + 0.003921569f * frand8() * 60.0f); var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; @@ -919,14 +919,14 @@ static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix) { for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { temp_f30 = 0.003921569f * frand8() * 360.0f; temp_f31 = 0.003921569f * frand8() * 50.0f; - var_r31->unk08.x = temp_f31 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk08.x = temp_f31 * cosd(temp_f30); var_r31->unk08.y = 2.0f + 0.003921569f * frand8() * 4.0f; - var_r31->unk08.z = temp_f31 * sin(temp_f30 * M_PI / 180.0); + var_r31->unk08.z = temp_f31 * sind(temp_f30); temp_f29 = 60.0f + 20.0f * frand8() * 0.003921569f; temp_f31 = 4.0f + 5.0f * frand8() * 0.003921569f; - var_r31->unk14.x = temp_f31 * sin(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0); - var_r31->unk14.y = temp_f31 * sin(temp_f29 * M_PI / 180.0); - var_r31->unk14.z = temp_f31 * cos(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0); + var_r31->unk14.x = temp_f31 * sind(temp_f30) * cosd(temp_f29); + var_r31->unk14.y = temp_f31 * sind(temp_f29); + var_r31->unk14.z = temp_f31 * cosd(temp_f30) * cosd(temp_f29); var_r31->unk20 = 1.0f; var_r31->unk40.a = 0xB4; var_r31->unk2C = 9.0f + 0.003921569f * frand8() * 4.0f; diff --git a/src/REL/w04Dll/big_boo.c b/src/REL/w04Dll/big_boo.c new file mode 100755 index 00000000..c689dc71 --- /dev/null +++ b/src/REL/w04Dll/big_boo.c @@ -0,0 +1,1175 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/msm.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" +#include "game/board/view.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "ext_math.h" + +// Remove this and include frand.h header once we decide what to do with frandmod. +#define frand8() (((s32)frand() & 0xFF)) + +static void fn_1_62B0(void); +static void fn_1_68D8(void); +static void fn_1_6CF8(void); +static void fn_1_7300(void); +static void fn_1_757C(void); +static void fn_1_75D8(void); +static void fn_1_7888(void); +static void fn_1_8A60(void); +static void fn_1_98A0(void); +static void fn_1_9B34(void); +static void fn_1_9BDC(void); +static void fn_1_9C18(void); +static void fn_1_9EA8(void); +static s16 fn_1_9F50(void); +static void fn_1_A074(s16 arg0); + +static s16 lbl_1_bss_282; +static s16 lbl_1_bss_280; +static s16 lbl_1_bss_27E; +static s16 lbl_1_bss_27C; +static Process *lbl_1_bss_278; +static s16 lbl_1_bss_274; +static s16 lbl_1_bss_272; +static s16 lbl_1_bss_270; +static Vec lbl_1_bss_240[4]; +static Vec lbl_1_bss_210[4]; +static s16 lbl_1_bss_13C[105]; +static s16 lbl_1_bss_13A; +static s16 lbl_1_bss_134[3]; +static s16 lbl_1_bss_114[4][4]; +static Vec lbl_1_bss_108; +static Process *lbl_1_bss_104; +static AnimData *lbl_1_bss_100; + +static char *lbl_1_data_3CC[] = { + "picture", "picture2", "clock", "hari", "papa" +}; + +static s32 lbl_1_data_3E0[] = { + DATA_MAKE_NUM(DATADIR_W04, 25), + DATA_MAKE_NUM(DATADIR_W04, 26), + DATA_MAKE_NUM(DATADIR_W04, 27), + DATA_MAKE_NUM(DATADIR_W04, 28), + -1 +}; + +static s32 lbl_1_data_3F4[8] = { + DATADIR_MARIOMOT, + DATADIR_LUIGIMOT, + DATADIR_PEACHMOT, + DATADIR_YOSHIMOT, + DATADIR_WARIOMOT, + DATADIR_DONKEYMOT, + DATADIR_DAISYMOT, + DATADIR_WALUIGIMOT +}; + +static s32 lbl_1_data_414[] = { + 26, 28, 93, 12 +}; + +static s16 lbl_1_data_424[][2] = { + { 0, 0 }, { 6, 1 }, { 7, 3 }, { 12, 2 }, + { 15, 3 }, { 18, 4 }, { 20, 6 }, { 23, 5 }, + { 26, 6 }, { 28, 7 }, { 29, 8 }, { -1, 9 } +}; + +void fn_1_6024(void) { + lbl_1_bss_27C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 19), NULL, 0); + BoardModelHookSet(lbl_1_bss_14[4], lbl_1_data_3CC[0], lbl_1_bss_27C); + lbl_1_bss_280 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 20), NULL, 0); + BoardModelHookSet(lbl_1_bss_14[4], lbl_1_data_3CC[2], lbl_1_bss_280); + lbl_1_bss_27E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 21), NULL, 0); + BoardModelHookSet(lbl_1_bss_280, lbl_1_data_3CC[3], lbl_1_bss_27E); + BoardModelAttrSet(lbl_1_bss_27E, 0x40000002); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27C, 20.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000003); + BoardModelMotionSpeedSet(lbl_1_bss_27C, 0.5f); + if (lbl_1_bss_0->unk01 != 0) { + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelMotionSpeedSet(lbl_1_bss_280, 0.5f); + BoardModelAttrReset(lbl_1_bss_280, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27E, 120.0f * lbl_1_bss_0->unk01); + BoardModelMotionTimeSet(lbl_1_bss_27C, 25.0f + 30.0f * lbl_1_bss_0->unk01); + } +} + +static void fn_1_62B0(void) { + Vec sp14; + Vec sp8; + s32 var_r31; + + lbl_1_bss_0->unk01++; + if (lbl_1_bss_0->unk01 == 3) { + lbl_1_bss_272 = GWPlayer[lbl_1_bss_282].space_curr; + var_r31 = BoardSpaceLinkFlagSearch(0, lbl_1_bss_272, 0x02000000); + BoardPlayerMoveToAsync(lbl_1_bss_282, var_r31); + while (GWPlayer[lbl_1_bss_282].moving) { + HuPrcVSleep(); + } + lbl_1_bss_274 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 24), lbl_1_data_3E0, 0); + BoardModelMotionStart(lbl_1_bss_274, 4, 0); + BoardModelAttrSet(lbl_1_bss_274, 0x40000002); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[4]), lbl_1_data_3CC[4], &sp14); + BoardModelPosSetV(lbl_1_bss_274, &sp14); + sp8.x = sp8.y = sp8.z = 3.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp8); + BoardModelVisibilitySet(lbl_1_bss_274, 0); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 180, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + fn_1_9C18(); + switch (lbl_1_bss_0->unk01) { + case 1: + HuAudFXPlay(0x4E); + omVibrate(lbl_1_bss_282, 0x7FFF, 6, 6); + BoardModelMotionTimeSet(lbl_1_bss_27C, 30.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(40); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + HuPadRumbleStop(GWPlayer[lbl_1_bss_282].port); + BoardWinCreate(0, MAKE_MESSID(32, 26), -1); + BoardWinWait(); + BoardWinKill(); + break; + case 2: + HuAudFXPlay(0x4E); + omVibrate(lbl_1_bss_282, 0x7FFF, 6, 6); + BoardModelMotionTimeSet(lbl_1_bss_27C, 60.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(40); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + HuPadRumbleStop(GWPlayer[lbl_1_bss_282].port); + BoardWinCreate(0, MAKE_MESSID(32, 27), -1); + BoardWinWait(); + BoardWinKill(); + break; + case 3: + BoardWinCreate(0, MAKE_MESSID(32, 28), -1); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(0x4E); + sp14.x = 5.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 300.0f; + sp8.z = -200.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp14, &sp8, 1400.0f, -1.0f, 30); + BoardCameraMotionWait(); + HuPrcSleep(9); + HuAudFXPlay(0x464); + BoardModelMotionTimeSet(lbl_1_bss_27C, 90.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(10); + omVibrate(lbl_1_bss_282, 12, 4, 2); + BoardModelVisibilitySet(lbl_1_bss_274, 1); + BoardModelAttrReset(lbl_1_bss_274, 0x40000002); + HuPrcSleep(39); + BoardModelPosGet(lbl_1_bss_274, &sp14); + BoardModelScaleGet(lbl_1_bss_274, &sp8); + while (!BoardModelMotionEndCheck(lbl_1_bss_274)) { + sp14.z += 15.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp14); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_274, 1, 0x40000001); + break; + } + if (lbl_1_bss_0->unk01 == 3) { + fn_1_68D8(); + BoardCameraViewSet(1); + BoardPlayerMoveToAsync(lbl_1_bss_282, lbl_1_bss_272); + while (GWPlayer[lbl_1_bss_282].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardCameraMotionWait(); + } else { + HuPrcSleep(29); + } + HuPrcEnd(); +} + +static void fn_1_68D8(void) { + float var_f31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + + BoardWinCreate(2, MAKE_MESSID(32, 3), 9); + BoardWinWait(); + BoardWinKill(); + if (BoardPlayerCoinsGet(lbl_1_bss_282) < 15) { + BoardWinCreate(2, MAKE_MESSID(32, 4), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + fn_1_98A0(); + return; + } + do { + var_r30 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + var_r30 += GWStarsGet(i); + } + } + var_r28 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + var_r28 += BoardPlayerCoinsGet(i); + } + } + BoardWinCreateChoice(4, MAKE_MESSID(32, 5), 9, 0); + if (BoardPlayerCoinsGet(lbl_1_bss_282) < 150 || var_r30 == 0) { + BoardWinChoiceDisable(1); + } + if (var_r28 == 0) { + BoardWinChoiceDisable(0); + } + if (GWPlayer[lbl_1_bss_282].com) { + if (var_r30 != 0 && BoardPlayerCoinsGet(lbl_1_bss_282) >= 150) { + BoardComKeySetDown(); + } else { + BoardComKeySetUp(); + } + } + BoardWinWait(); + BoardWinKill(); + var_r27 = BoardWinChoiceGet(); + var_r29 = 6; + switch (var_r27) { + case 1: + var_r29 /= 4; + for (i = 0; i < 135; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_282, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r29); + } + /* fallthrough */ + case 0: + for (i = 0; i < 15; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_282, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r29); + } + HuAudFXPlay(0xF); + HuAudFXPlay(0x4E); + BoardWinCreate(2, MAKE_MESSID(32, 7), 9); + BoardWinWait(); + BoardWinKill(); + var_f31 = 255.0f; + for (i = 0; i < 60; i++) { + var_f31 -= 4.25f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + BoardModelAlphaSet(lbl_1_bss_274, var_f31); + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0); + WipeCreate(2, 0, 60); + WipeColorSet(0, 0, 0); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0xFF); + if (var_r27 == 0) { + fn_1_7888(); + } else { + fn_1_8A60(); + } + break; + case -1: + case 2: + BoardWinCreate(2, MAKE_MESSID(32, 6), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + break; + case 3: + BoardViewMapExec(lbl_1_bss_282); + break; + } + } while (var_r27 == 3); + fn_1_98A0(); +} + +static void fn_1_6CF8(void) { + Vec sp10; + s16 sp8[4]; + s16 var_r29; + s16 var_r28; + s32 temp_r27; + s32 var_r30; + s32 i; + + var_r29 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + BoardPlayerPosGet(i, &lbl_1_bss_240[i]); + BoardPlayerRotGet(i, &lbl_1_bss_210[i]); + sp8[var_r29++] = i; + } + } + BoardModelHideSetAll(1); + BoardSpaceHide(1); + for (i = 0; i < 4; i++) { + BoardStatusShowSet(i, 0); + } + BoardLightResetExec(); + lbl_1_bss_270 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 22), NULL, 0); + BoardModelAttrSet(lbl_1_bss_270, 0x40000001); + sp10.y = 0.0f; + for (i = -1; i < 2; i++) { + sp10.z = 220.0f + -20.0f * abs(i); + sp10.x = 150.0f * i; + BoardPlayerPosSetV(sp8[i + 1], &sp10); + BoardPlayerRotYSet(sp8[i + 1], 180.0f); + BoardModelVisibilitySet(BoardPlayerModelGet(sp8[i + 1]), 1); + temp_r27 = lbl_1_data_3F4[GWPlayer[sp8[i + 1]].character]; + for (var_r30 = 0; var_r30 < 4; var_r30++) { + lbl_1_bss_114[sp8[i + 1]][var_r30] = BoardPlayerMotionCreate(sp8[i + 1], temp_r27 | lbl_1_data_414[var_r30]); + } + BoardPlayerMotionStart(sp8[i + 1], lbl_1_bss_114[sp8[i + 1]][0], 0x40000001); + } + BoardModelPosGet(lbl_1_bss_274, &lbl_1_bss_108); + BoardModelVisibilitySet(lbl_1_bss_274, 1); + sp10.x = sp10.z = 0.0f; + sp10.y = 800.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp10); + sp10.x = sp10.y = sp10.z = 4.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp10); + BoardModelMotionStart(lbl_1_bss_274, 0, 0); + BoardCameraMoveSet(0); + BoardCameraTargetModelSet(lbl_1_bss_270); + BoardCameraOffsetSet(0.0f, 200.0f, 0.0f); + BoardCameraXRotZoomSet(1600.0f, -5.0f); + lbl_1_bss_104 = HuPrcChildCreate(fn_1_75D8, 0x2003, 0x1000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_104, fn_1_757C); + WipeCreate(1, 0, 60); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuPrcSleep(0x78); + for (i = 0; i < 3; i++) { + BoardPlayerModelAttrReset(sp8[i], 0x40000001); + BoardPlayerMotionShiftSet(sp8[i], lbl_1_bss_114[sp8[i]][1], 0.0f, 5.0f, 0); + } + BoardModelPosGet(lbl_1_bss_274, &sp10); + var_r28 = 10; + for (i = 0; i < 60; i++) { + if (--var_r28 == 0) { + HuAudFXPlay(0x4E); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + HuAudPlayerVoicePlay(sp8[var_r30], 0x12F); + } + } + sp10.y -= 10.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp10); + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardPlayerMotionShiftSet(sp8[i], 1, 0.0f, 5.0f, 0x40000001); + } +} + +static void fn_1_7300(void) { + Vec sp14; + Vec sp8; + s32 i; + s32 j; + + WipeCreate(2, 0, 30); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelKill(lbl_1_bss_270); + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + BoardPlayerPosSetV(i, &lbl_1_bss_240[i]); + BoardPlayerRotSetV(i, &lbl_1_bss_210[i]); + for (j = 0; j < 4; j++) { + BoardPlayerMotionKill(i, lbl_1_bss_114[i][j]); + } + BoardPlayerMotionStart(i, 1, 0x40000001); + } + } + HuPrcKill(lbl_1_bss_104); + HuPrcVSleep(); + BoardModelHideSetAll(0); + BoardSpaceHide(0); + for (i = 0; i < 4; i++) { + BoardStatusShowSet(i, 1); + } + BoardLightSetExec(); + BoardCameraMoveSet(0); + sp14.x = 5.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 220.0f; + sp8.z = -200.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp14, &sp8, 1400.0f, -1.0f, 0); + BoardCameraMoveSet(1); + BoardModelMotionStart(lbl_1_bss_274, 1, 0x40000001); + sp8.x = sp8.y = sp8.z = 3.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp8); + BoardModelPosSetV(lbl_1_bss_274, &lbl_1_bss_108); + WipeCreate(1, 0, 30); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } +} + +static void fn_1_757C(void) { + s16 temp_r31; + s16 temp_r30; + + temp_r31 = ((s32) HuPrcCurrentGet()->user_data) >> 16; + temp_r30 = (u16) HuPrcCurrentGet()->user_data; + Hu3DGLightKill(temp_r31); + Hu3DGLightKill(temp_r30); +} + +static void fn_1_75D8(void) { + Vec sp1C; + Vec sp10; + GXColor spC; + float sp8; + float var_f31; + s16 temp_r3; + s16 temp_r3_2; + + temp_r3 = Hu3DGLightCreate(0.0f, 1000.0f, 0.0f, 0.0f, 0.9f, -0.1f, 0xFF, 0x64, 0xC8); + Hu3DGLightInfinitytSet(temp_r3); + Hu3DGLightStaticSet(temp_r3, 1); + spC.r = 0xCD; + spC.g = 0x32; + spC.b = 0x96; + sp1C.x = sp1C.y = sp1C.z = 0.0f; + sp10.x = 0.0f; + sp10.y = -1.0f; + sp10.z = 0.0f; + temp_r3_2 = Hu3DGLightCreateV(&sp1C, &sp10, &spC); + Hu3DGLightInfinitytSet(temp_r3_2); + Hu3DGLightStaticSet(temp_r3_2, 1); + HuPrcCurrentGet()->user_data = (void*) (((temp_r3 << 16) & 0xFFFF0000) | (temp_r3_2 & 0xFFFF)); + var_f31 = 0.0f; + sp8 = var_f31; + while (TRUE) { + sp10.x = cosd(var_f31 - 180.0f); + sp10.y = sind(var_f31); + sp10.z = cosd(var_f31) * sind(var_f31); + var_f31 += 3.0f + 6.0f * frand8() * 0.003921569f; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + Hu3DGLightPosSetV(temp_r3_2, &sp1C, &sp10); + HuPrcVSleep(); + } +} + +static void fn_1_7888(void) { + Vec sp8F8[105]; + Vec sp40C[105]; + float sp268[105]; + float spC4[105]; + u8 sp58[105]; + Vec sp4C; + float sp40[3] = { 270.0f, 0.0f, 90.0f }; + float sp28[2]; + float var_f31; + char sp30[16]; + s16 sp20[4]; + s16 sp18[4]; + s16 sp10[4]; + s16 sp8[4]; + u16 var_r26; + u16 var_r24; + s16 var_r28; + s16 var_r27; + s16 var_r22; + s16 var_r21; + s16 var_r20; + s16 var_r23; + s32 var_r25; + s32 i; + s32 j; + s32 k; + + fn_1_6CF8(); + HuWinMesMaxSizeGet(1, sp28, MAKE_MESSID(32, 8)); + var_r21 = HuWinCreate(-10000.0f, 32.0f, sp28[0], sp28[1], 1); + HuWinMesSet(var_r21, MAKE_MESSID(32, 8)); + HuWinMesSpeedSet(var_r21, 0); + BoardModelMotionStart(lbl_1_bss_274, 3, 0x40000001); + for (i = 0; i < 4; i++) { + sp20[i] = 0; + sp18[i] = 0; + } + BoardModelPosGet(lbl_1_bss_274, &sp4C); + var_r20 = 48; + for (i = 0; i < 120; i++) { + if (--var_r20 == 0) { + var_r20 = 48; + for (j = 0; j < 4; j++) { + if (j != lbl_1_bss_282) { + HuAudPlayerVoicePlay(j, 0x130); + } + } + } + for (j = 0; j < 4; j++) { + if (j == lbl_1_bss_282) { + continue; + } + if (GWPlayer[j].com) { + switch (GWPlayer[j].diff) { + case 0: + var_r28 = 12; + break; + case 1: + var_r28 = 22; + break; + case 2: + var_r28 = 50; + break; + case 3: + var_r28 = 1000; + break; + } + if (frandmod(100) < var_r28) { + var_r26 = 0x100; + } else { + var_r26 = 0; + } + } else { + var_r24 = GWPlayer[j].port; + var_r26 = HuPadBtnDown[var_r24]; + } + if (var_r26 & 0x100) { + sp20[j]++; + } + if (sp18[j] != 0) { + if (BoardPlayerMotionEndCheck(j)) { + sp18[j] = 0; + BoardPlayerMotionStart(j, 1, 0x40000001); + } + } else if (var_r26 & 0x100) { + sp18[j] = 1; + BoardPlayerMotionStart(j, lbl_1_bss_114[j][2], 0); + } + } + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + BoardPlayerMotionStart(i, lbl_1_bss_114[i][3], 0); + OSReport("%d:%dhit ", i, sp20[i]); + omVibrate(i, 12, 4, 2); + } + OSReport("\n"); + HuWinKill(var_r21); + var_r27 = 0; + var_r23 = GWSystem.turn; + if (var_r23 <= 5) { + var_r25 = 15; + } else if (var_r23 <= 15) { + var_r25 = 25; + } else if (var_r23 <= 25) { + var_r25 = 27; + } else if (var_r23 <= 35) { + var_r25 = 30; + } else if (var_r23 <= 45) { + var_r25 = 32; + } else { + var_r25 = 35; + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + j = 0; + while (TRUE) { + if (lbl_1_data_424[j][0] == -1) { + sp8[i] = lbl_1_data_424[j][1]; + break; + } else if (sp20[i] <= lbl_1_data_424[j][0]) { + sp8[i] = lbl_1_data_424[j][1]; + break; + } + j++; + } + sp10[i] = var_r25 - sp8[i]; + if (BoardPlayerCoinsGet(i) < sp10[i]) { + sp10[i] = BoardPlayerCoinsGet(i); + } + var_r27 += sp10[i]; + BoardPlayerCoinsAdd(i, -sp10[i]); + OSReport("%d:%dlost ", i, sp10[i]); + } + OSReport("\n"); + for (i = 0; i < var_r27; i++) { + lbl_1_bss_13C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), 0, 1); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + sp58[i] = 0; + } + for (i = 0; i < 10; i++) { + sp4C.z += 21.0f - i; + BoardModelPosSetV(lbl_1_bss_274, &sp4C); + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + omVibrate(i, 12, 4, 2); + HuAudPlayerVoicePlay(i, 0x131); + } + HuAudFXPlay(0x4E); + var_r28 = 0; + var_r24 = var_r27; + while (TRUE) { + if (var_r28 == 0) { + var_r22 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + for (j = 0; j < 3; j++) { + if (sp10[i] == 0) { + continue; + } + sp10[i]--; + var_r24--; + for (k = 0; k < var_r27; k++) { + if (sp58[k] == 0) { + break; + } + } + if (k == var_r27) { + OSReport("\x82\xB1\x82\xA2\x82\xF1\x82\xAA\x8F\x6F\x82\xB9\x82\xC8\x82\xA2 total %d\n", var_r27); + while (TRUE) { + HuPrcVSleep(); + } + } + HuAudFXPlay(0x12); + sp58[k] = 1; + BoardPlayerPosGet(i, &sp8F8[k]); + sp8F8[k].y += 180.0f; + BoardModelVisibilitySet(lbl_1_bss_13C[k], 1); + BoardModelPosSetV(lbl_1_bss_13C[k], &sp8F8[k]); + sp40C[k].x = 10.0 * sind(sp40[var_r22] - 20.0f + 40.0f * j); + sp40C[k].z = 10.0 * cosd(sp40[var_r22] - 20.0f + 40.0f * j); + sp40C[k].y = 6.0f + 6.0f * frand8() * 0.003921569f; + sp268[k] = 0.0f; + spC4[k] = 360.0f * frand8() * 0.003921569f; + } + var_r22++; + } + var_r28 = 8; + } else { + var_r28--; + } + var_r26 = 0; + for (i = 0; i < var_r27; i++) { + if (sp58[i] == 0) { + continue; + } + var_r26++; + sp8F8[i].x += sp40C[i].x; + sp8F8[i].z += sp40C[i].z; + sp8F8[i].y += sp40C[i].y - sp268[i] * sp268[i] * 0.25f * 0.075f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], spC4[i]); + sp268[i] += 1.0f; + spC4[i] += 12.0f; + if (spC4[i] >= 360.0f) { + spC4[i] -= 360.0f; + } + if (sp8F8[i].y < -450.0f) { + sp58[i] = 0; + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + } + } + if (var_r26 == 0 && var_r24 == 0) { + break; + } + HuPrcVSleep(); + } + fn_1_7300(); + sprintf(sp30, "%d", var_r27); + BoardWinCreate(2, MAKE_MESSID(32, 9), 9); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp30), 0); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(lbl_1_bss_282, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardPlayerPosGet(lbl_1_bss_282, &sp4C); + for (i = 0; i < var_r27; i++) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 1); + sp8F8[i].x = sp4C.x - 25.0f + 50.0f * frand8() * 0.003921569f; + sp8F8[i].y = sp4C.y + 1200.0f + 130.0f * i + 60.0f * frand8() * 0.003921569f; + sp8F8[i].z = sp4C.z - 25.0f + 50.0f * frand8() * 0.003921569f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + } + var_f31 = -4.0f; + var_r28 = 0; + while (TRUE) { + for (i = 0; i < var_r27; i++) { + if (i < var_r28) { + continue; + } + sp8F8[i].y += var_f31; + spC4[i] += 45.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], spC4[i]); + if (sp8F8[i].y <= sp4C.y + 180.0f) { + CharModelCoinEffectCreate(1, &sp8F8[i]); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + var_r28++; + BoardPlayerCoinsAdd(lbl_1_bss_282, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_282, 12, 6, 6); + } + } + var_f31 *= 1.05f; + if (var_f31 < -40.0f) { + var_f31 = -40.0f; + } + if (var_r28 == var_r27) { + BoardPlayerMotionShiftSet(lbl_1_bss_282, 7, 0.0f, 10.0f, 0); + break; + } + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + for (i = 0; i < var_r27; i++) { + BoardModelKill(lbl_1_bss_13C[i]); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardWinCreate(2, MAKE_MESSID(32, 10), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); +} + +static void fn_1_8A60(void) { + Vec sp7C[3]; + Vec sp58[3]; + Vec sp4C; + Vec sp40; + float sp34[3]; + float sp28[3]; + float sp1C[3] = { 315.0f, 0.0f, 45.0f }; + char sp10[12]; + float var_f31; + float var_f30; + s16 sp8[4]; + s16 var_r30; + s32 temp_r27; + s32 var_r28; + s32 var_r29; + s32 i; + + fn_1_6CF8(); + lbl_1_bss_13A = 0; + BoardModelMotionStart(lbl_1_bss_274, 3, 0x40000001); + BoardModelPosGet(lbl_1_bss_274, &sp4C); + for (i = 0; i < 120; i++) { + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + BoardPlayerMotionStart(i, lbl_1_bss_114[i][3], 0); + omVibrate(i, 12, 4, 2); + } + var_r29 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + if (GWStarsGet(i) > 0) { + sp8[i] = 1; + var_r29++; + } else { + sp8[i] = 0; + } + BoardPlayerStarsAdd(i, -sp8[i]); + } + OSReport("Total Star %d\n", var_r29); + for (i = 0; i < var_r29; i++) { + lbl_1_bss_13C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 8), NULL, 0); + BoardModelAttrSet(lbl_1_bss_13C[i], 0x40000002); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + } + for (i = 0; i < 10; i++) { + sp4C.z += 21.0f - i; + BoardModelPosSetV(lbl_1_bss_274, &sp4C); + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + omVibrate(i, 12, 4, 2); + HuAudPlayerVoicePlay(i, 0x131); + } + HuAudFXPlay(0x4E); + var_r30 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282 || sp8[i] == 0) { + continue; + } + BoardPlayerPosGet(i, &sp7C[var_r30]); + sp7C[var_r30].y += 180.0f; + sp34[var_r30] = 0.0f; + sp58[var_r30].x = 10.0 * sind(sp1C[var_r30]); + sp58[var_r30].z = 10.0 * cosd(sp1C[var_r30]); + sp58[var_r30].y = 6.0f + 6.0f * frand8() * 0.003921569f; + sp34[var_r30] = 360.0f * frand8() * 0.003921569f; + sp28[var_r30] = 0.0f; + BoardModelVisibilitySet(lbl_1_bss_13C[var_r30], 1); + lbl_1_bss_134[var_r30] = fn_1_9F50(); + var_r30++; + } + while (TRUE) { + var_r30 = 0; + for (i = 0; i < var_r29; i++) { + sp7C[i].x += sp58[i].x; + sp7C[i].z += sp58[i].z; + sp7C[i].y += sp58[i].y - sp28[i] * sp28[i] * 0.25f * 0.075f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + sp28[i] += 1.0f; + sp34[i] += 12.0f; + if (sp34[i] >= 360.0f) { + sp34[i] -= 360.0f; + } + if (sp7C[i].y < -500.0f) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + var_r30++; + } + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + } + if (var_r30 == var_r29) { + break; + } + HuPrcVSleep(); + } + fn_1_7300(); + sprintf(sp10, "%d", var_r29); + BoardWinCreate(2, MAKE_MESSID(32, 11), 9); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp10), 0); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + BoardPlayerMotBlendSet(lbl_1_bss_282, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardPlayerPosGet(lbl_1_bss_282, &sp4C); + for (i = 0; i < var_r29; i++) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 1); + sp7C[i] = sp4C; + sp7C[i].y += 600.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + sp34[i] = 0.0f; + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + } + for (i = 0; i < var_r29; i++) { + var_f31 = -4.0f; + HuAudFXPlay(0x338); + HuAudFXPlay(0x353); + while (TRUE) { + sp7C[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + if (sp7C[i].y <= sp4C.y + 270.0f) { + sp7C[i].y = sp4C.y + 270.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + BoardModelAttrReset(lbl_1_bss_13C[i], 0x40000002); + while (BoardModelMotionTimeGet(lbl_1_bss_13C[i]) < BoardModelMotionMaxTimeGet(lbl_1_bss_13C[i]) - 10.0f) { + HuPrcVSleep(); + } + var_f31 = -5.0f; + var_f30 = 1.0f; + HuAudFXPlay(0x339); + for (var_r28 = 0; var_r28 < 30; var_r28++) { + var_f30 -= 0.033333335f; + sp40.x = sp40.y = sp40.z = var_f30; + BoardModelScaleSetV(lbl_1_bss_13C[i], &sp40); + sp7C[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + sp34[i] += 25.0f; + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + HuPrcVSleep(); + } + omVibrate(lbl_1_bss_282, 12, 0xC, 0); + BoardPlayerStarsAdd(lbl_1_bss_282, 1); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + fn_1_A074(lbl_1_bss_134[i]); + break; + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + HuPrcVSleep(); + } + } + temp_r27 = HuAudSStreamPlay(6); + BoardPlayerMotionShiftSet(lbl_1_bss_282, 7, 0.0f, 10.0f, 0); + while (!BoardPlayerMotionEndCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + while (HuAudSStreamStatGet(temp_r27) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + for (i = 0; i < var_r29; i++) { + BoardModelKill(lbl_1_bss_13C[i]); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardWinCreate(2, MAKE_MESSID(32, 10), 9); + BoardWinWait(); + BoardWinKill(); +} + +static void fn_1_98A0(void) { + Vec sp14; + Vec sp8; + float var_f30; + float var_f31; + s32 i; + + BoardModelPosGet(lbl_1_bss_274, &sp14); + var_f30 = BoardModelRotYGet(lbl_1_bss_274); + BoardModelMotionShiftSet(lbl_1_bss_274, 2, 0.0f, 25.0f, 0x40000001); + for (i = 0; i < 25; i++) { + var_f30 += 7.2f; + BoardModelRotYSet(lbl_1_bss_274, var_f30); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_274, 180.0f); + BoardModelMotionTimeSet(lbl_1_bss_27C, 0.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuAudFXPlay(0x464); + HuAudFXPlay(0x4E); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[4]), lbl_1_data_3CC[4], &sp8); + var_f31 = 255.0f; + while (TRUE) { + sp14.z -= 10.0f; + if (sp14.z <= sp8.z + 200.0f) { + var_f31 -= 20.0f; + if (var_f31 <= 0.0f) { + break; + } + BoardModelAlphaSet(lbl_1_bss_274, var_f31); + } + BoardModelPosSetV(lbl_1_bss_274, &sp14); + if (BoardModelMotionTimeGet(lbl_1_bss_27C) >= 20.0f) { + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + } + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0); + BoardModelMotionTimeSet(lbl_1_bss_27C, 20.0f); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + fn_1_9B34(); +} + +static void fn_1_9B34(void) { + BoardModelKill(lbl_1_bss_274); + lbl_1_bss_0->unk01 = 0; + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27E, 0.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000002); +} + +static void fn_1_9BDC(void) { + HuPrcSleep(240); + BoardMusStart(1, 0x1F, 0x7F, 0); + HuPrcEnd(); +} + +static void fn_1_9C18(void) { + Vec sp14; + Vec sp8; + s32 temp_r31; + + sp14.x = -150.0f; + sp14.y = 0.0f; + sp14.z = 120.0f; + sp8.x = -45.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp8, &sp14, 2300.0f, -1.0f, 30); + BoardCameraMotionWait(); + if (lbl_1_bss_0->unk01 == 1) { + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelMotionSpeedSet(lbl_1_bss_280, 0.5f); + BoardModelAttrReset(lbl_1_bss_280, 0x40000002); + } + HuAudFXPlay(0x461); + temp_r31 = HuAudFXPlay(0x462); + BoardModelAttrReset(lbl_1_bss_27E, 0x40000002); + HuPrcSleep(110); + BoardModelAttrSet(lbl_1_bss_27E, 0x40000002); + HuAudFXStop(temp_r31); + switch (lbl_1_bss_0->unk01) { + case 1: + case 2: + HuAudFXPlay(0x46A); + break; + case 3: + HuAudFXPlay(0x46B); + BoardAudSeqPause(0, 1, 1000); + HuPrcChildCreate(fn_1_9BDC, 0x2003, 0x1000, 0, boardMainProc); + break; + } + HuPrcSleep(9); + sp14.x = -150.0f; + sp14.y = 250.0f; + sp14.z = 120.0f; + sp8.x = -5.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp8, &sp14, 1800.0f, -1.0f, 30); + BoardCameraMotionWait(); + HuPrcSleep(30); +} + +static void fn_1_9EA8(void) { + lbl_1_bss_278 = NULL; +} + +void fn_1_9EBC(void) { + lbl_1_bss_282 = GWSystem.player_curr; + lbl_1_bss_278 = HuPrcCreate(fn_1_62B0, 0x2004, 0x2000, 0); + HuPrcDestructorSet2(lbl_1_bss_278, fn_1_9EA8); + while (lbl_1_bss_278) { + HuPrcVSleep(); + } + BoardEventFlagReset(); +} + +static HsfanimStruct00 lbl_1_data_49C = { + 0x001E, + { 0x00, 0x00 }, // padding? + 3.3f, + 70.0f, + 7.0f, + { 0.0f, -0.05f, 0.0f }, + 2.0f, + 1.0f, + 20.0f, + 0.98f, + 0x0002, + { + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0x40, 0xFF }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0xFF, 0x80, 0x80, 0x00 }, + { 0xFF, 0x40, 0x20, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 } + } +}; + +static s16 fn_1_9F50(void) { + void *var_r29; + s16 temp_r3; + s16 temp_r3_2; + + if (lbl_1_bss_100 == NULL) { + var_r29 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 1), MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_100 = HuSprAnimRead(var_r29); + HuSprAnimLock(lbl_1_bss_100); + } + temp_r3 = Hu3DParManCreate(lbl_1_bss_100, 0x64, &lbl_1_data_49C); + Hu3DParManAttrSet(temp_r3, 0x64); + Hu3DParManRotSet(temp_r3, 90.0f, 0.0f, 0.0f); + temp_r3_2 = Hu3DParManModelIDGet(temp_r3); + Hu3DParticleBlendModeSet(temp_r3_2, 1); + Hu3DModelLayerSet(temp_r3_2, 2); + lbl_1_bss_13A++; + return temp_r3; +} + +static void fn_1_A074(s16 arg0) { + if (arg0 == -1) { + return; + } + Hu3DParManKill(arg0); + if (--lbl_1_bss_13A == 0) { + HuSprAnimKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; + } +} diff --git a/src/REL/w04Dll/boo_event.c b/src/REL/w04Dll/boo_event.c index eaaeadc5..73005f50 100755 --- a/src/REL/w04Dll/boo_event.c +++ b/src/REL/w04Dll/boo_event.c @@ -21,7 +21,7 @@ #include "game/frand.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { /* 0x00 */ char unk00[0x50]; @@ -46,7 +46,6 @@ typedef struct { /* 0x2C */ Process *unk2C; } BssE4Data; // Size 0x30 -static void fn_1_2044(void); static void fn_1_20EC(void); static void fn_1_28BC(void); static void fn_1_2B8C(void); @@ -137,21 +136,6 @@ static float lbl_1_data_358[] = { -150.00001f, -170.00001f, -30.0f, -220.0f }; -static void fn_1_2044(void) { - lbl_1_bss_38 = NULL; -} - -void fn_1_2058(void) { - s32 sp8; - - sp8 = GWSystem.player_curr; - lbl_1_bss_38 = HuPrcChildCreate(fn_1_1618, 0x2003, 0x2000, 0, boardMainProc); - HuPrcDestructorSet2(lbl_1_bss_38, fn_1_2044); - while (lbl_1_bss_38) { - HuPrcVSleep(); - } -} - static void fn_1_20EC(void) { Vec sp20; Vec sp14; @@ -223,7 +207,7 @@ static void fn_1_20EC(void) { lbl_1_bss_74 = lbl_1_bss_78 = var_r27->link[0]; BoardSpacePosGet(0, lbl_1_bss_78, &sp14); BoardModelPosGet(lbl_1_bss_FA, &sp20); - while (fn_1_1130(lbl_1_bss_FA, 180.0 * (atan2(sp14.x - sp20.x, sp14.z - sp20.z) / M_PI), 2.0f) == 0) { + while (fn_1_1130(lbl_1_bss_FA, atan2d(sp14.x - sp20.x, sp14.z - sp20.z), 2.0f) == 0) { HuPrcVSleep(); } PSVECSubtract(&sp14, &sp20, &sp8); @@ -236,7 +220,7 @@ static void fn_1_20EC(void) { BoardAudSeqPause(0, 1, 1000); BoardModelPosSetV(lbl_1_bss_FA, &sp14); BoardPlayerPosGet(temp_r30, &sp14); - while (fn_1_1130(lbl_1_bss_FA, 180.0 * (atan2(sp14.x - sp20.x, sp14.z - sp20.z) / M_PI), 3.0f) == 0) { + while (fn_1_1130(lbl_1_bss_FA, atan2d(sp14.x - sp20.x, sp14.z - sp20.z), 3.0f) == 0) { HuPrcVSleep(); } fn_1_2EE8(1); @@ -306,7 +290,7 @@ static void fn_1_28BC(void) { } BoardSpacePosGet(0, var_r31, &sp20); BoardModelPosGet(lbl_1_bss_FA, &sp14); - temp_f30 = 180.0 * (atan2(sp20.x - sp14.x, sp20.z - sp14.z) / M_PI); + temp_f30 = atan2d(sp20.x - sp14.x, sp20.z - sp14.z); BoardModelRotYSet(lbl_1_bss_FA, temp_f30); PSVECSubtract(&sp20, &sp14, &sp8); PSVECScale(&sp8, &sp8, 0.022222223f); @@ -427,7 +411,7 @@ static void fn_1_2FDC(void) { temp_r31 = HuPrcCurrentGet()->user_data; while (TRUE) { BoardModelPosGet(temp_r31->unk04, &sp8); - sp8.y = temp_r31->unk1C + 4.0 * sin(temp_r31->unk14 * M_PI / 180.0); + sp8.y = temp_r31->unk1C + 4.0 * sind(temp_r31->unk14); BoardModelPosSetV(temp_r31->unk04, &sp8); if (temp_r31->unk08 != -1) { sp8.y += 50.0f; @@ -484,7 +468,7 @@ static void fn_1_30A4(void) { } fn_1_5980(temp_r22); BoardModelPosGet(temp_r31->unk04, &sp20); - temp_f31 = 180.0 * (atan2(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z) / M_PI); + temp_f31 = atan2d(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z); while (fn_1_1130(temp_r31->unk04, temp_f31, 5.0f) == 0) { HuPrcVSleep(); } @@ -543,7 +527,7 @@ static void fn_1_30A4(void) { break; case 3: BoardModelPosGet(temp_r31->unk04, &sp20); - temp_f31 = 180.0 * (atan2(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z) / M_PI); + temp_f31 = atan2d(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z); BoardModelRotYSet(temp_r31->unk04, temp_f31); if (temp_r31->unk08 != -1) { BoardPlayerRotYSet(temp_r31->unk08, temp_f31); @@ -623,7 +607,7 @@ static void fn_1_38D8(void) { sp18 = lbl_1_bss_80[temp_r31]; GWPlayer[temp_r31].space_curr = lbl_1_bss_B0; BoardPlayerPosGet(temp_r31, &sp24); - var_f28 = 180.0 * (atan2(sp18.x - sp24.x, sp18.z - sp24.z) / M_PI); + var_f28 = atan2d(sp18.x - sp24.x, sp18.z - sp24.z); BoardPlayerRotYSet(temp_r31, var_f28); PSVECSubtract(&sp18, &sp24, &spC); PSVECScale(&spC, &spC, 0.025f); @@ -637,7 +621,7 @@ static void fn_1_38D8(void) { sp24.y = sp18.y; break; } - var_f28 = sqrtf((sp18.x - sp24.x) * (sp18.x - sp24.x) + (sp18.z - sp24.z) * (sp18.z - sp24.z)); + var_f28 = VECDistanceXZ(&sp18, &sp24); if (var_f28 <= 1.0f) { spC.x = spC.z = 0.0f; } @@ -712,7 +696,7 @@ static s32 fn_1_3C9C(void) { BoardSpacePosGet(0, sp20[i], &sp44); sp50.y = sp44.y; PSVECSubtract(&sp44, &sp50, &sp38); - var_f31 = 180.0 * (atan2(sp38.x, sp38.z) / M_PI); + var_f31 = atan2d(sp38.x, sp38.z); if (var_f31 < 0.0f) { var_f31 += 360.0f; } @@ -768,7 +752,7 @@ static s32 fn_1_3C9C(void) { var_r25 = 0; } if (var_r26 != 0 || var_r25 != 0) { - var_f30 = 180.0 * (atan2(-var_r26, var_r25) / M_PI) - 180.0; + var_f30 = atan2d(-var_r26, var_r25) - 180.0; var_f30 += var_f29; if (var_f30 >= 360.0f) { var_f30 -= 360.0f; @@ -793,7 +777,7 @@ static s32 fn_1_3C9C(void) { } for (i = 0; i < var_r29; i++) { if (var_r27 == i) { - sp38.x = sp38.y = sp38.z = 1.7999999523162842 + sin(var_f31 * M_PI / 180.0); + sp38.x = sp38.y = sp38.z = 1.8f + sind(var_f31); var_f31 += 8.0f; if (var_f31 > 180.0f) { var_f31 -= 180.0f; @@ -925,7 +909,7 @@ static void fn_1_4848(void) { BoardPlayerMotBlendSet(temp_r30, BoardModelRotYGet(lbl_1_bss_FA) - 180.0f, 0xA); while (!BoardPlayerMotBlendCheck(temp_r30)) { BoardModelPosGet(lbl_1_bss_FA, &sp14); - temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + temp_f28 = VECDistanceXZ(&sp20, &sp14); if (temp_f28 <= 200.0f) { HuAudPlayerVoicePlay(temp_r30, 0x128); goto block_A; @@ -936,7 +920,7 @@ static void fn_1_4848(void) { HuAudPlayerVoicePlay(temp_r30, 0x128); for (i = 0; i < 65; i++) { BoardModelPosGet(lbl_1_bss_FA, &sp14); - temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + temp_f28 = VECDistanceXZ(&sp20, &sp14); if (temp_f28 <= 200.0f) { goto block_A; } @@ -944,7 +928,7 @@ static void fn_1_4848(void) { } BoardPlayerMotionShiftSet(temp_r30, 1, 0.0f, 5.0f, 0); BoardModelPosGet(lbl_1_bss_FA, &sp14); - temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + temp_f28 = VECDistanceXZ(&sp20, &sp14); if (temp_f28 > 200.0f) { HuPrcVSleep(); } @@ -1006,7 +990,7 @@ static void fn_1_5018(void) { BoardModelPosGet(lbl_1_bss_FA, &spC); for (i = 0; i < lbl_1_bss_C2; i++) { BoardPlayerPosGet(lbl_1_bss_BA[i], &sp18); - var_f29 = sqrtf((sp18.x - spC.x) * (sp18.x - spC.x) + (sp18.z - spC.z) * (sp18.z - spC.z)); + var_f29 = VECDistanceXZ(&sp18, &spC); if (var_f29 < 900.0f && lbl_1_bss_B2[lbl_1_bss_BA[i]] == 0) { temp_r3 = HuPrcChildCreate(fn_1_4848, 0x2003, 0x2000, 0, boardMainProc); lbl_1_bss_D4[lbl_1_bss_BA[i]] = temp_r3; @@ -1191,10 +1175,10 @@ static void fn_1_5A2C(ModelData *model, ParticleData *particle, Mtx matrix) { var_r26 = 0; for (i = 0; i < particle->unk_30; i++, var_r31++) { if (var_r31->unk08.z != 0.0f) { - var_r31->unk34.x += var_r31->unk28 * sin(var_r31->unk08.x * M_PI / 180.0); + var_r31->unk34.x += var_r31->unk28 * sind(var_r31->unk08.x); var_r31->unk34.y += var_r31->unk08.y; - var_r31->unk34.z += var_r31->unk28 * cos(var_r31->unk08.x * M_PI / 180.0); - var_r31->unk08.x += var_r31->unk24 * sin(var_r31->unk08.x * M_PI / 180.0); + var_r31->unk34.z += var_r31->unk28 * cosd(var_r31->unk08.x); + var_r31->unk08.x += var_r31->unk24 * sind(var_r31->unk08.x); if (var_r31->unk08.x >= 360.0f) { var_r31->unk08.x -= 360.0f; } diff --git a/src/REL/w04Dll/bridge.c b/src/REL/w04Dll/bridge.c index 92618900..cdfe6cff 100755 --- a/src/REL/w04Dll/bridge.c +++ b/src/REL/w04Dll/bridge.c @@ -12,7 +12,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" static void fn_1_17B4(s16 arg0, s16 arg1); static void fn_1_191C(void); @@ -20,9 +20,10 @@ static void fn_1_1B98(s16 arg0); static void fn_1_1C2C(void); static void fn_1_1E60(void); static void fn_1_2008(void); +static void fn_1_2044(void); static Process *lbl_1_bss_3C[3]; -Process *lbl_1_bss_38; +static Process *lbl_1_bss_38; static s32 lbl_1_data_298[] = { DATA_MAKE_NUM(DATADIR_W04, 32), @@ -61,7 +62,7 @@ void fn_1_12FC(void) { sp8.x = sp8.y = sp8.z = 2.0f; BoardModelScaleSetV(lbl_1_bss_14[11], &sp8); fn_1_1C2C(); - if (lbl_1_bss_0[0] & 1) { + if (lbl_1_bss_0->unk00 & 1) { BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); BoardModelMotionTimeSet(lbl_1_bss_14[5], 108.0f); fn_1_17B4(0, 1); @@ -106,7 +107,7 @@ void fn_1_1618(void) { HuPrcVSleep(); } BoardCameraMotionWait(); - *lbl_1_bss_0 ^= 1; + lbl_1_bss_0->unk00 ^= 1; fn_1_191C(); fn_1_1C2C(); HuAudPlayerVoicePlay(temp_r31, 0x128); @@ -115,7 +116,7 @@ void fn_1_1618(void) { HuPrcVSleep(); } HuPrcSleep(30); - if (!(*lbl_1_bss_0 & 1)) { + if (!(lbl_1_bss_0->unk00 & 1)) { BoardWinCreate(2, MAKE_MESSID(32, 24), 11); BoardWinWait(); BoardWinKill(); @@ -164,7 +165,7 @@ static void fn_1_191C(void) { s32 var_r30; HuAudFXPlay(0x4B); - if (*lbl_1_bss_0 & 1) { + if (lbl_1_bss_0->unk00 & 1) { BoardWinCreate(2, MAKE_MESSID(32, 23), 11); BoardWinWait(); BoardWinKill(); @@ -219,7 +220,7 @@ static void fn_1_1C2C(void) { s16 *var_r28; s32 i; - if (*lbl_1_bss_0 == 0) { + if (lbl_1_bss_0->unk00 == 0) { BoardModelMotionStartEndSet(lbl_1_bss_14[3], 0, 80); BoardModelMotionTimeSet(lbl_1_bss_14[3], 0.0f); BoardModelVisibilitySet(lbl_1_bss_14[0], 1); @@ -262,10 +263,10 @@ static void fn_1_1E60(void) { BoardSpacePosGet(0, var_r28, &sp8); PSVECSubtract(&sp8, &sp14, &sp20); PSVECScale(&sp20, &sp20, 0.008333334f); - temp_f31 = 180.0 * (atan2(sp8.x - sp14.x, sp8.z - sp14.z) / M_PI); + temp_f31 = atan2d(sp8.x - sp14.x, sp8.z - sp14.z); BoardModelPosGet(temp_r31[1], &sp14); while (fn_1_1130(temp_r31[1], temp_f31, 2.5f) == 0) { - if (*lbl_1_bss_0 == 0) { + if (lbl_1_bss_0->unk00 == 0) { BoardModelAlphaSet(temp_r31[1], 0xFF); } else { BoardModelAlphaSet(temp_r31[1], 0); @@ -273,7 +274,7 @@ static void fn_1_1E60(void) { HuPrcVSleep(); } for (i = 0; i < 120; i++) { - if (*lbl_1_bss_0 == 0) { + if (lbl_1_bss_0->unk00 == 0) { BoardModelAlphaSet(temp_r31[1], 0xFF); } else { BoardModelAlphaSet(temp_r31[1], 0); @@ -295,3 +296,18 @@ static void fn_1_2008(void) { BoardModelKill(temp_r31[1]); HuMemDirectFree(temp_r31); } + +static void fn_1_2044(void) { + lbl_1_bss_38 = NULL; +} + +void fn_1_2058(void) { + s32 sp8; + + sp8 = GWSystem.player_curr; + lbl_1_bss_38 = HuPrcChildCreate(fn_1_1618, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_38, fn_1_2044); + while (lbl_1_bss_38) { + HuPrcVSleep(); + } +} diff --git a/src/REL/w04Dll/main.c b/src/REL/w04Dll/main.c index ec429ece..1be51eef 100755 --- a/src/REL/w04Dll/main.c +++ b/src/REL/w04Dll/main.c @@ -55,7 +55,7 @@ BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { static s32 *lbl_1_bss_10; static s16 lbl_1_bss_8[4]; static Process *lbl_1_bss_4; -s8 *lbl_1_bss_0; +UnkW04BoardData *lbl_1_bss_0; static s16 lbl_1_data_280 = -1; static s16 lbl_1_data_282 = -1; @@ -79,7 +79,7 @@ void BoardCreate(void) { omDBGMenuButton = 1; sp8 = GWBoardGet(); - lbl_1_bss_0 = (s8*) GWSystem.board_data; + lbl_1_bss_0 = (UnkW04BoardData*) GWSystem.board_data; BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W04, 0)); lbl_1_data_280 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 1), NULL, 0); fn_8006DDE8(lbl_1_data_280, -1.0f); @@ -204,7 +204,7 @@ static s32 fn_1_7FC(void) { return 1; } if (temp_r3->flag & 0x100) { - if (lbl_1_bss_0[0] & 1) { + if (lbl_1_bss_0->unk00 & 1) { fn_1_55B4(); } else { BoardDiceDigit2DShowSet(0); @@ -422,12 +422,12 @@ s32 fn_1_1130(s16 arg0, float arg1, float arg2) { } if (var_f29 < 180.0f) { if (var_f29 > arg2) { - var_f31 = var_f31 + arg2; + var_f31 += arg2; } else { var_f31 = arg1; } } else if (360.0f - var_f29 > arg2) { - var_f31 = var_f31 - arg2; + var_f31 -= arg2; } else { var_f31 = arg1; } diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c index 961e5187..e0a282bf 100755 --- a/src/REL/w06Dll/bowser.c +++ b/src/REL/w06Dll/bowser.c @@ -20,7 +20,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -260,7 +260,7 @@ static void fn_1_95AC(s32 arg0) { sp14.y = 150.0f; sp14.z = 0.0f; sp8.x = -14.0f; - sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.y = atan2d(-sp20.x, -sp20.z); sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); BoardCameraMotionWait(); @@ -394,7 +394,7 @@ static void fn_1_9E5C(s32 arg0) { sp14.y = 150.0f; sp14.z = 0.0f; sp8.x = -14.0f; - sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.y = atan2d(-sp20.x, -sp20.z); sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); BoardCameraMotionWait(); @@ -510,7 +510,7 @@ static void fn_1_A408(s32 arg0) { sp14.y = 250.0f; sp14.z = 0.0f; sp8.x = -8.0f; - sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI) - 45.0; + sp8.y = atan2d(-sp20.x, -sp20.z) - 45.0; sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1700.0f, -1.0f, 63); BoardCameraMotionWait(); @@ -658,13 +658,13 @@ static void fn_1_AB4C(s32 arg0, s32 arg1) { BoardModelPosGet(lbl_1_data_49A, &sp30); PSVECSubtract(&sp30, &sp3C, &sp24); PSVECNormalize(&sp24, &sp24); - BoardPlayerRotYSet(arg0, 180.0 * (atan2(sp24.x, sp24.z) / M_PI)); + BoardPlayerRotYSet(arg0, atan2d(sp24.x, sp24.z)); BoardPlayerSizeSet(arg0, 2); sp18.x = 0.0f; sp18.y = 150.0f; sp18.z = 0.0f; spC.x = -25.0f; - spC.y = 180.0 * (atan2(-sp24.x, -sp24.z) / M_PI); + spC.y = atan2d(-sp24.x, -sp24.z); spC.z = 0.0f; BoardCameraMotionStartEx(lbl_1_data_49A, &spC, &sp18, 2000.0f, -1.0f, 2); BoardCameraMotionWait(); @@ -783,7 +783,7 @@ static void fn_1_B27C(s32 arg0) { sp14.y = 150.0f; sp14.z = 0.0f; sp8.x = -14.0f; - sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.y = atan2d(-sp20.x, -sp20.z); sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); BoardCameraMotionWait(); @@ -890,7 +890,7 @@ static void fn_1_B8E0(omObjData *arg0) { // Bug? Likely to be "%=" instead. temp_r30->unk0C % 360; OSs16tof32(&temp_r30->unk0C, &temp_f30); - temp_f30 = 0.5 * sin(temp_f30 * M_PI / 180.0); + temp_f30 = 0.5 * sind(temp_f30); BoardModelPosGet(lbl_1_data_49A, &sp8); sp8.y += temp_f30; BoardModelPosSetV(lbl_1_data_49A, &sp8); @@ -961,7 +961,7 @@ static void fn_1_BD8C(s32 arg0) { BoardPlayerPosGet(arg0, &sp18); BoardModelPosGet(lbl_1_data_49A, &sp24); PSVECSubtract(&sp18, &sp24, &spC); - var_f26 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + var_f26 = atan2d(spC.x, spC.z); BoardPlayerMotBlendSet(arg0, var_f26 + 180.0f, 0x14); fn_1_B6A0(var_f25, 20); while (!BoardPlayerMotBlendCheck(arg0)) { @@ -1043,8 +1043,8 @@ static void fn_1_C40C(void) { var_r29 = BoardSpaceLinkFlagSearch(0, var_r29, 0x04000000); BoardSpacePosGet(0, var_r29, &sp14); BoardModelPosGet(lbl_1_data_498, &sp20); - sp20.x += -100.0 * sin(BoardModelRotYGet(lbl_1_data_498) * M_PI / 180.0); - sp20.z += -100.0 * cos(BoardModelRotYGet(lbl_1_data_498) * M_PI / 180.0); + sp20.x += -100.0 * sind(BoardModelRotYGet(lbl_1_data_498)); + sp20.z += -100.0 * cosd(BoardModelRotYGet(lbl_1_data_498)); sp20.y += 250.0f; BoardModelPosSetV(lbl_1_data_4A0, &sp20); BoardModelScaleSet(lbl_1_data_4A0, 10.0f, 10.0f, 10.0f); diff --git a/src/REL/w06Dll/bridge.c b/src/REL/w06Dll/bridge.c index 1fa213d6..6078145d 100755 --- a/src/REL/w06Dll/bridge.c +++ b/src/REL/w06Dll/bridge.c @@ -13,7 +13,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -227,7 +227,7 @@ static s32 fn_1_8490(s32 arg0, s8 arg1) { BoardPlayerPosGet(arg0, &sp18); BoardSpacePosGet(0, lbl_1_bss_E2, &sp24); PSVECSubtract(&sp24, &sp18, &spC); - temp_f30 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + temp_f30 = atan2d(spC.x, spC.z); BoardPlayerMotBlendSet(arg0, temp_f30, 0xF); while (!BoardPlayerMotBlendCheck(arg0)) { HuPrcVSleep(); diff --git a/src/REL/w06Dll/fire.c b/src/REL/w06Dll/fire.c index 1ea92d36..4b0cdba0 100755 --- a/src/REL/w06Dll/fire.c +++ b/src/REL/w06Dll/fire.c @@ -12,7 +12,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" static void fn_1_6F80(void); static void fn_1_7210(void); @@ -162,7 +162,7 @@ static void fn_1_72CC(s32 arg0) { lbl_1_bss_C2[i] = 0; } } - fn_1_73EC(180.0 * (atan2(spC.x, spC.z) / M_PI)); + fn_1_73EC(atan2d(spC.x, spC.z)); } static void fn_1_73EC(float arg0) { diff --git a/src/REL/w06Dll/mg_coin.c b/src/REL/w06Dll/mg_coin.c index b7d0346f..b480e7c4 100755 --- a/src/REL/w06Dll/mg_coin.c +++ b/src/REL/w06Dll/mg_coin.c @@ -18,7 +18,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -205,7 +205,7 @@ static s32 fn_1_4BF8(s32 arg0) { sp38.z += 115.0 * cos(M_PI); PSVECSubtract(&sp38, &sp2C, &sp20); PSVECNormalize(&sp20, &sp20); - BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + BoardPlayerRotYSet(arg0, atan2d(-sp20.x, -sp20.z)); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 40); BoardModelPosGet(lbl_1_bss_C[5], &sp2C); BoardModelMotionShiftSet(lbl_1_bss_C[5], lbl_1_data_1DA, 0.0f, 8.0f, 0x40000001); @@ -213,7 +213,7 @@ static s32 fn_1_4BF8(s32 arg0) { while (GWPlayer[arg0].moving) { BoardPlayerPosGet(arg0, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); - BoardModelRotYSet(lbl_1_bss_C[5], 180.0 * (atan2(sp20.x, sp20.z) / M_PI)); + BoardModelRotYSet(lbl_1_bss_C[5], atan2d(sp20.x, sp20.z)); HuPrcVSleep(); } BoardModelMotionShiftSet(lbl_1_bss_C[5], 1, 0.0f, 8.0f, 0x40000001); @@ -286,7 +286,7 @@ static void fn_1_519C(s32 arg0) { while (GWPlayer[arg0].moving) { BoardPlayerPosGet(arg0, &sp14); PSVECSubtract(&sp14, &sp20, &sp8); - BoardModelRotYSet(lbl_1_bss_C[5], 180.0 * (atan2(sp8.x, sp8.z) / M_PI)); + BoardModelRotYSet(lbl_1_bss_C[5], atan2d(sp8.x, sp8.z)); HuPrcVSleep(); } BoardModelMotionShiftSet(lbl_1_bss_C[5], 1, 0.0f, 8.0f, 0x40000001); @@ -346,7 +346,7 @@ static void fn_1_5490(s32 arg0) { BoardModelPosSetV(temp_r31->unk04, &sp3C); BoardModelScaleSet(temp_r31->unk04, temp_f31, temp_f31, temp_f31); BoardModelVisibilitySet(temp_r31->unk04, 0); - BoardModelRotYSet(temp_r31->unk04, 180.0 * (atan2(sp18.x, sp18.z) / M_PI)); + BoardModelRotYSet(temp_r31->unk04, atan2d(sp18.x, sp18.z)); BoardModelMotionStart(temp_r31->unk04, 1, 0x40000001); BoardModelMotionStart(lbl_1_data_1DC, 0, 0); } @@ -436,8 +436,8 @@ static void fn_1_59D0(s32 arg0) { temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_4C, Bss4CWork); temp_r31->unk00_field1 = arg0; if (arg0 == 1) { - lbl_1_bss_4C->trans.x = 0.96666666f * sin(90 * M_PI / 180.0); - lbl_1_bss_4C->trans.z = 0.96666666f * cos(90 * M_PI / 180.0); + lbl_1_bss_4C->trans.x = 0.96666666f * sind(90); + lbl_1_bss_4C->trans.z = 0.96666666f * cosd(90); temp_r31->unk01 = 60; return; } @@ -520,8 +520,8 @@ static void fn_1_5CE4(s32 arg0) { BoardPlayerMotionStart(temp_r31->unk00_field1, temp_r31->unk02, 0x40000001); omVibrate(temp_r31->unk00_field1, 12, 4, 2); fn_1_5968(&sp14); - sp8.x = sp14.x + 18.0 * sin(90 * M_PI / 180.0); - sp8.z = sp14.z + 18.0 * cos(90 * M_PI / 180.0); + sp8.x = sp14.x + 18.0 * sind(90); + sp8.z = sp14.z + 18.0 * cosd(90); BoardPlayerPosSetV(temp_r31->unk00_field1, &sp8); BoardModelPosSetV(temp_r31->unk04, &sp8); return; @@ -641,8 +641,8 @@ static void fn_1_606C(omObjData *arg0) { } fn_1_5968(&sp64); BoardPlayerPosGet(temp_r31->unk00_field1, &sp58); - sp58.x = sp64.x + 18.0 * sin(90 * M_PI / 180.0); - sp58.z = sp64.z + 18.0 * cos(90 * M_PI / 180.0); + sp58.x = sp64.x + 18.0 * sind(90); + sp58.z = sp64.z + 18.0 * cosd(90); BoardPlayerPosSetV(temp_r31->unk00_field1, &sp58); BoardModelPosSetV(temp_r31->unk04, &sp58); BoardModelRotYSet(temp_r31->unk04, BoardPlayerRotYGet(temp_r31->unk00_field1)); @@ -737,8 +737,8 @@ static void fn_1_6C4C(s32 arg0) { } temp_r31 = &temp_r30->unk0C[i]; temp_r31->unk00 = 1; - temp_r31->unk08.x = sp8.x + 50.0 * sin(360.0f * var_f31 * M_PI / 180.0); - temp_r31->unk08.z = sp8.z + 50.0 * cos(360.0f * var_f31 * M_PI / 180.0); + temp_r31->unk08.x = sp8.x + 50.0 * sind(360.0f * var_f31); + temp_r31->unk08.z = sp8.z + 50.0 * cosd(360.0f * var_f31); temp_r31->unk08.y = sp8.y + 600.0f + 500.0f * BoardRandFloat(); temp_r31->unk01 = 0; temp_r31->unk04 = 360.0f * BoardRandFloat(); diff --git a/src/REL/w06Dll/mg_item.c b/src/REL/w06Dll/mg_item.c index cd24d3e9..3fe296f0 100755 --- a/src/REL/w06Dll/mg_item.c +++ b/src/REL/w06Dll/mg_item.c @@ -21,9 +21,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" - -#define ABS(x) ((x) < 0 ? -(x) : (x)) +#include "ext_math.h" typedef struct { struct { @@ -277,7 +275,7 @@ static s32 fn_1_12A0(s32 arg0) { BoardSpacePosGet(0, lbl_1_bss_34, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); PSVECNormalize(&sp20, &sp20); - BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + BoardPlayerRotYSet(arg0, atan2d(-sp20.x, -sp20.z)); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 20); while (GWPlayer[arg0].moving) { HuPrcVSleep(); @@ -983,7 +981,7 @@ static void fn_1_3698(s8 arg0) { } PSVECSubtract(&sp18, &sp24, &spC); lbl_1_bss_28->trans.y = temp_f31 / var_f30; - BoardModelRotYSet(lbl_1_bss_C[4], 180.0 * (atan2(spC.x, spC.z) / M_PI)); + BoardModelRotYSet(lbl_1_bss_C[4], atan2d(spC.x, spC.z)); BoardModelMotionShiftSet(lbl_1_bss_C[4], temp_r31->unk08, 0.0f, 8.0f, 0x40000001); BoardModelMotionSpeedSet(lbl_1_bss_C[4], 2.0f); } @@ -1175,8 +1173,8 @@ static void fn_1_4460(ModelData *model, ParticleData *particle, Mtx matrix) { if (j != particle->unk_30) { temp_f30 = 0.003921569f * frand8() * 360.0f; temp_f29 = var_f31 * (20.0f + 0.003921569f * frand8() * 60.0f); - var_r31->unk34.x = sp8.x + temp_f29 * sin(temp_f30 * M_PI / 180.0); - var_r31->unk34.z = sp8.z + temp_f29 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk34.x = sp8.x + temp_f29 * sind(temp_f30); + var_r31->unk34.z = sp8.z + temp_f29 * cosd(temp_f30); var_r31->unk34.y = sp8.y + var_f31 * (-30.0f + 0.003921569f * frand8() * 40.0f); var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 73b9d29a..5713695d 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -17,7 +17,7 @@ #include "game/board/ui.h" #include "game/board/window.h" -#define ABS(x) ((x) < 0 ? -(x) : (x)) +#include "ext_math.h" typedef struct { struct { @@ -630,7 +630,7 @@ static void ShowBattleGame(BattleWork *arg0, omObjData *arg1) { arg0->unk01 = 90; } OSs8tof32((s8*) &arg0->unk01, &var_r29); - arg1->trans.z = sin(var_r29 * M_PI / 180.0); + arg1->trans.z = sind(var_r29); arg0->unk01 += 4; } @@ -712,7 +712,7 @@ static void ShowBattleCoin(BattleWork *arg0, omObjData *arg1) { while (var_f30 > 180.0f) { var_f30 -= 180.0f; } - temp_f29 = 0.9f + sin(var_f30 * M_PI / 180.0); + temp_f29 = 0.9f + sind(var_f30); HuSprScaleSet(arg0->unk08, 1, temp_f29, temp_f29); } diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 40e6b57b..fe14093c 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -21,11 +21,9 @@ #include "game/board/ui.h" #include "game/board/window.h" -#include "math.h" +#include "ext_math.h" #include "stdlib.h" -#define ABS(x) (((x) < 0) ? -(x) : (x)) - typedef struct { struct { u8 unk00_field0 : 1; @@ -510,7 +508,7 @@ static void ExecLottery(void) { PSVECScale(&sp20, &sp20, 0.95f); PSVECAdd(&sp20, &sp38, &sp2C); } - temp_r26 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + temp_r26 = atan2d(-sp20.x, -sp20.z); if (BoardPlayerSizeGet(temp_r31) == 1) { BoardModelVisibilitySet(gripMdl[0], 0); BoardModelVisibilitySet(gripMdl[1], 1); @@ -550,7 +548,7 @@ static void ExecLottery(void) { BoardPlayerPosGet(i, &sp38); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); - BoardPlayerMotBlendSet(i, 180.0 * (atan2(sp20.x, sp20.z) / M_PI), 7); + BoardPlayerMotBlendSet(i, atan2d(sp20.x, sp20.z), 7); } } BoardMusStart(1, 2, 0x7F, 0); @@ -971,7 +969,7 @@ static void ExecBallGame(void) { } else { OSs8tof32(&spB, &var_f26); OSs8tof32(&spA, &var_f19); - var_f25 = 180.0 * (atan2(var_f26, var_f19) / M_PI); + var_f25 = atan2d(var_f26, var_f19); if (var_f25 < 0.0f) { var_f25 += 360.0f; } @@ -1162,7 +1160,7 @@ static void ExecScratchTicket(s32 arg0) { BoardModelLayerSet(lotteryMdl[4], 6); BoardModelPassSet(lotteryMdl[4], 0); BoardCameraDirGet(&spC); - BoardModelRotYSet(lotteryMdl[4], 180.0 * (atan2(-spC.x, -spC.z) / M_PI)); + BoardModelRotYSet(lotteryMdl[4], atan2d(-spC.x, -spC.z)); BoardModelScaleSet(lotteryMdl[4], 3.0f, 3.0f, 3.0f); sp24.x = 320.0f; sp24.y = 480.0f; @@ -1511,7 +1509,7 @@ static void ExecTicketFocus(s32 arg0) { } temp_r29 = OM_GET_WORK_PTR(ticketObj[arg0], TicketWork); for (var_f31 = 0.0f; var_f31 < 90.0f; var_f31 += 2.0f) { - temp_f30 = 1.0 + 1.3f * sin(var_f31 * M_PI / 180.0); + temp_f30 = 1.0 + 1.3f * sind(var_f31); HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2, temp_f30, temp_f30); HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2 + 12, temp_f30, temp_f30); HuPrcVSleep(); @@ -1790,7 +1788,7 @@ static void ExecItemPrize(void) { for (i = 0; i < 30; i++) { sp14.y += temp_f29; var_f30 = BoardDAngleCalc(15.0f + var_f30); - var_f31 = cos(var_f28 * M_PI / 180.0); + var_f31 = cosd(var_f28); if (var_f31 <= 0.0f) { var_f31 = 0.01f; } @@ -2031,7 +2029,7 @@ void BoardLotteryTutorialExec(void) { BoardSpacePosGet(0, temp_r29, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); - temp_r28 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + temp_r28 = atan2d(-sp20.x, -sp20.z); sp14.x = -3.0f; sp14.y = temp_r28; sp14.z = 0.0f; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 06cfde0c..57d3d101 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -18,9 +18,7 @@ #include "game/board/player.h" #include "game/board/tutorial.h" -#include "math.h" - -#define ABS(x) (((x) < 0) ? -(x) : (x)) +#include "ext_math.h" typedef struct { /* 0x00 */ struct { @@ -964,7 +962,7 @@ static void GrowYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { arg0->unk00_bit3 = 1; } OSs8tof32(&arg0->unk01, &temp_f30); - temp_f30 = 1.2999999523162842 * sin(M_PI * temp_f30 / 180.0); + temp_f30 = 1.3f * sind(temp_f30); HuSprScaleSet(yourTurnSprGrp, 0, temp_f30, temp_f30); } @@ -977,7 +975,7 @@ static void WaitYourTurn(UnkUiWork02 *arg0, omObjData *arg1) { arg0->unk00_bit0 = 1; } OSs8tof32(&arg0->unk01, &temp_f30); - temp_f30 = sin(M_PI * temp_f30 / 180.0); + temp_f30 = sind(temp_f30); HuSprScaleSet(yourTurnSprGrp, 0, 1.3f + temp_f30, 1.3f + temp_f30); HuSprTPLvlSet(yourTurnSprGrp, 0, 1.0f - temp_f30); } @@ -1398,7 +1396,7 @@ static void UpdateItemPick(omObjData *arg0) { for (j = 0; j < 3; j++) { if (itemMdlId[i][j] != -1) { OSs8tof32(&temp_r28->unk03, &temp_f30); - temp_f30 = 1.0 + 0.5 * sin(M_PI * temp_f30 / 180.0); + temp_f30 = 1.0 + 0.5 * sind(temp_f30); BoardModelScaleSet(itemMdlId[i][j], temp_f30, temp_f30, temp_f30); sp14.x = temp_r27[i][j + 2].x; sp14.y = temp_r27[i][j + 2].y; From 8b15b82b250afef116837c25478977a35c68e00f Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sun, 28 Apr 2024 01:03:31 -0700 Subject: [PATCH 4/4] Matched REL/w04 + applying ext_math macros --- config/GMPE01_00/rels/w04Dll/symbols.txt | 286 +++++----- configure.py | 4 +- include/REL/w04Dll.h | 1 - include/game/object.h | 2 +- src/REL/w04Dll/big_boo.c | 1 + src/REL/w04Dll/boo_event.c | 1 + src/REL/w04Dll/bridge.c | 1 + src/REL/w04Dll/main.c | 1 + src/REL/w04Dll/mg_coin.c | 663 +++++++++++++++++++++++ src/REL/w04Dll/mg_item.c | 656 ++++++++++++++++++++++ src/game/chrman.c | 116 ++-- src/game/hsfanim.c | 10 +- src/game/hsfdraw.c | 6 +- src/game/hsfmotion.c | 8 +- 14 files changed, 1538 insertions(+), 218 deletions(-) create mode 100755 src/REL/w04Dll/mg_coin.c create mode 100755 src/REL/w04Dll/mg_item.c diff --git a/config/GMPE01_00/rels/w04Dll/symbols.txt b/config/GMPE01_00/rels/w04Dll/symbols.txt index 1787c5bb..451fcdf4 100644 --- a/config/GMPE01_00/rels/w04Dll/symbols.txt +++ b/config/GMPE01_00/rels/w04Dll/symbols.txt @@ -71,31 +71,31 @@ fn_1_9F50 = .text:0x00009F50; // type:function size:0x124 scope:local fn_1_A074 = .text:0x0000A074; // type:function size:0x84 scope:local fn_1_A0F8 = .text:0x0000A0F8; // type:function size:0xF8 fn_1_A1F0 = .text:0x0000A1F0; // type:function size:0x52C -fn_1_A71C = .text:0x0000A71C; // type:function size:0xCC -fn_1_A7E8 = .text:0x0000A7E8; // type:function size:0x1294 +fn_1_A71C = .text:0x0000A71C; // type:function size:0xCC scope:local +fn_1_A7E8 = .text:0x0000A7E8; // type:function size:0x1294 scope:local fn_1_BA7C = .text:0x0000BA7C; // type:function size:0x84 fn_1_BB00 = .text:0x0000BB00; // type:function size:0x7BC fn_1_C2BC = .text:0x0000C2BC; // type:function size:0xCC -fn_1_C388 = .text:0x0000C388; // type:function size:0x418 +fn_1_C388 = .text:0x0000C388; // type:function size:0x418 scope:local fn_1_C7A0 = .text:0x0000C7A0; // type:function size:0x34 fn_1_C7D4 = .text:0x0000C7D4; // type:function size:0x7B8 -fn_1_CF8C = .text:0x0000CF8C; // type:function size:0x120 -fn_1_D0AC = .text:0x0000D0AC; // type:function size:0x30 -fn_1_D0DC = .text:0x0000D0DC; // type:function size:0x98 -fn_1_D174 = .text:0x0000D174; // type:function size:0xBC -fn_1_D230 = .text:0x0000D230; // type:function size:0x74 -fn_1_D2A4 = .text:0x0000D2A4; // type:function size:0x2B0 -fn_1_D554 = .text:0x0000D554; // type:function size:0x154 -fn_1_D6A8 = .text:0x0000D6A8; // type:function size:0x64 -fn_1_D70C = .text:0x0000D70C; // type:function size:0x64 -fn_1_D770 = .text:0x0000D770; // type:function size:0x894 -fn_1_E004 = .text:0x0000E004; // type:function size:0x140 -fn_1_E144 = .text:0x0000E144; // type:function size:0x48 -fn_1_E18C = .text:0x0000E18C; // type:function size:0x1E8 -fn_1_E374 = .text:0x0000E374; // type:function size:0x14C -fn_1_E4C0 = .text:0x0000E4C0; // type:function size:0x1EC -fn_1_E6AC = .text:0x0000E6AC; // type:function size:0x1D4 -fn_1_E880 = .text:0x0000E880; // type:function size:0x18C +fn_1_CF8C = .text:0x0000CF8C; // type:function size:0x120 scope:local +fn_1_D0AC = .text:0x0000D0AC; // type:function size:0x30 scope:local +fn_1_D0DC = .text:0x0000D0DC; // type:function size:0x98 scope:local +fn_1_D174 = .text:0x0000D174; // type:function size:0xBC scope:local +fn_1_D230 = .text:0x0000D230; // type:function size:0x74 scope:local +fn_1_D2A4 = .text:0x0000D2A4; // type:function size:0x2B0 scope:local +fn_1_D554 = .text:0x0000D554; // type:function size:0x154 scope:local +fn_1_D6A8 = .text:0x0000D6A8; // type:function size:0x64 scope:local +fn_1_D70C = .text:0x0000D70C; // type:function size:0x64 scope:local +fn_1_D770 = .text:0x0000D770; // type:function size:0x894 scope:local +fn_1_E004 = .text:0x0000E004; // type:function size:0x140 scope:local +fn_1_E144 = .text:0x0000E144; // type:function size:0x48 scope:local +fn_1_E18C = .text:0x0000E18C; // type:function size:0x1E8 scope:local +fn_1_E374 = .text:0x0000E374; // type:function size:0x14C scope:local +fn_1_E4C0 = .text:0x0000E4C0; // type:function size:0x1EC scope:local +fn_1_E6AC = .text:0x0000E6AC; // type:function size:0x1D4 scope:local +fn_1_E880 = .text:0x0000E880; // type:function size:0x18C scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float @@ -241,82 +241,82 @@ lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data: lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:double -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 data:double -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x8 data:double -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x8 data:double -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x8 data:double -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x8 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 data:double -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 data:float -lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 data:float -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 data:float -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 data:double -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 scope:local data:double +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x8 scope:local data:double +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x8 scope:local data:double +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x8 scope:local data:double +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x8 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 scope:local data:double +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x280 lbl_1_data_280 = .data:0x00000280; // type:object size:0x2 scope:local data:2byte lbl_1_data_282 = .data:0x00000282; // type:object size:0x2 scope:local data:2byte @@ -358,32 +358,32 @@ lbl_1_data_46D = .data:0x0000046D; // type:object size:0x1B scope:local data:str lbl_1_data_488 = .data:0x00000488; // type:object size:0x3 scope:local data:string lbl_1_data_48B = .data:0x0000048B; // type:object size:0xF scope:local data:string lbl_1_data_49C = .data:0x0000049C; // type:object size:0x50 scope:local -lbl_1_data_4F0 = .data:0x000004F0; // type:object size:0x6 data:string -lbl_1_data_4F6 = .data:0x000004F6; // type:object size:0x6 data:string -lbl_1_data_4FC = .data:0x000004FC; // type:object size:0x6 data:string -lbl_1_data_502 = .data:0x00000502; // type:object size:0x8 data:string -lbl_1_data_50A = .data:0x0000050A; // type:object size:0x8 data:string -lbl_1_data_512 = .data:0x00000512; // type:object size:0xA -lbl_1_data_51C = .data:0x0000051C; // type:object size:0x18 data:4byte -lbl_1_data_534 = .data:0x00000534; // type:object size:0xC -lbl_1_data_540 = .data:0x00000540; // type:object size:0x48 -lbl_1_data_588 = .data:0x00000588; // type:object size:0x4 data:4byte -lbl_1_data_58C = .data:0x0000058C; // type:object size:0x5 data:string -lbl_1_data_591 = .data:0x00000591; // type:object size:0x5 data:string -lbl_1_data_596 = .data:0x00000596; // type:object size:0x5 data:string -lbl_1_data_59B = .data:0x0000059B; // type:object size:0x5 data:string -lbl_1_data_5A0 = .data:0x000005A0; // type:object size:0x5 data:string -lbl_1_data_5A5 = .data:0x000005A5; // type:object size:0x5 data:string -lbl_1_data_5AA = .data:0x000005AA; // type:object size:0x5 data:string -lbl_1_data_5AF = .data:0x000005AF; // type:object size:0x5 data:string -lbl_1_data_5B4 = .data:0x000005B4; // type:object size:0x8 -lbl_1_data_5BC = .data:0x000005BC; // type:object size:0x24 data:4byte -lbl_1_data_5E0 = .data:0x000005E0; // type:object size:0x10 -lbl_1_data_5F0 = .data:0x000005F0; // type:object size:0x20 -lbl_1_data_610 = .data:0x00000610; // type:object size:0xE data:string -lbl_1_data_61E = .data:0x0000061E; // type:object size:0xE data:string -lbl_1_data_62C = .data:0x0000062C; // type:object size:0x10 -lbl_1_data_63C = .data:0x0000063C; // type:object size:0x3 data:string +lbl_1_data_4F0 = .data:0x000004F0; // type:object size:0x6 scope:local data:string +lbl_1_data_4F6 = .data:0x000004F6; // type:object size:0x6 scope:local data:string +lbl_1_data_4FC = .data:0x000004FC; // type:object size:0x6 scope:local data:string +lbl_1_data_502 = .data:0x00000502; // type:object size:0x8 scope:local data:string +lbl_1_data_50A = .data:0x0000050A; // type:object size:0x8 scope:local data:string +lbl_1_data_512 = .data:0x00000512; // type:object size:0x8 scope:local data:string +lbl_1_data_51C = .data:0x0000051C; // type:object size:0x18 scope:local data:4byte +lbl_1_data_534 = .data:0x00000534; // type:object size:0xC scope:local +lbl_1_data_540 = .data:0x00000540; // type:object size:0x48 scope:local +lbl_1_data_588 = .data:0x00000588; // type:object size:0x4 scope:local data:4byte +lbl_1_data_58C = .data:0x0000058C; // type:object size:0x5 scope:local data:string +lbl_1_data_591 = .data:0x00000591; // type:object size:0x5 scope:local data:string +lbl_1_data_596 = .data:0x00000596; // type:object size:0x5 scope:local data:string +lbl_1_data_59B = .data:0x0000059B; // type:object size:0x5 scope:local data:string +lbl_1_data_5A0 = .data:0x000005A0; // type:object size:0x5 scope:local data:string +lbl_1_data_5A5 = .data:0x000005A5; // type:object size:0x5 scope:local data:string +lbl_1_data_5AA = .data:0x000005AA; // type:object size:0x5 scope:local data:string +lbl_1_data_5AF = .data:0x000005AF; // type:object size:0x5 scope:local data:string +lbl_1_data_5B4 = .data:0x000005B4; // type:object size:0x5 scope:local data:string +lbl_1_data_5BC = .data:0x000005BC; // type:object size:0x24 scope:local data:4byte +lbl_1_data_5E0 = .data:0x000005E0; // type:object size:0xE scope:local data:2byte +lbl_1_data_5F0 = .data:0x000005F0; // type:object size:0x20 scope:local +lbl_1_data_610 = .data:0x00000610; // type:object size:0xE scope:local data:string +lbl_1_data_61E = .data:0x0000061E; // type:object size:0xE scope:local data:string +lbl_1_data_62C = .data:0x0000062C; // type:object size:0x10 scope:local data:2byte +lbl_1_data_63C = .data:0x0000063C; // type:object size:0x3 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 scope:local data:2byte @@ -428,24 +428,24 @@ lbl_1_bss_27C = .bss:0x0000027C; // type:object size:0x2 scope:local data:2byte lbl_1_bss_27E = .bss:0x0000027E; // type:object size:0x2 scope:local data:2byte lbl_1_bss_280 = .bss:0x00000280; // type:object size:0x2 scope:local data:2byte lbl_1_bss_282 = .bss:0x00000282; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_288 = .bss:0x00000288; // type:object size:0x4 data:4byte -lbl_1_bss_28C = .bss:0x0000028C; // type:object size:0x8 data:4byte -lbl_1_bss_294 = .bss:0x00000294; // type:object size:0x4 data:float -lbl_1_bss_298 = .bss:0x00000298; // type:object size:0x6 -lbl_1_bss_29E = .bss:0x0000029E; // type:object size:0x8 -lbl_1_bss_2A6 = .bss:0x000002A6; // type:object size:0x6 -lbl_1_bss_2AC = .bss:0x000002AC; // type:object size:0x2 data:2byte -lbl_1_bss_2B0 = .bss:0x000002B0; // type:object size:0x4 data:4byte -lbl_1_bss_2B4 = .bss:0x000002B4; // type:object size:0xE -lbl_1_bss_2C2 = .bss:0x000002C2; // type:object size:0xE -lbl_1_bss_2D0 = .bss:0x000002D0; // type:object size:0x28 data:2byte -lbl_1_bss_2F8 = .bss:0x000002F8; // type:object size:0x2 data:2byte -lbl_1_bss_2FA = .bss:0x000002FA; // type:object size:0x2 data:2byte -lbl_1_bss_2FC = .bss:0x000002FC; // type:object size:0xC -lbl_1_bss_308 = .bss:0x00000308; // type:object size:0xC data:float -lbl_1_bss_314 = .bss:0x00000314; // type:object size:0x2 data:2byte -lbl_1_bss_318 = .bss:0x00000318; // type:object size:0x4 data:4byte -lbl_1_bss_31C = .bss:0x0000031C; // type:object size:0x4 data:4byte -lbl_1_bss_320 = .bss:0x00000320; // type:object size:0x4 data:4byte -lbl_1_bss_324 = .bss:0x00000324; // type:object size:0x2 data:2byte -lbl_1_bss_326 = .bss:0x00000326; // type:object size:0x2 data:2byte +lbl_1_bss_288 = .bss:0x00000288; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_28C = .bss:0x0000028C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_294 = .bss:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_bss_298 = .bss:0x00000298; // type:object size:0x6 scope:local +lbl_1_bss_29E = .bss:0x0000029E; // type:object size:0x8 scope:local +lbl_1_bss_2A6 = .bss:0x000002A6; // type:object size:0x6 scope:local +lbl_1_bss_2AC = .bss:0x000002AC; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2B0 = .bss:0x000002B0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_2B4 = .bss:0x000002B4; // type:object size:0xE scope:local +lbl_1_bss_2C2 = .bss:0x000002C2; // type:object size:0xE scope:local +lbl_1_bss_2D0 = .bss:0x000002D0; // type:object size:0x28 scope:local data:2byte +lbl_1_bss_2F8 = .bss:0x000002F8; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2FA = .bss:0x000002FA; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2FC = .bss:0x000002FC; // type:object size:0xC scope:local +lbl_1_bss_308 = .bss:0x00000308; // type:object size:0xC scope:local data:float +lbl_1_bss_314 = .bss:0x00000314; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_318 = .bss:0x00000318; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_31C = .bss:0x0000031C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_320 = .bss:0x00000320; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_324 = .bss:0x00000324; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_326 = .bss:0x00000326; // type:object size:0x2 scope:local data:2byte diff --git a/configure.py b/configure.py index ce7790ab..012205ad 100644 --- a/configure.py +++ b/configure.py @@ -1403,8 +1403,8 @@ config.libs = [ Object(Matching, "REL/w04Dll/bridge.c"), Object(Matching, "REL/w04Dll/boo_event.c"), Object(Matching, "REL/w04Dll/big_boo.c"), - Object(NonMatching, "REL/w04Dll/mg_item.c"), - Object(NonMatching, "REL/w04Dll/mg_coin.c"), + Object(Matching, "REL/w04Dll/mg_item.c"), + Object(Matching, "REL/w04Dll/mg_coin.c"), } ), Rel('w05Dll', diff --git a/include/REL/w04Dll.h b/include/REL/w04Dll.h index 282e9825..9e8b7b4f 100755 --- a/include/REL/w04Dll.h +++ b/include/REL/w04Dll.h @@ -1,7 +1,6 @@ #ifndef REL_W04_H #define REL_W04_H -#include "game/process.h" #include "game/board/map_object.h" #include "dolphin/types.h" diff --git a/include/game/object.h b/include/game/object.h index 58d84ca1..eab5424d 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -45,7 +45,7 @@ typedef struct om_obj_data { /* 0x0A */ s16 next_idx; /* 0x0C */ s16 group; /* 0x0E */ u16 group_idx; -/* 0x10 */ int unk10; +/* 0x10 */ u32 unk10; /* 0x14 */ omObjFunc func; /* 0x18 */ Vec trans; /* 0x24 */ Vec rot; diff --git a/src/REL/w04Dll/big_boo.c b/src/REL/w04Dll/big_boo.c index c689dc71..4e897c0f 100755 --- a/src/REL/w04Dll/big_boo.c +++ b/src/REL/w04Dll/big_boo.c @@ -10,6 +10,7 @@ #include "game/msm.h" #include "game/objsub.h" #include "game/pad.h" +#include "game/process.h" #include "game/sprite.h" #include "game/window.h" #include "game/wipe.h" diff --git a/src/REL/w04Dll/boo_event.c b/src/REL/w04Dll/boo_event.c index 73005f50..d61dbbac 100755 --- a/src/REL/w04Dll/boo_event.c +++ b/src/REL/w04Dll/boo_event.c @@ -9,6 +9,7 @@ #include "game/object.h" #include "game/objsub.h" #include "game/pad.h" +#include "game/process.h" #include "game/sprite.h" #include "game/window.h" #include "game/board/audio.h" diff --git a/src/REL/w04Dll/bridge.c b/src/REL/w04Dll/bridge.c index cdfe6cff..f3fa85fb 100755 --- a/src/REL/w04Dll/bridge.c +++ b/src/REL/w04Dll/bridge.c @@ -4,6 +4,7 @@ #include "game/gamework_data.h" #include "game/memory.h" #include "game/objsub.h" +#include "game/process.h" #include "game/window.h" #include "game/board/main.h" #include "game/board/model.h" diff --git a/src/REL/w04Dll/main.c b/src/REL/w04Dll/main.c index 1be51eef..25da96a5 100755 --- a/src/REL/w04Dll/main.c +++ b/src/REL/w04Dll/main.c @@ -4,6 +4,7 @@ #include "game/data.h" #include "game/gamework_data.h" #include "game/object.h" +#include "game/process.h" #include "game/window.h" #include "game/board/boo_house.h" #include "game/board/com.h" diff --git a/src/REL/w04Dll/mg_coin.c b/src/REL/w04Dll/mg_coin.c new file mode 100755 index 00000000..4be845b4 --- /dev/null +++ b/src/REL/w04Dll/mg_coin.c @@ -0,0 +1,663 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/msm.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +static void fn_1_CF8C(omObjData *arg0); +static void fn_1_D0AC(void); +static void fn_1_D0DC(void); +static void fn_1_D174(omObjData *arg0); +static void fn_1_D230(omObjData *arg0); +static void fn_1_D2A4(omObjData *arg0); +static void fn_1_D554(omObjData *arg0); +static void fn_1_D6A8(omObjData *arg0); +static void fn_1_D70C(omObjData *arg0); +static void fn_1_D770(void); +static void fn_1_E004(void); +static void fn_1_E144(omObjData *arg0); +static void fn_1_E18C(omObjData *arg0); +static void fn_1_E374(omObjData *arg0); +static void fn_1_E4C0(omObjData *arg0); +static void fn_1_E6AC(omObjData *arg0); +static s16 fn_1_E880(omObjData *arg0); + +static u16 lbl_1_bss_326; +static s16 lbl_1_bss_324; +static omObjData *lbl_1_bss_320; +static omObjData *lbl_1_bss_31C; +static omObjData *lbl_1_bss_318; +static s16 lbl_1_bss_314; +static Vec lbl_1_bss_308; +static Vec lbl_1_bss_2FC; +static s16 lbl_1_bss_2FA; +static s16 lbl_1_bss_2F8; +static s16 lbl_1_bss_2D0[20]; +static u16 lbl_1_bss_2C2[7]; +static u16 lbl_1_bss_2B4[7]; +static s32 lbl_1_bss_2B0; + +static s32 lbl_1_data_588 = -1; + +static char *lbl_1_data_5BC[] = { + "pia1", "pia2", "pia3", "pia4", + "pia5", "pia6", "pia7", "pia8", + "pia9" +}; + +static u16 lbl_1_data_5E0[] = { + 0x0100, 0x0200, 0x0040, 0x0020, + 0x0800, 0x0400, 0x0010 +}; + +static s32 lbl_1_data_5F0[] = { + 0x0000046D, + 0x0000046E, + 0x0000046F, + 0x00000470, + 0x00000471, + 0x00000472, + 0x00000473, + 0x00000474 +}; + +void fn_1_C7A0(void) { + BoardModelAttrSet(lbl_1_bss_14[7], 0x40000002); +} + +void fn_1_C7D4(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + float var_f29; + s16 temp_r30; + s32 i; + + BoardModelLayerSet(lbl_1_bss_14[9], 1); + lbl_1_bss_324 = GWSystem.player_curr; + lbl_1_data_588 = -1; + lbl_1_bss_2FA = 0; + for (i = 0; i < 7; i++) { + lbl_1_bss_2B4[i] = 0; + } + for (i = 0; i < 7; i++) { + do { + temp_r30 = frandmod(7); + } while (lbl_1_bss_2B4[temp_r30] != 0); + lbl_1_bss_2B4[temp_r30] = i + 1; + lbl_1_bss_2C2[temp_r30] = lbl_1_data_5E0[i]; + } + for (i = 0; i < 7; i++) { + OSReport("%d: %d %04X\n", i, lbl_1_bss_2B4[i], lbl_1_bss_2C2[i]); + } + lbl_1_bss_2F8 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 16), NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + BoardModelAttrSet(lbl_1_bss_2F8, 0x40000002); + for (i = 0; i < 20; i++) { + lbl_1_bss_2D0[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 0); + } + BoardPlayerMotBlendSet(lbl_1_bss_324, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 19), 3); + BoardWinWait(); + BoardWinKill(); + BoardPlayerPosGet(lbl_1_bss_324, &lbl_1_bss_308); + BoardModelPosGet(lbl_1_bss_14[9], &lbl_1_bss_2FC); + BoardPlayerPosGet(lbl_1_bss_324, &sp38); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[0], &sp2C); + sp20 = sp2C; + sp20.z = sp38.z; + sp20.y = sp38.y; + BoardPlayerPosLerpStart(lbl_1_bss_324, &sp38, &sp20, 0x3C); + while (fn_1_1130(lbl_1_bss_14[9], 270.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_14[9], &sp8); + sp14 = sp8; + sp14.x = sp2C.x; + PSVECSubtract(&sp14, &sp8, &sp38); + PSVECScale(&sp38, &sp38, 0.022727273f); + for (i = 0; i < 44; i++) { + BoardModelPosGet(lbl_1_bss_14[9], &sp8); + PSVECAdd(&sp8, &sp38, &sp8); + BoardModelPosSetV(lbl_1_bss_14[9], &sp8); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[9], &sp14); + while (fn_1_1130(lbl_1_bss_14[9], 0.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + while (GWPlayer[lbl_1_bss_324].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_324, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + var_f31 = 0.0f; + temp_f30 = 8.0f; + PSVECSubtract(&sp2C, &sp20, &sp38); + PSVECScale(&sp38, &sp38, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_324, &sp20); + sp38.y = temp_f30 - var_f31 * var_f31 * 0.25f * 0.075f; + var_f31 += 1.0f; + PSVECAdd(&sp38, &sp20, &sp20); + sp14 = sp2C; + sp14.y = sp20.y; + PSVECSubtract(&sp14, &sp20, &sp14); + var_f29 = PSVECMag(&sp14); + if (var_f29 <= 1.0f) { + sp38.x = sp38.z = 0.0f; + sp20.x = sp2C.x; + sp20.z = sp2C.z; + } + if (sp20.y <= sp2C.y && sp38.y < 0.0f) { + sp20.y = sp2C.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp20); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp20); + BoardPlayerMotBlendSet(lbl_1_bss_324, 0x5A, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + HuPrcSleep(60); + lbl_1_bss_320 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_CF8C); + lbl_1_bss_318 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_D174); + lbl_1_bss_31C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL); + lbl_1_bss_318->scale.x = 255.0f; + lbl_1_bss_314 = 0; + lbl_1_bss_326 = 0; +} + +static void fn_1_CF8C(omObjData *arg0) { + s32 spC; + + if (lbl_1_data_588 != -1) { + spC = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (msmMusGetStatus(lbl_1_data_588) == 0) { + HuAudSeqFadeOut(lbl_1_data_588, 100); + lbl_1_bss_2FA = 1; + } + if (lbl_1_bss_2FA == 1 && msmMusGetStatus(lbl_1_data_588) == 0) { + lbl_1_data_588 = -1; + BoardAudSeqPause(0, 0, 1000); + OSReport("BGM1 Restore\n"); + } + } + if (lbl_1_bss_326 != 0 && BoardMGDoneFlagGet() == 1) { + fn_1_D0DC(); + omDelObjEx(boardObjMan, arg0); + } +} + +static void fn_1_D0AC(void) { + lbl_1_bss_326 = 1; + BoardMGExit(); +} + +static void fn_1_D0DC(void) { + s32 i; + + omDelObjEx(boardObjMan, lbl_1_bss_31C); + BoardModelKill(lbl_1_bss_2F8); + for (i = 0; i < 20; i++) { + BoardModelKill(lbl_1_bss_2D0[i]); + } + BoardModelLayerSet(lbl_1_bss_14[9], 0); + BoardMGDoneFlagSet(0); +} + +static void fn_1_D174(omObjData *arg0) { + UnkMsmStruct_03 sp8; + + if (arg0->work[0] == 0) { + arg0->work[0] = MGSeqCreate(3, 0); + BoardAudSeqPause(0, 1, 1000); + return; + } + if (MGSeqStatGet(arg0->work[0]) == 0) { + sp8.unk00 = 1; + sp8.unk06 = 0; + sp8.unk05 = 0x7F; + sp8.unk04 = 1; + lbl_1_data_588 = msmMusPlay(0x1D, &sp8); + arg0->func = fn_1_D230; + } +} + +static void fn_1_D230(omObjData *arg0) { + s32 temp_r3; + + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 10 && temp_r3 <= 19) { + arg0->work[1]++; + arg0->func = fn_1_D2A4; + } +} + +static void fn_1_D2A4(omObjData *arg0) { + Vec sp18; + Vec spC; + float sp8; + ModelData *temp_r30; + s32 temp_r3; + + temp_r30 = &Hu3DData[BoardModelIDGet(lbl_1_bss_2F8)]; + sp8 = BoardModelRotYGet(lbl_1_bss_14[9]); + BoardModelPosGet(lbl_1_bss_14[9], &spC); + if (arg0->scale.x != 0.0f) { + arg0->scale.x -= 8.5f; + if (arg0->scale.x < 0.0f) { + arg0->scale.x = 0.0f; + } + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + return; + } + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 20 && temp_r3 <= 29) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp18); + spC.x = sp18.x; + BoardModelPosSetV(lbl_1_bss_14[9], &spC); + arg0->func = fn_1_D554; + if (arg0->work[1] < 8) { + BoardModelHookReset(lbl_1_bss_14[7]); + BoardModelVisibilitySet(lbl_1_bss_2F8, 1); + BoardModelMotionTimeSet(lbl_1_bss_2F8, lbl_1_bss_2B4[arg0->work[1] - 1]); + BoardModelHookSet(lbl_1_bss_14[7], lbl_1_data_5BC[arg0->work[1]], lbl_1_bss_2F8); + Hu3DMotionExec(BoardModelIDGet(lbl_1_bss_2F8), temp_r30->unk_08, temp_r30->unk_64, 0); + } + lbl_1_bss_31C->work[0] = 60; + lbl_1_bss_31C->unk10 = frandmod(40) + 10; + lbl_1_bss_31C->work[1] = arg0->work[1]; + lbl_1_bss_31C->func = fn_1_E18C; + } +} + +static void fn_1_D554(omObjData *arg0) { + float sp8; + + sp8 = BoardModelRotYGet(lbl_1_bss_14[9]); + arg0->scale.x += 8.5f; + if (arg0->scale.x > 255.0f) { + arg0->scale.x = 255.0f; + } + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + if (arg0->scale.x == 255.0f) { + arg0->work[0] = 0; + lbl_1_bss_31C->work[1] = arg0->work[1]; + arg0->scale.x = 255.0f; + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + if (arg0->work[1] == 8) { + arg0->func = fn_1_D70C; + lbl_1_bss_31C->work[2] = 1; + lbl_1_bss_31C->func = fn_1_E374; + } else { + arg0->func = fn_1_D6A8; + } + } +} + +static void fn_1_D6A8(omObjData *arg0) { + if (arg0->work[0] != 0) { + BoardModelHookReset(lbl_1_bss_14[7]); + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->func = fn_1_D230; + } +} + +static void fn_1_D70C(omObjData *arg0) { + Process *var_r30; + + if (arg0->work[0] == 1) { + var_r30 = HuPrcCreate(fn_1_D770, 0x2004, 0x1800, 0); + var_r30->user_data = arg0; + arg0->func = NULL; + } +} + +s16 lbl_1_data_62C[] = { + 1, 3, 5, 7, 10, 14, 18, 20 +}; + +static void fn_1_D770(void) { + Vec sp114[20]; + Vec sp24[20]; + Vec sp18; + Vec spC; + float temp_f29; + float var_f30; + float var_f31; + char sp8[4]; + Process *temp_r3; + omObjData *var_r28; + s32 var_r29; + s32 i; + + lbl_1_bss_314 = lbl_1_data_62C[lbl_1_bss_314 - 1]; + sprintf(sp8, "%d", lbl_1_bss_314); + BoardWinCreate(2, MAKE_MESSID(32, 20), 3); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 0); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(lbl_1_bss_324, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_324, &sp18); + for (i = 0; i < lbl_1_bss_314; i++) { + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 1); + sp114[i] = sp18; + sp114[i].y += 800.0f + i * 120; + sp114[i].x += -25.0f + 50.0f * frand8() * 0.003921569f; + sp114[i].z += -25.0f + 50.0f * frand8() * 0.003921569f; + sp24[i].x = sp24[i].z = 0.0f; + sp24[i].y = 360.0f * frand8() * 0.003921569f; + BoardModelPosSetV(lbl_1_bss_2D0[i], &sp114[i]); + BoardModelRotSetV(lbl_1_bss_2D0[i], &sp24[i]); + } + var_f31 = -1.0f; + var_r29 = 0; + while (TRUE) { + for (i = 0; i < lbl_1_bss_314; i++) { + if (i < var_r29) { + continue; + } + sp114[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_2D0[i], &sp114[i]); + sp24[i].y += 45.0f; + if (sp24[i].y >= 360.0f) { + sp24[i].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_2D0[i], &sp24[i]); + if (sp114[i].y <= sp18.y + 80.0f) { + spC = sp114[i]; + CharModelCoinEffectCreate(1, &spC); + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 0); + var_r29 += 1; + BoardPlayerCoinsAdd(lbl_1_bss_324, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_324, 12, 6, 6); + } + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + if (var_r29 == lbl_1_bss_314) { + BoardPlayerMotionShiftSet(lbl_1_bss_324, 7, 0.0f, 10.0f, 0); + break; + } + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 21), 3); + BoardWinWait(); + BoardWinKill(); + temp_r3 = HuPrcCreate(fn_1_E004, 0x2004, 0x1000, 0); + temp_r3->user_data = NULL; + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + temp_f29 = 8.0f; + lbl_1_bss_308.z = sp18.z + 100.0f; + lbl_1_bss_308.x = sp18.x + 50.0f; + PSVECSubtract(&lbl_1_bss_308, &sp18, &spC); + PSVECScale(&spC, &spC, 0.04f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_324, &sp18); + spC.y = temp_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&spC, &sp18, &sp18); + sp114[0] = lbl_1_bss_308; + sp114[0].y = sp18.y; + PSVECSubtract(&sp114[0], &sp18, &sp114[0]); + var_f31 = PSVECMag(&sp114[0]); + if (var_f31 <= 1.0f) { + spC.x = spC.z = 0.0f; + sp18.x = lbl_1_bss_308.x; + sp18.z = lbl_1_bss_308.z; + } + if (sp18.y <= lbl_1_bss_308.y && spC.y < 0.0f) { + sp18.y = lbl_1_bss_308.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp18); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp18); + omVibrate(lbl_1_bss_324, 12, 6, 6); + while (!temp_r3->user_data) { + HuPrcVSleep(); + } + HuPrcKill(temp_r3); + var_r28 = HuPrcCurrentGet()->user_data; + var_r28->func = fn_1_E144; + HuPrcEnd(); +} + +static void fn_1_E004(void) { + Vec sp14; + Vec sp8; + s32 i; + + while (fn_1_1130(lbl_1_bss_14[9], 90.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_14[9], &sp14); + PSVECSubtract(&lbl_1_bss_2FC, &sp14, &sp8); + PSVECScale(&sp8, &sp8, 0.1f); + for (i = 0; i < 10; i++) { + BoardModelPosGet(lbl_1_bss_14[9], &sp14); + PSVECAdd(&sp14, &sp8, &sp14); + BoardModelPosSetV(lbl_1_bss_14[9], &sp14); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[9], &lbl_1_bss_2FC); + while (fn_1_1130(lbl_1_bss_14[9], 0.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + HuPrcCurrentGet()->user_data = (void*) 1; + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_E144(omObjData *arg0) { + lbl_1_bss_326 = 1; + BoardMGExit(); + omDelObjEx(boardObjMan, arg0); +} + +static void fn_1_E18C(omObjData *arg0) { + s32 var_r29; + s16 var_r28; + s16 var_r30; + + var_r29 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (var_r29 >= 20 && var_r29 <= 29) { + var_r28 = GWPlayer[lbl_1_bss_324].port; + var_r30 = 0; + if (GWPlayer[lbl_1_bss_324].com) { + if (--arg0->unk10 == 0) { + var_r30 = fn_1_E880(arg0); + } + } else { + var_r30 = HuPadBtnDown[var_r28]; + } + if (var_r30 & 0xF70) { + if ((var_r30 & lbl_1_bss_2C2[arg0->work[1] - 1]) && !(var_r30 & ~lbl_1_bss_2C2[arg0->work[1] - 1])) { + arg0->work[2] = 1; + } else { + arg0->work[2] = 0; + } + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->func = fn_1_E374; + } + } else { + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->work[2] = 0; + arg0->func = fn_1_E374; + lbl_1_bss_318->work[0] = 1; + fn_1_E374(arg0); + } +} + +static void fn_1_E374(omObjData *arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r3; + + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 30 && temp_r3 <= 39) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp14); + BoardPlayerPosGet(lbl_1_bss_324, &sp20); + PSVECSubtract(&sp14, &sp20, &sp8); + PSVECScale(&sp8, &sp8, 0.04f); + arg0->trans.x = sp8.x; + arg0->trans.z = sp8.z; + arg0->trans.y = 5.0f; + arg0->rot.x = 0.0f; + arg0->scale.x = sp14.x; + arg0->scale.y = sp14.y; + arg0->scale.z = sp14.z; + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + arg0->func = fn_1_E4C0; + } +} + +static void fn_1_E4C0(omObjData *arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + + BoardPlayerPosGet(lbl_1_bss_324, &sp2C); + sp14.x = arg0->scale.x; + sp14.y = arg0->scale.y; + sp14.z = arg0->scale.z; + sp20.x = arg0->trans.x; + sp20.z = arg0->trans.z; + sp20.y = arg0->trans.y - arg0->rot.x * arg0->rot.x * 0.25f * 0.075f; + arg0->rot.x += 1.0f; + PSVECAdd(&sp2C, &sp20, &sp2C); + sp8 = sp2C; + sp8.y = sp14.y; + PSVECSubtract(&sp14, &sp8, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 <= 1.0f) { + arg0->trans.x = arg0->trans.z = 0.0f; + sp2C.x = sp14.x; + sp2C.z = sp14.z; + } + if (sp2C.y <= sp14.y && sp20.y < 0.0f) { + sp2C.y = sp14.y; + BoardPlayerIdleSet(lbl_1_bss_324); + arg0->work[3] = 0; + if (arg0->work[2] != 0) { + arg0->func = fn_1_E6AC; + } else { + lbl_1_bss_318->work[0] = 1; + HuAudFXPlay(0x475); + arg0->func = NULL; + } + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp2C); +} + +static void fn_1_E6AC(omObjData *arg0) { + Vec sp8; + float var_f31; + + if (arg0->work[3] == 0) { + lbl_1_bss_2B0 = -1; + var_f31 = 4.0f + 20.0f * (arg0->work[1] - 1); + BoardModelMotionTimeSet(lbl_1_bss_14[7], var_f31); + BoardModelAttrReset(lbl_1_bss_14[7], 0x40000002); + lbl_1_bss_314++; + arg0->work[3] = 1; + arg0->work[0] = 0x10; + lbl_1_bss_2B0 = HuAudFXPlay(lbl_1_data_5F0[arg0->work[1] - 1]); + } + if (--arg0->work[0] != 0) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp8); + BoardPlayerPosSetV(lbl_1_bss_324, &sp8); + return; + } + if (lbl_1_bss_2B0 >= 0) { + HuAudFXStop(lbl_1_bss_2B0); + } + lbl_1_bss_318->work[0] = 1; + BoardModelAttrSet(lbl_1_bss_14[7], 0x40000002); + arg0->func = NULL; +} + +static s16 fn_1_E880(omObjData *arg0) { + s16 temp_r28; + s16 var_r30; + s32 temp_r29; + + temp_r28 = GWPlayer[lbl_1_bss_324].diff; + var_r30 = 0; + temp_r29 = frandmod(100); + switch (temp_r28) { + case 0: + if (temp_r29 < 35) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else if (temp_r29 < 90) { + var_r30 = -1; + } else { + arg0->unk10 = 100; + } + break; + case 1: + if (temp_r29 < 55) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else if (temp_r29 < 90) { + var_r30 = -1; + } else { + arg0->unk10 = 100; + } + break; + case 2: + if (temp_r29 < 85) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else { + var_r30 = -1; + } + break; + case 3: + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + break; + } + return var_r30; +} diff --git a/src/REL/w04Dll/mg_item.c b/src/REL/w04Dll/mg_item.c new file mode 100755 index 00000000..342d8f5c --- /dev/null +++ b/src/REL/w04Dll/mg_item.c @@ -0,0 +1,656 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "ext_math.h" + +static void fn_1_A71C(void); +static void fn_1_A7E8(void); +static void fn_1_C388(ModelData *model, ParticleData *particle, Mtx matrix); + +static s16 lbl_1_bss_2AC; +static s16 lbl_1_bss_2A6[3]; +static s16 lbl_1_bss_29E[4]; +static s16 lbl_1_bss_298[3]; +static float lbl_1_bss_294; +static s32 lbl_1_bss_290_pad; +static s32 lbl_1_bss_28C; +static AnimData *lbl_1_bss_288; + +static char *lbl_1_data_51C[] = { + "item1", "item2", "item3", + "switch1", "switch2", "switch3" +}; + +static s32 lbl_1_data_534[] = { + 0x00000466, + 0x00000467, + 0x00000468 +}; + +static s32 lbl_1_data_540[] = { + DATA_MAKE_NUM(DATADIR_BOARD, 109), + DATA_MAKE_NUM(DATADIR_BOARD, 110), + DATA_MAKE_NUM(DATADIR_BOARD, 111), + DATA_MAKE_NUM(DATADIR_BOARD, 112), + DATA_MAKE_NUM(DATADIR_BOARD, 113), + DATA_MAKE_NUM(DATADIR_BOARD, 114), + DATA_MAKE_NUM(DATADIR_BOARD, 115), + DATA_MAKE_NUM(DATADIR_BOARD, 116), + DATA_MAKE_NUM(DATADIR_BOARD, 118), + DATA_MAKE_NUM(DATADIR_BOARD, 119), + DATA_MAKE_NUM(DATADIR_BOARD, 120), + DATA_MAKE_NUM(DATADIR_BOARD, 121), + DATA_MAKE_NUM(DATADIR_BOARD, 122), + DATA_MAKE_NUM(DATADIR_BOARD, 123), + DATA_MAKE_NUM(DATADIR_W02, 24), + DATA_MAKE_NUM(DATADIR_W02, 25), + DATA_MAKE_NUM(DATADIR_W02, 26), + -1 +}; + +void fn_1_A0F8(void) { + Vec sp8; + s32 i; + + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + for (i = 0; i < 3; i++) { + lbl_1_bss_29E[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 13), NULL, 1); + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + BoardModelAttrSet(lbl_1_bss_29E[i], 0x40000002); + } + BoardModelPosGet(lbl_1_bss_14[6], &sp8); + lbl_1_bss_294 = sp8.y; +} + +void fn_1_A1F0(void) { + Vec sp38[3]; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + s16 temp_r29; + s32 var_r30; + s32 i; + + lbl_1_bss_2AC = GWSystem.player_curr; + temp_r29 = BoardModelMotionCreate(lbl_1_bss_14[10], DATA_MAKE_NUM(DATADIR_BGUEST, 25)); + HuPrcSleep(60); + var_f31 = 0.0f; + for (i = 0; i < 30; i++) { + var_f31 += 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_14[10], temp_r29, 0); + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i], &sp38[i]); + } + while (TRUE) { + var_r30 = 0; + for (i = 0; i < 3; i++) { + BoardModelPosGet(lbl_1_bss_298[i], &sp2C); + sp2C.y += 2.0f; + if (sp2C.y >= sp38[i].y) { + sp2C.y = sp38[i].y; + var_r30++; + } + BoardModelPosSetV(lbl_1_bss_298[i], &sp2C); + } + if (var_r30 == 3) { + break; + } + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i], lbl_1_bss_298[i]); + } + while (BoardModelMotionTimeGet(lbl_1_bss_14[10]) < BoardModelMotionMaxTimeGet(lbl_1_bss_14[10])) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[10], 1, 0.0f, 5.0f, 0x40000001); + BoardAudSeqPause(0, 1, 1000); + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrReset(lbl_1_bss_14[6], 0x40000002); + HuPrcSleep(20); + HuAudFXPlay(0x469); + HuPrcSleep(50); + BoardMusStart(1, 0x1E, 0x7F, 0); + HuAudFXPlay(0x46C); + while (BoardModelMotionTimeGet(lbl_1_bss_14[6]) < 202.0f) { + HuPrcVSleep(); + } + BoardModelMotionTimeSet(lbl_1_bss_14[6], 202.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + BoardModelMotionKill(lbl_1_bss_14[10], temp_r29); + sp14.x = -35.0f; + sp14.y = sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = -150.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[6], &sp14, &sp8, 1500.0f, 25.0f, 21); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp2C); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[4], &sp20); + sp20.z = sp2C.z - 50.0f; + sp20.y = sp2C.y; + BoardPlayerPosLerpStart(lbl_1_bss_2AC, &sp2C, &sp20, 0x3C); + while (GWPlayer[lbl_1_bss_2AC].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + fn_1_A7E8(); + BoardMGExit(); + while (TRUE) { + if (BoardMGDoneFlagGet() == 1) { + BoardMGDoneFlagSet(0); + fn_1_BA7C(); + break; + } + HuPrcVSleep(); + } + HuPrcEnd(); +} + +static void fn_1_A71C(void) { + Vec sp8; + float var_f31; + s16 temp_r31; + + var_f31 = 0.0f; + temp_r31 = (s16) HuPrcCurrentGet()->user_data; + while (TRUE) { + BoardModelPosGet(temp_r31, &sp8); + sp8.y += 0.25 * sind(var_f31); + var_f31 += 5.0f; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelPosSetV(temp_r31, &sp8); + HuPrcVSleep(); + } +} + +static void fn_1_A7E8(void) { + Vec sp54[3]; + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + float sp10[2]; + float var_f29; + float var_f30; + float var_f31; + Process *var_r20; + s16 var_r30; + s16 var_r28; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + u16 temp_r29; + u16 var_r23; + s16 var_r22; + s16 var_r21; + s16 var_r19; + u16 temp_r18; + u16 var_r17; + ParticleData *spC; + s32 sp8; + s32 i; + + var_r28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 14), NULL, 0); + BoardModelAttrSet(var_r28, 0x40000001); + BoardModelVisibilitySet(var_r28, 0); + var_r30 = 1; + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i + 3], &sp54[i]); + sp54[i].y += 50.0f; + } + var_r25 = MGSeqCreate(3, 0); + while (MGSeqStatGet(var_r25) != 0) { + HuPrcVSleep(); + } + var_r24 = 5; + var_r21 = 60; + var_r25 = MGSeqCreate(1, var_r24, 0x120, 0x40); + HuWinMesMaxSizeGet(1, sp10, MAKE_MESSID(32, 22)); + var_r27 = HuWinCreate(-10000.0f, 368.0f, sp10[0], sp10[1], 0); + HuWinMesSet(var_r27, MAKE_MESSID(32, 22)); + HuWinBGTPLvlSet(var_r27, 0.0f); + HuWinMesSpeedSet(var_r27, 0); + BoardModelVisibilitySet(var_r28, 1); + BoardModelPosSetV(var_r28, &sp54[var_r30]); + var_r22 = 30; + var_r19 = 0; + temp_r18 = GWPlayer[lbl_1_bss_2AC].port; + while (TRUE) { + var_r21--; + if (var_r21 == 0) { + var_r21 = 60; + if (--var_r24 < 0) { + break; + } + MGSeqParamSet(var_r25, 1, var_r24); + } + if (GWPlayer[lbl_1_bss_2AC].com) { + if (var_r22 != 0) { + var_r22--; + } else { + var_r22 = frandmod(30) + 15; + if (frandBool() || var_r19 == 3) { + var_r17 = 0x100; + } else { + if (frandBool()) { + var_r23 = 1; + } else { + var_r23 = 2; + } + var_r19++; + } + } + } else { + var_r17 = HuPadBtnDown[temp_r18]; + var_r23 = HuPadDStkRep[temp_r18]; + } + if (var_r17 & 0x100) { + break; + } + if ((var_r23 & 1) && var_r30 != 0) { + HuAudFXPlay(0); + var_r30--; + } + if ((var_r23 & 2) && var_r30 != 2) { + HuAudFXPlay(0); + var_r30++; + } + BoardModelPosSetV(var_r28, &sp54[var_r30]); + HuPrcVSleep(); + } + HuAudFXPlay(2); + MGSeqParamSet(var_r25, 2, -1); + HuWinKill(var_r27); + for (i = 0; i < 360; i += 12) { + sp48.x = sp48.y = sp48.z = 1.0 + 0.8f * sind(i % 180); + BoardModelScaleSetV(var_r28, &sp48); + HuPrcVSleep(); + } + BoardModelVisibilitySet(var_r28, 0); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp18); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + var_f29 = 12.0f; + sp3C = sp54[var_r30]; + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + PSVECSubtract(&sp3C, &sp30, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp3C.y = var_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&sp3C, &sp30, &sp30); + if (sp30.y <= sp54[var_r30].y - 40.0f && sp3C.y < 0.0f) { + sp30.y = sp54[var_r30].y - 40.0f; + break; + } + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + sp48 = sp54[var_r30]; + sp48.y = sp30.y = 0.0f; + PSVECSubtract(&sp48, &sp30, &sp30); + var_f31 = PSVECMag(&sp30); + if (var_f31 <= 1.0f) { + sp3C.x = sp3C.z = 0.0f; + } + HuPrcVSleep(); + } + BoardAudSeqFadeOut(1, 100); + HuAudFXPlay(lbl_1_data_534[var_r30]); + BoardModelMotionTimeSet(lbl_1_bss_29E[var_r30], 0.0f); + BoardModelAttrReset(lbl_1_bss_29E[var_r30], 0x40000002); + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 1, 0.0f, 5.0f, 0x40000001); + while (BoardModelMotionTimeGet(lbl_1_bss_29E[var_r30]) < BoardModelMotionMaxTimeGet(lbl_1_bss_29E[var_r30])) { + if (BoardModelMotionTimeGet(lbl_1_bss_29E[var_r30]) >= 13.0f) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp30.y += 1.0f; + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + } + HuPrcVSleep(); + } + temp_r29 = frandmod(3); + BoardModelHookReset(lbl_1_bss_14[6]); + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + if (i != temp_r29) { + BoardModelVisibilitySet(lbl_1_bss_298[i], 0); + } + } + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[1], lbl_1_bss_298[temp_r29]); + BoardModelAttrReset(lbl_1_bss_14[6], 0x40000002); + HuPrcSleep(30); + HuAudFXPlay(0x310); + while (BoardModelMotionTimeGet(lbl_1_bss_14[6]) < BoardModelMotionMaxTimeGet(lbl_1_bss_14[6])) { + HuPrcVSleep(); + } + BoardModelHookReset(lbl_1_bss_14[6]); + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + } + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[1], &sp24); + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + var_r20 = HuPrcChildCreate(fn_1_A71C, 0x2002, 0x800, 0, boardMainProc); + var_r20->user_data = (void*) lbl_1_bss_298[temp_r29]; + var_r26 = Hu3DParticleCreate(lbl_1_bss_288, 100); + spC = Hu3DData[var_r26].unk_120; + spC->unk_02 = lbl_1_bss_298[temp_r29]; + Hu3DParticleHookSet(var_r26, fn_1_C388); + Hu3DParticleColSet(var_r26, 0xFF, 0xFF, 0); + Hu3DModelPosSet(var_r26, 0.0f, 0.0f, 0.0f); + Hu3DParticleBlendModeSet(var_r26, 1); + Hu3DModelLayerSet(var_r26, 2); + lbl_1_bss_28C = HuAudFXPlay(0x35F); + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + var_f29 = 12.0f; + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + PSVECSubtract(&sp18, &sp30, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp3C.y = var_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&sp3C, &sp30, &sp30); + if (sp30.y < sp18.y) { + sp30.y = sp18.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + sp48 = sp18; + sp48.y = sp30.y = 0.0f; + PSVECSubtract(&sp48, &sp30, &sp30); + var_f31 = PSVECMag(&sp30); + if (var_f31 <= 1.0f) { + sp3C.x = sp3C.z = 0.0f; + } + HuPrcVSleep(); + } + omVibrate(lbl_1_bss_2AC, 12, 6, 6); + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 1, 0.0f, 5.0f, 0x40000001); + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + sp3C = sp24; + sp3C.z += 100.0f; + PSVECSubtract(&sp3C, &sp24, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.033333335f); + for (i = 0; i < 30; i++) { + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + PSVECAdd(&sp24, &sp3C, &sp24); + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp24.y = sp30.y; + BoardPlayerPosLerpStart(lbl_1_bss_2AC, &sp30, &sp24, 0x3C); + while (GWPlayer[lbl_1_bss_2AC].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + var_f31 = 90.0f; + for (i = 0; i < 15; i++) { + var_f31 -= 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 15), 3); + BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_2A6[temp_r29]), 0); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(0x30D); + HuPrcKill(var_r20); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + var_f29 = 1.0f; + var_f31 = (sp30.y - sp24.y) / 30.0f; + var_f30 = -0.04f; + var_r27 = 0; + HuAudFXFadeOut(lbl_1_bss_28C, 0x1F3); + while (var_r27 == 0) { + sp24.y += var_f31; + var_f29 += var_f30; + if (var_f29 < 0.0f) { + var_f29 = 0.0f; + var_r27 = 1; + } + sp48.x = sp48.y = sp48.z = var_f29; + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[temp_r29], &sp48); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_28C); + BoardModelVisibilitySet(lbl_1_bss_298[temp_r29], 0); + BoardPlayerItemAdd(lbl_1_bss_2AC, lbl_1_bss_2A6[temp_r29]); + omVibrate(lbl_1_bss_2AC, 12, 6, 6); + sp8 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 7, 0.0f, 5.0f, 0); + while (!BoardPlayerMotionEndCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + var_f31 = 45.0f; + for (i = 0; i < 15; i++) { + var_f31 -= 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_14[10], 0.0f); + HuPrcSleep(30); + while (HuAudSStreamStatGet(sp8) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + BoardWinCreate(2, MAKE_MESSID(32, 16), 3); + BoardWinWait(); + BoardWinKill(); + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + Hu3DModelKill(var_r26); + BoardModelKill(var_r28); +} + +void fn_1_BA7C(void) { + s32 i; + + for (i = 0; i < 3; i++) { + BoardModelKill(lbl_1_bss_298[i]); + } + if (lbl_1_bss_288) { + HuSprAnimKill(lbl_1_bss_288); + lbl_1_bss_288 = NULL; + } +} + +void fn_1_BB00(s16 *arg0) { + Vec sp54[3]; + Vec sp30[3]; + Vec sp24; + Vec sp18; + float spC[3]; + float temp_f28; + float var_f27; + float var_f29; + s32 var_r30; + s32 i; + + for (i = 0; i < 3; i++) { + lbl_1_bss_2A6[i] = arg0[i]; + lbl_1_bss_298[i] = BoardModelCreate(lbl_1_data_540[lbl_1_bss_2A6[i]], NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_298[i], 0); + if (lbl_1_bss_2A6[i] == 11) { + BoardModelAttrSet(lbl_1_bss_298[i], 0x40000001); + } + if (lbl_1_bss_2A6[i] == 5) { + Hu3DData[BoardModelIDGet(lbl_1_bss_298[i])].unk_F0[1][3] = -50.0f; + } + if (lbl_1_bss_2A6[i] == 4) { + BoardModelMotionSpeedSet(lbl_1_bss_298[i], 0.0f); + } + } + if (lbl_1_bss_288 == NULL) { + lbl_1_bss_288 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); + HuSprAnimLock(lbl_1_bss_288); + } + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + sp18.x = sp18.y = sp18.z = 0.0f; + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i], &sp54[i]); + sp54[i].y += -50.0f; + BoardModelVisibilitySet(lbl_1_bss_298[i], 1); + BoardModelPosSetV(lbl_1_bss_298[i], &sp54[i]); + BoardModelPosGet(lbl_1_bss_14[10], &sp24); + BoardModelPosSetV(lbl_1_bss_298[i], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[i], &sp18); + PSVECSubtract(&sp54[i], &sp24, &sp30[i]); + PSVECNormalize(&sp30[i], &sp30[i]); + spC[i] = 0.0f; + } + sp30[0].y = 16.0f; + sp30[1].y = 13.0f; + sp30[2].y = 10.0f; + HuAudFXPlay(0x362); + var_f29 = 0.0f; + while (TRUE) { + var_r30 = 0; + var_f29 += 0.05f; + if (var_f29 > 1.0f) { + var_f29 = 1.0f; + } + sp18.x = sp18.y = sp18.z = var_f29; + for (i = 0; i < 3; i++) { + BoardModelPosGet(lbl_1_bss_298[i], &sp24); + temp_f28 = sp30[i].y - spC[i] * spC[i] * 0.25f * 0.075f; + sp24.x += 6.55f * sp30[i].x; + sp24.z += 6.55f * sp30[i].z; + sp24.y += temp_f28; + var_f27 = VECDistanceXZ(&sp54[i], &sp24); + if (var_f27 < 3.0f) { + sp30[i].x = sp30[i].z = 0.0f; + sp24.x = sp54[i].x; + sp24.z = sp54[i].z; + } + if (sp24.y <= sp54[i].y && temp_f28 < 0.0f) { + sp24.y = sp54[i].y; + var_r30++; + } + BoardModelPosSetV(lbl_1_bss_298[i], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[i], &sp18); + spC[i] += 1.0f; + } + if (var_r30 == 3) { + break; + } + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardModelPosSetV(lbl_1_bss_298[i], &sp54[i]); + } +} + +void fn_1_C2BC(void) { + Vec sp8; + float var_f31; + s32 i; + s32 j; + + var_f31 = 1.0f; + for (i = 0; i < 20; i++) { + var_f31 -= 0.05f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + sp8.x = sp8.y = sp8.z = var_f31; + for (j = 0; j < 3; j++) { + BoardModelScaleSetV(lbl_1_bss_298[j], &sp8); + } + HuPrcVSleep(); + } +} + +static void fn_1_C388(ModelData *model, ParticleData *particle, Mtx matrix) { + Vec sp8; + HsfanimStruct01 *var_r31; + float var_f31; + float temp_f30; + float temp_f29; + s32 var_r28; + s32 i; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + BoardModelScaleGet(particle->unk_02, &sp8); + var_f31 = sp8.x; + BoardModelPosGet(particle->unk_02, &sp8); + for (i = 0; i < 22; i++) { + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + break; + } + } + if (var_r28 != particle->unk_30) { + temp_f30 = 0.003921569f * frand8() * 360.0f; + temp_f29 = var_f31 * (20.0f + 0.003921569f * frand8() * 60.0f); + var_r31->unk34.x = sp8.x + temp_f29 * sind(temp_f30); + var_r31->unk34.z = sp8.z + temp_f29 * cosd(temp_f30); + var_r31->unk34.y = sp8.y + var_f31 * (-30.0f + 0.003921569f * frand8() * 40.0f); + var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; + var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; + var_r31->unk40.a = 0xB4; + var_r31->unk2C = var_f31 * 15.0f; + } + } + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk2C != 0.0f) { + var_r31->unk34.y -= var_r31->unk08.x; + var_r31->unk2C -= var_r31->unk08.y; + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} diff --git a/src/game/chrman.c b/src/game/chrman.c index 17b2b183..34edc463 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -11,7 +11,7 @@ #include "game/process.h" #include "game/sprite.h" -#include "math.h" +#include "ext_math.h" typedef struct { /* 0x00 */ s16 unk00; @@ -401,13 +401,13 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, break; } if (!(arg4 & 0xF) && !(temp_r29->unkAC & 0x10)) { - effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); - effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(0xA); - effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); - sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(50) - 25); sp1C.y = temp_r30->pos.y; - sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); - CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(0xA) + 0x1E, &effectDustParam); + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(50) - 25); + CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(10) + 30, &effectDustParam); } for (i = 0; i < 4; i++) { if (lbl_801309A0[character * 4 + i] == arg4) { @@ -424,13 +424,13 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, break; } if (!(arg4 & 3) && !(temp_r29->unkAC & 0x10)) { - effectDustParam.unk0C.x = 4.0 * -sin(temp_r30->rot.y * M_PI / 180.0); - effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(0xA); - effectDustParam.unk0C.z = 4.0 * -cos(temp_r30->rot.y * M_PI / 180.0); - sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + effectDustParam.unk0C.x = 4.0 * -sind(temp_r30->rot.y); + effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 4.0 * -cosd(temp_r30->rot.y); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(50) - 25); sp1C.y = temp_r30->pos.y; - sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); - CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(0xA) + 0x1E, &effectDustParam); + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(50) - 25); + CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(10) + 30, &effectDustParam); } for (i = 0; i < 4; i++) { if (lbl_801309C0[character * 4 + i] == arg4) { @@ -441,13 +441,13 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, break; case 4: if (arg4 < 5 && !(temp_r29->unkAC & 0x10)) { - effectDustParam.unk0C.x = 6.0 * sin(temp_r30->rot.y * M_PI / 180.0); - effectDustParam.unk0C.z = 6.0 * cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 6.0 * sind(temp_r30->rot.y); + effectDustParam.unk0C.z = 6.0 * cosd(temp_r30->rot.y); for (i = 0; i < 5; i++) { - effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(0xA); - sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(10); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(50) - 25); sp1C.y = temp_r30->pos.y; - sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(50) - 25); CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, 20.0f, &effectDustParam); } } @@ -458,15 +458,15 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, case 6: if (arg4 == 5 && !(temp_r29->unkAC & 0x10)) { for (i = 0; i < 8; i++) { - effectDustParam.unk0C.x = 4.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.x = 4.0 * sind(45.0f * i) * temp_r30->scale.x; effectDustParam.unk0C.y = 0.0f; - effectDustParam.unk0C.z = 4.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.z = 4.0 * cosd(45.0f * i) * temp_r30->scale.x; CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); } for (i = 0; i < 8; i++) { - effectDustParam.unk0C.x = 2.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.x = 2.0 * sind(45.0f * i + 22.5) * temp_r30->scale.x; effectDustParam.unk0C.y = 0.0f; - effectDustParam.unk0C.z = 2.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.z = 2.0 * cosd(45.0f * i + 22.5) * temp_r30->scale.x; CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); } } @@ -518,15 +518,15 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, if (arg4 == 0) { if (!(temp_r29->unkAC & 0x10)) { for (i = 0; i < 8; i++) { - effectStarParam.unk0C.x = 10.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.x = 10.0 * sind(45.0f * i) * temp_r30->scale.x; effectStarParam.unk0C.y = 0.0f; - effectStarParam.unk0C.z = 10.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.z = 10.0 * cosd(45.0f * i) * temp_r30->scale.x; CreateEffectStar(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 40.0f, &effectStarParam); } for (i = 0; i < 8; i++) { - effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.x = 4.0 * sind(45.0f * i + 22.5) * temp_r30->scale.x; effectDustParam.unk0C.y = 0.0f; - effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.z = 4.0 * cosd(45.0f * i + 22.5) * temp_r30->scale.x; CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); } } @@ -560,9 +560,9 @@ static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, } if (arg4 == 30) { for (i = 0; i < 8; i++) { - effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.x = 4.0 * sind(45.0f * i + 22.5) * temp_r30->scale.x; effectDustParam.unk0C.y = 0.0f; - effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.z = 4.0 * cosd(45.0f * i + 22.5) * temp_r30->scale.x; CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); } } @@ -972,12 +972,12 @@ static void RotateEffect(HsfanimStruct01 *arg0) { temp_r30 = &Hu3DData[(s32) arg0->unk08.x]; if (arg0->unk00_s16 < 8) { - var_f31 = 0.3 + sin((40.0f + 10.0f * (arg0->unk00_s16 + 1)) * M_PI / 180.0); + var_f31 = 0.3 + sind(40.0f + 10.0f * (arg0->unk00_s16 + 1)); arg0->unk2C = 50.0f * var_f31 * temp_r30->scale.x; arg0->unk40.a = 0xFF; - var_f31 = 0.3 + sin((15.0f * (arg0->unk00_s16 + 1)) * M_PI / 180.0); + var_f31 = 0.3 + sind(15.0f * (arg0->unk00_s16 + 1)); } else { - var_f31 = 0.3 + sin(3 * M_PI / 4); + var_f31 = 0.3 + sind(135); } var_f31 *= temp_r30->scale.x; arg0->unk34.x = temp_r30->pos.x + arg0->unk14.x * var_f31; @@ -1020,9 +1020,9 @@ static void PlayEffectSound(HsfanimStruct01 *arg0) { var_r25 = voiceParam[temp_r28 * 2 + 1]; } temp_r26 = (arg0->unk00_s16 * 5) % 360; - arg0->unk34.x = temp_r30->pos.x + 40.0 * sin((arg0->unk08.y + temp_r26) * M_PI / 180.0) * temp_r30->scale.x; + arg0->unk34.x = temp_r30->pos.x + 40.0 * sind(arg0->unk08.y + temp_r26) * temp_r30->scale.x; arg0->unk34.y = temp_r30->pos.y + var_r25 * temp_r30->scale.x; - arg0->unk34.z = temp_r30->pos.z + 40.0 * cos((arg0->unk08.y + temp_r26) * M_PI / 180.0) * temp_r30->scale.x; + arg0->unk34.z = temp_r30->pos.z + 40.0 * cosd(arg0->unk08.y + temp_r26) * temp_r30->scale.x; arg0->unk00_s16++; if (arg0->unk00_s16 >= 0x8F) { arg0->unk00_s16 = 0x48; @@ -1477,8 +1477,8 @@ void CharModelEffectCreate(s16 arg0, Vec *arg1) { var_r27 = var_r26->unk_120; var_r31 = &var_r27->unk_48[temp_r28]; var_r31->unk02 = 2; - var_r31->unk08.x = 30.0 * sin(i * 45 * M_PI / 180.0); - var_r31->unk08.y = 30.0 * cos(i * 45 * M_PI / 180.0); + var_r31->unk08.x = 30.0 * sind(i * 45); + var_r31->unk08.y = 30.0 * cosd(i * 45); var_r31->unk08.z = 0.0f; var_r31->unk14 = *arg1; var_r31->unk20 = 1.15f; @@ -1527,7 +1527,7 @@ static void OrbitEffect(HsfanimStruct01 *arg0) { if (var_f30 > 90.0f) { var_f30 = 90.0f; } - temp_f31 = sin((M_PI * var_f30) / 180.0); + temp_f31 = sind(var_f30); arg0->unk34.x = arg0->unk14.x + arg0->unk08.x * temp_f31; arg0->unk34.y = arg0->unk14.y + arg0->unk08.y * temp_f31; arg0->unk34.z = arg0->unk14.z + arg0->unk08.z * temp_f31; @@ -1569,9 +1569,9 @@ void CharModelCoinEffectCreate(s16 arg0, Vec *arg1) { for (i = 0; i < 16; i++) { temp_r29 = i * 22.5f; - coinParticleParam.unk0C.x = 5.0 * sin(temp_r29 * M_PI / 180.0); + coinParticleParam.unk0C.x = 5.0 * sind(temp_r29); coinParticleParam.unk0C.y = 0.1f * (frandmod(100) - 50); - coinParticleParam.unk0C.z = 5.0 * cos(temp_r29 * M_PI / 180.0); + coinParticleParam.unk0C.z = 5.0 * cosd(temp_r29); var_r28 = CreateEffect(effectMdl[5], arg0, arg1->x, arg1->y, arg1->z, 30.0f, &coinParticleParam); if (var_r28 == -1) { break; @@ -1650,9 +1650,9 @@ void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2) { sp20.z = sp2C[2][2]; for (i = 0; i < 8; i++) { temp_f31 = i * 45; - sp14.x = sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0); - sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0); - sp14.z = sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0); + sp14.x = sp20.x * sp20.y * (1.0 - cosd(temp_f31)) - sp20.z * sind(temp_f31); + sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cosd(temp_f31); + sp14.z = sp20.y * sp20.z * (1.0 - cosd(temp_f31)) + sp20.x * sind(temp_f31); PSVECNormalize(&sp14, &sp14); PSVECScale(&sp14, &lbl_80131030.unk0C, 10.0f); var_r28 = CreateEffect(effectMdl[4], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_80131030); @@ -1732,9 +1732,9 @@ void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2) { sp20.z = sp2C[2][2]; for (i = 0; i < 8; i++) { temp_f31 = i * 45; - sp14.x = sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0); - sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0); - sp14.z = sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0); + sp14.x = sp20.x * sp20.y * (1.0 - cosd(temp_f31)) - sp20.z * sind(temp_f31); + sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cosd(temp_f31); + sp14.z = sp20.y * sp20.z * (1.0 - cosd(temp_f31)) + sp20.x * sind(temp_f31); PSVECNormalize(&sp14, &sp14); PSVECScale(&sp14, &lbl_801310BC.unk0C, 10.0f); var_r28 = CreateEffect(effectMdl[4], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_801310BC); @@ -1931,9 +1931,9 @@ static void UpdateNpcEffect(void) { switch (temp_r27[2]) { case 0: if (!(temp_r26 & 0xF) && !(lbl_801975B0[temp_r28] & 0x10)) { - effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); - effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); sp2C.y = temp_r30->pos.y; sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); @@ -1950,9 +1950,9 @@ static void UpdateNpcEffect(void) { break; case 1: if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { - effectDustParam.unk0C.x = 4.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 4.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(10); - effectDustParam.unk0C.z = 4.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 4.0 * -cosd(temp_r30->rot.y); sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); sp2C.y = temp_r30->pos.y; sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); @@ -1970,9 +1970,9 @@ static void UpdateNpcEffect(void) { case 2: if (temp_r28 != -1) { if (!(temp_r26 & 0x1F) && !(lbl_801975B0[temp_r28] & 0x10)) { - effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); - effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); sp2C.y = temp_r30->pos.y; sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); @@ -1989,9 +1989,9 @@ static void UpdateNpcEffect(void) { case 3: if (temp_r28 != -1) { if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { - effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); - effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); sp2C.y = temp_r30->pos.y; sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); @@ -2008,9 +2008,9 @@ static void UpdateNpcEffect(void) { case 4: if (temp_r28 != -1) { if (!(temp_r26 & 7) && !(lbl_801975B0[temp_r28] & 0x10)) { - effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); - effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); sp2C.y = temp_r30->pos.y; sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); @@ -2032,15 +2032,15 @@ static void UpdateNpcEffect(void) { break; } for (i = 0; i < 8; i++) { - effectStarParam.unk0C.x = 10.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.x = 10.0 * sind(45.0f * i) * temp_r30->scale.x; effectStarParam.unk0C.y = 0.0f; - effectStarParam.unk0C.z = 10.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.z = 10.0 * cosd(45.0f * i) * temp_r30->scale.x; CreateEffectStar(temp_r25, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 40.0f, &effectStarParam); } for (i = 0; i < 8; i++) { - effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.x = 4.0 * sind(45.0f * i + 22.5) * temp_r30->scale.x; effectDustParam.unk0C.y = 0.0f; - effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.z = 4.0 * cosd(45.0f * i + 22.5) * temp_r30->scale.x; CreateEffectDust(temp_r25, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); } if (temp_r28 != -1) { diff --git a/src/game/hsfanim.c b/src/game/hsfanim.c index a04903fb..4c8592c2 100755 --- a/src/game/hsfanim.c +++ b/src/game/hsfanim.c @@ -5,7 +5,7 @@ #include "game/process.h" #include "game/sprite.h" -#include "math.h" +#include "ext_math.h" #include "string.h" typedef struct { @@ -1148,8 +1148,8 @@ static void ParManFunc(void) { PSVECCrossProduct(&sp14, &sp2C, &sp8); } PSVECNormalize(&sp8, &sp8); - temp_f31 = sin(M_PI * var_f28 / 180.0); - temp_f30 = cos(M_PI * var_f28 / 180.0); + temp_f31 = sind(var_f28); + temp_f30 = cosd(var_f28); sp14.x = sp8.x * (sp2C.x * sp2C.x + temp_f30 * (1.0f - sp2C.x * sp2C.x)) + sp8.y * (sp2C.x * sp2C.y * (1.0f - temp_f30) - sp2C.z * temp_f31) + sp8.z * (sp2C.x * sp2C.z * (1.0f - temp_f30) + sp2C.y * temp_f31); @@ -1160,8 +1160,8 @@ static void ParManFunc(void) { + sp8.y * (sp2C.y * sp2C.z * (1.0f - temp_f30) + sp2C.x * temp_f31) + sp8.z * (sp2C.z * sp2C.z + temp_f30 * (1.0f - sp2C.z * sp2C.z)); PSVECCrossProduct(&sp14, &sp2C, &sp8); - temp_f31 = sin(M_PI * var_f29 / 180.0); - temp_f30 = cos(M_PI * var_f29 / 180.0); + temp_f31 = sind(var_f29); + temp_f30 = cosd(var_f29); sp14.x = sp2C.x * (sp8.x * sp8.x + temp_f30 * (1.0f - sp8.x * sp8.x)) + sp2C.y * (sp8.x * sp8.y * (1.0f - temp_f30) - sp8.z * temp_f31) + sp2C.z * (sp8.x * sp8.z * (1.0f - temp_f30) + sp8.y * temp_f31); diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 365e0f11..4730c4b2 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -3,11 +3,9 @@ #include "game/hsfformat.h" #include "game/hsfload.h" -#include "math.h" +#include "ext_math.h" #include "string.h" -#define ABS(x) (((x) < 0) ? -(x) : (x)) - typedef struct { /* 0x00 */ ModelData *unk00; /* 0x04 */ HsfObject *unk04; @@ -408,7 +406,7 @@ s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2) { if (temp_f18 + temp_f21 < temp_r30->near || temp_f18 - temp_f21 > temp_r30->far) { return 0; } - sp24 = sin(temp_r30->fov * 0.5 * M_PI / 180.0) / cos(temp_r30->fov * 0.5 * M_PI / 180.0); + sp24 = sind(temp_r30->fov * 0.5) / cosd(temp_r30->fov * 0.5); temp_f27 = sp24 * temp_f18; temp_f24 = 1.2f * temp_f27; temp_f24 = temp_f21 + ABS(temp_f24); diff --git a/src/game/hsfmotion.c b/src/game/hsfmotion.c index 5492499f..69ba3236 100644 --- a/src/game/hsfmotion.c +++ b/src/game/hsfmotion.c @@ -7,7 +7,7 @@ #include "game/init.h" #include "game/ShapeExec.h" -#include "math.h" +#include "ext_math.h" #include "string.h" static s32 SearchObjectIndex(HsfData *arg0, u32 arg1); @@ -1098,9 +1098,9 @@ void SetObjCameraMotion(s16 arg0, HsfTrack *arg1, float arg2) { if (var_r30 & temp_r28) { PSVECSubtract(&Hu3DCamera[i].pos, &Hu3DCamera[i].target, &spC); PSVECNormalize(&spC, &spC); - sp18.x = spC.x * spC.y * (1.0 - cos(M_PI * arg2 / 180.0)) - spC.z * sin(M_PI * arg2 / 180.0); - sp18.y = spC.y * spC.y + (1.0f - spC.y * spC.y) * cos(M_PI * arg2 / 180.0); - sp18.z = spC.y * spC.z * (1.0 - cos(M_PI * arg2 / 180.0)) + spC.x * sin(M_PI * arg2 / 180.0); + sp18.x = spC.x * spC.y * (1.0 - cosd(arg2)) - spC.z * sind(arg2); + sp18.y = spC.y * spC.y + (1.0f - spC.y * spC.y) * cosd(arg2); + sp18.z = spC.y * spC.z * (1.0 - cosd(arg2)) + spC.x * sind(arg2); PSVECNormalize(&sp18, &Hu3DCamera[i].up); Hu3DCamera[i].aspect_dupe = arg2; }