From 08d8e67cda4e50aa3cdd64f954644bed58088990 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 28 Apr 2024 21:21:57 -0500 Subject: [PATCH 01/22] Do more of m401dll/main.c --- config/GMPE01_00/rels/m401Dll/symbols.txt | 5 +- include/ext_math.h | 2 +- src/REL/m401Dll/main.c | 1339 ++++++++++++++++++++- 3 files changed, 1341 insertions(+), 5 deletions(-) diff --git a/config/GMPE01_00/rels/m401Dll/symbols.txt b/config/GMPE01_00/rels/m401Dll/symbols.txt index d997bf79..1f886c45 100644 --- a/config/GMPE01_00/rels/m401Dll/symbols.txt +++ b/config/GMPE01_00/rels/m401Dll/symbols.txt @@ -451,9 +451,10 @@ 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 +lbl_2_data_334 = .data:0x00000334; // type:object size:0xF0 data:float lbl_2_data_424 = .data:0x00000424; // type:object size:0x8 -lbl_2_data_42C = .data:0x0000042C; // type:object size:0x28 +lbl_2_data_42C = .data:0x0000042C; // type:object size:0x8 +lbl_2_data_434 = .data:0x00000434; // type:object size:0x20 lbl_2_data_454 = .data:0x00000454; // type:object size:0xC data:string lbl_2_data_460 = .data:0x00000460; // type:object size:0xC lbl_2_data_46C = .data:0x0000046C; // type:object size:0x5 data:string diff --git a/include/ext_math.h b/include/ext_math.h index 6f1703c9..b69661ea 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -12,9 +12,9 @@ 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 VECMagPoint(x, y, z) sqrtf(((x)*(x))+((y)*(y))+((z)*(z))) #define sind(x) sin(M_PI*(x)/180.0) #define cosd(x) cos(M_PI*(x)/180.0) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index bbbc503d..3e2c2b5c 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -10,6 +10,7 @@ #include "game/sprite.h" #include "game/frand.h" #include "game/chrman.h" +#include "game/pad.h" #include "REL/m401Dll.h" #include "math.h" @@ -1176,7 +1177,7 @@ 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_f27 = VECMagPoint(object->trans.x-temp_r31->unk24.x, object->trans.y-temp_r31->unk24.y, object->trans.z-temp_r31->unk24.z); temp_r31->unk58.z = temp_f27; temp_r31->unk58.y = 0; temp_r31->unk6E = 110; @@ -1224,7 +1225,7 @@ void fn_2_3F28(omObjData *object) 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); + temp_f27 = VECMagPoint(object->trans.x-sp1C.x, object->trans.y-sp1C.y, object->trans.z-sp1C.z); 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); @@ -1261,4 +1262,1338 @@ void fn_2_3F28(omObjData *object) fn_2_6B44(object); break; } +} + +void fn_2_6B44(omObjData *object); + +void fn_2_48A0(omObjData *object) +{ + M401WorkPlayer *temp_r31; + Work2FA4 *temp_r29; + float temp_f29; + Vec sp4C; + Vec sp40; + s32 sp30[] = { -10, -50, -80, -130 }; + Vec sp24; + Vec sp18; + Vec spC; + temp_r31 = object->data; + temp_r29 = lbl_2_bss_10C->data; + if(temp_r31->unk4 == 0) { + lbl_2_bss_1A--; + } + switch(temp_r31->unk0) { + case 5: + if(temp_r31->unk6A == 1) { + CharModelMotionShiftSet(temp_r31->unk86, object->motion[1], 0, 8, 0x40000001); + temp_r31->unk6A = 0; + } + omSetRot(object, 0, 180, 0); + object->trans.z -= 5.0f; + fn_2_6B44(object); + break; + + case 6: + object->trans.y += temp_r31->unk58.x; + if(object->trans.y >= 910.0f) { + if(temp_r31->unk6C == 0) { + temp_r31->unk6C = 1; + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelAttrSet(object->model[2], 0x40000001); + Hu3DModelPosSet(object->model[2], object->trans.x, 950, 30+object->trans.z); + Hu3DModelScaleSet(object->model[2], 1, 1, 1); + Hu3DMotionTimeSet(object->model[2], 0); + sp4C.x = object->trans.x; + sp4C.y = 950; + sp4C.z = 30+object->trans.z; + fn_2_10A88(&sp4C, 7); + HuAudFXEmiterPlay(1289, &sp4C); + } + temp_r31->unk58.x *= 0.7f; + if(temp_r31->unk58.x <= 0.5f) { + temp_r31->unk0 = 7; + temp_r31->unk58.x = -0.5f; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[0], 0, 30, 0x40000001); + temp_r31->unk80 = 0; + temp_r31->unk6C = 0; + } + } + + break; + + case 7: + object->trans.y += temp_r31->unk58.x; + if(object->trans.y <= 890) { + object->trans.y = 890; + if(lbl_2_bss_BA) { + if(temp_r31->unk68) { + temp_r31->unk0 = 16; + } else { + temp_r31->unk0 = 9; + } + } else { + temp_r31->unk0 = 8; + temp_r29->unk8.z = 0.5f; + temp_r31->unk6E = 0; + HuAudSStreamPlay(4); + lbl_2_bss_C0 = MGSeqDrawCreate(); + lbl_2_bss_1A = 210; + } + } + temp_r31->unk58.x *= 1.17f; + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + break; + + case 8: + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + if(temp_r31->unk6E == 13) { + Hu3DModelAttrReset(lbl_2_bss_10C->model[6], 1); + Hu3DMotionTimeSet(lbl_2_bss_10C->model[6], 0); + } else if(temp_r31->unk6E == 50) { + Hu3DMotionOverlaySet(object->model[0], object->motion[8]); + Hu3DMotionOverlayTimeSet(object->model[0], 31.0f); + Hu3DData[object->model[0]].unk_78 = 1; + } + if(temp_r31->unk6E >= 70) { + if(object->rot.y < 90.0f) { + object->rot.y += 2.25f; + } else { + object->rot.y = 90.0f; + } + } + temp_r31->unk6E++; + if(temp_r29->unk8.y >= 1500.0f) { + temp_r29->unk8.z = 0; + if(temp_r31->unk4 == 0) { + temp_r31->unk0 = 14; + } + } + break; + + case 16: + if(!temp_r31->unk6C) { + temp_r31->unk6C = 1; + HuAudPlayerVoicePlay(temp_r31->unk4, 292); + Hu3DMotionOverlaySet(object->model[0], object->motion[9]); + if(temp_r31->unk4 == lbl_2_bss_B2[0]) { + HuAudSStreamPlay(1); + lbl_2_bss_C0 = MGSeqWinCreate(lbl_2_bss_AA[0], lbl_2_bss_AA[1], lbl_2_bss_AA[2], lbl_2_bss_AA[3]); + lbl_2_bss_1A = 210; + temp_r31->unk6E = 160; + temp_r31->unk0 = 13; + } + } + temp_r31->unk58.x *= 1.17f; + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + if(73.0f <= Hu3DMotionOverlayTimeGet(object->model[0])) { + Hu3DMotionOverlayTimeSet(object->model[0], 35.0f); + } + break; + + case 10: + object->trans.y += temp_r31->unk58.x; + if(object->trans.y >= 910.0f) { + if(temp_r31->unk6C == 0) { + temp_r31->unk6C = 1; + omVibrate(temp_r31->unk4, 12, 4, 2); + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelAttrReset(object->model[2], 0x40000002); + Hu3DModelAttrSet(object->model[2], 0x40000001); + Hu3DModelPosSet(object->model[2], object->trans.x, 950, 30+object->trans.z); + Hu3DModelScaleSet(object->model[2], 1, 1, 1); + Hu3DMotionTimeSet(object->model[2], 0); + Hu3DModelAttrReset(object->model[3], 0x40000002); + Hu3DModelAttrReset(object->model[3], 1); + Hu3DModelClusterAttrReset(object->model[3], 0, 0xC0000002); + Hu3DModelPosSet(object->model[3], object->trans.x, 0, 30+object->trans.z); + Hu3DMotionTimeSet(object->model[3], 0); + sp4C.x = object->trans.x; + sp4C.y = 950; + sp4C.z = 30+object->trans.z; + fn_2_10A88(&sp4C, 7); + HuAudFXEmiterPlay(1289, &sp4C); + } + temp_r31->unk0 = 11; + temp_r31->unk24.x = sp30[temp_r31->unk4]; + temp_r31->unk24.y = 1030; + temp_r31->unk24.z = 40; + sp4C.x = object->trans.x; + sp4C.y = object->trans.y; + sp4C.z = object->trans.z; + VECSubtract(&temp_r31->unk24, &sp4C, &sp40); + VECNormalize(&sp40, &sp40); + temp_f29 = VECDistanceXZ(&temp_r31->unk24, &object->trans); + temp_r31->unk30.x = (sp40.x*temp_f29)/60.0f; + temp_r31->unk30.z = (sp40.z*temp_f29)/60.0f; + temp_r31->unk30.y = 18.75f; + temp_r31->unk58.y = 0; + } + break; + + case 11: + temp_f29 = temp_r31->unk30.y-(0.020833334f*temp_r31->unk58.y*temp_r31->unk58.y); + object->trans.x += temp_r31->unk30.x; + object->trans.z += temp_r31->unk30.z; + object->trans.y += temp_f29; + temp_r31->unk58.y += 1.0f; + if(object->trans.y <= 1030.0f && temp_f29 < 0) { + temp_r31->unk0 = 12; + object->trans.y = 1030+temp_r29->unk4; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[2], 0, 15, 0x40000001); + temp_r31->unk58.x = 0; + } + break; + + case 12: + object->trans.y = 1030+temp_r29->unk4; + sp24.x = (sind(temp_r31->unk58.x), 0.0); + sp24.y = -100*sind(temp_r31->unk58.x)+1300; + sp24.z = -500*sind(temp_r31->unk58.x)+1300; + sp18.x = (sind(temp_r31->unk58.x), 0.0); + sp18.y = 330*sind(temp_r31->unk58.x)+920; + sp18.z = (sind(temp_r31->unk58.x), 0.0) + -100.0; + spC.x = 0; + spC.y = 1; + spC.z = 0; + Hu3DCameraPosSetV(1, &sp24, &spC, &sp18); + temp_r31->unk58.x += 3.0f; + if(temp_r31->unk58.x > 90.0f) { + temp_r31->unk0 = 13; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[5], 0, 20, 0); + HuAudSStreamPlay(1); + lbl_2_bss_C0 = MGSeqWinCreate(lbl_2_bss_AA[0], -1, -1, -1); + lbl_2_bss_1A = 210; + } + temp_r31->unk6E = 160; + break; + + case 13: + if(lbl_2_bss_BA == 1) { + object->trans.y = 1030+temp_r29->unk4; + } else { + temp_r31->unk58.x *= 1.17f; + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + if(73.0f <= Hu3DMotionOverlayTimeGet(object->model[0])) { + Hu3DMotionOverlayTimeSet(object->model[0], 35.0f); + } + } + if(--temp_r31->unk6E == 0) { + temp_r31->unk0 = 14; + } + + break; + + case 14: + if(temp_r31->unk68) { + if(lbl_2_bss_BA == 1) { + object->trans.y = 1030+temp_r29->unk4; + } else { + temp_r31->unk58.x *= 1.17f; + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + if(73.0f <= Hu3DMotionOverlayTimeGet(object->model[0])) { + Hu3DMotionOverlayTimeSet(object->model[0], 35.0f); + } + } + } + if(lbl_2_bss_1A <= 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqFadeOut(lbl_2_bss_A4, 100); + HuAudFXStop(lbl_2_bss_11C); + temp_r31->unk0 = 15; + } + break; + + case 15: + if(temp_r31->unk68) { + if(lbl_2_bss_BA == 1) { + object->trans.y = 1030+temp_r29->unk4; + } else { + temp_r31->unk58.x *= 1.17f; + object->trans.y -= 0.35f*sind(temp_r31->unk80); + temp_r31->unk80 += 3.0f; + if(temp_r31->unk80 >= 360.0f) { + temp_r31->unk80 -= 360.0f; + } + if(73.0f <= Hu3DMotionOverlayTimeGet(object->model[0])) { + Hu3DMotionOverlayTimeSet(object->model[0], 35.0f); + } + } + } + if(!WipeStatGet()) { + lbl_2_bss_110->func = fn_2_A10; + } + break; + } +} + +void fn_2_65FC(omObjData *object); +void fn_2_6AF4(omObjData *object); +void fn_2_A940(omObjData *object); + +void fn_2_6C94(omObjData *object, s8 *x, s8 *y, u16 *btn); + +void fn_2_5CC0(omObjData *object) +{ + M401WorkPlayer *temp_r31; + float temp_f29; + Vec sp20; + Vec sp14; + s32 sp10; + u16 spA; + s8 sp9; + s8 sp8; + temp_f29 = 0; + temp_r31 = object->data; + sp9 = sp8 = spA = 0; + if(temp_r31->unk78 == 0) { + if(GWPlayerCfg[temp_r31->unk4].iscom) { + fn_2_6C94(object, &sp9, &sp8, &spA); + } else { + sp9 = HuPadStkX[temp_r31->unk8]; + sp8 = HuPadStkY[temp_r31->unk8]; + spA = HuPadBtnDown[temp_r31->unk8]; + } + if(sp9 != 0 || sp8 != 0) { + temp_r31->unk58.z = sqrtf((sp9*sp9)+(sp8*sp8))/9.0f; + } + temp_r31->unk64 = atan2d(sp9, sp8); + if(spA & PAD_BUTTON_A) { + temp_r31->unk88 += 1.51f*lbl_2_data_0; + if(temp_r31->unk88 < 1.51f*lbl_2_data_0) { + temp_r31->unk88 = 1.51f*lbl_2_data_0; + } + } + if(temp_r31->unk88 >= 0.0f){ + temp_f29 = 0; + } else { + temp_f29 = fabs(temp_r31->unk88/(1.51f*lbl_2_data_0)); + } + if(temp_r31->unk84) { + if(--temp_r31->unk84 == 0) { + CharModelMotionShiftSet(temp_r31->unk86, object->motion[1], 0, 8, 0x40000001); + temp_r31->unk6A = 0; + } + } + } else { + temp_r31->unk84 = 0; + if(--temp_r31->unk7A == 0) { + sp10 = GWPlayerCfg[temp_r31->unk4].character; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[1], 0, 8, 0x40000001); + temp_r31->unk78 = 0; + temp_r31->unk6A = 0; + } + if(temp_r31->unk7A & 0x1) { + Hu3DModelAttrSet(object->model[0], 1); + } else { + Hu3DModelAttrReset(object->model[0], 1); + } + } + if(temp_f29 != 0) { + if(++temp_r31->unk8C > 15) { + temp_r31->unk8C = 15; + } + temp_r31->unk8E = 0; + } else { + if(++temp_r31->unk8E > 5) { + temp_r31->unk8E = 5; + temp_r31->unk8C = 0; + } + } + if(temp_r31->unk78 == 0 && temp_r31->unk84 == 0) { + if(temp_r31->unk58.z > 0 || temp_r31->unk8C >= 5) { + if(temp_r31->unk6A == 0) { + temp_r31->unk6A = 1; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[3], 0, 8, 0x40000001); + } + } else { + if(temp_r31->unk6A == 1) { + CharModelMotionShiftSet(temp_r31->unk86, object->motion[1], 0, 8, 0x40000001); + temp_r31->unk6A = 0; + } + } + } + CharModelMotionSpeedSet(temp_r31->unk86, 1.0f+temp_f29); + fn_2_65FC(object); + if(temp_r31->unk58.z > 0.1f) { + temp_r31->unk58.z *= 0.9f; + } else { + temp_r31->unk58.z = 0.0f; + } + temp_r31->unk88 -= 0.15f*lbl_2_data_0; + if(temp_r31->unk88 > -lbl_2_data_0) { + temp_r31->unk88 = -lbl_2_data_0; + } + sp20.x = object->trans.x; + sp20.y = object->trans.y; + sp20.z = object->trans.z; + omSetTra(object, temp_r31->unkC.x, temp_r31->unkC.y, lbl_2_bss_60.z+temp_r31->unkC.z); + sp14.x = object->trans.x; + sp14.y = object->trans.y; + sp14.z = object->trans.z; + if(sp8 != 0) { + object->rot.x -= 0.05f*sp8; + } else { + object->rot.x *= 0.8f; + if(object->rot.x < 0.01f) { + object->rot.x = 0; + } + } + if(sp9 != 0) { + object->rot.z -= 0.05f*sp9; + } else { + object->rot.z *= 0.8f; + if(object->rot.z < 0.01f) { + object->rot.z = 0; + } + } + if(object->rot.x < -30.0f) { + object->rot.x = -30.0f; + } + if(object->rot.x > 30.0f) { + object->rot.x = 30.0f; + } + if(object->rot.z < -30.0f) { + object->rot.z = -30.0f; + } + if(object->rot.z > 30.0f) { + object->rot.z = 30.0f; + } + object->rot.y = 180; + fn_2_6AF4(object); + fn_2_A940(object); + temp_r31->unk70 = 0; +} + +void fn_2_65FC(omObjData *object) +{ + M401WorkPlayer *temp_r31; + M401WorkPlayer *temp_r30; + s32 temp_r29; + omObjData *temp_r28; + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f26; + float temp_f24; + + Vec sp24; + Vec sp18; + Vec spC; + temp_r30 = object->data; + temp_f26 = temp_r30->unk58.z; + sp24.x = sind(temp_r30->unk64); + sp24.y = cosd(temp_r30->unk64); + sp24.z = temp_r30->unk88+lbl_2_data_0; + VECNormalize(&sp24, &sp18); + sp24.x *= temp_f26; + sp24.y *= temp_f26; + sp24.z -= lbl_2_data_0; + temp_f31 = temp_r30->unkC.x+sp24.x; + temp_f30 = temp_r30->unkC.y+sp24.y; + temp_f29 = temp_r30->unkC.z+sp24.z; + if(temp_f31 < -400) { + temp_f31 = -400; + } + if(temp_f31 > 400) { + temp_f31 = 400; + } + if(temp_f30 < -300) { + temp_f30 = -300; + } + if(temp_f30 > 300) { + temp_f30 = 300; + } + if(temp_f29 < 400) { + temp_f29 = 400; + } + if(temp_f29 > 800) { + temp_f29 = 800; + } + for(temp_r29=0; temp_r29<4; temp_r29++) { + if(lbl_2_bss_118[temp_r29] != object) { + temp_r28 = lbl_2_bss_118[temp_r29]; + temp_r31 = temp_r28->data; + temp_f24 = VECMagPoint(temp_f31-temp_r31->unkC.x, temp_f30-temp_r31->unkC.y, temp_f29-temp_r31->unkC.z); + if(temp_f24 < 127.0f) { + spC.x = temp_f31-temp_r31->unkC.x; + spC.y = temp_f30-temp_r31->unkC.y; + spC.z = temp_f29-temp_r31->unkC.z; + VECNormalize(&spC, &spC); + temp_f31 = temp_r31->unkC.x+127.0f*spC.x; + temp_f30 = temp_r31->unkC.y+127.0f*spC.y; + temp_f29 = temp_r31->unkC.z+127.0f*spC.z; + } + } + } + if(temp_f31 < -400) { + temp_f31 = -400; + } + if(temp_f31 > 400) { + temp_f31 = 400; + } + if(temp_f30 < -300) { + temp_f30 = -300; + } + if(temp_f30 > 300) { + temp_f30 = 300; + } + if(temp_f29 < 400) { + temp_f29 = 400; + } + if(temp_f29 > 800) { + temp_f29 = 800; + } + temp_r30->unkC.x = temp_f31; + temp_r30->unkC.y = temp_f30; + temp_r30->unkC.z = temp_f29; +} + +void fn_2_6AF4(omObjData *object) +{ + M401WorkPlayer *temp_r31 = object->data; + temp_r31->unk18.x = temp_r31->unkC.x+lbl_2_bss_60.x; + temp_r31->unk18.y = object->trans.y; + temp_r31->unk18.z = 80+object->trans.z; +} + +void fn_2_6B44(omObjData *object) +{ + M401WorkPlayer *temp_r30; + float temp_f31; + float temp_f30; + float temp_f29; + temp_r30 = object->data; + temp_f31 = 80.0*sind(object->rot.y+180.0f); + temp_f29 = 80.0*-cosd(object->rot.y); + temp_f30 = 80.0*sind(object->rot.x); + temp_r30->unk18.x = object->trans.x+temp_f31; + temp_r30->unk18.y = object->trans.y+temp_f30; + temp_r30->unk18.z = object->trans.z+temp_f29; +} + +omObjData *fn_2_792C(omObjData *object); + +void fn_2_6C94(omObjData *object, s8 *x, s8 *y, u16 *btn) +{ + M401WorkPlayer *temp_r31; + s32 temp_r30; + omObjData *temp_r28; + s32 temp_r27; + u16 temp_r26 = 0; + float temp_f31; + float temp_f30; + float temp_f29; + s16 sp50[][8] = { + 0, 2, 0, 2, 0, 2, 0, 2, + 0, 2, 0, 2, 0, 0, 0, 2, + 0, 0, 0, 2, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + s16 sp18[] = { + 50, 125, 200, 245 + }; + s16 sp10[] = { + 75, 150, 200, 250 + }; + s16 sp8[] = { + 9, 6, 4, 2 + }; + temp_r31 = object->data; + *x = *y = 0; + *btn = 0; + if(temp_r31->unk7C == 0) { + temp_r31->unk7E = sp50[GWPlayerCfg[temp_r31->unk4].diff][frand() & 0x7]; + temp_r31->unk7C = (frand()%60)+30; + temp_r31->unk92 = 0; + if((u32)frand8() < sp18[GWPlayerCfg[temp_r31->unk4].diff]) { + temp_r31->unk92 |= 1; + } + if((u32)frand8() < sp10[GWPlayerCfg[temp_r31->unk4].diff]) { + temp_r31->unk92 |= 2; + } + } else { + temp_r31->unk7C--; + } + temp_r26 = temp_r31->unk92; + sp44.x = sp44.y = sp44.z = 0; + switch(temp_r31->unk7E) { + case 0: + temp_r28 = fn_2_792C(object); + if(temp_r28) { + sp44.x = temp_r28->trans.x-object->trans.x; + sp44.y = temp_r28->trans.y-object->trans.y; + sp44.z = temp_r28->trans.z-object->trans.z; + } + break; + + case 2: + break; + } + if(temp_r26 & 0x1) { + sp38.x = object->trans.x; + sp38.y = object->trans.y; + sp38.z = object->trans.z; + for(temp_r27=0; temp_r27<4; temp_r27++) { + if(lbl_2_bss_118[temp_r27] != object) { + sp20.x = lbl_2_bss_118[temp_r27]->trans.x; + sp20.y = lbl_2_bss_118[temp_r27]->trans.y; + sp20.z = lbl_2_bss_118[temp_r27]->trans.z; + VECSubtract(&sp38, &sp20, &sp2C); + temp_f31 = VECMag(&sp2C)-110.0f; + if(temp_f31 < 110.0f) { + temp_f31 -= 60.0f; + if(temp_f31 < 0.01f) { + temp_f31 = 0.01; + } + VECScale(&sp2C, &sp2C, 1.0f/temp_f31); + VECAdd(&sp44, &sp2C, &sp44); + } + } + } + } + if(temp_r26 & 0x2) { + for(temp_r30=0; temp_r30<4; temp_r30++) { + if(lbl_2_bss_E4[temp_r30]->func != NULL) { + sp20.x = lbl_2_bss_E4[temp_r30]->trans.x; + sp20.y = lbl_2_bss_E4[temp_r30]->trans.y; + sp20.z = lbl_2_bss_E4[temp_r30]->trans.z; + VECSubtract(&sp38, &sp20, &sp2C); + temp_f31 = VECMag(&sp2C)-110.0f; + if(temp_f31 < 110.0f) { + temp_f31 -= 60.0f; + if(temp_f31 < 0.01f) { + temp_f31 = 0.01; + } + VECScale(&sp2C, &sp2C, 1.0f/temp_f31); + VECAdd(&sp44, &sp2C, &sp44); + } + } + } + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(lbl_2_bss_100[temp_r30]->func != NULL) { + sp20.x = lbl_2_bss_100[temp_r30]->trans.x; + sp20.y = lbl_2_bss_100[temp_r30]->trans.y; + sp20.z = lbl_2_bss_100[temp_r30]->trans.z; + VECSubtract(&sp38, &sp20, &sp2C); + temp_f31 = VECMag(&sp2C)-110.0f; + if(temp_f31 < 110.0f) { + temp_f31 -= 60.0f; + if(temp_f31 < 0.01f) { + temp_f31 = 0.01; + } + VECScale(&sp2C, &sp2C, 1.0f/temp_f31); + VECAdd(&sp44, &sp2C, &sp44); + } + } + } + sp20.x = lbl_2_bss_FC->trans.x; + sp20.y = lbl_2_bss_FC->trans.y; + sp20.z = lbl_2_bss_FC->trans.z; + VECSubtract(&sp38, &sp20, &sp2C); + sp2C.x = 0; + temp_f31 = VECMag(&sp2C)-220.0f; + if(temp_f31 < 220.0f) { + temp_f31 -= 160.0f; + if(temp_f31 < 0.01f) { + temp_f31 = 0.01; + } + VECScale(&sp2C, &sp2C, 1.0f/temp_f31); + VECAdd(&sp44, &sp2C, &sp44); + } + } + + if(sp44.z < 0.0f) { + if(temp_r31->unk90 == 0) { + *btn |= 0x100; + temp_r31->unk90 = (frand()%sp8[GWPlayerCfg[temp_r31->unk4].diff])+3; + } else { + temp_r31->unk90--; + } + } + sp44.z = 0; + temp_f30 = VECMag(&sp44); + temp_f30 *= 0.2f; + temp_f29 = atan2d(sp44.y, sp44.x); + if(temp_f30 > 72.0f) { + temp_f30 = 72.0f; + } + if(temp_f30 < 10.0f) { + temp_f30 = 0.0f; + } + *x = temp_f30*cosd(temp_f29); + *y = temp_f30*sind(temp_f29); +} + +s32 fn_2_AC2C(Vec *pos, float dist, omObjData **newobj); + +s32 fn_2_7640(omObjData *object, omObjData **newobj) +{ + Vec spC; + spC.x = object->trans.x; + spC.y = object->trans.y; + spC.z = object->trans.z-100.0f; + return fn_2_AC2C(&spC, 270.0f, newobj); +} + +void fn_2_76AC(omObjData *object, s32 arg1) +{ + M401WorkPlayer *temp_r31; + if(arg1) { + temp_r31 = object->data; + temp_r31->unk7E = 1; + temp_r31->unk7C = 5; + switch(arg1) { + case 1: + temp_r31->unk80 = 180.0+atan2d(temp_r31->unk54->trans.x-object->trans.x, temp_r31->unk54->trans.y-object->trans.y); + break; + + case 2: + if(temp_r31->unkC.y > temp_r31->unk54->trans.y) { + temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + } else { + temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + } + break; + + case 3: + if(temp_r31->unkC.y > temp_r31->unk54->trans.y) { + temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + } else { + temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + } + break; + } + } +} + +omObjData *fn_2_792C(omObjData *object) +{ + omObjData **temp_r31; + s32 temp_r30; + omObjData *temp_r28; + float temp_f31, temp_f30, temp_f29; + float temp_f27, temp_f26; + temp_r31 = omGetGroupMemberListEx(HuPrcCurrentGet(), 1); + temp_f26 = 100000; + temp_r28 = NULL; + for(temp_r30=0; temp_r30<28; temp_r30++) { + if(temp_r31[temp_r30] == NULL || temp_r31[temp_r30]->trans.z-lbl_2_bss_60.z > 850.0f || temp_r31[temp_r30]->trans.z-lbl_2_bss_60.z < -2500.0f) { + continue; + } + temp_f30 = temp_r31[temp_r30]->trans.x-object->trans.x; + temp_f29 = temp_r31[temp_r30]->trans.y-object->trans.y; + temp_f31 = temp_r31[temp_r30]->trans.z-object->trans.z; + temp_f31 *= 0.15f; + temp_f27 = VECMagPoint(temp_f30, temp_f29, temp_f31); + if(temp_f27 < temp_f26 && temp_f27 < 2000.0f) { + temp_f26 = temp_f27; + temp_r28 = temp_r31[temp_r30]; + } + } + return temp_r28; +} + +void fn_2_A914(s32 player); + +void fn_2_7C3C(omObjData *object) +{ + M401WorkPlayer *temp_r31 = object->data; + temp_r31->unk78 = 1; + temp_r31->unk7A = 120; + CharModelMotionShiftSet(temp_r31->unk86, object->motion[7], 0, 10, 0); + fn_2_A914(temp_r31->unk4); +} + +typedef struct work_7CB4 { + s16 unk0; + Vec unk4; + Vec unk10; + s16 unk1C; + s16 unk1E; + s16 unk20; + s16 unk22; + s16 unk24; + float unk28; + s16 unk2C; + s16 unk2E; + float unk30; +} Work7CB4; + +void fn_2_7E6C(omObjData *object); + +void fn_2_7CB4(omObjData *object) +{ + Work7CB4 *temp_r31; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work7CB4), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + temp_r31->unk10.x = 0; + temp_r31->unk10.y = 200; + temp_r31->unk10.z = 0; + temp_r31->unk1E = 0; + temp_r31->unk22 = 100; + temp_r31->unk4.x = 0; + temp_r31->unk4.y = 200; + temp_r31->unk24 = 0; + temp_r31->unk28 = 0; + object->model[0] = Hu3DModelCreateFile(0x20000B); + Hu3DModelClusterAttrSet(object->model[0], 0, 0xC0000001); + Hu3DModelAttrSet(object->model[0], 0x1); + Hu3DModelAmbSet(object->model[0], 0.6f, 0.6f, 0.6f); + Hu3DModelShadowSet(object->model[0]); + temp_r31->unk0 = 0; + temp_r31->unk22 = 180; + omSetTra(object, 0, 200, 200); + omSetRot(object, 0, 180, 0); + object->func = fn_2_7E6C; +} + +void fn_2_7E6C(omObjData *object) +{ + Work7CB4 *temp_r31; + temp_r31 = object->data; + switch(temp_r31->unk0) { + case 0: + if(--temp_r31->unk22 == 0) { + temp_r31->unk0 = 1; + } + break; + + case 1: + object->trans.z += -11.333333f; + break; + } +} + +s32 gap_04_00000328_data = 0x20000C; +s32 lbl_2_data_32C[] = { + 4, 6 +}; +Vec lbl_2_data_334[][10] = { + { + { 1400, -600, -21500 }, + { -100, 100, -22000 }, + { -1000, -200, -23000 }, + { -2000, -200, -23500 }, + { -2200, -200, -23500 }, + { -2300, -200, -23500 }, + }, + { + { -1000, 500, -29500 }, + { -300, 300, -31500 }, + { 300, -150, -32500 }, + { -200, 250, -34000 }, + { -300, 300, -35000 }, + { -600, 300, -36000 }, + { 1000, -180, -40000 }, + { 1000, -180, -40000 }, + } + +}; + +void fn_2_7EDC(s32 arg0, s32 arg1, float arg2, Vec *arg3) +{ + Vec *temp_r31; + Vec *temp_r30; + Vec *temp_r29; + Vec *temp_r28; + float temp_f31 = arg2*arg2; + if(arg1 == 0) { + temp_r31 = &lbl_2_data_334[arg0][arg1]; + temp_r30 = &lbl_2_data_334[arg0][arg1+1]; + temp_r29 = &lbl_2_data_334[arg0][arg1+2]; + temp_r28 = &lbl_2_data_334[arg0][arg1+3]; + arg3->x = (0.5f * ((2.0f * temp_r31->x) + ((temp_f31 * (temp_r29->x + (temp_r31->x - (2.0f * temp_r30->x)))) + (arg2 * (((-3.0f * temp_r31->x) + (4.0f * temp_r30->x)) - temp_r29->x))))); + arg3->y = (0.5f * ((2.0f * temp_r31->y) + ((temp_f31 * (temp_r29->y + (temp_r31->y - (2.0f * temp_r30->y)))) + (arg2 * (((-3.0f * temp_r31->y) + (4.0f * temp_r30->y)) - temp_r29->y))))); + arg3->z = (0.5f * ((2.0f * temp_r31->z) + ((temp_f31 * (temp_r29->z + (temp_r31->z - (2.0f * temp_r30->z)))) + (arg2 * (((-3.0f * temp_r31->z) + (4.0f * temp_r30->z)) - temp_r29->z))))); + } else { + temp_r31 = &lbl_2_data_334[arg0][arg1-1]; + temp_r30 = &lbl_2_data_334[arg0][arg1]; + temp_r29 = &lbl_2_data_334[arg0][arg1+1]; + temp_r28 = &lbl_2_data_334[arg0][arg1+2]; + arg3->x = (0.5f * ((2.0f * temp_r30->x) + ((arg2 * (-temp_r31->x + temp_r29->x)) + ((arg2 * (temp_f31 * (temp_r28->x + ((-temp_r31->x + (3.0f * temp_r30->x)) - (3.0f * temp_r29->x))))) + (temp_f31 * (((4.0f * temp_r29->x) + ((2.0f * temp_r31->x) - (5.0f * temp_r30->x))) - temp_r28->x)))))); + arg3->y = (0.5f * ((2.0f * temp_r30->y) + ((arg2 * (-temp_r31->y + temp_r29->y)) + ((arg2 * (temp_f31 * (temp_r28->y + ((-temp_r31->y + (3.0f * temp_r30->y)) - (3.0f * temp_r29->y))))) + (temp_f31 * (((4.0f * temp_r29->y) + ((2.0f * temp_r31->y) - (5.0f * temp_r30->y))) - temp_r28->y)))))); + arg3->z = (0.5f * ((2.0f * temp_r30->z) + ((arg2 * (-temp_r31->z + temp_r29->z)) + ((arg2 * (temp_f31 * (temp_r28->z + ((-temp_r31->z + (3.0f * temp_r30->z)) - (3.0f * temp_r29->z))))) + (temp_f31 * (((4.0f * temp_r29->z) + ((2.0f * temp_r31->z) - (5.0f * temp_r30->z))) - temp_r28->z)))))); + } +} + +s32 fn_2_8450(omObjData *object) +{ + Work7CB4 *temp_r31; + Vec *temp_r29; + Vec *temp_r28; + float temp_f29; + Vec sp18; + Vec spC; + temp_r31 = object->data; + while(1) { + if(temp_r31->unk2E == lbl_2_data_32C[temp_r31->unk2C]) { + return 1; + } + temp_r28 = &lbl_2_data_334[temp_r31->unk2C][temp_r31->unk2E+1]; + temp_r29 = &lbl_2_data_334[temp_r31->unk2C][temp_r31->unk2E]; + sp18.x = temp_r28->x - temp_r29->x; + sp18.y = temp_r28->y - temp_r29->y; + sp18.z = temp_r28->z - temp_r29->z; + temp_f29 = VECMagPoint(sp18.x, sp18.y, sp18.z); + if(temp_r31->unk30 > temp_f29) { + temp_r31->unk30 -= temp_f29; + temp_r31->unk2E++; + continue; + } + break; + } + fn_2_7EDC(temp_r31->unk2C, temp_r31->unk2E, temp_r31->unk30/temp_f29, &spC); + sp18.x = spC.x-object->trans.x; + sp18.y = spC.y-object->trans.y; + sp18.z = spC.z-object->trans.z; + VECNormalize(&sp18, &sp18); + object->trans.x = spC.x; + object->trans.y = spC.y; + object->trans.z = spC.z; + object->rot.y = atan2d(sp18.x, sp18.z); + object->rot.x = -90.0f*sp18.y; + return 0; +} + +s32 fn_2_873C(omObjData *object) +{ + Work7CB4 *temp_r30; + Vec sp8; + temp_r30 = object->data; + if(object->trans.x > -400.0f + && object->trans.x < 400.0f + && object->trans.z-lbl_2_bss_60.z < 300.0f + && object->trans.y > -300.0f + && object->trans.y < 300.0f) { + if(temp_r30->unk1E == 0) { + if(temp_r30->unk20 != 0) { + temp_r30->unk20--; + sp8.x = object->trans.x; + sp8.y = object->trans.y; + sp8.z = object->trans.z-lbl_2_bss_60.z; + fn_2_10A88(&sp8, 1); + return 1; + } + + } else { + temp_r30->unk1E--; + } + } + return 0; +} + +void fn_2_8968(omObjData *object); + +void fn_2_8868(omObjData *object) +{ + Work7CB4 *temp_r31; + temp_r31 = object->data; + if(lbl_2_bss_60.z < -20800.0f) { + Hu3DModelAttrReset(object->model[0], 1); + temp_r31->unk2C = 0; + temp_r31->unk2E = 0; + temp_r31->unk30 = 0; + temp_r31->unk1E = ((frand()%10)+13)*0.43478262f; + temp_r31->unk20 = 2; + fn_2_8450(object); + object->func = fn_2_8968; + } +} + +void fn_2_8B58(omObjData *object); + +void fn_2_8968(omObjData *object) +{ + Work7CB4 *temp_r29; + temp_r29 = object->data; + temp_r29->unk30 += 25.875; + if(fn_2_873C(object)) { + temp_r29->unk1E = ((frand()%15)+22)*0.43478262f; + } + if(fn_2_8450(object)) { + Hu3DModelAttrSet(object->model[0], 1); + object->func = fn_2_8B58; + } +} + +void fn_2_8C58(omObjData *object); + +void fn_2_8B58(omObjData *object) +{ + Work7CB4 *temp_r31; + temp_r31 = object->data; + if(lbl_2_bss_60.z < -30500.0f) { + Hu3DModelAttrReset(object->model[0], 1); + temp_r31->unk2C = 1; + temp_r31->unk2E = 0; + temp_r31->unk30 = 0; + temp_r31->unk1E = ((frand()%60)+50)*0.43478262f; + temp_r31->unk20 = 3; + fn_2_8450(object); + object->func = fn_2_8C58; + } +} + +s32 lbl_2_data_424[] = { + 50, 95 +}; + +void fn_2_8C58(omObjData *object) +{ + Work7CB4 *temp_r29; + temp_r29 = object->data; + temp_r29->unk30 += 25.875; + if(fn_2_873C(object)) { + temp_r29->unk1E = ((frand()%15)+lbl_2_data_424[lbl_2_bss_14++])*0.43478262f; + } + if(fn_2_8450(object)) { + Hu3DModelAttrSet(object->model[0], 1); + object->func = NULL; + } +} + +typedef struct work_8E74 { + Vec unk0; + Vec unkC; + Vec unk18; + Vec unk24; + float unk30; + Vec unk34; +} Work8E74; + +void fn_2_9298(omObjData *object); + +void fn_2_8E74(omObjData *object) +{ + Work8E74 *temp_r31; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work8E74), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + temp_r31->unk24.x = 6; + temp_r31->unk24.z = 90; + temp_r31->unk24.y = 100; + object->model[0] = Hu3DModelCreateFile(0x20000D); + object->motion[0] = Hu3DJointMotionFile(object->model[0], 0x200010); + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x40000001); + Hu3DModelAttrSet(object->model[0], 1); + omSetTra(object, -1000, 0, -23000); + omSetRot(object, 0, 90, 0); + temp_r31->unkC.x = 1000.0f-object->trans.x; + temp_r31->unkC.y = temp_r31->unk24.y-object->trans.y; + temp_r31->unkC.z = 0; + temp_r31->unk34.x = 1000; + temp_r31->unk34.y = 30; + temp_r31->unk34.z = 360.0f+((1.0f/255.0f)*(u32)frand8()); + temp_r31->unk30 = VECMagPoint(temp_r31->unkC.x, temp_r31->unkC.y, temp_r31->unkC.z); + VECNormalize(&temp_r31->unkC, &temp_r31->unk0); + Hu3DModelShadowSet(object->model[0]); + object->work[3] = 2; + object->func = fn_2_9298; +} + +void fn_2_91AC(omObjData *object, Vec *pos) +{ + Work8E74 *temp_r30; + temp_r30 = object->data; + temp_r30->unk18 = *pos; + temp_r30->unk34.z = (1.0f/255.0f)*(360.0f*(u32)frand8()); + Hu3DModelAttrReset(object->model[0], 1); + omSetTra(object, pos->x, pos->y, pos->z); + object->work[2] = HuAudFXEmiterPlay(1284, &pos); + object->func = fn_2_9298; +} + +void fn_2_9298(omObjData *object) +{ + Work8E74 *temp_r31; + float temp_f29; + Vec spC; + temp_r31 = object->data; + object->trans.x = temp_r31->unk18.x+1000.0f*sind(temp_r31->unk34.z); + temp_f29 = (temp_r31->unk34.y/temp_r31->unk34.x)*sqrtf((temp_r31->unk34.x*temp_r31->unk34.x)-(object->trans.x*object->trans.x)); + if(temp_r31->unk34.z >= 90.0f && temp_r31->unk34.z <= 270.0f) { + temp_f29 = -temp_f29; + } + object->trans.z = temp_r31->unk18.z+temp_f29; + temp_r31->unk34.z += 0.6f+(0.6f*fabs(cosd(temp_r31->unk34.z))); + if(temp_r31->unk34.z >= 360.0f) { + temp_r31->unk34.z -= 360.0f; + } + omSetRot(object, 0, 90.0f+temp_r31->unk34.z , 0); + spC.x = object->trans.x; + spC.y = object->trans.y; + spC.z = object->trans.z; + HuAudFXEmiterUpDate(object->work[2], &spC); + if(object->trans.z > lbl_2_bss_6C.z-220.0f) { + Hu3DModelAttrSet(object->model[0], 1); + HuAudFXStop(object->work[2]); + object->func = NULL; + } +} + +void fn_2_979C(omObjData *object); + +void fn_2_95E4(omObjData *object) +{ + object->model[0] = Hu3DModelCreateFile(0x200018); + object->motion[0] = Hu3DJointMotionFile(object->model[0], 0x200019); + object->motion[1] = Hu3DJointMotionFile(object->model[0], 0x20001A); + omSetTra(object, 3000, 0, -37000); + omSetRot(object, 0, 270, 0); + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x1); + Hu3DModelAttrSet(object->model[0], 0x40000001); + object->work[3] = 3; + Hu3DModelShadowSet(object->model[0]); + object->func = fn_2_979C; +} + +void fn_2_9734(s32 flag) +{ + if(flag) { + Hu3DModelAttrReset(lbl_2_bss_FC->model[0], 1); + } else { + Hu3DModelAttrSet(lbl_2_bss_FC->model[0], 1); + } +} + +void fn_2_988C(omObjData *object); + +void fn_2_979C(omObjData *object) +{ + if(lbl_2_bss_60.z < -19000.0f) { + fn_2_9734(1); + omSetTra(object, -2500, -800, -21000); + omSetRot(object, 0, 125, 0); + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x40000001); + object->func = fn_2_988C; + } +} + +void fn_2_99A4(omObjData *object); + +void fn_2_988C(omObjData *object) +{ + object->trans.x += 2.3f*(26.0*sind(object->rot.y)); + object->trans.z += 2.3f*(26.0*cosd(object->rot.y)); + if(object->trans.x > 6000.0f) { + fn_2_9734(0); + object->func = fn_2_99A4; + } +} + +void fn_2_9B90(omObjData *object); + +void fn_2_99A4(omObjData *object) +{ + float temp_f31; + if(lbl_2_bss_60.z <= -36200.0f+((1.0f/255.0f)*(200.0f*(u32)frand8()))) { + temp_f31 = -250.0f+((1.0f/255.0f)*(500.0f*(u32)frand8())); + fn_2_9734(1); + omSetTra(object, 3000, temp_f31, -37000); + omSetRot(object, 0, 270, 0); + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x40000001); + object->func = fn_2_9B90; + lbl_2_bss_78.x = object->trans.x; + lbl_2_bss_78.y = object->trans.y; + lbl_2_bss_78.z = object->trans.z; + lbl_2_bss_8C = HuAudFXEmiterPlay(1286, &lbl_2_bss_78); + } +} + +void fn_2_9B90(omObjData *object) +{ + object->trans.x += 2.3f*(17.0*sind(object->rot.y)); + object->trans.z += 2.3f*(17.0*cosd(object->rot.y)); + lbl_2_bss_78.x = object->trans.x; + lbl_2_bss_78.y = object->trans.y; + lbl_2_bss_78.z = object->trans.z; + HuAudFXEmiterUpDate(lbl_2_bss_8C, &lbl_2_bss_78); + if(object->trans.x <= -3000.0f) { + fn_2_9734(0); + object->func = NULL; + HuAudFXStop(lbl_2_bss_8C); + } +} + +typedef struct work_a318 { + Vec unk0; + s16 unkC; +} Work9E28; + +s32 lbl_2_data_42C[] = { + 0x20001C, + 0x20001D +}; + +void fn_2_9D00(Process *objman) +{ + omObjData *temp_r31; + s32 temp_r30; + s32 temp_r29; + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r31 = omAddObjEx(objman, 1130, 1, 2, -1, NULL); + lbl_2_bss_E4[temp_r29] = temp_r31; + temp_r31->model[0] = Hu3DModelCreateFile(0x20001B); + for(temp_r30=0; temp_r30<2; temp_r30++) { + temp_r31->motion[temp_r30] = Hu3DJointMotionFile(temp_r31->model[0], lbl_2_data_42C[temp_r30]); + } + Hu3DModelAttrSet(temp_r31->model[0], 1); + temp_r31->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work9E28), MEMORY_DEFAULT_NUM); + Hu3DModelShadowSet(temp_r31->model[0]); + temp_r31->work[3] = 1; + } +} + +void fn_2_A318(omObjData *object); + + +void fn_2_9E28(float arg1, float arg2) +{ + s32 temp_r31; + Work9E28 *temp_r30; + float temp_f31; + float temp_f30; + float temp_f29; + temp_f30 = (arg2-arg1)/4; + temp_f31 = arg1; + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = lbl_2_bss_E4[temp_r31]->data; + Hu3DModelAttrReset(lbl_2_bss_E4[temp_r31]->model[0], 1); + temp_f29 = -400.0f+((1.0f/255.0f)*(800.0f*(u32)frand8())); + temp_r30->unk0.x = -250.0f+((1.0f/255.0f)*(500.0f*(u32)frand8())); + omSetTra(lbl_2_bss_E4[temp_r31], temp_f29, temp_r30->unk0.x+lbl_2_bss_60.y, temp_f31); + Hu3DMotionSet(lbl_2_bss_E4[temp_r31]->model[0], lbl_2_bss_E4[temp_r31]->motion[0]); + Hu3DModelAttrSet(lbl_2_bss_E4[temp_r31]->model[0], 0x40000001); + temp_f31 += temp_f30; + temp_r30->unkC = (frand()%30)+30; + temp_r30->unk0.z = 0; + lbl_2_bss_E4[temp_r31]->func = fn_2_A318; + } +} + +omObjData *fn_2_A0B0(omObjData *object) +{ + omObjData *temp_r31; + s32 temp_r30; + omObjData *temp_r29; + M401WorkPlayer *spC; + + float temp_f27; + float temp_f26; + temp_f26 = 999999; + for(temp_r30=0; temp_r30<4; temp_r30++) { + float temp_f31; + float temp_f30; + float temp_f29; + temp_r31 = lbl_2_bss_118[temp_r30]; + spC = temp_r31->data; + temp_f31 = temp_r31->trans.x - object->trans.x; + temp_f30 = temp_r31->trans.y - object->trans.y; + temp_f29 = 0.4f*(temp_r31->trans.z - object->trans.z); + temp_f27 = VECMagPoint(temp_f31, temp_f30, temp_f29); + if(temp_f27 < temp_f26) { + temp_r29 = lbl_2_bss_118[temp_r30]; + temp_f26 = temp_f27; + } + } + return temp_r29; +} + +void fn_2_A318(omObjData *object) +{ + Work9E28 *temp_r30; + omObjData *temp_r28; + M401WorkPlayer *sp10; + temp_r30 = object->data; + if(0.0f == temp_r30->unk0.z) { + if(temp_r30->unkC == 0) { + temp_r28 = fn_2_A0B0(object); + sp10 = temp_r28->data; + temp_r30->unk0.y = atan2d(temp_r28->trans.y - object->trans.y, temp_r28->trans.x - object->trans.x); + temp_r30->unk0.z = 8.0f+((1.0f/255.0f)*((9.0f*(u32)frand8()))); + Hu3DMotionSet(object->model[0], object->motion[1]); + Hu3DModelAttrReset(object->model[0], 0x40000001); + lbl_2_bss_78.x = object->trans.x; + lbl_2_bss_78.y = object->trans.y; + lbl_2_bss_78.z = object->trans.z; + HuAudFXEmiterPlay(1282, &lbl_2_bss_78); + } else { + temp_r30->unkC--; + temp_r30->unk0.x -= 2.5f; + } + } else { + temp_r30->unk0.x = temp_r30->unk0.x+(temp_r30->unk0.z*sind(temp_r30->unk0.y)); + object->trans.x += temp_r30->unk0.z*cosd(temp_r30->unk0.y); + temp_r30->unk0.z *= 0.94f; + if(temp_r30->unk0.z < 0.1f) { + temp_r30->unk0.z = 0; + temp_r30->unkC = (frand()%30)+25; + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x40000001); + } + } + if(temp_r30->unk0.x < -300.0f) { + temp_r30->unk0.x = -300.0f; + } + if(temp_r30->unk0.x > 300.0f) { + temp_r30->unk0.x = 300.0f; + } + if(object->trans.x < -400.0f) { + object->trans.x = -400.0f; + } + if(object->trans.x > 400.0f) { + object->trans.x = 400.0f; + } + omSetTra(object, object->trans.x, temp_r30->unk0.x+lbl_2_bss_60.y, object->trans.z); + if(object->trans.z > lbl_2_bss_6C.z-160.0f) { + Hu3DModelAttrSet(object->model[0], 1); + object->func = NULL; + } +} + +void fn_2_A8A4(omObjData *object, float x, float y, float z) +{ + omSetTra(object, lbl_2_bss_60.x+x, lbl_2_bss_60.y+y, lbl_2_bss_60.z+z); +} + +void fn_2_A914(s32 player) +{ + HuAudPlayerVoicePlay(player, 301); +} + +void fn_2_A940(omObjData *object) +{ + +} + +s32 fn_2_AC2C(Vec *pos, float dist, omObjData **newobj) +{ + } \ No newline at end of file From c7dd48fd3a063eba8ea50b2568c8c0094120e1d0 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 28 Apr 2024 21:29:31 -0500 Subject: [PATCH 02/22] Match fn_2_A940 --- src/REL/m401Dll/main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index 3e2c2b5c..56aeda14 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -2590,6 +2590,28 @@ void fn_2_A914(s32 player) void fn_2_A940(omObjData *object) { + Vec spC; + omObjData *sp8; + M401WorkPlayer *temp_r28; + s32 temp_r23; + temp_r28 = object->data; + if(temp_r28->unk78 != 0) { + return; + } + spC.x = object->trans.x; + spC.y = object->trans.y; + spC.z = object->trans.z; + if((temp_r23 = fn_2_AC2C(&spC, 90, &sp8)) != 0) { + if(temp_r23 == 1) { + omVibrate(temp_r28->unk4, 12, 4, 2); + } else if(temp_r23 == 3) { + omVibrate(temp_r28->unk4, 12, 4, 2); + } else { + omVibrate(temp_r28->unk4, 12, 12, 0); + } + fn_2_7C3C(object); + fn_2_1858(temp_r28->unk4, sp8->work[3]); + } } From 76690a0d5fcc4f9febd16e2d352267ee3082ec32 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 28 Apr 2024 22:30:34 -0500 Subject: [PATCH 03/22] Decompile more of m401dll --- include/REL/m401Dll.h | 1 + include/ext_math.h | 1 + src/REL/m401Dll/main.c | 203 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 205 insertions(+) diff --git a/include/REL/m401Dll.h b/include/REL/m401Dll.h index 89bdf388..4f218ffb 100644 --- a/include/REL/m401Dll.h +++ b/include/REL/m401Dll.h @@ -66,6 +66,7 @@ void fn_2_10710(void); void fn_2_1079C(void); omObjData *fn_2_10A88(Vec *arg0, s16 arg1); +void fn_2_141B0(void); 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 b69661ea..b9f396c8 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -12,6 +12,7 @@ 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 VECDistanceZY(a, b) sqrtf((((a)->z-(b)->z)*((a)->z-(b)->z))+(((a)->y-(b)->y)*((a)->y-(b)->y))) #define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z)) #define VECMagPoint(x, y, z) sqrtf(((x)*(x))+((y)*(y))+((z)*(z))) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index 56aeda14..d70036b7 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -2583,6 +2583,17 @@ void fn_2_A8A4(omObjData *object, float x, float y, float z) omSetTra(object, lbl_2_bss_60.x+x, lbl_2_bss_60.y+y, lbl_2_bss_60.z+z); } +s32 lbl_2_data_434[] = { + 0x12D, + 0x16D, + 0x1AD, + 0x1ED, + 0x22D, + 0x26D, + 0x2AD, + 0x2ED +}; + void fn_2_A914(s32 player) { HuAudPlayerVoicePlay(player, 301); @@ -2617,5 +2628,197 @@ void fn_2_A940(omObjData *object) s32 fn_2_AC2C(Vec *pos, float dist, omObjData **newobj) { + omObjData *temp_r30; + s32 temp_r29; + float temp_f20; + float temp_f19; + float temp_f18; + Work9E28 *sp70; + float sp6C; + *newobj = NULL; + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r30 = lbl_2_bss_E4[temp_r29]; + if(temp_r30->func != NULL) { + sp70 = temp_r30->data; + temp_f20 = VECMagPoint(pos->x-temp_r30->trans.x, pos->y-temp_r30->trans.y, pos->z-temp_r30->trans.z); + if(temp_f20 < sqrtf(1024.0f+(dist*dist))) { + *newobj = temp_r30; + return 1; + } + } + } + temp_r30 = lbl_2_bss_FC; + temp_f20 = VECDistanceZY(pos, &temp_r30->trans); + if(temp_f20 < sqrtf(6400.0f+(dist*dist)) + && temp_r30->trans.x < pos->x-(dist/2.0f) + && 1500.0f+temp_r30->trans.x > pos->x+(dist/2.0f)) { + *newobj = temp_r30; + return 2; + } + for(temp_r29=0; temp_r29<2; temp_r29++) { + if(lbl_2_bss_100[temp_r29]->func != NULL) { + temp_f19 = lbl_2_bss_100[temp_r29]->trans.x+(70.0*sind(lbl_2_bss_100[temp_r29]->rot.y)); + temp_f18 = lbl_2_bss_100[temp_r29]->trans.z+(70.0*cosd(lbl_2_bss_100[temp_r29]->rot.y)); + sp6C = lbl_2_bss_100[temp_r29]->trans.y-10.0f; + temp_f20 = VECMagPoint(pos->x-temp_f19, pos->y-sp6C, pos->z-temp_f18); + if(temp_f20 < sqrtf(4900.0f+(dist*dist))) { + *newobj = lbl_2_bss_100[temp_r29]; + return 3; + } + temp_f19 = lbl_2_bss_100[temp_r29]->trans.x; + temp_f18 = lbl_2_bss_100[temp_r29]->trans.z; + sp6C = lbl_2_bss_100[temp_r29]->trans.y-10.0f; + temp_f20 = VECMagPoint(pos->x-temp_f19, pos->y-sp6C, pos->z-temp_f18); + if(temp_f20 < sqrtf(4900.0f+(dist*dist))) { + *newobj = lbl_2_bss_100[temp_r29]; + return 3; + } + temp_f19 = lbl_2_bss_100[temp_r29]->trans.x+(70.0*sind(lbl_2_bss_100[temp_r29]->rot.y+180.0f)); + temp_f18 = lbl_2_bss_100[temp_r29]->trans.z+(70.0*cosd(lbl_2_bss_100[temp_r29]->rot.y+180.0f)); + sp6C = lbl_2_bss_100[temp_r29]->trans.y-10.0f; + temp_f20 = VECMagPoint(pos->x-temp_f19, pos->y-sp6C, pos->z-temp_f18); + if(temp_f20 < sqrtf(4410.0f+(dist*dist))) { + *newobj = lbl_2_bss_100[temp_r29]; + return 3; + } + } + } + return 0; +} + +void fn_2_D8CC(omObjData *object); + +void fn_2_BD90(omObjData *object) +{ + s32 temp_r27; + M401WorkPlayer *temp_r26; + switch(object->work[0]) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);; + object->work[0] = 1; + break; + + case 1: + if(!WipeStatGet()) { + object->work[0] = 2; + object->work[1] = 180; + } + break; + + case 2: + if(object->work[1] == 0) { + lbl_2_bss_C0 = MGSeqStartCreate(); + object->work[0] = 3; + lbl_2_bss_A4 = HuAudSeqPlay(68); + } else { + object->work[1]--; + } + break; + + case 3: + if(!MGSeqStatGet(lbl_2_bss_C0)) { + fn_2_AEC(1); + lbl_2_bss_120 = 1; + fn_2_1A38(lbl_2_bss_10C); + + lbl_2_bss_10C->func = fn_2_34B8; + for(temp_r27=0; temp_r27<4; temp_r27++) { + temp_r26 = lbl_2_bss_118[temp_r27]->data; + temp_r26->unk58.z = 0; + temp_r26->unkC.z = 800; + lbl_2_bss_118[temp_r27]->func = fn_2_5CC0; + object->trans.x = object->trans.y = object->trans.z = 0; + } + lbl_2_bss_108->func = fn_2_8868; + omDelObjEx(HuPrcCurrentGet(), object); + lbl_2_bss_114 = NULL; + lbl_2_bss_4->func = fn_2_D8CC; + } + + break; + } +} + +void fn_2_C130(omObjData *object) +{ + M401WorkPlayer *temp_r31; + s32 temp_r30; + LightData *temp_r28; + Vec sp14; + Vec sp8; + switch(object->work[0]) { + case 0: + if(!MGSeqStatGet(lbl_2_bss_C0)) { + object->work[0] = 1; + HuAudFXStop(lbl_2_bss_11C); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + WipeColorSet(255, 255, 255); + } + break; + + case 1: + if(WipeStatGet()) { + return; + } + Hu3DFogClear(); + temp_r28 = &Hu3DGlobalLight[0]; + temp_r28->color.r = 255; + temp_r28->color.g = 255; + temp_r28->color.b = 255; + sp14.x = 0; + sp14.y = 2500; + sp14.z = 1000; + sp8.x = 0; + sp8.y = 1030; + sp8.z = 0; + Hu3DGLightPosAimSetV(lbl_2_bss_A8, &sp14, &sp8); + lbl_2_data_30.x = 0; + lbl_2_data_30.y = 2500; + lbl_2_data_30.z = 1000; + lbl_2_data_48.x = 0; + lbl_2_data_48.y = 1030; + lbl_2_data_48.z = 0; + Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); + HuAudAUXVolSet(-1, -1); + fn_2_2ED0(lbl_2_bss_10C); + for(temp_r30=0; temp_r30<4; temp_r30++) { + temp_r31 = lbl_2_bss_118[temp_r30]->data; + temp_r31->unk50->work[0] = 1; + temp_r31->unk6C = 0; + CharModelMotionSet(((M401WorkPlayer *)(lbl_2_bss_118[temp_r30]->data))->unk86, lbl_2_bss_118[temp_r30]->motion[4]); + Hu3DModelAttrReset(lbl_2_bss_118[temp_r30]->model[0], 0x40000001); + lbl_2_bss_118[temp_r30]->func = fn_2_48A0; + Hu3DModelAmbSet(lbl_2_bss_118[temp_r30]->model[0], 0.7f, 0.7f, 0.7f); + omSetTra(lbl_2_bss_118[temp_r30], -225.0f+(temp_r30*150), 740, 400); + omSetRot(lbl_2_bss_118[temp_r30], 0, 0, 0); + if(temp_r31->unk68) { + if(lbl_2_bss_BA == 1) { + temp_r31->unk0 = 10; + temp_r31->unk58.x = 13; + } else { + temp_r31->unk58.x = 10; + temp_r31->unk0 = 6; + } + OSReport("GetCoin:%d\n", temp_r30); + GWPlayerCoinWinSet(temp_r30, 10); + } else { + temp_r31->unk58.x = 10; + temp_r31->unk0 = 6; + } + } + fn_2_26E0(lbl_2_bss_10C); + object->work[0] = 2; + lbl_2_bss_F4->work[0] = 1; + fn_2_141B0(); + lbl_2_bss_10C->func = fn_2_3838; + lbl_2_bss_11C = HuAudFXPlay(1280); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + omDelObjEx(HuPrcCurrentGet(), lbl_2_bss_C8); + break; + + case 2: + WipeStatGet() == 0; + break; + } } \ No newline at end of file From 023ce2ee8b1097826e9974de50a882b5797e6adc Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 29 Apr 2024 10:40:57 -0500 Subject: [PATCH 04/22] Finish m401dll/main.c --- config/GMPE01_00/rels/m401Dll/symbols.txt | 456 +++++++------- configure.py | 2 +- include/game/frand.h | 1 + src/REL/m401Dll/main.c | 729 +++++++++++++++++++++- 4 files changed, 932 insertions(+), 256 deletions(-) diff --git a/config/GMPE01_00/rels/m401Dll/symbols.txt b/config/GMPE01_00/rels/m401Dll/symbols.txt index 1f886c45..0b63df81 100644 --- a/config/GMPE01_00/rels/m401Dll/symbols.txt +++ b/config/GMPE01_00/rels/m401Dll/symbols.txt @@ -120,224 +120,224 @@ fn_2_14738 = .text:0x00014738; // type:function size:0x7C fn_2_147B4 = .text:0x000147B4; // type:function size:0x660 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_2_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_2_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_2_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_2_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_2_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_2_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_2_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_2_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_2_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_2_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_2_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_2_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_2_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_2_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_2_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_2_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_2_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_2_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_2_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_2_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_2_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_2_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_2_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_2_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_2_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_2_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_2_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_2_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_2_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_2_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_2_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_2_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_2_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_2_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_2_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_2_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_2_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_2_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_2_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_2_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_2_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_2_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_2_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_2_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_2_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_2_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_2_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_2_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_2_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_2_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_2_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_2_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_2_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_2_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_2_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_2_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_2_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_2_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_2_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_2_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_2_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_2_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_2_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_2_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_2_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_2_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_2_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_2_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_2_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_2_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_2_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_2_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_2_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_2_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_2_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_2_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_2_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_2_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_2_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_2_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_2_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_2_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_2_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_2_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_2_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_2_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_2_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_2_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_2_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_2_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_2_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_2_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_2_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_2_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_2_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_2_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_2_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_2_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_2_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_2_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_2_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 data:double -lbl_2_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 data:double -lbl_2_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_2_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_2_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_2_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_2_rodata_1DC = .rodata:0x000001DC; // type:object size:0x10 data:4byte -lbl_2_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_2_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_2_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_2_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_2_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_2_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_2_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_2_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double -lbl_2_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_2_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float -lbl_2_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_2_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_2_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_2_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float -lbl_2_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_2_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_2_rodata_230 = .rodata:0x00000230; // type:object size:0x8 data:double -lbl_2_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_2_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_2_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -lbl_2_rodata_250 = .rodata:0x00000250; // type:object size:0x8 data:double -lbl_2_rodata_258 = .rodata:0x00000258; // type:object size:0x8 data:double -lbl_2_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_2_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_2_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_2_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_2_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_2_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_2_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_2_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_2_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_2_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -lbl_2_rodata_288 = .rodata:0x00000288; // type:object size:0x8 data:double -lbl_2_rodata_290 = .rodata:0x00000290; // type:object size:0x40 data:2byte -lbl_2_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x8 data:2byte -lbl_2_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x8 data:2byte -lbl_2_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:2byte -lbl_2_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_2_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_2_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_2_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_2_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float -lbl_2_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 data:float -lbl_2_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_2_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_2_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_2_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_2_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_2_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_2_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_2_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_2_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_2_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_2_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_2_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_2_rodata_338 = .rodata:0x00000338; // type:object size:0x8 data:double -lbl_2_rodata_340 = .rodata:0x00000340; // type:object size:0x8 data:double -lbl_2_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_2_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_2_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_2_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_2_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_2_rodata_360 = .rodata:0x00000360; // type:object size:0x8 data:double -lbl_2_rodata_368 = .rodata:0x00000368; // type:object size:0x8 data:double -lbl_2_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_2_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_2_rodata_378 = .rodata:0x00000378; // type:object size:0x8 data:double -lbl_2_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_2_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_2_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_2_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_2_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_2_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_2_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_2_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x8 data:double -lbl_2_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_2_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_2_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_2_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_2_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_2_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_2_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_2_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_2_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_2_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 data:float -lbl_2_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 data:float -lbl_2_rodata_3D4 = .rodata:0x000003D4; // type:object size:0x4 data:float -lbl_2_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 data:float -lbl_2_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 data:float -lbl_2_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 data:float -lbl_2_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_2_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_2_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_2_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_2_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_2_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_2_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_2_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_2_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_2_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_2_rodata_410 = .rodata:0x00000410; // type:object size:0x8 data:double -lbl_2_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_2_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_2_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_2_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float -lbl_2_rodata_428 = .rodata:0x00000428; // type:object size:0x8 data:double -lbl_2_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float -lbl_2_rodata_438 = .rodata:0x00000438; // type:object size:0x8 data:double -lbl_2_rodata_440 = .rodata:0x00000440; // type:object size:0x8 data:double -lbl_2_rodata_448 = .rodata:0x00000448; // type:object size:0x4 data:float -lbl_2_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 data:float +lbl_2_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_2_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_2_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_2_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_2_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_2_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_2_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_2_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_2_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_2_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_2_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_2_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_2_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_2_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_2_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_2_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_2_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_2_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_2_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_2_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_2_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_2_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_2_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_2_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_2_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_2_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_2_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_2_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_2_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_2_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_2_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_2_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_2_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_2_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_2_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_2_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_2_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_2_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_2_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_2_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_2_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_2_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_2_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_2_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_2_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_2_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_2_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_2_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_2_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_2_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_2_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_2_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_2_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_2_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 scope:local data:double +lbl_2_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 scope:local data:double +lbl_2_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_2_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1DC = .rodata:0x000001DC; // type:object size:0x10 scope:local data:4byte +lbl_2_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_2_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_2_rodata_208 = .rodata:0x00000208; // type:object size:0x8 scope:local data:double +lbl_2_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_2_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float +lbl_2_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_2_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_2_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_2_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_2_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_230 = .rodata:0x00000230; // type:object size:0x8 scope:local data:double +lbl_2_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_2_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_2_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +lbl_2_rodata_250 = .rodata:0x00000250; // type:object size:0x8 scope:local data:double +lbl_2_rodata_258 = .rodata:0x00000258; // type:object size:0x8 scope:local data:double +lbl_2_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_2_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_2_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_2_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_2_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_2_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_2_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_2_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_2_rodata_288 = .rodata:0x00000288; // type:object size:0x8 scope:local data:double +lbl_2_rodata_290 = .rodata:0x00000290; // type:object size:0x40 scope:local data:2byte +lbl_2_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x8 scope:local data:2byte +lbl_2_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x8 scope:local data:2byte +lbl_2_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:2byte +lbl_2_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_2_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_2_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_2_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_2_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_2_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_2_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_2_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_2_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_2_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_2_rodata_338 = .rodata:0x00000338; // type:object size:0x8 scope:local data:double +lbl_2_rodata_340 = .rodata:0x00000340; // type:object size:0x8 scope:local data:double +lbl_2_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_2_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_2_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_2_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_2_rodata_360 = .rodata:0x00000360; // type:object size:0x8 scope:local data:double +lbl_2_rodata_368 = .rodata:0x00000368; // type:object size:0x8 scope:local data:double +lbl_2_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_2_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_2_rodata_378 = .rodata:0x00000378; // type:object size:0x8 scope:local data:double +lbl_2_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_2_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_2_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_2_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_2_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_2_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x8 scope:local data:double +lbl_2_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3D4 = .rodata:0x000003D4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_2_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_2_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float +lbl_2_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_2_rodata_410 = .rodata:0x00000410; // type:object size:0x8 scope:local data:double +lbl_2_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_2_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_2_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float +lbl_2_rodata_428 = .rodata:0x00000428; // type:object size:0x8 scope:local data:double +lbl_2_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_2_rodata_438 = .rodata:0x00000438; // type:object size:0x8 scope:local data:double +lbl_2_rodata_440 = .rodata:0x00000440; // type:object size:0x8 scope:local data:double +lbl_2_rodata_448 = .rodata:0x00000448; // type:object size:0x4 scope:local data:float +lbl_2_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 scope:local data:float lbl_2_rodata_450 = .rodata:0x00000450; // type:object size:0x4 data:float lbl_2_rodata_454 = .rodata:0x00000454; // type:object size:0x4 data:float lbl_2_rodata_458 = .rodata:0x00000458; // type:object size:0x4 data:float @@ -433,17 +433,17 @@ lbl_2_data_2C = .data:0x0000002C; // type:object size:0x4 lbl_2_data_30 = .data:0x00000030; // type:object size:0xC data:float lbl_2_data_3C = .data:0x0000003C; // type:object size:0xC lbl_2_data_48 = .data:0x00000048; // type:object size:0xC data:float -lbl_2_data_54 = .data:0x00000054; // type:object size:0x1B data:string -lbl_2_data_6F = .data:0x0000006F; // type:object size:0x11 +lbl_2_data_54 = .data:0x00000054; // type:object size:0x1B scope:local data:string +lbl_2_data_6F = .data:0x0000006F; // type:object size:0x11 scope:local lbl_2_data_80 = .data:0x00000080; // type:object size:0x20 lbl_2_data_A0 = .data:0x000000A0; // type:object size:0x14 data:float lbl_2_data_B4 = .data:0x000000B4; // type:object size:0x18 data:float lbl_2_data_CC = .data:0x000000CC; // type:object size:0x28 -lbl_2_data_F4 = .data:0x000000F4; // type:object size:0x9 data:string -lbl_2_data_FD = .data:0x000000FD; // type:object size:0x9 data:string -lbl_2_data_106 = .data:0x00000106; // type:object size:0x9 data:string -lbl_2_data_10F = .data:0x0000010F; // type:object size:0x9 data:string -lbl_2_data_118 = .data:0x00000118; // type:object size:0xC +lbl_2_data_F4 = .data:0x000000F4; // type:object size:0x9 scope:local data:string +lbl_2_data_FD = .data:0x000000FD; // type:object size:0x9 scope:local data:string +lbl_2_data_106 = .data:0x00000106; // type:object size:0x9 scope:local data:string +lbl_2_data_10F = .data:0x0000010F; // type:object size:0x9 scope:local data:string +lbl_2_data_118 = .data:0x00000118; // type:object size:0xC scope:local 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 @@ -455,10 +455,10 @@ lbl_2_data_334 = .data:0x00000334; // type:object size:0xF0 data:float lbl_2_data_424 = .data:0x00000424; // type:object size:0x8 lbl_2_data_42C = .data:0x0000042C; // type:object size:0x8 lbl_2_data_434 = .data:0x00000434; // type:object size:0x20 -lbl_2_data_454 = .data:0x00000454; // type:object size:0xC data:string +lbl_2_data_454 = .data:0x00000454; // type:object size:0xC scope:local data:string lbl_2_data_460 = .data:0x00000460; // type:object size:0xC -lbl_2_data_46C = .data:0x0000046C; // type:object size:0x5 data:string -lbl_2_data_471 = .data:0x00000471; // type:object size:0x7 +lbl_2_data_46C = .data:0x0000046C; // type:object size:0x5 scope:local data:string +lbl_2_data_471 = .data:0x00000471; // type:object size:0x7 scope:local jumptable_2_data_478 = .data:0x00000478; // type:object size:0x20 scope:local lbl_2_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_2_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index d15a71df..76d38062 100644 --- a/configure.py +++ b/configure.py @@ -796,7 +796,7 @@ config.libs = [ Rel('m401Dll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m401Dll/main.c"), + Object(Matching, "REL/m401Dll/main.c"), Object(NonMatching, "REL/m401Dll/main_ex.c"), } ), diff --git a/include/game/frand.h b/include/game/frand.h index 39e6d1b6..c18dde16 100644 --- a/include/game/frand.h +++ b/include/game/frand.h @@ -4,6 +4,7 @@ #include "dolphin/types.h" #define frandBool() (((s32)frand() & 0x1)) +#define frandu8() (((u32)frand() & 0xFF)) #define frand8() (((s32)frand() & 0xFF)) #define frandmods(range) ((s32)frand() % (range)) #define frand16() (((s32)frand() & 0xFFFF)) diff --git a/src/REL/m401Dll/main.c b/src/REL/m401Dll/main.c index d70036b7..57778356 100644 --- a/src/REL/m401Dll/main.c +++ b/src/REL/m401Dll/main.c @@ -11,6 +11,7 @@ #include "game/frand.h" #include "game/chrman.h" #include "game/pad.h" +#include "game/printfunc.h" #include "REL/m401Dll.h" #include "math.h" @@ -117,7 +118,7 @@ void fn_2_C130(omObjData *object); void fn_2_C6DC(omObjData *object); void fn_2_D088(omObjData *object); -void fn_2_DBCC(s32 arg0); +void fn_2_DBCC(s16 arg0); void ModuleProlog(void) { @@ -619,11 +620,11 @@ void fn_2_1DE8(omObjData *object) 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.y = -150.0f+((1.0f/255.0f)*(300.0f*frandu8())); 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.y = -150.0f+((1.0f/255.0f)*(300.0f*frandu8())); sp2C.z = -25000; fn_2_91AC(lbl_2_bss_100[1], &sp2C); sp2C.x = 5500; @@ -710,9 +711,9 @@ void fn_2_21F8(omObjData *object) Hu3DModelAttrSet(object->model[2], 0xC0000001); temp_r28 = 4; for(temp_r30=0; temp_r30 -31260.0f) { temp_r28 = 4; for(temp_r30=0; temp_r30unk7E = sp50[GWPlayerCfg[temp_r31->unk4].diff][frand() & 0x7]; temp_r31->unk7C = (frand()%60)+30; temp_r31->unk92 = 0; - if((u32)frand8() < sp18[GWPlayerCfg[temp_r31->unk4].diff]) { + if(frandu8() < sp18[GWPlayerCfg[temp_r31->unk4].diff]) { temp_r31->unk92 |= 1; } - if((u32)frand8() < sp10[GWPlayerCfg[temp_r31->unk4].diff]) { + if(frandu8() < sp10[GWPlayerCfg[temp_r31->unk4].diff]) { temp_r31->unk92 |= 2; } } else { @@ -1973,17 +1974,17 @@ void fn_2_76AC(omObjData *object, s32 arg1) case 2: if(temp_r31->unkC.y > temp_r31->unk54->trans.y) { - temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*frandu8())); } else { - temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*frandu8())); } break; case 3: if(temp_r31->unkC.y > temp_r31->unk54->trans.y) { - temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + temp_r31->unk80 = 80.0f+((1.0f/255.0f)*(20.0f*frandu8())); } else { - temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*(u32)frand8())); + temp_r31->unk80 = 260.0f+((1.0f/255.0f)*(20.0f*frandu8())); } break; } @@ -2307,7 +2308,7 @@ void fn_2_8E74(omObjData *object) temp_r31->unkC.z = 0; temp_r31->unk34.x = 1000; temp_r31->unk34.y = 30; - temp_r31->unk34.z = 360.0f+((1.0f/255.0f)*(u32)frand8()); + temp_r31->unk34.z = 360.0f+((1.0f/255.0f)*frandu8()); temp_r31->unk30 = VECMagPoint(temp_r31->unkC.x, temp_r31->unkC.y, temp_r31->unkC.z); VECNormalize(&temp_r31->unkC, &temp_r31->unk0); Hu3DModelShadowSet(object->model[0]); @@ -2320,7 +2321,7 @@ void fn_2_91AC(omObjData *object, Vec *pos) Work8E74 *temp_r30; temp_r30 = object->data; temp_r30->unk18 = *pos; - temp_r30->unk34.z = (1.0f/255.0f)*(360.0f*(u32)frand8()); + temp_r30->unk34.z = (1.0f/255.0f)*(360.0f*frandu8()); Hu3DModelAttrReset(object->model[0], 1); omSetTra(object, pos->x, pos->y, pos->z); object->work[2] = HuAudFXEmiterPlay(1284, &pos); @@ -2412,8 +2413,8 @@ void fn_2_9B90(omObjData *object); void fn_2_99A4(omObjData *object) { float temp_f31; - if(lbl_2_bss_60.z <= -36200.0f+((1.0f/255.0f)*(200.0f*(u32)frand8()))) { - temp_f31 = -250.0f+((1.0f/255.0f)*(500.0f*(u32)frand8())); + if(lbl_2_bss_60.z <= -36200.0f+((1.0f/255.0f)*(200.0f*frandu8()))) { + temp_f31 = -250.0f+((1.0f/255.0f)*(500.0f*frandu8())); fn_2_9734(1); omSetTra(object, 3000, temp_f31, -37000); omSetRot(object, 0, 270, 0); @@ -2445,7 +2446,7 @@ void fn_2_9B90(omObjData *object) typedef struct work_a318 { Vec unk0; s16 unkC; -} Work9E28; +} WorkA318; s32 lbl_2_data_42C[] = { 0x20001C, @@ -2465,7 +2466,7 @@ void fn_2_9D00(Process *objman) temp_r31->motion[temp_r30] = Hu3DJointMotionFile(temp_r31->model[0], lbl_2_data_42C[temp_r30]); } Hu3DModelAttrSet(temp_r31->model[0], 1); - temp_r31->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work9E28), MEMORY_DEFAULT_NUM); + temp_r31->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkA318), MEMORY_DEFAULT_NUM); Hu3DModelShadowSet(temp_r31->model[0]); temp_r31->work[3] = 1; } @@ -2477,7 +2478,7 @@ void fn_2_A318(omObjData *object); void fn_2_9E28(float arg1, float arg2) { s32 temp_r31; - Work9E28 *temp_r30; + WorkA318 *temp_r30; float temp_f31; float temp_f30; float temp_f29; @@ -2486,8 +2487,8 @@ void fn_2_9E28(float arg1, float arg2) for(temp_r31=0; temp_r31<4; temp_r31++) { temp_r30 = lbl_2_bss_E4[temp_r31]->data; Hu3DModelAttrReset(lbl_2_bss_E4[temp_r31]->model[0], 1); - temp_f29 = -400.0f+((1.0f/255.0f)*(800.0f*(u32)frand8())); - temp_r30->unk0.x = -250.0f+((1.0f/255.0f)*(500.0f*(u32)frand8())); + temp_f29 = -400.0f+((1.0f/255.0f)*(800.0f*frandu8())); + temp_r30->unk0.x = -250.0f+((1.0f/255.0f)*(500.0f*frandu8())); omSetTra(lbl_2_bss_E4[temp_r31], temp_f29, temp_r30->unk0.x+lbl_2_bss_60.y, temp_f31); Hu3DMotionSet(lbl_2_bss_E4[temp_r31]->model[0], lbl_2_bss_E4[temp_r31]->motion[0]); Hu3DModelAttrSet(lbl_2_bss_E4[temp_r31]->model[0], 0x40000001); @@ -2528,7 +2529,7 @@ omObjData *fn_2_A0B0(omObjData *object) void fn_2_A318(omObjData *object) { - Work9E28 *temp_r30; + WorkA318 *temp_r30; omObjData *temp_r28; M401WorkPlayer *sp10; temp_r30 = object->data; @@ -2537,7 +2538,7 @@ void fn_2_A318(omObjData *object) temp_r28 = fn_2_A0B0(object); sp10 = temp_r28->data; temp_r30->unk0.y = atan2d(temp_r28->trans.y - object->trans.y, temp_r28->trans.x - object->trans.x); - temp_r30->unk0.z = 8.0f+((1.0f/255.0f)*((9.0f*(u32)frand8()))); + temp_r30->unk0.z = 8.0f+((1.0f/255.0f)*((9.0f*frandu8()))); Hu3DMotionSet(object->model[0], object->motion[1]); Hu3DModelAttrReset(object->model[0], 0x40000001); lbl_2_bss_78.x = object->trans.x; @@ -2633,7 +2634,7 @@ s32 fn_2_AC2C(Vec *pos, float dist, omObjData **newobj) float temp_f20; float temp_f19; float temp_f18; - Work9E28 *sp70; + WorkA318 *sp70; float sp6C; *newobj = NULL; @@ -2821,4 +2822,678 @@ void fn_2_C130(omObjData *object) WipeStatGet() == 0; break; } +} + +typedef struct work_c840 { + Vec unk0[9]; + float unk6C[9]; +} WorkC840; + +void fn_2_C840(s16 arg0); + +void fn_2_CAB0(omObjData *object); + +void fn_2_C6DC(omObjData *object) +{ + s32 temp_r30; + float temp_f31; + WorkC840 *sp8; + sp8 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkC840), MEMORY_DEFAULT_NUM); + for(temp_r30=0; temp_r30<9; temp_r30++) { + if(temp_r30 == 0) { + object->model[temp_r30] = Hu3DModelCreateFile(0x200002); + } else { + object->model[temp_r30] = Hu3DModelCreateFile(0x200002); + } + Hu3DModelLayerSet(object->model[temp_r30], 1); + fn_2_C840(temp_r30); + temp_f31 = (1.0f/255.0f)*(Hu3DMotionMaxTimeGet(object->model[temp_r30])*frandu8()); + Hu3DMotionTimeSet(object->model[temp_r30], temp_f31); + } + omSetStatBit(object, 0x100); + object->func = fn_2_CAB0; +} + +void fn_2_C840(s16 arg0) +{ + WorkC840 *temp_r31; + float temp_f31, temp_f30; + temp_r31 = lbl_2_bss_F8->data; + temp_f30 = (1.0f/255.0f)*(360.0f*frandu8()); + temp_f31 = (1.0f/255.0f)*(200.0f*frandu8()); + temp_r31->unk0[arg0].x = temp_f31*cosd(temp_f30); + temp_r31->unk0[arg0].z = temp_f31*sind(temp_f30); + temp_r31->unk0[arg0].y = 1000; + temp_r31->unk6C[arg0] = 1.0f; + temp_f31 *= 0.25f; + Hu3DModelRotSet(lbl_2_bss_F8->model[arg0], temp_f31*sind(temp_f30), 0, temp_f31*cosd(temp_f30)); + Hu3DMotionTimeSet(lbl_2_bss_F8->model[arg0], 0); +} + +void fn_2_CAB0(omObjData *object) +{ + s32 temp_r31; + WorkC840 *temp_r29; + u8 temp_r28; + float temp_f29; + temp_r29 = object->data; + for(temp_r31=0; temp_r31<9; temp_r31++) { + Hu3DModelPosSet(object->model[temp_r31], temp_r29->unk0[temp_r31].x, temp_r29->unk0[temp_r31].y, lbl_2_bss_38.z+temp_r29->unk0[temp_r31].z-500); + Hu3DModelTPLvlSet(object->model[temp_r31], temp_r29->unk6C[temp_r31]); + temp_f29 = Hu3DMotionTimeGet(object->model[temp_r31])/Hu3DMotionMaxTimeGet(object->model[temp_r31]); + temp_r29->unk6C[temp_r31] = 1.0f-temp_f29; + if(Hu3DMotionTimeGet(object->model[temp_r31]) >= Hu3DMotionMaxTimeGet(object->model[temp_r31])) { + fn_2_C840(temp_r31); + } + } + if(lbl_2_bss_60.z <= -26800.0f && lbl_2_bss_60.z >= -27400.0f) { + temp_r28 = 255.0f-(223.0f*(-(lbl_2_bss_60.z+26800.0f) / 600.0f)); + if(temp_r28 < 32) { + temp_r28 = 32; + } + } else if(lbl_2_bss_60.z <= -27700.0f && lbl_2_bss_60.z >= -28300.0f) { + temp_r28 = 32.0f+(223.0f*(-(lbl_2_bss_60.z+27700.0f) / 600.0f)); + } else if(lbl_2_bss_60.z < -27400.0f && lbl_2_bss_60.z > -28300.0f) { + temp_r28 = 32; + } else { + temp_r28 = 255; + } + Hu3DGLightColorSet(lbl_2_bss_A8, temp_r28, temp_r28, temp_r28, 255); + if(lbl_2_bss_60.z < -26600.0f && lbl_2_bss_60.z > -27500.0f) { + for(temp_r31=0; temp_r31<9; temp_r31++) { + Hu3DModelAttrSet(object->model[temp_r31], 1); + } + } else { + for(temp_r31=0; temp_r31<9; temp_r31++) { + Hu3DModelAttrReset(object->model[temp_r31], 1); + } + } +} + +void fn_2_D088(omObjData *object) +{ + CameraData *temp_r31 = &Hu3DCamera[0]; + Vec sp8; + + lbl_2_bss_6C = temp_r31->pos; + lbl_2_bss_60 = temp_r31->target; + VECSubtract(&lbl_2_bss_6C, &lbl_2_bss_54, &sp8); + lbl_2_bss_50 = VECMag(&sp8); + lbl_2_bss_54 = lbl_2_bss_6C; + + fn_2_A98(); +} + +void fn_2_D180(float arg0) +{ + Vec sp14; + Vec sp8; + lbl_2_bss_44.x = 0; + lbl_2_bss_44.y = 0; + lbl_2_bss_44.z = arg0; + lbl_2_bss_38.x = 0; + lbl_2_bss_38.y = 0; + lbl_2_bss_38.z = -1500+arg0; + 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); + Hu3DModelPosSet(lbl_2_bss_10C->model[1], 0, 0, -1500+arg0); + lbl_2_data_30.y = 3500+lbl_2_bss_38.y; + lbl_2_data_30.z = 1500+lbl_2_bss_38.z; + lbl_2_data_48.y = lbl_2_bss_38.y-200; + lbl_2_data_48.z = 500+lbl_2_bss_38.z; + Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); + sp14 = lbl_2_bss_44; + VECSubtract(&lbl_2_bss_38, &sp14, &sp8); + VECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp14, &sp8); +} + +void fn_2_D3E8(omObjData *object) +{ + Vec sp14; + Vec sp8; + float temp_f31 = 1.5f*object->scale.x; + lbl_2_bss_44.x = object->trans.x+(-object->trans.x*sind(temp_f31)); + lbl_2_bss_44.y = object->trans.y+(-object->trans.y*sind(temp_f31)); + lbl_2_bss_44.z = object->trans.z+(-object->trans.z*sind(temp_f31)); + lbl_2_bss_38.x = object->rot.x+(-object->rot.x*sind(temp_f31)); + lbl_2_bss_38.y = object->rot.y+(-object->rot.y*sind(temp_f31)); + lbl_2_bss_38.z = object->rot.z+((-1500.0f-object->rot.z)*sind(temp_f31)); + lbl_2_bss_2C.x = 0; + lbl_2_bss_2C.y = 1; + lbl_2_bss_2C.z = 0; + object->scale.x += 1.0f; + if(object->scale.x > 60.0f) { + lbl_2_bss_44.x = 0; + lbl_2_bss_44.y = 0; + lbl_2_bss_44.z = 0; + lbl_2_bss_38.x = 0; + lbl_2_bss_38.y = 0; + lbl_2_bss_38.z = -1500; + } + Hu3DCameraPosSetV(1, &lbl_2_bss_44, &lbl_2_bss_2C, &lbl_2_bss_38); + lbl_2_bss_54 = lbl_2_bss_44; + lbl_2_data_30.y = 3500+lbl_2_bss_38.y; + lbl_2_data_30.z = 1500+lbl_2_bss_38.z; + lbl_2_data_48.y = lbl_2_bss_38.y-200; + lbl_2_data_48.z = 500+lbl_2_bss_38.z; + Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48); + sp14 = lbl_2_bss_44; + VECSubtract(&lbl_2_bss_38, &lbl_2_bss_44, &sp8); + VECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp14, &sp8); + if(object->scale.x > 60.0f) { + lbl_2_bss_128 = 100; + Hu3DCameraPerspectiveSet(1, lbl_2_bss_12C, lbl_2_bss_128, lbl_2_bss_124, 1.2f); + object->scale.x = 0; + object->func = NULL; + } +} + +void fn_2_D8CC(omObjData *object) +{ + if(lbl_2_bss_BE != 0) { + return; + } + lbl_2_data_0 *= 1.05f; + if(lbl_2_data_0 < -14.375f) { + lbl_2_data_0 = -14.375f; + } + object->scale.x += lbl_2_data_0; + fn_2_D180(object->scale.x); +} + +s32 lbl_2_data_460[] = { + 0x200004, + 0x200005, + 0x200006 +}; + +typedef struct work_e6e8 { + s16 unk0; + Vec unk4; + float unk10; + float unk14; + float unk18; + float unk1C; + float unk20; + float unk24; + float unk28; + float unk2C; + s8 *unk30; + Vec *unk34; + Vec *unk38; + Vec *unk3C; + Vec *unk40; + Vec *unk44; + Vec *unk48; + Vec *unk4C; + s16 *unk50; + s16 *unk54; + float *unk58; + float *unk5C; + float *unk60; + float *unk64; + float *unk68; +} WorkE6E8; + +void fn_2_DBCC(s16 arg0) +{ + omObjData *temp_r31; + s32 temp_r30; + s8 *temp_r28; + float temp_f31; + temp_r31 = lbl_2_bss_C4 = omAddObjEx(lbl_2_bss_1C, 1145, arg0, 0, -1, NULL); + omSetStatBit(temp_r31, 0x100); + temp_r31->data = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(s8), MEMORY_DEFAULT_NUM); + temp_r28 = temp_r31->data; + temp_r31->work[0] = arg0; + for(temp_r30=0; temp_r30model[temp_r30] = Hu3DModelCreateFile(lbl_2_data_460[temp_r30]); + } else { + temp_r31->model[temp_r30] = Hu3DModelLink(temp_r31->model[temp_r30%3]); + } + temp_f31 = 0.5f+((1.0f/255.0f)*(0.5f*frandu8())); + Hu3DModelScaleSet(temp_r31->model[temp_r30], temp_f31, temp_f31, temp_f31); + Hu3DModelAttrSet(temp_r31->model[temp_r30], 1); + Hu3DModelAttrSet(temp_r31->model[temp_r30], 0x40000001); + Hu3DMotionTimeSet(temp_r31->model[temp_r30], (1.0f/255.0f)*(Hu3DMotionMaxTimeGet(temp_r31->model[temp_r30])*frandu8())); + temp_r28[temp_r30] = 0; + } +} + +void fn_2_DE1C(WorkE6E8 *arg0) +{ + HuMemDirectFree(arg0->unk34); + HuMemDirectFree(arg0->unk38); + HuMemDirectFree(arg0->unk40); + HuMemDirectFree(arg0->unk44); + HuMemDirectFree(arg0->unk48); + HuMemDirectFree(arg0->unk4C); + HuMemDirectFree(arg0->unk3C); + HuMemDirectFree(arg0->unk50); + HuMemDirectFree(arg0->unk54); + HuMemDirectFree(arg0->unk58); + HuMemDirectFree(arg0->unk5C); + HuMemDirectFree(arg0->unk60); + HuMemDirectFree(arg0->unk64); + HuMemDirectFree(arg0->unk68); + HuMemDirectFree(arg0->unk30); +} + +omObjData *fn_2_DEBC(s16 arg0) +{ + WorkE6E8 *temp_r31; + s32 temp_r29; + omObjData *temp_r28; + s32 temp_r27; + s8 *temp_r26; + if(arg0 <= 0) { + return NULL; + } + temp_r28 = omAddObjEx(lbl_2_bss_1C, 1145, arg0, 0, -1, NULL); + omSetStatBit(temp_r28, 0x100); + temp_r28->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkE6E8), MEMORY_DEFAULT_NUM); + temp_r31 = temp_r28->data; + temp_r31->unk34 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk38 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk40 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk44 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk48 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk4C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk3C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(Vec), MEMORY_DEFAULT_NUM); + temp_r31->unk50 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(s16), MEMORY_DEFAULT_NUM); + temp_r31->unk54 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(s16), MEMORY_DEFAULT_NUM); + temp_r31->unk58 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(float), MEMORY_DEFAULT_NUM); + temp_r31->unk5C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(float), MEMORY_DEFAULT_NUM); + temp_r31->unk60 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(float), MEMORY_DEFAULT_NUM); + temp_r31->unk64 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(float), MEMORY_DEFAULT_NUM); + temp_r31->unk68 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(float), MEMORY_DEFAULT_NUM); + temp_r31->unk30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0*sizeof(s8), MEMORY_DEFAULT_NUM); + for(temp_r27=0; temp_r27data; + for(temp_r29=0; temp_r29work[0]; temp_r29++) { + if(temp_r26[temp_r29] == 0) { + temp_r26[temp_r29] = 1; + temp_r28->model[temp_r27] = lbl_2_bss_C4->model[temp_r29]; + temp_r31->unk54[temp_r27] = temp_r29%3; + temp_r31->unk30[temp_r27] = temp_r29; + break; + } + } + if(temp_r29 == lbl_2_bss_C4->work[0]) { + arg0 -= (s32)arg0-temp_r27; + break; + } + } + if(arg0 == 0) { + fn_2_DE1C(temp_r31); + omDelObjEx(HuPrcCurrentGet(), temp_r28); + temp_r28 = NULL; + } else { + temp_r31->unk0 = arg0; + temp_r31->unk10 = 0; + } + return temp_r28; +} + +void fn_2_E24C(omObjData *object) +{ + WorkE6E8 *temp_r31; + s32 temp_r30; + s8 *temp_r28; + temp_r31 = object->data; + temp_r28 = lbl_2_bss_C4->data; + for(temp_r30=0; temp_r30unk0; temp_r30++) { + temp_r28[temp_r31->unk30[temp_r30]] = 0; + Hu3DModelAttrSet(object->model[temp_r30], 1); + } + fn_2_DE1C(temp_r31); + omDelObjEx(HuPrcCurrentGet(), object); +} + +void fn_2_E6E8(omObjData *object); + +void fn_2_E364(omObjData *object, s16 arg1) +{ + s32 temp_r31; + WorkE6E8 *temp_r29 = object->data; + if(arg1 == 1) { + for(temp_r31=0; temp_r31unk0; temp_r31++) { + Hu3DModelAttrReset(object->model[temp_r31], 1); + } + object->func = fn_2_E6E8; + } else { + for(temp_r31=0; temp_r31unk0; temp_r31++) { + Hu3DModelAttrSet(object->model[temp_r31], 1); + } + object->func = NULL; + } +} + +void fn_2_E420(omObjData *object, Vec *arg1, Vec *arg2) +{ + WorkE6E8 *temp_r31 = object->data; + s32 temp_r30; + for(temp_r30=0; temp_r30unk0; temp_r30++) { + temp_r31->unk34[temp_r30].x = (arg1->x - arg2->x)+((1.0f/255.0f)*(2.0f*arg2->x*frandu8())); + temp_r31->unk34[temp_r30].y = (arg1->y - arg2->y)+((1.0f/255.0f)*(2.0f*arg2->y*frandu8())); + temp_r31->unk34[temp_r30].z = (arg1->z - arg2->z)+((1.0f/255.0f)*(2.0f*arg2->z*frandu8())); + VECNormalize(&temp_r31->unk34[temp_r30], &temp_r31->unk38[temp_r30]); + temp_r31->unk5C[temp_r30] = temp_r31->unk64[temp_r30] = temp_r31->unk60[temp_r30] = temp_r31->unk68[temp_r30] = 0; + temp_r31->unk58[temp_r30] = 0.1f; + Hu3DModelPosSet(object->model[temp_r30], temp_r31->unk34[temp_r30].x, temp_r31->unk34[temp_r30].y, temp_r31->unk34[temp_r30].z); + + } +} + +void fn_2_E66C(omObjData *object, Vec *pos) +{ + WorkE6E8 *temp_r31 = object->data; + temp_r31->unk4 = *pos; +} + +void fn_2_E69C(omObjData *object, float arg2, float arg3) +{ + WorkE6E8 *temp_r31 = object->data; + temp_r31->unk14 = arg2; + temp_r31->unk18 = arg3; +} + +void fn_2_E6BC(omObjData *object, float arg2, float arg3, float arg4, float arg5, float arg6) +{ + WorkE6E8 *temp_r31 = object->data; + temp_r31->unk1C = arg2; + temp_r31->unk20 = arg3; + temp_r31->unk24 = arg4; + temp_r31->unk28 = arg5; + temp_r31->unk2C = arg6; +} + +void fn_2_E6E8(omObjData *object) +{ + WorkE6E8 *temp_r31 = object->data; + s32 temp_r30; + s32 temp_r29; + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + Mtx sp158, sp128, spF8, spC8, sp98, sp68; + Vec sp5C, sp50, sp44, sp38, sp2C, sp20, sp14, sp8; + for(temp_r30=0; temp_r30unk0; temp_r30++) { + temp_r31->unk3C[temp_r30].x = 0; + temp_r31->unk3C[temp_r30].y = 0; + temp_r31->unk3C[temp_r30].z = 0; + temp_r31->unk40[temp_r30].x = 0; + temp_r31->unk40[temp_r30].y = 0; + temp_r31->unk40[temp_r30].z = 0; + temp_r31->unk44[temp_r30].x = 0; + temp_r31->unk44[temp_r30].y = 0; + temp_r31->unk44[temp_r30].z = 0; + temp_r31->unk48[temp_r30].x = 0; + temp_r31->unk48[temp_r30].y = 0; + temp_r31->unk48[temp_r30].z = 0; + temp_r31->unk4C[temp_r30].x = 0; + temp_r31->unk4C[temp_r30].y = 0; + temp_r31->unk4C[temp_r30].z = 0; + temp_r31->unk50[temp_r30] = 0; + } + for(temp_r30=0; temp_r30unk0; temp_r30++) { + for(temp_r29=temp_r30+1; temp_r29unk0; temp_r29++) { + VECSubtract(&temp_r31->unk34[temp_r30], &temp_r31->unk34[temp_r29], &sp5C); + temp_f28 = VECMag(&sp5C); + if(temp_f28 < temp_r31->unk14) { + VECScale(&sp5C, &sp50, 1.0f/(temp_f28*temp_f28)); + VECAdd(&temp_r31->unk3C[temp_r30], &sp50, &temp_r31->unk3C[temp_r30]); + VECSubtract(&temp_r31->unk3C[temp_r29], &sp50, &temp_r31->unk3C[temp_r29]); + if(temp_r31->unk54[temp_r30] == temp_r31->unk54[temp_r29]){ + VECScale(&temp_r31->unk38[temp_r29], &sp50, 1.0f/temp_f28); + VECAdd(&temp_r31->unk40[temp_r30], &sp50, &temp_r31->unk40[temp_r30]); + VECScale(&temp_r31->unk38[temp_r30], &sp50, 1.0f/temp_f28); + VECAdd(&temp_r31->unk40[temp_r29], &sp50, &temp_r31->unk40[temp_r29]); + VECAdd(&temp_r31->unk44[temp_r30], &temp_r31->unk34[temp_r29], &temp_r31->unk44[temp_r30]); + VECAdd(&temp_r31->unk44[temp_r29], &temp_r31->unk34[temp_r30], &temp_r31->unk44[temp_r29]); + } + temp_r31->unk50[temp_r30]++; + temp_r31->unk50[temp_r29]++; + } + + } + for(temp_r29=0; temp_r29<4; temp_r29++) { + sp44.x = lbl_2_bss_118[temp_r29]->trans.x; + sp44.y = lbl_2_bss_118[temp_r29]->trans.y; + sp44.z = lbl_2_bss_118[temp_r29]->trans.z; + VECSubtract(&temp_r31->unk34[temp_r30], &sp44, &sp38); + if(!(VECDotProduct(&sp38, &temp_r31->unk38[temp_r30]) > 0)) { + temp_f30 = VECMag(&sp38)-200; + if(temp_f30 < temp_r31->unk14) { + temp_f30 -= 100; + if(temp_f30 < 0.01f) { + temp_f30 = 0.01f; + } + VECScale(&sp38, &sp38, 1.0f/temp_f30); + VECAdd(&temp_r31->unk4C[temp_r30], &sp38, &temp_r31->unk4C[temp_r30]); + } + } + } + if(temp_r31->unk50[temp_r30] != 0) { + VECScale(&temp_r31->unk44[temp_r30], &temp_r31->unk44[temp_r30], 1.0f/temp_r31->unk50[temp_r30]); + VECSubtract(&temp_r31->unk44[temp_r30], &temp_r31->unk34[temp_r30], &sp2C); + temp_f29 = VECMag(&sp2C); + if(temp_f29 > 0.0f){ + VECScale(&sp2C, &temp_r31->unk44[temp_r30], 1.0f/temp_f29); + } else { + temp_r31->unk44[temp_r30].x = 0; + temp_r31->unk44[temp_r30].y = 0; + temp_r31->unk44[temp_r30].z = 0; + } + VECScale(&temp_r31->unk40[temp_r30], &temp_r31->unk40[temp_r30], 1.0f/temp_r31->unk50[temp_r30]); + temp_f29 = VECMag(&temp_r31->unk40[temp_r30]); + if(temp_f29 > 0) { + VECScale(&temp_r31->unk40[temp_r30], &temp_r31->unk40[temp_r30], 1.0f/temp_f29); + VECSubtract(&temp_r31->unk40[temp_r30], &temp_r31->unk38[temp_r30], &sp2C); + VECScale(&sp2C, &temp_r31->unk40[temp_r30], 1.0f/temp_f29); + } + } + VECSubtract(&temp_r31->unk4, &temp_r31->unk34[temp_r30], &temp_r31->unk48[temp_r30]); + VECNormalize(&temp_r31->unk48[temp_r30], &temp_r31->unk48[temp_r30]); + } + for(temp_r30=0; temp_r30unk0; temp_r30++) { + sp20.x = 0; + sp20.y = 0; + sp20.z = 0; + VECScale(&temp_r31->unk3C[temp_r30], &sp8, temp_r31->unk1C); + VECAdd(&sp8, &sp20, &sp20); + VECScale(&temp_r31->unk4C[temp_r30], &sp8, temp_r31->unk20); + VECAdd(&sp8, &sp20, &sp20); + VECScale(&temp_r31->unk40[temp_r30], &sp8, temp_r31->unk24); + VECAdd(&sp8, &sp20, &sp20); + VECScale(&temp_r31->unk44[temp_r30], &sp8, temp_r31->unk28); + VECAdd(&sp8, &sp20, &sp20); + VECScale(&temp_r31->unk48[temp_r30], &sp8, temp_r31->unk2C); + VECAdd(&sp8, &sp20, &sp20); + temp_f27 = VECMag(&sp20); + if(temp_f27 > 1.0f) { + VECScale(&sp20, &sp20, 1.0f/temp_f27); + } + if(sp20.y > 0.01f) { + temp_r31->unk60[temp_r30] += 0.02f; + if(temp_r31->unk60[temp_r30] > 0.8f) { + temp_r31->unk60[temp_r30] = 0.8f; + } + } else { + if(sp20.y < -0.01f) { + temp_r31->unk60[temp_r30] -= 0.02f; + if(temp_r31->unk60[temp_r30] < -0.8f) { + temp_r31->unk60[temp_r30] = -0.8f; + } + } else { + temp_r31->unk60[temp_r30] *= 0.98f; + } + } + temp_r31->unk58[temp_r30] -= 0.002*temp_r31->unk60[temp_r30]; + temp_r31->unk58[temp_r30] = temp_r31->unk18+(0.99f*(temp_r31->unk58[temp_r30]-temp_r31->unk18)); + if(temp_r31->unk58[temp_r30] < 0.4f*temp_r31->unk18) { + temp_r31->unk58[temp_r30] = 0.4f*temp_r31->unk18; + } + if(temp_r31->unk58[temp_r30] > 5.0f*temp_r31->unk18) { + temp_r31->unk58[temp_r30] = 5.0f*temp_r31->unk18; + } + sp14 = sp20; + sp14.y = 0; + sp8 = temp_r31->unk38[temp_r30]; + if(VECMag(&sp14) > 0) { + VECNormalize(&sp14, &sp14); + } + temp_f31 = VECDotProduct(&sp14, &sp8); + if(temp_f31 > 0.7f) { + temp_f31 -= 0.7f; + temp_r31->unk58[temp_r30] += 0.005f*temp_f31; + } + VECCrossProduct(&sp14, &sp8, &sp14); + temp_f31 = 0.07f*((1.0f-temp_f31)/2); + if(sp14.y > 0.05f) { + temp_r31->unk68[temp_r30] = 0.05f*(temp_f31+(19.0f*temp_r31->unk68[temp_r30])); + } else if(sp14.y < -0.05f) { + temp_r31->unk68[temp_r30] = 0.05f*((19.0f*temp_r31->unk68[temp_r30])-temp_f31); + } else { + temp_r31->unk68[temp_r30] *= 0.98f; + } + temp_r31->unk5C[temp_r30] += temp_r31->unk68[temp_r30]; + temp_r31->unk64[temp_r30] = 20.0f*-temp_r31->unk68[temp_r30]; + MTXTrans(sp158, temp_r31->unk34[temp_r30].x, temp_r31->unk34[temp_r30].y, temp_r31->unk34[temp_r30].z); + MTXRotDeg(sp128, 'x', (temp_r31->unk60[temp_r30]/M_PI)*180.0); + MTXRotDeg(spF8, 'y', (temp_r31->unk5C[temp_r30]/M_PI)*180.0); + MTXRotDeg(spC8, 'z', (temp_r31->unk64[temp_r30]/M_PI)*180.0); + MTXConcat(sp128, spF8, sp98); + MTXConcat(spC8, sp98, sp68); + MTXConcat(sp68, sp158, sp98); + temp_r31->unk38[temp_r30].x = MTXRowCol(sp98, 2, 0); + temp_r31->unk38[temp_r30].y = MTXRowCol(sp98, 2, 1); + temp_r31->unk38[temp_r30].z = MTXRowCol(sp98, 2, 2); + temp_r31->unk34[temp_r30].x += 100.0f*(temp_r31->unk38[temp_r30].x*temp_r31->unk58[temp_r30]); + temp_r31->unk34[temp_r30].y += 100.0f*(temp_r31->unk38[temp_r30].y*temp_r31->unk58[temp_r30]); + temp_r31->unk34[temp_r30].z += 100.0f*(temp_r31->unk38[temp_r30].z*temp_r31->unk58[temp_r30]); + if(temp_r31->unk34[temp_r30].y < -350.0f) { + temp_r31->unk34[temp_r30].y = -350.0f; + } + Hu3DModelPosSet(object->model[temp_r30], temp_r31->unk34[temp_r30].x, temp_r31->unk34[temp_r30].y, temp_r31->unk34[temp_r30].z); + Hu3DModelRotSet(object->model[temp_r30], (-temp_r31->unk60[temp_r30]/M_PI)*180.0, (-temp_r31->unk5C[temp_r30]/M_PI)*180.0, 0); + } +} + +void fn_2_F778() +{ + CameraData *temp_r31; + s32 temp_r30; + float sp8[7]; + temp_r31 = lbl_2_bss_DC->data; + sp8[0] = temp_r31->pos.x; + sp8[1] = temp_r31->pos.y; + sp8[2] = temp_r31->pos.z; + sp8[3] = temp_r31->up.x; + sp8[4] = temp_r31->up.y; + sp8[5] = temp_r31->up.z; + sp8[6] = temp_r31->target.x; + fontcolor = FONT_COLOR_WHITE; + for(temp_r30=0; temp_r30<7; temp_r30++) { + if(temp_r30 == lbl_2_bss_18) { + print8(24.0+(1.5*((temp_r30*8)*7)), 384, 1.5f, "____"); + } + print8(24.0+(1.5*((temp_r30*8)*7)), 400, 1.5f, "%.2f", sp8[temp_r30]); + } + if(HuPadBtnRep[0] & PAD_BUTTON_LEFT) { + if(--lbl_2_bss_18 < 0) { + lbl_2_bss_18 = 6; + } + } + if(HuPadBtnRep[0] & PAD_BUTTON_RIGHT) { + if(++lbl_2_bss_18 > 6) { + lbl_2_bss_18 = 0; + } + } + if(HuPadBtnRep[0] & PAD_BUTTON_UP) { + if(HuPadBtn[0] & PAD_TRIGGER_R) { + sp8[lbl_2_bss_18] += 1.0f; + } else if(HuPadBtn[0] & PAD_TRIGGER_L) { + sp8[lbl_2_bss_18] += 0.1f; + } else { + sp8[lbl_2_bss_18] += 0.01f; + } + if(sp8[lbl_2_bss_18] > 999.99f) { + sp8[lbl_2_bss_18] = 999.99f; + } + } + if(HuPadBtnRep[0] & PAD_BUTTON_DOWN) { + if(HuPadBtn[0] & PAD_TRIGGER_R) { + sp8[lbl_2_bss_18] -= 1.0f; + } else if(HuPadBtn[0] & PAD_TRIGGER_L) { + sp8[lbl_2_bss_18] -= 0.1f; + } else { + sp8[lbl_2_bss_18] -= 0.01f; + } + if(sp8[lbl_2_bss_18] < 0) { + sp8[lbl_2_bss_18] = 0; + } + } + temp_r31->pos.x = sp8[0]; + temp_r31->pos.y = sp8[1]; + temp_r31->pos.z = sp8[2]; + temp_r31->up.x = sp8[3]; + temp_r31->up.y = sp8[4]; + temp_r31->up.z = sp8[5]; + temp_r31->target.x = sp8[6]; +} + +void fn_2_FF98(omObjData *object); + +omObjData *fn_2_FC40(s16 arg0, Vec *arg1, Vec *arg2, Vec *arg3) +{ + omObjData *temp_r30; + omObjData *temp_r22; + temp_r22 = omAddObjEx(HuPrcCurrentGet(), 1140, 0, 0, -1, fn_2_FF98); + temp_r30 = fn_2_DEBC(arg0); + temp_r22->work[0] = (u32)temp_r30; + fn_2_E420(temp_r30, arg1, arg2); + fn_2_E66C(temp_r30, arg3); + fn_2_E69C(temp_r30, 90.0f, 0.045999996f); + fn_2_E6BC(temp_r30, 5.0f, 1.5f, 0.08f, 0.8f, 0.8f); + fn_2_E364(temp_r30, 1); + return temp_r22; +} + +void fn_2_FF98(omObjData *object) +{ + WorkE6E8 *temp_r29; + omObjData *temp_r28; + s32 temp_r25; + s32 temp_r24; + temp_r24 = 0; + temp_r28 = (omObjData *)(object->work[0]); + temp_r29 = temp_r28->data; + temp_r29->unk4.x += object->scale.x*sind(object->trans.x); + temp_r29->unk4.y += object->scale.y*sind(object->trans.x); + temp_r29->unk4.z += object->scale.z*sind(object->trans.x); + object->trans.x += object->rot.x; + if(object->trans.x >= 360.0f) { + object->trans.x -= 360.0f; + } + if(object->trans.x < 0.0f) { + object->trans.x += 360.0f; + } + for(temp_r25=0; temp_r25unk0; temp_r25++) { + if(temp_r29->unk34[temp_r25].z >= lbl_2_bss_6C.z) { + temp_r24++; + } + } + if(temp_r24 == temp_r29->unk0) { + fn_2_E24C(temp_r28); + omDelObjEx(HuPrcCurrentGet(), object); + } + } \ No newline at end of file From 076f0075762d68a1a104c4acbc5c545e84adb953 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 30 Apr 2024 21:34:02 +0200 Subject: [PATCH 05/22] Finish e3setup/mgselect.c --- config/GMPE01_00/rels/E3setupDLL/symbols.txt | 97 ++-- configure.py | 2 +- include/REL/E3SetupDLL.h | 76 ++- src/REL/E3setupDLL/mgselect.c | 501 +++++++++++++++++++ 4 files changed, 627 insertions(+), 49 deletions(-) diff --git a/config/GMPE01_00/rels/E3setupDLL/symbols.txt b/config/GMPE01_00/rels/E3setupDLL/symbols.txt index 2fe290d7..85cff679 100644 --- a/config/GMPE01_00/rels/E3setupDLL/symbols.txt +++ b/config/GMPE01_00/rels/E3setupDLL/symbols.txt @@ -42,35 +42,36 @@ InitCamera = .text:0x000056A8; // type:function size:0x7C scope:local UpdateCamera = .text:0x00005724; // type:function size:0x12C scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_2_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_2_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_2_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_2_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_2_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_2_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_2_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_2_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_2_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_2_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_2_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_2_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_2_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_2_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_2_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_2_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_2_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_2_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_2_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_2_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_2_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_2_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_2_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_2_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_2_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_2_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_2_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_2_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_2_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:float +lbl_2_rodata_0 = .rodata:0x00000000; // type:object size:0xA +lbl_2_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_2_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_2_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_2_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_2_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_2_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_2_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_2_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_2_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_2_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_2_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_2_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_2_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_2_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_2_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_2_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_2_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_2_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_2_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_2_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_2_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_2_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_2_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:float lbl_2_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float lbl_2_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float lbl_2_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float @@ -112,29 +113,29 @@ lbl_2_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data: lbl_2_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float lbl_2_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float lbl_2_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float -lbl_2_data_0 = .data:0x00000000; // type:object size:0x24 -lbl_2_data_24 = .data:0x00000024; // type:object size:0x11 data:string +lbl_2_data_0 = .data:0x00000000; // type:object size:0x24 data:float +lbl_2_data_24 = .data:0x00000024; // type:object size:0x11 scope:local data:string lbl_2_data_36 = .data:0x00000036; // type:object size:0x8 mgOvlTbl = .data:0x0000003E; // type:object size:0x1A scope:local mgIdTbl = .data:0x00000058; // type:object size:0x1C scope:local mgNameTbl = .data:0x00000074; // type:object size:0x34 scope:local -lbl_2_data_A8 = .data:0x000000A8; // type:object size:0x21 -lbl_2_data_C9 = .data:0x000000C9; // type:object size:0x16 -lbl_2_data_DF = .data:0x000000DF; // type:object size:0x16 -lbl_2_data_F5 = .data:0x000000F5; // type:object size:0x16 -lbl_2_data_10B = .data:0x0000010B; // type:object size:0xD -lbl_2_data_118 = .data:0x00000118; // type:object size:0x16 -lbl_2_data_12E = .data:0x0000012E; // type:object size:0xD -lbl_2_data_13B = .data:0x0000013B; // type:object size:0x16 -lbl_2_data_151 = .data:0x00000151; // type:object size:0x16 -lbl_2_data_167 = .data:0x00000167; // type:object size:0x16 -lbl_2_data_17D = .data:0x0000017D; // type:object size:0x16 -lbl_2_data_193 = .data:0x00000193; // type:object size:0x16 -lbl_2_data_1A9 = .data:0x000001A9; // type:object size:0x17 +lbl_2_data_A8 = .data:0x000000A8; // type:object size:0x21 data:string +lbl_2_data_C9 = .data:0x000000C9; // type:object size:0x16 data:string +lbl_2_data_DF = .data:0x000000DF; // type:object size:0x16 data:string +lbl_2_data_F5 = .data:0x000000F5; // type:object size:0x16 data:string +lbl_2_data_10B = .data:0x0000010B; // type:object size:0xD data:string +lbl_2_data_118 = .data:0x00000118; // type:object size:0x16 data:string +lbl_2_data_12E = .data:0x0000012E; // type:object size:0xD data:string +lbl_2_data_13B = .data:0x0000013B; // type:object size:0x16 data:string +lbl_2_data_151 = .data:0x00000151; // type:object size:0x16 data:string +lbl_2_data_167 = .data:0x00000167; // type:object size:0x16 data:string +lbl_2_data_17D = .data:0x0000017D; // type:object size:0x16 data:string +lbl_2_data_193 = .data:0x00000193; // type:object size:0x16 data:string +lbl_2_data_1A9 = .data:0x000001A9; // type:object size:0x17 data:string mgNameTestTbl = .data:0x000001C0; // type:object size:0x34 scope:local -cursorYOfsTbl = .data:0x000001F4; // type:object size:0x14 scope:local +cursorYOfsTbl = .data:0x000001F4; // type:object size:0x14 scope:local data:float mgPicTbl = .data:0x00000208; // type:object size:0x34 scope:local -startText = .data:0x0000023C; // type:object size:0x14 scope:local +startText = .data:0x0000023C; // type:object size:0x14 scope:local data:string shadowPos = .data:0x00000250; // type:object size:0xC scope:local shadowTarget = .data:0x0000025C; // type:object size:0xC scope:local shadowUp = .data:0x00000268; // type:object size:0xC scope:local @@ -158,13 +159,15 @@ camViewTbl = .data:0x00000418; // type:object size:0x60 scope:local data:float lbl_2_data_478 = .data:0x00000478; // type:object size:0x24 data:float lbl_2_data_49C = .data:0x0000049C; // type:object size:0x24 data:float lbl_2_data_4C0 = .data:0x000004C0; // type:object size:0x10 +lbl_2_bss_0 = .bss:0x00000000; // type:object size:0xA data:2byte lbl_2_bss_A = .bss:0x0000000A; // type:object size:0x2 data:2byte lbl_2_bss_C = .bss:0x0000000C; // type:object size:0x2 data:2byte +lbl_2_bss_E = .bss:0x0000000E; // type:object size:0x2 data:2byte lbl_2_bss_10 = .bss:0x00000010; // type:object size:0x2 data:2byte lbl_2_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte mgPicObj = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte mgSelectObj = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte -mgInterface = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte +mgInterfaceObj = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte mgDefault = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte repBtn = .bss:0x00000028; // type:object size:0x2 scope:local data:2byte lbl_2_bss_2A = .bss:0x0000002A; // type:object size:0xA data:2byte diff --git a/configure.py b/configure.py index 76d38062..864c2ff0 100644 --- a/configure.py +++ b/configure.py @@ -781,7 +781,7 @@ config.libs = [ ), Rel('E3setupDLL', objects = { - Object(NonMatching, "REL/E3setupDLL/mgselect.c"), + Object(Matching, "REL/E3setupDLL/mgselect.c"), Object(Matching, "REL/executor.c"), Object(Matching, "REL/E3setupDLL/main.c"), } diff --git a/include/REL/E3SetupDLL.h b/include/REL/E3SetupDLL.h index ef58102c..651af661 100644 --- a/include/REL/E3SetupDLL.h +++ b/include/REL/E3SetupDLL.h @@ -1,6 +1,7 @@ #ifndef E3SETUPDLL_H #define E3SETUPDLL_H +#include "game/animdata.h" #include "game/object.h" #include "game/pad.h" @@ -11,13 +12,86 @@ typedef struct e3pad { u16 unk6; } E3Pad; +typedef struct mgInterface { + /* 0x00 */ AnimData *unk00[2]; + /* 0x08 */ s32 pad; + /* 0x0C */ s32 pad2; + /* 0x10 */ s32 pad3; + /* 0x14 */ s32 pad4; + /* 0x18 */ s32 pad5; + /* 0x1C */ s16 group; + /* 0x1E */ s16 group2; + /* 0x20 */ s32 pad6; + /* 0x24 */ s32 pad7; + /* 0x28 */ s32 pad8; + /* 0x2C */ s16 unk2C; + /* 0x2E */ s32 pad9; + /* the struct is 0x34 big */ +} mgInterface; + +typedef struct mgPic { + /* 0x00 */ AnimData *unk00[2]; + /* 0x08 */ s32 pad; + /* 0x0C */ s32 pad2; + /* 0x10 */ s32 pad3; + /* 0x14 */ s32 pad4; + /* 0x18 */ s32 pad5; + /* 0x1C */ s16 pad6; + /* 0x1E */ s16 pad7; + /* 0x20 */ s32 pad8; + /* 0x24 */ s32 pad9; + /* 0x28 */ s32 pad10; + /* 0x2C */ s16 unk2C; + /* 0x2E */ s32 pad11; + /* 0x32 */ s32 pad12; + /* 0x36 */ s32 pad13; + /* 0x3A */ s32 pad14; + /* 0x40 */ s16 unk40; + /* 0x44 */ s32 pad15; + /* 0x48 */ s32 pad16; + /* 0x4C */ s32 unk4C; + /* 0x50 */ s32 pad18; + /* the struct is 0x54 big */ +} mgPic; + +typedef struct mgSelect { + /* 0x00 */ AnimData *unk00[4]; + /* 0x10 */ s32 pad3; + /* 0x14 */ s32 pad4; + /* 0x18 */ s32 pad5; + /* 0x1C */ s16 unk1C; + /* 0x1E */ s16 unk1E; + /* 0x20 */ s16 unk20; + /* 0x22 */ s16 pad20; + /* 0x24 */ s32 pad9; + /* 0x28 */ s32 pad10; + /* 0x2C */ s16 unk2C; + /* 0x2E */ s16 unk2E[4]; + /* 0x36 */ s16 pad13; + /* 0x38 */ s16 unk38[4]; + /* 0x40 */ s16 pad15; + /* 0x42 */ s16 unk42; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s32 pad17; + /* 0x4C */ s32 pad18; + /* 0x50 */ s32 pad19; + /* the struct is 0x54 big */ +} mgSelect; + extern E3Pad e3PadData[4]; extern s16 e3PadCtrl; +extern s16 e3ConfigPlayerCnt; extern s16 e3ConfigPlayerF; extern s32 e3ExitEnableF; extern OverlayID e3NextOvl; extern s32 e3NextEvent; extern u32 e3ExitMode; +extern float e3CameraFov; +extern omObjData *e3MenuMainObj; +extern omObjData *e3ViewObj; +extern omObjData *e3OvlWatchObj; +extern omObjData *e3BGObj; void E3MainInit(void); void E3MGSelectInit(void); @@ -27,4 +101,4 @@ void E3OvlWatchInit(omObjData *object); void E3BGCreate(omObjData *object); void E3LightInit(void); -#endif \ No newline at end of file +#endif diff --git a/src/REL/E3setupDLL/mgselect.c b/src/REL/E3setupDLL/mgselect.c index e69de29b..adfc9082 100644 --- a/src/REL/E3setupDLL/mgselect.c +++ b/src/REL/E3setupDLL/mgselect.c @@ -0,0 +1,501 @@ +#include "ext_math.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/init.h" +#include "game/objsub.h" +#include "game/sprite.h" +#include "game/window.h" +#include "rel_sqrt_consts.h" + +#include "REL/E3SetupDLL.h" + +static s16 mgDefault; +static omObjData *mgInterfaceObj; +static omObjData *mgSelectObj; +static omObjData *mgPicObj; + +s32 lbl_2_bss_14; +s16 lbl_2_bss_10; +s16 lbl_2_bss_E; +s16 lbl_2_bss_C; +s16 lbl_2_bss_A; +static s16 lbl_2_bss_0[5]; + +float lbl_2_data_0[] = { 0, 12000, 0, 0, 0, 0, 0, 0, -1 }; + +static void StartMGSelect(omObjData *object); +static void UpdatePad(omObjData *object); +static void CreateMGSelect(omObjData *object); +static void CreateMGPic(omObjData *object); +static void UpdateMGInterface(omObjData *object); +static void CreateMGInterface(omObjData *object); + +void E3MGSelectInit() +{ + s32 var_r29; + s32 var_r30; + Process *var_r31; + + for (var_r29 = 0, var_r30 = 0; var_r29 < 4; var_r29++) { + if (HuPadStatGet(var_r29) == 0) { + var_r30 += 1; + } + } + e3ConfigPlayerCnt = var_r30; + if (var_r30 <= 0) { + OSReport("No pad detected\n"); + var_r30 += 1; + } + mgDefault = 0; + HuSysVWaitSet(1); + var_r31 = omInitObjMan(0x50, 0x2000); + HuWinInit(1); + CRot.x = -4.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 160.0f; + Center.z = 0.0f; + CZoom = 1960.0; + e3CameraFov = 40.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, e3CameraFov, 100.0f, 25000.0f, 4.0f / 3.0f); + e3ViewObj = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); + e3OvlWatchObj = omAddObjEx(var_r31, 200, 0, 0, -1, E3OvlWatchInit); + e3MenuMainObj = omAddObjEx(var_r31, 10, 0, 0, -1, StartMGSelect); + e3BGObj = omAddObjEx(var_r31, 0x14, 0, 0, -1, E3BGCreate); + mgInterfaceObj = omAddObjEx(var_r31, 20, 0, 0, -1, CreateMGInterface); + mgSelectObj = omAddObjEx(var_r31, 30, 0, 0, -1, CreateMGSelect); + mgPicObj = omAddObjEx(var_r31, 31, 0, 0, -1, CreateMGPic); + mgPicObj->work[0] = mgDefault; + E3LightInit(); + WipeCreate(1, 0, -1); +} + +s16 lbl_2_data_36[] = { 0x0023, 0x0026, 0x0029, 0x002C }; + +static s16 mgOvlTbl[] = { + 11, + 12, + 15, + 18, + 20, + 23, + 26, + 27, + 33, + 34, + 39, + 44, + 46, +}; + +static s16 mgIdTbl[] = { 403, 404, 407, 410, 412, 415, 418, 419, 425, 426, 431, 436, 438, 0 }; + +static s32 mgNameTbl[] = { + 0x00170003, + 0x00170004, + 0x00170007, + 0x0017000A, + 0x0017000C, + 0x0017000F, + 0x00170012, + 0x00170013, + 0x00170019, + 0x0017001A, + 0x0017001F, + 0x00170024, + 0x00170026, +}; + +char lbl_2_data_A8[] = "\013TEST MINIGAME NAME01\n test"; +char lbl_2_data_C9[] = "\013TEST MINIGAME NAME02"; +char lbl_2_data_DF[] = "\013TEST MINIGAME NAME03"; +char lbl_2_data_F5[] = "\013TEST MINIGAME NAME04"; +char lbl_2_data_10B[] = "\013TEST NAME05"; +char lbl_2_data_118[] = "\013TEST MINIGAME NAME06"; +char lbl_2_data_12E[] = "\013TEST NAME07"; +char lbl_2_data_13B[] = "\013TEST MINIGAME NAME08"; +char lbl_2_data_151[] = "\013TEST MINIGAME NAME09"; +char lbl_2_data_167[] = "\013TEST MINIGAME NAME10"; +char lbl_2_data_17D[] = "\013TEST MINIGAME NAME11"; +char lbl_2_data_193[] = "\013TEST MINIGAME NAME12"; +char lbl_2_data_1A9[] = "\013TEST MINIGAME NAME13\000"; + +static char *mgNameTestTbl[] = { + lbl_2_data_A8, + lbl_2_data_C9, + lbl_2_data_DF, + lbl_2_data_F5, + lbl_2_data_10B, + lbl_2_data_118, + lbl_2_data_12E, + lbl_2_data_13B, + lbl_2_data_151, + lbl_2_data_167, + lbl_2_data_17D, + lbl_2_data_193, + lbl_2_data_1A9, +}; + +static float cursorYOfsTbl[] = { -100.0f, -50.0f, 0.0f, 50.0f, 100.0f }; + +static s32 mgPicTbl[] = { 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 }; + +static char startText[] = "\013\016\r PRESS START\000\000\000\000"; + +static void StartMGSelect(omObjData *object) +{ + HuAudSeqPlay(0x2B); + lbl_2_bss_14 = 0; + lbl_2_bss_10 = -1; + lbl_2_bss_C = 0x1E; + lbl_2_bss_A = 0; + object->func = UpdatePad; + worstVcount = 0; + object->work[0] = 0; + object->work[1] = 0; +} + +static void UpdatePad(omObjData *object) +{ + s32 i; + s32 players; + + if (e3ExitEnableF == 0) { + for (i = 0, players = 0; i < 4; i++) { + E3PadUpdate(i, &e3PadData[i]); + if (!e3PadData[i].enable) { + players++; + } + } + e3ConfigPlayerCnt = players; + } +} + +static void UpdateMGSelect(omObjData *object) +{ + mgSelect *var_r31; + s32 var_r30; + u32 var_r28; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + u16 var_r23; + s16 var_r22; + s32 var_r21; + float sp8[2]; + + var_r31 = object->data; + var_r23 = e3PadData[e3PadCtrl].btnDown; + if (object->work[3] != 0) { + if ((var_r23 & 0x1100) != 0) { + HuAudFXPlay(1); + mgDefault = var_r31->unk44; + var_r21 = mgIdTbl[var_r31->unk44]; + GWMGAvailSet(var_r21); + GWSystem.mg_next = var_r21 - 401; + e3NextOvl = 3; + e3NextEvent = 0; + e3ExitMode = 2; + e3ExitEnableF = 1; + var_r28 = mgOvlTbl[var_r31->unk44]; + + for (var_r30 = 0; var_r30 < 50; var_r30++) { + if (var_r28 == mgInfoTbl[var_r30].ovl) { + break; + } + } + if (var_r30 >= 50) { + e3ExitMode = 0; + e3NextOvl = 0; + }; + switch (mgInfoTbl[var_r30].type) { + case 0: + case 3: + case 4: + case 5: + case 6: + for (var_r30 = 0; var_r30 < 4; var_r30++) { + GWPlayerCfg[var_r30].group = var_r30; + } + break; + case 1: + var_r28 = frand(); + var_r28 &= 3; + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r28 == var_r30) { + GWPlayerCfg[var_r30].group = 0; + } else { + GWPlayerCfg[var_r30].group = 1; + } + } + break; + case 2: + for (var_r30 = 0; var_r30 < 2; var_r30++) { + GWPlayerCfg[var_r30].group = 0; + } + for (var_r30 = 2; var_r30 < 4; var_r30++) { + GWPlayerCfg[var_r30].group = 1; + } + break; + } + object->work[3] = 0; + return; + } + if ((var_r23 & 0x200) != 0) { + HuAudFXPlay(3); + e3ExitMode = 0; + e3NextOvl = 0; + e3NextEvent = 0; + e3ExitEnableF = 1; + object->work[3] = 0; + return; + } + if (object->work[3] != 0) { + if ((var_r23 & 8) != 0) { + HuAudFXPlay(0); + var_r31->unk44--; + if (var_r31->unk44 < 0) { + var_r31->unk44 = 0xC; + } + } else if ((var_r23 & 4) != 0) { + HuAudFXPlay(0); + var_r31->unk44++; + if (var_r31->unk44 >= 13) { + var_r31->unk44 = 0; + } + } + if (var_r31->unk46 != var_r31->unk44) { + mgPicObj->work[0] = var_r31->unk44; + var_r27 = var_r31->unk44 - var_r31->unk46; + if ((var_r27 > 1) || (var_r27 < -1)) { + if (var_r27 < 0) { + var_r27 = 1; + } else { + var_r27 = -1; + } + } + var_r25 = var_r31->unk42 + var_r27; + if ((var_r25 < 0) || (var_r25 >= 5)) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + var_r22 = var_r31->unk2E[var_r30]; + var_r26 = var_r31->unk38[var_r30]; + var_r24 = var_r26 - var_r27; + if ((var_r24 < 0) || (var_r24 >= 5)) { + var_r28 = mgNameTbl[var_r31->unk44]; + HuWinMesSizeCancelCRSet(1); + HuWinMesMaxSizeGet(1, sp8, var_r28); + HuWinCenterPosSet(var_r22, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); + HuWinMesSet(var_r22, var_r28); + if (var_r24 < 0) { + var_r26 = 4; + } else { + var_r26 = 0; + } + } else { + var_r26 = var_r24; + } + HuWinPosSet(var_r22, 36.0f, 237.0f + cursorYOfsTbl[var_r26]); + var_r31->unk38[var_r30] = var_r26; + } + } else { + var_r31->unk42 = var_r25; + HuSprPosSet(var_r31->unk1C, 1, 0.0f, cursorYOfsTbl[var_r25]); + } + var_r31->unk46 = var_r31->unk44; + } + } + } +} + +static void CreateMGSelect(omObjData *object) +{ + mgSelect *temp_r31; + s16 temp_r30; + s16 temp_r29; + s32 var_r28; + s16 var_r26; + s16 index2; + u32 temp_r22; + s32 temp_r21; + AnimData *temp_r25; + AnimData *temp_r23; + float sp8[2]; + + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x48, MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + index2 = 0; + temp_r30 = HuSprGrpCreate(3); + temp_r31->unk1C = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 271.0f); + temp_r25 = HuSprAnimRead(HuDataReadNum(0x21, MEMORY_DEFAULT_NUM)); + temp_r31->unk00[index2] = temp_r25; + temp_r29 = HuSprCreate(temp_r25, 0x7540, 0); + HuSprGrpMemberSet(temp_r30, index2, temp_r29); + index2++; + temp_r25 = HuSprAnimRead(HuDataReadNum(0x27, MEMORY_DEFAULT_NUM)); + temp_r31->unk00[index2] = temp_r25; + temp_r29 = HuSprCreate(temp_r25, 0x64, 0); + HuSprGrpMemberSet(temp_r30, index2, temp_r29); + HuSprScaleSet(temp_r30, index2, 1.1f, 1.0f); + HuSprTPLvlSet(temp_r30, index2, 0.5f); + temp_r31->unk42 = 0; + HuSprPosSet(temp_r30, index2, 0.0f, cursorYOfsTbl[temp_r31->unk42]); + index2++; + temp_r25 = HuSprAnimRead(HuDataReadNum(0x35, MEMORY_DEFAULT_NUM)); + temp_r31->unk00[index2++] = temp_r25; + temp_r23 = HuSprAnimRead(HuDataReadNum(0x36, MEMORY_DEFAULT_NUM)); + temp_r31->unk00[index2++] = temp_r23; + temp_r30 = HuSprGrpCreate(2); + temp_r31->unk1E = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 128.0f); + temp_r29 = HuSprCreate(temp_r25, 4, 0); + HuSprGrpMemberSet(temp_r30, 0, temp_r29); + temp_r29 = HuSprCreate(temp_r23, 6, 0); + HuSprGrpMemberSet(temp_r30, 1, temp_r29); + HuSprTPLvlSet(temp_r30, 1, 0.7f); + HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); + temp_r30 = HuSprGrpCreate(2); + temp_r31->unk20 = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 414.0f); + temp_r29 = HuSprCreate(temp_r25, 4, 1); + HuSprGrpMemberSet(temp_r30, 0, temp_r29); + temp_r29 = HuSprCreate(temp_r23, 6, 1); + HuSprGrpMemberSet(temp_r30, 1, temp_r29); + HuSprTPLvlSet(temp_r30, 1, 0.7f); + HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); + + temp_r21 = GWSystem.mg_next + 401; + var_r26 = temp_r21; + for (var_r28 = 0; var_r28 < 13;) { + if (var_r26 != mgIdTbl[var_r28]) { + var_r28++; + } else { + break; + } + } + if (var_r28 >= 13) { + var_r28 = 0; + } + mgDefault = var_r28; + var_r26 = mgDefault; + mgPicObj->work[0] = var_r26; + temp_r31->unk44 = var_r26; + temp_r31->unk46 = var_r26; + + for (var_r28 = 0; var_r28 < 5;) { + if (var_r26 >= 13) { + var_r26 = 0; + } + temp_r29 = HuWinCreate(36.0f, 237.0f + cursorYOfsTbl[var_r28], 0x128, 0x44, 0x4E20); + temp_r31->unk2E[var_r28] = temp_r29; + temp_r31->unk38[var_r28] = var_r28; + HuWinBGTPLvlSet(temp_r29, 0.0f); + HuWinMesSpeedSet(temp_r29, 0); + temp_r22 = mgNameTbl[var_r26]; + HuWinAttrSet(temp_r29, 0x100); + HuWinMesSizeCancelCRSet(1); + HuWinMesMaxSizeGet(1, sp8, temp_r22); + HuWinCenterPosSet(temp_r29, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); + HuWinMesSet(temp_r29, temp_r22); + var_r28++; + var_r26++; + } + object->work[3] = 1; + object->func = &UpdateMGSelect; +} + +static void UpdateMGPic(omObjData *object) +{ + mgPic *temp_r30 = (mgPic *)object->data; + s16 temp_r29; + + if (object->work[1] != object->work[0]) { + temp_r29 = temp_r30->unk40; + HuSprAttrSet(temp_r29, object->work[1], 4); + HuSprAttrReset(temp_r29, object->work[0], 4); + object->work[1] = object->work[0]; + } +} + +static void CreateMGPic(omObjData *object) +{ + mgPic *temp_r28; + AnimData *temp_r3_2; + s16 temp_r3; + s32 var_r30; + s32 index; + s16 index2; + s16 group; + + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgPic), MEMORY_DEFAULT_NUM); + temp_r28 = object->data; + index2 = 0; + temp_r3 = HuSprGrpCreate(14); + temp_r28->unk40 = temp_r3; + HuSprGrpPosSet(temp_r3, 444.0f, 228.0f); + + for (var_r30 = 0; var_r30 < 13; var_r30++) { + temp_r3_2 = HuSprAnimRead(HuDataReadNum(mgPicTbl[var_r30], MEMORY_DEFAULT_NUM)); + temp_r28->unk00[var_r30] = temp_r3_2; + group = HuSprCreate(temp_r3_2, 0x2710, 0); + HuSprGrpMemberSet(temp_r3, var_r30, group); + HuSprScaleSet(temp_r3, var_r30, 0.6f, 0.6f); + HuSprAttrSet(temp_r3, var_r30, 4); + } + index2 = var_r30; + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x22, MEMORY_DEFAULT_NUM)); + temp_r28->unk00[index2] = temp_r3_2; + group = HuSprCreate(temp_r3_2, 0x7540, 0); + HuSprGrpMemberSet(temp_r3, index2, group); + HuSprTPLvlSet(temp_r3, index2, 0.7f); + index2++; + object->work[1] = object->work[0]; + HuSprAttrReset(temp_r3, object->work[1], 4); + object->func = &UpdateMGPic; +} + +static void UpdateMGInterface(omObjData *object) { void *sp8 = object->data; } + +static void CreateMGInterface(omObjData *object) +{ + mgInterface *unkStruct; + s16 index; + s16 group; + s16 index2; + AnimData *temp_r3_2; + float sp8[2]; + + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgInterface), MEMORY_DEFAULT_NUM); + unkStruct = object->data; + index2 = 0; + group = HuSprGrpCreate(1); + unkStruct->group = group; + HuSprGrpPosSet(group, 288.0f, 64.0f); + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x24, MEMORY_DEFAULT_NUM)); + unkStruct->unk00[index2] = temp_r3_2; + index = HuSprCreate(temp_r3_2, 0x2710, 0); + HuSprGrpMemberSet(group, 0, index); + index2++; + group = HuSprGrpCreate(1); + unkStruct->group2 = group; + HuSprGrpPosSet(group, 444.0f, 384.0f); + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x23, MEMORY_DEFAULT_NUM)); + unkStruct->unk00[index2] = temp_r3_2; + index = HuSprCreate(temp_r3_2, 0x271A, 0); + HuSprGrpMemberSet(group, 0, index); + index2++; + HuWinMesMaxSizeGet(1, sp8, &startText); + index = HuWinCreate(340.0f, 362.0f, sp8[0], sp8[1], 0); + unkStruct->unk2C = index; + HuWinMesColSet(index, 0); + HuWinBGTPLvlSet(index, 0.0f); + HuWinMesSpeedSet(index, 0); + HuWinMesSet(index, MAKE_MESSID_PTR(startText)); + object->func = UpdateMGInterface; +} From 512abb2d123c64cf6f5582f296e830cdd2293456 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 30 Apr 2024 22:27:13 +0200 Subject: [PATCH 06/22] Fixed things up in e3setup/main.c --- config/GMPE01_00/rels/E3setupDLL/symbols.txt | 2 +- include/REL/E3SetupDLL.h | 85 +- src/REL/E3setupDLL/mgselect.c | 788 +++++++++---------- 3 files changed, 424 insertions(+), 451 deletions(-) diff --git a/config/GMPE01_00/rels/E3setupDLL/symbols.txt b/config/GMPE01_00/rels/E3setupDLL/symbols.txt index 85cff679..aabb4f0e 100644 --- a/config/GMPE01_00/rels/E3setupDLL/symbols.txt +++ b/config/GMPE01_00/rels/E3setupDLL/symbols.txt @@ -42,7 +42,7 @@ InitCamera = .text:0x000056A8; // type:function size:0x7C scope:local UpdateCamera = .text:0x00005724; // type:function size:0x12C scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_2_rodata_0 = .rodata:0x00000000; // type:object size:0xA +lbl_2_rodata_0 = .rodata:0x00000000; // type:object size:0x10 lbl_2_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float lbl_2_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float lbl_2_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float diff --git a/include/REL/E3SetupDLL.h b/include/REL/E3SetupDLL.h index 651af661..a873ccf2 100644 --- a/include/REL/E3SetupDLL.h +++ b/include/REL/E3SetupDLL.h @@ -13,70 +13,43 @@ typedef struct e3pad { } E3Pad; typedef struct mgInterface { - /* 0x00 */ AnimData *unk00[2]; - /* 0x08 */ s32 pad; - /* 0x0C */ s32 pad2; - /* 0x10 */ s32 pad3; - /* 0x14 */ s32 pad4; - /* 0x18 */ s32 pad5; + /* 0x00 */ AnimData *unk_00[2]; + /* 0x08 */ s32 unk08[5]; /* 0x1C */ s16 group; /* 0x1E */ s16 group2; - /* 0x20 */ s32 pad6; - /* 0x24 */ s32 pad7; - /* 0x28 */ s32 pad8; - /* 0x2C */ s16 unk2C; - /* 0x2E */ s32 pad9; - /* the struct is 0x34 big */ + /* 0x20 */ s32 unk20[3]; + /* 0x2C */ s16 unk_2C; + /* 0x30 */ s32 unk30; } mgInterface; typedef struct mgPic { - /* 0x00 */ AnimData *unk00[2]; - /* 0x08 */ s32 pad; - /* 0x0C */ s32 pad2; - /* 0x10 */ s32 pad3; - /* 0x14 */ s32 pad4; - /* 0x18 */ s32 pad5; - /* 0x1C */ s16 pad6; - /* 0x1E */ s16 pad7; - /* 0x20 */ s32 pad8; - /* 0x24 */ s32 pad9; - /* 0x28 */ s32 pad10; - /* 0x2C */ s16 unk2C; - /* 0x2E */ s32 pad11; - /* 0x32 */ s32 pad12; - /* 0x36 */ s32 pad13; - /* 0x3A */ s32 pad14; - /* 0x40 */ s16 unk40; - /* 0x44 */ s32 pad15; - /* 0x48 */ s32 pad16; - /* 0x4C */ s32 unk4C; - /* 0x50 */ s32 pad18; - /* the struct is 0x54 big */ + /* 0x00 */ AnimData *unk_00[2]; + /* 0x08 */ s32 unk08[9]; + /* 0x2C */ s16 unk_2C; + /* 0x2E */ s32 unk2E[4]; + /* 0x40 */ s16 unk_40; + /* 0x44 */ s32 unk44[2]; + /* 0x4C */ s32 unk_4C; + /* 0x50 */ s32 unk50; } mgPic; typedef struct mgSelect { - /* 0x00 */ AnimData *unk00[4]; - /* 0x10 */ s32 pad3; - /* 0x14 */ s32 pad4; - /* 0x18 */ s32 pad5; - /* 0x1C */ s16 unk1C; - /* 0x1E */ s16 unk1E; - /* 0x20 */ s16 unk20; - /* 0x22 */ s16 pad20; - /* 0x24 */ s32 pad9; - /* 0x28 */ s32 pad10; - /* 0x2C */ s16 unk2C; - /* 0x2E */ s16 unk2E[4]; - /* 0x36 */ s16 pad13; - /* 0x38 */ s16 unk38[4]; - /* 0x40 */ s16 pad15; - /* 0x42 */ s16 unk42; - /* 0x44 */ s16 unk44; - /* 0x46 */ s16 unk46; - /* 0x48 */ s32 pad17; - /* 0x4C */ s32 pad18; - /* 0x50 */ s32 pad19; - /* the struct is 0x54 big */ + /* 0x00 */ AnimData *unk_00[4]; + /* 0x10 */ s32 unk10[3]; + /* 0x1C */ s16 unk_1C; + /* 0x1E */ s16 unk_1E; + /* 0x20 */ s16 unk_20; + /* 0x22 */ s16 unk22; + /* 0x24 */ s32 unk24[2]; + /* 0x2C */ s16 unk_2C; + /* 0x2E */ s16 unk_2E[4]; + /* 0x36 */ s16 unk36; + /* 0x38 */ s16 unk_38[4]; + /* 0x40 */ s16 unk40; + /* 0x42 */ s16 unk_42; + /* 0x44 */ s16 unk_44; + /* 0x46 */ s16 unk_46; + /* 0x48 */ s32 unk48[3]; } mgSelect; extern E3Pad e3PadData[4]; diff --git a/src/REL/E3setupDLL/mgselect.c b/src/REL/E3setupDLL/mgselect.c index adfc9082..73e333da 100644 --- a/src/REL/E3setupDLL/mgselect.c +++ b/src/REL/E3setupDLL/mgselect.c @@ -32,80 +32,80 @@ static void CreateMGInterface(omObjData *object); void E3MGSelectInit() { - s32 var_r29; - s32 var_r30; - Process *var_r31; + s32 var_r29; + s32 var_r30; + Process *var_r31; - for (var_r29 = 0, var_r30 = 0; var_r29 < 4; var_r29++) { - if (HuPadStatGet(var_r29) == 0) { - var_r30 += 1; - } - } - e3ConfigPlayerCnt = var_r30; - if (var_r30 <= 0) { - OSReport("No pad detected\n"); - var_r30 += 1; - } - mgDefault = 0; - HuSysVWaitSet(1); - var_r31 = omInitObjMan(0x50, 0x2000); - HuWinInit(1); - CRot.x = -4.0f; - CRot.y = 0.0f; - CRot.z = 0.0f; - Center.x = 0.0f; - Center.y = 160.0f; - Center.z = 0.0f; - CZoom = 1960.0; - e3CameraFov = 40.0f; - Hu3DCameraCreate(1); - Hu3DCameraPerspectiveSet(1, e3CameraFov, 100.0f, 25000.0f, 4.0f / 3.0f); - e3ViewObj = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); - e3OvlWatchObj = omAddObjEx(var_r31, 200, 0, 0, -1, E3OvlWatchInit); - e3MenuMainObj = omAddObjEx(var_r31, 10, 0, 0, -1, StartMGSelect); - e3BGObj = omAddObjEx(var_r31, 0x14, 0, 0, -1, E3BGCreate); - mgInterfaceObj = omAddObjEx(var_r31, 20, 0, 0, -1, CreateMGInterface); - mgSelectObj = omAddObjEx(var_r31, 30, 0, 0, -1, CreateMGSelect); - mgPicObj = omAddObjEx(var_r31, 31, 0, 0, -1, CreateMGPic); - mgPicObj->work[0] = mgDefault; - E3LightInit(); - WipeCreate(1, 0, -1); + for (var_r29 = 0, var_r30 = 0; var_r29 < 4; var_r29++) { + if (HuPadStatGet(var_r29) == 0) { + var_r30++; + } + } + e3ConfigPlayerCnt = var_r30; + if (var_r30 <= 0) { + OSReport("No pad detected\n"); + var_r30++; + } + mgDefault = 0; + HuSysVWaitSet(1); + var_r31 = omInitObjMan(0x50, 0x2000); + HuWinInit(1); + CRot.x = -4.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 160.0f; + Center.z = 0.0f; + CZoom = 1960.0; + e3CameraFov = 40.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, e3CameraFov, 100.0f, 25000.0f, 4.0f / 3.0f); + e3ViewObj = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); + e3OvlWatchObj = omAddObjEx(var_r31, 200, 0, 0, -1, E3OvlWatchInit); + e3MenuMainObj = omAddObjEx(var_r31, 10, 0, 0, -1, StartMGSelect); + e3BGObj = omAddObjEx(var_r31, 0x14, 0, 0, -1, E3BGCreate); + mgInterfaceObj = omAddObjEx(var_r31, 20, 0, 0, -1, CreateMGInterface); + mgSelectObj = omAddObjEx(var_r31, 30, 0, 0, -1, CreateMGSelect); + mgPicObj = omAddObjEx(var_r31, 31, 0, 0, -1, CreateMGPic); + mgPicObj->work[0] = mgDefault; + E3LightInit(); + WipeCreate(1, 0, -1); } s16 lbl_2_data_36[] = { 0x0023, 0x0026, 0x0029, 0x002C }; static s16 mgOvlTbl[] = { - 11, - 12, - 15, - 18, - 20, - 23, - 26, - 27, - 33, - 34, - 39, - 44, - 46, + 11, + 12, + 15, + 18, + 20, + 23, + 26, + 27, + 33, + 34, + 39, + 44, + 46, }; static s16 mgIdTbl[] = { 403, 404, 407, 410, 412, 415, 418, 419, 425, 426, 431, 436, 438, 0 }; static s32 mgNameTbl[] = { - 0x00170003, - 0x00170004, - 0x00170007, - 0x0017000A, - 0x0017000C, - 0x0017000F, - 0x00170012, - 0x00170013, - 0x00170019, - 0x0017001A, - 0x0017001F, - 0x00170024, - 0x00170026, + 0x00170003, + 0x00170004, + 0x00170007, + 0x0017000A, + 0x0017000C, + 0x0017000F, + 0x00170012, + 0x00170013, + 0x00170019, + 0x0017001A, + 0x0017001F, + 0x00170024, + 0x00170026, }; char lbl_2_data_A8[] = "\013TEST MINIGAME NAME01\n test"; @@ -120,382 +120,382 @@ char lbl_2_data_151[] = "\013TEST MINIGAME NAME09"; char lbl_2_data_167[] = "\013TEST MINIGAME NAME10"; char lbl_2_data_17D[] = "\013TEST MINIGAME NAME11"; char lbl_2_data_193[] = "\013TEST MINIGAME NAME12"; -char lbl_2_data_1A9[] = "\013TEST MINIGAME NAME13\000"; +char lbl_2_data_1A9[] = "\013TEST MINIGAME NAME13"; static char *mgNameTestTbl[] = { - lbl_2_data_A8, - lbl_2_data_C9, - lbl_2_data_DF, - lbl_2_data_F5, - lbl_2_data_10B, - lbl_2_data_118, - lbl_2_data_12E, - lbl_2_data_13B, - lbl_2_data_151, - lbl_2_data_167, - lbl_2_data_17D, - lbl_2_data_193, - lbl_2_data_1A9, + lbl_2_data_A8, + lbl_2_data_C9, + lbl_2_data_DF, + lbl_2_data_F5, + lbl_2_data_10B, + lbl_2_data_118, + lbl_2_data_12E, + lbl_2_data_13B, + lbl_2_data_151, + lbl_2_data_167, + lbl_2_data_17D, + lbl_2_data_193, + lbl_2_data_1A9, }; static float cursorYOfsTbl[] = { -100.0f, -50.0f, 0.0f, 50.0f, 100.0f }; static s32 mgPicTbl[] = { 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 }; -static char startText[] = "\013\016\r PRESS START\000\000\000\000"; +static char startText[] = "\013\016\r PRESS START"; static void StartMGSelect(omObjData *object) { - HuAudSeqPlay(0x2B); - lbl_2_bss_14 = 0; - lbl_2_bss_10 = -1; - lbl_2_bss_C = 0x1E; - lbl_2_bss_A = 0; - object->func = UpdatePad; - worstVcount = 0; - object->work[0] = 0; - object->work[1] = 0; + HuAudSeqPlay(0x2B); + lbl_2_bss_14 = 0; + lbl_2_bss_10 = -1; + lbl_2_bss_C = 0x1E; + lbl_2_bss_A = 0; + object->func = UpdatePad; + worstVcount = 0; + object->work[0] = 0; + object->work[1] = 0; } static void UpdatePad(omObjData *object) { - s32 i; - s32 players; + s32 i; + s32 players; - if (e3ExitEnableF == 0) { - for (i = 0, players = 0; i < 4; i++) { - E3PadUpdate(i, &e3PadData[i]); - if (!e3PadData[i].enable) { - players++; - } - } - e3ConfigPlayerCnt = players; - } + if (e3ExitEnableF == 0) { + for (i = 0, players = 0; i < 4; i++) { + E3PadUpdate(i, &e3PadData[i]); + if (!e3PadData[i].enable) { + players++; + } + } + e3ConfigPlayerCnt = players; + } } static void UpdateMGSelect(omObjData *object) { - mgSelect *var_r31; - s32 var_r30; - u32 var_r28; - s16 var_r27; - s16 var_r26; - s16 var_r25; - s16 var_r24; - u16 var_r23; - s16 var_r22; - s32 var_r21; - float sp8[2]; + mgSelect *var_r31; + s32 var_r30; + u32 var_r28; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + u16 var_r23; + s16 var_r22; + s32 var_r21; + float sp8[2]; - var_r31 = object->data; - var_r23 = e3PadData[e3PadCtrl].btnDown; - if (object->work[3] != 0) { - if ((var_r23 & 0x1100) != 0) { - HuAudFXPlay(1); - mgDefault = var_r31->unk44; - var_r21 = mgIdTbl[var_r31->unk44]; - GWMGAvailSet(var_r21); - GWSystem.mg_next = var_r21 - 401; - e3NextOvl = 3; - e3NextEvent = 0; - e3ExitMode = 2; - e3ExitEnableF = 1; - var_r28 = mgOvlTbl[var_r31->unk44]; + var_r31 = object->data; + var_r23 = e3PadData[e3PadCtrl].btnDown; + if (object->work[3] != 0) { + if ((var_r23 & 0x1100) != 0) { + HuAudFXPlay(1); + mgDefault = var_r31->unk_44; + var_r21 = mgIdTbl[var_r31->unk_44]; + GWMGAvailSet(var_r21); + GWSystem.mg_next = var_r21 - 401; + e3NextOvl = 3; + e3NextEvent = 0; + e3ExitMode = 2; + e3ExitEnableF = 1; + var_r28 = mgOvlTbl[var_r31->unk_44]; - for (var_r30 = 0; var_r30 < 50; var_r30++) { - if (var_r28 == mgInfoTbl[var_r30].ovl) { - break; - } - } - if (var_r30 >= 50) { - e3ExitMode = 0; - e3NextOvl = 0; - }; - switch (mgInfoTbl[var_r30].type) { - case 0: - case 3: - case 4: - case 5: - case 6: - for (var_r30 = 0; var_r30 < 4; var_r30++) { - GWPlayerCfg[var_r30].group = var_r30; - } - break; - case 1: - var_r28 = frand(); - var_r28 &= 3; - for (var_r30 = 0; var_r30 < 4; var_r30++) { - if (var_r28 == var_r30) { - GWPlayerCfg[var_r30].group = 0; - } else { - GWPlayerCfg[var_r30].group = 1; - } - } - break; - case 2: - for (var_r30 = 0; var_r30 < 2; var_r30++) { - GWPlayerCfg[var_r30].group = 0; - } - for (var_r30 = 2; var_r30 < 4; var_r30++) { - GWPlayerCfg[var_r30].group = 1; - } - break; - } - object->work[3] = 0; - return; - } - if ((var_r23 & 0x200) != 0) { - HuAudFXPlay(3); - e3ExitMode = 0; - e3NextOvl = 0; - e3NextEvent = 0; - e3ExitEnableF = 1; - object->work[3] = 0; - return; - } - if (object->work[3] != 0) { - if ((var_r23 & 8) != 0) { - HuAudFXPlay(0); - var_r31->unk44--; - if (var_r31->unk44 < 0) { - var_r31->unk44 = 0xC; - } - } else if ((var_r23 & 4) != 0) { - HuAudFXPlay(0); - var_r31->unk44++; - if (var_r31->unk44 >= 13) { - var_r31->unk44 = 0; - } - } - if (var_r31->unk46 != var_r31->unk44) { - mgPicObj->work[0] = var_r31->unk44; - var_r27 = var_r31->unk44 - var_r31->unk46; - if ((var_r27 > 1) || (var_r27 < -1)) { - if (var_r27 < 0) { - var_r27 = 1; - } else { - var_r27 = -1; - } - } - var_r25 = var_r31->unk42 + var_r27; - if ((var_r25 < 0) || (var_r25 >= 5)) { - for (var_r30 = 0; var_r30 < 5; var_r30++) { - var_r22 = var_r31->unk2E[var_r30]; - var_r26 = var_r31->unk38[var_r30]; - var_r24 = var_r26 - var_r27; - if ((var_r24 < 0) || (var_r24 >= 5)) { - var_r28 = mgNameTbl[var_r31->unk44]; - HuWinMesSizeCancelCRSet(1); - HuWinMesMaxSizeGet(1, sp8, var_r28); - HuWinCenterPosSet(var_r22, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); - HuWinMesSet(var_r22, var_r28); - if (var_r24 < 0) { - var_r26 = 4; - } else { - var_r26 = 0; - } - } else { - var_r26 = var_r24; - } - HuWinPosSet(var_r22, 36.0f, 237.0f + cursorYOfsTbl[var_r26]); - var_r31->unk38[var_r30] = var_r26; - } - } else { - var_r31->unk42 = var_r25; - HuSprPosSet(var_r31->unk1C, 1, 0.0f, cursorYOfsTbl[var_r25]); - } - var_r31->unk46 = var_r31->unk44; - } - } - } + for (var_r30 = 0; var_r30 < 50; var_r30++) { + if (var_r28 == mgInfoTbl[var_r30].ovl) { + break; + } + } + if (var_r30 >= 50) { + e3ExitMode = 0; + e3NextOvl = 0; + }; + switch (mgInfoTbl[var_r30].type) { + case 0: + case 3: + case 4: + case 5: + case 6: + for (var_r30 = 0; var_r30 < 4; var_r30++) { + GWPlayerCfg[var_r30].group = var_r30; + } + break; + case 1: + var_r28 = frand(); + var_r28 &= 3; + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r28 == var_r30) { + GWPlayerCfg[var_r30].group = 0; + } else { + GWPlayerCfg[var_r30].group = 1; + } + } + break; + case 2: + for (var_r30 = 0; var_r30 < 2; var_r30++) { + GWPlayerCfg[var_r30].group = 0; + } + for (var_r30 = 2; var_r30 < 4; var_r30++) { + GWPlayerCfg[var_r30].group = 1; + } + break; + } + object->work[3] = 0; + return; + } + if ((var_r23 & 0x200) != 0) { + HuAudFXPlay(3); + e3ExitMode = 0; + e3NextOvl = 0; + e3NextEvent = 0; + e3ExitEnableF = 1; + object->work[3] = 0; + return; + } + if (object->work[3] != 0) { + if ((var_r23 & 8) != 0) { + HuAudFXPlay(0); + var_r31->unk_44--; + if (var_r31->unk_44 < 0) { + var_r31->unk_44 = 0xC; + } + } else if ((var_r23 & 4) != 0) { + HuAudFXPlay(0); + var_r31->unk_44++; + if (var_r31->unk_44 >= 13) { + var_r31->unk_44 = 0; + } + } + if (var_r31->unk_46 != var_r31->unk_44) { + mgPicObj->work[0] = var_r31->unk_44; + var_r27 = var_r31->unk_44 - var_r31->unk_46; + if ((var_r27 > 1) || (var_r27 < -1)) { + if (var_r27 < 0) { + var_r27 = 1; + } else { + var_r27 = -1; + } + } + var_r25 = var_r31->unk_42 + var_r27; + if ((var_r25 < 0) || (var_r25 >= 5)) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + var_r22 = var_r31->unk_2E[var_r30]; + var_r26 = var_r31->unk_38[var_r30]; + var_r24 = var_r26 - var_r27; + if ((var_r24 < 0) || (var_r24 >= 5)) { + var_r28 = mgNameTbl[var_r31->unk_44]; + HuWinMesSizeCancelCRSet(1); + HuWinMesMaxSizeGet(1, sp8, var_r28); + HuWinCenterPosSet(var_r22, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); + HuWinMesSet(var_r22, var_r28); + if (var_r24 < 0) { + var_r26 = 4; + } else { + var_r26 = 0; + } + } else { + var_r26 = var_r24; + } + HuWinPosSet(var_r22, 36.0f, 237.0f + cursorYOfsTbl[var_r26]); + var_r31->unk_38[var_r30] = var_r26; + } + } else { + var_r31->unk_42 = var_r25; + HuSprPosSet(var_r31->unk_1C, 1, 0.0f, cursorYOfsTbl[var_r25]); + } + var_r31->unk_46 = var_r31->unk_44; + } + } + } } static void CreateMGSelect(omObjData *object) { - mgSelect *temp_r31; - s16 temp_r30; - s16 temp_r29; - s32 var_r28; - s16 var_r26; - s16 index2; - u32 temp_r22; - s32 temp_r21; - AnimData *temp_r25; - AnimData *temp_r23; - float sp8[2]; + mgSelect *temp_r31; + s16 temp_r30; + s16 temp_r29; + s32 var_r28; + s16 var_r26; + s16 index2; + u32 temp_r22; + s32 temp_r21; + AnimData *temp_r25; + AnimData *temp_r23; + float sp8[2]; - omSetStatBit(object, OM_STAT_MODEL_PAUSED); - object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x48, MEMORY_DEFAULT_NUM); - temp_r31 = object->data; - index2 = 0; - temp_r30 = HuSprGrpCreate(3); - temp_r31->unk1C = temp_r30; - HuSprGrpPosSet(temp_r30, 174.0f, 271.0f); - temp_r25 = HuSprAnimRead(HuDataReadNum(0x21, MEMORY_DEFAULT_NUM)); - temp_r31->unk00[index2] = temp_r25; - temp_r29 = HuSprCreate(temp_r25, 0x7540, 0); - HuSprGrpMemberSet(temp_r30, index2, temp_r29); - index2++; - temp_r25 = HuSprAnimRead(HuDataReadNum(0x27, MEMORY_DEFAULT_NUM)); - temp_r31->unk00[index2] = temp_r25; - temp_r29 = HuSprCreate(temp_r25, 0x64, 0); - HuSprGrpMemberSet(temp_r30, index2, temp_r29); - HuSprScaleSet(temp_r30, index2, 1.1f, 1.0f); - HuSprTPLvlSet(temp_r30, index2, 0.5f); - temp_r31->unk42 = 0; - HuSprPosSet(temp_r30, index2, 0.0f, cursorYOfsTbl[temp_r31->unk42]); - index2++; - temp_r25 = HuSprAnimRead(HuDataReadNum(0x35, MEMORY_DEFAULT_NUM)); - temp_r31->unk00[index2++] = temp_r25; - temp_r23 = HuSprAnimRead(HuDataReadNum(0x36, MEMORY_DEFAULT_NUM)); - temp_r31->unk00[index2++] = temp_r23; - temp_r30 = HuSprGrpCreate(2); - temp_r31->unk1E = temp_r30; - HuSprGrpPosSet(temp_r30, 174.0f, 128.0f); - temp_r29 = HuSprCreate(temp_r25, 4, 0); - HuSprGrpMemberSet(temp_r30, 0, temp_r29); - temp_r29 = HuSprCreate(temp_r23, 6, 0); - HuSprGrpMemberSet(temp_r30, 1, temp_r29); - HuSprTPLvlSet(temp_r30, 1, 0.7f); - HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); - temp_r30 = HuSprGrpCreate(2); - temp_r31->unk20 = temp_r30; - HuSprGrpPosSet(temp_r30, 174.0f, 414.0f); - temp_r29 = HuSprCreate(temp_r25, 4, 1); - HuSprGrpMemberSet(temp_r30, 0, temp_r29); - temp_r29 = HuSprCreate(temp_r23, 6, 1); - HuSprGrpMemberSet(temp_r30, 1, temp_r29); - HuSprTPLvlSet(temp_r30, 1, 0.7f); - HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x48, MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + index2 = 0; + temp_r30 = HuSprGrpCreate(3); + temp_r31->unk_1C = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 271.0f); + temp_r25 = HuSprAnimRead(HuDataReadNum(0x21, MEMORY_DEFAULT_NUM)); + temp_r31->unk_00[index2] = temp_r25; + temp_r29 = HuSprCreate(temp_r25, 0x7540, 0); + HuSprGrpMemberSet(temp_r30, index2, temp_r29); + index2++; + temp_r25 = HuSprAnimRead(HuDataReadNum(0x27, MEMORY_DEFAULT_NUM)); + temp_r31->unk_00[index2] = temp_r25; + temp_r29 = HuSprCreate(temp_r25, 0x64, 0); + HuSprGrpMemberSet(temp_r30, index2, temp_r29); + HuSprScaleSet(temp_r30, index2, 1.1f, 1.0f); + HuSprTPLvlSet(temp_r30, index2, 0.5f); + temp_r31->unk_42 = 0; + HuSprPosSet(temp_r30, index2, 0.0f, cursorYOfsTbl[temp_r31->unk_42]); + index2++; + temp_r25 = HuSprAnimRead(HuDataReadNum(0x35, MEMORY_DEFAULT_NUM)); + temp_r31->unk_00[index2++] = temp_r25; + temp_r23 = HuSprAnimRead(HuDataReadNum(0x36, MEMORY_DEFAULT_NUM)); + temp_r31->unk_00[index2++] = temp_r23; + temp_r30 = HuSprGrpCreate(2); + temp_r31->unk_1E = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 128.0f); + temp_r29 = HuSprCreate(temp_r25, 4, 0); + HuSprGrpMemberSet(temp_r30, 0, temp_r29); + temp_r29 = HuSprCreate(temp_r23, 6, 0); + HuSprGrpMemberSet(temp_r30, 1, temp_r29); + HuSprTPLvlSet(temp_r30, 1, 0.7f); + HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); + temp_r30 = HuSprGrpCreate(2); + temp_r31->unk_20 = temp_r30; + HuSprGrpPosSet(temp_r30, 174.0f, 414.0f); + temp_r29 = HuSprCreate(temp_r25, 4, 1); + HuSprGrpMemberSet(temp_r30, 0, temp_r29); + temp_r29 = HuSprCreate(temp_r23, 6, 1); + HuSprGrpMemberSet(temp_r30, 1, temp_r29); + HuSprTPLvlSet(temp_r30, 1, 0.7f); + HuSprPosSet(temp_r30, 1, 0.0f, -4.0f); - temp_r21 = GWSystem.mg_next + 401; - var_r26 = temp_r21; - for (var_r28 = 0; var_r28 < 13;) { - if (var_r26 != mgIdTbl[var_r28]) { - var_r28++; - } else { - break; - } - } - if (var_r28 >= 13) { - var_r28 = 0; - } - mgDefault = var_r28; - var_r26 = mgDefault; - mgPicObj->work[0] = var_r26; - temp_r31->unk44 = var_r26; - temp_r31->unk46 = var_r26; + temp_r21 = GWSystem.mg_next + 401; + var_r26 = temp_r21; + for (var_r28 = 0; var_r28 < 13;) { + if (var_r26 != mgIdTbl[var_r28]) { + var_r28++; + } else { + break; + } + } + if (var_r28 >= 13) { + var_r28 = 0; + } + mgDefault = var_r28; + var_r26 = mgDefault; + mgPicObj->work[0] = var_r26; + temp_r31->unk_44 = var_r26; + temp_r31->unk_46 = var_r26; - for (var_r28 = 0; var_r28 < 5;) { - if (var_r26 >= 13) { - var_r26 = 0; - } - temp_r29 = HuWinCreate(36.0f, 237.0f + cursorYOfsTbl[var_r28], 0x128, 0x44, 0x4E20); - temp_r31->unk2E[var_r28] = temp_r29; - temp_r31->unk38[var_r28] = var_r28; - HuWinBGTPLvlSet(temp_r29, 0.0f); - HuWinMesSpeedSet(temp_r29, 0); - temp_r22 = mgNameTbl[var_r26]; - HuWinAttrSet(temp_r29, 0x100); - HuWinMesSizeCancelCRSet(1); - HuWinMesMaxSizeGet(1, sp8, temp_r22); - HuWinCenterPosSet(temp_r29, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); - HuWinMesSet(temp_r29, temp_r22); - var_r28++; - var_r26++; - } - object->work[3] = 1; - object->func = &UpdateMGSelect; + for (var_r28 = 0; var_r28 < 5;) { + if (var_r26 >= 13) { + var_r26 = 0; + } + temp_r29 = HuWinCreate(36.0f, 237.0f + cursorYOfsTbl[var_r28], 0x128, 0x44, 0x4E20); + temp_r31->unk_2E[var_r28] = temp_r29; + temp_r31->unk_38[var_r28] = var_r28; + HuWinBGTPLvlSet(temp_r29, 0.0f); + HuWinMesSpeedSet(temp_r29, 0); + temp_r22 = mgNameTbl[var_r26]; + HuWinAttrSet(temp_r29, 0x100); + HuWinMesSizeCancelCRSet(1); + HuWinMesMaxSizeGet(1, sp8, temp_r22); + HuWinCenterPosSet(temp_r29, (296.0f - sp8[0]) / -2.0f, (68.0f - sp8[1]) / -2.0f); + HuWinMesSet(temp_r29, temp_r22); + var_r28++; + var_r26++; + } + object->work[3] = 1; + object->func = &UpdateMGSelect; } static void UpdateMGPic(omObjData *object) { - mgPic *temp_r30 = (mgPic *)object->data; - s16 temp_r29; + mgPic *temp_r30 = (mgPic *)object->data; + s16 temp_r29; - if (object->work[1] != object->work[0]) { - temp_r29 = temp_r30->unk40; - HuSprAttrSet(temp_r29, object->work[1], 4); - HuSprAttrReset(temp_r29, object->work[0], 4); - object->work[1] = object->work[0]; - } + if (object->work[1] != object->work[0]) { + temp_r29 = temp_r30->unk_40; + HuSprAttrSet(temp_r29, object->work[1], 4); + HuSprAttrReset(temp_r29, object->work[0], 4); + object->work[1] = object->work[0]; + } } static void CreateMGPic(omObjData *object) { - mgPic *temp_r28; - AnimData *temp_r3_2; - s16 temp_r3; - s32 var_r30; - s32 index; - s16 index2; - s16 group; + mgPic *temp_r28; + AnimData *temp_r3_2; + s16 temp_r3; + s32 var_r30; + s32 index; + s16 index2; + s16 group; - omSetStatBit(object, OM_STAT_MODEL_PAUSED); - object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgPic), MEMORY_DEFAULT_NUM); - temp_r28 = object->data; - index2 = 0; - temp_r3 = HuSprGrpCreate(14); - temp_r28->unk40 = temp_r3; - HuSprGrpPosSet(temp_r3, 444.0f, 228.0f); + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgPic), MEMORY_DEFAULT_NUM); + temp_r28 = object->data; + index2 = 0; + temp_r3 = HuSprGrpCreate(14); + temp_r28->unk_40 = temp_r3; + HuSprGrpPosSet(temp_r3, 444.0f, 228.0f); - for (var_r30 = 0; var_r30 < 13; var_r30++) { - temp_r3_2 = HuSprAnimRead(HuDataReadNum(mgPicTbl[var_r30], MEMORY_DEFAULT_NUM)); - temp_r28->unk00[var_r30] = temp_r3_2; - group = HuSprCreate(temp_r3_2, 0x2710, 0); - HuSprGrpMemberSet(temp_r3, var_r30, group); - HuSprScaleSet(temp_r3, var_r30, 0.6f, 0.6f); - HuSprAttrSet(temp_r3, var_r30, 4); - } - index2 = var_r30; - temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x22, MEMORY_DEFAULT_NUM)); - temp_r28->unk00[index2] = temp_r3_2; - group = HuSprCreate(temp_r3_2, 0x7540, 0); - HuSprGrpMemberSet(temp_r3, index2, group); - HuSprTPLvlSet(temp_r3, index2, 0.7f); - index2++; - object->work[1] = object->work[0]; - HuSprAttrReset(temp_r3, object->work[1], 4); - object->func = &UpdateMGPic; + for (var_r30 = 0; var_r30 < 13; var_r30++) { + temp_r3_2 = HuSprAnimRead(HuDataReadNum(mgPicTbl[var_r30], MEMORY_DEFAULT_NUM)); + temp_r28->unk_00[var_r30] = temp_r3_2; + group = HuSprCreate(temp_r3_2, 0x2710, 0); + HuSprGrpMemberSet(temp_r3, var_r30, group); + HuSprScaleSet(temp_r3, var_r30, 0.6f, 0.6f); + HuSprAttrSet(temp_r3, var_r30, 4); + } + index2 = var_r30; + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x22, MEMORY_DEFAULT_NUM)); + temp_r28->unk_00[index2] = temp_r3_2; + group = HuSprCreate(temp_r3_2, 0x7540, 0); + HuSprGrpMemberSet(temp_r3, index2, group); + HuSprTPLvlSet(temp_r3, index2, 0.7f); + index2++; + object->work[1] = object->work[0]; + HuSprAttrReset(temp_r3, object->work[1], 4); + object->func = &UpdateMGPic; } static void UpdateMGInterface(omObjData *object) { void *sp8 = object->data; } static void CreateMGInterface(omObjData *object) { - mgInterface *unkStruct; - s16 index; - s16 group; - s16 index2; - AnimData *temp_r3_2; - float sp8[2]; + mgInterface *unkStruct; + s16 index; + s16 group; + s16 index2; + AnimData *temp_r3_2; + float sp8[2]; - omSetStatBit(object, OM_STAT_MODEL_PAUSED); - object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgInterface), MEMORY_DEFAULT_NUM); - unkStruct = object->data; - index2 = 0; - group = HuSprGrpCreate(1); - unkStruct->group = group; - HuSprGrpPosSet(group, 288.0f, 64.0f); - temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x24, MEMORY_DEFAULT_NUM)); - unkStruct->unk00[index2] = temp_r3_2; - index = HuSprCreate(temp_r3_2, 0x2710, 0); - HuSprGrpMemberSet(group, 0, index); - index2++; - group = HuSprGrpCreate(1); - unkStruct->group2 = group; - HuSprGrpPosSet(group, 444.0f, 384.0f); - temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x23, MEMORY_DEFAULT_NUM)); - unkStruct->unk00[index2] = temp_r3_2; - index = HuSprCreate(temp_r3_2, 0x271A, 0); - HuSprGrpMemberSet(group, 0, index); - index2++; - HuWinMesMaxSizeGet(1, sp8, &startText); - index = HuWinCreate(340.0f, 362.0f, sp8[0], sp8[1], 0); - unkStruct->unk2C = index; - HuWinMesColSet(index, 0); - HuWinBGTPLvlSet(index, 0.0f); - HuWinMesSpeedSet(index, 0); - HuWinMesSet(index, MAKE_MESSID_PTR(startText)); - object->func = UpdateMGInterface; + omSetStatBit(object, OM_STAT_MODEL_PAUSED); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(mgInterface), MEMORY_DEFAULT_NUM); + unkStruct = object->data; + index2 = 0; + group = HuSprGrpCreate(1); + unkStruct->group = group; + HuSprGrpPosSet(group, 288.0f, 64.0f); + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x24, MEMORY_DEFAULT_NUM)); + unkStruct->unk_00[index2] = temp_r3_2; + index = HuSprCreate(temp_r3_2, 0x2710, 0); + HuSprGrpMemberSet(group, 0, index); + index2++; + group = HuSprGrpCreate(1); + unkStruct->group2 = group; + HuSprGrpPosSet(group, 444.0f, 384.0f); + temp_r3_2 = HuSprAnimRead(HuDataReadNum(0x23, MEMORY_DEFAULT_NUM)); + unkStruct->unk_00[index2] = temp_r3_2; + index = HuSprCreate(temp_r3_2, 0x271A, 0); + HuSprGrpMemberSet(group, 0, index); + index2++; + HuWinMesMaxSizeGet(1, sp8, &startText); + index = HuWinCreate(340.0f, 362.0f, sp8[0], sp8[1], 0); + unkStruct->unk_2C = index; + HuWinMesColSet(index, 0); + HuWinBGTPLvlSet(index, 0.0f); + HuWinMesSpeedSet(index, 0); + HuWinMesSet(index, MAKE_MESSID_PTR(startText)); + object->func = UpdateMGInterface; } From 4ca36ea9a6ec7aecd581f1814d0cb69813b9012b Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 30 Apr 2024 22:32:50 +0200 Subject: [PATCH 07/22] Omit & for function pointers in e3setup/main.c --- .clang-format | 4 + ctx_asd.c | 6525 +++++++++++++++++++++++++++++++++ ctx_working.c | 2402 ++++++++++++ src/REL/E3setupDLL/mgselect.c | 4 +- tools/permuter_settings.toml | 2 + 5 files changed, 8935 insertions(+), 2 deletions(-) create mode 100644 .clang-format create mode 100644 ctx_asd.c create mode 100644 ctx_working.c create mode 100644 tools/permuter_settings.toml diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..f1e35120 --- /dev/null +++ b/.clang-format @@ -0,0 +1,4 @@ +BasedOnStyle: WebKit +IndentWidth: 4 +ColumnLimit: 120 +PointerAlignment: Right diff --git a/ctx_asd.c b/ctx_asd.c new file mode 100644 index 00000000..37df112c --- /dev/null +++ b/ctx_asd.c @@ -0,0 +1,6525 @@ +#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num))) +typedef signed char s8; +typedef signed short int s16; +typedef signed long s32; +typedef signed long long int s64; +typedef unsigned char u8; +typedef unsigned short int u16; +typedef unsigned long u32; +typedef unsigned long long int u64; + +typedef volatile u8 vu8; +typedef volatile u16 vu16; +typedef volatile u32 vu32; +typedef volatile u64 vu64; + +typedef volatile s8 vs8; +typedef volatile s16 vs16; +typedef volatile s32 vs32; +typedef volatile s64 vs64; + +typedef float f32; +typedef double f64; + +typedef volatile f32 vf32; +typedef volatile f64 vf64; +typedef int BOOL; +#define FALSE 0 +#define TRUE 1 + +#define NULL ((void *)0) +#define nullptr NULL + +#define CTR 9 +#define XER 1 +#define LR 8 + +#define UPMC1 937 +#define UPMC2 938 +#define UPMC3 941 +#define UPMC4 942 + +#define USIA 939 + +#define UMMCR0 936 +#define UMMCR1 940 + +#define HID0 1008 +#define HID1 1009 + +#define PVR 287 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 + +#define SDR1 25 + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define DAR 19 +#define DSISR 18 + +#define SRR0 26 +#define SRR1 27 + +#define EAR 282 + +#define DABR 1013 + +#define TBL 284 +#define TBU 285 + +#define L2CR 1017 + +#define DEC 22 + +#define IABR 1010 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define SIA 955 + +#define MMCR0 952 +#define MMCR1 956 + +#define THRM1 1020 +#define THRM2 1021 +#define THRM3 1022 + +#define ICTC 1019 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define HID2 920 + +#define WPAR 921 + +#define DMA_U 922 +#define DMA_L 923 + +#define MSR_POW 0x00040000 // Power Management +#define MSR_ILE 0x00010000 // Interrupt Little Endian +#define MSR_EE 0x00008000 // external interrupt +#define MSR_PR 0x00004000 // privilege level(should be 0) +#define MSR_FP 0x00002000 // floating point available +#define MSR_ME 0x00001000 // machine check enable +#define MSR_FE0 0x00000800 // floating point exception enable +#define MSR_SE 0x00000400 // single step trace enable +#define MSR_BE 0x00000200 // branch trace enable +#define MSR_FE1 0x00000100 // floating point exception enable +#define MSR_IP 0x00000040 // Exception prefix +#define MSR_IR 0x00000020 // instruction relocate +#define MSR_DR 0x00000010 // data relocate +#define MSR_PM 0x00000004 // Performance monitor marked mode +#define MSR_RI 0x00000002 // Recoverable interrupt +#define MSR_LE 0x00000001 // Little Endian + +#define MSR_POW_BIT 13 // Power Management +#define MSR_ILE_BIT 15 // Interrupt Little Endian +#define MSR_EE_BIT 16 // external interrupt +#define MSR_PR_BIT 17 // privilege level (should be 0) +#define MSR_FP_BIT 18 // floating point available +#define MSR_ME_BIT 19 // machine check enable +#define MSR_FE0_BIT 20 // floating point exception enable +#define MSR_SE_BIT 21 // single step trace enable +#define MSR_BE_BIT 22 // branch trace enable +#define MSR_FE1_BIT 23 // floating point exception enable +#define MSR_IP_BIT 25 // Exception prefix +#define MSR_IR_BIT 26 // instruction relocate +#define MSR_DR_BIT 27 // data relocate +#define MSR_PM_BIT 29 // Performance monitor marked mode +#define MSR_RI_BIT 30 // Recoverable interrupt +#define MSR_LE_BIT 31 // Little Endian + +/*---------------------------------------------------------------------------* + HID0 bits + *---------------------------------------------------------------------------*/ +#define HID0_EMCP 0x80000000 // Enable MCP +#define HID0_DBP 0x40000000 // Enable 60x bus address and data parity chk +#define HID0_EBA 0x20000000 // Enable 60x address parity checking +#define HID0_EBD 0x10000000 // Enable 60x data parity checking +#define HID0_BCLK 0x08000000 // CLK_OUT output enable and clk selection +#define HID0_ECLK 0x02000000 // CLK_OUT output enable and clk selection +#define HID0_PAR 0x01000000 // Disable !ARTRY precharge +#define HID0_DOZE 0x00800000 // Doze mode enable +#define HID0_NAP 0x00400000 // Nap mode enable +#define HID0_SLEEP 0x00200000 // Sleep mode enable +#define HID0_DPM 0x00100000 // Dynamic power management enable +#define HID0_NHR 0x00010000 // Not hard reset (0 hard reset if s/w set it) +#define HID0_ICE 0x00008000 // Instruction cache enable +#define HID0_DCE 0x00004000 // Data cache enable +#define HID0_ILOCK 0x00002000 // ICache lock +#define HID0_DLOCK 0x00001000 // DCache lock +#define HID0_ICFI 0x00000800 // ICache flash invalidate +#define HID0_DCFI 0x00000400 // DCache flash invalidate +#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable) +#define HID0_IFEM 0x00000100 // Enable M bit on bus for Ifetch +#define HID0_SGE 0x00000080 // Store gathering enable +#define HID0_DCFA 0x00000040 // DCache flush assist - set before a flush +#define HID0_BTIC 0x00000020 // Branch target icache enable +#define HID0_ABE 0x00000008 // Address bcast enable +#define HID0_BHT 0x00000004 // Branch history table enable +#define HID0_NOOPTI 0x00000001 // No-op Dcache touch instructions + +#define HID0_ICE_BIT 16 // Instruction cache enable +#define HID0_DCE_BIT 17 // Data cache enable +#define HID0_ILOCK_BIT 18 // ICache lock +#define HID0_DLOCK_BIT 19 // DCache lock + +#define HID2_LSQE 0x80000000 // L/S quantize enable +#define HID2_WPE 0x40000000 // Write pipe enable +#define HID2_PSE 0x20000000 // Paired single enable +#define HID2_LCE 0x10000000 // Locked cache enable + +#define HID2_DCHERR 0x00800000 // ERROR: dcbz_l cache hit +#define HID2_DNCERR 0x00400000 // ERROR: DMA access to normal cache +#define HID2_DCMERR 0x00200000 // ERROR: DMA cache miss error +#define HID2_DQOERR 0x00100000 // ERROR: DMA queue overflow +#define HID2_DCHEE 0x00080000 // dcbz_l cache hit error enable +#define HID2_DNCEE 0x00040000 // DMA access to normal cache error enable +#define HID2_DCMEE 0x00020000 // DMA cache miss error error enable +#define HID2_DQOEE 0x00010000 // DMA queue overflow error enable + +#define HID2_DMAQL_MASK 0x0F000000 // DMA queue length mask +#define HID2_DMAQL_SHIFT 24 // DMA queue shift + +#define HID2_LSQE_BIT 0 +#define HID2_WPE_BIT 1 +#define HID2_PSE_BIT 2 +#define HID2_LCE_BIT 3 + +#define HID2_DCHERR_BIT 8 +#define HID2_DNCERR_BIT 9 +#define HID2_DCMERR_BIT 10 +#define HID2_DQOERR_BIT 11 +#define HID2_DCHEE_BIT 12 +#define HID2_DNCEE_BIT 13 +#define HID2_DCMEE_BIT 14 +#define HID2_DQOEE_BIT 15 + +#define GQR_LOAD_SCALE_MASK 0x3F000000 // load scale field +#define GQR_LOAD_TYPE_MASK 0x00070000 // load type field +#define GQR_STORE_SCALE_MASK 0x00003F00 // store scale field +#define GQR_STORE_TYPE_MASK 0x00000007 // store type field + +typedef struct +{ + u32 _pad0 :2; + u32 loadScale :6; + u32 _pad1 :5; + u32 loadType :3; + u32 _pad2 :2; + u32 storeScale :6; + u32 _pad3 :5; + u32 storeType :3; +} PPC_GQR_t; + +typedef union +{ + u32 val; + PPC_GQR_t f; +} PPC_GQR_u; + + +#define DMA_U_ADDR_MASK 0xFFFFFFE0 // Start addr in memory +#define DMA_U_LEN_U_MASK 0x0000001F // lines to transfer (U) + +#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0 // Start addr in LC +#define DMA_L_LOAD 0x00000010 // 0 - store, 1 - load +#define DMA_L_STORE 0x00000000 // 0 - store, 1 - load +#define DMA_L_LEN_MASK 0x0000000C // lines to transfer (L) +#define DMA_L_TRIGGER 0x00000002 // 0 - cmd inactive, 1 - cmd rdy +#define DMA_L_FLUSH 0x00000001 // 1 - Flush DMA queue + +typedef struct +{ + u32 memAddr :27; + u32 dmaLenU :5; +} PPC_DMA_U_t; + +typedef union +{ + u32 val; + PPC_DMA_U_t f; +} PPC_DMA_U_u; + + +typedef struct +{ + u32 lcAddr :27; + u32 dmaLd :1; + u32 dmaLenL :2; + u32 dmaTrigger :1; + u32 dmaFlush :1; +} PPC_DMA_L_t; + + +typedef union +{ + u32 val; + PPC_DMA_L_t f; +} PPC_DMA_L_u; + + +#define WPAR_ADDR 0xFFFFFFE0 // 32byte gather address +#define WPAR_BNE 0x00000001 // Buffer not empty (R) + +#define SRR1_DMA_BIT 0x00200000 +#define SRR1_L2DP_BIT 0x00100000 + +#define L2CR_L2E 0x80000000 // L2 Enable +#define L2CR_L2PE 0x40000000 // L2 data parity generation and checking enable + +#define L2CR_L2SIZ_256K 0x10000000 // L2 size 256K +#define L2CR_L2SIZ_512K 0x20000000 // L2 size 512 +#define L2CR_L2SIZ_1M 0x30000000 // L2 size 1M + +#define L2CR_L2CLK_1_0 0x02000000 // L2 clock ratio 1 +#define L2CR_L2CLK_1_5 0x04000000 // L2 clock ratio 1.5 +#define L2CR_L2CLK_2_0 0x08000000 // L2 clock ratio 2 +#define L2CR_L2CLK_2_5 0x0A000000 // L2 clock ratio 2.5 +#define L2CR_L2CLK_3_0 0x0C000000 // L2 clock ratio 3 + +#define L2CR_RAM_FLOW_THRU_BURST 0x00000000 // L2 RAM type flow-through sync. burst SRAM +#define L2CR_RAM_PIPELINE_BURST 0x01000000 // L2 RAM type pipelined sync. burst SRAM +#define L2CR_RAM_PIPELINE_LATE 0x01800000 // L2 RAM type pipelined sync. late-write SRAM + +#define L2CR_L2DO 0x00400000 // Data only +#define L2CR_L2I 0x00200000 // Global invalidate +#define L2CR_L2CTL 0x00100000 // ZZ enable +#define L2CR_L2WT 0x00080000 // L2 write through +#define L2CR_L2TS 0x00040000 // L2 test support + +#define L2CR_L2OH_0_5 0x00000000 // L2 output hold 0.5 ns +#define L2CR_L2OH_1_0 0x00010000 // L2 output hold 1.0 ns + +#define L2CR_L2SL 0x00008000 // L2 DLL slow +#define L2CR_L2DF 0x00004000 // L2 differential clock +#define L2CR_L2BYP 0x00002000 // L2 DLL bypass +#define L2CR_L2CS 0x00000200 // L2 clock stop +#define L2CR_L2DRO 0x00000100 // L2 DLL rollover checkstop enable +#define L2CR_L2CTR_MASK 0x000000FE // L2 counter value mask +#define L2CR_L2IP 0x00000001 // L2 global invalidate in progress + +#define MMCR0_DIS 0x80000000 // Disables counting unconditionally +#define MMCR0_DP 0x40000000 // Disables counting while in supervisor mode +#define MMCR0_DU 0x20000000 // Disables counting while in user mode +#define MMCR0_DMS 0x10000000 // Disables counting while MSR[PM] is set +#define MMCR0_DMR 0x08000000 // Disables counting while MSR[PM] is zero +#define MMCR0_ENINT 0x04000000 // Enables performance monitor interrupt signaling +#define MMCR0_DISCOUNT 0x02000000 // Disables counting of PMCn when a performance monitor interrupt is signaled or... +#define MMCR0_RTCSELECT_MASK 0x01800000 // 64-bit time base, bit selection enable +#define MMCR0_RTCSELECT_63 0x00000000 // Pick bit 63 to count +#define MMCR0_RTCSELECT_55 0x00800000 // Pick bit 55 to count +#define MMCR0_RTCSELECT_51 0x01000000 // Pick bit 51 to count +#define MMCR0_RTCSELECT_47 0x01800000 // Pick bit 47 to count +#define MMCR0_INTONBITTRANS 0x00400000 // Causes interrupt signaling on bit transition from off to on +#define MMCR0_THRESHOLD_MASK 0x003F0000 // Threshold value +#define MMCR0_THRESHOLD(n) ((n) << 16) // Threshold value (0 - 63) +#define MMCR0_PMC1INTCONTROL 0x00008000 // Enables interrupt signaling due to PMC1 counter overflow +#define MMCR0_PMC2INTCONTROL 0x00004000 // Enables interrupt signaling due to PMC2-PMC4 counter overflow +#define MMCR0_PMCTRIGGER 0x00002000 // Can be used to trigger counting of PMC2-PMC4 after PMC1 has overflowed or... +#define MMCR0_PMC1SELECT_MASK 0x00001FC0 // PMC1 input selector +#define MMCR0_PMC2SELECT_MASK 0x0000003F // PMC2 input selector + +#define MMCR1_PMC3SELECT_MASK 0xF8000000 // PMC3 input selector +#define MMCR1_PMC4SELECT_MASK 0x07C00000 // PMC4 input selector + +#define PMC1_OV 0x80000000 // Overflow +#define PMC1_COUNTER 0x7FFFFFFF // Counter value +#define PMC2_OV 0x80000000 // Overflow +#define PMC2_COUNTER 0x7FFFFFFF // Counter value +#define PMC3_OV 0x80000000 // Overflow +#define PMC3_COUNTER 0x7FFFFFFF // Counter value +#define PMC4_OV 0x80000000 // Overflow +#define PMC4_COUNTER 0x7FFFFFFF // Counter value + +/*---------------------------------------------------------------------------* + PMC1 Events + *---------------------------------------------------------------------------*/ +#define MMCR0_PMC1_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC1_CYCLE 0x00000040 // Processor cycles +#define MMCR0_PMC1_INSTRUCTION 0x00000080 // # of instructions completed. +#define MMCR0_PMC1_TRANSITION 0x000000C0 // # of transitions for 0 to 1 +#define MMCR0_PMC1_DISPATCHED 0x00000100 // # of instructions dispatched +#define MMCR0_PMC1_EIEIO 0x00000140 // # of eieio instructions completed +#define MMCR0_PMC1_ITLB_CYCLE 0x00000180 // # of cycles spent performing table search op. for the ITLB +#define MMCR0_PMC1_L2_HIT 0x000001C0 // # of access that hit the L2. +#define MMCR0_PMC1_EA 0x00000200 // # of valid instruction EAs delivered to the memory subsystem +#define MMCR0_PMC1_IABR 0x00000240 // # of time the address of an instruction matches the IABR +#define MMCR0_PMC1_L1_MISS 0x00000280 // # of loads that miss the L1 +#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0 // # of branches that are unresolved when processed +#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300 // # of cycles that dispatcher stalls due to a second + // unresolved branch in the instruction stream +#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340 // # of times an instruction fetch missed the L1 Icache +#define MMCR0_PMC2_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC2_CYCLE 0x00000001 // Processor cycles +#define MMCR0_PMC2_INSTRUCTION 0x00000002 // # of instructions completed +#define MMCR0_PMC2_TRANSITION 0x00000003 // # of time-base (lower) bit transitions +#define MMCR0_PMC2_DISPATCHED 0x00000004 // # of instructions dispatched +#define MMCR0_PMC2_IC_MISS 0x00000005 // # of L1 instruction cache misses +#define MMCR0_PMC2_ITLB_MISS 0x00000006 // # of ITLB misses +#define MMCR0_PMC2_L2_I_MISS 0x00000007 // # of L2 instruction misses +#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008 // # of fall-through branches +#define MMCR0_PMC2_PR_SWITCH 0x00000009 // # of MSR[PR] bit toggles +#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A // # of reserved loads completed +#define MMCR0_PMC2_LOAD_STORE 0x0000000B // # of completed loads and stores +#define MMCR0_PMC2_SNOOP 0x0000000C // # of snoops +#define MMCR0_PMC2_L1_CASTOUT 0x0000000D // # of L1 castouts to L2 +#define MMCR0_PMC2_SYSTEM 0x0000000E // # of completed system unit instructions +#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F // # of instruction fetch misses in the L1 +#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010 // # of branches allowing out-of-order execution + +/*---------------------------------------------------------------------------* + PMC3 Events + *---------------------------------------------------------------------------*/ +#define MMCR1_PMC3_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC3_CYCLE 0x08000000 // Processor cycles +#define MMCR1_PMC3_INSTRUCTION 0x10000000 // # of instructions completed +#define MMCR1_PMC3_TRANSITION 0x18000000 // # of time-base (lower) bit transitions +#define MMCR1_PMC3_DISPATCHED 0x20000000 // # of instructions dispatched +#define MMCR1_PMC3_DC_MISS 0x28000000 // # of L1 data cache misses +#define MMCR1_PMC3_DTLB_MISS 0x30000000 // # of DTLB misses +#define MMCR1_PMC3_L2_D_MISS 0x38000000 // # of L2 data misses +#define MMCR1_PMC3_Bx_TAKEN 0x40000000 // # predicted branches that were taken +#define MMCR1_PMC3_PM_SWITCH 0x48000000 // # of transitions between marked and unmarked processes +#define MMCR1_PMC3_COND_STORE 0x50000000 // # of store conditional instructions completed +#define MMCR1_PMC3_FPU 0x58000000 // # of instructions completed from the FPU +#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000 // # of L2 castout caused by snoops to modified lines +#define MMCR1_PMC3_L2_HIT 0x68000000 // # of cache operations that hit in the L2 cache +#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000 // # of cycles generated by L1 load misses +#define MMCR1_PMC3_Bx_SECOND 0x80000000 // # of branches in the second speculative branch + // resolved correctly +#define MMCR1_PMC3_BPU_LR_CR 0x88000000 // # of cycles the BPU stalls due to LR or CR unresolved + // dependencies + +#define MMCR1_PMC4_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC4_CYCLE 0x00400000 // Processor cycles +#define MMCR1_PMC4_INSTRUCTION 0x00800000 // # of instructions completed +#define MMCR1_PMC4_TRANSITION 0x00C00000 // # of time-base (lower) bit transitions +#define MMCR1_PMC4_DISPATCHED 0x01000000 // # of instructions dispatched +#define MMCR1_PMC4_L2_CASTOUT 0x01400000 // # of L2 castouts +#define MMCR1_PMC4_DTLB_CYCLE 0x01800000 // # of cycles spent performing table searches for DTLB accesses +#define MMCR1_PMC4_Bx_MISSED 0x02000000 // # of mispredicted branches +#define MMCR1_PMC4_COND_STORE_INT 0x02800000 // # of store conditional instructions completed + // with reservation intact +#define MMCR1_PMC4_SYNC 0x02C00000 // # of completed sync instructions +#define MMCR1_PMC4_SNOOP_RETRY 0x03000000 // # of snoop request retries +#define MMCR1_PMC4_INTEGER 0x03400000 // # of completed integer operations +#define MMCR1_PMC4_BPU_THIRD 0x03800000 // # of cycles the BPU cannot process new branches + // due to having two unresolved branches +#define MMCR1_PMC4_DC_MISS 0x07C00000 // # of L1 data cache misses + +/*---------------------------------------------------------------------------* + FPSCR bits + *---------------------------------------------------------------------------*/ +#define FPSCR_FX 0x80000000 // Exception summary +#define FPSCR_FEX 0x40000000 // Enabled exception summary +#define FPSCR_VX 0x20000000 // Invalid operation +#define FPSCR_OX 0x10000000 // Overflow exception +#define FPSCR_UX 0x08000000 // Underflow exception +#define FPSCR_ZX 0x04000000 // Zero divide exception +#define FPSCR_XX 0x02000000 // Inexact exception +#define FPSCR_VXSNAN 0x01000000 // SNaN +#define FPSCR_VXISI 0x00800000 // Infinity - Infinity +#define FPSCR_VXIDI 0x00400000 // Infinity / Infinity +#define FPSCR_VXZDZ 0x00200000 // 0 / 0 +#define FPSCR_VXIMZ 0x00100000 // Infinity * 0 +#define FPSCR_VXVC 0x00080000 // Invalid compare +#define FPSCR_FR 0x00040000 // Fraction rounded +#define FPSCR_FI 0x00020000 // Fraction inexact +#define FPSCR_VXSOFT 0x00000400 // Software request +#define FPSCR_VXSQRT 0x00000200 // Invalid square root +#define FPSCR_VXCVI 0x00000100 // Invalid integer convert +#define FPSCR_VE 0x00000080 // Invalid operation exception enable +#define FPSCR_OE 0x00000040 // Overflow exception enable +#define FPSCR_UE 0x00000020 // Underflow exception enable +#define FPSCR_ZE 0x00000010 // Zero divide exception enable +#define FPSCR_XE 0x00000008 // Inexact exception enable +#define FPSCR_NI 0x00000004 // Non-IEEE mode + +#define FPSCR_FX_BIT 0 // Exception summary +#define FPSCR_FEX_BIT 1 // Enabled exception summary +#define FPSCR_VX_BIT 2 // Invalid operation +#define FPSCR_OX_BIT 3 // Overflow exception +#define FPSCR_UX_BIT 4 // Underflow exception +#define FPSCR_ZX_BIT 5 // Zero divide exception +#define FPSCR_XX_BIT 6 // Inexact exception +#define FPSCR_VXSNAN_BIT 7 // SNaN +#define FPSCR_VXISI_BIT 8 // Infinity - Infinity +#define FPSCR_VXIDI_BIT 9 // Infinity / Infinity +#define FPSCR_VXZDZ_BIT 10 // 0 / 0 +#define FPSCR_VXIMZ_BIT 11 // Infinity * 0 +#define FPSCR_VXVC_BIT 12 // Invalid compare +#define FPSCR_FR_BIT 13 // Fraction rounded +#define FPSCR_FI_BIT 14 // Fraction inexact +#define FPSCR_VXSOFT_BIT 21 // Software request +#define FPSCR_VXSQRT_BIT 22 // Invalid square root +#define FPSCR_VXCVI_BIT 23 // Invalid integer convert +#define FPSCR_VE_BIT 24 // Invalid operation exception enable +#define FPSCR_OE_BIT 25 // Overflow exception enable +#define FPSCR_UE_BIT 26 // Underflow exception enable +#define FPSCR_ZE_BIT 27 // Zero divide exception enable +#define FPSCR_XE_BIT 28 // Inexact exception enable +#define FPSCR_NI_BIT 29 // Non-IEEE mode + +u32 PPCMfmsr(); +void PPCMtmsr(u32 newMSR); +u32 PPCOrMsr(u32 value); +u32 PPCMfhid0(); +void PPCMthid0(u32 newHID0); +u32 PPCMfl2cr(); +void PPCMtl2cr(u32 newL2cr); +void PPCMtdec(u32 newDec); +void PPCSync(); +void PPCHalt(); +u32 PPCMffpscr(); +void PPCMtfpscr(u32 newFPSCR); +u32 PPCMfhid2(); +void PPCMthid2(u32 newhid2); +u32 PPCMfwpar(); +void PPCMtwpar(u32 newwpar); +void PPCEnableSpeculation(); +void PPCDisableSpeculation(); +void PPCSetFpIEEEMode(); +void PPCSetFpNonIEEEMode(); + +/* "include\dolphin\db.h" line 3 "types.h" */ +/* end "types.h" */ + +#define OS_DBINTERFACE_ADDR 0x00000040 + +typedef struct DBInterface +{ + u32 bPresent; + u32 exceptionMask; + void (*ExceptionDestination) ( void ); + void *exceptionReturn; +} DBInterface; + +extern DBInterface* __DBInterface; + +void DBInit(void); +void DBInitComm(int* inputFlagPtr, int* mtrCallback); +static void __DBExceptionDestination(void); +void DBPrintf(char* format, ...); + +typedef u8 GXBool; + +#define GX_FALSE ((GXBool)0) +#define GX_TRUE ((GXBool)1) + +#define GX_ENABLE ((GXBool)1) +#define GX_DISABLE ((GXBool)0) + +typedef enum _GXProjectionType { + GX_PERSPECTIVE, + GX_ORTHOGRAPHIC, +} GXProjectionType; + +typedef enum _GXCompare { + GX_NEVER, + GX_LESS, + GX_EQUAL, + GX_LEQUAL, + GX_GREATER, + GX_NEQUAL, + GX_GEQUAL, + GX_ALWAYS, +} GXCompare; + +typedef enum _GXAlphaOp { + GX_AOP_AND, + GX_AOP_OR, + GX_AOP_XOR, + GX_AOP_XNOR, + GX_MAX_ALPHAOP, +} GXAlphaOp; + +typedef enum _GXZFmt16 { + GX_ZC_LINEAR, + GX_ZC_NEAR, + GX_ZC_MID, + GX_ZC_FAR, +} GXZFmt16; + +typedef enum _GXGamma { + GX_GM_1_0, + GX_GM_1_7, + GX_GM_2_2, +} GXGamma; + +typedef enum _GXPixelFmt { + GX_PF_RGB8_Z24, + GX_PF_RGBA6_Z24, + GX_PF_RGB565_Z16, + GX_PF_Z24, + GX_PF_Y8, + GX_PF_U8, + GX_PF_V8, + GX_PF_YUV420, +} GXPixelFmt; + +typedef enum _GXPrimitive { + GX_QUADS = 0x80, + GX_TRIANGLES = 0x90, + GX_TRIANGLESTRIP = 0x98, + GX_TRIANGLEFAN = 0xA0, + GX_LINES = 0xA8, + GX_LINESTRIP = 0xB0, + GX_POINTS = 0xB8, +} GXPrimitive; + +typedef enum _GXVtxFmt { + GX_VTXFMT0, + GX_VTXFMT1, + GX_VTXFMT2, + GX_VTXFMT3, + GX_VTXFMT4, + GX_VTXFMT5, + GX_VTXFMT6, + GX_VTXFMT7, + GX_MAX_VTXFMT, +} GXVtxFmt; + +typedef enum _GXAttr { + GX_VA_PNMTXIDX, + GX_VA_TEX0MTXIDX, + GX_VA_TEX1MTXIDX, + GX_VA_TEX2MTXIDX, + GX_VA_TEX3MTXIDX, + GX_VA_TEX4MTXIDX, + GX_VA_TEX5MTXIDX, + GX_VA_TEX6MTXIDX, + GX_VA_TEX7MTXIDX, + GX_VA_POS, + GX_VA_NRM, + GX_VA_CLR0, + GX_VA_CLR1, + GX_VA_TEX0, + GX_VA_TEX1, + GX_VA_TEX2, + GX_VA_TEX3, + GX_VA_TEX4, + GX_VA_TEX5, + GX_VA_TEX6, + GX_VA_TEX7, + GX_POS_MTX_ARRAY, + GX_NRM_MTX_ARRAY, + GX_TEX_MTX_ARRAY, + GX_LIGHT_ARRAY, + GX_VA_NBT, + GX_VA_MAX_ATTR, + GX_VA_NULL = 0xFF, +} GXAttr; + +#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1) + +typedef enum _GXAttrType { + GX_NONE, + GX_DIRECT, + GX_INDEX8, + GX_INDEX16, +} GXAttrType; + +#define _GX_TF_CTF 32 +#define _GX_TF_ZTF 16 + +typedef enum _GXTexFmt { + GX_TF_I4 = 0x0, + GX_TF_I8 = 0x1, + GX_TF_IA4 = 0x2, + GX_TF_IA8 = 0x3, + GX_TF_RGB565 = 0x4, + GX_TF_RGB5A3 = 0x5, + GX_TF_RGBA8 = 0x6, + GX_TF_CMPR = 0xE, + + GX_CTF_R4 = 0x0 , + GX_CTF_RA4 = 0x2 , + GX_CTF_RA8 = 0x3 , + GX_CTF_YUVA8 = 0x6 , + GX_CTF_A8 = 0x7 , + GX_CTF_R8 = 0x8 , + GX_CTF_G8 = 0x9 , + GX_CTF_B8 = 0xA , + GX_CTF_RG8 = 0xB , + GX_CTF_GB8 = 0xC , + + GX_TF_Z8 = 0x1 , + GX_TF_Z16 = 0x3 , + GX_TF_Z24X8 = 0x6 , + + GX_CTF_Z4 = 0x0 , + GX_CTF_Z8M = 0x9 , + GX_CTF_Z8L = 0xA , + GX_CTF_Z16L = 0xC , + + GX_TF_A8 = GX_CTF_A8, +} GXTexFmt; + +typedef enum _GXCITexFmt { + GX_TF_C4 = 0x8, + GX_TF_C8 = 0x9, + GX_TF_C14X2 = 0xa, +} GXCITexFmt; + +typedef enum _GXTexWrapMode { + GX_CLAMP, + GX_REPEAT, + GX_MIRROR, + GX_MAX_TEXWRAPMODE, +} GXTexWrapMode; + +typedef enum _GXTexFilter { + GX_NEAR, + GX_LINEAR, + GX_NEAR_MIP_NEAR, + GX_LIN_MIP_NEAR, + GX_NEAR_MIP_LIN, + GX_LIN_MIP_LIN, +} GXTexFilter; + +typedef enum _GXAnisotropy { + GX_ANISO_1, + GX_ANISO_2, + GX_ANISO_4, + GX_MAX_ANISOTROPY, +} GXAnisotropy; + +typedef enum _GXTexMapID { + GX_TEXMAP0, + GX_TEXMAP1, + GX_TEXMAP2, + GX_TEXMAP3, + GX_TEXMAP4, + GX_TEXMAP5, + GX_TEXMAP6, + GX_TEXMAP7, + GX_MAX_TEXMAP, + GX_TEXMAP_NULL = 0xFF, + GX_TEX_DISABLE = 0x100, +} GXTexMapID; + +typedef enum _GXTexCoordID { + GX_TEXCOORD0, + GX_TEXCOORD1, + GX_TEXCOORD2, + GX_TEXCOORD3, + GX_TEXCOORD4, + GX_TEXCOORD5, + GX_TEXCOORD6, + GX_TEXCOORD7, + GX_MAX_TEXCOORD, + GX_TEXCOORD_NULL = 0xFF, +} GXTexCoordID; + +typedef enum _GXTevStageID { + GX_TEVSTAGE0, + GX_TEVSTAGE1, + GX_TEVSTAGE2, + GX_TEVSTAGE3, + GX_TEVSTAGE4, + GX_TEVSTAGE5, + GX_TEVSTAGE6, + GX_TEVSTAGE7, + GX_TEVSTAGE8, + GX_TEVSTAGE9, + GX_TEVSTAGE10, + GX_TEVSTAGE11, + GX_TEVSTAGE12, + GX_TEVSTAGE13, + GX_TEVSTAGE14, + GX_TEVSTAGE15, + GX_MAX_TEVSTAGE, +} GXTevStageID; + +typedef enum _GXTevMode { + GX_MODULATE, + GX_DECAL, + GX_BLEND, + GX_REPLACE, + GX_PASSCLR, +} GXTevMode; + +typedef enum _GXTexMtxType { + GX_MTX3x4, + GX_MTX2x4, +} GXTexMtxType; + +typedef enum _GXTexGenType { + GX_TG_MTX3x4, + GX_TG_MTX2x4, + GX_TG_BUMP0, + GX_TG_BUMP1, + GX_TG_BUMP2, + GX_TG_BUMP3, + GX_TG_BUMP4, + GX_TG_BUMP5, + GX_TG_BUMP6, + GX_TG_BUMP7, + GX_TG_SRTG, +} GXTexGenType; + +typedef enum _GXPosNrmMtx { + GX_PNMTX0 = 0, + GX_PNMTX1 = 3, + GX_PNMTX2 = 6, + GX_PNMTX3 = 9, + GX_PNMTX4 = 12, + GX_PNMTX5 = 15, + GX_PNMTX6 = 18, + GX_PNMTX7 = 21, + GX_PNMTX8 = 24, + GX_PNMTX9 = 27, +} GXPosNrmMtx; + +typedef enum _GXTexMtx { + GX_TEXMTX0 = 30, + GX_TEXMTX1 = 33, + GX_TEXMTX2 = 36, + GX_TEXMTX3 = 39, + GX_TEXMTX4 = 42, + GX_TEXMTX5 = 45, + GX_TEXMTX6 = 48, + GX_TEXMTX7 = 51, + GX_TEXMTX8 = 54, + GX_TEXMTX9 = 57, + GX_IDENTITY = 60, +} GXTexMtx; + +typedef enum _GXChannelID { + GX_COLOR0, + GX_COLOR1, + GX_ALPHA0, + GX_ALPHA1, + GX_COLOR0A0, + GX_COLOR1A1, + GX_COLOR_ZERO, + GX_ALPHA_BUMP, + GX_ALPHA_BUMPN, + GX_COLOR_NULL = 0xFF, +} GXChannelID; + +typedef enum _GXTexGenSrc { + GX_TG_POS, + GX_TG_NRM, + GX_TG_BINRM, + GX_TG_TANGENT, + GX_TG_TEX0, + GX_TG_TEX1, + GX_TG_TEX2, + GX_TG_TEX3, + GX_TG_TEX4, + GX_TG_TEX5, + GX_TG_TEX6, + GX_TG_TEX7, + GX_TG_TEXCOORD0, + GX_TG_TEXCOORD1, + GX_TG_TEXCOORD2, + GX_TG_TEXCOORD3, + GX_TG_TEXCOORD4, + GX_TG_TEXCOORD5, + GX_TG_TEXCOORD6, + GX_TG_COLOR0, + GX_TG_COLOR1, + GX_MAX_TEXGENSRC, +} GXTexGenSrc; + +typedef enum _GXBlendMode { + GX_BM_NONE, + GX_BM_BLEND, + GX_BM_LOGIC, + GX_BM_SUBTRACT, + GX_MAX_BLENDMODE, +} GXBlendMode; + +typedef enum _GXBlendFactor { + GX_BL_ZERO, + GX_BL_ONE, + GX_BL_SRCCLR, + GX_BL_INVSRCCLR, + GX_BL_SRCALPHA, + GX_BL_INVSRCALPHA, + GX_BL_DSTALPHA, + GX_BL_INVDSTALPHA, + GX_BL_DSTCLR = GX_BL_SRCCLR, + GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, +} GXBlendFactor; + +typedef enum _GXLogicOp { + GX_LO_CLEAR, + GX_LO_AND, + GX_LO_REVAND, + GX_LO_COPY, + GX_LO_INVAND, + GX_LO_NOOP, + GX_LO_XOR, + GX_LO_OR, + GX_LO_NOR, + GX_LO_EQUIV, + GX_LO_INV, + GX_LO_REVOR, + GX_LO_INVCOPY, + GX_LO_INVOR, + GX_LO_NAND, + GX_LO_SET, +} GXLogicOp; + +typedef enum _GXCompCnt { + GX_POS_XY = 0, + GX_POS_XYZ = 1, + GX_NRM_XYZ = 0, + GX_NRM_NBT = 1, + GX_NRM_NBT3 = 2, + GX_CLR_RGB = 0, + GX_CLR_RGBA = 1, + GX_TEX_S = 0, + GX_TEX_ST = 1, +} GXCompCnt; + +typedef enum _GXCompType { + GX_U8 = 0, + GX_S8 = 1, + GX_U16 = 2, + GX_S16 = 3, + GX_F32 = 4, + GX_RGB565 = 0, + GX_RGB8 = 1, + GX_RGBX8 = 2, + GX_RGBA4 = 3, + GX_RGBA6 = 4, + GX_RGBA8 = 5, +} GXCompType; + +typedef enum _GXPTTexMtx { + GX_PTTEXMTX0 = 64, + GX_PTTEXMTX1 = 67, + GX_PTTEXMTX2 = 70, + GX_PTTEXMTX3 = 73, + GX_PTTEXMTX4 = 76, + GX_PTTEXMTX5 = 79, + GX_PTTEXMTX6 = 82, + GX_PTTEXMTX7 = 85, + GX_PTTEXMTX8 = 88, + GX_PTTEXMTX9 = 91, + GX_PTTEXMTX10 = 94, + GX_PTTEXMTX11 = 97, + GX_PTTEXMTX12 = 100, + GX_PTTEXMTX13 = 103, + GX_PTTEXMTX14 = 106, + GX_PTTEXMTX15 = 109, + GX_PTTEXMTX16 = 112, + GX_PTTEXMTX17 = 115, + GX_PTTEXMTX18 = 118, + GX_PTTEXMTX19 = 121, + GX_PTIDENTITY = 125, +} GXPTTexMtx; + +typedef enum _GXTevRegID { + GX_TEVPREV, + GX_TEVREG0, + GX_TEVREG1, + GX_TEVREG2, + GX_MAX_TEVREG, +} GXTevRegID; + +typedef enum _GXDiffuseFn { + GX_DF_NONE, + GX_DF_SIGN, + GX_DF_CLAMP, +} GXDiffuseFn; + +typedef enum _GXColorSrc { + GX_SRC_REG, + GX_SRC_VTX, +} GXColorSrc; + +typedef enum _GXAttnFn { + GX_AF_SPEC, + GX_AF_SPOT, + GX_AF_NONE, +} GXAttnFn; + +typedef enum _GXLightID { + GX_LIGHT0 = 0x001, + GX_LIGHT1 = 0x002, + GX_LIGHT2 = 0x004, + GX_LIGHT3 = 0x008, + GX_LIGHT4 = 0x010, + GX_LIGHT5 = 0x020, + GX_LIGHT6 = 0x040, + GX_LIGHT7 = 0x080, + GX_MAX_LIGHT = 0x100, + GX_LIGHT_NULL = 0, +} GXLightID; + +typedef enum _GXTexOffset { + GX_TO_ZERO, + GX_TO_SIXTEENTH, + GX_TO_EIGHTH, + GX_TO_FOURTH, + GX_TO_HALF, + GX_TO_ONE, + GX_MAX_TEXOFFSET, +} GXTexOffset; + +typedef enum _GXSpotFn { + GX_SP_OFF, + GX_SP_FLAT, + GX_SP_COS, + GX_SP_COS2, + GX_SP_SHARP, + GX_SP_RING1, + GX_SP_RING2, +} GXSpotFn; + +typedef enum _GXDistAttnFn { + GX_DA_OFF, + GX_DA_GENTLE, + GX_DA_MEDIUM, + GX_DA_STEEP, +} GXDistAttnFn; + +typedef enum _GXCullMode { + GX_CULL_NONE, + GX_CULL_FRONT, + GX_CULL_BACK, + GX_CULL_ALL, +} GXCullMode; + +typedef enum _GXTevSwapSel { + GX_TEV_SWAP0 = 0, + GX_TEV_SWAP1, + GX_TEV_SWAP2, + GX_TEV_SWAP3, + GX_MAX_TEVSWAP, +} GXTevSwapSel; + +typedef enum _GXTevColorChan { + GX_CH_RED = 0, + GX_CH_GREEN, + GX_CH_BLUE, + GX_CH_ALPHA, +} GXTevColorChan; + +typedef enum _GXFogType { + GX_FOG_NONE = 0, + GX_FOG_PERSP_LIN = 2, + GX_FOG_PERSP_EXP = 4, + GX_FOG_PERSP_EXP2 = 5, + GX_FOG_PERSP_REVEXP = 6, + GX_FOG_PERSP_REVEXP2 = 7, + GX_FOG_ORTHO_LIN = 10, + GX_FOG_ORTHO_EXP = 12, + GX_FOG_ORTHO_EXP2 = 13, + GX_FOG_ORTHO_REVEXP = 14, + GX_FOG_ORTHO_REVEXP2 = 15, + GX_FOG_LIN = GX_FOG_PERSP_LIN, + GX_FOG_EXP = GX_FOG_PERSP_EXP, + GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, + GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, + GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, +} GXFogType; + +typedef enum _GXTevColorArg { + GX_CC_CPREV, + GX_CC_APREV, + GX_CC_C0, + GX_CC_A0, + GX_CC_C1, + GX_CC_A1, + GX_CC_C2, + GX_CC_A2, + GX_CC_TEXC, + GX_CC_TEXA, + GX_CC_RASC, + GX_CC_RASA, + GX_CC_ONE, + GX_CC_HALF, + GX_CC_KONST, + GX_CC_ZERO, +} GXTevColorArg; + +typedef enum _GXTevAlphaArg { + GX_CA_APREV, + GX_CA_A0, + GX_CA_A1, + GX_CA_A2, + GX_CA_TEXA, + GX_CA_RASA, + GX_CA_KONST, + GX_CA_ZERO, +} GXTevAlphaArg; + +typedef enum _GXTevOp { + GX_TEV_ADD = 0, + GX_TEV_SUB = 1, + GX_TEV_COMP_R8_GT = 8, + GX_TEV_COMP_R8_EQ = 9, + GX_TEV_COMP_GR16_GT = 10, + GX_TEV_COMP_GR16_EQ = 11, + GX_TEV_COMP_BGR24_GT = 12, + GX_TEV_COMP_BGR24_EQ = 13, + GX_TEV_COMP_RGB8_GT = 14, + GX_TEV_COMP_RGB8_EQ = 15, + GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, + GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, +} GXTevOp; + +typedef enum _GXTevBias { + GX_TB_ZERO, + GX_TB_ADDHALF, + GX_TB_SUBHALF, + GX_MAX_TEVBIAS, +} GXTevBias; + +typedef enum _GXTevScale { + GX_CS_SCALE_1, + GX_CS_SCALE_2, + GX_CS_SCALE_4, + GX_CS_DIVIDE_2, + GX_MAX_TEVSCALE, +} GXTevScale; + +typedef enum _GXTevKColorSel { + GX_TEV_KCSEL_8_8 = 0x00, + GX_TEV_KCSEL_7_8 = 0x01, + GX_TEV_KCSEL_6_8 = 0x02, + GX_TEV_KCSEL_5_8 = 0x03, + GX_TEV_KCSEL_4_8 = 0x04, + GX_TEV_KCSEL_3_8 = 0x05, + GX_TEV_KCSEL_2_8 = 0x06, + GX_TEV_KCSEL_1_8 = 0x07, + GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, + GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, + GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, + GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, + GX_TEV_KCSEL_K0 = 0x0C, + GX_TEV_KCSEL_K1 = 0x0D, + GX_TEV_KCSEL_K2 = 0x0E, + GX_TEV_KCSEL_K3 = 0x0F, + GX_TEV_KCSEL_K0_R = 0x10, + GX_TEV_KCSEL_K1_R = 0x11, + GX_TEV_KCSEL_K2_R = 0x12, + GX_TEV_KCSEL_K3_R = 0x13, + GX_TEV_KCSEL_K0_G = 0x14, + GX_TEV_KCSEL_K1_G = 0x15, + GX_TEV_KCSEL_K2_G = 0x16, + GX_TEV_KCSEL_K3_G = 0x17, + GX_TEV_KCSEL_K0_B = 0x18, + GX_TEV_KCSEL_K1_B = 0x19, + GX_TEV_KCSEL_K2_B = 0x1A, + GX_TEV_KCSEL_K3_B = 0x1B, + GX_TEV_KCSEL_K0_A = 0x1C, + GX_TEV_KCSEL_K1_A = 0x1D, + GX_TEV_KCSEL_K2_A = 0x1E, + GX_TEV_KCSEL_K3_A = 0x1F, +} GXTevKColorSel; + +typedef enum _GXTevKAlphaSel { + GX_TEV_KASEL_8_8 = 0x00, + GX_TEV_KASEL_7_8 = 0x01, + GX_TEV_KASEL_6_8 = 0x02, + GX_TEV_KASEL_5_8 = 0x03, + GX_TEV_KASEL_4_8 = 0x04, + GX_TEV_KASEL_3_8 = 0x05, + GX_TEV_KASEL_2_8 = 0x06, + GX_TEV_KASEL_1_8 = 0x07, + GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, + GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, + GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, + GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, + GX_TEV_KASEL_K0_R = 0x10, + GX_TEV_KASEL_K1_R = 0x11, + GX_TEV_KASEL_K2_R = 0x12, + GX_TEV_KASEL_K3_R = 0x13, + GX_TEV_KASEL_K0_G = 0x14, + GX_TEV_KASEL_K1_G = 0x15, + GX_TEV_KASEL_K2_G = 0x16, + GX_TEV_KASEL_K3_G = 0x17, + GX_TEV_KASEL_K0_B = 0x18, + GX_TEV_KASEL_K1_B = 0x19, + GX_TEV_KASEL_K2_B = 0x1A, + GX_TEV_KASEL_K3_B = 0x1B, + GX_TEV_KASEL_K0_A = 0x1C, + GX_TEV_KASEL_K1_A = 0x1D, + GX_TEV_KASEL_K2_A = 0x1E, + GX_TEV_KASEL_K3_A = 0x1F, +} GXTevKAlphaSel; + +typedef enum _GXTevKColorID { + GX_KCOLOR0 = 0, + GX_KCOLOR1, + GX_KCOLOR2, + GX_KCOLOR3, + GX_MAX_KCOLOR, +} GXTevKColorID; + +typedef enum _GXZTexOp { + GX_ZT_DISABLE, + GX_ZT_ADD, + GX_ZT_REPLACE, + GX_MAX_ZTEXOP, +} GXZTexOp; + +typedef enum _GXIndTexFormat { + GX_ITF_8, + GX_ITF_5, + GX_ITF_4, + GX_ITF_3, + GX_MAX_ITFORMAT, +} GXIndTexFormat; + +typedef enum _GXIndTexBiasSel { + GX_ITB_NONE, + GX_ITB_S, + GX_ITB_T, + GX_ITB_ST, + GX_ITB_U, + GX_ITB_SU, + GX_ITB_TU, + GX_ITB_STU, + GX_MAX_ITBIAS, +} GXIndTexBiasSel; + +typedef enum _GXIndTexAlphaSel { + GX_ITBA_OFF, + GX_ITBA_S, + GX_ITBA_T, + GX_ITBA_U, + GX_MAX_ITBALPHA, +} GXIndTexAlphaSel; + +typedef enum _GXIndTexMtxID { + GX_ITM_OFF, + GX_ITM_0, + GX_ITM_1, + GX_ITM_2, + GX_ITM_S0 = 5, + GX_ITM_S1, + GX_ITM_S2, + GX_ITM_T0 = 9, + GX_ITM_T1, + GX_ITM_T2, +} GXIndTexMtxID; + +typedef enum _GXIndTexWrap { + GX_ITW_OFF, + GX_ITW_256, + GX_ITW_128, + GX_ITW_64, + GX_ITW_32, + GX_ITW_16, + GX_ITW_0, + GX_MAX_ITWRAP, +} GXIndTexWrap; + +typedef enum _GXIndTexStageID { + GX_INDTEXSTAGE0, + GX_INDTEXSTAGE1, + GX_INDTEXSTAGE2, + GX_INDTEXSTAGE3, + GX_MAX_INDTEXSTAGE, +} GXIndTexStageID; + +typedef enum _GXIndTexScale { + GX_ITS_1, + GX_ITS_2, + GX_ITS_4, + GX_ITS_8, + GX_ITS_16, + GX_ITS_32, + GX_ITS_64, + GX_ITS_128, + GX_ITS_256, + GX_MAX_ITSCALE, +} GXIndTexScale; + +typedef enum _GXClipMode { + GX_CLIP_ENABLE = 0, + GX_CLIP_DISABLE = 1, +} GXClipMode; + +typedef enum _GXTlut { + GX_TLUT0 = 0, + GX_TLUT1 = 1, + GX_TLUT2 = 2, + GX_TLUT3 = 3, + GX_TLUT4 = 4, + GX_TLUT5 = 5, + GX_TLUT6 = 6, + GX_TLUT7 = 7, + GX_TLUT8 = 8, + GX_TLUT9 = 9, + GX_TLUT10 = 10, + GX_TLUT11 = 11, + GX_TLUT12 = 12, + GX_TLUT13 = 13, + GX_TLUT14 = 14, + GX_TLUT15 = 15, + GX_BIGTLUT0 = 16, + GX_BIGTLUT1 = 17, + GX_BIGTLUT2 = 18, + GX_BIGTLUT3 = 19, +} GXTlut; + +typedef enum _GXTlutFmt { + GX_TL_IA8, + GX_TL_RGB565, + GX_TL_RGB5A3, + GX_MAX_TLUTFMT, +} GXTlutFmt; + +typedef enum _GXMiscToken { + GX_MT_NULL = 0, + GX_MT_XF_FLUSH = 1, + GX_MT_DL_SAVE_CONTEXT = 2, + GX_MT_ABORT_WAIT_COPYOUT = 3, +} GXMiscToken; + +typedef enum _GXTexCacheSize { + GX_TEXCACHE_32K, + GX_TEXCACHE_128K, + GX_TEXCACHE_512K, + GX_TEXCACHE_NONE +} GXTexCacheSize; + +typedef enum _GXPerf0 { + GX_PERF0_VERTICES, + GX_PERF0_CLIP_VTX, + GX_PERF0_CLIP_CLKS, + GX_PERF0_XF_WAIT_IN, + GX_PERF0_XF_WAIT_OUT, + GX_PERF0_XF_XFRM_CLKS, + GX_PERF0_XF_LIT_CLKS, + GX_PERF0_XF_BOT_CLKS, + GX_PERF0_XF_REGLD_CLKS, + GX_PERF0_XF_REGRD_CLKS, + GX_PERF0_CLIP_RATIO, + + GX_PERF0_TRIANGLES, + GX_PERF0_TRIANGLES_CULLED, + GX_PERF0_TRIANGLES_PASSED, + GX_PERF0_TRIANGLES_SCISSORED, + GX_PERF0_TRIANGLES_0TEX, + GX_PERF0_TRIANGLES_1TEX, + GX_PERF0_TRIANGLES_2TEX, + GX_PERF0_TRIANGLES_3TEX, + GX_PERF0_TRIANGLES_4TEX, + GX_PERF0_TRIANGLES_5TEX, + GX_PERF0_TRIANGLES_6TEX, + GX_PERF0_TRIANGLES_7TEX, + GX_PERF0_TRIANGLES_8TEX, + GX_PERF0_TRIANGLES_0CLR, + GX_PERF0_TRIANGLES_1CLR, + GX_PERF0_TRIANGLES_2CLR, + + GX_PERF0_QUAD_0CVG, + GX_PERF0_QUAD_NON0CVG, + GX_PERF0_QUAD_1CVG, + GX_PERF0_QUAD_2CVG, + GX_PERF0_QUAD_3CVG, + GX_PERF0_QUAD_4CVG, + GX_PERF0_AVG_QUAD_CNT, + + GX_PERF0_CLOCKS, + GX_PERF0_NONE + +} GXPerf0; + +typedef enum _GXPerf1 { + GX_PERF1_TEXELS, + GX_PERF1_TX_IDLE, + GX_PERF1_TX_REGS, + GX_PERF1_TX_MEMSTALL, + GX_PERF1_TC_CHECK1_2, + GX_PERF1_TC_CHECK3_4, + GX_PERF1_TC_CHECK5_6, + GX_PERF1_TC_CHECK7_8, + GX_PERF1_TC_MISS, + + GX_PERF1_VC_ELEMQ_FULL, + GX_PERF1_VC_MISSQ_FULL, + GX_PERF1_VC_MEMREQ_FULL, + GX_PERF1_VC_STATUS7, + GX_PERF1_VC_MISSREP_FULL, + GX_PERF1_VC_STREAMBUF_LOW, + GX_PERF1_VC_ALL_STALLS, + GX_PERF1_VERTICES, + + GX_PERF1_FIFO_REQ, + GX_PERF1_CALL_REQ, + GX_PERF1_VC_MISS_REQ, + GX_PERF1_CP_ALL_REQ, + + GX_PERF1_CLOCKS, + GX_PERF1_NONE + +} GXPerf1; + +typedef enum _GXVCachePerf { + GX_VC_POS, + GX_VC_NRM, + GX_VC_CLR0, + GX_VC_CLR1, + GX_VC_TEX0, + GX_VC_TEX1, + GX_VC_TEX2, + GX_VC_TEX3, + GX_VC_TEX4, + GX_VC_TEX5, + GX_VC_TEX6, + GX_VC_TEX7, + GX_VC_ALL = 0xf + +} GXVCachePerf; + +typedef enum _GXFBClamp { + GX_CLAMP_NONE = 0, + GX_CLAMP_TOP = 1, + GX_CLAMP_BOTTOM = 2, +} GXFBClamp; + +typedef enum _GXCopyMode { + GX_COPY_PROGRESSIVE = 0, + GX_COPY_INTLC_EVEN = 2, + GX_COPY_INTLC_ODD = 3, +} GXCopyMode; + +typedef enum _GXAlphaReadMode { + GX_READ_00 = 0, + GX_READ_FF = 1, + GX_READ_NONE = 2, + +} _GXAlphaReadMode; + +#define VI_INTERLACE 0 +#define VI_NON_INTERLACE 1 +#define VI_PROGRESSIVE 2 +#define VI_3D 3 + +#define VI_NTSC 0 +#define VI_PAL 1 +#define VI_MPAL 2 +#define VI_DEBUG 3 +#define VI_DEBUG_PAL 4 +#define VI_EURGB60 5 +#define VI_GCA 6 + +#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace)) + +typedef enum { + // NTSC + VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE), + VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE), + VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE), + VI_TVMODE_NTSC_3D = VI_TVMODE(VI_NTSC, VI_3D), + // PAL + VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE), + VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE), + + // MPAL + VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE), + VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE), + + // Debug + VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE), + + // Debug PAL + VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE), + VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE), + + // EU RGB60 + VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE), + VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE), + + // GCA + VI_TVMODE_GCA_INT = VI_TVMODE(VI_GCA, VI_INTERLACE), + VI_TVMODE_GCA_DS = VI_TVMODE(VI_GCA, VI_NON_INTERLACE), + VI_TVMODE_GCA_PROG = VI_TVMODE(VI_GCA, VI_PROGRESSIVE), +} VITVMode; + +typedef enum { + VI_XFBMODE_SF = 0, + VI_XFBMODE_DF = 1, +} VIXFBMode; + +typedef void (*VIPositionCallback)(s16 x, s16 y); +typedef void (*VIRetraceCallback)(u32 retraceCount); + +// Structure to use with timing in vi.c (size 0x28). +typedef struct VITimingInfo { + u8 equ; // _00 + u16 acv; // _02 + u16 prbOdd; // _04 + u16 prbEven; // _06 + u16 psbOdd; // _08 + u16 psbEven; // _0A + u8 bs1; // _0C + u8 bs2; // _0D + u8 bs3; // _0E + u8 bs4; // _0F + u16 be1; // _10 + u16 be2; // _12 + u16 be3; // _14 + u16 be4; // _16 + u16 numHalfLines; // _18 + u16 hlw; // _1A + u8 hsy; // _1C + u8 hcs; // _1D + u8 hce; // _1E + u8 hbe640; // _1F + u16 hbs640; // _20 + u8 hbeCCIR656; // _24 + u16 hbsCCIR656; // _26 +} VITimingInfo; + +// Structure to use with HorVer in vi.c (size 0x58). +typedef struct VIPositionInfo { + u16 dispPosX; // _00 + u16 dispPosY; // _02 + u16 dispSizeX; // _04 + u16 dispSizeY; // _06 + u16 adjDispPosX; // _08 + u16 adjDispPosY; // _0A + u16 adjDispSizeY; // _0C + u16 adjPanPosY; // _0E + u16 adjPanSizeY; // _10 + u16 fbSizeX; // _12 + u16 fbSizeY; // _14 + u16 panPosX; // _16 + u16 panPosY; // _18 + u16 panSizeX; // _1A + u16 panSizeY; // _1C + VIXFBMode xfbMode; // _20 + u32 nonInter; // _24 + u32 tv; // _28 + u8 wordPerLine; // _2C + u8 std; // _2D + u8 wpl; // _2E + u32 bufAddr; // _30 + u32 tfbb; // _34 + u32 bfbb; // _38 + u8 xof; // _3C + BOOL isBlack; // _40 + BOOL is3D; // _44 + u32 rbufAddr; // _48 + u32 rtfbb; // _4C + u32 rbfbb; // _50 + VITimingInfo* timing; // _54 +} VIPositionInfo; + +typedef struct _GXRenderModeObj { + /*0x00*/ VITVMode viTVmode; + /*0x04*/ u16 fbWidth; + /*0x06*/ u16 efbHeight; + /*0x08*/ u16 xfbHeight; + /*0x0A*/ u16 viXOrigin; + /*0x0C*/ u16 viYOrigin; + /*0x0E*/ u16 viWidth; + /*0x10*/ u16 viHeight; + /*0x14*/ VIXFBMode xFBmode; + /*0x18*/ u8 field_rendering; + u8 aa; + u8 sample_pattern[12][2]; + u8 vfilter[7]; +} GXRenderModeObj; + +typedef struct _GXColor { + u8 r; + u8 g; + u8 b; + u8 a; +} GXColor; + +typedef struct _GXTexObj { + u32 dummy[8]; +} GXTexObj; + +typedef struct _GXTlutObj { + u32 dummy[3]; +} GXTlutObj; + +typedef struct _GXLightObj { + u32 dummy[16]; +} GXLightObj; + +typedef struct _GXVtxDescList { + GXAttr attr; + GXAttrType type; +} GXVtxDescList; + +typedef struct _GXColorS10 { + s16 r; + s16 g; + s16 b; + s16 a; +} GXColorS10; + +typedef struct _GXTexRegion { + u32 dummy[4]; +} GXTexRegion; + +typedef struct _GXTlutRegion { + u32 dummy[4]; +} GXTlutRegion; + +typedef struct _GXVtxAttrFmtList { + // total size: 0x10 + GXAttr attr; // offset 0x0, size 0x4 + GXCompCnt cnt; // offset 0x4, size 0x4 + GXCompType type; // offset 0x8, size 0x4 + u8 frac; // offset 0xC, size 0x1 +} GXVtxAttrFmtList; + +void GXSetTevDirect(GXTevStageID tev_stage); +void GXSetNumIndStages(u8 nIndStages); +void GXSetIndTexMtx(GXIndTexMtxID mtx_sel, f32 offset[2][3], s8 scale_exp); +void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord, GXTexMapID tex_map); +void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format, + GXIndTexBiasSel bias_sel, GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s, + GXIndTexWrap wrap_t, GXBool add_prev, GXBool ind_lod, + GXIndTexAlphaSel alpha_sel); +void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets, + GXBool replace_mode, GXIndTexMtxID matrix_sel); + +void GXSetTevIndTile (GXTevStageID tev_stage, GXIndTexStageID ind_stage, + u16 tilesize_s, u16 tilesize_t, + u16 tilespacing_s, u16 tilespacing_t, + GXIndTexFormat format, GXIndTexMtxID matrix_sel, + GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel); +void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s, GXIndTexScale scale_t); + +#define GX_NOP 0x00 +#define GX_DRAW_QUADS 0x80 +#define GX_DRAW_TRIANGLES 0x90 +#define GX_DRAW_TRIANGLE_STRIP 0x98 +#define GX_DRAW_TRIANGLE_FAN 0xA0 +#define GX_DRAW_LINES 0xA8 +#define GX_DRAW_LINE_STRIP 0xB0 +#define GX_DRAW_POINTS 0xB8 + +#define GX_LOAD_BP_REG 0x61 +#define GX_LOAD_CP_REG 0x08 +#define GX_LOAD_XF_REG 0x10 +#define GX_LOAD_INDX_A 0x20 +#define GX_LOAD_INDX_B 0x28 +#define GX_LOAD_INDX_C 0x30 +#define GX_LOAD_INDX_D 0x38 + +#define GX_CMD_CALL_DL 0x40 +#define GX_CMD_INVL_VC 0x48 + +#define GX_OPCODE_MASK 0xF8 +#define GX_VAT_MASK 0x07 + +void GXSetScissor(u32 left, u32 top, u32 wd, u32 ht); +void GXSetCullMode(GXCullMode mode); +void GXSetCoPlanar(GXBool enable); + +void GXBeginDisplayList(void* list, u32 size); +u32 GXEndDisplayList(void); +void GXCallDisplayList(const void* list, u32 nbytes); + +void GXDrawSphere(u8 numMajor, u8 numMinor); + +typedef struct { + u8 pad[128]; +} GXFifoObj; + +typedef void (*GXBreakPtCallback)(void); + +void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size); +void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr); +void GXGetFifoPtrs(GXFifoObj* fifo, void** readPtr, void** writePtr); +GXFifoObj* GXGetCPUFifo(void); +GXFifoObj* GXGetGPFifo(void); +void GXSetCPUFifo(GXFifoObj* fifo); +void GXSetGPFifo(GXFifoObj* fifo); +void GXSaveCPUFifo(GXFifoObj* fifo); +void GXGetFifoStatus(GXFifoObj* fifo, GXBool* overhi, GXBool* underlow, u32* fifoCount, + GXBool* cpu_write, GXBool* gp_read, GXBool* fifowrap); +void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle, GXBool* cmdIdle, + GXBool* brkpt); +void GXInitFifoLimits(GXFifoObj* fifo, u32 hiWaterMark, u32 loWaterMark); +GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb); +void GXEnableBreakPt(void* breakPt); +void GXDisableBreakPt(void); + +extern GXRenderModeObj GXNtsc240Ds; +extern GXRenderModeObj GXNtsc240DsAa; +extern GXRenderModeObj GXNtsc240Int; +extern GXRenderModeObj GXNtsc240IntAa; +extern GXRenderModeObj GXNtsc480IntDf; +extern GXRenderModeObj GXNtsc480Int; +extern GXRenderModeObj GXNtsc480IntAa; +extern GXRenderModeObj GXNtsc480Prog; +extern GXRenderModeObj GXNtsc480ProgAa; +extern GXRenderModeObj GXMpal240Ds; +extern GXRenderModeObj GXMpal240DsAa; +extern GXRenderModeObj GXMpal240Int; +extern GXRenderModeObj GXMpal240IntAa; +extern GXRenderModeObj GXMpal480IntDf; +extern GXRenderModeObj GXMpal480Int; +extern GXRenderModeObj GXMpal480IntAa; +extern GXRenderModeObj GXPal264Ds; +extern GXRenderModeObj GXPal264DsAa; +extern GXRenderModeObj GXPal264Int; +extern GXRenderModeObj GXPal264IntAa; +extern GXRenderModeObj GXPal528IntDf; +extern GXRenderModeObj GXPal528Int; +extern GXRenderModeObj GXPal524IntAa; +extern GXRenderModeObj GXEurgb60Hz240Ds; +extern GXRenderModeObj GXEurgb60Hz240DsAa; +extern GXRenderModeObj GXEurgb60Hz240Int; +extern GXRenderModeObj GXEurgb60Hz240IntAa; +extern GXRenderModeObj GXEurgb60Hz480IntDf; +extern GXRenderModeObj GXEurgb60Hz480Int; +extern GXRenderModeObj GXEurgb60Hz480IntAa; + +#define GX_MAX_Z24 0x00FFFFFF + +void GXSetCopyClear(GXColor clear_clr, u32 clear_z); +void GXAdjustForOverscan(GXRenderModeObj* rmin, GXRenderModeObj* rmout, u16 hor, u16 ver); +void GXCopyDisp(void* dest, GXBool clear); +void GXSetDispCopyGamma(GXGamma gamma); +void GXSetDispCopySrc(u16 left, u16 top, u16 wd, u16 ht); +void GXSetDispCopyDst(u16 wd, u16 ht); +u32 GXSetDispCopyYScale(f32 vscale); +void GXSetCopyFilter(GXBool aa, u8 sample_pattern[12][2], GXBool vf, u8 vfilter[7]); +void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt); +void GXSetTexCopySrc(u16 left, u16 top, u16 wd, u16 ht); +void GXSetTexCopyDst(u16 wd, u16 ht, GXTexFmt fmt, GXBool mipmap); +void GXCopyTex(void* dest, GXBool clear); + +void GXSetVtxDesc(GXAttr attr, GXAttrType type); +void GXSetVtxDescv(GXVtxDescList* list); +void GXClearVtxDesc(void); +void GXSetVtxAttrFmt(GXVtxFmt vtxfmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8 frac); +void GXSetNumTexGens(u8 nTexGens); +void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts); +void GXSetTexCoordGen2(GXTexCoordID dst_coord, GXTexGenType func, GXTexGenSrc src_param, u32 mtx, + GXBool normalize, u32 postmtx); +void GXSetLineWidth(u8 width, GXTexOffset texOffsets); +void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets); +void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable); +void GXSetArray(GXAttr attr, const void* data, u8 stride); +void GXInvalidateVtxCache(void); + +static inline void GXSetTexCoordGen(GXTexCoordID dst_coord, GXTexGenType func, + GXTexGenSrc src_param, u32 mtx) { + GXSetTexCoordGen2(dst_coord, func, src_param, mtx, GX_FALSE, GX_PTIDENTITY); +} + +GXBool GXGetTexObjMipMap(const GXTexObj* obj); +GXTexFmt GXGetTexObjFmt(const GXTexObj* obj); +u16 GXGetTexObjHeight(const GXTexObj* obj); +u16 GXGetTexObjWidth(const GXTexObj* obj); +GXTexWrapMode GXGetTexObjWrapS(const GXTexObj* obj); +GXTexWrapMode GXGetTexObjWrapT(const GXTexObj* obj); +void* GXGetTexObjData(const GXTexObj* obj); +void GXGetProjectionv(f32* p); +void GXGetLightPos(const GXLightObj* lt_obj, f32* x, f32* y, f32* z); +void GXGetLightColor(const GXLightObj* lt_obj, GXColor* color); +void GXGetVtxAttrFmt(GXVtxFmt idx, GXAttr attr, GXCompCnt* compCnt, GXCompType* compType, + u8* shift); + +void GXSetNumChans(u8 nChans); +void GXSetChanCtrl(GXChannelID chan, GXBool enable, GXColorSrc amb_src, GXColorSrc mat_src, + u32 light_mask, GXDiffuseFn diff_fn, GXAttnFn attn_fn); +void GXSetChanAmbColor(GXChannelID chan, GXColor amb_color); +void GXSetChanMatColor(GXChannelID chan, GXColor mat_color); + +void GXInitLightSpot(GXLightObj* lt_obj, f32 cutoff, GXSpotFn spot_func); +void GXInitLightDistAttn(GXLightObj* lt_obj, f32 ref_distance, f32 ref_brightness, + GXDistAttnFn dist_func); +void GXInitLightPos(GXLightObj* lt_obj, f32 x, f32 y, f32 z); +void GXInitLightDir(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz); +void GXInitLightColor(GXLightObj* lt_obj, GXColor color); +void GXInitLightAttn(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2); +void GXInitLightAttnA(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2); +void GXInitLightAttnK(GXLightObj* lt_obj, f32 k0, f32 k1, f32 k2); +void GXLoadLightObjImm(GXLightObj* lt_obj, GXLightID light); + +typedef void (*GXDrawDoneCallback)(void); +typedef void (*GXDrawSyncCallback)(u16 token); + +GXFifoObj* GXInit(void* base, u32 size); +GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb); +void GXSetDrawSync(u16 token); +GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback); + +void GXDrawDone(void); +void GXSetDrawDone(void); +void GXFlush(void); +void GXPixModeSync(void); +void GXSetMisc(GXMiscToken token, u32 val); + +extern void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1); +extern void GXClearGPMetric(); +extern void GXReadXfRasMetric(u32* xfWaitIn, u32* xfWaitOut, u32* rasBusy, u32* clocks); + +// Unused/inlined in P2. +extern void GXReadGPMetric(u32* count0, u32* count1); +extern u32 GXReadGP0Metric(); +extern u32 GXReadGP1Metric(); +extern void GXReadMemMetric(u32* cpReq, u32* tcReq, u32* cpuReadReq, u32* cpuWriteReq, u32* dspReq, u32* ioReq, u32* viReq, u32* peReq, + u32* rfReq, u32* fiReq); +extern void GXClearMemMetric(); +extern void GXReadPixMetric(u32* topIn, u32* topOut, u32* bottomIn, u32* bottomOut, u32* clearIn, u32* copyClocks); +extern void GXClearPixMetric(); +extern void GXSetVCacheMetric(GXVCachePerf attr); +extern void GXReadVCacheMetric(u32* check, u32* miss, u32* stall); +extern void GXClearVCacheMetric(); +extern void GXInitXfRasMetric(); +extern u32 GXReadClksPerVtx(); + +void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color); +void GXSetFogColor(GXColor color); +// ? GXSetFogRangeAdj(); +void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, + GXLogicOp op); +void GXSetColorUpdate(GXBool update_enable); +void GXSetAlphaUpdate(GXBool update_enable); +void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable); +void GXSetZCompLoc(GXBool before_tex); +void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt); +void GXSetDither(GXBool dither); +void GXSetDstAlpha(GXBool enable, u8 alpha); +// ? GXSetFieldMask(); +void GXSetFieldMode(u8 field_mode, u8 half_aspect_ratio); + +void GXSetTevOp(GXTevStageID id, GXTevMode mode); +void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b, GXTevColorArg c, + GXTevColorArg d); +void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b, GXTevAlphaArg c, + GXTevAlphaArg d); +void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp, + GXTevRegID out_reg); +void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp, + GXTevRegID out_reg); +void GXSetTevColor(GXTevRegID id, GXColor color); +void GXSetTevColorS10(GXTevRegID id, GXColorS10 color); +void GXSetTevKColor(GXTevKColorID id, GXColor color); +void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel sel); +void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel sel); +void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel ras_sel, GXTevSwapSel tex_sel); +void GXSetTevSwapModeTable(GXTevSwapSel table, GXTevColorChan red, GXTevColorChan green, + GXTevColorChan blue, GXTevColorChan alpha); +void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1); +void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias); +void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map, GXChannelID color); +void GXSetNumTevStages(u8 nStages); + +typedef GXTexRegion* (*GXTexRegionCallback)(const GXTexObj* obj, GXTexMapID id); + +void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format, + GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap); +void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format, + GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap, u32 tlut); +void GXInitTexObjData(GXTexObj* obj, const void* data); +void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod, + f32 max_lod, f32 lod_bias, GXBool bias_clamp, GXBool do_edge_lod, + GXAnisotropy max_aniso); +void GXLoadTexObj(GXTexObj* obj, GXTexMapID id); +u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod); +void GXInvalidateTexAll(); +void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t); +void GXInitTlutObj(GXTlutObj* obj, void* data, GXTlutFmt format, u16 entries); +void GXLoadTlut(const GXTlutObj* obj, GXTlut idx); +void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts); +void GXInitTexCacheRegion(GXTexRegion* region, GXBool is_32b_mipmap, u32 tmem_even, + GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd); +GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback); +void GXInvalidateTexRegion(const GXTexRegion* region); + +void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts); + +#define GX_PROJECTION_SZ 7 + + +void GXSetProjection(f32 mtx[4][4], GXProjectionType type); +void GXLoadPosMtxImm(f32 mtx[3][4], u32 id); +void GXLoadNrmMtxImm(f32 mtx[3][4], u32 id); +void GXLoadTexMtxImm(f32 mtx[][4], u32 id, GXTexMtxType type); + +void GXSetViewport(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz); +void GXSetCurrentMtx(u32 id); +void GXSetViewportJitter(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz, u32 field); +void GXSetScissorBoxOffset(s32 x_off, s32 y_off); +void GXSetClipMode(GXClipMode mode); + +#define GXFIFO_ADDR 0xCC008000 + +typedef union { + u8 u8; + u16 u16; + u32 u32; + u64 u64; + s8 s8; + s16 s16; + s32 s32; + s64 s64; + f32 f32; + f64 f64; +} PPCWGPipe; + +#define GXWGFifo (*(volatile PPCWGPipe*)GXFIFO_ADDR) + +static inline void GXPosition2f32(const f32 x, const f32 y) { + GXWGFifo.f32 = x; + GXWGFifo.f32 = y; +} + +static inline void GXPosition2u16(const u16 x, const u16 y) { + GXWGFifo.u16 = x; + GXWGFifo.u16 = y; +} + +static inline void GXPosition2s16(const s16 x, const s16 y) { + GXWGFifo.s16 = x; + GXWGFifo.s16 = y; +} + +static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z) { + GXWGFifo.s16 = x; + GXWGFifo.s16 = y; + GXWGFifo.s16 = z; +} + +static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z) { + GXWGFifo.f32 = x; + GXWGFifo.f32 = y; + GXWGFifo.f32 = z; +} + +static inline void GXNormal3f32(const f32 x, const f32 y, const f32 z) { + GXWGFifo.f32 = x; + GXWGFifo.f32 = y; + GXWGFifo.f32 = z; +} + +static inline void GXColor1u32(const u32 v) { + GXWGFifo.u32 = v; +} + +static inline void GXColor3u8(const u8 r, const u8 g, const u8 b) { + GXWGFifo.u8 = r; + GXWGFifo.u8 = g; + GXWGFifo.u8 = b; +} + +static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a) { + GXWGFifo.u8 = r; + GXWGFifo.u8 = g; + GXWGFifo.u8 = b; + GXWGFifo.u8 = a; +} + +static inline void GXTexCoord2s16(const s16 u, const s16 v) { + GXWGFifo.s16 = u; + GXWGFifo.s16 = v; +} + +static inline void GXTexCoord2f32(const f32 u, const f32 v) { + GXWGFifo.f32 = u; + GXWGFifo.f32 = v; +} + +static inline void GXPosition1x8(u8 index) { + GXWGFifo.u8 = index; +} + +static inline void GXColor1x8(u8 index) { + GXWGFifo.u8 = index; +} + +static inline void GXPosition1x16(u16 index) { + GXWGFifo.u16 = index; +} + +static inline void GXColor1x16(u16 index) { + GXWGFifo.u16 = index; +} + +static inline void GXTexCoord1x16(u16 index) { + GXWGFifo.u16 = index; +} + +static inline void GXEnd(void) {} + +// Upper words of the masks, since UIMM is only 16 bits +#define OS_CACHED_REGION_PREFIX 0x8000 +#define OS_UNCACHED_REGION_PREFIX 0xC000 +#define OS_PHYSICAL_MASK 0x3FFF + +#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16) +#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16) + +#define AT_ADDRESS + +typedef s64 OSTime; +typedef u32 OSTick; +u32 __OSBusClock(); // sync with OSLoMem.h +u32 __OSCoreClock(); // sync with OSLoMem.h +#define OS_BUS_CLOCK (u32)__OSBusClock +#define OS_CORE_CLOCK __OSCoreClock +#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4) + +#define OSPhysicalToCached(paddr) ((void*)((u32)(paddr) + OS_BASE_CACHED)) +#define OSPhysicalToUncached(paddr) ((void*)((u32)(paddr) + OS_BASE_UNCACHED)) +#define OSCachedToPhysical(caddr) ((u32)((u8*)(caddr)-OS_BASE_CACHED)) +#define OSUncachedToPhysical(ucaddr) ((u32)((u8*)(ucaddr)-OS_BASE_UNCACHED)) +#define OSCachedToUncached(caddr) ((void*)((u8*)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED))) +#define OSUncachedToCached(ucaddr) ((void*)((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED))) + +#define OSTicksToCycles(ticks) (((ticks) * ((OS_CORE_CLOCK * 2) / OS_TIMER_CLOCK)) / 2) +#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK) +#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000)) +#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000)) +#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000)) +#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK) +#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000)) +#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8) +#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000) + +#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0)) + +#define OSRoundUp32B(v) (((u32)(v + 31) & ~31)) +#define OSRoundDown32B(x) (((u32)(x)) & ~31) + +void* OSGetArenaHi(void); +void* OSGetArenaLo(void); +void OSSetArenaHi(void* newHi); +void OSSetArenaLo(void* newLo); + +void* OSAllocFromArenaLo(u32 size, u32 align); +void* OSAllocFromArenaHi(u32 size, u32 align); + +void OSInit(); + +OSTime OSGetTime(); +OSTick OSGetTick(); + +typedef struct OSCalendarTime { + int sec; // seconds after the minute [0, 61] + int min; // minutes after the hour [0, 59] + int hour; // hours since midnight [0, 23] + int mday; // day of the month [1, 31] + int mon; // month since January [0, 11] + int year; // years in AD [1, ...] + int wday; // days since Sunday [0, 6] + int yday; // days since January 1 [0, 365] + + int msec; // milliseconds after the second [0,999] + int usec; // microseconds after the millisecond [0,999] +} OSCalendarTime; + +OSTime OSCalendarTimeToTicks(OSCalendarTime* td); +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td); + +typedef struct OSStopwatch { + char* name; + OSTime total; + u32 hits; + OSTime min; + OSTime max; + OSTime last; + BOOL running; +} OSStopwatch; + +void OSInitStopwatch(OSStopwatch* sw, char* name); +void OSStartStopwatch(OSStopwatch* sw); +void OSStopStopwatch(OSStopwatch* sw); +OSTime OSCheckStopwatch(OSStopwatch* sw); +void OSResetStopwatch(OSStopwatch* sw); +void OSDumpStopwatch(OSStopwatch* sw); + +#define OS_CONSOLE_MASK 0xf0000000 +#define OS_CONSOLE_RETAIL 0x00000000 +#define OS_CONSOLE_DEVELOPMENT 0x10000000 +#define OS_CONSOLE_TDEV 0x20000000 + +#define OS_CONSOLE_RETAIL4 0x00000004 +#define OS_CONSOLE_RETAIL3 0x00000003 +#define OS_CONSOLE_RETAIL2 0x00000002 +#define OS_CONSOLE_RETAIL1 0x00000001 +#define OS_CONSOLE_TDEVHW4 0x20000007 +#define OS_CONSOLE_TDEVHW3 0x20000006 +#define OS_CONSOLE_TDEVHW2 0x20000005 +#define OS_CONSOLE_TDEVHW1 0x20000004 +#define OS_CONSOLE_DEVHW4 0x10000007 +#define OS_CONSOLE_DEVHW3 0x10000006 +#define OS_CONSOLE_DEVHW2 0x10000005 +#define OS_CONSOLE_DEVHW1 0x10000004 +#define OS_CONSOLE_MINNOW 0x10000003 +#define OS_CONSOLE_ARTHUR 0x10000002 +#define OS_CONSOLE_PC_EMULATOR 0x10000001 +#define OS_CONSOLE_EMULATOR 0x10000000 + +u32 OSGetConsoleType(); + +#define OS_SOUND_MODE_MONO 0u +#define OS_SOUND_MODE_STEREO 1u + +u32 OSGetSoundMode(void); +void OSSetSoundMode(u32 mode); + +#define OS_PROGRESSIVE_MODE_OFF 0u +#define OS_PROGRESSIVE_MODE_ON 1u + +u32 OSGetProgressiveMode(void); +void OSSetProgressiveMode(u32 on); + +#define OS_LANG_ENGLISH 0u +#define OS_LANG_GERMAN 1u +#define OS_LANG_FRENCH 2u +#define OS_LANG_SPANISH 3u +#define OS_LANG_ITALIAN 4u +#define OS_LANG_DUTCH 5u + +u8 OSGetLanguage(void); +void OSSetLanguage(u8 language); + +#define OS_EURGB60_OFF 0u +#define OS_EURGB60_ON 1u + +u32 OSGetEuRgb60Mode(void); +void OSSetEuRgb60Mode(u32 on); + +void OSRegisterVersion(const char* id); + +BOOL OSDisableInterrupts(void); +BOOL OSEnableInterrupts(void); +BOOL OSRestoreInterrupts(BOOL level); + +#define OSHalt(msg) OSPanic(__FILE__, __LINE__, msg) + + +#define ASSERT(exp) ((void)0) + +void OSReport(const char* msg, ...); +void OSPanic(const char* file, int line, const char* msg, ...); +void OSFatal(GXColor fg, GXColor bg, const char* msg); + +u32 OSGetPhysicalMemSize(void); +u32 OSGetConsoleSimulatedMemSize(void); + +#define __OS_CONTEXT_FRAME 768 + +#define OS_CONTEXT_R0 0 +#define OS_CONTEXT_R1 4 +#define OS_CONTEXT_R2 8 +#define OS_CONTEXT_R3 12 +#define OS_CONTEXT_R4 16 +#define OS_CONTEXT_R5 20 +#define OS_CONTEXT_R6 24 +#define OS_CONTEXT_R7 28 +#define OS_CONTEXT_R8 32 +#define OS_CONTEXT_R9 36 +#define OS_CONTEXT_R10 40 +#define OS_CONTEXT_R11 44 +#define OS_CONTEXT_R12 48 +#define OS_CONTEXT_R13 52 +#define OS_CONTEXT_R14 56 +#define OS_CONTEXT_R15 60 +#define OS_CONTEXT_R16 64 +#define OS_CONTEXT_R17 68 +#define OS_CONTEXT_R18 72 +#define OS_CONTEXT_R19 76 +#define OS_CONTEXT_R20 80 +#define OS_CONTEXT_R21 84 +#define OS_CONTEXT_R22 88 +#define OS_CONTEXT_R23 92 +#define OS_CONTEXT_R24 96 +#define OS_CONTEXT_R25 100 +#define OS_CONTEXT_R26 104 +#define OS_CONTEXT_R27 108 +#define OS_CONTEXT_R28 112 +#define OS_CONTEXT_R29 116 +#define OS_CONTEXT_R30 120 +#define OS_CONTEXT_R31 124 + +#define OS_CONTEXT_CR 128 +#define OS_CONTEXT_LR 132 +#define OS_CONTEXT_CTR 136 +#define OS_CONTEXT_XER 140 + +#define OS_CONTEXT_FPR0 144 +#define OS_CONTEXT_FPR1 152 +#define OS_CONTEXT_FPR2 160 +#define OS_CONTEXT_FPR3 168 +#define OS_CONTEXT_FPR4 176 +#define OS_CONTEXT_FPR5 184 +#define OS_CONTEXT_FPR6 192 +#define OS_CONTEXT_FPR7 200 +#define OS_CONTEXT_FPR8 208 +#define OS_CONTEXT_FPR9 216 +#define OS_CONTEXT_FPR10 224 +#define OS_CONTEXT_FPR11 232 +#define OS_CONTEXT_FPR12 240 +#define OS_CONTEXT_FPR13 248 +#define OS_CONTEXT_FPR14 256 +#define OS_CONTEXT_FPR15 264 +#define OS_CONTEXT_FPR16 272 +#define OS_CONTEXT_FPR17 280 +#define OS_CONTEXT_FPR18 288 +#define OS_CONTEXT_FPR19 296 +#define OS_CONTEXT_FPR20 304 +#define OS_CONTEXT_FPR21 312 +#define OS_CONTEXT_FPR22 320 +#define OS_CONTEXT_FPR23 328 +#define OS_CONTEXT_FPR24 336 +#define OS_CONTEXT_FPR25 344 +#define OS_CONTEXT_FPR26 352 +#define OS_CONTEXT_FPR27 360 +#define OS_CONTEXT_FPR28 368 +#define OS_CONTEXT_FPR29 376 +#define OS_CONTEXT_FPR30 384 +#define OS_CONTEXT_FPR31 392 + +#define OS_CONTEXT_FPSCR 400 + +#define OS_CONTEXT_SRR0 408 +#define OS_CONTEXT_SRR1 412 + +#define OS_CONTEXT_MODE 416 +#define OS_CONTEXT_STATE 418 + +#define OS_CONTEXT_GQR0 420 +#define OS_CONTEXT_GQR1 424 +#define OS_CONTEXT_GQR2 428 +#define OS_CONTEXT_GQR3 432 +#define OS_CONTEXT_GQR4 436 +#define OS_CONTEXT_GQR5 440 +#define OS_CONTEXT_GQR6 444 +#define OS_CONTEXT_GQR7 448 +#define __OSCONTEXT_PADDING 452 + +#define OS_CONTEXT_PSF0 456 +#define OS_CONTEXT_PSF1 464 +#define OS_CONTEXT_PSF2 472 +#define OS_CONTEXT_PSF3 480 +#define OS_CONTEXT_PSF4 488 +#define OS_CONTEXT_PSF5 496 +#define OS_CONTEXT_PSF6 504 +#define OS_CONTEXT_PSF7 512 +#define OS_CONTEXT_PSF8 520 +#define OS_CONTEXT_PSF9 528 +#define OS_CONTEXT_PSF10 536 +#define OS_CONTEXT_PSF11 544 +#define OS_CONTEXT_PSF12 552 +#define OS_CONTEXT_PSF13 560 +#define OS_CONTEXT_PSF14 568 +#define OS_CONTEXT_PSF15 576 +#define OS_CONTEXT_PSF16 584 +#define OS_CONTEXT_PSF17 592 +#define OS_CONTEXT_PSF18 600 +#define OS_CONTEXT_PSF19 608 +#define OS_CONTEXT_PSF20 616 +#define OS_CONTEXT_PSF21 624 +#define OS_CONTEXT_PSF22 632 +#define OS_CONTEXT_PSF23 640 +#define OS_CONTEXT_PSF24 648 +#define OS_CONTEXT_PSF25 656 +#define OS_CONTEXT_PSF26 664 +#define OS_CONTEXT_PSF27 672 +#define OS_CONTEXT_PSF28 680 +#define OS_CONTEXT_PSF29 688 +#define OS_CONTEXT_PSF30 696 +#define OS_CONTEXT_PSF31 704 +#define OS_CONTEXT_STATE_EXC 0x02u + +#define OS_CONTEXT_STATE_FPSAVED 0x01u + +typedef struct OSContext { + u32 gpr[32]; + u32 cr; + u32 lr; + u32 ctr; + u32 xer; + + f64 fpr[32]; + + u32 fpscr_pad; + u32 fpscr; + + u32 srr0; + u32 srr1; + + u16 mode; + u16 state; + + u32 gqr[8]; + u32 psf_pad; + f64 psf[32]; + +} OSContext; + +u32 OSSaveContext(OSContext* context); +void OSClearContext(OSContext* context); +OSContext* OSGetCurrentContext(); +void OSSetCurrentContext(OSContext* context); + +typedef struct OSAlarm OSAlarm; +typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context); + +struct OSAlarm { + OSAlarmHandler handler; + u32 tag; + OSTime fire; + OSAlarm* prev; + OSAlarm* next; + OSTime period; + OSTime start; +}; + +void OSInitAlarm(void); +void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler); +void OSSetAlarmTag(OSAlarm* alarm, u32 tag); +void OSSetAbsAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler); +void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler); +void OSCreateAlarm(OSAlarm* alarm); +void OSCancelAlarm(OSAlarm* alarm); +void OSCancelAlarms(u32 tag); + +BOOL OSCheckAlarmQueue(void); + + +typedef int OSHeapHandle; +typedef void (*OSAllocVisitor)(void* obj, u32 size); +void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps); +OSHeapHandle OSCreateHeap(void* start, void* end); +void OSDestroyHeap(OSHeapHandle heap); +void OSAddToHeap(OSHeapHandle heap, void* start, void* end); +OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap); +void* OSAllocFromHeap(OSHeapHandle heap, u32 size); +void* OSAllocFixed(void** rstart, void** rend); +void OSFreeToHeap(OSHeapHandle heap, void* ptr); +long OSCheckHeap(OSHeapHandle heap); +void OSDumpHeap(OSHeapHandle heap); +void *OSAllocFixed(void **rstart, void **rend); +u32 OSReferentSize(void* ptr); +void OSVisitAllocated(OSAllocVisitor visitor); +extern volatile OSHeapHandle __OSCurrHeap; +#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size)) +#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr)) + + +void* OSGetArenaHi(void); +void* OSGetArenaLo(void); +void OSSetArenaHi(void* addr); +void OSSetArenaLo(void* addr); +void* OSAllocFromArenaLo(u32 size, u32 align); +void* OSAllocFromArenaLo(u32 size, u32 align); + + +void DCInvalidateRange(void* addr, u32 nBytes); +void DCFlushRange(void* addr, u32 nBytes); +void DCStoreRange(void* addr, u32 nBytes); +void DCFlushRangeNoSync(void* addr, u32 nBytes); +void DCStoreRangeNoSync(void* addr, u32 nBytes); +void DCZeroRange(void* addr, u32 nBytes); +void DCTouchRange(void* addr, u32 nBytes); +void ICInvalidateRange(void* addr, u32 nBytes); + +#define LC_BASE_PREFIX 0xE000 +#define LC_BASE (LC_BASE_PREFIX << 16) +#define LCGetBase() ((void*)LC_BASE) + +void LCEnable(); +void LCDisable(void); +void LCLoadBlocks(void* destTag, void* srcAddr, u32 numBlocks); +void LCStoreBlocks(void* destAddr, void* srcTag, u32 numBlocks); +u32 LCLoadData(void* destAddr, void* srcAddr, u32 nBytes); +u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes); +u32 LCQueueLength(void); +void LCQueueWait(u32 len); +void LCFlushQueue(void); + + + +#define OS_ERROR_SYSTEM_RESET 0 +#define OS_ERROR_MACHINE_CHECK 1 +#define OS_ERROR_DSI 2 +#define OS_ERROR_ISI 3 +#define OS_ERROR_EXTERNAL_INTERRUPT 4 +#define OS_ERROR_ALIGNMENT 5 +#define OS_ERROR_PROGRAM 6 +#define OS_ERROR_FLOATING_POINT 7 +#define OS_ERROR_DECREMENTER 8 +#define OS_ERROR_SYSTEM_CALL 9 +#define OS_ERROR_TRACE 10 +#define OS_ERROR_PERFORMACE_MONITOR 11 +#define OS_ERROR_BREAKPOINT 12 +#define OS_ERROR_SYSTEM_INTERRUPT 13 +#define OS_ERROR_THERMAL_INTERRUPT 14 +#define OS_ERROR_PROTECTION 15 +#define OS_ERROR_FPE 16 + +#define OS_ERROR_MAX (OS_ERROR_FPE + 1) + +typedef u16 OSError; +typedef void (*OSErrorHandler)( OSError error, OSContext* context, ... ); + +OSErrorHandler OSSetErrorHandler(OSError code, OSErrorHandler handler); + + + +/* "include\dolphin\os\OSException.h" line 4 "dolphin/os/OSContext.h" */ +/* end "dolphin/os/OSContext.h" */ +/* "include\dolphin\os\OSException.h" line 5 "dolphin/types.h" */ +/* end "dolphin/types.h" */ + +#define __OS_EXCEPTION_SYSTEM_RESET 0 +#define __OS_EXCEPTION_MACHINE_CHECK 1 +#define __OS_EXCEPTION_DSI 2 +#define __OS_EXCEPTION_ISI 3 +#define __OS_EXCEPTION_EXTERNAL_INTERRUPT 4 +#define __OS_EXCEPTION_ALIGNMENT 5 +#define __OS_EXCEPTION_PROGRAM 6 +#define __OS_EXCEPTION_FLOATING_POINT 7 +#define __OS_EXCEPTION_DECREMENTER 8 +#define __OS_EXCEPTION_SYSTEM_CALL 9 +#define __OS_EXCEPTION_TRACE 10 +#define __OS_EXCEPTION_PERFORMACE_MONITOR 11 +#define __OS_EXCEPTION_BREAKPOINT 12 +#define __OS_EXCEPTION_SYSTEM_INTERRUPT 13 +#define __OS_EXCEPTION_THERMAL_INTERRUPT 14 +#define __OS_EXCEPTION_MAX \ + (__OS_EXCEPTION_THERMAL_INTERRUPT+1) + +typedef u8 __OSException; +typedef void (*__OSExceptionHandler)(__OSException exception, OSContext* context); + +#define OS_EXCEPTION_SAVE_GPRS(context) \ + stw r0, OS_CONTEXT_R0(context); \ + stw r1, OS_CONTEXT_R1(context); \ + stw r2, OS_CONTEXT_R2(context); \ + stmw r6, OS_CONTEXT_R6(context); \ + mfspr r0, GQR1; \ + stw r0, OS_CONTEXT_GQR1(context); \ + mfspr r0, GQR2; \ + stw r0, OS_CONTEXT_GQR2(context); \ + mfspr r0, GQR3; \ + stw r0, OS_CONTEXT_GQR3(context); \ + mfspr r0, GQR4; \ + stw r0, OS_CONTEXT_GQR4(context); \ + mfspr r0, GQR5; \ + stw r0, OS_CONTEXT_GQR5(context); \ + mfspr r0, GQR6; \ + stw r0, OS_CONTEXT_GQR6(context); \ + mfspr r0, GQR7; \ + stw r0, OS_CONTEXT_GQR7(context); + + +#define EXI_MEMORY_CARD_59 0x00000004 +#define EXI_MEMORY_CARD_123 0x00000008 +#define EXI_MEMORY_CARD_251 0x00000010 +#define EXI_MEMORY_CARD_507 0x00000020 + +#define EXI_MEMORY_CARD_1019 0x00000040 +#define EXI_MEMORY_CARD_2043 0x00000080 + +#define EXI_MEMORY_CARD_1019A 0x00000140 +#define EXI_MEMORY_CARD_1019B 0x00000240 +#define EXI_MEMORY_CARD_1019C 0x00000340 +#define EXI_MEMORY_CARD_1019D 0x00000440 +#define EXI_MEMORY_CARD_1019E 0x00000540 +#define EXI_MEMORY_CARD_1019F 0x00000640 +#define EXI_MEMORY_CARD_1019G 0x00000740 + +#define EXI_MEMORY_CARD_2043A 0x00000180 +#define EXI_MEMORY_CARD_2043B 0x00000280 +#define EXI_MEMORY_CARD_2043C 0x00000380 +#define EXI_MEMORY_CARD_2043D 0x00000480 +#define EXI_MEMORY_CARD_2043E 0x00000580 +#define EXI_MEMORY_CARD_2043F 0x00000680 +#define EXI_MEMORY_CARD_2043G 0x00000780 + +#define EXI_USB_ADAPTER 0x01010000 +#define EXI_NPDP_GDEV 0x01020000 + +#define EXI_MODEM 0x02020000 +#define EXI_ETHER 0x04020200 +#define EXI_ETHER_VIEWER 0x04220001 +#define EXI_STREAM_HANGER 0x04130000 + +#define EXI_MARLIN 0x03010000 + +#define EXI_IS_VIEWER 0x05070000 + +#define EXI_FREQ_1M 0 +#define EXI_FREQ_2M 1 +#define EXI_FREQ_4M 2 +#define EXI_FREQ_8M 3 +#define EXI_FREQ_16M 4 +#define EXI_FREQ_32M 5 + +#define EXI_READ 0 +#define EXI_WRITE 1 + +#define EXI_STATE_IDLE 0x00 +#define EXI_STATE_DMA 0x01 +#define EXI_STATE_IMM 0x02 +#define EXI_STATE_BUSY (EXI_STATE_DMA | EXI_STATE_IMM) +#define EXI_STATE_SELECTED 0x04 +#define EXI_STATE_ATTACHED 0x08 +#define EXI_STATE_LOCKED 0x10 + +BOOL EXIProbe(s32 chan); +s32 EXIProbeEx(s32 chan); + +s32 EXIGetType(s32 chan, u32 dev, u32* type); +char* EXIGetTypeString(u32 type); +u32 EXIClearInterrupts(s32 chan, BOOL exi, BOOL tc, BOOL ext); +s32 EXIGetID(s32 chan, u32 dev, u32* id); + +typedef void (*EXICallback)(s32 chan, OSContext* context); + + + +#define OS_GQR_F32 0x0000 +#define OS_GQR_U8 0x0004 +#define OS_GQR_U16 0x0005 +#define OS_GQR_S8 0x0006 +#define OS_GQR_S16 0x0007 + +#define OS_FASTCAST_U8 2 +#define OS_FASTCAST_U16 3 +#define OS_FASTCAST_S8 4 +#define OS_FASTCAST_S16 5 +// clang-format off +static inline void OSInitFastCast(void) { +} +// clang-format off + +static inline s16 __OSf32tos16(register f32 inF) +{ + u32 tmp; + register u32* tmpPtr = &tmp; + register s16 out; + // clang-format off + // clang-format on + + return out; +} + +static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); } + +static inline u8 __OSf32tou8(register f32 inF) +{ + u32 tmp; + register u32 *tmpPtr = &tmp; + register u8 out; + // clang-format off + // clang-format on + + return out; +} + +static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); } + +static inline s8 __OSf32tos8(register f32 inF) +{ + u32 tmp; + register u32 *tmpPtr = &tmp; + register s8 out; + // clang-format off + // clang-format on + + return out; +} + +static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); } + +static inline u16 __OSf32tou16(register f32 inF) +{ + u32 tmp; + register u32 *tmpPtr = &tmp; + register u16 out; + // clang-format off + // clang-format on + + return out; +} + +static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); } + +static inline float __OSs8tof32(register const s8* arg) { + register float ret; + + + return ret; +} + +static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); } + +static inline float __OSs16tof32(register const s16* arg) { + register float ret; + + + return ret; +} + +static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); } + +static inline float __OSu8tof32(register const u8* arg) { + register float ret; + + return ret; +} + +static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); } + +static inline float __OSu16tof32(register const u16* arg) { + register float ret; + + return ret; +} + +static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); } + +#define OS_FONT_ENCODE_ANSI 0u +#define OS_FONT_ENCODE_SJIS 1u +#define OS_FONT_ENCODE_UTF8 3u // UTF-8 [RFC 3629] +#define OS_FONT_ENCODE_UTF16 4u // UTF-16BE [RFC 2781] +#define OS_FONT_ENCODE_UTF32 5u // UTF-32 +#define OS_FONT_ENCODE_MAX 5u +#define OS_FONT_ENCODE_VOID 0xffffu + +#define OS_FONT_PROPORTIONAL FALSE +#define OS_FONT_FIXED TRUE + +u16 OSGetFontEncode(void); +u16 OSSetFontEncode(u16 encode); + +#define __OS_INTERRUPT_MEM_0 0 +#define __OS_INTERRUPT_MEM_1 1 +#define __OS_INTERRUPT_MEM_2 2 +#define __OS_INTERRUPT_MEM_3 3 +#define __OS_INTERRUPT_MEM_ADDRESS 4 +#define __OS_INTERRUPT_DSP_AI 5 +#define __OS_INTERRUPT_DSP_ARAM 6 +#define __OS_INTERRUPT_DSP_DSP 7 +#define __OS_INTERRUPT_AI_AI 8 +#define __OS_INTERRUPT_EXI_0_EXI 9 +#define __OS_INTERRUPT_EXI_0_TC 10 +#define __OS_INTERRUPT_EXI_0_EXT 11 +#define __OS_INTERRUPT_EXI_1_EXI 12 +#define __OS_INTERRUPT_EXI_1_TC 13 +#define __OS_INTERRUPT_EXI_1_EXT 14 +#define __OS_INTERRUPT_EXI_2_EXI 15 +#define __OS_INTERRUPT_EXI_2_TC 16 +#define __OS_INTERRUPT_PI_CP 17 +#define __OS_INTERRUPT_PI_PE_TOKEN 18 +#define __OS_INTERRUPT_PI_PE_FINISH 19 +#define __OS_INTERRUPT_PI_SI 20 +#define __OS_INTERRUPT_PI_DI 21 +#define __OS_INTERRUPT_PI_RSW 22 +#define __OS_INTERRUPT_PI_ERROR 23 +#define __OS_INTERRUPT_PI_VI 24 +#define __OS_INTERRUPT_PI_DEBUG 25 +#define __OS_INTERRUPT_PI_HSP 26 +#define __OS_INTERRUPT_MAX 32 + +#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt)) + +#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0) +#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1) +#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2) +#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3) +#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS) +#define OS_INTERRUPTMASK_MEM \ + (OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \ + OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS) +#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI) +#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM) +#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP) +#define OS_INTERRUPTMASK_DSP \ + (OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP) +#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI) +#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI) +#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI) +#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC) +#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT) +#define OS_INTERRUPTMASK_EXI_0 \ + (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT) +#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI) +#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC) +#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT) +#define OS_INTERRUPTMASK_EXI_1 \ + (OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT) +#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI) +#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC) +#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) +#define OS_INTERRUPTMASK_EXI \ + (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | \ + OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | \ + OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) +#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN) +#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH) +#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH) +#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP) +#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI) +#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI) +#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW) +#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR) +#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI) +#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG) +#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP) +#define OS_INTERRUPTMASK_PI \ + (OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | \ + OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | \ + OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | \ + OS_INTERRUPTMASK_PI_HSP) + +typedef s16 __OSInterrupt; +typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt, OSContext* context); + +typedef u32 OSInterruptMask; + +extern volatile __OSInterrupt __OSLastInterrupt; +extern volatile u32 __OSLastInterruptSrr0; +extern volatile OSTime __OSLastInterruptTime; + +__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, __OSInterruptHandler handler); + +__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt interrupt); + +void __OSDispatchInterrupt(__OSException exception, OSContext* context); + +OSInterruptMask OSGetInterruptMask(void); +OSInterruptMask OSSetInterruptMask(OSInterruptMask mask); +OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask); +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask); + + +#define OS_PROTECT_CHAN0 0 +#define OS_PROTECT_CHAN1 1 +#define OS_PROTECT_CHAN2 2 +#define OS_PROTECT_CHAN3 3 + +#define OS_PROTECT_CONTROL_NONE 0x00 +#define OS_PROTECT_CONTROL_READ 0x01 +#define OS_PROTECT_CONTROL_WRITE 0x02 +#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE) + +void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control); + + +typedef struct OSThread OSThread; +typedef struct OSThreadQueue OSThreadQueue; +typedef struct OSThreadLink OSThreadLink; +typedef s32 OSPriority; // 0 highest, 31 lowest + +typedef struct OSMutex OSMutex; +typedef struct OSMutexQueue OSMutexQueue; +typedef struct OSMutexLink OSMutexLink; +typedef struct OSCond OSCond; + +typedef void (*OSIdleFunction)(void* param); +typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to); + +struct OSThreadQueue { + OSThread* head; + OSThread* tail; +}; + +struct OSThreadLink { + OSThread* next; + OSThread* prev; +}; + +struct OSMutexQueue { + OSMutex* head; + OSMutex* tail; +}; + +struct OSMutexLink { + OSMutex* next; + OSMutex* prev; +}; + +struct OSThread { + OSContext context; + u16 state; + u16 attr; + s32 suspend; + OSPriority priority; + OSPriority base; + void* val; + OSThreadQueue* queue; + OSThreadLink link; + OSThreadQueue queueJoin; + OSMutex* mutex; + OSMutexQueue queueMutex; + OSThreadLink linkActive; + u8* stackBase; + u32* stackEnd; +}; + +enum OS_THREAD_STATE { + OS_THREAD_STATE_READY = 1, + OS_THREAD_STATE_RUNNING = 2, + OS_THREAD_STATE_WAITING = 4, + OS_THREAD_STATE_MORIBUND = 8 +}; + +#define OS_THREAD_ATTR_DETACH 0x0001u + +#define OS_THREAD_STACK_MAGIC 0xDEADBABE + +#define OS_PRIORITY_MIN 0 // highest +#define OS_PRIORITY_MAX 31 // lowest +#define OS_PRIORITY_IDLE OS_PRIORITY_MAX + + +void OSInitThreadQueue(OSThreadQueue* queue); +OSThread* OSGetCurrentThread(void); +BOOL OSIsThreadSuspended(OSThread* thread); +BOOL OSIsThreadTerminated(OSThread* thread); +s32 OSDisableScheduler(void); +s32 OSEnableScheduler(void); +void OSYieldThread(void); +BOOL OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, + OSPriority priority, u16 attr); +void OSExitThread(void* val); +void OSCancelThread(OSThread* thread); +BOOL OSJoinThread(OSThread* thread, void** val); +void OSDetachThread(OSThread* thread); +s32 OSResumeThread(OSThread* thread); +s32 OSSuspendThread(OSThread* thread); +BOOL OSSetThreadPriority(OSThread* thread, OSPriority priority); +OSPriority OSGetThreadPriority(OSThread* thread); +void OSSleepThread(OSThreadQueue* queue); +void OSWakeupThread(OSThreadQueue* queue); + +OSThread* OSSetIdleFunction(OSIdleFunction idleFunction, void* param, void* stack, u32 stackSize); +OSThread* OSGetIdleFunction(void); +void OSClearStack(u8 val); +long OSCheckActiveThreads(void); + +/* end "dolphin/os/OSThread.h" */ +typedef struct OSMessageQueue OSMessageQueue; +typedef void* OSMessage; + +struct OSMessageQueue { + OSThreadQueue queueSend; + OSThreadQueue queueReceive; + OSMessage* msgArray; + s32 msgCount; + s32 firstIndex; + s32 usedCount; +}; + +// Flags to turn blocking on/off when sending/receiving message +#define OS_MESSAGE_NOBLOCK 0 +#define OS_MESSAGE_BLOCK 1 + +void OSInitMessageQueue(OSMessageQueue* mq, OSMessage* msgArray, s32 msgCount); +BOOL OSSendMessage(OSMessageQueue* mq, OSMessage msg, s32 flags); +BOOL OSJamMessage(OSMessageQueue* mq, OSMessage msg, s32 flags); +BOOL OSReceiveMessage(OSMessageQueue* mq, OSMessage* msg, s32 flags); + + +#define OS_MODULE_VERSION 2 +typedef struct OSModuleHeader OSModuleHeader; + +typedef u32 OSModuleID; +typedef struct OSModuleQueue OSModuleQueue; +typedef struct OSModuleLink OSModuleLink; +typedef struct OSModuleInfo OSModuleInfo; +typedef struct OSSectionInfo OSSectionInfo; +typedef struct OSImportInfo OSImportInfo; +typedef struct OSRel OSRel; + +struct OSModuleQueue { + OSModuleInfo* head; + OSModuleInfo* tail; +}; + +struct OSModuleLink { + OSModuleInfo* next; + OSModuleInfo* prev; +}; + +struct OSModuleInfo { + OSModuleID id; // unique identifier for the module + OSModuleLink link; // doubly linked list of modules + u32 numSections; // # of sections + u32 sectionInfoOffset; // offset to section info table + u32 nameOffset; // offset to module name + u32 nameSize; // size of module name + u32 version; // version number +}; + +struct OSModuleHeader { + // CAUTION: info must be the 1st member + OSModuleInfo info; + + // OS_MODULE_VERSION == 1 + u32 bssSize; // total size of bss sections in bytes + u32 relOffset; + u32 impOffset; + u32 impSize; // size in bytes + u8 prologSection; // section # for prolog function + u8 epilogSection; // section # for epilog function + u8 unresolvedSection; // section # for unresolved function + u8 bssSection; // section # for bss section (set at run-time) + u32 prolog; // prolog function offset + u32 epilog; // epilog function offset + u32 unresolved; // unresolved function offset + + // OS_MODULE_VERSION == 2 + u32 align; // module alignment constraint + u32 bssAlign; // bss alignment constraint + + // OS_MODULE_VERSION == 3 +}; + +#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset)) + +struct OSSectionInfo { + u32 offset; + u32 size; +}; + +// OSSectionInfo.offset bit +#define OS_SECTIONINFO_EXEC 0x1 +#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1) + +struct OSImportInfo { + OSModuleID id; // external module id + u32 offset; // offset to OSRel instructions +}; + +struct OSRel { + u16 offset; // byte offset from the previous entry + u8 type; + u8 section; + u32 addend; +}; + +#define R_DOLPHIN_NOP 201 // C9h current offset += OSRel.offset +#define R_DOLPHIN_SECTION 202 // CAh current section = OSRel.section +#define R_DOLPHIN_END 203 // CBh +#define R_DOLPHIN_MRKREF 204 // CCh + +void OSSetStringTable(const void* stringTable); +BOOL OSLink(OSModuleInfo* newModule, void* bss); +BOOL OSUnlink(OSModuleInfo* oldModule); + +OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset); + +// debugger notification +void OSNotifyLink(OSModuleInfo* module); +void OSNotifyUnlink(OSModuleInfo* module); + +struct OSMutex { + OSThreadQueue queue; + OSThread* thread; // the current owner + s32 count; // lock count + OSMutexLink link; // for OSThread.queueMutex +}; + +struct OSCond { + OSThreadQueue queue; +}; + +void OSInitMutex(OSMutex* mutex); +void OSLockMutex(OSMutex* mutex); +void OSUnlockMutex(OSMutex* mutex); +BOOL OSTryLockMutex(OSMutex* mutex); +void OSInitCond(OSCond* cond); +void OSWaitCond(OSCond* cond, OSMutex* mutex); +void OSSignalCond(OSCond* cond); + +#define OS_RESETCODE_RESTART 0x80000000 +#define OS_RESETCODE_SYSTEM 0x40000000 + +#define OS_RESETCODE_EXEC 0xC0000000 +#define OS_RESETCODE_NETCONFIG 0xC0010000 + +#define OS_RESET_TIMEOUT OSMillisecondsToTicks(1000) + +#define OS_RESET_RESTART 0 +#define OS_RESET_HOTRESET 1 +#define OS_RESET_SHUTDOWN 2 + +#define OS_RESET_PRIO_SO 110 +#define OS_RESET_PRIO_IP 111 +#define OS_RESET_PRIO_CARD 127 +#define OS_RESET_PRIO_PAD 127 +#define OS_RESET_PRIO_GX 127 +#define OS_RESET_PRIO_ALARM 4294967295 + +typedef BOOL (*OSResetFunction)(BOOL final); +typedef struct OSResetFunctionInfo OSResetFunctionInfo; + +struct OSResetFunctionInfo { + // public + OSResetFunction func; + u32 priority; + + // private + OSResetFunctionInfo* next; + OSResetFunctionInfo* prev; +}; + +u32 OSGetResetCode(void); + +typedef void (*OSResetCallback)(void); + +BOOL OSGetResetButtonState(void); + +BOOL OSGetResetSwitchState(void); +OSResetCallback OSSetResetCallback(OSResetCallback callback); + +#define SI_MAX_CHAN 4 +#define SI_MAX_COMCSR_INLNGTH 128 +#define SI_MAX_COMCSR_OUTLNGTH 128 +#define SI_ERROR_UNDER_RUN 0x0001 +#define SI_ERROR_OVER_RUN 0x0002 +#define SI_ERROR_COLLISION 0x0004 +#define SI_ERROR_NO_RESPONSE 0x0008 +#define SI_ERROR_WRST 0x0010 +#define SI_ERROR_RDST 0x0020 +#define SI_ERROR_UNKNOWN 0x0040 +#define SI_ERROR_BUSY 0x0080 +#define SI_CHAN0 0 +#define SI_CHAN1 1 +#define SI_CHAN2 2 +#define SI_CHAN3 3 +#define SI_CHAN0_BIT 0x80000000 +#define SI_CHAN1_BIT 0x40000000 +#define SI_CHAN2_BIT 0x20000000 +#define SI_CHAN3_BIT 0x10000000 +#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan)) +#define SI_TYPE_MASK 0x18000000u +#define SI_TYPE_N64 0x00000000u +#define SI_TYPE_DOLPHIN 0x08000000u +#define SI_TYPE_GC SI_TYPE_DOLPHIN +#define SI_GC_WIRELESS 0x80000000 +#define SI_GC_NOMOTOR 0x20000000 +#define SI_GC_STANDARD 0x01000000 +#define SI_WIRELESS_RECEIVED 0x40000000 +#define SI_WIRELESS_IR 0x04000000 +#define SI_WIRELESS_STATE 0x02000000 +#define SI_WIRELESS_ORIGIN 0x00200000 +#define SI_WIRELESS_FIX_ID 0x00100000 +#define SI_WIRELESS_TYPE 0x000f0000 +#define SI_WIRELESS_LITE_MASK 0x000c0000 +#define SI_WIRELESS_LITE 0x00040000 +#define SI_WIRELESS_CONT_MASK 0x00080000 +#define SI_WIRELESS_CONT 0x00000000 +#define SI_WIRELESS_ID 0x00c0ff00 +#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID) +#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000) +#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000) +#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000) +#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000) +#define SI_GBA (SI_TYPE_N64 | 0x00040000) +#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD) +#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS) +#define SI_GC_WAVEBIRD \ + (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID) +#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000) +#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000) + +u32 SIProbe(s32 chan); +char* SIGetTypeString(u32 type); +void SIRefreshSamplingRate(void); +void SISetSamplingRate(u32 msec); + +#define DVD_MIN_TRANSFER_SIZE 32 + +#define DVD_STATE_FATAL_ERROR -1 +#define DVD_STATE_END 0 +#define DVD_STATE_BUSY 1 +#define DVD_STATE_WAITING 2 +#define DVD_STATE_COVER_CLOSED 3 +#define DVD_STATE_NO_DISK 4 +#define DVD_STATE_COVER_OPEN 5 +#define DVD_STATE_WRONG_DISK 6 +#define DVD_STATE_MOTOR_STOPPED 7 +#define DVD_STATE_PAUSING 8 +#define DVD_STATE_IGNORED 9 +#define DVD_STATE_CANCELED 10 +#define DVD_STATE_RETRY 11 + +#define DVD_FILEINFO_READY 0 +#define DVD_FILEINFO_BUSY 1 + +#define DVD_RESULT_GOOD 0 +#define DVD_RESULT_FATAL_ERROR -1 +#define DVD_RESULT_IGNORED -2 +#define DVD_RESULT_CANCELED -3 + +#define DVD_AIS_SUCCESS 0x0 + +typedef struct DVDDiskID { + char gameName[4]; + char company[2]; + u8 diskNumber; + u8 gameVersion; + u8 streaming; + u8 streamingBufSize; // 0 = default + u8 padding[22]; // 0's are stored +} DVDDiskID; + +typedef struct DVDCommandBlock DVDCommandBlock; + +typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block); + +struct DVDCommandBlock { + DVDCommandBlock* next; + DVDCommandBlock* prev; + u32 command; + s32 state; + u32 offset; + u32 length; + void* addr; + u32 currTransferSize; + u32 transferredSize; + DVDDiskID* id; + DVDCBCallback callback; + void* userData; +}; + +typedef struct DVDFileInfo DVDFileInfo; + +typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo); + +struct DVDFileInfo { + DVDCommandBlock cb; + u32 startAddr; + u32 length; + DVDCallback callback; +}; + +typedef struct { + u32 entryNum; + u32 location; + u32 next; +} DVDDir; + +typedef struct { + u32 entryNum; + BOOL isDir; + char* name; +} DVDDirEntry; + +void DVDInit(); +BOOL DVDClose(DVDFileInfo* f); +BOOL DVDSetAutoFatalMessaging(BOOL); +void DVDReset(); +s32 DVDCancel(DVDCommandBlock* block); +BOOL DVDOpen(char* fileName, DVDFileInfo* fileInfo); +BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo); +s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block); +BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDCancel(DVDCommandBlock* block); +BOOL DVDCancelAllAsync(DVDCBCallback callback); +s32 DVDCancelAll(void); +BOOL DVDPrepareStreamAsync(DVDFileInfo* fInfo, u32 length, u32 offset, DVDCallback callback); +s32 DVDPrepareStream(DVDFileInfo* fInfo, u32 length, u32 offset); + +BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDCancelStream(DVDCommandBlock* block); + +BOOL DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDStopStreamAtEnd(DVDCommandBlock* block); + +BOOL DVDGetStreamErrorStatusAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDGetStreamErrorStatus(DVDCommandBlock* block); + +BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDGetStreamPlayAddr(DVDCommandBlock* block); + +s32 DVDGetDriveStatus(); + +s32 DVDConvertPathToEntrynum(char* pathPtr); + +BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, + DVDCallback callback, s32 prio); + +BOOL DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio); + + +#define DVDReadAsync(fileInfo, addr, length, offset, callback) \ + DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2) +#define DVDRead(fileInfo, addr, length, offset) \ + DVDReadPrio((fileInfo), (addr), (length), (offset), 2) + +#define DVDSeekAsync(fileInfo, offset, callback) \ + DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2) + +extern u32 __PADFixBits; + +#define PAD_SPEC_0 0 +#define PAD_SPEC_1 1 +#define PAD_SPEC_2 2 +#define PAD_SPEC_3 3 +#define PAD_SPEC_4 4 +#define PAD_SPEC_5 5 + +#define PAD_CHAN0 0 +#define PAD_CHAN1 1 +#define PAD_CHAN2 2 +#define PAD_CHAN3 3 +#define PAD_CHANMAX 4 + +#define PAD_MOTOR_STOP 0 +#define PAD_MOTOR_RUMBLE 1 +#define PAD_MOTOR_STOP_HARD 2 + +#define PAD_ERR_NONE 0 +#define PAD_ERR_NO_CONTROLLER -1 +#define PAD_ERR_NOT_READY -2 +#define PAD_ERR_TRANSFER -3 + +#define PAD_BUTTON_LEFT 0x0001 +#define PAD_BUTTON_RIGHT 0x0002 +#define PAD_BUTTON_DOWN 0x0004 +#define PAD_BUTTON_UP 0x0008 +#define PAD_TRIGGER_Z 0x0010 +#define PAD_TRIGGER_R 0x0020 +#define PAD_TRIGGER_L 0x0040 +#define PAD_BUTTON_A 0x0100 +#define PAD_BUTTON_B 0x0200 +#define PAD_BUTTON_X 0x0400 +#define PAD_BUTTON_Y 0x0800 +#define PAD_BUTTON_MENU 0x1000 +#define PAD_BUTTON_START 0x1000 + +#define PAD_CHAN0_BIT 0x80000000 +#define PAD_CHAN1_BIT 0x40000000 +#define PAD_CHAN2_BIT 0x20000000 +#define PAD_CHAN3_BIT 0x10000000 + +#define PADButtonDown(buttonLast, button) ((((buttonLast) ^ (button)) & (button))) + +#define PADButtonUp(buttonLast, button) ((((buttonLast) ^ (button)) & (buttonLast))) + + +typedef void (*PADSamplingCallback)(void); + +typedef struct PADStatus { + u16 button; + s8 stickX; + s8 stickY; + s8 substickX; + s8 substickY; + u8 triggerL; + u8 triggerR; + u8 analogA; + u8 analogB; + s8 err; +} PADStatus; + +BOOL PADInit(); +u32 PADRead(PADStatus* status); +BOOL PADReset(u32 mask); +BOOL PADRecalibrate(u32 mask); +void PADClamp(PADStatus* status); +void PADClampCircle(PADStatus* status); +void PADControlMotor(s32 chan, u32 cmd); +void PADSetSpec(u32 spec); +void PADControlAllMotors(const u32* cmdArr); +void PADSetAnalogMode(u32 mode); +PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback); + + +typedef struct { + f32 x, y, z; +} Vec, *VecPtr, Point3d, *Point3dPtr; + +typedef struct { + s16 x; + s16 y; + s16 z; +} S16Vec, *S16VecPtr; + +typedef struct { + f32 x, y, z, w; +} Quaternion, *QuaternionPtr, Qtrn, *QtrnPtr; + +typedef f32 Mtx[3][4]; + +typedef f32 (*MtxPtr)[4]; + +typedef f32 ROMtx[4][3]; + +typedef f32 (*ROMtxPtr)[3]; + +typedef f32 Mtx44[4][4]; + +typedef f32 (*Mtx44Ptr)[4]; + + + + +#define GEKKO + +#define MTX_USE_PS + +#define MTX_PTR_OFFSET 3 + +#define MTX44_PTR_OFFSET 4 + +typedef struct { + + u32 numMtx; + MtxPtr stackBase; + MtxPtr stackPtr; + +} MtxStack, *MtxStackPtr; + +#define MTXDegToRad(a) ((a)*0.01745329252f) +#define MTXRadToDeg(a) ((a)*57.29577951f) +#define MTXRowCol(m, r, c) ((m)[(r)][(c)]) + +void C_MTXIdentity(Mtx m); +void C_MTXCopy(const Mtx src, Mtx dst); +void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab); +void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count); +void C_MTXTranspose(const Mtx src, Mtx xPose); +u32 C_MTXInverse(const Mtx src, Mtx inv); +u32 C_MTXInvXpose(const Mtx src, Mtx invX); + +void PSMTXIdentity(Mtx m); +void PSMTXCopy(const Mtx src, Mtx dst); +void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab); +void PSMTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count); +void PSMTXTranspose(const Mtx src, Mtx xPose); +u32 PSMTXInverse(const Mtx src, Mtx inv); +u32 PSMTXInvXpose(const Mtx src, Mtx invX); + +#define MTXIdentity PSMTXIdentity +#define MTXCopy PSMTXCopy +#define MTXConcat PSMTXConcat +#define MTXConcatArray PSMTXConcatArray +#define MTXTranspose PSMTXTranspose +#define MTXInverse PSMTXInverse +#define MTXInvXpose PSMTXInvXpose + + +void C_MTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); +void C_MTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); + + +void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); +void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); + + +#define MTXMultVec PSMTXMultVec +#define MTXMultVecArray PSMTXMultVecArray +#define MTXMultVecSR PSMTXMultVecSR +#define MTXMultVecArraySR PSMTXMultVecArraySR + + +void C_MTXQuat(Mtx m, const Quaternion* q); +void C_MTXReflect(Mtx m, const Vec* p, const Vec* n); + +void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT); +void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT); +void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS); +void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS); + +void C_MTXRotRad(Mtx m, char axis, f32 rad); +void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA); +void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); + + +void PSMTXQuat(Mtx m, const Quaternion* q); +void PSMTXReflect(Mtx m, const Vec* p, const Vec* n); + +void PSMTXTrans(Mtx m, f32 xT, f32 yT, f32 zT); +void PSMTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT); +void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS); +void PSMTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS); + +void PSMTXRotRad(Mtx m, char axis, f32 rad); +void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA); +void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); + + + +#define MTXQuat PSMTXQuat +#define MTXReflect PSMTXReflect +#define MTXTrans PSMTXTrans +#define MTXTransApply PSMTXTransApply +#define MTXScale PSMTXScale +#define MTXScaleApply PSMTXScaleApply +#define MTXRotRad PSMTXRotRad +#define MTXRotTrig PSMTXRotTrig +#define MTXRotAxisRad PSMTXRotAxisRad + +#define MTXRotDeg(m, axis, deg) PSMTXRotRad(m, axis, MTXDegToRad(deg)) +#define MTXRotAxisDeg(m, axis, deg) PSMTXRotAxisRad(m, axis, MTXDegToRad(deg)) + +void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target); + +#define MTXLookAt C_MTXLookAt + +void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f); +void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f); +void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f); + +#define MTXFrustum C_MTXFrustum +#define MTXPerspective C_MTXPerspective +#define MTXOrtho C_MTXOrtho + +void C_MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS, + f32 transT); + +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, + f32 transT); + +void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, + f32 transT); + +#define MTXLightFrustum C_MTXLightFrustum +#define MTXLightPerspective C_MTXLightPerspective +#define MTXLightOrtho C_MTXLightOrtho + +void C_VECAdd(const Vec* a, const Vec* b, Vec* ab); +void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b); +void C_VECScale(const Vec* src, Vec* dst, f32 scale); +void C_VECNormalize(const Vec* src, Vec* unit); +f32 C_VECSquareMag(const Vec* v); +f32 C_VECMag(const Vec* v); +f32 C_VECDotProduct(const Vec* a, const Vec* b); +void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb); +f32 C_VECSquareDistance(const Vec* a, const Vec* b); +f32 C_VECDistance(const Vec* a, const Vec* b); +void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst); +void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half); + +void PSVECAdd(const Vec* a, const Vec* b, Vec* ab); +void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b); +void PSVECScale(const Vec* src, Vec* dst, f32 scale); +void PSVECNormalize(const Vec* src, Vec* unit); +f32 PSVECSquareMag(const Vec* v); +f32 PSVECMag(const Vec* v); +f32 PSVECDotProduct(const Vec* a, const Vec* b); +void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb); +f32 PSVECSquareDistance(const Vec* a, const Vec* b); +f32 PSVECDistance(const Vec* a, const Vec* b); + + +// TODO + +#define VECAdd PSVECAdd +#define VECSubtract PSVECSubtract +#define VECScale PSVECScale +#define VECNormalize PSVECNormalize +#define VECSquareMag PSVECSquareMag +#define VECMag PSVECMag +#define VECDotProduct PSVECDotProduct +#define VECCrossProduct PSVECCrossProduct +#define VECSquareDistance PSVECSquareDistance +#define VECDistance PSVECDistance + + +#define VECReflect C_VECReflect +#define VECHalfAngle C_VECHalfAngle + +void C_QUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r); +void C_QUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r); +void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq); +void C_QUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r); +void C_QUATScale(const Quaternion* q, Quaternion* r, f32 scale); +f32 C_QUATDotProduct(const Quaternion* p, const Quaternion* q); +void C_QUATNormalize(const Quaternion* src, Quaternion* unit); +void C_QUATInverse(const Quaternion* src, Quaternion* inv); +void C_QUATExp(const Quaternion* q, Quaternion* r); +void C_QUATLogN(const Quaternion* q, Quaternion* r); + +void C_QUATMakeClosest(const Quaternion* q, const Quaternion* qto, Quaternion* r); +void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad); +void C_QUATMtx(Quaternion* r, const Mtx m); + +void C_QUATLerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); +void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); +void C_QUATSquad(const Quaternion* p, const Quaternion* a, const Quaternion* b, const Quaternion* q, + Quaternion* r, f32 t); +void C_QUATCompA(const Quaternion* qprev, const Quaternion* q, const Quaternion* qnext, + Quaternion* a); + + +void PSQUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r); +void PSQUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r); +void PSQUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq); +void PSQUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r); +void PSQUATScale(const Quaternion* q, Quaternion* r, f32 scale); +f32 PSQUATDotProduct(const Quaternion* p, const Quaternion* q); +void PSQUATNormalize(const Quaternion* src, Quaternion* unit); +void PSQUATInverse(const Quaternion* src, Quaternion* inv); + + + +#define QUATAdd PSQUATAdd +#define QUATSubtract PSQUATSubtract +#define QUATMultiply PSQUATMultiply +#define QUATDivide PSQUATDivide +#define QUATScale PSQUATScale +#define QUATDotProduct PSQUATDotProduct +#define QUATNormalize PSQUATNormalize +#define QUATInverse PSQUATInverse + +#define QUATExp C_QUATExp +#define QUATLogN C_QUATLogN +#define QUATMakeClosest C_QUATMakeClosest +#define QUATRotAxisRad C_QUATRotAxisRad +#define QUATMtx C_QUATMtx +#define QUATLerp C_QUATLerp +#define QUATSlerp C_QUATSlerp +#define QUATSquad C_QUATSquad +#define QUATCompA C_QUATCompA + +void PSMTXReorder(const Mtx src, ROMtx dest); +void PSMTXROMultVecArray(const ROMtx m, const Vec* srcBase, Vec* dstBase, u32 count); +void PSMTXROSkin2VecArray(const ROMtx m0, const ROMtx m1, const f32* wtBase, const Vec* srcBase, + Vec* dstBase, u32 count); +void PSMTXMultS16VecArray(const Mtx m, const S16Vec* srcBase, Vec* dstBase, u32 count); +void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count); + +void MTXInitStack(MtxStack* sPtr, u32 numMtx); +MtxPtr MTXPush(MtxStack* sPtr, const Mtx m); +MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m); +MtxPtr MTXPushInv(MtxStack* sPtr, const Mtx m); +MtxPtr MTXPushInvXpose(MtxStack* sPtr, const Mtx m); +MtxPtr MTXPop(MtxStack* sPtr); +MtxPtr MTXGetStackPtr(const MtxStack* sPtr); + +#define MTXAllocStack(sPtr, numMtx) \ + (((MtxStackPtr)(sPtr))->stackBase = (MtxPtr)OSAlloc(((numMtx) * sizeof(Mtx)))) + +#define MTXFreeStack(sPtr) (OSFree((void*)(((MtxStackPtr)(sPtr))->stackBase))) + + + + +/* end "dolphin/mtx.h" */ +/* "include\dolphin.h" line 10 "dolphin/gx.h" */ +/* end "dolphin/gx.h" */ +/* "include\dolphin.h" line 11 "dolphin/vi.h" */ + +#define _DOLPHIN_VI + +/* "include\dolphin\vi.h" line 3 "dolphin/gx/GXStruct.h" */ +/* end "dolphin/gx/GXStruct.h" */ +/* "include\dolphin\vi.h" line 4 "dolphin/vifuncs.h" */ + +#define _DOLPHIN_VIFUNCS + +/* "include\dolphin\vifuncs.h" line 3 "dolphin/types.h" */ +/* end "dolphin/types.h" */ + +/* "include\dolphin\vifuncs.h" line 5 "dolphin/vitypes.h" */ +/* end "dolphin/vitypes.h" */ + + +u32 VIGetNextField(void); +u32 VIGetRetraceCount(); +VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback callback); +VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback); +void __VIGetCurrentPosition(s16* x, s16* y); +u32 VIGetDTVStatus(void); + + +void VIInit(void); +void VIConfigure(const GXRenderModeObj* rm); +void VIFlush(void); +u32 VIGetTvFormat(void); +void VISetNextFrameBuffer(void* fb); +void VIWaitForRetrace(void); +void VISetBlack(BOOL black); + + + + +/* end "dolphin/vi.h" */ +/* "include\dolphin.h" line 12 "dolphin/ai.h" */ + +#define _DOLPHIN_AI + +/* "include\dolphin\ai.h" line 3 "types.h" */ +/* end "types.h" */ + + +typedef void (*AISCallback)(u32 count); +typedef void (*AIDCallback)(); + +AIDCallback AIRegisterDMACallback(AIDCallback callback); +void AIInitDMA(u32 start_addr, u32 length); +BOOL AIGetDMAEnableFlag(); +void AIStartDMA(); +void AIStopDMA(); +u32 AIGetDMABytesLeft(); +u32 AIGetDMAStartAddr(); +u32 AIGetDMALength(); +u32 AIGetDSPSampleRate(); +void AISetDSPSampleRate(u32 rate); +AISCallback AIRegisterStreamCallback(AISCallback callback); +u32 AIGetStreamSampleCount(); +void AIResetStreamSampleCount(); +void AISetStreamTrigger(u32 trigger); +u32 AIGetStreamTrigger(); +void AISetStreamPlayState(u32 state); +u32 AIGetStreamPlayState(); +void AISetStreamSampleRate(u32 rate); +u32 AIGetStreamSampleRate(); +void AISetStreamVolLeft(u8 vol); +void AISetStreamVolRight(u8 vol); +u8 AIGetStreamVolLeft(); +u8 AIGetStreamVolRight(); +void AIInit(u8* stack); +BOOL AICheckInit(); +void AIReset(); + + +/* end "dolphin/ai.h" */ +/* "include\dolphin.h" line 13 "dolphin/ar.h" */ + +#define _DOLPHIN_AR + +/* "include\dolphin\ar.h" line 3 "types.h" */ +/* end "types.h" */ + + +#define AR_STACK_INDEX_ENTRY_SIZE sizeof(u32) + +#define ARAM_DIR_MRAM_TO_ARAM 0x00 +#define ARAM_DIR_ARAM_TO_MRAM 0x01 + +#define AR_CLEAR_INTERNAL_ALL 0x00 +#define AR_CLEAR_INTERNAL_USER 0x01 +#define AR_CLEAR_EXPANSION 0x02 + +typedef void (*ARCallback)(void); + +ARCallback ARRegisterDMACallback(ARCallback callback); +u32 ARGetDMAStatus(void); +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length); +u32 ARInit(u32* stack_index_addr, u32 num_entries); +u32 ARGetBaseAddress(void); +BOOL ARCheckInit(void); +void ARReset(void); +u32 ARAlloc(u32 length); +u32 ARFree(u32* length); +u32 ARGetSize(void); +u32 ARGetInternalSize(void); +void ARSetSize(void); +void ARClear(u32 flag); + +void __ARClearInterrupt(void); +u16 __ARGetInterruptStatus(void); + +#define ARStartDMARead(mmem, aram, len) ARStartDMA(ARAM_DIR_ARAM_TO_MRAM, mmem, aram, len) +#define ARStartDMAWrite(mmem, aram, len) ARStartDMA(ARAM_DIR_MRAM_TO_ARAM, mmem, aram, len) + + + +/* end "dolphin/ar.h" */ +/* "include\dolphin.h" line 14 "dolphin/arq.h" */ + +#define _DOLPHIN_ARQ + +/* "include\dolphin\arq.h" line 3 "types.h" */ +/* end "types.h" */ + +/* "include\dolphin\arq.h" line 5 "dolphin/ar.h" */ +/* end "dolphin/ar.h" */ + + + +/* "include\dolphin\arq.h" line 11 "dolphin/ar.h" */ +/* end "dolphin/ar.h" */ + +#define ARQ_DMA_ALIGNMENT 32 +#define ARQ_CHUNK_SIZE_DEFAULT 4096 + +#define ARQ_TYPE_MRAM_TO_ARAM ARAM_DIR_MRAM_TO_ARAM +#define ARQ_TYPE_ARAM_TO_MRAM ARAM_DIR_ARAM_TO_MRAM + +#define ARQ_PRIORITY_LOW 0 +#define ARQ_PRIORITY_HIGH 1 + +typedef void (*ARQCallback)(u32 pointerToARQRequest); + +typedef struct ARQRequest { + + struct ARQRequest* next; + u32 owner; + u32 type; + u32 priority; + u32 source; + u32 dest; + u32 length; + ARQCallback callback; + +} ARQRequest; + +void ARQInit(void); +void ARQReset(void); +void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source, u32 dest, + u32 length, ARQCallback callback); +void ARQRemoveRequest(ARQRequest* task); +void ARQRemoveOwnerRequest(u32 owner); +void ARQFlushQueue(void); +void ARQSetChunkSize(u32 size); +u32 ARQGetChunkSize(void); +BOOL ARQCheckInit(void); + + + +/* end "dolphin/arq.h" */ +/* "include\dolphin.h" line 15 "dolphin/dsp.h" */ + +#define _DOLPHIN_DSP + +/* "include\dolphin\dsp.h" line 3 "types.h" */ +/* end "types.h" */ +/* "include\dolphin\dsp.h" line 4 "dolphin/os.h" */ +/* end "dolphin/os.h" */ + + +#define DSP_TASK_FLAG_CLEARALL 0x00000000 +#define DSP_TASK_FLAG_ATTACHED 0x00000001 +#define DSP_TASK_FLAG_CANCEL 0x00000002 + +#define DSP_TASK_STATE_INIT 0 +#define DSP_TASK_STATE_RUN 1 +#define DSP_TASK_STATE_YIELD 2 +#define DSP_TASK_STATE_DONE 3 + +typedef void (*DSPCallback)(void* task); + +typedef struct STRUCT_DSP_TASK { + vu32 state; + vu32 priority; + vu32 flags; + u16* iram_mmem_addr; + u32 iram_length; + u32 iram_addr; + + u16* dram_mmem_addr; + u32 dram_length; + u32 dram_addr; + + u16 dsp_init_vector; + u16 dsp_resume_vector; + + DSPCallback init_cb; + DSPCallback res_cb; + DSPCallback done_cb; + DSPCallback req_cb; + + struct STRUCT_DSP_TASK* next; + struct STRUCT_DSP_TASK* prev; + + OSTime t_context; + OSTime t_task; + +} DSPTaskInfo; + +void DSPInit(); +void DSPReset(); +void DSPHalt(); +void DSPSendMailToDSP(u32 mail); +u32 DSPCheckMailToDSP(); +u32 DSPCheckMailFromDSP(); +u32 DSPGetDMAStatus(); + +DSPTaskInfo* DSPAddTask(DSPTaskInfo* task); + +void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next); +void __DSP_boot_task(DSPTaskInfo* task); +void __DSP_remove_task(DSPTaskInfo* task); +void __DSP_add_task(DSPTaskInfo* task); +void __DSP_debug_printf(const char* fmt, ...); + + +#define CARD_ENCODE_ANSI 0u +#define CARD_ENCODE_SJIS 1u + +/* Sizes */ +#define CARD_WORKAREA_SIZE (5 * 8 * 1024) +#define CARD_READ_SIZE 512 +#define CARD_MAX_FILE 127 +#define CARD_COMMENT_SIZE 64 +#define CARD_FILENAME_MAX 32 +#define CARD_ICON_MAX 8 +#define CARD_ICON_WIDTH 32 +#define CARD_ICON_HEIGHT 32 +#define CARD_BANNER_WIDTH 96 +#define CARD_BANNER_HEIGHT 32 + +/* Icon animation */ +#define CARD_MODE_NORMAL 0 +#define CARD_MODE_FAST 1 + +#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK) +#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK) +#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK) +#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK) +#define CARDSetBannerFormat(stat, f) \ + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f))) +#define CARDSetIconAnim(stat, f) \ + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f))) +#define CARDSetIconFormat(stat, n, f) \ + ((stat)->iconFormat = \ + (u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n))))) +#define CARDSetIconSpeed(stat, n, f) \ + ((stat)->iconSpeed = \ + (u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n))))) +#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr)) +#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr)) +#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo) + +#define CARD_RESULT_UNLOCKED 1 +#define CARD_RESULT_READY 0 +#define CARD_RESULT_BUSY -1 +#define CARD_RESULT_WRONGDEVICE -2 +#define CARD_RESULT_NOCARD -3 +#define CARD_RESULT_NOFILE -4 +#define CARD_RESULT_IOERROR -5 +#define CARD_RESULT_BROKEN -6 +#define CARD_RESULT_EXIST -7 +#define CARD_RESULT_NOENT -8 +#define CARD_RESULT_INSSPACE -9 +#define CARD_RESULT_NOPERM -10 +#define CARD_RESULT_LIMIT -11 +#define CARD_RESULT_NAMETOOLONG -12 +#define CARD_RESULT_ENCODING -13 +#define CARD_RESULT_CANCELED -14 +#define CARD_RESULT_FATAL_ERROR -128 + +#define CARD_STAT_ICON_NONE 0 +#define CARD_STAT_ICON_C8 1 +#define CARD_STAT_ICON_RGB5A3 2 +#define CARD_STAT_ICON_MASK 3 + +#define CARD_STAT_BANNER_NONE 0 +#define CARD_STAT_BANNER_C8 1 +#define CARD_STAT_BANNER_RGB5A3 2 +#define CARD_STAT_BANNER_MASK 3 + +#define CARD_STAT_ANIM_LOOP 0x00 +#define CARD_STAT_ANIM_BOUNCE 0x04 +#define CARD_STAT_ANIM_MASK 0x04 + +#define CARD_STAT_SPEED_END 0 +#define CARD_STAT_SPEED_FAST 1 +#define CARD_STAT_SPEED_MIDDLE 2 +#define CARD_STAT_SPEED_SLOW 3 +#define CARD_STAT_SPEED_MASK 3 + +#define CARD_ATTR_PUBLIC 0x04u +#define CARD_ATTR_NO_COPY 0x08u +#define CARD_ATTR_NO_MOVE 0x10u +#define CARD_ATTR_GLOBAL 0x20u +#define CARD_ATTR_COMPANY 0x40u + +typedef struct CARDFileInfo { + s32 chan; + s32 fileNo; + + s32 offset; + s32 length; + u16 iBlock; + u16 __padding; +} CARDFileInfo; + +typedef struct CARDStat { + char fileName[CARD_FILENAME_MAX]; + u32 length; + u32 time; // seconds since 01/01/2000 midnight + u8 gameName[4]; + u8 company[2]; + + u8 bannerFormat; + u8 __padding; + u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set. + u16 iconFormat; + u16 iconSpeed; + u32 commentAddr; // offset to the pair of 32 byte character strings. + + u32 offsetBanner; + u32 offsetBannerTlut; + u32 offsetIcon[CARD_ICON_MAX]; + u32 offsetIconTlut; + u32 offsetData; +} CARDStat; + +typedef void (*CARDCallback)(s32 chan, s32 result); + +void CARDInit(void); +BOOL CARDGetFastMode(void); +BOOL CARDSetFastMode(BOOL enable); + +s32 CARDCheck(s32 chan); +s32 CARDCheckAsync(s32 chan, CARDCallback callback); +s32 CARDCheckEx(s32 chan, s32* xferBytes); +s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback); +s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo); +s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, + CARDCallback callback); +s32 CARDDelete(s32 chan, const char* fileName); +s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback); +s32 CARDFastDelete(s32 chan, s32 fileNo); +s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback); +s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo); +s32 CARDFormat(s32 chan); +s32 CARDFormatAsync(s32 chan, CARDCallback callback); +s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed); +s32 CARDGetAttributes(s32 chan, s32 fileNo, u8* attr); +s32 CARDGetEncoding(s32 chan, u16* encode); +s32 CARDGetMemSize(s32 chan, u16* size); +s32 CARDGetResultCode(s32 chan); +s32 CARDGetSectorSize(s32 chan, u32* size); +s32 CARDGetSerialNo(s32 chan, u64* serialNo); +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat); +s32 CARDGetXferredBytes(s32 chan); +s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback); +s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback, + CARDCallback attachCallback); +s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo); +BOOL CARDProbe(s32 chan); +s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize); +s32 CARDRename(s32 chan, const char* oldName, const char* newName); +s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback); +s32 CARDSetAttributesAsync(s32 chan, s32 fileNo, u8 attr, CARDCallback callback); +s32 CARDSetAttributes(s32 chan, s32 fileNo, u8 attr); +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat); +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback); +s32 CARDUnmount(s32 chan); +s32 CARDGetCurrentMode(s32 chan, u32* mode); +s32 CARDCancel(CARDFileInfo* fileInfo); +s32 CARDClose(CARDFileInfo* fileInfo); +s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset); +s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset, + CARDCallback callback); +s32 CARDWrite(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset); +s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset, + CARDCallback callback); + + +typedef struct jump_buf { + u32 lr; + u32 cr; + u32 sp; + u32 r2; + u32 pad; + u32 regs[19]; + double flt_regs[19]; +} jmp_buf; + +int gcsetjmp(jmp_buf *jump); +int gclongjmp(jmp_buf *jump, int status); + + +/* end "game/jmp.h" */ +/* "include\game\process.h" line 4 "dolphin/types.h" */ +/* end "dolphin/types.h" */ + +#define PROCESS_STAT_PAUSE 0x1 +#define PROCESS_STAT_UPAUSE 0x2 +#define PROCESS_STAT_PAUSE_EN 0x4 +#define PROCESS_STAT_UPAUSE_EN 0x8 + +typedef struct process { + struct process *next; + struct process *prev; + struct process *child; + struct process *parent; + struct process *next_child; + struct process *first_child; + void *heap; + u16 exec; + u16 stat; + u16 prio; + int sleep_time; + u32 base_sp; + jmp_buf jump; + void (*dtor)(void); + void *user_data; +} Process; + +void HuPrcInit(void); +void HuPrcEnd(void); +Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size); +void HuPrcChildLink(Process *parent, Process *child); +void HuPrcChildUnlink(Process *process); +Process *HuPrcChildCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size, Process *parent); +void HuPrcChildWatch(void); +Process *HuPrcCurrentGet(void); +int HuPrcKill(Process *process); +void HuPrcChildKill(Process *process); +void HuPrcSleep(int time); +void HuPrcVSleep(); +void HuPrcWakeup(Process *process); +void HuPrcDestructorSet2(Process *process, void (*func)(void)); +void HuPrcDestructorSet(void (*func)(void)); +void HuPrcCall(int tick); +void *HuPrcMemAlloc(s32 size); +void HuPrcMemFree(void *ptr); +void HuPrcSetStat(Process *process, u16 value); +void HuPrcResetStat(Process *process, u16 value); +void HuPrcAllPause(int flag); +void HuPrcAllUPause(int flag); + + + +#define MEMORY_DEFAULT_NUM 0x10000000 + +typedef enum { + HEAP_SYSTEM, + HEAP_MUSIC, + HEAP_DATA, + HEAP_DVD, + HEAP_MISC, + HEAP_MAX +} HeapID; + +void HuMemInitAll(void); +void *HuMemInit(void *ptr, s32 size); +void HuMemDCFlushAll(); +void HuMemDCFlush(HeapID heap); +void *HuMemDirectMalloc(HeapID heap, s32 size); +void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num); +void HuMemDirectFree(void *ptr); +void HuMemDirectFreeNum(HeapID heap, u32 num); +s32 HuMemUsedMallocSizeGet(HeapID heap); +s32 HuMemUsedMallocBlockGet(HeapID heap); +u32 HuMemHeapSizeGet(HeapID heap); +void *HuMemHeapPtrGet(HeapID heap); + +void *HuMemHeapInit(void *ptr, s32 size); +void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); +void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); +void HuMemMemoryFree(void *ptr, u32 retaddr); +void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); +s32 HuMemUsedMemorySizeGet(void *heap_ptr); +s32 HuMemUsedMemoryBlockGet(void *heap_ptr); +s32 HuMemMemorySizeGet(void *ptr); +s32 HuMemMemoryAllocSizeGet(s32 size); +void HuMemHeapDump(void *heap_ptr, s16 status); + + + +typedef struct data_read_stat DataReadStat; + +typedef struct file_list_entry { + char *name; + s32 file_id; +} FileListEntry; + +void *HuDvdDataRead(char *path); +void **HuDvdDataReadMulti(char **paths); +void *HuDvdDataReadDirect(char *path, HeapID heap); +void *HuDvdDataFastRead(s32 entrynum); +void *HuDvdDataFastReadNum(s32 entrynum, s32 num); +void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat); +void HuDvdDataClose(void *ptr); +void HuDvdErrorWatch(); + + + + +#define OM_DLL_MAX 20 + +typedef enum { + OVL_INVALID = -1, +/* "include\game\object.h" line 13 "ovl_table.h" */ +OVL__MINI, +OVL_BOOT, +OVL_E3SETUP, +OVL_INST, +OVL_M300, +OVL_M302, +OVL_M303, +OVL_M330, +OVL_M333, +OVL_M401, +OVL_M402, +OVL_M403, +OVL_M404, +OVL_M405, +OVL_M406, +OVL_M407, +OVL_M408, +OVL_M409, +OVL_M410, +OVL_M411, +OVL_M412, +OVL_M413, +OVL_M414, +OVL_M415, +OVL_M416, +OVL_M417, +OVL_M418, +OVL_M419, +OVL_M420, +OVL_M421, +OVL_M422, +OVL_M423, +OVL_M424, +OVL_M425, +OVL_M426, +OVL_M427, +OVL_M428, +OVL_M429, +OVL_M430, +OVL_M431, +OVL_M432, +OVL_M433, +OVL_M434, +OVL_M435, +OVL_M436, +OVL_M437, +OVL_M438, +OVL_M439, +OVL_M440, +OVL_M441, +OVL_M442, +OVL_M443, +OVL_M444, +OVL_M445, +OVL_M446, +OVL_M447, +OVL_M448, +OVL_M449, +OVL_M450, +OVL_M451, +OVL_M453, +OVL_M455, +OVL_M456, +OVL_M457, +OVL_M458, +OVL_M459, +OVL_M460, +OVL_M461, +OVL_M462, +OVL_M463, +OVL_MENT, +OVL_MESS, +OVL_MGMODE, +OVL_MODELTEST, +OVL_MODESEL, +OVL_MPEX, +OVL_MSETUP, +OVL_MSTORY2, +OVL_MSTORY3, +OVL_MSTORY4, +OVL_MSTORY, +OVL_NIS, +OVL_OPTION, +OVL_PRESENT, +OVL_RESULT, +OVL_SAF, +OVL_SELMENU, +OVL_STAFF, +OVL_SUBCHRSEL, +OVL_W01, +OVL_W02, +OVL_W03, +OVL_W04, +OVL_W05, +OVL_W06, +OVL_W10, +OVL_W20, +OVL_W21, +OVL_ZTAR, + OVL_COUNT +} OverlayID; + +#define OM_STAT_DELETED 0x1 +#define OM_STAT_DISABLED 0x2 +#define OM_STAT_ACTIVE 0x4 +#define OM_STAT_PAUSED 0x10 +#define OM_STAT_NOPAUSE 0x20 +#define OM_STAT_MODEL_PAUSED 0x100 + + +#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) +#define OM_GET_DATA_PTR(object, type) ((type *)(((object)->data))) + +typedef void (*omObjFunc)(struct om_obj_data *); + +typedef struct om_ovl_his_data { + OverlayID overlay; + int event; + int stat; +} omOvlHisData; + +typedef struct om_obj_data { +/* 0x00 */ u16 stat; +/* 0x02 */ s16 next_idx_alloc; +/* 0x04 */ s16 prio; +/* 0x06 */ s16 prev; +/* 0x08 */ s16 next; +/* 0x0A */ s16 next_idx; +/* 0x0C */ s16 group; +/* 0x0E */ u16 group_idx; +/* 0x10 */ u32 unk10; +/* 0x14 */ omObjFunc func; +/* 0x18 */ Vec trans; +/* 0x24 */ Vec rot; +/* 0x30 */ Vec scale; +/* 0x3C */ u16 mdlcnt; +/* 0x40 */ s16 *model; +/* 0x44 */ u16 mtncnt; +/* 0x48 */ s16 *motion; +/* 0x4C */ u32 work[4]; +/* 0x5C */ void *data; +} omObjData; + +typedef struct om_dll_data { + char *name; + OSModuleHeader *module; + void *bss; + s32 ret; +} omDllData; + +void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl); +void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat); +void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat); +void omOvlReturnEx(s16 level, s16 arg2); +void omOvlKill(s16 arg); +void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat); +omOvlHisData *omOvlHisGet(s32 level); +Process *omInitObjMan(s16 max_objs, int prio); +void omDestroyObjMan(void); +omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, omObjFunc func); +void omAddMember(Process *objman_process, u16 group, omObjData *object); +void omDelObjEx(Process *objman_process, omObjData *object); +void omDelMember(Process *objman_process, omObjData *object); +void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs); +omObjData **omGetGroupMemberListEx(Process *objman_process, s16 group); +void omSetStatBit(omObjData *obj, u16 stat); +void omResetStatBit(omObjData *obj, u16 stat); +void omSetTra(omObjData *obj, float x, float y, float z); +void omSetRot(omObjData *obj, float x, float y, float z); +void omSetSca(omObjData *obj, float x, float y, float z); +void omMain(void); +void omAllPause(BOOL pause); +char omPauseChk(void); +OverlayID omCurrentOvlGet(void); + + +void omDLLDBGOut(void); +void omDLLInit(FileListEntry *ovl_list); +int omDLLStart(s16 overlay, s16 flag); +void omDLLNumEnd(s16 overlay, s16 flag); +void omDLLEnd(s16 dllno, s16 flag); +omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag); +void omDLLUnlink(omDllData *dll_ptr, s16 flag); +s32 omDLLSearch(s16 overlay); +void omDLLInfoDump(OSModuleInfo *module); +void omDLLHeaderDump(OSModuleHeader *module); + +void omOutView(omObjData *object); +void omOutViewMulti(omObjData *object); +void omSystemKeyCheckSetup(Process *objman); +void omSystemKeyCheck(omObjData *object); +void omSysPauseEnable(u8 flag); +void omSysPauseCtrl(s16 flag); + +extern omObjData *omDBGSysKeyObj; +extern Process *omwatchproc; +extern OverlayID omnextovl; +extern OverlayID omcurovl; +extern int omcurdll; +extern int omovlhisidx; +extern int omovlevtno; +extern int omnextovlevtno; +extern int omovlstat; +extern char omUPauseFlag; +extern s16 omSysExitReq; +extern s16 omdispinfo; +extern u8 omSysPauseEnableFlag; +extern OverlayID omprevovl; + +extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; + +extern Vec CRot; +extern Vec Center; +extern float CZoom; +extern Vec CRotM[16]; +extern Vec CenterM[16]; +extern float CZoomM[16]; +extern s16 omDBGMenuButton; + + + +typedef struct hu_snd_grp_data { + /* 0x00 */ s16 ovl; + /* 0x02 */ s16 grpset; + /* 0x04 */ s32 auxANo; + /* 0x08 */ s32 auxBNo; + /* 0x0C */ s8 auxAVol; + /* 0x0D */ s8 auxBVol; +} HuSndGrpData; + +void HuAudInit(void); +s32 HuAudStreamPlay(void); +void HuAudStreamVolSet(s16 vol); +void HuAudStreamPauseOn(void); +void HuAudStreamPauseOff(void); +void HuAudStreamFadeOut(void); +void HuAudAllStop(void); +void HuAudFadeOut(s32 arg0); +s32 HuAudFXPlay(s32 arg0); +s32 HuAudFXPlayVol(s32 arg0, s16 arg1); +s32 HuAudFXPlayVolPan(s32 arg0, s16 arg1, s16 arg2); +void HuAudFXStop(s32 arg0); +void HuAudFXAllStop(void); +void HuAudFXFadeOut(s32 arg0, s32 arg1); +void HuAudFXPanning(s32 arg0, s16 arg1); +void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); +void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); +void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); +s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); +void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); +void HuAudFXListnerKill(void); +void HuAudFXPauseAll(s32 arg0); +s32 HuAudFXStatusGet(s32 arg0); +s32 HuAudFXPitchSet(s32 arg0, s16 arg1); +s32 HuAudFXVolSet(s32 arg0, s16 arg1); +s32 HuAudSeqPlay(s16 arg0); +void HuAudSeqStop(s32 arg0); +void HuAudSeqFadeOut(s32 arg0, s32 arg1); +void HuAudSeqAllFadeOut(s32 arg0); +void HuAudSeqAllStop(void); +void HuAudSeqPauseAll(s32 arg0); +void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2); +s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2); +s32 HuAudSStreamPlay(s16 arg0); +void HuAudSStreamStop(s32 arg0); +void HuAudSStreamFadeOut(s32 arg0, s32 arg1); +void HuAudSStreamAllFadeOut(s32 arg0); +void HuAudSStreamAllStop(void); +s32 HuAudSStreamStatGet(s32 arg0); +void HuAudDllSndGrpSet(u16 ovl); +void HuAudSndGrpSetSet(s16 arg0); +void HuAudSndGrpSet(s16 arg0); +void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); +void HuAudAUXSet(s32 arg0, s32 arg1); +void HuAudAUXVolSet(s8 arg0, s8 arg1); +void HuAudVoiceInit(s16 ovl); +s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); +s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); +void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); +s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); +s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); +void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); + +extern float Snd3DBackSurDisOffset; +extern float Snd3DFrontSurDisOffset; +extern float Snd3DStartDisOffset; +extern float Snd3DSpeedOffset; +extern float Snd3DDistOffset; +extern s32 musicOffF; +extern u8 fadeStat; + +extern HuSndGrpData HuSndGrpTbl[]; + + +/* "include\game\flag.h" line 3 "dolphin/types.h" */ +/* end "dolphin/types.h" */ + +#define FLAG_ID_MAKE(group, index) (((group) << 16)|(index)) + +s32 _CheckFlag(u32 flag); +void _SetFlag(u32 flag); +void _ClearFlag(u32 flag); +void _InitFlag(void); + + +//HACK: to prevent prototype errors +extern void HuPadRumbleAllStop(void); + +typedef struct player_config { + s16 character; + s16 pad_idx; + s16 diff; + s16 group; + s16 iscom; +} PlayerConfig; + +typedef struct system_state { +/* 0x00 */ struct { + u8 party : 1; + u8 team : 1; + }; +/* 0x01 */ u8 diff_story; +/* 0x02 */ struct { + u16 bonus_star : 1; + u16 explain_mg : 1; + u16 show_com_mg : 1; + u16 mg_list : 2; + u16 mess_speed : 2; + u16 save_mode : 2; + }; +/* 0x04 */ u8 turn; +/* 0x05 */ u8 max_turn; +/* 0x06 */ u8 star_flag; +/* 0x07 */ u8 star_total; +/* 0x08 */ struct { + u8 star_pos : 3; + u8 board : 5; +}; +/* 0x09 */ s8 last5_effect; +/* 0x0A */ s8 player_curr; +/* 0x0B */ s8 unk0B[3]; +/* 0x0E */ s16 block_pos; +/* 0x10 */ u8 board_data[32]; +/* 0x30 */ u8 mess_delay; +/* 0x31 */ struct { + u8 bowser_loss : 4; + u8 bowser_event : 4; + }; +/* 0x32 */ s8 lucky_value; +/* 0x34 */ u16 mg_next; +/* 0x36 */ s16 mg_type; +/* 0x38 */ u16 unk_38; +/* 0x3A */ u8 flag[3][16]; +/* 0x6A */ u8 unk_6A[0x72]; +} SystemState; //8018fcf8, sizeof 0xDC + +typedef struct player_state { +/* 0x00 */ struct { + u16 diff : 2; + u16 com : 1; + u16 character : 4; + u16 auto_size : 2; + u16 draw_ticket : 1; + u16 ticket_player : 6; + }; +/* 0x02 */ struct { + u8 team : 1; + u8 spark : 1; + u8 player_idx : 2; + }; +/* 0x03 */ s8 handicap; +/* 0x04 */ s8 port; +/* 0x05 */ s8 items[3]; +/* 0x08 */ struct { + u16 color : 2; + u16 moving : 1; + u16 jump : 1; + u16 show_next : 1; + u16 size : 2; + u16 num_dice : 2; + u16 rank : 2; + u16 bowser_suit : 1; + u16 team_backup : 1; + }; +/* 0x0A */ s8 roll; +/* 0x0C */ s16 space_curr; +/* 0x0E */ s16 space_prev; +/* 0x10 */ s16 space_next; +/* 0x12 */ s16 space_shock; +/* 0x14 */ s8 blue_count; +/* 0x15 */ s8 red_count; +/* 0x16 */ s8 question_count; +/* 0x17 */ s8 fortune_count; +/* 0x18 */ s8 bowser_count; +/* 0x19 */ s8 battle_count; +/* 0x1A */ s8 mushroom_count; +/* 0x1B */ s8 warp_count; +/* 0x1C */ s16 coins; +/* 0x1E */ s16 coins_mg; +/* 0x20 */ s16 coins_total; +/* 0x22 */ s16 coins_max; +/* 0x24 */ s16 coins_battle; +/* 0x26 */ s16 coin_collect; +/* 0x28 */ s16 coin_win; +/* 0x2A */ s16 stars; +/* 0x2C */ s16 stars_max; +/* 0x2E */ char unk_2E[2]; +} PlayerState; //size of 0x30 + +typedef struct pause_backup_config { + u8 explain_mg : 1; + u8 show_com_mg : 1; + u8 mg_list : 2; + u8 mess_speed : 2; + u8 save_mode : 2; +} PauseBackupConfig; + +typedef struct game_stat { +/* 0x0 */ s16 unk_00; +/* 0x2 */ u8 language; +/* 0x3 */ u8 sound_mode; +/* 0x4 */ s8 rumble; +/* 0x6 */ u16 total_stars; +/* 0x8 */ OSTime create_time; +/* 0x10 */ u32 mg_custom[2]; +/* 0x18 */ u32 mg_avail[2]; +/* 0x20 */ u32 mg_record[15]; +/* 0x5C */ u8 board_win_count[9][8]; +/* 0xA4 */ u8 board_play_count[9]; +/* 0xAE */ u16 board_max_stars[9]; +/* 0xC0 */ u16 board_max_coins[9]; +/* 0xD2 */ u8 present[60]; +/* 0x10E */ struct { + u8 story_continue : 1; + u8 party_continue : 1; + u8 open_w06 : 1; + u8 field10E_bit4 : 1; + u8 field10E_bit5 : 1; + u8 field10E_bit6 : 1; + }; +/* 0x10F */ PauseBackupConfig story_pause; +/* 0x110 */ PauseBackupConfig party_pause; +} GameStat; + +extern PlayerConfig GWPlayerCfg[4]; +extern PlayerState GWPlayer[4]; +extern SystemState GWSystem; +extern GameStat GWGameStat; + +static inline s32 GWTeamGet(void) +{ + return GWSystem.team; +} + +static inline s32 GWMGTypeGet(void) +{ + return GWSystem.mg_type; +} + +static inline void GWMGTypeSet(s32 type) +{ + GWSystem.mg_type = type; +} + +static inline s32 GWPartyGet(void) +{ + return GWSystem.party; +} + +static inline s32 GWLanguageGet(void) +{ + return GWGameStat.language; +} + +static inline s32 GWRumbleGet(void) +{ + return GWGameStat.rumble; +} + +static inline void GWRumbleSet(s32 value) +{ + GWGameStat.rumble = value; + if(value == 0) { + HuPadRumbleAllStop(); + } +} + +static inline s32 GWMGExplainGet(void) +{ + return GWSystem.explain_mg; +} + +static inline void GWMGExplainSet(s32 value) +{ + GWSystem.explain_mg = value; +} + +static inline s32 GWMGShowComGet(void) +{ + return GWSystem.show_com_mg; +} + +static inline void GWMGShowComSet(s32 value) +{ + GWSystem.show_com_mg = value; +} + +static inline s32 GWMGListGet(void) +{ + if (GWSystem.mg_list == 3) { + GWSystem.mg_list = 0; + } + return GWSystem.mg_list; +} + +static inline void GWMGListSet(s32 value) +{ + GWSystem.mg_list = value; +} + +static inline s32 GWMessSpeedGet(void) +{ + if (GWSystem.mess_speed == 3) { + GWSystem.mess_speed = 1; + } + return GWSystem.mess_speed; +} + +static inline void GWMessSpeedSet(s32 value) +{ + GWSystem.mess_speed = value; + switch(value) { + case 0: + GWSystem.mess_delay = 16; + break; + + case 2: + GWSystem.mess_delay = 48; + break; + + default: + GWSystem.mess_delay = 32; + break; + } +} + +static inline void GWSaveModeSet(s32 value) +{ + GWSystem.save_mode = value; +} + +static inline s32 GWSaveModeGet(void) +{ + if (GWSystem.save_mode == 3) { + GWSaveModeSet(1); + } + return GWSystem.save_mode; +} + +static inline s32 GWTurnGet(void) +{ + return GWSystem.turn; +} + +static inline s32 GWBoardGet(void) +{ + return GWSystem.board; +} + +static inline s32 GWPlayerTeamGet(s32 player) +{ + return GWPlayer[player].team; +} + +static inline s32 GWLuckyValueGet(void) +{ + return GWSystem.lucky_value; +} + +static inline void GWLuckyValueSet(s32 value) +{ + GWSystem.lucky_value = value; +} + +static inline s16 GWPlayerCoinBattleGet(s32 player) +{ + return GWPlayer[player].coins_battle; +} + +static inline s16 GWPlayerCoinCollectGet(s32 player) +{ + return GWPlayer[player].coin_collect; +} + +static inline void GWPlayerCoinCollectSet(s32 player, s16 value) +{ + GWPlayer[player].coin_collect = value; +} + +static inline s16 GWPlayerCoinWinGet(s32 player) +{ + return GWPlayer[player].coin_win; +} + +static inline void GWPlayerCoinWinSet(s32 player, s16 value) +{ + if (_CheckFlag(0x1000C) == 0) { + GWPlayer[player].coin_win = value; + } +} + +#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value)) +#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), GWPlayerCoinCollectGet((player))+(value)) + +/* end "game/gamework_data.h" */ +/* "src\REL\E3setupDLL\main.c" line 3 "game/hsfman.h" */ + +#define _GAME_HSFMAN_H + +/* "include\game\hsfman.h" line 3 "game/hsfanim.h" */ + +#define GAME_HSFANIM_H + +/* "include\game\hsfanim.h" line 3 "game/hsfformat.h" */ + +#define _GAME_HSFFORMAT_H + +/* "include\game\hsfformat.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ +/* "include\game\hsfformat.h" line 4 "game/animdata.h" */ + +#define _GAME_ANIMDATA_H + +/* "include\game\animdata.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ + +#define ANIM_BMP_RGBA8 0 +#define ANIM_BMP_RGB5A3 1 +#define ANIM_BMP_RGB5A3_DUPE 2 +#define ANIM_BMP_C8 3 +#define ANIM_BMP_C4 4 +#define ANIM_BMP_IA8 5 +#define ANIM_BMP_IA4 6 +#define ANIM_BMP_I8 7 +#define ANIM_BMP_I4 8 +#define ANIM_BMP_A8 9 +#define ANIM_BMP_CMPR 10 + +#define ANIM_BMP_FMTMASK 0xF +#define ANIM_BMP_ALLOC 0x8000 +#define ANIM_BMP_NUM_MASK 0x7FFF + +#define ANIM_LAYER_FLIPX 0x1 +#define ANIM_LAYER_FLIPY 0x2 + +typedef struct anim_frame_data { + s16 pat; + s16 time; + s16 shiftX; + s16 shiftY; + s16 flip; + s16 pad; +} AnimFrameData; + +typedef struct anim_bank_data { + s16 timeNum; + s16 unk; + AnimFrameData *frame; +} AnimBankData; + +typedef struct anim_layer_data { + u8 alpha; + u8 flip; + s16 bmpNo; + s16 startX; + s16 startY; + s16 sizeX; + s16 sizeY; + s16 shiftX; + s16 shiftY; + s16 vtx[8]; +} AnimLayerData; + +typedef struct anim_pat_data { + s16 layerNum; + s16 centerX; + s16 centerY; + s16 sizeX; + s16 sizeY; + AnimLayerData *layer; +} AnimPatData; + +typedef struct anim_bmp_data { + u8 pixSize; + u8 dataFmt; + s16 palNum; + s16 sizeX; + s16 sizeY; + u32 dataSize; + void *palData; + void *data; +} AnimBmpData; + +typedef struct anim_data { + s16 bankNum; + s16 patNum; + s16 bmpNum; + s16 useNum; + AnimBankData *bank; + AnimPatData *pat; + AnimBmpData *bmp; +} AnimData; + + +#define HSF_OBJ_NULL1 0 +#define HSF_OBJ_REPLICA 1 +#define HSF_OBJ_MESH 2 +#define HSF_OBJ_ROOT 3 +#define HSF_OBJ_JOINT 4 +#define HSF_OBJ_NULL2 5 +#define HSF_OBJ_NULL3 6 +#define HSF_OBJ_NONE1 7 +#define HSF_OBJ_NONE2 8 +#define HSF_OBJ_MAP 9 + +#define HSF_TRACK_TRANSFORM 2 +#define HSF_TRACK_MORPH 3 +#define HSF_TRACK_CLUSTER 5 +#define HSF_TRACK_CLUSTER_WEIGHT 6 +#define HSF_TRACK_MATERIAL 9 +#define HSF_TRACK_ATTRIBUTE 10 + +#define HSF_CURVE_STEP 0 +#define HSF_CURVE_LINEAR 1 +#define HSF_CURVE_BEZIER 2 +#define HSF_CURVE_BITMAP 3 +#define HSF_CURVE_CONST 4 + +typedef struct hsf_vector3f { + float x; + float y; + float z; +} HsfVector3f; + +typedef struct hsf_vector2f { + float x; + float y; +} HsfVector2f; + +typedef struct hsf_section { + s32 ofs; + s32 count; +} HsfSection; + +typedef struct hsf_header { + char magic[8]; + HsfSection scene; + HsfSection color; + HsfSection material; + HsfSection attribute; + HsfSection vertex; + HsfSection normal; + HsfSection st; + HsfSection face; + HsfSection object; + HsfSection bitmap; + HsfSection palette; + HsfSection motion; + HsfSection cenv; + HsfSection skeleton; + HsfSection part; + HsfSection cluster; + HsfSection shape; + HsfSection mapAttr; + HsfSection matrix; + HsfSection symbol; + HsfSection string; +} HsfHeader; + +typedef struct hsf_scene { + GXFogType fogType; + f32 start; + f32 end; + GXColor color; +} HsfScene; + +typedef struct hsf_bitmap { + char *name; + u32 maxLod; + u8 dataFmt; + u8 pixSize; + s16 sizeX; + s16 sizeY; + s16 palSize; + GXColor tint; + void *palData; + u32 unk; + void *data; +} HsfBitmap; + +typedef struct hsf_palette { + char *name; + s32 unk; + u32 palSize; + u16 *data; +} HsfPalette; + +typedef struct hsf_attribute { + char *name; + void *unk04; + u8 unk8[4]; + float unk0C; + u8 unk10[4]; + float unk14; + u8 unk18[8]; + float unk20; + u8 unk24[4]; + float unk28; + float unk2C; + float unk30; + float unk34; + u8 unk38[44]; + u32 wrap_s; + u32 wrap_t; + u8 unk6C[12]; + u32 unk78; + u32 flag; + HsfBitmap *bitmap; +} HsfAttribute; + +typedef struct hsf_material { + char *name; + u8 unk4[4]; + u16 pass; + u8 vtxMode; + u8 litColor[3]; + u8 color[3]; + u8 shadowColor[3]; + float hilite_scale; + float unk18; + float invAlpha; + float unk20[2]; + float refAlpha; + float unk2C; + u32 flags; + u32 numAttrs; + s32 *attrs; +} HsfMaterial; + +typedef struct hsf_vertex_buf { + char *name; + s32 count; + void *data; +} HsfBuffer; + +typedef struct hsf_face { + s16 type; + s16 mat; + union { + struct { + s16 indices[3][4]; + u32 count; + s16 *data; + } strip; + s16 indices[4][4]; + }; + float nbt[3]; +} HsfFace; + +typedef struct hsf_const_data { + u32 flags; + s16 hook; + u8 unk6[2]; + void *unk08; + void *unk0C; + Mtx unk10; + AnimData *hilite_map; +} HsfConstData; + +typedef struct hsf_transform { + Vec pos; + Vec rot; + Vec scale; +} HsfTransform; + +typedef struct hsf_cenv_single { + u32 target; + u16 pos; + u16 posCnt; + u16 normal; + u16 normalCnt; +} HsfCenvSingle; + +typedef struct hsf_cenv_dual_weight { + float weight; + u16 pos; + u16 posCnt; + u16 normal; + u16 normalCnt; +} HsfCenvDualWeight; + +typedef struct hsf_cenv_dual { + u32 target1; + u32 target2; + u32 weightCnt; + HsfCenvDualWeight *weight; +} HsfCenvDual; + +typedef struct hsf_cenv_multi_weight { + u32 target; + float value; +} HsfCenvMultiWeight; + +typedef struct hsf_cenv_multi { + u32 weightCnt; + u16 pos; + u16 posCnt; + u16 normal; + u16 normalCnt; + HsfCenvMultiWeight *weight; +} HsfCenvMulti; + +typedef struct hsf_cenv { + char *name; + HsfCenvSingle *singleData; + HsfCenvDual *dualData; + HsfCenvMulti *multiData; + u32 singleCount; + u32 dualCount; + u32 multiCount; + u32 vtxCount; + u32 copyCount; +} HsfCenv; + +typedef struct hsf_part { + char *name; + u32 count; + u16 *vertex; +} HsfPart; + +typedef struct hsf_cluster { + char *name[2]; + union { + char *targetName; + s32 target; + }; + HsfPart *part; + float unk10; + float unk14[1]; // unknown array size + u8 unk18[124]; + u8 adjusted; + u8 unk95; + u16 type; + u32 vertexCnt; + HsfBuffer **vertex; +} HsfCluster; + +typedef struct hsf_shape { + char *name; + union { + u16 count16[2]; + u32 vertexCnt; + }; + HsfBuffer **vertex; +} HsfShape; + +typedef struct hsf_object_data { + struct hsf_object *parent; + u32 childrenCount; + struct hsf_object **children; + HsfTransform base; + HsfTransform curr; + union { + struct { + HsfVector3f min; + HsfVector3f max; + float baseMorph; + float morphWeight[33]; + } mesh; + struct hsf_object *replica; + }; + + HsfBuffer *face; + HsfBuffer *vertex; + HsfBuffer *normal; + HsfBuffer *color; + HsfBuffer *st; + HsfMaterial *material; + HsfAttribute *attribute; + u8 unk120[2]; + u8 shapeType; + u8 unk123; + u32 vertexShapeCnt; + HsfBuffer **vertexShape; + u32 clusterCnt; + HsfCluster **cluster; + u32 cenvCnt; + HsfCenv *cenv; + void *file[2]; +} HsfObjectData; + +typedef struct hsf_camera { + HsfVector3f target; + HsfVector3f pos; + float aspect_dupe; + float fov; + float near; + float far; +} HsfCamera; + +typedef struct hsf_light { + HsfVector3f pos; + HsfVector3f target; + u8 type; + u8 r; + u8 g; + u8 b; + float unk2C; + float ref_distance; + float ref_brightness; + float cutoff; +} HsfLight; +typedef struct hsf_object { + char *name; + u32 type; + HsfConstData *constData; + u32 flags; + union { + HsfObjectData data; + HsfCamera camera; + HsfLight light; + }; +} HsfObject; + +typedef struct hsf_skeleton { + char *name; + HsfTransform transform; +} HsfSkeleton; + +typedef struct hsf_bitmap_keyframe { + float time; + HsfBitmap *data; +} HsfBitmapKey; + +typedef struct hsf_track { + u8 type; + u8 start; + union { + u16 target; + s16 target_s16; + }; + union { + s32 unk04; + struct { + union { + s16 param; + u16 param_u16; + }; + union { + u16 channel; + s16 channel_s16; + }; + }; + }; + u16 curveType; + u16 numKeyframes; + union { + float value; + void *data; + }; +} HsfTrack; + +typedef struct hsf_motion { + char *name; + s32 numTracks; + HsfTrack *track; + float len; +} HsfMotion; + +typedef struct hsf_map_attr { + float minX; + float minZ; + float maxX; + float maxZ; + u16 *data; + u32 dataLen; +} HsfMapAttr; + +typedef struct hsf_matrix { + u32 base_idx; + u32 count; + Mtx *data; +} HsfMatrix; + +typedef struct hsf_data { + u8 magic[8]; + HsfScene *scene; + HsfAttribute *attribute; + HsfMaterial *material; + HsfBuffer *vertex; + HsfBuffer *normal; + HsfBuffer *st; + HsfBuffer *color; + HsfBuffer *face; + HsfBitmap *bitmap; + HsfPalette *palette; + HsfObject *root; + HsfCenv *cenv; + HsfSkeleton *skeleton; + HsfCluster *cluster; + HsfPart *part; + HsfShape *shape; + HsfMotion *motion; + HsfObject *object; + HsfMapAttr *mapAttr; + HsfMatrix *matrix; + s16 sceneCnt; + s16 attributeCnt; + s16 materialCnt; + s16 vertexCnt; + s16 normalCnt; + s16 stCnt; + s16 colorCnt; + s16 faceCnt; + s16 bitmapCnt; + s16 paletteCnt; + s16 objectCnt; + s16 cenvCnt; + s16 skeletonCnt; + s16 clusterCnt; + s16 partCnt; + s16 shapeCnt; + s16 mapAttrCnt; + s16 motionCnt; + s16 matrixCnt; +} HsfData; + +/* end "game/hsfformat.h" */ +/* "include\game\hsfanim.h" line 4 "game/hsfman.h" */ +/* end "game/hsfman.h" */ +/* "include\game\hsfanim.h" line 5 "game/animdata.h" */ +/* end "game/animdata.h" */ + +typedef struct model_data ModelData; +typedef struct particle_data ParticleData; + +typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix); + +typedef struct { + /* 0x00 */ union { + u16 unk00; + s16 unk00_s16; + }; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ Vec unk08; + /* 0x14 */ Vec unk14; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ float unk2C; + /* 0x30 */ float unk30; + /* 0x34 */ Vec unk34; + /* 0x40 */ GXColor unk40; +} HsfanimStruct01; // Size 0x44 + +typedef struct particle_data { + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; + /* 0x04 */ float unk_04; + /* 0x08 */ char unk_08[0x14]; + /* 0x1C */ void *unk_1C; + /* 0x20 */ s16 unk_20; + /* 0x22 */ s16 unk_22; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ u8 unk_2C; + /* 0x2D */ u8 unk_2D; + /* 0x2E */ char unk_2E[2]; + /* 0x30 */ s16 unk_30; + /* 0x32 */ char unk_32[2]; + /* 0x34 */ u32 unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ u32 unk_3C; + /* 0x40 */ s32 unk_40; + /* 0x44 */ AnimData *unk_44; + /* 0x48 */ HsfanimStruct01 *unk_48; + /* 0x4C */ Vec *unk_4C; + /* 0x50 */ void *unk_50; + /* 0x54 */ ParticleHook unk_54; +} ParticleData; // Size 0x58 + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ char unk02[2]; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ Vec unk10; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ s16 unk2C; + /* 0x2E */ GXColor unk2E[4]; + /* 0x3E */ GXColor unk3E[4]; +} HsfanimStruct00; // Size unknown + +typedef struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ float unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ AnimData *unk10; +} Hu3DTexAnimDataStruct; // Size 0x14 + +typedef struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ Vec unk04; + /* 0x10 */ char unk10[0xC]; + /* 0x1C */ Vec unk1C; + /* 0x28 */ char unk28[0xC]; + /* 0x34 */ float unk34; + /* 0x38 */ float unk38; + /* 0x3C */ Mtx unk3C; +} Hu3DTexScrDataStruct; // Size 0x6C + +void Hu3DAnimInit(void); +s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2); +s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2); +void Hu3DAnimKill(s16 arg0); +void Hu3DAnimModelKill(s16 arg0); +void Hu3DAnimAllKill(void); +void Hu3DAnimAttrSet(s16 arg0, u16 arg1); +void Hu3DAnimAttrReset(s16 arg0, s32 arg1); +void Hu3DAnimSpeedSet(s16 arg0, float arg1); +void Hu3DAnimBankSet(s16 arg0, s32 arg1); +void Hu3DAnmNoSet(s16 arg0, u16 arg1); +s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2); +void Hu3DAnimExec(void); +s16 Hu3DTexScrollCreate(s16 arg0, char *arg1); +void Hu3DTexScrollKill(s16 arg0); +void Hu3DTexScrollAllKill(void); +void Hu3DTexScrollPosSet(s16 arg0, float arg1, float arg2, float arg3); +void Hu3DTexScrollPosMoveSet(s16 arg0, float arg1, float arg2, float arg3); +void Hu3DTexScrollRotSet(s16 arg0, float arg1); +void Hu3DTexScrollRotMoveSet(s16 arg0, float arg1); +void Hu3DTexScrollPauseDisableSet(s16 arg0, s32 arg1); +s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1); +void Hu3DParticleScaleSet(s16 arg0, float arg1); +void Hu3DParticleZRotSet(s16 arg0, float arg1); +void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3); +void Hu3DParticleTPLvlSet(s16 arg0, float arg1); +void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1); +void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1); +void Hu3DParticleAttrSet(s16 arg0, u8 arg1); +void Hu3DParticleAttrReset(s16 arg0, u8 arg1); +void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1); +void Hu3DParManInit(void); +s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2); +s16 Hu3DParManLink(s16 arg0, HsfanimStruct00 *arg1); +void Hu3DParManKill(s16 arg0); +void Hu3DParManAllKill(void); +void *Hu3DParManPtrGet(s16 arg0); +void Hu3DParManPosSet(s16 arg0, float arg1, float arg2, float arg3); +void Hu3DParManVecSet(s16 arg0, float arg1, float arg2, float arg3); +void Hu3DParManRotSet(s16 arg0, float arg1, float arg2, float arg3); +void Hu3DParManAttrSet(s16 arg0, s32 arg1); +void Hu3DParManAttrReset(s16 arg0, s32 arg1); +s16 Hu3DParManModelIDGet(s16 arg0); +void Hu3DParManTimeLimitSet(s16 arg0, s32 arg1); +void Hu3DParManVacumeSet(s16 arg0, float arg1, float arg2, float arg3, float arg4); +void Hu3DParManColorSet(s16 arg0, s16 arg1); + +extern Hu3DTexAnimDataStruct Hu3DTexAnimData[256]; +extern Hu3DTexScrDataStruct Hu3DTexScrData[16]; + +/* end "game/hsfanim.h" */ +/* "include\game\hsfman.h" line 4 "game/hsfformat.h" */ +/* end "game/hsfformat.h" */ +/* "include\game\hsfman.h" line 5 "game/memory.h" */ +/* end "game/memory.h" */ +/* "include\game\hsfman.h" line 6 "game/data.h" */ + +#define _GAME_DATA_H + +/* "include\game\data.h" line 3 "game/dvd.h" */ +/* end "game/dvd.h" */ + +/* "include\game\data.h" line 5 "datadir_enum.h" */ + +#define DATADIR_ENUM + + +enum { +/* "include\datadir_enum.h" line 6 "datadir_table.h" */ +DATADIR_ID_E3SETUP, +DATADIR_ID_BBATTLE, +DATADIR_ID_BGUEST, +DATADIR_ID_BKOOPA, +DATADIR_ID_BKOOPASUIT, +DATADIR_ID_BKUJIYA, +DATADIR_ID_BLAST5, +DATADIR_ID_BOARD, +DATADIR_ID_BPAUSE, +DATADIR_ID_BYOKODORI, +DATADIR_ID_DAISY, +DATADIR_ID_DAISYMDL0, +DATADIR_ID_DAISYMDL1, +DATADIR_ID_DAISYMOT, +DATADIR_ID_DONKEY, +DATADIR_ID_DONKEYMDL0, +DATADIR_ID_DONKEYMDL1, +DATADIR_ID_DONKEYMOT, +DATADIR_ID_EFFECT, +DATADIR_ID_GAMEMES, +DATADIR_ID_INST, +DATADIR_ID_INSTFONT, +DATADIR_ID_INSTPIC, +DATADIR_ID_LUIGI, +DATADIR_ID_LUIGIMDL0, +DATADIR_ID_LUIGIMDL1, +DATADIR_ID_LUIGIMOT, +DATADIR_ID_M300, +DATADIR_ID_M302, +DATADIR_ID_M303, +DATADIR_ID_M330, +DATADIR_ID_M333, +DATADIR_ID_M401, +DATADIR_ID_M402, +DATADIR_ID_M403, +DATADIR_ID_M404, +DATADIR_ID_M405, +DATADIR_ID_M406, +DATADIR_ID_M407, +DATADIR_ID_M408, +DATADIR_ID_M409, +DATADIR_ID_M410, +DATADIR_ID_M411, +DATADIR_ID_M412, +DATADIR_ID_M413, +DATADIR_ID_M414, +DATADIR_ID_M415, +DATADIR_ID_M416, +DATADIR_ID_M417, +DATADIR_ID_M418, +DATADIR_ID_M419, +DATADIR_ID_M420, +DATADIR_ID_M421, +DATADIR_ID_M422, +DATADIR_ID_M423, +DATADIR_ID_M424, +DATADIR_ID_M425, +DATADIR_ID_M426, +DATADIR_ID_M427, +DATADIR_ID_M428, +DATADIR_ID_M429, +DATADIR_ID_M430, +DATADIR_ID_M431, +DATADIR_ID_M432, +DATADIR_ID_M433, +DATADIR_ID_M434, +DATADIR_ID_M435, +DATADIR_ID_M436, +DATADIR_ID_M437, +DATADIR_ID_M438, +DATADIR_ID_M439, +DATADIR_ID_M440, +DATADIR_ID_M441, +DATADIR_ID_M442, +DATADIR_ID_M443, +DATADIR_ID_M444, +DATADIR_ID_M445, +DATADIR_ID_M446, +DATADIR_ID_M447, +DATADIR_ID_M448, +DATADIR_ID_M449, +DATADIR_ID_M450, +DATADIR_ID_M451, +DATADIR_ID_M453, +DATADIR_ID_M455, +DATADIR_ID_M456, +DATADIR_ID_M457, +DATADIR_ID_M458, +DATADIR_ID_M459, +DATADIR_ID_M460, +DATADIR_ID_M461, +DATADIR_ID_M462, +DATADIR_ID_MARIO, +DATADIR_ID_MARIOMDL0, +DATADIR_ID_MARIOMDL1, +DATADIR_ID_MARIOMOT, +DATADIR_ID_MENT, +DATADIR_ID_MGCONST, +DATADIR_ID_MGMODE, +DATADIR_ID_MODESEL, +DATADIR_ID_MPEX, +DATADIR_ID_MSTORY, +DATADIR_ID_MSTORY2, +DATADIR_ID_MSTORY3, +DATADIR_ID_MSTORY4, +DATADIR_ID_OPTION, +DATADIR_ID_PEACH, +DATADIR_ID_PEACHMDL0, +DATADIR_ID_PEACHMDL1, +DATADIR_ID_PEACHMOT, +DATADIR_ID_PRESENT, +DATADIR_ID_RESULT, +DATADIR_ID_SAF, +DATADIR_ID_SELMENU, +DATADIR_ID_SETUP, +DATADIR_ID_STAFF, +DATADIR_ID_TITLE, +DATADIR_ID_W01, +DATADIR_ID_W02, +DATADIR_ID_W03, +DATADIR_ID_W04, +DATADIR_ID_W05, +DATADIR_ID_W06, +DATADIR_ID_W10, +DATADIR_ID_W20, +DATADIR_ID_W21, +DATADIR_ID_WALUIGI, +DATADIR_ID_WALUIGIMDL0, +DATADIR_ID_WALUIGIMDL1, +DATADIR_ID_WALUIGIMOT, +DATADIR_ID_WARIO, +DATADIR_ID_WARIOMDL0, +DATADIR_ID_WARIOMDL1, +DATADIR_ID_WARIOMOT, +DATADIR_ID_WIN, +DATADIR_ID_YOSHI, +DATADIR_ID_YOSHIMDL0, +DATADIR_ID_YOSHIMDL1, +DATADIR_ID_YOSHIMOT, +DATADIR_ID_ZTAR, + DATADIR_ID_MAX +}; + + +#define DATADIR_DEFINE(name, path) DATADIR_##name = (DATADIR_ID_##name) << 16, + + +#define DATA_MAKE_NUM(dir, file) ((dir)+(file)) + +#define DATA_DECODE_NONE 0 +#define DATA_DECODE_LZ 1 +#define DATA_DECODE_SLIDE 2 +#define DATA_DECODE_FSLIDE_ALT 3 +#define DATA_DECODE_FSLIDE 4 +#define DATA_DECODE_RLE 5 + +#define DATA_NUM_LISTEND -1 + +/* "include\game\data.h" line 16 "dolphin/types.h" */ +/* end "dolphin/types.h" */ + + +typedef struct data_read_stat { + s32 dir_id; + void *dir; + void *file; + u32 raw_len; + u32 comp_type; + BOOL used; + s32 num; + u32 status; + DVDFileInfo file_info; +} DataReadStat; + +void HuDataInit(void); +int HuDataReadChk(s32 data_num); +DataReadStat *HuDataGetStatus(void *dir_ptr); +void *HuDataGetDirPtr(s32 data_num); +DataReadStat *HuDataDirRead(s32 data_num); +DataReadStat *HuDataDirReadNum(s32 data_num, s32 num); +DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num); +void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo); +s32 HuDataDirReadAsync(s32 data_num); +s32 HuDataDirReadNumAsync(s32 data_num, s32 num); +BOOL HuDataGetAsyncStat(s32 status); +void *HuDataRead(s32 data_num); +void *HuDataReadNum(s32 data_num, s32 num); +void *HuDataSelHeapRead(s32 data_num, HeapID heap); +void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap); +void **HuDataReadMulti(s32 *data_ids); +s32 HuDataGetSize(s32 data_num); +void HuDataClose(void *ptr); +void HuDataCloseMulti(void **ptrs); +void HuDataDirClose(s32 data_id); +void HuDataDirCloseNum(s32 num); +void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap); + +void HuDecodeData(void *src, void *dst, u32 size, int decode_type); + +extern u32 DirDataSize; + + +#define Hu3DModelCreateFile(data_id) (Hu3DModelCreate(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) + +typedef struct particle_data ParticleData; + +typedef void (*ModelHookFunc)(struct model_data *, Mtx); + +typedef struct model_data { + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + s8 unk_04; + s8 unk_05; + s16 layer; + s16 unk_08; + s16 unk_0A; + s16 unk_0C; + s16 unk_0E; + s16 unk_10[4]; + s16 cluster_attr[4]; + s16 unk_20; + u16 camera; + s16 unk_24; + u16 unk_26; + u16 unk_28[8]; + s16 unk_38[8]; + HsfData *unk_48; + HsfData *unk_4C; + u32 attr; + u32 motion_attr; + Point3d unk_58; + f32 unk_64; + f32 unk_68; + f32 unk_6C; + f32 unk_70; + f32 unk_74; + f32 unk_78; + f32 unk_7C; + f32 unk_80; + f32 unk_84; + f32 unk_88; + f32 unk_8C; + f32 unk_90; + f32 unk_94; + f32 unk_98; + f32 unk_9C; + f32 unk_A0; + f32 unk_A4[4]; + f32 unk_B4[4]; + union { + HsfData *hsfData; + ModelHookFunc hook; + }; + HsfData *unk_C8; + Vec pos; + Vec rot; + Vec scale; + Mtx unk_F0; + ParticleData *unk_120; +} ModelData; // sizeof 0x124 +typedef struct camera_data { + f32 fov; + f32 near; + f32 far; + f32 aspect; + f32 aspect_dupe; + Vec pos; + Vec up; + Vec target; + s16 scissor_x; + s16 scissor_y; + s16 scissor_w; + s16 scissor_h; + f32 viewport_x; + f32 viewport_y; + f32 viewport_w; + f32 viewport_h; + f32 near_z; + f32 far_z; +} CameraData; // sizeof 0x58 +typedef struct ThreeDProjectionStruct { + u8 unk_00; + char unk_01[0x3]; + void *unk_04; + Vec unk_08; + Point3d unk_14; + Point3d unk_20; + Vec unk_2C; + Mtx unk_38; + Mtx unk_68; +} ThreeDProjectionStruct; // sizeof 0x98 +typedef struct shadow_data { + u8 unk_00; + u8 unk_01; + u16 unk_02; + void* unk_04; + Vec unk_08; + Vec unk_14; + Vec unk_20; + Vec unk_2C; + Mtx unk_38; + Mtx unk_68; +} ShadowData; // sizeof 0x98 +typedef struct light_data { + s16 unk_00; + s16 unk_02; + f32 unk_04; + f32 unk_08; + char unk_0C[0x10]; + Vec unk_1C; + Vec unk_28; + Vec unk_34; + GXColor color; +} LightData; + +extern void GXWaitDrawDone(); /* extern */ +extern void GXInitSpecularDir(GXLightObj*, f32, f32, f32); + +void Hu3DInit(void); +void Hu3DPreProc(void); +void Hu3DExec(void); +void Hu3DAllKill(void); +void Hu3DBGColorSet(u8, u8, u8); +void Hu3DLayerHookSet(s16, void (*)(s16)); +void Hu3DPauseSet(s32); +void Hu3DNoSyncSet(s32); +s16 Hu3DModelCreate(void *); +s16 Hu3DModelLink(s16); +s16 Hu3DHookFuncCreate(ModelHookFunc); +void Hu3DModelKill(s16); +void Hu3DModelAllKill(void); +void Hu3DModelPosSet(s16, f32, f32, f32); +void Hu3DModelPosSetV(s16, Vec *); +void Hu3DModelRotSet(s16, f32, f32, f32); +void Hu3DModelRotSetV(s16, Vec *); +void Hu3DModelScaleSet(s16, f32, f32, f32); +void Hu3DModelScaleSetV(s16, Vec *); +void Hu3DModelAttrSet(s16, u32); +void Hu3DModelAttrReset(s16, u32); +u32 Hu3DModelAttrGet(s16); +u32 Hu3DModelMotionAttrGet(s16); +void Hu3DModelClusterAttrSet(s16, s16, s32); +void Hu3DModelClusterAttrReset(s16, s16, s32); +void Hu3DModelCameraSet(s16, u16); +void Hu3DModelLayerSet(s16, s16); +HsfObject* Hu3DModelObjPtrGet(s16, char *); +void Hu3DModelTPLvlSet(s16, f32); +void Hu3DModelHiliteMapSet(s16, AnimData*); +void Hu3DModelShadowSet(s16); +void Hu3DModelShadowReset(s16); +void Hu3DModelShadowDispOn(s16); +void Hu3DModelShadowDispOff(s16); +void Hu3DModelShadowMapSet(s16); +void Hu3DModelShadowMapObjSet(s16, char *); +void Hu3DModelAmbSet(s16, f32, f32, f32); +void Hu3DModelHookSet(s16, char *, s16); +void Hu3DModelHookReset(s16); +void Hu3DModelHookObjReset(s16, char *); +void Hu3DModelProjectionSet(s16, s16); +void Hu3DModelProjectionReset(s16, s16); +void Hu3DModelHiliteTypeSet(s16, s16); +void Hu3DModelReflectTypeSet(s16, s16); +void Hu3DCameraCreate(s32); +void Hu3DCameraPerspectiveSet(s32, f32, f32, f32, f32); +void Hu3DCameraViewportSet(s32, f32, f32, f32, f32, f32, f32); +void Hu3DCameraScissorSet(s32, u32, u32, u32, u32); +void Hu3DCameraPosSet(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); +void Hu3DCameraPosSetV(s32 cam, Vec *pos, Vec *up, Vec *target); +void Hu3DCameraKill(s32); +void Hu3DCameraAllKill(void); +void Hu3DCameraSet(s32, Mtx); +BOOL Hu3DModelCameraInfoSet(s16, u16); +s16 Hu3DModelCameraCreate(s16, u16); +void Hu3DCameraMotionOn(s16, s8); +void Hu3DCameraMotionStart(s16, u16); +void Hu3DCameraMotionOff(s16); +void Hu3DLighInit(void); +s16 Hu3DGLightCreate(f32, f32, f32, f32, f32, f32, u8, u8, u8); +s16 Hu3DGLightCreateV(Vec*, Vec*, GXColor*); +s16 Hu3DLLightCreate(s16, f32, f32, f32, f32, f32, f32, u8, u8, u8); +s16 Hu3DLLightCreateV(s16, Vec*, Vec*, GXColor*); +void Hu3DGLightSpotSet(s16, u16, f32); +void Hu3DLLightSpotSet(s16, s16, u16, f32); +void Hu3DGLightInfinitytSet(s16); +void Hu3DLLightInfinitytSet(s16, s16); +void Hu3DGLightPointSet(s16, u16, f32, f32); +void Hu3DLLightPointSet(s16, s16, u16, f32, f32); +void Hu3DGLightKill(s16); +void Hu3DLLightKill(s16, s16); +void Hu3DLightAllKill(void); +void Hu3DGLightColorSet(s16, u8, u8, u8, u8); +void Hu3DLLightColorSet(s16, s16, u8, u8, u8, u8); +void Hu3DGLightPosSetV(s16, Vec*, Point3d*); +void Hu3DLLightPosSetV(s16, s16, Vec*, Point3d*); +void Hu3DGLightPosSet(s16, f32, f32, f32, f32, f32, f32); +void Hu3DLLightPosSet(s16, s16, f32, f32, f32, f32, f32, f32); +void Hu3DGLightPosAimSetV(s16, Point3d*, Point3d*); +void Hu3DLLightPosAimSetV(s16, s16, Point3d*, Point3d*); +void Hu3DGLightPosAimSet(s16, f32, f32, f32, f32, f32, f32); +void Hu3DLLightPosAimSet(s16, s16, f32, f32, f32, f32, f32, f32); +void Hu3DGLightStaticSet(s16, s32); +void Hu3DLLightStaticSet(s16, s16, s32); +s32 Hu3DModelLightInfoSet(s16, s16); +s16 Hu3DLightSet(ModelData*, Mtx*, Mtx*, f32); +void lightSet(LightData* arg0, s16 arg1, Mtx *arg2, Mtx *arg3, f32 arg8); +void Hu3DReflectMapSet(AnimData* arg0); +void Hu3DReflectNoSet(s16 arg0); +void Hu3DFogSet(f32, f32, u8, u8, u8); +void Hu3DFogClear(void); +void Hu3DShadowCreate(f32, f32, f32); +void Hu3DShadowPosSet(Vec*, Vec*, Vec*); +void Hu3DShadowTPLvlSet(f32); +void Hu3DShadowSizeSet(u16); +void Hu3DShadowExec(void); +s16 Hu3DProjectionCreate(void*, f32, f32, f32); +void Hu3DProjectionKill(s16); +void Hu3DProjectionPosSet(s16, Vec*, Vec*, Vec*); +void Hu3DProjectionTPLvlSet(s16, f32); +void Hu3DMipMapSet(char*, s16, s32, f32); + +extern ModelData Hu3DData[0x200]; +extern CameraData Hu3DCamera[0x10]; +extern AnimData *reflectAnim[5]; +extern AnimData *hiliteAnim[4]; +extern ThreeDProjectionStruct Hu3DProjection[4]; +extern ShadowData Hu3DShadowData; +extern Mtx Hu3DCameraMtx; +extern Mtx Hu3DCameraMtxXPose; +extern LightData Hu3DGlobalLight[0x8]; +extern s16 reflectMapNo; +extern AnimData *toonAnim; +extern s16 Hu3DShadowCamBit; +extern s32 Hu3DShadowF; +extern s32 shadowModelDrawF; +extern s16 Hu3DCameraNo; +extern s16 Hu3DCameraBit; +extern s16 Hu3DPauseF; + + +/* end "game/hsfman.h" */ +/* "src\REL\E3setupDLL\main.c" line 4 "game/wipe.h" */ + +#define _GAME_WIPE_H + +/* "include\game\wipe.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ + +#define WIPE_TYPE_NORMAL 0 +#define WIPE_TYPE_CROSS 1 +#define WIPE_TYPE_DUMMY 2 +#define WIPE_MODE_IN 1 +#define WIPE_MODE_OUT 2 +#define WIPE_MODE_BLANK 3 + +typedef struct wipe_state { + u32 unk00; + u32 unk04; + void *copy_data; + u32 unk0C; + void *unk10[8]; + float time; + float duration; + u32 unk38; + u16 w; + u16 h; + u16 x; + u16 y; + GXColor color; + volatile u8 type; + u8 mode; + u8 stat; + u8 keep_copy; +} WipeState; + +void WipeInit(GXRenderModeObj *rmode); +void WipeExecAlways(void); +void WipeCreate(s16 mode, s16 type, s16 duration); +void WipeColorSet(u8 r, u8 g, u8 b); +u8 WipeStatGet(void); + +extern WipeState wipeData; +extern BOOL wipeFadeInF; + + +/* "src\REL\E3setupDLL\main.c" line 5 "game/pad.h" */ + +#define _GAME_PAD_H + +/* "include\game\pad.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ + +#define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN) + +#define PAD_BUTTON_TRIGGER_L 0x4000 +#define PAD_BUTTON_TRIGGER_R 0x2000 + +extern u16 HuPadBtn[4]; +extern u16 HuPadBtnDown[4]; +extern u16 HuPadBtnRep[4]; +extern s8 HuPadStkX[4]; +extern s8 HuPadStkY[4]; +extern s8 HuPadSubStkX[4]; +extern s8 HuPadSubStkY[4]; +extern u8 HuPadTrigL[4]; +extern u8 HuPadTrigR[4]; +extern u8 HuPadDStk[4]; +extern u8 HuPadDStkRep[4]; +extern s8 HuPadErr[4]; +extern u16 _PadBtn[4]; +extern u16 _PadBtnDown[4]; +extern s32 VCounter; + +void HuPadInit(void); +void HuPadRead(void); +void HuPadRumbleSet(s16 pad, s16 duration, s16 off, s16 on); +void HuPadRumbleStop(s16 pad); +void HuPadRumbleAllStop(void); +s16 HuPadStatGet(s16 pad); +u32 HuPadRumbleGet(void); + + +/* "src\REL\E3setupDLL\main.c" line 6 "game/hsfmotion.h" */ + +#define _GAME_HSFMOTION_H + +/* "include\game\hsfmotion.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ +/* "include\game\hsfmotion.h" line 4 "game/hsfformat.h" */ +/* end "game/hsfformat.h" */ + +#define Hu3DJointMotionFile(model, data_id) (Hu3DJointMotion((model), HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) + + +typedef struct motion_data { + s16 unk_00; + s16 unk_02; + HsfData *unk_04; +} MotionData; + +typedef struct { + /* 0x00 */ float unk00; + /* 0x04 */ HsfBitmap *unk04; +} UnknownHsfMotionStruct01; // Size 8 + +void Hu3DMotionInit(void); +s16 Hu3DMotionCreate(void *arg0); +s16 Hu3DMotionModelCreate(s16 arg0); +s32 Hu3DMotionKill(s16 arg0); +void Hu3DMotionAllKill(void); +void Hu3DMotionSet(s16 arg0, s16 arg1); +void Hu3DMotionOverlaySet(s16 arg0, s16 arg1); +void Hu3DMotionOverlayReset(s16 arg0); +float Hu3DMotionOverlayTimeGet(s16 arg0); +void Hu3DMotionOverlayTimeSet(s16 arg0, float arg1); +void Hu3DMotionOverlaySpeedSet(s16 arg0, float arg1); +void Hu3DMotionShiftSet(s16 arg0, s16 arg1, float arg2, float arg3, u32 arg4); +void Hu3DMotionShapeSet(s16 arg0, s16 arg1); +s16 Hu3DMotionShapeIDGet(s16 arg0); +void Hu3DMotionShapeSpeedSet(s16 arg0, float arg1); +void Hu3DMotionShapeTimeSet(s16 arg0, float arg1); +float Hu3DMotionShapeMaxTimeGet(s16 arg0); +void Hu3DMotionShapeStartEndSet(s16 arg0, float arg1, float arg2); +s16 Hu3DMotionClusterSet(s16 arg0, s16 arg1); +s16 Hu3DMotionClusterNoSet(s16 arg0, s16 arg1, s16 arg2); +void Hu3DMotionShapeReset(s16 arg0); +void Hu3DMotionClusterReset(s16 arg0, s16 arg1); +s16 Hu3DMotionIDGet(s16 arg0); +s16 Hu3DMotionShiftIDGet(s16 arg0); +void Hu3DMotionTimeSet(s16 arg0, float arg1); +float Hu3DMotionTimeGet(s16 arg0); +float Hu3DMotionShiftTimeGet(s16 arg0); +float Hu3DMotionMaxTimeGet(s16 arg0); +float Hu3DMotionShiftMaxTimeGet(s16 arg0); +void Hu3DMotionShiftStartEndSet(s16 arg0, float arg1, float arg2); +float Hu3DMotionMotionMaxTimeGet(s16 arg0); +void Hu3DMotionStartEndSet(s16 arg0, float arg1, float arg2); +s32 Hu3DMotionEndCheck(s16 arg0); +void Hu3DMotionSpeedSet(s16 arg0, float arg1); +void Hu3DMotionShiftSpeedSet(s16 arg0, float arg1); +void Hu3DMotionNoMotSet(s16 arg0, char *arg1, u32 arg2); +void Hu3DMotionNoMotReset(s16 arg0, char *arg1, u32 arg2); +void Hu3DMotionForceSet(s16 arg0, char *arg1, u32 arg2, float arg3); +void Hu3DMotionNext(s16 arg0); +void Hu3DMotionExec(s16 arg0, s16 arg1, float arg2, s32 arg3); +void Hu3DCameraMotionExec(s16 arg0); +void Hu3DSubMotionExec(s16 arg0); +float *GetObjTRXPtr(HsfObject *arg0, u16 arg1); +void SetObjMatMotion(s16 arg0, HsfTrack *arg1, float arg2); +void SetObjAttrMotion(s16 arg0, HsfTrack *arg1, float arg2); +void SetObjCameraMotion(s16 arg0, HsfTrack *arg1, float arg2); +void SetObjLightMotion(s16 arg0, HsfTrack *arg1, float arg2); +float GetCurve(HsfTrack *arg0, float arg1); +float GetConstant(s32 arg0, float *arg1, float arg2); +float GetLinear(s32 arg0, float arg1[][2], float arg2); +float GetBezier(s32 arg0, HsfTrack *arg1, float arg2); +HsfBitmap *GetBitMap(s32 arg0, UnknownHsfMotionStruct01 *arg1, float arg2); +s16 Hu3DJointMotion(s16 arg0, void *arg1); +void JointModel_Motion(s16 arg0, s16 arg1); +void Hu3DMotionCalc(s16 arg0); + +extern MotionData Hu3DMotion[256]; + + +/* end "game/hsfmotion.h" */ +/* "src\REL\E3setupDLL\main.c" line 7 "game/init.h" */ + +#define _GAME_INIT_H + +/* "include\game\init.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ + +extern GXRenderModeObj *RenderMode; +extern OSHeapHandle currentHeapHandle; + +extern void *DemoFrameBuffer1; +extern void *DemoFrameBuffer2; +extern void *DemoCurrentBuffer; +extern u32 minimumVcount; +extern float minimumVcountf; +extern u32 worstVcount; + +void HuSysInit(GXRenderModeObj *mode); +void HuSysBeforeRender(); +void HuSysDoneRender(s32 retrace_count); + + +/* "src\REL\E3setupDLL\main.c" line 8 "game/minigame_seq.h" */ + +#define _GAME_MINIGAME_SEQ_H + +/* "include\game\minigame_seq.h" line 3 "game/object.h" */ +/* end "game/object.h" */ +/* "include\game\minigame_seq.h" line 4 "stdarg.h" */ + +#define STDARG_H + +typedef struct { + char gpr; + char fpr; + char reserved[2]; + char* input_arg_area; + char* reg_save_area; +} __va_list[1]; +typedef __va_list va_list; + +void* __va_arg(va_list v_list, unsigned char type); + +#define va_start(ap, fmt) ((void) fmt, __builtin_va_info(&ap)) +#define va_arg(ap, t) (*((t*) __va_arg(ap, _var_arg_typeof(t)))) +#define va_end(ap) (void) 0 + + + +#define MG_SEQ_TYPE_TIMER 1 +#define MG_SEQ_TYPE_AUTO 3 +#define MG_SEQ_TYPE_1VS3 4 +#define MG_SEQ_TYPE_WIN 5 +#define MG_SEQ_TYPE_BATTLE 6 +#define MG_SEQ_TYPE_STORY 7 +#define MG_SEQ_TYPE_4P 8 +#define MG_SEQ_TYPE_2VS2 9 +#define MG_SEQ_TYPE_PINBALL 10 +#define MG_SEQ_TYPE_BOWSER 11 +#define MG_SEQ_TYPE_ALTWIN 12 +#define MG_SEQ_TYPE_DRAW 13 +#define MG_SEQ_TYPE_RECORD 14 + +#define MG_SEQ_WIN_TYPE_WIN 3 +#define MG_SEQ_WIN_TYPE_LOSE 4 +#define MG_SEQ_WIN_TYPE_CHAMPION 5 + +#define MG_SEQ_WORD_START 0 +#define MG_SEQ_WORD_FINISH 1 +#define MG_SEQ_WORD_DRAW 2 + +#define MGSeqTimerCreate(value) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), -1, -1) +#define MGSeqTimerCreateXY(value, x, y) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), (int)(x), (int)(y)) +#define MGSeqStartCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_START) +#define MGSeqFinishCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_FINISH) +#define MGSeqDrawCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_DRAW) +#define MGSeqStartCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_START) +#define MGSeqFinishCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_FINISH) +#define MGSeqDrawCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_DRAW) +#define MGSeqWinCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_WIN, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqLoseCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_LOSE, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqChampionCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_ALTWIN, MG_SEQ_WIN_TYPE_CHAMPION, (player_1), (player_2), (player_3), (player_4)) +#define MGSeqRecordCreate(value) MGSeqCreate(MG_SEQ_TYPE_RECORD, (value)) + + + +typedef struct seq_work SeqWork; + +typedef int (*SeqUpdateFunc)(SeqWork *work); +typedef int (*SeqInitFunc)(SeqWork *work, va_list params); + +typedef struct seq_work { + SeqUpdateFunc update; + char *data; + float x; + float y; + float scale_x; + float scale_y; + float unk_18; + float angle; + float win_scale; + float unk_24; + s16 time; + s16 time_max; + s16 timer_val; + s16 state; + s16 alt_word_len; + s16 word_len; + s16 param[2]; + s16 type; + s16 spr_grp[16]; + s16 sprite[16]; + u8 seq_no; + u8 stat; + u8 unk_7C; + u8 unk_7D; +} SeqWork; + +void MGSeqInit(void); +void MGSeqMain(void); +s16 MGSeqCreate(s16 type, ...); +u8 MGSeqStatGet(s16 id); +void MGSeqPosSet(s16 id, float x, float y); +void MGSeqParamSet(s16 id, s16 param1, s16 param2); +void MGSeqSprKill(SeqWork *work); +void MGSeqKill(s16 id); +void MGSeqKillAll(void); +s32 MGSeqDoneCheck(void); +void MGSeqStub(void); +void MGSeqPauseInit(void); +void MGSeqPauseEnableCtrl(s32 flag); +void MGSeqPracticeInit(void); +void MGSeqPracticeExitCheck(omObjData *object); + +extern OverlayID mgSeqOvlPrev; + + +/* end "game/minigame_seq.h" */ +/* "src\REL\E3setupDLL\main.c" line 9 "game/chrman.h" */ + +#define _GAME_CHRMAN_H + +/* "include\game\chrman.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ + +void CharManInit(void); +void *CharAMemPtrGet(s16 character); +void CharARAMOpen(s16 character); +void CharARAMClose(s16 character); +void CharKill(s16 arg0); +void CharKillAll(void); +s16 CharModelCreate(s16 character, s16 lod); +s16 CharModelMotionCreate(s16 character, s32 arg1); +void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2); +void CharModelMotionKill(s16 character, u32 motion); +void CharModelMotionDataClose(s16 character); +void CharModelDataClose(s16 arg0); +void CharModelKill(s16 character); +void CharModelMotionSet(s16 character, s16 motion); +void CharModelTexAnimSet(s16 character); +char **CharModelTexNameGet(s16 arg0, s16 arg1); +char *CharModelHookNameGet(s16 arg0, s16 arg1, s16 arg2); +void CharModelMotionTimeSet(s16 character, float time); +float CharModelMotionTimeGet(s16 character); +float CharModelMotionMaxTimeGet(s16 character); +s32 CharModelMotionEndCheck(s16 character); +s16 CharModelMotionShiftIDGet(s16 character); +void CharModelMotionShiftSet(s16 character, s16 motion, float time, float shift_time, u32 attr); +float CharModelMotionShiftTimeGet(s16 character); +void CharModelMotionSpeedSet(s16 character, float speed); +void CharModelLayerSetAll(s16 arg0); +void CharModelItemHookCreate(s16 character, char *arg1); +void CharModelEffectCreate(s16 arg0, Vec *arg1); +void CharModelCoinEffectCreate(s16 arg0, Vec *arg1); +void fn_8004EC74(s16 character); +void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2); +void fn_8004F058(s16 character); +void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2); +void CharModelLayerSetAll2(s16 arg0); +void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); +void fn_8004F52C(s16 character, s32 arg1); +void CharModelEffectEnableSet(s16 character, s32 arg1); +s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3); +s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2); +s32 CharModelStepTypeSet(s16 character, s32 arg1); + + +/* end "game/chrman.h" */ +/* "src\REL\E3setupDLL\main.c" line 10 "game/sprite.h" */ + +#define _GAME_SPRITE_H + +/* "include\game\sprite.h" line 3 "dolphin.h" */ +/* end "dolphin.h" */ +/* "include\game\sprite.h" line 4 "game/data.h" */ +/* end "game/data.h" */ +/* "include\game\sprite.h" line 5 "game/memory.h" */ +/* end "game/memory.h" */ + +#define HUSPR_MAX 384 +#define HUSPR_GRP_MAX 256 + +#define HUSPR_NONE -1 +#define HUSPR_GRP_NONE -1 + +#define HUSPR_ATTR_NOANIM 0x1 +#define HUSPR_ATTR_LOOP 0x2 +#define HUSPR_ATTR_DISPOFF 0x4 +#define HUSPR_ATTR_LINEAR 0x8 +#define HUSPR_ATTR_FUNC 0x10 +#define HUSPR_ATTR_NOPAUSE 0x20 +#define HUSPR_ATTR_REVERSE 0x40 +#define HUSPR_ATTR_ADDCOL 0x80 +#define HUSPR_ATTR_INVCOL 0x100 + +/* "include\game\sprite.h" line 23 "game/animdata.h" */ +/* end "game/animdata.h" */ + +typedef void (*HuSprFunc)(struct hu_sprite *); + +typedef struct hu_sprite { + u8 r; + u8 g; + u8 b; + u8 draw_no; + s16 frame; + s16 bank; + s16 attr; + s16 dirty_flag; + s16 prio; + float time; + float x; + float y; + float z_rot; + float scale_x; + float scale_y; + float speed; + float a; + GXTexWrapMode wrap_s; + GXTexWrapMode wrap_t; + s16 tex_scale_x; + s16 tex_scale_y; + Mtx *group_mtx; + union { + AnimData *data; + HuSprFunc func; + }; + AnimPatData *pat_data; + AnimFrameData *frame_data; + s16 work[4]; + AnimData *bg; + u16 bg_bank; + s16 scissor_x; + s16 scissor_y; + s16 scissor_w; + s16 scissor_h; +} HuSprite; + +typedef struct hu_spr_grp { + s16 capacity; + float x; + float y; + float z_rot; + float scale_x; + float scale_y; + float center_x; + float center_y; + s16 *members; + Mtx mtx; +} HuSprGrp; + +extern HuSprite HuSprData[HUSPR_MAX]; +extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX]; + +#define HuSprAnimReadFile(data_id) (HuSprAnimRead(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) + +void HuSprInit(void); +void HuSprClose(void); +void HuSprExec(s16 draw_no); +void HuSprBegin(void); +HuSprite *HuSprCall(void); +void HuSprFinish(void); +void HuSprPauseSet(BOOL value); +AnimData *HuSprAnimRead(void *data); +void HuSprAnimLock(AnimData *anim); +s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank); +s16 HuSprFuncCreate(HuSprFunc func, s16 prio); +s16 HuSprGrpCreate(s16 capacity); +s16 HuSprGrpCopy(s16 group); +void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite); +void HuSprGrpMemberKill(s16 group, s16 member); +void HuSprGrpKill(s16 group); +void HuSprKill(s16 sprite); +void HuSprAnimKill(AnimData *anim); +void HuSprAttrSet(s16 group, s16 member, s32 attr); +void HuSprAttrReset(s16 group, s16 member, s32 attr); +void HuSprPosSet(s16 group, s16 member, float x, float y); +void HuSprZRotSet(s16 group, s16 member, float z_rot); +void HuSprScaleSet(s16 group, s16 member, float x, float y); +void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl); +void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b); +void HuSprSpeedSet(s16 group, s16 member, float speed); +void HuSprBankSet(s16 group, s16 member, s16 bank); +void HuSprGrpPosSet(s16 group, float x, float y); +void HuSprGrpCenterSet(s16 group, float x, float y); +void HuSprGrpZRotSet(s16 group, float z_rot); +void HuSprGrpScaleSet(s16 group, float x, float y); +void HuSprGrpTPLvlSet(s16 group, float tp_lvl); + +void HuSprGrpDrawNoSet(s16 group, s32 draw_no); + +void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); +void HuSprPriSet(s16 group, s16 member, s16 prio); +void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); +void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h); +AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt); +void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank); +void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank); +void AnimDebug(AnimData *anim); + +void HuSprDispInit(void); +void HuSprDisp(HuSprite *sprite); +void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter); +void HuSprExecLayerSet(s16 draw_no, s16 layer); + + +/* "src\REL\E3setupDLL\main.c" line 11 "game/window.h" */ + +#define _GAME_WINDOW_H + +/* "include\game\window.h" line 3 "game/animdata.h" */ +/* end "game/animdata.h" */ +/* "include\game\window.h" line 4 "dolphin.h" */ +/* end "dolphin.h" */ + +#define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) +#define MAKE_MESSID_PTR(ptr) ((u32)(ptr)) + +typedef struct { + /* 0x00 */ u8 color; + /* 0x01 */ u8 fade; + /* 0x02 */ s16 x; + /* 0x04 */ s16 y; + /* 0x06 */ s16 character; +} WinChar; // Size 8 + +typedef struct { + /* 0x00 */ u8 stat; + /* 0x02 */ s16 x; + /* 0x04 */ s16 y; +} WinChoice; // Size 6 + +typedef struct { + /* 0x000 */ u8 stat; + /* 0x001 */ u8 active_pad; + /* 0x002 */ u8 player_disable; + /* 0x003 */ u8 color_key; + /* 0x004 */ s16 group; + /* 0x006 */ s16 sprite_id[30]; + /* 0x042 */ s16 speed; + /* 0x044 */ s16 mess_time; + /* 0x046 */ s16 advance_sprite; + /* 0x048 */ s16 prio; + /* 0x04C */ u32 attr; + /* 0x050 */ AnimData *frame; + /* 0x054 */ s16 mess_rect_x; + /* 0x056 */ s16 mess_rect_w; + /* 0x058 */ s16 mess_rect_y; + /* 0x05A */ s16 mess_rect_h; + /* 0x05C */ s16 mess_x; + /* 0x05E */ s16 mess_y; + /* 0x060 */ s16 mess_color; + /* 0x062 */ s16 mess_shadow_color; + /* 0x064 */ s16 spacing_x; + /* 0x066 */ s16 spacing_y; + /* 0x068 */ s16 w; + /* 0x06A */ s16 h; + /* 0x06C */ float pos_x; + /* 0x070 */ float pos_y; + /* 0x074 */ float scale_x; + /* 0x078 */ float scale_y; + /* 0x07C */ float z_rot; + /* 0x080 */ s16 num_chars; + /* 0x082 */ s16 max_chars; + /* 0x084 */ WinChar *char_data; + /* 0x088 */ s16 mess_stackptr; + /* 0x08C */ s32 unk8C; + /* 0x090 */ u8 *mess; + /* 0x094 */ u8 *mess_stack[8]; + /* 0x0B4 */ u8 *insert_mess[8]; + /* 0x0D4 */ s16 num_choices; + /* 0x0D6 */ s16 choice; + /* 0x0D8 */ s16 cursor_sprite; + /* 0x0DA */ u8 choice_disable[16]; + /* 0x0EA */ WinChoice choice_data[16]; + /* 0x14A */ s16 scissor_x; + /* 0x14C */ s16 scissor_y; + /* 0x14E */ s16 scissor_w; + /* 0x150 */ s16 scissor_h; + /* 0x152 */ s16 tab_w; + /* 0x154 */ s16 push_key; + /* 0x156 */ s16 key_down; + /* 0x158 */ s16 key_auto; + /* 0x160 */ u8 mess_pal[10][3]; +} WindowData; // Size 0x180 + +extern WindowData winData[32]; +extern void *messDataPtr; + +void HuWindowInit(void); +void HuWinInit(s32 mess_data_no); +s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame); +void HuWinKill(s16 window); +void HuWinAllKill(void); +void HuWinHomeClear(s16 window); +void HuWinKeyWaitEntry(s16 window); +u32 HuWinActivePadGet(WindowData *window); +u32 HuWinActiveKeyGetX(WindowData *window); +void HuWinPosSet(s16 window, float x, float y); +void HuWinScaleSet(s16 window, float x, float y); +void HuWinZRotSet(s16 window, float z_rot); +void HuWinCenterPosSet(s16 window, float x, float y); +void HuWinDrawNoSet(s16 window, s16 draw_no); +void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h); +void HuWinPriSet(s16 window, s16 prio); +void HuWinAttrSet(s16 window, u32 attr); +void HuWinAttrReset(s16 window, u32 attr); +s16 HuWinStatGet(s16 window); +void HuWinMesColSet(s16 window, u8 color); +void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b); +void HuWinBGTPLvlSet(s16 window, float tp_level); +void HuWinBGColSet(s16 window, GXColor *bg_color); +void HuWinMesSpeedSet(s16 window, s16 speed); +void HuWinMesRead(s32 mess_data_no); +void HuWinMesSet(s16 window, u32 mess); +void HuWinInsertMesSet(s16 window, u32 mess, s16 index); +s16 HuWinChoiceGet(s16 window, s16 start_choice); +s16 HuWinChoiceNumGet(s16 window); +void HuWinChoiceDisable(s16 window, s16 choice); +s16 HuWinChoiceNowGet(s16 window); +void HuWinMesWait(s16 window); +s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); +s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); +void HuWinSprPosSet(s16 window, s16 index, float x, float y); +void HuWinSprPriSet(s16 window, s16 index, s16 prio); +s16 HuWinSprIDGet(s16 window, s16 index); +void HuWinSprKill(s16 window, s16 index); +void HuWinDispOff(s16 window); +void HuWinDispOn(s16 window); +void HuWinComKeyWait(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay); +void HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4); +void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay); +void HuWinComKeyGet(s16 window, u32 *data); +void HuWinComKeyReset(void); +void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...); +void HuWinInsertMesSizeGet(u32 mess, s16 index); +void HuWinMesSizeCancelCRSet(s32 cancel_cr); +void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end); +s16 HuWinKeyWaitNumGet(u32 mess); +void HuWinPushKeySet(s16 window, s16 push_key); +void HuWinDisablePlayerSet(s16 window, u8 player); +void HuWinDisablePlayerReset(s16 window, u8 player); +s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait); +s16 HuWinExCreateStyled(float x, float y, s16 w, s16 h, s16 portrait, s16 frame); +void HuWinExAnimIn(s16 window); +void HuWinExAnimOut(s16 window); +void HuWinExCleanup(s16 window); +void HuWinExAnimPopIn(s16 window, s16 portrait); +void *MessData_MesPtrGet(void *data, u32 index); + +extern void *messDataPtr; + + +/* end "game/window.h" */ +/* "src\REL\E3setupDLL\main.c" line 12 "ext_math.h" */ + +#define _EXT_MATH_H + +/* "include\ext_math.h" line 3 "math.h" */ + +#define _MATH_H + +#define M_PI 3.141592653589793 + + +#define _MATH_INLINE static inline + + +extern inline float sqrtf(float x) +{ + volatile float y; + if(x > 0.0f) + { + double guess = __frsqrte((double)x); // returns an approximation to + guess = 0.5*guess*(3.0 - guess*guess*x); // now have 12 sig bits + guess = 0.5*guess*(3.0 - guess*guess*x); // now have 24 sig bits + guess = 0.5*guess*(3.0 - guess*guess*x); // now have 32 sig bits + y=(float)(x*guess); + return y; + } + return x; +} + +double atan(double x); +double copysign(double x, double y); +double cos(double x); +double floor(double x); +double frexp(double x, int *exp); +double ldexp(double x, int exp); +double modf(double x, double *intpart); +double sin(double x); +double tan(double x); +double acos(double x); +double asin(double x); +double atan2(double y, double x); +double fmod(double x, double y); +double log(double x); +double pow(double x, double y); +float tanf(float x); +float sinf(float x); +float cosf(float x); +float atan2f(float y, float x); +float acosf(float x); + +extern inline double fabs(double x) +{ + return __fabs(x); +} + + +/* end "math.h" */ +/* "include\ext_math.h" line 4 "dolphin/mtx.h" */ +/* end "dolphin/mtx.h" */ + +typedef struct vec2f { + float x; + float y; +} 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) +#define cosd(x) cos(M_PI*(x)/180.0) +#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI)) diff --git a/ctx_working.c b/ctx_working.c new file mode 100644 index 00000000..c1752823 --- /dev/null +++ b/ctx_working.c @@ -0,0 +1,2402 @@ +typedef signed char s8; +typedef signed short int s16; +typedef signed long s32; +typedef signed long long int s64; +typedef unsigned char u8; +typedef unsigned short int u16; +typedef unsigned long u32; +typedef unsigned long long int u64; + +typedef volatile u8 vu8; +typedef volatile u16 vu16; +typedef volatile u32 vu32; +typedef volatile u64 vu64; + +typedef volatile s8 vs8; +typedef volatile s16 vs16; +typedef volatile s32 vs32; +typedef volatile s64 vs64; + +typedef float f32; +typedef double f64; + +typedef volatile f32 vf32; +typedef volatile f64 vf64; +typedef int BOOL; +#define FALSE 0 +#define TRUE 1 + +#define NULL ((void *)0) +#define nullptr NULL + +typedef enum _GXCITexFmt { + GX_TF_C4 = 0x8, + GX_TF_C8 = 0x9, + GX_TF_C14X2 = 0xa, +} GXCITexFmt; + +typedef enum _GXTexWrapMode { + GX_CLAMP, + GX_REPEAT, + GX_MIRROR, + GX_MAX_TEXWRAPMODE, +} GXTexWrapMode; + +typedef enum _GXTexFilter { + GX_NEAR, + GX_LINEAR, + GX_NEAR_MIP_NEAR, + GX_LIN_MIP_NEAR, + GX_NEAR_MIP_LIN, + GX_LIN_MIP_LIN, +} GXTexFilter; + +typedef enum _GXAnisotropy { + GX_ANISO_1, + GX_ANISO_2, + GX_ANISO_4, + GX_MAX_ANISOTROPY, +} GXAnisotropy; + +typedef enum _GXTexMapID { + GX_TEXMAP0, + GX_TEXMAP1, + GX_TEXMAP2, + GX_TEXMAP3, + GX_TEXMAP4, + GX_TEXMAP5, + GX_TEXMAP6, + GX_TEXMAP7, + GX_MAX_TEXMAP, + GX_TEXMAP_NULL = 0xFF, + GX_TEX_DISABLE = 0x100, +} GXTexMapID; + +typedef enum _GXTexCoordID { + GX_TEXCOORD0, + GX_TEXCOORD1, + GX_TEXCOORD2, + GX_TEXCOORD3, + GX_TEXCOORD4, + GX_TEXCOORD5, + GX_TEXCOORD6, + GX_TEXCOORD7, + GX_MAX_TEXCOORD, + GX_TEXCOORD_NULL = 0xFF, +} GXTexCoordID; + +typedef enum _GXTevStageID { + GX_TEVSTAGE0, + GX_TEVSTAGE1, + GX_TEVSTAGE2, + GX_TEVSTAGE3, + GX_TEVSTAGE4, + GX_TEVSTAGE5, + GX_TEVSTAGE6, + GX_TEVSTAGE7, + GX_TEVSTAGE8, + GX_TEVSTAGE9, + GX_TEVSTAGE10, + GX_TEVSTAGE11, + GX_TEVSTAGE12, + GX_TEVSTAGE13, + GX_TEVSTAGE14, + GX_TEVSTAGE15, + GX_MAX_TEVSTAGE, +} GXTevStageID; + +typedef enum _GXTevMode { + GX_MODULATE, + GX_DECAL, + GX_BLEND, + GX_REPLACE, + GX_PASSCLR, +} GXTevMode; + +typedef enum _GXTexMtxType { + GX_MTX3x4, + GX_MTX2x4, +} GXTexMtxType; + +typedef enum _GXTexGenType { + GX_TG_MTX3x4, + GX_TG_MTX2x4, + GX_TG_BUMP0, + GX_TG_BUMP1, + GX_TG_BUMP2, + GX_TG_BUMP3, + GX_TG_BUMP4, + GX_TG_BUMP5, + GX_TG_BUMP6, + GX_TG_BUMP7, + GX_TG_SRTG, +} GXTexGenType; + +typedef enum _GXPosNrmMtx { + GX_PNMTX0 = 0, + GX_PNMTX1 = 3, + GX_PNMTX2 = 6, + GX_PNMTX3 = 9, + GX_PNMTX4 = 12, + GX_PNMTX5 = 15, + GX_PNMTX6 = 18, + GX_PNMTX7 = 21, + GX_PNMTX8 = 24, + GX_PNMTX9 = 27, +} GXPosNrmMtx; + +typedef enum _GXTexMtx { + GX_TEXMTX0 = 30, + GX_TEXMTX1 = 33, + GX_TEXMTX2 = 36, + GX_TEXMTX3 = 39, + GX_TEXMTX4 = 42, + GX_TEXMTX5 = 45, + GX_TEXMTX6 = 48, + GX_TEXMTX7 = 51, + GX_TEXMTX8 = 54, + GX_TEXMTX9 = 57, + GX_IDENTITY = 60, +} GXTexMtx; + +typedef enum _GXChannelID { + GX_COLOR0, + GX_COLOR1, + GX_ALPHA0, + GX_ALPHA1, + GX_COLOR0A0, + GX_COLOR1A1, + GX_COLOR_ZERO, + GX_ALPHA_BUMP, + GX_ALPHA_BUMPN, + GX_COLOR_NULL = 0xFF, +} GXChannelID; + +typedef enum _GXTexGenSrc { + GX_TG_POS, + GX_TG_NRM, + GX_TG_BINRM, + GX_TG_TANGENT, + GX_TG_TEX0, + GX_TG_TEX1, + GX_TG_TEX2, + GX_TG_TEX3, + GX_TG_TEX4, + GX_TG_TEX5, + GX_TG_TEX6, + GX_TG_TEX7, + GX_TG_TEXCOORD0, + GX_TG_TEXCOORD1, + GX_TG_TEXCOORD2, + GX_TG_TEXCOORD3, + GX_TG_TEXCOORD4, + GX_TG_TEXCOORD5, + GX_TG_TEXCOORD6, + GX_TG_COLOR0, + GX_TG_COLOR1, + GX_MAX_TEXGENSRC, +} GXTexGenSrc; + +typedef enum _GXBlendMode { + GX_BM_NONE, + GX_BM_BLEND, + GX_BM_LOGIC, + GX_BM_SUBTRACT, + GX_MAX_BLENDMODE, +} GXBlendMode; + +typedef enum _GXBlendFactor { + GX_BL_ZERO, + GX_BL_ONE, + GX_BL_SRCCLR, + GX_BL_INVSRCCLR, + GX_BL_SRCALPHA, + GX_BL_INVSRCALPHA, + GX_BL_DSTALPHA, + GX_BL_INVDSTALPHA, + GX_BL_DSTCLR = GX_BL_SRCCLR, + GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, +} GXBlendFactor; + +#define GX_FALSE ((GXBool)0) +#define GX_TRUE ((GXBool)1) + +#define GX_ENABLE ((GXBool)1) +#define GX_DISABLE ((GXBool)0) + +typedef enum _GXProjectionType { + GX_PERSPECTIVE, + GX_ORTHOGRAPHIC, +} GXProjectionType; + +typedef enum _GXCompare { + GX_NEVER, + GX_LESS, + GX_EQUAL, + GX_LEQUAL, + GX_GREATER, + GX_NEQUAL, + GX_GEQUAL, + GX_ALWAYS, +} GXCompare; + +typedef enum _GXAlphaOp { + GX_AOP_AND, + GX_AOP_OR, + GX_AOP_XOR, + GX_AOP_XNOR, + GX_MAX_ALPHAOP, +} GXAlphaOp; + +typedef enum _GXZFmt16 { + GX_ZC_LINEAR, + GX_ZC_NEAR, + GX_ZC_MID, + GX_ZC_FAR, +} GXZFmt16; + +typedef enum _GXGamma { + GX_GM_1_0, + GX_GM_1_7, + GX_GM_2_2, +} GXGamma; + +typedef enum _GXPixelFmt { + GX_PF_RGB8_Z24, + GX_PF_RGBA6_Z24, + GX_PF_RGB565_Z16, + GX_PF_Z24, + GX_PF_Y8, + GX_PF_U8, + GX_PF_V8, + GX_PF_YUV420, +} GXPixelFmt; + +typedef enum _GXPrimitive { + GX_QUADS = 0x80, + GX_TRIANGLES = 0x90, + GX_TRIANGLESTRIP = 0x98, + GX_TRIANGLEFAN = 0xA0, + GX_LINES = 0xA8, + GX_LINESTRIP = 0xB0, + GX_POINTS = 0xB8, +} GXPrimitive; + +typedef enum _GXVtxFmt { + GX_VTXFMT0, + GX_VTXFMT1, + GX_VTXFMT2, + GX_VTXFMT3, + GX_VTXFMT4, + GX_VTXFMT5, + GX_VTXFMT6, + GX_VTXFMT7, + GX_MAX_VTXFMT, +} GXVtxFmt; + +typedef enum _GXAttr { + GX_VA_PNMTXIDX, + GX_VA_TEX0MTXIDX, + GX_VA_TEX1MTXIDX, + GX_VA_TEX2MTXIDX, + GX_VA_TEX3MTXIDX, + GX_VA_TEX4MTXIDX, + GX_VA_TEX5MTXIDX, + GX_VA_TEX6MTXIDX, + GX_VA_TEX7MTXIDX, + GX_VA_POS, + GX_VA_NRM, + GX_VA_CLR0, + GX_VA_CLR1, + GX_VA_TEX0, + GX_VA_TEX1, + GX_VA_TEX2, + GX_VA_TEX3, + GX_VA_TEX4, + GX_VA_TEX5, + GX_VA_TEX6, + GX_VA_TEX7, + GX_POS_MTX_ARRAY, + GX_NRM_MTX_ARRAY, + GX_TEX_MTX_ARRAY, + GX_LIGHT_ARRAY, + GX_VA_NBT, + GX_VA_MAX_ATTR, + GX_VA_NULL = 0xFF, +} GXAttr; + +#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1) + +typedef enum _GXAttrType { + GX_NONE, + GX_DIRECT, + GX_INDEX8, + GX_INDEX16, +} GXAttrType; + +#define _GX_TF_CTF 0x20 +#define _GX_TF_ZTF 0x10 + +typedef enum _GXTexFmt { + GX_TF_I4 = 0x0, + GX_TF_I8 = 0x1, + GX_TF_IA4 = 0x2, + GX_TF_IA8 = 0x3, + GX_TF_RGB565 = 0x4, + GX_TF_RGB5A3 = 0x5, + GX_TF_RGBA8 = 0x6, + GX_TF_CMPR = 0xE, + + GX_CTF_R4 = 0x0 , + GX_CTF_RA4 = 0x2 , + GX_CTF_RA8 = 0x3 , + GX_CTF_YUVA8 = 0x6 , + GX_CTF_A8 = 0x7 , + GX_CTF_R8 = 0x8 , + GX_CTF_G8 = 0x9 , + GX_CTF_B8 = 0xA , + GX_CTF_RG8 = 0xB , + GX_CTF_GB8 = 0xC , + + GX_TF_Z8 = 0x1 , + GX_TF_Z16 = 0x3 , + GX_TF_Z24X8 = 0x6 , + + GX_CTF_Z4 = 0x0 , + GX_CTF_Z8M = 0x9 , + GX_CTF_Z8L = 0xA, + GX_CTF_Z16L = 0xC, + + GX_TF_A8 = GX_CTF_A8, +} GXTexFmt; + +typedef enum _GXCITexFmt { + GX_TF_C4 = 0x8, + GX_TF_C8 = 0x9, + GX_TF_C14X2 = 0xa, +} GXCITexFmt; + +typedef enum _GXTexWrapMode { + GX_CLAMP, + GX_REPEAT, + GX_MIRROR, + GX_MAX_TEXWRAPMODE, +} GXTexWrapMode; + +typedef enum _GXTexFilter { + GX_NEAR, + GX_LINEAR, + GX_NEAR_MIP_NEAR, + GX_LIN_MIP_NEAR, + GX_NEAR_MIP_LIN, + GX_LIN_MIP_LIN, +} GXTexFilter; + +typedef enum _GXAnisotropy { + GX_ANISO_1, + GX_ANISO_2, + GX_ANISO_4, + GX_MAX_ANISOTROPY, +} GXAnisotropy; + +typedef enum _GXTexMapID { + GX_TEXMAP0, + GX_TEXMAP1, + GX_TEXMAP2, + GX_TEXMAP3, + GX_TEXMAP4, + GX_TEXMAP5, + GX_TEXMAP6, + GX_TEXMAP7, + GX_MAX_TEXMAP, + GX_TEXMAP_NULL = 0xFF, + GX_TEX_DISABLE = 0x100, +} GXTexMapID; + +typedef enum _GXTexCoordID { + GX_TEXCOORD0, + GX_TEXCOORD1, + GX_TEXCOORD2, + GX_TEXCOORD3, + GX_TEXCOORD4, + GX_TEXCOORD5, + GX_TEXCOORD6, + GX_TEXCOORD7, + GX_MAX_TEXCOORD, + GX_TEXCOORD_NULL = 0xFF, +} GXTexCoordID; + +typedef enum _GXTevStageID { + GX_TEVSTAGE0, + GX_TEVSTAGE1, + GX_TEVSTAGE2, + GX_TEVSTAGE3, + GX_TEVSTAGE4, + GX_TEVSTAGE5, + GX_TEVSTAGE6, + GX_TEVSTAGE7, + GX_TEVSTAGE8, + GX_TEVSTAGE9, + GX_TEVSTAGE10, + GX_TEVSTAGE11, + GX_TEVSTAGE12, + GX_TEVSTAGE13, + GX_TEVSTAGE14, + GX_TEVSTAGE15, + GX_MAX_TEVSTAGE, +} GXTevStageID; + +typedef enum _GXTevMode { + GX_MODULATE, + GX_DECAL, + GX_BLEND, + GX_REPLACE, + GX_PASSCLR, +} GXTevMode; + +typedef enum _GXTexMtxType { + GX_MTX3x4, + GX_MTX2x4, +} GXTexMtxType; + +typedef enum _GXTexGenType { + GX_TG_MTX3x4, + GX_TG_MTX2x4, + GX_TG_BUMP0, + GX_TG_BUMP1, + GX_TG_BUMP2, + GX_TG_BUMP3, + GX_TG_BUMP4, + GX_TG_BUMP5, + GX_TG_BUMP6, + GX_TG_BUMP7, + GX_TG_SRTG, +} GXTexGenType; + +typedef enum _GXPosNrmMtx { + GX_PNMTX0 = 0, + GX_PNMTX1 = 3, + GX_PNMTX2 = 6, + GX_PNMTX3 = 9, + GX_PNMTX4 = 12, + GX_PNMTX5 = 15, + GX_PNMTX6 = 18, + GX_PNMTX7 = 21, + GX_PNMTX8 = 24, + GX_PNMTX9 = 27, +} GXPosNrmMtx; + +typedef enum _GXTexMtx { + GX_TEXMTX0 = 30, + GX_TEXMTX1 = 33, + GX_TEXMTX2 = 36, + GX_TEXMTX3 = 39, + GX_TEXMTX4 = 42, + GX_TEXMTX5 = 45, + GX_TEXMTX6 = 48, + GX_TEXMTX7 = 51, + GX_TEXMTX8 = 54, + GX_TEXMTX9 = 57, + GX_IDENTITY = 60, +} GXTexMtx; + +typedef enum _GXChannelID { + GX_COLOR0, + GX_COLOR1, + GX_ALPHA0, + GX_ALPHA1, + GX_COLOR0A0, + GX_COLOR1A1, + GX_COLOR_ZERO, + GX_ALPHA_BUMP, + GX_ALPHA_BUMPN, + GX_COLOR_NULL = 0xFF, +} GXChannelID; + +typedef enum _GXTexGenSrc { + GX_TG_POS, + GX_TG_NRM, + GX_TG_BINRM, + GX_TG_TANGENT, + GX_TG_TEX0, + GX_TG_TEX1, + GX_TG_TEX2, + GX_TG_TEX3, + GX_TG_TEX4, + GX_TG_TEX5, + GX_TG_TEX6, + GX_TG_TEX7, + GX_TG_TEXCOORD0, + GX_TG_TEXCOORD1, + GX_TG_TEXCOORD2, + GX_TG_TEXCOORD3, + GX_TG_TEXCOORD4, + GX_TG_TEXCOORD5, + GX_TG_TEXCOORD6, + GX_TG_COLOR0, + GX_TG_COLOR1, + GX_MAX_TEXGENSRC, +} GXTexGenSrc; + +typedef enum _GXBlendMode { + GX_BM_NONE, + GX_BM_BLEND, + GX_BM_LOGIC, + GX_BM_SUBTRACT, + GX_MAX_BLENDMODE, +} GXBlendMode; + +typedef enum _GXBlendFactor { + GX_BL_ZERO, + GX_BL_ONE, + GX_BL_SRCCLR, + GX_BL_INVSRCCLR, + GX_BL_SRCALPHA, + GX_BL_INVSRCALPHA, + GX_BL_DSTALPHA, + GX_BL_INVDSTALPHA, + GX_BL_DSTCLR = GX_BL_SRCCLR, + GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, +} GXBlendFactor; + +typedef enum _GXLogicOp { + GX_LO_CLEAR, + GX_LO_AND, + GX_LO_REVAND, + GX_LO_COPY, + GX_LO_INVAND, + GX_LO_NOOP, + GX_LO_XOR, + GX_LO_OR, + GX_LO_NOR, + GX_LO_EQUIV, + GX_LO_INV, + GX_LO_REVOR, + GX_LO_INVCOPY, + GX_LO_INVOR, + GX_LO_NAND, + GX_LO_SET, +} GXLogicOp; + +typedef enum _GXCompCnt { + GX_POS_XY = 0, + GX_POS_XYZ = 1, + GX_NRM_XYZ = 0, + GX_NRM_NBT = 1, + GX_NRM_NBT3 = 2, + GX_CLR_RGB = 0, + GX_CLR_RGBA = 1, + GX_TEX_S = 0, + GX_TEX_ST = 1, +} GXCompCnt; + +typedef enum _GXCompType { + GX_U8 = 0, + GX_S8 = 1, + GX_U16 = 2, + GX_S16 = 3, + GX_F32 = 4, + GX_RGB565 = 0, + GX_RGB8 = 1, + GX_RGBX8 = 2, + GX_RGBA4 = 3, + GX_RGBA6 = 4, + GX_RGBA8 = 5, +} GXCompType; + +typedef enum _GXPTTexMtx { + GX_PTTEXMTX0 = 64, + GX_PTTEXMTX1 = 67, + GX_PTTEXMTX2 = 70, + GX_PTTEXMTX3 = 73, + GX_PTTEXMTX4 = 76, + GX_PTTEXMTX5 = 79, + GX_PTTEXMTX6 = 82, + GX_PTTEXMTX7 = 85, + GX_PTTEXMTX8 = 88, + GX_PTTEXMTX9 = 91, + GX_PTTEXMTX10 = 94, + GX_PTTEXMTX11 = 97, + GX_PTTEXMTX12 = 100, + GX_PTTEXMTX13 = 103, + GX_PTTEXMTX14 = 106, + GX_PTTEXMTX15 = 109, + GX_PTTEXMTX16 = 112, + GX_PTTEXMTX17 = 115, + GX_PTTEXMTX18 = 118, + GX_PTTEXMTX19 = 121, + GX_PTIDENTITY = 125, +} GXPTTexMtx; + +typedef enum _GXTevRegID { + GX_TEVPREV, + GX_TEVREG0, + GX_TEVREG1, + GX_TEVREG2, + GX_MAX_TEVREG, +} GXTevRegID; + +typedef enum _GXDiffuseFn { + GX_DF_NONE, + GX_DF_SIGN, + GX_DF_CLAMP, +} GXDiffuseFn; + +typedef enum _GXColorSrc { + GX_SRC_REG, + GX_SRC_VTX, +} GXColorSrc; + +typedef enum _GXAttnFn { + GX_AF_SPEC, + GX_AF_SPOT, + GX_AF_NONE, +} GXAttnFn; + +typedef enum _GXLightID { + GX_LIGHT0 = 0x001, + GX_LIGHT1 = 0x002, + GX_LIGHT2 = 0x004, + GX_LIGHT3 = 0x008, + GX_LIGHT4 = 0x010, + GX_LIGHT5 = 0x020, + GX_LIGHT6 = 0x040, + GX_LIGHT7 = 0x080, + GX_MAX_LIGHT = 0x100, + GX_LIGHT_NULL = 0, +} GXLightID; + +typedef enum _GXTexOffset { + GX_TO_ZERO, + GX_TO_SIXTEENTH, + GX_TO_EIGHTH, + GX_TO_FOURTH, + GX_TO_HALF, + GX_TO_ONE, + GX_MAX_TEXOFFSET, +} GXTexOffset; + +typedef enum _GXSpotFn { + GX_SP_OFF, + GX_SP_FLAT, + GX_SP_COS, + GX_SP_COS2, + GX_SP_SHARP, + GX_SP_RING1, + GX_SP_RING2, +} GXSpotFn; + +typedef enum _GXDistAttnFn { + GX_DA_OFF, + GX_DA_GENTLE, + GX_DA_MEDIUM, + GX_DA_STEEP, +} GXDistAttnFn; + +typedef enum _GXCullMode { + GX_CULL_NONE, + GX_CULL_FRONT, + GX_CULL_BACK, + GX_CULL_ALL, +} GXCullMode; + +typedef enum _GXTevSwapSel { + GX_TEV_SWAP0 = 0, + GX_TEV_SWAP1, + GX_TEV_SWAP2, + GX_TEV_SWAP3, + GX_MAX_TEVSWAP, +} GXTevSwapSel; + +typedef enum _GXTevColorChan { + GX_CH_RED = 0, + GX_CH_GREEN, + GX_CH_BLUE, + GX_CH_ALPHA, +} GXTevColorChan; + +typedef enum _GXFogType { + GX_FOG_NONE = 0, + GX_FOG_PERSP_LIN = 2, + GX_FOG_PERSP_EXP = 4, + GX_FOG_PERSP_EXP2 = 5, + GX_FOG_PERSP_REVEXP = 6, + GX_FOG_PERSP_REVEXP2 = 7, + GX_FOG_ORTHO_LIN = 10, + GX_FOG_ORTHO_EXP = 12, + GX_FOG_ORTHO_EXP2 = 13, + GX_FOG_ORTHO_REVEXP = 14, + GX_FOG_ORTHO_REVEXP2 = 15, + GX_FOG_LIN = GX_FOG_PERSP_LIN, + GX_FOG_EXP = GX_FOG_PERSP_EXP, + GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, + GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, + GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, +} GXFogType; + +typedef enum _GXTevColorArg { + GX_CC_CPREV, + GX_CC_APREV, + GX_CC_C0, + GX_CC_A0, + GX_CC_C1, + GX_CC_A1, + GX_CC_C2, + GX_CC_A2, + GX_CC_TEXC, + GX_CC_TEXA, + GX_CC_RASC, + GX_CC_RASA, + GX_CC_ONE, + GX_CC_HALF, + GX_CC_KONST, + GX_CC_ZERO, +} GXTevColorArg; + +typedef enum _GXTevAlphaArg { + GX_CA_APREV, + GX_CA_A0, + GX_CA_A1, + GX_CA_A2, + GX_CA_TEXA, + GX_CA_RASA, + GX_CA_KONST, + GX_CA_ZERO, +} GXTevAlphaArg; + +typedef enum _GXTevOp { + GX_TEV_ADD = 0, + GX_TEV_SUB = 1, + GX_TEV_COMP_R8_GT = 8, + GX_TEV_COMP_R8_EQ = 9, + GX_TEV_COMP_GR16_GT = 10, + GX_TEV_COMP_GR16_EQ = 11, + GX_TEV_COMP_BGR24_GT = 12, + GX_TEV_COMP_BGR24_EQ = 13, + GX_TEV_COMP_RGB8_GT = 14, + GX_TEV_COMP_RGB8_EQ = 15, + GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, + GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, +} GXTevOp; + +typedef enum _GXTevBias { + GX_TB_ZERO, + GX_TB_ADDHALF, + GX_TB_SUBHALF, + GX_MAX_TEVBIAS, +} GXTevBias; + +typedef enum _GXTevScale { + GX_CS_SCALE_1, + GX_CS_SCALE_2, + GX_CS_SCALE_4, + GX_CS_DIVIDE_2, + GX_MAX_TEVSCALE, +} GXTevScale; + +typedef enum _GXTevKColorSel { + GX_TEV_KCSEL_8_8 = 0x00, + GX_TEV_KCSEL_7_8 = 0x01, + GX_TEV_KCSEL_6_8 = 0x02, + GX_TEV_KCSEL_5_8 = 0x03, + GX_TEV_KCSEL_4_8 = 0x04, + GX_TEV_KCSEL_3_8 = 0x05, + GX_TEV_KCSEL_2_8 = 0x06, + GX_TEV_KCSEL_1_8 = 0x07, + GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, + GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, + GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, + GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, + GX_TEV_KCSEL_K0 = 0x0C, + GX_TEV_KCSEL_K1 = 0x0D, + GX_TEV_KCSEL_K2 = 0x0E, + GX_TEV_KCSEL_K3 = 0x0F, + GX_TEV_KCSEL_K0_R = 0x10, + GX_TEV_KCSEL_K1_R = 0x11, + GX_TEV_KCSEL_K2_R = 0x12, + GX_TEV_KCSEL_K3_R = 0x13, + GX_TEV_KCSEL_K0_G = 0x14, + GX_TEV_KCSEL_K1_G = 0x15, + GX_TEV_KCSEL_K2_G = 0x16, + GX_TEV_KCSEL_K3_G = 0x17, + GX_TEV_KCSEL_K0_B = 0x18, + GX_TEV_KCSEL_K1_B = 0x19, + GX_TEV_KCSEL_K2_B = 0x1A, + GX_TEV_KCSEL_K3_B = 0x1B, + GX_TEV_KCSEL_K0_A = 0x1C, + GX_TEV_KCSEL_K1_A = 0x1D, + GX_TEV_KCSEL_K2_A = 0x1E, + GX_TEV_KCSEL_K3_A = 0x1F, +} GXTevKColorSel; + +typedef enum _GXTevKAlphaSel { + GX_TEV_KASEL_8_8 = 0x00, + GX_TEV_KASEL_7_8 = 0x01, + GX_TEV_KASEL_6_8 = 0x02, + GX_TEV_KASEL_5_8 = 0x03, + GX_TEV_KASEL_4_8 = 0x04, + GX_TEV_KASEL_3_8 = 0x05, + GX_TEV_KASEL_2_8 = 0x06, + GX_TEV_KASEL_1_8 = 0x07, + GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, + GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, + GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, + GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, + GX_TEV_KASEL_K0_R = 0x10, + GX_TEV_KASEL_K1_R = 0x11, + GX_TEV_KASEL_K2_R = 0x12, + GX_TEV_KASEL_K3_R = 0x13, + GX_TEV_KASEL_K0_G = 0x14, + GX_TEV_KASEL_K1_G = 0x15, + GX_TEV_KASEL_K2_G = 0x16, + GX_TEV_KASEL_K3_G = 0x17, + GX_TEV_KASEL_K0_B = 0x18, + GX_TEV_KASEL_K1_B = 0x19, + GX_TEV_KASEL_K2_B = 0x1A, + GX_TEV_KASEL_K3_B = 0x1B, + GX_TEV_KASEL_K0_A = 0x1C, + GX_TEV_KASEL_K1_A = 0x1D, + GX_TEV_KASEL_K2_A = 0x1E, + GX_TEV_KASEL_K3_A = 0x1F, +} GXTevKAlphaSel; + +typedef enum _GXTevKColorID { + GX_KCOLOR0 = 0, + GX_KCOLOR1, + GX_KCOLOR2, + GX_KCOLOR3, + GX_MAX_KCOLOR, +} GXTevKColorID; + +typedef enum _GXZTexOp { + GX_ZT_DISABLE, + GX_ZT_ADD, + GX_ZT_REPLACE, + GX_MAX_ZTEXOP, +} GXZTexOp; + +typedef enum _GXIndTexFormat { + GX_ITF_8, + GX_ITF_5, + GX_ITF_4, + GX_ITF_3, + GX_MAX_ITFORMAT, +} GXIndTexFormat; + +typedef enum _GXIndTexBiasSel { + GX_ITB_NONE, + GX_ITB_S, + GX_ITB_T, + GX_ITB_ST, + GX_ITB_U, + GX_ITB_SU, + GX_ITB_TU, + GX_ITB_STU, + GX_MAX_ITBIAS, +} GXIndTexBiasSel; + +typedef enum _GXIndTexAlphaSel { + GX_ITBA_OFF, + GX_ITBA_S, + GX_ITBA_T, + GX_ITBA_U, + GX_MAX_ITBALPHA, +} GXIndTexAlphaSel; + +typedef enum _GXIndTexMtxID { + GX_ITM_OFF, + GX_ITM_0, + GX_ITM_1, + GX_ITM_2, + GX_ITM_S0 = 5, + GX_ITM_S1, + GX_ITM_S2, + GX_ITM_T0 = 9, + GX_ITM_T1, + GX_ITM_T2, +} GXIndTexMtxID; + +typedef enum _GXIndTexWrap { + GX_ITW_OFF, + GX_ITW_256, + GX_ITW_128, + GX_ITW_64, + GX_ITW_32, + GX_ITW_16, + GX_ITW_0, + GX_MAX_ITWRAP, +} GXIndTexWrap; + +typedef enum _GXIndTexStageID { + GX_INDTEXSTAGE0, + GX_INDTEXSTAGE1, + GX_INDTEXSTAGE2, + GX_INDTEXSTAGE3, + GX_MAX_INDTEXSTAGE, +} GXIndTexStageID; + +typedef enum _GXIndTexScale { + GX_ITS_1, + GX_ITS_2, + GX_ITS_4, + GX_ITS_8, + GX_ITS_16, + GX_ITS_32, + GX_ITS_64, + GX_ITS_128, + GX_ITS_256, + GX_MAX_ITSCALE, +} GXIndTexScale; + +typedef enum _GXClipMode { + GX_CLIP_ENABLE = 0, + GX_CLIP_DISABLE = 1, +} GXClipMode; + +typedef enum _GXTlut { + GX_TLUT0 = 0, + GX_TLUT1 = 1, + GX_TLUT2 = 2, + GX_TLUT3 = 3, + GX_TLUT4 = 4, + GX_TLUT5 = 5, + GX_TLUT6 = 6, + GX_TLUT7 = 7, + GX_TLUT8 = 8, + GX_TLUT9 = 9, + GX_TLUT10 = 10, + GX_TLUT11 = 11, + GX_TLUT12 = 12, + GX_TLUT13 = 13, + GX_TLUT14 = 14, + GX_TLUT15 = 15, + GX_BIGTLUT0 = 16, + GX_BIGTLUT1 = 17, + GX_BIGTLUT2 = 18, + GX_BIGTLUT3 = 19, +} GXTlut; + +typedef enum _GXTlutFmt { + GX_TL_IA8, + GX_TL_RGB565, + GX_TL_RGB5A3, + GX_MAX_TLUTFMT, +} GXTlutFmt; + +typedef enum _GXMiscToken { + GX_MT_NULL = 0, + GX_MT_XF_FLUSH = 1, + GX_MT_DL_SAVE_CONTEXT = 2, + GX_MT_ABORT_WAIT_COPYOUT = 3, +} GXMiscToken; + +typedef enum _GXTexCacheSize { + GX_TEXCACHE_32K, + GX_TEXCACHE_128K, + GX_TEXCACHE_512K, + GX_TEXCACHE_NONE +} GXTexCacheSize; + +typedef enum _GXPerf0 { + GX_PERF0_VERTICES, + GX_PERF0_CLIP_VTX, + GX_PERF0_CLIP_CLKS, + GX_PERF0_XF_WAIT_IN, + GX_PERF0_XF_WAIT_OUT, + GX_PERF0_XF_XFRM_CLKS, + GX_PERF0_XF_LIT_CLKS, + GX_PERF0_XF_BOT_CLKS, + GX_PERF0_XF_REGLD_CLKS, + GX_PERF0_XF_REGRD_CLKS, + GX_PERF0_CLIP_RATIO, + + GX_PERF0_TRIANGLES, + GX_PERF0_TRIANGLES_CULLED, + GX_PERF0_TRIANGLES_PASSED, + GX_PERF0_TRIANGLES_SCISSORED, + GX_PERF0_TRIANGLES_0TEX, + GX_PERF0_TRIANGLES_1TEX, + GX_PERF0_TRIANGLES_2TEX, + GX_PERF0_TRIANGLES_3TEX, + GX_PERF0_TRIANGLES_4TEX, + GX_PERF0_TRIANGLES_5TEX, + GX_PERF0_TRIANGLES_6TEX, + GX_PERF0_TRIANGLES_7TEX, + GX_PERF0_TRIANGLES_8TEX, + GX_PERF0_TRIANGLES_0CLR, + GX_PERF0_TRIANGLES_1CLR, + GX_PERF0_TRIANGLES_2CLR, + + GX_PERF0_QUAD_0CVG, + GX_PERF0_QUAD_NON0CVG, + GX_PERF0_QUAD_1CVG, + GX_PERF0_QUAD_2CVG, + GX_PERF0_QUAD_3CVG, + GX_PERF0_QUAD_4CVG, + GX_PERF0_AVG_QUAD_CNT, + + GX_PERF0_CLOCKS, + GX_PERF0_NONE + +} GXPerf0; + +typedef enum _GXPerf1 { + GX_PERF1_TEXELS, + GX_PERF1_TX_IDLE, + GX_PERF1_TX_REGS, + GX_PERF1_TX_MEMSTALL, + GX_PERF1_TC_CHECK1_2, + GX_PERF1_TC_CHECK3_4, + GX_PERF1_TC_CHECK5_6, + GX_PERF1_TC_CHECK7_8, + GX_PERF1_TC_MISS, + + GX_PERF1_VC_ELEMQ_FULL, + GX_PERF1_VC_MISSQ_FULL, + GX_PERF1_VC_MEMREQ_FULL, + GX_PERF1_VC_STATUS7, + GX_PERF1_VC_MISSREP_FULL, + GX_PERF1_VC_STREAMBUF_LOW, + GX_PERF1_VC_ALL_STALLS, + GX_PERF1_VERTICES, + + GX_PERF1_FIFO_REQ, + GX_PERF1_CALL_REQ, + GX_PERF1_VC_MISS_REQ, + GX_PERF1_CP_ALL_REQ, + + GX_PERF1_CLOCKS, + GX_PERF1_NONE + +} GXPerf1; + +typedef enum _GXVCachePerf { + GX_VC_POS, + GX_VC_NRM, + GX_VC_CLR0, + GX_VC_CLR1, + GX_VC_TEX0, + GX_VC_TEX1, + GX_VC_TEX2, + GX_VC_TEX3, + GX_VC_TEX4, + GX_VC_TEX5, + GX_VC_TEX6, + GX_VC_TEX7, + GX_VC_ALL = 0xf + +} GXVCachePerf; + +typedef enum _GXFBClamp { + GX_CLAMP_NONE = 0, + GX_CLAMP_TOP = 1, + GX_CLAMP_BOTTOM = 2, +} GXFBClamp; + +typedef enum _GXCopyMode { + GX_COPY_PROGRESSIVE = 0, + GX_COPY_INTLC_EVEN = 2, + GX_COPY_INTLC_ODD = 3, +} GXCopyMode; + +typedef enum _GXAlphaReadMode { + GX_READ_00 = 0, + GX_READ_FF = 1, + GX_READ_NONE = 2, + +} _GXAlphaReadMode; + +typedef enum _GXLogicOp { + GX_LO_CLEAR, + GX_LO_AND, + GX_LO_REVAND, + GX_LO_COPY, + GX_LO_INVAND, + GX_LO_NOOP, + GX_LO_XOR, + GX_LO_OR, + GX_LO_NOR, + GX_LO_EQUIV, + GX_LO_INV, + GX_LO_REVOR, + GX_LO_INVCOPY, + GX_LO_INVOR, + GX_LO_NAND, + GX_LO_SET, +} GXLogicOp; + +typedef enum _GXCompCnt { + GX_POS_XY = 0, + GX_POS_XYZ = 1, + GX_NRM_XYZ = 0, + GX_NRM_NBT = 1, + GX_NRM_NBT3 = 2, + GX_CLR_RGB = 0, + GX_CLR_RGBA = 1, + GX_TEX_S = 0, + GX_TEX_ST = 1, +} GXCompCnt; + +typedef enum _GXCompType { + GX_U8 = 0, + GX_S8 = 1, + GX_U16 = 2, + GX_S16 = 3, + GX_F32 = 4, + GX_RGB565 = 0, + GX_RGB8 = 1, + GX_RGBX8 = 2, + GX_RGBA4 = 3, + GX_RGBA6 = 4, + GX_RGBA8 = 5, +} GXCompType; + +typedef enum _GXPTTexMtx { + GX_PTTEXMTX0 = 64, + GX_PTTEXMTX1 = 67, + GX_PTTEXMTX2 = 70, + GX_PTTEXMTX3 = 73, + GX_PTTEXMTX4 = 76, + GX_PTTEXMTX5 = 79, + GX_PTTEXMTX6 = 82, + GX_PTTEXMTX7 = 85, + GX_PTTEXMTX8 = 88, + GX_PTTEXMTX9 = 91, + GX_PTTEXMTX10 = 94, + GX_PTTEXMTX11 = 97, + GX_PTTEXMTX12 = 100, + GX_PTTEXMTX13 = 103, + GX_PTTEXMTX14 = 106, + GX_PTTEXMTX15 = 109, + GX_PTTEXMTX16 = 112, + GX_PTTEXMTX17 = 115, + GX_PTTEXMTX18 = 118, + GX_PTTEXMTX19 = 121, + GX_PTIDENTITY = 125, +} GXPTTexMtx; + +typedef struct _GXColor { + u8 r; + u8 g; + u8 b; + u8 a; +} GXColor; + +typedef struct _GXTexObj { + u32 dummy[8]; +} GXTexObj; + +typedef struct _GXTlutObj { + u32 dummy[3]; +} GXTlutObj; + +typedef struct _GXLightObj { + u32 dummy[16]; +} GXLightObj; + +typedef struct _GXVtxDescList { + GXAttr attr; + GXAttrType type; +} GXVtxDescList; + +typedef struct _GXColorS10 { + s16 r; + s16 g; + s16 b; + s16 a; +} GXColorS10; + +typedef struct _GXTexRegion { + u32 dummy[4]; +} GXTexRegion; + +typedef struct _GXTlutRegion { + u32 dummy[4]; +} GXTlutRegion; + +typedef struct _GXVtxAttrFmtList { + // total size: 0x10 + GXAttr attr; // offset 0x0, size 0x4 + GXCompCnt cnt; // offset 0x4, size 0x4 + GXCompType type; // offset 0x8, size 0x4 + u8 frac; // offset 0xC, size 0x1 +} GXVtxAttrFmtList; + +typedef enum _GXTevRegID { + GX_TEVPREV, + GX_TEVREG0, + GX_TEVREG1, + GX_TEVREG2, + GX_MAX_TEVREG, +} GXTevRegID; + +typedef enum _GXDiffuseFn { + GX_DF_NONE, + GX_DF_SIGN, + GX_DF_CLAMP, +} GXDiffuseFn; + +typedef enum _GXColorSrc { + GX_SRC_REG, + GX_SRC_VTX, +} GXColorSrc; + +typedef enum _GXAttnFn { + GX_AF_SPEC, + GX_AF_SPOT, + GX_AF_NONE, +} GXAttnFn; + +typedef enum _GXLightID { + GX_LIGHT0 = 0x001, + GX_LIGHT1 = 0x002, + GX_LIGHT2 = 0x004, + GX_LIGHT3 = 0x008, + GX_LIGHT4 = 0x010, + GX_LIGHT5 = 0x020, + GX_LIGHT6 = 0x040, + GX_LIGHT7 = 0x080, + GX_MAX_LIGHT = 0x100, + GX_LIGHT_NULL = 0, +} GXLightID; + +typedef enum _GXTexOffset { + GX_TO_ZERO, + GX_TO_SIXTEENTH, + GX_TO_EIGHTH, + GX_TO_FOURTH, + GX_TO_HALF, + GX_TO_ONE, + GX_MAX_TEXOFFSET, +} GXTexOffset; + +typedef enum _GXSpotFn { + GX_SP_OFF, + GX_SP_FLAT, + GX_SP_COS, + GX_SP_COS2, + GX_SP_SHARP, + GX_SP_RING1, + GX_SP_RING2, +} GXSpotFn; + +typedef enum _GXDistAttnFn { + GX_DA_OFF, + GX_DA_GENTLE, + GX_DA_MEDIUM, + GX_DA_STEEP, +} GXDistAttnFn; + +typedef enum _GXCullMode { + GX_CULL_NONE, + GX_CULL_FRONT, + GX_CULL_BACK, + GX_CULL_ALL, +} GXCullMode; + +typedef enum _GXTevSwapSel { + GX_TEV_SWAP0 = 0, + GX_TEV_SWAP1, + GX_TEV_SWAP2, + GX_TEV_SWAP3, + GX_MAX_TEVSWAP, +} GXTevSwapSel; + +typedef enum _GXTevColorChan { + GX_CH_RED = 0, + GX_CH_GREEN, + GX_CH_BLUE, + GX_CH_ALPHA, +} GXTevColorChan; + +typedef enum _GXFogType { + GX_FOG_NONE = 0, + GX_FOG_PERSP_LIN = 2, + GX_FOG_PERSP_EXP = 4, + GX_FOG_PERSP_EXP2 = 5, + GX_FOG_PERSP_REVEXP = 6, + GX_FOG_PERSP_REVEXP2 = 7, + GX_FOG_ORTHO_LIN = 10, + GX_FOG_ORTHO_EXP = 12, + GX_FOG_ORTHO_EXP2 = 13, + GX_FOG_ORTHO_REVEXP = 14, + GX_FOG_ORTHO_REVEXP2 = 15, + GX_FOG_LIN = GX_FOG_PERSP_LIN, + GX_FOG_EXP = GX_FOG_PERSP_EXP, + GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, + GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, + GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, +} GXFogType; + +typedef enum _GXTevColorArg { + GX_CC_CPREV, + GX_CC_APREV, + GX_CC_C0, + GX_CC_A0, + GX_CC_C1, + GX_CC_A1, + GX_CC_C2, + GX_CC_A2, + GX_CC_TEXC, + GX_CC_TEXA, + GX_CC_RASC, + GX_CC_RASA, + GX_CC_ONE, + GX_CC_HALF, + GX_CC_KONST, + GX_CC_ZERO, +} GXTevColorArg; + +typedef enum _GXTevAlphaArg { + GX_CA_APREV, + GX_CA_A0, + GX_CA_A1, + GX_CA_A2, + GX_CA_TEXA, + GX_CA_RASA, + GX_CA_KONST, + GX_CA_ZERO, +} GXTevAlphaArg; + +typedef enum _GXTevOp { + GX_TEV_ADD = 0, + GX_TEV_SUB = 1, + GX_TEV_COMP_R8_GT = 8, + GX_TEV_COMP_R8_EQ = 9, + GX_TEV_COMP_GR16_GT = 10, + GX_TEV_COMP_GR16_EQ = 11, + GX_TEV_COMP_BGR24_GT = 12, + GX_TEV_COMP_BGR24_EQ = 13, + GX_TEV_COMP_RGB8_GT = 14, + GX_TEV_COMP_RGB8_EQ = 15, + GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, + GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, +} GXTevOp; + +typedef enum _GXTevBias { + GX_TB_ZERO, + GX_TB_ADDHALF, + GX_TB_SUBHALF, + GX_MAX_TEVBIAS, +} GXTevBias; + +typedef enum _GXTevScale { + GX_CS_SCALE_1, + GX_CS_SCALE_2, + GX_CS_SCALE_4, + GX_CS_DIVIDE_2, + GX_MAX_TEVSCALE, +} GXTevScale; + +typedef enum _GXTevKColorSel { + GX_TEV_KCSEL_8_8 = 0x00, + GX_TEV_KCSEL_7_8 = 0x01, + GX_TEV_KCSEL_6_8 = 0x02, + GX_TEV_KCSEL_5_8 = 0x03, + GX_TEV_KCSEL_4_8 = 0x04, + GX_TEV_KCSEL_3_8 = 0x05, + GX_TEV_KCSEL_2_8 = 0x06, + GX_TEV_KCSEL_1_8 = 0x07, + GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, + GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, + GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, + GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, + GX_TEV_KCSEL_K0 = 0x0C, + GX_TEV_KCSEL_K1 = 0x0D, + GX_TEV_KCSEL_K2 = 0x0E, + GX_TEV_KCSEL_K3 = 0x0F, + GX_TEV_KCSEL_K0_R = 0x10, + GX_TEV_KCSEL_K1_R = 0x11, + GX_TEV_KCSEL_K2_R = 0x12, + GX_TEV_KCSEL_K3_R = 0x13, + GX_TEV_KCSEL_K0_G = 0x14, + GX_TEV_KCSEL_K1_G = 0x15, + GX_TEV_KCSEL_K2_G = 0x16, + GX_TEV_KCSEL_K3_G = 0x17, + GX_TEV_KCSEL_K0_B = 0x18, + GX_TEV_KCSEL_K1_B = 0x19, + GX_TEV_KCSEL_K2_B = 0x1A, + GX_TEV_KCSEL_K3_B = 0x1B, + GX_TEV_KCSEL_K0_A = 0x1C, + GX_TEV_KCSEL_K1_A = 0x1D, + GX_TEV_KCSEL_K2_A = 0x1E, + GX_TEV_KCSEL_K3_A = 0x1F, +} GXTevKColorSel; + +typedef enum _GXTevKAlphaSel { + GX_TEV_KASEL_8_8 = 0x00, + GX_TEV_KASEL_7_8 = 0x01, + GX_TEV_KASEL_6_8 = 0x02, + GX_TEV_KASEL_5_8 = 0x03, + GX_TEV_KASEL_4_8 = 0x04, + GX_TEV_KASEL_3_8 = 0x05, + GX_TEV_KASEL_2_8 = 0x06, + GX_TEV_KASEL_1_8 = 0x07, + GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, + GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, + GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, + GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, + GX_TEV_KASEL_K0_R = 0x10, + GX_TEV_KASEL_K1_R = 0x11, + GX_TEV_KASEL_K2_R = 0x12, + GX_TEV_KASEL_K3_R = 0x13, + GX_TEV_KASEL_K0_G = 0x14, + GX_TEV_KASEL_K1_G = 0x15, + GX_TEV_KASEL_K2_G = 0x16, + GX_TEV_KASEL_K3_G = 0x17, + GX_TEV_KASEL_K0_B = 0x18, + GX_TEV_KASEL_K1_B = 0x19, + GX_TEV_KASEL_K2_B = 0x1A, + GX_TEV_KASEL_K3_B = 0x1B, + GX_TEV_KASEL_K0_A = 0x1C, + GX_TEV_KASEL_K1_A = 0x1D, + GX_TEV_KASEL_K2_A = 0x1E, + GX_TEV_KASEL_K3_A = 0x1F, +} GXTevKAlphaSel; + +typedef enum _GXTevKColorID { + GX_KCOLOR0 = 0, + GX_KCOLOR1, + GX_KCOLOR2, + GX_KCOLOR3, + GX_MAX_KCOLOR, +} GXTevKColorID; + +typedef enum _GXZTexOp { + GX_ZT_DISABLE, + GX_ZT_ADD, + GX_ZT_REPLACE, + GX_MAX_ZTEXOP, +} GXZTexOp; + +typedef enum _GXIndTexFormat { + GX_ITF_8, + GX_ITF_5, + GX_ITF_4, + GX_ITF_3, + GX_MAX_ITFORMAT, +} GXIndTexFormat; + +typedef enum _GXIndTexBiasSel { + GX_ITB_NONE, + GX_ITB_S, + GX_ITB_T, + GX_ITB_ST, + GX_ITB_U, + GX_ITB_SU, + GX_ITB_TU, + GX_ITB_STU, + GX_MAX_ITBIAS, +} GXIndTexBiasSel; + +typedef enum _GXIndTexAlphaSel { + GX_ITBA_OFF, + GX_ITBA_S, + GX_ITBA_T, + GX_ITBA_U, + GX_MAX_ITBALPHA, +} GXIndTexAlphaSel; + +typedef enum _GXIndTexMtxID { + GX_ITM_OFF, + GX_ITM_0, + GX_ITM_1, + GX_ITM_2, + GX_ITM_S0 = 5, + GX_ITM_S1, + GX_ITM_S2, + GX_ITM_T0 = 9, + GX_ITM_T1, + GX_ITM_T2, +} GXIndTexMtxID; + +typedef enum _GXIndTexWrap { + GX_ITW_OFF, + GX_ITW_256, + GX_ITW_128, + GX_ITW_64, + GX_ITW_32, + GX_ITW_16, + GX_ITW_0, + GX_MAX_ITWRAP, +} GXIndTexWrap; + +typedef enum _GXIndTexStageID { + GX_INDTEXSTAGE0, + GX_INDTEXSTAGE1, + GX_INDTEXSTAGE2, + GX_INDTEXSTAGE3, + GX_MAX_INDTEXSTAGE, +} GXIndTexStageID; + +typedef enum _GXIndTexScale { + GX_ITS_1, + GX_ITS_2, + GX_ITS_4, + GX_ITS_8, + GX_ITS_16, + GX_ITS_32, + GX_ITS_64, + GX_ITS_128, + GX_ITS_256, + GX_MAX_ITSCALE, +} GXIndTexScale; + +typedef enum _GXClipMode { + GX_CLIP_ENABLE = 0, + GX_CLIP_DISABLE = 1, +} GXClipMode; + +typedef enum _GXTlut { + GX_TLUT0 = 0, + GX_TLUT1 = 1, + GX_TLUT2 = 2, + GX_TLUT3 = 3, + GX_TLUT4 = 4, + GX_TLUT5 = 5, + GX_TLUT6 = 6, + GX_TLUT7 = 7, + GX_TLUT8 = 8, + GX_TLUT9 = 9, + GX_TLUT10 = 10, + GX_TLUT11 = 11, + GX_TLUT12 = 12, + GX_TLUT13 = 13, + GX_TLUT14 = 14, + GX_TLUT15 = 15, + GX_BIGTLUT0 = 16, + GX_BIGTLUT1 = 17, + GX_BIGTLUT2 = 18, + GX_BIGTLUT3 = 19, +} GXTlut; + +typedef enum _GXTlutFmt { + GX_TL_IA8, + GX_TL_RGB565, + GX_TL_RGB5A3, + GX_MAX_TLUTFMT, +} GXTlutFmt; + +typedef enum _GXMiscToken { + GX_MT_NULL = 0, + GX_MT_XF_FLUSH = 1, + GX_MT_DL_SAVE_CONTEXT = 2, + GX_MT_ABORT_WAIT_COPYOUT = 3, +} GXMiscToken; + +typedef enum _GXTexCacheSize { + GX_TEXCACHE_32K, + GX_TEXCACHE_128K, + GX_TEXCACHE_512K, + GX_TEXCACHE_NONE +} GXTexCacheSize; + +typedef enum _GXPerf0 { + GX_PERF0_VERTICES, + GX_PERF0_CLIP_VTX, + GX_PERF0_CLIP_CLKS, + GX_PERF0_XF_WAIT_IN, + GX_PERF0_XF_WAIT_OUT, + GX_PERF0_XF_XFRM_CLKS, + GX_PERF0_XF_LIT_CLKS, + GX_PERF0_XF_BOT_CLKS, + GX_PERF0_XF_REGLD_CLKS, + GX_PERF0_XF_REGRD_CLKS, + GX_PERF0_CLIP_RATIO, + + GX_PERF0_TRIANGLES, + GX_PERF0_TRIANGLES_CULLED, + GX_PERF0_TRIANGLES_PASSED, + GX_PERF0_TRIANGLES_SCISSORED, + GX_PERF0_TRIANGLES_0TEX, + GX_PERF0_TRIANGLES_1TEX, + GX_PERF0_TRIANGLES_2TEX, + GX_PERF0_TRIANGLES_3TEX, + GX_PERF0_TRIANGLES_4TEX, + GX_PERF0_TRIANGLES_5TEX, + GX_PERF0_TRIANGLES_6TEX, + GX_PERF0_TRIANGLES_7TEX, + GX_PERF0_TRIANGLES_8TEX, + GX_PERF0_TRIANGLES_0CLR, + GX_PERF0_TRIANGLES_1CLR, + GX_PERF0_TRIANGLES_2CLR, + + GX_PERF0_QUAD_0CVG, + GX_PERF0_QUAD_NON0CVG, + GX_PERF0_QUAD_1CVG, + GX_PERF0_QUAD_2CVG, + GX_PERF0_QUAD_3CVG, + GX_PERF0_QUAD_4CVG, + GX_PERF0_AVG_QUAD_CNT, + + GX_PERF0_CLOCKS, + GX_PERF0_NONE + +} GXPerf0; + +typedef enum _GXPerf1 { + GX_PERF1_TEXELS, + GX_PERF1_TX_IDLE, + GX_PERF1_TX_REGS, + GX_PERF1_TX_MEMSTALL, + GX_PERF1_TC_CHECK1_2, + GX_PERF1_TC_CHECK3_4, + GX_PERF1_TC_CHECK5_6, + GX_PERF1_TC_CHECK7_8, + GX_PERF1_TC_MISS, + + GX_PERF1_VC_ELEMQ_FULL, + GX_PERF1_VC_MISSQ_FULL, + GX_PERF1_VC_MEMREQ_FULL, + GX_PERF1_VC_STATUS7, + GX_PERF1_VC_MISSREP_FULL, + GX_PERF1_VC_STREAMBUF_LOW, + GX_PERF1_VC_ALL_STALLS, + GX_PERF1_VERTICES, + + GX_PERF1_FIFO_REQ, + GX_PERF1_CALL_REQ, + GX_PERF1_VC_MISS_REQ, + GX_PERF1_CP_ALL_REQ, + + GX_PERF1_CLOCKS, + GX_PERF1_NONE + +} GXPerf1; + +typedef enum _GXVCachePerf { + GX_VC_POS, + GX_VC_NRM, + GX_VC_CLR0, + GX_VC_CLR1, + GX_VC_TEX0, + GX_VC_TEX1, + GX_VC_TEX2, + GX_VC_TEX3, + GX_VC_TEX4, + GX_VC_TEX5, + GX_VC_TEX6, + GX_VC_TEX7, + GX_VC_ALL = 0xf + +} GXVCachePerf; + +typedef enum _GXFBClamp { + GX_CLAMP_NONE = 0, + GX_CLAMP_TOP = 1, + GX_CLAMP_BOTTOM = 2, +} GXFBClamp; + +typedef enum _GXCopyMode { + GX_COPY_PROGRESSIVE = 0, + GX_COPY_INTLC_EVEN = 2, + GX_COPY_INTLC_ODD = 3, +} GXCopyMode; + +typedef enum _GXAlphaReadMode { + GX_READ_00 = 0, + GX_READ_FF = 1, + GX_READ_NONE = 2, + +} _GXAlphaReadMode; + +#define ANIM_BMP_RGBA8 0 +#define ANIM_BMP_RGB5A3 1 +#define ANIM_BMP_RGB5A3_DUPE 2 +#define ANIM_BMP_C8 3 +#define ANIM_BMP_C4 4 +#define ANIM_BMP_IA8 5 +#define ANIM_BMP_IA4 6 +#define ANIM_BMP_I8 7 +#define ANIM_BMP_I4 8 +#define ANIM_BMP_A8 9 +#define ANIM_BMP_CMPR 10 + +#define ANIM_BMP_FMTMASK 0xF +#define ANIM_BMP_ALLOC 0x8000 +#define ANIM_BMP_NUM_MASK 0x7FFF + +#define ANIM_LAYER_FLIPX 0x1 +#define ANIM_LAYER_FLIPY 0x2 + +typedef struct anim_frame_data { + s16 pat; + s16 time; + s16 shiftX; + s16 shiftY; + s16 flip; + s16 pad; +} AnimFrameData; + +typedef struct anim_bank_data { + s16 timeNum; + s16 unk; + AnimFrameData *frame; +} AnimBankData; + +typedef struct anim_layer_data { + u8 alpha; + u8 flip; + s16 bmpNo; + s16 startX; + s16 startY; + s16 sizeX; + s16 sizeY; + s16 shiftX; + s16 shiftY; + s16 vtx[8]; +} AnimLayerData; + +typedef struct anim_pat_data { + s16 layerNum; + s16 centerX; + s16 centerY; + s16 sizeX; + s16 sizeY; + AnimLayerData *layer; +} AnimPatData; + +typedef struct anim_bmp_data { + u8 pixSize; + u8 dataFmt; + s16 palNum; + s16 sizeX; + s16 sizeY; + u32 dataSize; + void *palData; + void *data; +} AnimBmpData; + +typedef struct anim_data { + s16 bankNum; + s16 patNum; + s16 bmpNum; + s16 useNum; + AnimBankData *bank; + AnimPatData *pat; + AnimBmpData *bmp; +} AnimData; + +typedef struct { + f32 x, y, z; +} Vec, *VecPtr, Point3d, *Point3dPtr; + +typedef struct { + s16 x; + s16 y; + s16 z; +} S16Vec, *S16VecPtr; + +typedef struct { + f32 x, y, z, w; +} Quaternion, *QuaternionPtr, Qtrn, *QtrnPtr; + +typedef f32 Mtx[3][4]; + +typedef f32 (*MtxPtr)[4]; + +typedef f32 ROMtx[4][3]; + +typedef f32 (*ROMtxPtr)[3]; + +typedef f32 Mtx44[4][4]; + +typedef f32 (*Mtx44Ptr)[4]; + +#define HUSPR_MAX 384 +#define HUSPR_GRP_MAX 256 + +#define HUSPR_NONE -1 +#define HUSPR_GRP_NONE -1 + +#define HUSPR_ATTR_NOANIM 0x1 +#define HUSPR_ATTR_LOOP 0x2 +#define HUSPR_ATTR_DISPOFF 0x4 +#define HUSPR_ATTR_LINEAR 0x8 +#define HUSPR_ATTR_FUNC 0x10 +#define HUSPR_ATTR_NOPAUSE 0x20 +#define HUSPR_ATTR_REVERSE 0x40 +#define HUSPR_ATTR_ADDCOL 0x80 +#define HUSPR_ATTR_INVCOL 0x100 + +typedef void (*HuSprFunc)(struct hu_sprite *); + +typedef struct hu_sprite { + u8 r; + u8 g; + u8 b; + u8 draw_no; + s16 frame; + s16 bank; + s16 attr; + s16 dirty_flag; + s16 prio; + float time; + float x; + float y; + float z_rot; + float scale_x; + float scale_y; + float speed; + float a; + GXTexWrapMode wrap_s; + GXTexWrapMode wrap_t; + s16 tex_scale_x; + s16 tex_scale_y; + Mtx *group_mtx; + union { + AnimData *data; + HuSprFunc func; + }; + AnimPatData *pat_data; + AnimFrameData *frame_data; + s16 work[4]; + AnimData *bg; + u16 bg_bank; + s16 scissor_x; + s16 scissor_y; + s16 scissor_w; + s16 scissor_h; +} HuSprite; + +typedef struct hu_spr_grp { + s16 capacity; + float x; + float y; + float z_rot; + float scale_x; + float scale_y; + float center_x; + float center_y; + s16 *members; + Mtx mtx; +} HuSprGrp; + +extern HuSprite HuSprData[HUSPR_MAX]; +extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX]; + +#define HuSprAnimReadFile(data_id) \ + (HuSprAnimRead( \ + HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) + +void HuSprInit(void); +void HuSprClose(void); +void HuSprExec(s16 draw_no); +void HuSprBegin(void); +HuSprite *HuSprCall(void); +void HuSprFinish(void); +void HuSprPauseSet(BOOL value); +AnimData *HuSprAnimRead(void *data); +void HuSprAnimLock(AnimData *anim); +s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank); +s16 HuSprFuncCreate(HuSprFunc func, s16 prio); +s16 HuSprGrpCreate(s16 capacity); +s16 HuSprGrpCopy(s16 group); +void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite); +void HuSprGrpMemberKill(s16 group, s16 member); +void HuSprGrpKill(s16 group); +void HuSprKill(s16 sprite); +void HuSprAnimKill(AnimData *anim); +void HuSprAttrSet(s16 group, s16 member, s32 attr); +void HuSprAttrReset(s16 group, s16 member, s32 attr); +void HuSprPosSet(s16 group, s16 member, float x, float y); +void HuSprZRotSet(s16 group, s16 member, float z_rot); +void HuSprScaleSet(s16 group, s16 member, float x, float y); +void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl); +void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b); +void HuSprSpeedSet(s16 group, s16 member, float speed); +void HuSprBankSet(s16 group, s16 member, s16 bank); +void HuSprGrpPosSet(s16 group, float x, float y); +void HuSprGrpCenterSet(s16 group, float x, float y); +void HuSprGrpZRotSet(s16 group, float z_rot); +void HuSprGrpScaleSet(s16 group, float x, float y); +void HuSprGrpTPLvlSet(s16 group, float tp_lvl); +void HuSprGrpDrawNoSet(s16 group, s32 draw_no); +void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); +void HuSprPriSet(s16 group, s16 member, s16 prio); +void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); +void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h); +AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt); +void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank); +void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank); +void AnimDebug(AnimData *anim); + +void HuSprDispInit(void); +void HuSprDisp(HuSprite *sprite); +void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, + GXTexWrapMode wrap_t, GXTexFilter filter); +void HuSprExecLayerSet(s16 draw_no, s16 layer); + +#define MEMORY_DEFAULT_NUM 0x10000000 + +typedef enum { + HEAP_SYSTEM, + HEAP_MUSIC, + HEAP_DATA, + HEAP_DVD, + HEAP_MISC, + HEAP_MAX +} HeapID; + +void HuMemInitAll(void); +void *HuMemInit(void *ptr, s32 size); +void HuMemDCFlushAll(); +void HuMemDCFlush(HeapID heap); +void *HuMemDirectMalloc(HeapID heap, s32 size); +void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num); +void HuMemDirectFree(void *ptr); +void HuMemDirectFreeNum(HeapID heap, u32 num); +s32 HuMemUsedMallocSizeGet(HeapID heap); +s32 HuMemUsedMallocBlockGet(HeapID heap); +u32 HuMemHeapSizeGet(HeapID heap); +void *HuMemHeapPtrGet(HeapID heap); + +void *HuMemHeapInit(void *ptr, s32 size); +void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); +void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); +void HuMemMemoryFree(void *ptr, u32 retaddr); +void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); +s32 HuMemUsedMemorySizeGet(void *heap_ptr); +s32 HuMemUsedMemoryBlockGet(void *heap_ptr); +s32 HuMemMemorySizeGet(void *ptr); +s32 HuMemMemoryAllocSizeGet(s32 size); +void HuMemHeapDump(void *heap_ptr, s16 status); + +#define DVD_MIN_TRANSFER_SIZE 32 + +#define DVD_STATE_FATAL_ERROR -1 +#define DVD_STATE_END 0 +#define DVD_STATE_BUSY 1 +#define DVD_STATE_WAITING 2 +#define DVD_STATE_COVER_CLOSED 3 +#define DVD_STATE_NO_DISK 4 +#define DVD_STATE_COVER_OPEN 5 +#define DVD_STATE_WRONG_DISK 6 +#define DVD_STATE_MOTOR_STOPPED 7 +#define DVD_STATE_PAUSING 8 +#define DVD_STATE_IGNORED 9 +#define DVD_STATE_CANCELED 10 +#define DVD_STATE_RETRY 11 + +#define DVD_FILEINFO_READY 0 +#define DVD_FILEINFO_BUSY 1 + +#define DVD_RESULT_GOOD 0 +#define DVD_RESULT_FATAL_ERROR -1 +#define DVD_RESULT_IGNORED -2 +#define DVD_RESULT_CANCELED -3 + +#define DVD_AIS_SUCCESS 0x0 + +typedef struct DVDDiskID { + char gameName[4]; + char company[2]; + u8 diskNumber; + u8 gameVersion; + u8 streaming; + u8 streamingBufSize; // 0 = default + u8 padding[22]; // 0's are stored +} DVDDiskID; + +typedef struct DVDCommandBlock DVDCommandBlock; + +typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock *block); + +struct DVDCommandBlock { + DVDCommandBlock *next; + DVDCommandBlock *prev; + u32 command; + s32 state; + u32 offset; + u32 length; + void *addr; + u32 currTransferSize; + u32 transferredSize; + DVDDiskID *id; + DVDCBCallback callback; + void *userData; +}; + +typedef struct DVDFileInfo DVDFileInfo; + +typedef void (*DVDCallback)(s32 result, DVDFileInfo *fileInfo); + +struct DVDFileInfo { + DVDCommandBlock cb; + u32 startAddr; + u32 length; + DVDCallback callback; +}; + +typedef struct { + u32 entryNum; + u32 location; + u32 next; +} DVDDir; + +typedef struct { + u32 entryNum; + BOOL isDir; + char *name; +} DVDDirEntry; + +void DVDInit(); +BOOL DVDClose(DVDFileInfo *f); +BOOL DVDSetAutoFatalMessaging(BOOL); +void DVDReset(); +s32 DVDCancel(DVDCommandBlock *block); +BOOL DVDOpen(char *fileName, DVDFileInfo *fileInfo); +BOOL DVDFastOpen(s32 entrynum, DVDFileInfo *fileInfo); +s32 DVDGetCommandBlockStatus(const DVDCommandBlock *block); +BOOL DVDCancelAsync(DVDCommandBlock *block, DVDCBCallback callback); +s32 DVDCancel(DVDCommandBlock *block); +BOOL DVDCancelAllAsync(DVDCBCallback callback); +s32 DVDCancelAll(void); +BOOL DVDPrepareStreamAsync(DVDFileInfo *fInfo, u32 length, u32 offset, + DVDCallback callback); +s32 DVDPrepareStream(DVDFileInfo *fInfo, u32 length, u32 offset); + +BOOL DVDCancelStreamAsync(DVDCommandBlock *block, DVDCBCallback callback); +s32 DVDCancelStream(DVDCommandBlock *block); + +BOOL DVDStopStreamAtEndAsync(DVDCommandBlock *block, DVDCBCallback callback); +s32 DVDStopStreamAtEnd(DVDCommandBlock *block); + +BOOL DVDGetStreamErrorStatusAsync(DVDCommandBlock *block, + DVDCBCallback callback); +s32 DVDGetStreamErrorStatus(DVDCommandBlock *block); + +BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock *block, DVDCBCallback callback); +s32 DVDGetStreamPlayAddr(DVDCommandBlock *block); + +s32 DVDGetDriveStatus(); + +s32 DVDConvertPathToEntrynum(char *pathPtr); + +BOOL DVDReadAsyncPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, + DVDCallback callback, s32 prio); + +BOOL DVDReadPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, + s32 prio); + +#define DVDReadAsync(fileInfo, addr, length, offset, callback) \ + DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2) +#define DVDRead(fileInfo, addr, length, offset) \ + DVDReadPrio((fileInfo), (addr), (length), (offset), 2) + +#define DVDSeekAsync(fileInfo, offset, callback) \ + DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2) + +#define DATA_DECODE_NONE 0 +#define DATA_DECODE_LZ 1 +#define DATA_DECODE_SLIDE 2 +#define DATA_DECODE_FSLIDE_ALT 3 +#define DATA_DECODE_FSLIDE 4 +#define DATA_DECODE_RLE 5 + +#define DATA_NUM_LISTEND -1 + +typedef struct data_read_stat { + s32 dir_id; + void *dir; + void *file; + u32 raw_len; + u32 comp_type; + BOOL used; + s32 num; + u32 status; + DVDFileInfo file_info; +} DataReadStat; + +void HuDataInit(void); +int HuDataReadChk(s32 data_num); +DataReadStat *HuDataGetStatus(void *dir_ptr); +void *HuDataGetDirPtr(s32 data_num); +DataReadStat *HuDataDirRead(s32 data_num); +DataReadStat *HuDataDirReadNum(s32 data_num, s32 num); +DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num); +void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo *fileInfo); +s32 HuDataDirReadAsync(s32 data_num); +s32 HuDataDirReadNumAsync(s32 data_num, s32 num); +BOOL HuDataGetAsyncStat(s32 status); +void *HuDataRead(s32 data_num); +void *HuDataReadNum(s32 data_num, s32 num); +void *HuDataSelHeapRead(s32 data_num, HeapID heap); +void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap); +void **HuDataReadMulti(s32 *data_ids); +s32 HuDataGetSize(s32 data_num); +void HuDataClose(void *ptr); +void HuDataCloseMulti(void **ptrs); +void HuDataDirClose(s32 data_id); +void HuDataDirCloseNum(s32 num); +void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap); + +void HuDecodeData(void *src, void *dst, u32 size, int decode_type); + +extern u32 DirDataSize; + +typedef struct { + /* 0x00 */ u8 color; + /* 0x01 */ u8 fade; + /* 0x02 */ s16 x; + /* 0x04 */ s16 y; + /* 0x06 */ s16 character; +} WinChar; // Size 8 + +typedef struct { + /* 0x00 */ u8 stat; + /* 0x02 */ s16 x; + /* 0x04 */ s16 y; +} WinChoice; // Size 6 + +typedef struct { + /* 0x000 */ u8 stat; + /* 0x001 */ u8 active_pad; + /* 0x002 */ u8 player_disable; + /* 0x003 */ u8 color_key; + /* 0x004 */ s16 group; + /* 0x006 */ s16 sprite_id[30]; + /* 0x042 */ s16 speed; + /* 0x044 */ s16 mess_time; + /* 0x046 */ s16 advance_sprite; + /* 0x048 */ s16 prio; + /* 0x04C */ u32 attr; + /* 0x050 */ AnimData *frame; + /* 0x054 */ s16 mess_rect_x; + /* 0x056 */ s16 mess_rect_w; + /* 0x058 */ s16 mess_rect_y; + /* 0x05A */ s16 mess_rect_h; + /* 0x05C */ s16 mess_x; + /* 0x05E */ s16 mess_y; + /* 0x060 */ s16 mess_color; + /* 0x062 */ s16 mess_shadow_color; + /* 0x064 */ s16 spacing_x; + /* 0x066 */ s16 spacing_y; + /* 0x068 */ s16 w; + /* 0x06A */ s16 h; + /* 0x06C */ float pos_x; + /* 0x070 */ float pos_y; + /* 0x074 */ float scale_x; + /* 0x078 */ float scale_y; + /* 0x07C */ float z_rot; + /* 0x080 */ s16 num_chars; + /* 0x082 */ s16 max_chars; + /* 0x084 */ WinChar *char_data; + /* 0x088 */ s16 mess_stackptr; + /* 0x08C */ s32 unk8C; + /* 0x090 */ u8 *mess; + /* 0x094 */ u8 *mess_stack[8]; + /* 0x0B4 */ u8 *insert_mess[8]; + /* 0x0D4 */ s16 num_choices; + /* 0x0D6 */ s16 choice; + /* 0x0D8 */ s16 cursor_sprite; + /* 0x0DA */ u8 choice_disable[16]; + /* 0x0EA */ WinChoice choice_data[16]; + /* 0x14A */ s16 scissor_x; + /* 0x14C */ s16 scissor_y; + /* 0x14E */ s16 scissor_w; + /* 0x150 */ s16 scissor_h; + /* 0x152 */ s16 tab_w; + /* 0x154 */ s16 push_key; + /* 0x156 */ s16 key_down; + /* 0x158 */ s16 key_auto; + /* 0x160 */ u8 mess_pal[10][3]; +} WindowData; // Size 0x180 + +extern WindowData winData[32]; +extern void *messDataPtr; + +void HuWindowInit(void); +void HuWinInit(s32 mess_data_no); +s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame); +void HuWinKill(s16 window); +void HuWinAllKill(void); +void HuWinHomeClear(s16 window); +void HuWinKeyWaitEntry(s16 window); +u32 HuWinActivePadGet(WindowData *window); +u32 HuWinActiveKeyGetX(WindowData *window); +void HuWinPosSet(s16 window, float x, float y); +void HuWinScaleSet(s16 window, float x, float y); +void HuWinZRotSet(s16 window, float z_rot); +void HuWinCenterPosSet(s16 window, float x, float y); +void HuWinDrawNoSet(s16 window, s16 draw_no); +void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h); +void HuWinPriSet(s16 window, s16 prio); +void HuWinAttrSet(s16 window, u32 attr); +void HuWinAttrReset(s16 window, u32 attr); +s16 HuWinStatGet(s16 window); +void HuWinMesColSet(s16 window, u8 color); +void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b); +void HuWinBGTPLvlSet(s16 window, float tp_level); +void HuWinBGColSet(s16 window, GXColor *bg_color); +void HuWinMesSpeedSet(s16 window, s16 speed); +void HuWinMesRead(s32 mess_data_no); +void HuWinMesSet(s16 window, u32 mess); +void HuWinInsertMesSet(s16 window, u32 mess, s16 index); +s16 HuWinChoiceGet(s16 window, s16 start_choice); +s16 HuWinChoiceNumGet(s16 window); +void HuWinChoiceDisable(s16 window, s16 choice); +s16 HuWinChoiceNowGet(s16 window); +void HuWinMesWait(s16 window); +s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); +s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); +void HuWinSprPosSet(s16 window, s16 index, float x, float y); +void HuWinSprPriSet(s16 window, s16 index, s16 prio); +s16 HuWinSprIDGet(s16 window, s16 index); +void HuWinSprKill(s16 window, s16 index); +void HuWinDispOff(s16 window); +void HuWinDispOn(s16 window); +void HuWinComKeyWait(s32 player_1, s32 player_2, s32 player_3, s32 player_4, + s16 delay); +void HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4); +void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, + s16 delay); +void HuWinComKeyGet(s16 window, u32 *data); +void HuWinComKeyReset(void); +void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...); +void HuWinInsertMesSizeGet(u32 mess, s16 index); +void HuWinMesSizeCancelCRSet(s32 cancel_cr); +void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end); +s16 HuWinKeyWaitNumGet(u32 mess); +void HuWinPushKeySet(s16 window, s16 push_key); +void HuWinDisablePlayerSet(s16 window, u8 player); +void HuWinDisablePlayerReset(s16 window, u8 player); +s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait); +s16 HuWinExCreateStyled(float x, float y, s16 w, s16 h, s16 portrait, + s16 frame); +void HuWinExAnimIn(s16 window); +void HuWinExAnimOut(s16 window); +void HuWinExCleanup(s16 window); +void HuWinExAnimPopIn(s16 window, s16 portrait); +void *MessData_MesPtrGet(void *data, u32 index); + +extern void *messDataPtr; + +typedef void (*omObjFunc)(struct om_obj_data *); + +typedef struct om_obj_data { + /* 0x00 */ u16 stat; + /* 0x02 */ s16 next_idx_alloc; + /* 0x04 */ s16 prio; + /* 0x06 */ s16 prev; + /* 0x08 */ s16 next; + /* 0x0A */ s16 next_idx; + /* 0x0C */ s16 group; + /* 0x0E */ u16 group_idx; + /* 0x10 */ u32 unk10; + /* 0x14 */ omObjFunc func; + /* 0x18 */ Vec trans; + /* 0x24 */ Vec rot; + /* 0x30 */ Vec scale; + /* 0x3C */ u16 mdlcnt; + /* 0x40 */ s16 *model; + /* 0x44 */ u16 mtncnt; + /* 0x48 */ s16 *motion; + /* 0x4C */ u32 work[4]; + /* 0x5C */ void *data; +} omObjData; + + +typedef struct hu_snd_grp_data { + /* 0x00 */ s16 ovl; + /* 0x02 */ s16 grpset; + /* 0x04 */ s32 auxANo; + /* 0x08 */ s32 auxBNo; + /* 0x0C */ s8 auxAVol; + /* 0x0D */ s8 auxBVol; +} HuSndGrpData; + +void HuAudInit(void); +s32 HuAudStreamPlay(void); +void HuAudStreamVolSet(s16 vol); +void HuAudStreamPauseOn(void); +void HuAudStreamPauseOff(void); +void HuAudStreamFadeOut(void); +void HuAudAllStop(void); +void HuAudFadeOut(s32 arg0); +s32 HuAudFXPlay(s32 arg0); +s32 HuAudFXPlayVol(s32 arg0, s16 arg1); +s32 HuAudFXPlayVolPan(s32 arg0, s16 arg1, s16 arg2); +void HuAudFXStop(s32 arg0); +void HuAudFXAllStop(void); +void HuAudFXFadeOut(s32 arg0, s32 arg1); +void HuAudFXPanning(s32 arg0, s16 arg1); +void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); +void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); +void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); +s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); +void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); +void HuAudFXListnerKill(void); +void HuAudFXPauseAll(s32 arg0); +s32 HuAudFXStatusGet(s32 arg0); +s32 HuAudFXPitchSet(s32 arg0, s16 arg1); +s32 HuAudFXVolSet(s32 arg0, s16 arg1); +s32 HuAudSeqPlay(s16 arg0); +void HuAudSeqStop(s32 arg0); +void HuAudSeqFadeOut(s32 arg0, s32 arg1); +void HuAudSeqAllFadeOut(s32 arg0); +void HuAudSeqAllStop(void); +void HuAudSeqPauseAll(s32 arg0); +void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2); +s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2); +s32 HuAudSStreamPlay(s16 arg0); +void HuAudSStreamStop(s32 arg0); +void HuAudSStreamFadeOut(s32 arg0, s32 arg1); +void HuAudSStreamAllFadeOut(s32 arg0); +void HuAudSStreamAllStop(void); +s32 HuAudSStreamStatGet(s32 arg0); +void HuAudDllSndGrpSet(u16 ovl); +void HuAudSndGrpSetSet(s16 arg0); +void HuAudSndGrpSet(s16 arg0); +void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); +void HuAudAUXSet(s32 arg0, s32 arg1); +void HuAudAUXVolSet(s8 arg0, s8 arg1); +void HuAudVoiceInit(s16 ovl); +s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); +s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); +void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); +s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); +s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); +void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); + +extern float Snd3DBackSurDisOffset; +extern float Snd3DFrontSurDisOffset; +extern float Snd3DStartDisOffset; +extern float Snd3DSpeedOffset; +extern float Snd3DDistOffset; +extern s32 musicOffF; +extern u8 fadeStat; + +extern HuSndGrpData HuSndGrpTbl[]; + +void GWInit(void); +void GWGameStatReset(void); +s32 GWMessSpeedGet(void); +s32 GWMessDelayGet(void); +void GWMGRecordSet(int index, s32 value); +s32 GWMGRecordGet(int index); +void GWCharColorGet(int character, GXColor *color); +void GWBoardPlayCountSet(int board, u8 value); +void GWBoardPlayCountAdd(int board, u8 value); +u8 GWBoardPlayCountGet(int board); +void GWBoardMaxStarsSet(int board, int value); +u16 GWBoardMaxStarsGet(int board); +void GWBoardMaxCoinsSet(int board, int value); +u16 GWBoardMaxCoinsGet(int board); +int GWBoardWinCountInc(int character, int board); +int GWBoardWinCountGet(int character, int board); +void GWBoardWinCountSet(int character, int board, int value); +int GWMGAvailGet(int id); +int GWMGAvailSet(int id); +int GWMGCustomGet(int id); +int GWMGCustomSet(int id); +int GWMGCustomReset(int id); +s16 GWCoinsGet(int player); +void GWCoinsSet(int player, s16 value); +void GWCoinsAdd(int player, s16 amount); +void GWStarsSet(int player, s16 value); +void GWStarsAdd(int player, s16 amount); +s32 GWStarsGet(int player); +void GWTotalStarsSet(s16 value); +void GWTotalStarsAdd(s16 amount); +u16 GWTotalStarsGet(void); diff --git a/src/REL/E3setupDLL/mgselect.c b/src/REL/E3setupDLL/mgselect.c index 73e333da..1c9213b4 100644 --- a/src/REL/E3setupDLL/mgselect.c +++ b/src/REL/E3setupDLL/mgselect.c @@ -405,7 +405,7 @@ static void CreateMGSelect(omObjData *object) var_r26++; } object->work[3] = 1; - object->func = &UpdateMGSelect; + object->func = UpdateMGSelect; } static void UpdateMGPic(omObjData *object) @@ -456,7 +456,7 @@ static void CreateMGPic(omObjData *object) index2++; object->work[1] = object->work[0]; HuSprAttrReset(temp_r3, object->work[1], 4); - object->func = &UpdateMGPic; + object->func = UpdateMGPic; } static void UpdateMGInterface(omObjData *object) { void *sp8 = object->data; } diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml new file mode 100644 index 00000000..d0170ed0 --- /dev/null +++ b/tools/permuter_settings.toml @@ -0,0 +1,2 @@ +build_system = "ninja" +compiler_type = "mwcc" From 9cfeefc6b1573dd2ef366b89ba85b9434bb4015e Mon Sep 17 00:00:00 2001 From: kabiskac Date: Wed, 1 May 2024 03:24:15 +0200 Subject: [PATCH 08/22] Finish w20Dll and delete accidentally committed files --- .clang-format | 4 - config/GMPE01_00/rels/w20Dll/symbols.txt | 24 +- configure.py | 2 +- ctx_asd.c | 6525 ---------------------- ctx_working.c | 2402 -------- include/REL/w20Dll.h | 12 + src/REL/w20Dll/main.c | 154 + tools/permuter_settings.toml | 2 - 8 files changed, 181 insertions(+), 8944 deletions(-) delete mode 100644 .clang-format delete mode 100644 ctx_asd.c delete mode 100644 ctx_working.c create mode 100644 include/REL/w20Dll.h create mode 100644 src/REL/w20Dll/main.c delete mode 100644 tools/permuter_settings.toml diff --git a/.clang-format b/.clang-format deleted file mode 100644 index f1e35120..00000000 --- a/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: WebKit -IndentWidth: 4 -ColumnLimit: 120 -PointerAlignment: Right diff --git a/config/GMPE01_00/rels/w20Dll/symbols.txt b/config/GMPE01_00/rels/w20Dll/symbols.txt index 8e8d1e62..471db631 100644 --- a/config/GMPE01_00/rels/w20Dll/symbols.txt +++ b/config/GMPE01_00/rels/w20Dll/symbols.txt @@ -13,17 +13,21 @@ fn_1_4A8 = .text:0x000004A8; // type:function size:0x4 fn_1_4AC = .text:0x000004AC; // type:function size:0x1CC _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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 data:double -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte lbl_1_data_2 = .data:0x00000002; // type:object size:0x2 data:2byte +lbl_1_data_4 = .data:0x00000004; // type:object size:0x2 data:2byte lbl_1_data_6 = .data:0x00000006; // type:object size:0x2 data:2byte lbl_1_data_8 = .data:0x00000008; // type:object size:0x2 data:2byte -lbl_1_data_A = .data:0x0000000A; // type:object size:0x22 data:2byte -lbl_1_data_2C = .data:0x0000002C; // type:object size:0x8 -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x8 -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x6 +lbl_1_data_A = .data:0x0000000A; // type:object size:0x2 data:2byte +lbl_1_data_C = .data:0x0000000C; // type:object size:0x20 data:4byte +unkMotTbl = .data:0x0000002C; // type:object size:0x8 +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x2 diff --git a/configure.py b/configure.py index 864c2ff0..9a52b90e 100644 --- a/configure.py +++ b/configure.py @@ -1441,7 +1441,7 @@ config.libs = [ Rel('w20Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w20Dll/main.c"), + Object(Matching, "REL/w20Dll/main.c"), } ), Rel('w21Dll', diff --git a/ctx_asd.c b/ctx_asd.c deleted file mode 100644 index 37df112c..00000000 --- a/ctx_asd.c +++ /dev/null @@ -1,6525 +0,0 @@ -#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num))) -typedef signed char s8; -typedef signed short int s16; -typedef signed long s32; -typedef signed long long int s64; -typedef unsigned char u8; -typedef unsigned short int u16; -typedef unsigned long u32; -typedef unsigned long long int u64; - -typedef volatile u8 vu8; -typedef volatile u16 vu16; -typedef volatile u32 vu32; -typedef volatile u64 vu64; - -typedef volatile s8 vs8; -typedef volatile s16 vs16; -typedef volatile s32 vs32; -typedef volatile s64 vs64; - -typedef float f32; -typedef double f64; - -typedef volatile f32 vf32; -typedef volatile f64 vf64; -typedef int BOOL; -#define FALSE 0 -#define TRUE 1 - -#define NULL ((void *)0) -#define nullptr NULL - -#define CTR 9 -#define XER 1 -#define LR 8 - -#define UPMC1 937 -#define UPMC2 938 -#define UPMC3 941 -#define UPMC4 942 - -#define USIA 939 - -#define UMMCR0 936 -#define UMMCR1 940 - -#define HID0 1008 -#define HID1 1009 - -#define PVR 287 - -#define IBAT0U 528 -#define IBAT0L 529 -#define IBAT1U 530 -#define IBAT1L 531 -#define IBAT2U 532 -#define IBAT2L 533 -#define IBAT3U 534 -#define IBAT3L 535 - -#define DBAT0U 536 -#define DBAT0L 537 -#define DBAT1U 538 -#define DBAT1L 539 -#define DBAT2U 540 -#define DBAT2L 541 -#define DBAT3U 542 -#define DBAT3L 543 - -#define SDR1 25 - -#define SPRG0 272 -#define SPRG1 273 -#define SPRG2 274 -#define SPRG3 275 - -#define DAR 19 -#define DSISR 18 - -#define SRR0 26 -#define SRR1 27 - -#define EAR 282 - -#define DABR 1013 - -#define TBL 284 -#define TBU 285 - -#define L2CR 1017 - -#define DEC 22 - -#define IABR 1010 - -#define PMC1 953 -#define PMC2 954 -#define PMC3 957 -#define PMC4 958 - -#define SIA 955 - -#define MMCR0 952 -#define MMCR1 956 - -#define THRM1 1020 -#define THRM2 1021 -#define THRM3 1022 - -#define ICTC 1019 - -#define GQR0 912 -#define GQR1 913 -#define GQR2 914 -#define GQR3 915 -#define GQR4 916 -#define GQR5 917 -#define GQR6 918 -#define GQR7 919 - -#define HID2 920 - -#define WPAR 921 - -#define DMA_U 922 -#define DMA_L 923 - -#define MSR_POW 0x00040000 // Power Management -#define MSR_ILE 0x00010000 // Interrupt Little Endian -#define MSR_EE 0x00008000 // external interrupt -#define MSR_PR 0x00004000 // privilege level(should be 0) -#define MSR_FP 0x00002000 // floating point available -#define MSR_ME 0x00001000 // machine check enable -#define MSR_FE0 0x00000800 // floating point exception enable -#define MSR_SE 0x00000400 // single step trace enable -#define MSR_BE 0x00000200 // branch trace enable -#define MSR_FE1 0x00000100 // floating point exception enable -#define MSR_IP 0x00000040 // Exception prefix -#define MSR_IR 0x00000020 // instruction relocate -#define MSR_DR 0x00000010 // data relocate -#define MSR_PM 0x00000004 // Performance monitor marked mode -#define MSR_RI 0x00000002 // Recoverable interrupt -#define MSR_LE 0x00000001 // Little Endian - -#define MSR_POW_BIT 13 // Power Management -#define MSR_ILE_BIT 15 // Interrupt Little Endian -#define MSR_EE_BIT 16 // external interrupt -#define MSR_PR_BIT 17 // privilege level (should be 0) -#define MSR_FP_BIT 18 // floating point available -#define MSR_ME_BIT 19 // machine check enable -#define MSR_FE0_BIT 20 // floating point exception enable -#define MSR_SE_BIT 21 // single step trace enable -#define MSR_BE_BIT 22 // branch trace enable -#define MSR_FE1_BIT 23 // floating point exception enable -#define MSR_IP_BIT 25 // Exception prefix -#define MSR_IR_BIT 26 // instruction relocate -#define MSR_DR_BIT 27 // data relocate -#define MSR_PM_BIT 29 // Performance monitor marked mode -#define MSR_RI_BIT 30 // Recoverable interrupt -#define MSR_LE_BIT 31 // Little Endian - -/*---------------------------------------------------------------------------* - HID0 bits - *---------------------------------------------------------------------------*/ -#define HID0_EMCP 0x80000000 // Enable MCP -#define HID0_DBP 0x40000000 // Enable 60x bus address and data parity chk -#define HID0_EBA 0x20000000 // Enable 60x address parity checking -#define HID0_EBD 0x10000000 // Enable 60x data parity checking -#define HID0_BCLK 0x08000000 // CLK_OUT output enable and clk selection -#define HID0_ECLK 0x02000000 // CLK_OUT output enable and clk selection -#define HID0_PAR 0x01000000 // Disable !ARTRY precharge -#define HID0_DOZE 0x00800000 // Doze mode enable -#define HID0_NAP 0x00400000 // Nap mode enable -#define HID0_SLEEP 0x00200000 // Sleep mode enable -#define HID0_DPM 0x00100000 // Dynamic power management enable -#define HID0_NHR 0x00010000 // Not hard reset (0 hard reset if s/w set it) -#define HID0_ICE 0x00008000 // Instruction cache enable -#define HID0_DCE 0x00004000 // Data cache enable -#define HID0_ILOCK 0x00002000 // ICache lock -#define HID0_DLOCK 0x00001000 // DCache lock -#define HID0_ICFI 0x00000800 // ICache flash invalidate -#define HID0_DCFI 0x00000400 // DCache flash invalidate -#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable) -#define HID0_IFEM 0x00000100 // Enable M bit on bus for Ifetch -#define HID0_SGE 0x00000080 // Store gathering enable -#define HID0_DCFA 0x00000040 // DCache flush assist - set before a flush -#define HID0_BTIC 0x00000020 // Branch target icache enable -#define HID0_ABE 0x00000008 // Address bcast enable -#define HID0_BHT 0x00000004 // Branch history table enable -#define HID0_NOOPTI 0x00000001 // No-op Dcache touch instructions - -#define HID0_ICE_BIT 16 // Instruction cache enable -#define HID0_DCE_BIT 17 // Data cache enable -#define HID0_ILOCK_BIT 18 // ICache lock -#define HID0_DLOCK_BIT 19 // DCache lock - -#define HID2_LSQE 0x80000000 // L/S quantize enable -#define HID2_WPE 0x40000000 // Write pipe enable -#define HID2_PSE 0x20000000 // Paired single enable -#define HID2_LCE 0x10000000 // Locked cache enable - -#define HID2_DCHERR 0x00800000 // ERROR: dcbz_l cache hit -#define HID2_DNCERR 0x00400000 // ERROR: DMA access to normal cache -#define HID2_DCMERR 0x00200000 // ERROR: DMA cache miss error -#define HID2_DQOERR 0x00100000 // ERROR: DMA queue overflow -#define HID2_DCHEE 0x00080000 // dcbz_l cache hit error enable -#define HID2_DNCEE 0x00040000 // DMA access to normal cache error enable -#define HID2_DCMEE 0x00020000 // DMA cache miss error error enable -#define HID2_DQOEE 0x00010000 // DMA queue overflow error enable - -#define HID2_DMAQL_MASK 0x0F000000 // DMA queue length mask -#define HID2_DMAQL_SHIFT 24 // DMA queue shift - -#define HID2_LSQE_BIT 0 -#define HID2_WPE_BIT 1 -#define HID2_PSE_BIT 2 -#define HID2_LCE_BIT 3 - -#define HID2_DCHERR_BIT 8 -#define HID2_DNCERR_BIT 9 -#define HID2_DCMERR_BIT 10 -#define HID2_DQOERR_BIT 11 -#define HID2_DCHEE_BIT 12 -#define HID2_DNCEE_BIT 13 -#define HID2_DCMEE_BIT 14 -#define HID2_DQOEE_BIT 15 - -#define GQR_LOAD_SCALE_MASK 0x3F000000 // load scale field -#define GQR_LOAD_TYPE_MASK 0x00070000 // load type field -#define GQR_STORE_SCALE_MASK 0x00003F00 // store scale field -#define GQR_STORE_TYPE_MASK 0x00000007 // store type field - -typedef struct -{ - u32 _pad0 :2; - u32 loadScale :6; - u32 _pad1 :5; - u32 loadType :3; - u32 _pad2 :2; - u32 storeScale :6; - u32 _pad3 :5; - u32 storeType :3; -} PPC_GQR_t; - -typedef union -{ - u32 val; - PPC_GQR_t f; -} PPC_GQR_u; - - -#define DMA_U_ADDR_MASK 0xFFFFFFE0 // Start addr in memory -#define DMA_U_LEN_U_MASK 0x0000001F // lines to transfer (U) - -#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0 // Start addr in LC -#define DMA_L_LOAD 0x00000010 // 0 - store, 1 - load -#define DMA_L_STORE 0x00000000 // 0 - store, 1 - load -#define DMA_L_LEN_MASK 0x0000000C // lines to transfer (L) -#define DMA_L_TRIGGER 0x00000002 // 0 - cmd inactive, 1 - cmd rdy -#define DMA_L_FLUSH 0x00000001 // 1 - Flush DMA queue - -typedef struct -{ - u32 memAddr :27; - u32 dmaLenU :5; -} PPC_DMA_U_t; - -typedef union -{ - u32 val; - PPC_DMA_U_t f; -} PPC_DMA_U_u; - - -typedef struct -{ - u32 lcAddr :27; - u32 dmaLd :1; - u32 dmaLenL :2; - u32 dmaTrigger :1; - u32 dmaFlush :1; -} PPC_DMA_L_t; - - -typedef union -{ - u32 val; - PPC_DMA_L_t f; -} PPC_DMA_L_u; - - -#define WPAR_ADDR 0xFFFFFFE0 // 32byte gather address -#define WPAR_BNE 0x00000001 // Buffer not empty (R) - -#define SRR1_DMA_BIT 0x00200000 -#define SRR1_L2DP_BIT 0x00100000 - -#define L2CR_L2E 0x80000000 // L2 Enable -#define L2CR_L2PE 0x40000000 // L2 data parity generation and checking enable - -#define L2CR_L2SIZ_256K 0x10000000 // L2 size 256K -#define L2CR_L2SIZ_512K 0x20000000 // L2 size 512 -#define L2CR_L2SIZ_1M 0x30000000 // L2 size 1M - -#define L2CR_L2CLK_1_0 0x02000000 // L2 clock ratio 1 -#define L2CR_L2CLK_1_5 0x04000000 // L2 clock ratio 1.5 -#define L2CR_L2CLK_2_0 0x08000000 // L2 clock ratio 2 -#define L2CR_L2CLK_2_5 0x0A000000 // L2 clock ratio 2.5 -#define L2CR_L2CLK_3_0 0x0C000000 // L2 clock ratio 3 - -#define L2CR_RAM_FLOW_THRU_BURST 0x00000000 // L2 RAM type flow-through sync. burst SRAM -#define L2CR_RAM_PIPELINE_BURST 0x01000000 // L2 RAM type pipelined sync. burst SRAM -#define L2CR_RAM_PIPELINE_LATE 0x01800000 // L2 RAM type pipelined sync. late-write SRAM - -#define L2CR_L2DO 0x00400000 // Data only -#define L2CR_L2I 0x00200000 // Global invalidate -#define L2CR_L2CTL 0x00100000 // ZZ enable -#define L2CR_L2WT 0x00080000 // L2 write through -#define L2CR_L2TS 0x00040000 // L2 test support - -#define L2CR_L2OH_0_5 0x00000000 // L2 output hold 0.5 ns -#define L2CR_L2OH_1_0 0x00010000 // L2 output hold 1.0 ns - -#define L2CR_L2SL 0x00008000 // L2 DLL slow -#define L2CR_L2DF 0x00004000 // L2 differential clock -#define L2CR_L2BYP 0x00002000 // L2 DLL bypass -#define L2CR_L2CS 0x00000200 // L2 clock stop -#define L2CR_L2DRO 0x00000100 // L2 DLL rollover checkstop enable -#define L2CR_L2CTR_MASK 0x000000FE // L2 counter value mask -#define L2CR_L2IP 0x00000001 // L2 global invalidate in progress - -#define MMCR0_DIS 0x80000000 // Disables counting unconditionally -#define MMCR0_DP 0x40000000 // Disables counting while in supervisor mode -#define MMCR0_DU 0x20000000 // Disables counting while in user mode -#define MMCR0_DMS 0x10000000 // Disables counting while MSR[PM] is set -#define MMCR0_DMR 0x08000000 // Disables counting while MSR[PM] is zero -#define MMCR0_ENINT 0x04000000 // Enables performance monitor interrupt signaling -#define MMCR0_DISCOUNT 0x02000000 // Disables counting of PMCn when a performance monitor interrupt is signaled or... -#define MMCR0_RTCSELECT_MASK 0x01800000 // 64-bit time base, bit selection enable -#define MMCR0_RTCSELECT_63 0x00000000 // Pick bit 63 to count -#define MMCR0_RTCSELECT_55 0x00800000 // Pick bit 55 to count -#define MMCR0_RTCSELECT_51 0x01000000 // Pick bit 51 to count -#define MMCR0_RTCSELECT_47 0x01800000 // Pick bit 47 to count -#define MMCR0_INTONBITTRANS 0x00400000 // Causes interrupt signaling on bit transition from off to on -#define MMCR0_THRESHOLD_MASK 0x003F0000 // Threshold value -#define MMCR0_THRESHOLD(n) ((n) << 16) // Threshold value (0 - 63) -#define MMCR0_PMC1INTCONTROL 0x00008000 // Enables interrupt signaling due to PMC1 counter overflow -#define MMCR0_PMC2INTCONTROL 0x00004000 // Enables interrupt signaling due to PMC2-PMC4 counter overflow -#define MMCR0_PMCTRIGGER 0x00002000 // Can be used to trigger counting of PMC2-PMC4 after PMC1 has overflowed or... -#define MMCR0_PMC1SELECT_MASK 0x00001FC0 // PMC1 input selector -#define MMCR0_PMC2SELECT_MASK 0x0000003F // PMC2 input selector - -#define MMCR1_PMC3SELECT_MASK 0xF8000000 // PMC3 input selector -#define MMCR1_PMC4SELECT_MASK 0x07C00000 // PMC4 input selector - -#define PMC1_OV 0x80000000 // Overflow -#define PMC1_COUNTER 0x7FFFFFFF // Counter value -#define PMC2_OV 0x80000000 // Overflow -#define PMC2_COUNTER 0x7FFFFFFF // Counter value -#define PMC3_OV 0x80000000 // Overflow -#define PMC3_COUNTER 0x7FFFFFFF // Counter value -#define PMC4_OV 0x80000000 // Overflow -#define PMC4_COUNTER 0x7FFFFFFF // Counter value - -/*---------------------------------------------------------------------------* - PMC1 Events - *---------------------------------------------------------------------------*/ -#define MMCR0_PMC1_HOLD 0x00000000 // Register holds current value -#define MMCR0_PMC1_CYCLE 0x00000040 // Processor cycles -#define MMCR0_PMC1_INSTRUCTION 0x00000080 // # of instructions completed. -#define MMCR0_PMC1_TRANSITION 0x000000C0 // # of transitions for 0 to 1 -#define MMCR0_PMC1_DISPATCHED 0x00000100 // # of instructions dispatched -#define MMCR0_PMC1_EIEIO 0x00000140 // # of eieio instructions completed -#define MMCR0_PMC1_ITLB_CYCLE 0x00000180 // # of cycles spent performing table search op. for the ITLB -#define MMCR0_PMC1_L2_HIT 0x000001C0 // # of access that hit the L2. -#define MMCR0_PMC1_EA 0x00000200 // # of valid instruction EAs delivered to the memory subsystem -#define MMCR0_PMC1_IABR 0x00000240 // # of time the address of an instruction matches the IABR -#define MMCR0_PMC1_L1_MISS 0x00000280 // # of loads that miss the L1 -#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0 // # of branches that are unresolved when processed -#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300 // # of cycles that dispatcher stalls due to a second - // unresolved branch in the instruction stream -#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340 // # of times an instruction fetch missed the L1 Icache -#define MMCR0_PMC2_HOLD 0x00000000 // Register holds current value -#define MMCR0_PMC2_CYCLE 0x00000001 // Processor cycles -#define MMCR0_PMC2_INSTRUCTION 0x00000002 // # of instructions completed -#define MMCR0_PMC2_TRANSITION 0x00000003 // # of time-base (lower) bit transitions -#define MMCR0_PMC2_DISPATCHED 0x00000004 // # of instructions dispatched -#define MMCR0_PMC2_IC_MISS 0x00000005 // # of L1 instruction cache misses -#define MMCR0_PMC2_ITLB_MISS 0x00000006 // # of ITLB misses -#define MMCR0_PMC2_L2_I_MISS 0x00000007 // # of L2 instruction misses -#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008 // # of fall-through branches -#define MMCR0_PMC2_PR_SWITCH 0x00000009 // # of MSR[PR] bit toggles -#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A // # of reserved loads completed -#define MMCR0_PMC2_LOAD_STORE 0x0000000B // # of completed loads and stores -#define MMCR0_PMC2_SNOOP 0x0000000C // # of snoops -#define MMCR0_PMC2_L1_CASTOUT 0x0000000D // # of L1 castouts to L2 -#define MMCR0_PMC2_SYSTEM 0x0000000E // # of completed system unit instructions -#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F // # of instruction fetch misses in the L1 -#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010 // # of branches allowing out-of-order execution - -/*---------------------------------------------------------------------------* - PMC3 Events - *---------------------------------------------------------------------------*/ -#define MMCR1_PMC3_HOLD 0x00000000 // Register holds current value -#define MMCR1_PMC3_CYCLE 0x08000000 // Processor cycles -#define MMCR1_PMC3_INSTRUCTION 0x10000000 // # of instructions completed -#define MMCR1_PMC3_TRANSITION 0x18000000 // # of time-base (lower) bit transitions -#define MMCR1_PMC3_DISPATCHED 0x20000000 // # of instructions dispatched -#define MMCR1_PMC3_DC_MISS 0x28000000 // # of L1 data cache misses -#define MMCR1_PMC3_DTLB_MISS 0x30000000 // # of DTLB misses -#define MMCR1_PMC3_L2_D_MISS 0x38000000 // # of L2 data misses -#define MMCR1_PMC3_Bx_TAKEN 0x40000000 // # predicted branches that were taken -#define MMCR1_PMC3_PM_SWITCH 0x48000000 // # of transitions between marked and unmarked processes -#define MMCR1_PMC3_COND_STORE 0x50000000 // # of store conditional instructions completed -#define MMCR1_PMC3_FPU 0x58000000 // # of instructions completed from the FPU -#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000 // # of L2 castout caused by snoops to modified lines -#define MMCR1_PMC3_L2_HIT 0x68000000 // # of cache operations that hit in the L2 cache -#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000 // # of cycles generated by L1 load misses -#define MMCR1_PMC3_Bx_SECOND 0x80000000 // # of branches in the second speculative branch - // resolved correctly -#define MMCR1_PMC3_BPU_LR_CR 0x88000000 // # of cycles the BPU stalls due to LR or CR unresolved - // dependencies - -#define MMCR1_PMC4_HOLD 0x00000000 // Register holds current value -#define MMCR1_PMC4_CYCLE 0x00400000 // Processor cycles -#define MMCR1_PMC4_INSTRUCTION 0x00800000 // # of instructions completed -#define MMCR1_PMC4_TRANSITION 0x00C00000 // # of time-base (lower) bit transitions -#define MMCR1_PMC4_DISPATCHED 0x01000000 // # of instructions dispatched -#define MMCR1_PMC4_L2_CASTOUT 0x01400000 // # of L2 castouts -#define MMCR1_PMC4_DTLB_CYCLE 0x01800000 // # of cycles spent performing table searches for DTLB accesses -#define MMCR1_PMC4_Bx_MISSED 0x02000000 // # of mispredicted branches -#define MMCR1_PMC4_COND_STORE_INT 0x02800000 // # of store conditional instructions completed - // with reservation intact -#define MMCR1_PMC4_SYNC 0x02C00000 // # of completed sync instructions -#define MMCR1_PMC4_SNOOP_RETRY 0x03000000 // # of snoop request retries -#define MMCR1_PMC4_INTEGER 0x03400000 // # of completed integer operations -#define MMCR1_PMC4_BPU_THIRD 0x03800000 // # of cycles the BPU cannot process new branches - // due to having two unresolved branches -#define MMCR1_PMC4_DC_MISS 0x07C00000 // # of L1 data cache misses - -/*---------------------------------------------------------------------------* - FPSCR bits - *---------------------------------------------------------------------------*/ -#define FPSCR_FX 0x80000000 // Exception summary -#define FPSCR_FEX 0x40000000 // Enabled exception summary -#define FPSCR_VX 0x20000000 // Invalid operation -#define FPSCR_OX 0x10000000 // Overflow exception -#define FPSCR_UX 0x08000000 // Underflow exception -#define FPSCR_ZX 0x04000000 // Zero divide exception -#define FPSCR_XX 0x02000000 // Inexact exception -#define FPSCR_VXSNAN 0x01000000 // SNaN -#define FPSCR_VXISI 0x00800000 // Infinity - Infinity -#define FPSCR_VXIDI 0x00400000 // Infinity / Infinity -#define FPSCR_VXZDZ 0x00200000 // 0 / 0 -#define FPSCR_VXIMZ 0x00100000 // Infinity * 0 -#define FPSCR_VXVC 0x00080000 // Invalid compare -#define FPSCR_FR 0x00040000 // Fraction rounded -#define FPSCR_FI 0x00020000 // Fraction inexact -#define FPSCR_VXSOFT 0x00000400 // Software request -#define FPSCR_VXSQRT 0x00000200 // Invalid square root -#define FPSCR_VXCVI 0x00000100 // Invalid integer convert -#define FPSCR_VE 0x00000080 // Invalid operation exception enable -#define FPSCR_OE 0x00000040 // Overflow exception enable -#define FPSCR_UE 0x00000020 // Underflow exception enable -#define FPSCR_ZE 0x00000010 // Zero divide exception enable -#define FPSCR_XE 0x00000008 // Inexact exception enable -#define FPSCR_NI 0x00000004 // Non-IEEE mode - -#define FPSCR_FX_BIT 0 // Exception summary -#define FPSCR_FEX_BIT 1 // Enabled exception summary -#define FPSCR_VX_BIT 2 // Invalid operation -#define FPSCR_OX_BIT 3 // Overflow exception -#define FPSCR_UX_BIT 4 // Underflow exception -#define FPSCR_ZX_BIT 5 // Zero divide exception -#define FPSCR_XX_BIT 6 // Inexact exception -#define FPSCR_VXSNAN_BIT 7 // SNaN -#define FPSCR_VXISI_BIT 8 // Infinity - Infinity -#define FPSCR_VXIDI_BIT 9 // Infinity / Infinity -#define FPSCR_VXZDZ_BIT 10 // 0 / 0 -#define FPSCR_VXIMZ_BIT 11 // Infinity * 0 -#define FPSCR_VXVC_BIT 12 // Invalid compare -#define FPSCR_FR_BIT 13 // Fraction rounded -#define FPSCR_FI_BIT 14 // Fraction inexact -#define FPSCR_VXSOFT_BIT 21 // Software request -#define FPSCR_VXSQRT_BIT 22 // Invalid square root -#define FPSCR_VXCVI_BIT 23 // Invalid integer convert -#define FPSCR_VE_BIT 24 // Invalid operation exception enable -#define FPSCR_OE_BIT 25 // Overflow exception enable -#define FPSCR_UE_BIT 26 // Underflow exception enable -#define FPSCR_ZE_BIT 27 // Zero divide exception enable -#define FPSCR_XE_BIT 28 // Inexact exception enable -#define FPSCR_NI_BIT 29 // Non-IEEE mode - -u32 PPCMfmsr(); -void PPCMtmsr(u32 newMSR); -u32 PPCOrMsr(u32 value); -u32 PPCMfhid0(); -void PPCMthid0(u32 newHID0); -u32 PPCMfl2cr(); -void PPCMtl2cr(u32 newL2cr); -void PPCMtdec(u32 newDec); -void PPCSync(); -void PPCHalt(); -u32 PPCMffpscr(); -void PPCMtfpscr(u32 newFPSCR); -u32 PPCMfhid2(); -void PPCMthid2(u32 newhid2); -u32 PPCMfwpar(); -void PPCMtwpar(u32 newwpar); -void PPCEnableSpeculation(); -void PPCDisableSpeculation(); -void PPCSetFpIEEEMode(); -void PPCSetFpNonIEEEMode(); - -/* "include\dolphin\db.h" line 3 "types.h" */ -/* end "types.h" */ - -#define OS_DBINTERFACE_ADDR 0x00000040 - -typedef struct DBInterface -{ - u32 bPresent; - u32 exceptionMask; - void (*ExceptionDestination) ( void ); - void *exceptionReturn; -} DBInterface; - -extern DBInterface* __DBInterface; - -void DBInit(void); -void DBInitComm(int* inputFlagPtr, int* mtrCallback); -static void __DBExceptionDestination(void); -void DBPrintf(char* format, ...); - -typedef u8 GXBool; - -#define GX_FALSE ((GXBool)0) -#define GX_TRUE ((GXBool)1) - -#define GX_ENABLE ((GXBool)1) -#define GX_DISABLE ((GXBool)0) - -typedef enum _GXProjectionType { - GX_PERSPECTIVE, - GX_ORTHOGRAPHIC, -} GXProjectionType; - -typedef enum _GXCompare { - GX_NEVER, - GX_LESS, - GX_EQUAL, - GX_LEQUAL, - GX_GREATER, - GX_NEQUAL, - GX_GEQUAL, - GX_ALWAYS, -} GXCompare; - -typedef enum _GXAlphaOp { - GX_AOP_AND, - GX_AOP_OR, - GX_AOP_XOR, - GX_AOP_XNOR, - GX_MAX_ALPHAOP, -} GXAlphaOp; - -typedef enum _GXZFmt16 { - GX_ZC_LINEAR, - GX_ZC_NEAR, - GX_ZC_MID, - GX_ZC_FAR, -} GXZFmt16; - -typedef enum _GXGamma { - GX_GM_1_0, - GX_GM_1_7, - GX_GM_2_2, -} GXGamma; - -typedef enum _GXPixelFmt { - GX_PF_RGB8_Z24, - GX_PF_RGBA6_Z24, - GX_PF_RGB565_Z16, - GX_PF_Z24, - GX_PF_Y8, - GX_PF_U8, - GX_PF_V8, - GX_PF_YUV420, -} GXPixelFmt; - -typedef enum _GXPrimitive { - GX_QUADS = 0x80, - GX_TRIANGLES = 0x90, - GX_TRIANGLESTRIP = 0x98, - GX_TRIANGLEFAN = 0xA0, - GX_LINES = 0xA8, - GX_LINESTRIP = 0xB0, - GX_POINTS = 0xB8, -} GXPrimitive; - -typedef enum _GXVtxFmt { - GX_VTXFMT0, - GX_VTXFMT1, - GX_VTXFMT2, - GX_VTXFMT3, - GX_VTXFMT4, - GX_VTXFMT5, - GX_VTXFMT6, - GX_VTXFMT7, - GX_MAX_VTXFMT, -} GXVtxFmt; - -typedef enum _GXAttr { - GX_VA_PNMTXIDX, - GX_VA_TEX0MTXIDX, - GX_VA_TEX1MTXIDX, - GX_VA_TEX2MTXIDX, - GX_VA_TEX3MTXIDX, - GX_VA_TEX4MTXIDX, - GX_VA_TEX5MTXIDX, - GX_VA_TEX6MTXIDX, - GX_VA_TEX7MTXIDX, - GX_VA_POS, - GX_VA_NRM, - GX_VA_CLR0, - GX_VA_CLR1, - GX_VA_TEX0, - GX_VA_TEX1, - GX_VA_TEX2, - GX_VA_TEX3, - GX_VA_TEX4, - GX_VA_TEX5, - GX_VA_TEX6, - GX_VA_TEX7, - GX_POS_MTX_ARRAY, - GX_NRM_MTX_ARRAY, - GX_TEX_MTX_ARRAY, - GX_LIGHT_ARRAY, - GX_VA_NBT, - GX_VA_MAX_ATTR, - GX_VA_NULL = 0xFF, -} GXAttr; - -#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1) - -typedef enum _GXAttrType { - GX_NONE, - GX_DIRECT, - GX_INDEX8, - GX_INDEX16, -} GXAttrType; - -#define _GX_TF_CTF 32 -#define _GX_TF_ZTF 16 - -typedef enum _GXTexFmt { - GX_TF_I4 = 0x0, - GX_TF_I8 = 0x1, - GX_TF_IA4 = 0x2, - GX_TF_IA8 = 0x3, - GX_TF_RGB565 = 0x4, - GX_TF_RGB5A3 = 0x5, - GX_TF_RGBA8 = 0x6, - GX_TF_CMPR = 0xE, - - GX_CTF_R4 = 0x0 , - GX_CTF_RA4 = 0x2 , - GX_CTF_RA8 = 0x3 , - GX_CTF_YUVA8 = 0x6 , - GX_CTF_A8 = 0x7 , - GX_CTF_R8 = 0x8 , - GX_CTF_G8 = 0x9 , - GX_CTF_B8 = 0xA , - GX_CTF_RG8 = 0xB , - GX_CTF_GB8 = 0xC , - - GX_TF_Z8 = 0x1 , - GX_TF_Z16 = 0x3 , - GX_TF_Z24X8 = 0x6 , - - GX_CTF_Z4 = 0x0 , - GX_CTF_Z8M = 0x9 , - GX_CTF_Z8L = 0xA , - GX_CTF_Z16L = 0xC , - - GX_TF_A8 = GX_CTF_A8, -} GXTexFmt; - -typedef enum _GXCITexFmt { - GX_TF_C4 = 0x8, - GX_TF_C8 = 0x9, - GX_TF_C14X2 = 0xa, -} GXCITexFmt; - -typedef enum _GXTexWrapMode { - GX_CLAMP, - GX_REPEAT, - GX_MIRROR, - GX_MAX_TEXWRAPMODE, -} GXTexWrapMode; - -typedef enum _GXTexFilter { - GX_NEAR, - GX_LINEAR, - GX_NEAR_MIP_NEAR, - GX_LIN_MIP_NEAR, - GX_NEAR_MIP_LIN, - GX_LIN_MIP_LIN, -} GXTexFilter; - -typedef enum _GXAnisotropy { - GX_ANISO_1, - GX_ANISO_2, - GX_ANISO_4, - GX_MAX_ANISOTROPY, -} GXAnisotropy; - -typedef enum _GXTexMapID { - GX_TEXMAP0, - GX_TEXMAP1, - GX_TEXMAP2, - GX_TEXMAP3, - GX_TEXMAP4, - GX_TEXMAP5, - GX_TEXMAP6, - GX_TEXMAP7, - GX_MAX_TEXMAP, - GX_TEXMAP_NULL = 0xFF, - GX_TEX_DISABLE = 0x100, -} GXTexMapID; - -typedef enum _GXTexCoordID { - GX_TEXCOORD0, - GX_TEXCOORD1, - GX_TEXCOORD2, - GX_TEXCOORD3, - GX_TEXCOORD4, - GX_TEXCOORD5, - GX_TEXCOORD6, - GX_TEXCOORD7, - GX_MAX_TEXCOORD, - GX_TEXCOORD_NULL = 0xFF, -} GXTexCoordID; - -typedef enum _GXTevStageID { - GX_TEVSTAGE0, - GX_TEVSTAGE1, - GX_TEVSTAGE2, - GX_TEVSTAGE3, - GX_TEVSTAGE4, - GX_TEVSTAGE5, - GX_TEVSTAGE6, - GX_TEVSTAGE7, - GX_TEVSTAGE8, - GX_TEVSTAGE9, - GX_TEVSTAGE10, - GX_TEVSTAGE11, - GX_TEVSTAGE12, - GX_TEVSTAGE13, - GX_TEVSTAGE14, - GX_TEVSTAGE15, - GX_MAX_TEVSTAGE, -} GXTevStageID; - -typedef enum _GXTevMode { - GX_MODULATE, - GX_DECAL, - GX_BLEND, - GX_REPLACE, - GX_PASSCLR, -} GXTevMode; - -typedef enum _GXTexMtxType { - GX_MTX3x4, - GX_MTX2x4, -} GXTexMtxType; - -typedef enum _GXTexGenType { - GX_TG_MTX3x4, - GX_TG_MTX2x4, - GX_TG_BUMP0, - GX_TG_BUMP1, - GX_TG_BUMP2, - GX_TG_BUMP3, - GX_TG_BUMP4, - GX_TG_BUMP5, - GX_TG_BUMP6, - GX_TG_BUMP7, - GX_TG_SRTG, -} GXTexGenType; - -typedef enum _GXPosNrmMtx { - GX_PNMTX0 = 0, - GX_PNMTX1 = 3, - GX_PNMTX2 = 6, - GX_PNMTX3 = 9, - GX_PNMTX4 = 12, - GX_PNMTX5 = 15, - GX_PNMTX6 = 18, - GX_PNMTX7 = 21, - GX_PNMTX8 = 24, - GX_PNMTX9 = 27, -} GXPosNrmMtx; - -typedef enum _GXTexMtx { - GX_TEXMTX0 = 30, - GX_TEXMTX1 = 33, - GX_TEXMTX2 = 36, - GX_TEXMTX3 = 39, - GX_TEXMTX4 = 42, - GX_TEXMTX5 = 45, - GX_TEXMTX6 = 48, - GX_TEXMTX7 = 51, - GX_TEXMTX8 = 54, - GX_TEXMTX9 = 57, - GX_IDENTITY = 60, -} GXTexMtx; - -typedef enum _GXChannelID { - GX_COLOR0, - GX_COLOR1, - GX_ALPHA0, - GX_ALPHA1, - GX_COLOR0A0, - GX_COLOR1A1, - GX_COLOR_ZERO, - GX_ALPHA_BUMP, - GX_ALPHA_BUMPN, - GX_COLOR_NULL = 0xFF, -} GXChannelID; - -typedef enum _GXTexGenSrc { - GX_TG_POS, - GX_TG_NRM, - GX_TG_BINRM, - GX_TG_TANGENT, - GX_TG_TEX0, - GX_TG_TEX1, - GX_TG_TEX2, - GX_TG_TEX3, - GX_TG_TEX4, - GX_TG_TEX5, - GX_TG_TEX6, - GX_TG_TEX7, - GX_TG_TEXCOORD0, - GX_TG_TEXCOORD1, - GX_TG_TEXCOORD2, - GX_TG_TEXCOORD3, - GX_TG_TEXCOORD4, - GX_TG_TEXCOORD5, - GX_TG_TEXCOORD6, - GX_TG_COLOR0, - GX_TG_COLOR1, - GX_MAX_TEXGENSRC, -} GXTexGenSrc; - -typedef enum _GXBlendMode { - GX_BM_NONE, - GX_BM_BLEND, - GX_BM_LOGIC, - GX_BM_SUBTRACT, - GX_MAX_BLENDMODE, -} GXBlendMode; - -typedef enum _GXBlendFactor { - GX_BL_ZERO, - GX_BL_ONE, - GX_BL_SRCCLR, - GX_BL_INVSRCCLR, - GX_BL_SRCALPHA, - GX_BL_INVSRCALPHA, - GX_BL_DSTALPHA, - GX_BL_INVDSTALPHA, - GX_BL_DSTCLR = GX_BL_SRCCLR, - GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, -} GXBlendFactor; - -typedef enum _GXLogicOp { - GX_LO_CLEAR, - GX_LO_AND, - GX_LO_REVAND, - GX_LO_COPY, - GX_LO_INVAND, - GX_LO_NOOP, - GX_LO_XOR, - GX_LO_OR, - GX_LO_NOR, - GX_LO_EQUIV, - GX_LO_INV, - GX_LO_REVOR, - GX_LO_INVCOPY, - GX_LO_INVOR, - GX_LO_NAND, - GX_LO_SET, -} GXLogicOp; - -typedef enum _GXCompCnt { - GX_POS_XY = 0, - GX_POS_XYZ = 1, - GX_NRM_XYZ = 0, - GX_NRM_NBT = 1, - GX_NRM_NBT3 = 2, - GX_CLR_RGB = 0, - GX_CLR_RGBA = 1, - GX_TEX_S = 0, - GX_TEX_ST = 1, -} GXCompCnt; - -typedef enum _GXCompType { - GX_U8 = 0, - GX_S8 = 1, - GX_U16 = 2, - GX_S16 = 3, - GX_F32 = 4, - GX_RGB565 = 0, - GX_RGB8 = 1, - GX_RGBX8 = 2, - GX_RGBA4 = 3, - GX_RGBA6 = 4, - GX_RGBA8 = 5, -} GXCompType; - -typedef enum _GXPTTexMtx { - GX_PTTEXMTX0 = 64, - GX_PTTEXMTX1 = 67, - GX_PTTEXMTX2 = 70, - GX_PTTEXMTX3 = 73, - GX_PTTEXMTX4 = 76, - GX_PTTEXMTX5 = 79, - GX_PTTEXMTX6 = 82, - GX_PTTEXMTX7 = 85, - GX_PTTEXMTX8 = 88, - GX_PTTEXMTX9 = 91, - GX_PTTEXMTX10 = 94, - GX_PTTEXMTX11 = 97, - GX_PTTEXMTX12 = 100, - GX_PTTEXMTX13 = 103, - GX_PTTEXMTX14 = 106, - GX_PTTEXMTX15 = 109, - GX_PTTEXMTX16 = 112, - GX_PTTEXMTX17 = 115, - GX_PTTEXMTX18 = 118, - GX_PTTEXMTX19 = 121, - GX_PTIDENTITY = 125, -} GXPTTexMtx; - -typedef enum _GXTevRegID { - GX_TEVPREV, - GX_TEVREG0, - GX_TEVREG1, - GX_TEVREG2, - GX_MAX_TEVREG, -} GXTevRegID; - -typedef enum _GXDiffuseFn { - GX_DF_NONE, - GX_DF_SIGN, - GX_DF_CLAMP, -} GXDiffuseFn; - -typedef enum _GXColorSrc { - GX_SRC_REG, - GX_SRC_VTX, -} GXColorSrc; - -typedef enum _GXAttnFn { - GX_AF_SPEC, - GX_AF_SPOT, - GX_AF_NONE, -} GXAttnFn; - -typedef enum _GXLightID { - GX_LIGHT0 = 0x001, - GX_LIGHT1 = 0x002, - GX_LIGHT2 = 0x004, - GX_LIGHT3 = 0x008, - GX_LIGHT4 = 0x010, - GX_LIGHT5 = 0x020, - GX_LIGHT6 = 0x040, - GX_LIGHT7 = 0x080, - GX_MAX_LIGHT = 0x100, - GX_LIGHT_NULL = 0, -} GXLightID; - -typedef enum _GXTexOffset { - GX_TO_ZERO, - GX_TO_SIXTEENTH, - GX_TO_EIGHTH, - GX_TO_FOURTH, - GX_TO_HALF, - GX_TO_ONE, - GX_MAX_TEXOFFSET, -} GXTexOffset; - -typedef enum _GXSpotFn { - GX_SP_OFF, - GX_SP_FLAT, - GX_SP_COS, - GX_SP_COS2, - GX_SP_SHARP, - GX_SP_RING1, - GX_SP_RING2, -} GXSpotFn; - -typedef enum _GXDistAttnFn { - GX_DA_OFF, - GX_DA_GENTLE, - GX_DA_MEDIUM, - GX_DA_STEEP, -} GXDistAttnFn; - -typedef enum _GXCullMode { - GX_CULL_NONE, - GX_CULL_FRONT, - GX_CULL_BACK, - GX_CULL_ALL, -} GXCullMode; - -typedef enum _GXTevSwapSel { - GX_TEV_SWAP0 = 0, - GX_TEV_SWAP1, - GX_TEV_SWAP2, - GX_TEV_SWAP3, - GX_MAX_TEVSWAP, -} GXTevSwapSel; - -typedef enum _GXTevColorChan { - GX_CH_RED = 0, - GX_CH_GREEN, - GX_CH_BLUE, - GX_CH_ALPHA, -} GXTevColorChan; - -typedef enum _GXFogType { - GX_FOG_NONE = 0, - GX_FOG_PERSP_LIN = 2, - GX_FOG_PERSP_EXP = 4, - GX_FOG_PERSP_EXP2 = 5, - GX_FOG_PERSP_REVEXP = 6, - GX_FOG_PERSP_REVEXP2 = 7, - GX_FOG_ORTHO_LIN = 10, - GX_FOG_ORTHO_EXP = 12, - GX_FOG_ORTHO_EXP2 = 13, - GX_FOG_ORTHO_REVEXP = 14, - GX_FOG_ORTHO_REVEXP2 = 15, - GX_FOG_LIN = GX_FOG_PERSP_LIN, - GX_FOG_EXP = GX_FOG_PERSP_EXP, - GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, - GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, - GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, -} GXFogType; - -typedef enum _GXTevColorArg { - GX_CC_CPREV, - GX_CC_APREV, - GX_CC_C0, - GX_CC_A0, - GX_CC_C1, - GX_CC_A1, - GX_CC_C2, - GX_CC_A2, - GX_CC_TEXC, - GX_CC_TEXA, - GX_CC_RASC, - GX_CC_RASA, - GX_CC_ONE, - GX_CC_HALF, - GX_CC_KONST, - GX_CC_ZERO, -} GXTevColorArg; - -typedef enum _GXTevAlphaArg { - GX_CA_APREV, - GX_CA_A0, - GX_CA_A1, - GX_CA_A2, - GX_CA_TEXA, - GX_CA_RASA, - GX_CA_KONST, - GX_CA_ZERO, -} GXTevAlphaArg; - -typedef enum _GXTevOp { - GX_TEV_ADD = 0, - GX_TEV_SUB = 1, - GX_TEV_COMP_R8_GT = 8, - GX_TEV_COMP_R8_EQ = 9, - GX_TEV_COMP_GR16_GT = 10, - GX_TEV_COMP_GR16_EQ = 11, - GX_TEV_COMP_BGR24_GT = 12, - GX_TEV_COMP_BGR24_EQ = 13, - GX_TEV_COMP_RGB8_GT = 14, - GX_TEV_COMP_RGB8_EQ = 15, - GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, - GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, -} GXTevOp; - -typedef enum _GXTevBias { - GX_TB_ZERO, - GX_TB_ADDHALF, - GX_TB_SUBHALF, - GX_MAX_TEVBIAS, -} GXTevBias; - -typedef enum _GXTevScale { - GX_CS_SCALE_1, - GX_CS_SCALE_2, - GX_CS_SCALE_4, - GX_CS_DIVIDE_2, - GX_MAX_TEVSCALE, -} GXTevScale; - -typedef enum _GXTevKColorSel { - GX_TEV_KCSEL_8_8 = 0x00, - GX_TEV_KCSEL_7_8 = 0x01, - GX_TEV_KCSEL_6_8 = 0x02, - GX_TEV_KCSEL_5_8 = 0x03, - GX_TEV_KCSEL_4_8 = 0x04, - GX_TEV_KCSEL_3_8 = 0x05, - GX_TEV_KCSEL_2_8 = 0x06, - GX_TEV_KCSEL_1_8 = 0x07, - GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, - GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, - GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, - GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, - GX_TEV_KCSEL_K0 = 0x0C, - GX_TEV_KCSEL_K1 = 0x0D, - GX_TEV_KCSEL_K2 = 0x0E, - GX_TEV_KCSEL_K3 = 0x0F, - GX_TEV_KCSEL_K0_R = 0x10, - GX_TEV_KCSEL_K1_R = 0x11, - GX_TEV_KCSEL_K2_R = 0x12, - GX_TEV_KCSEL_K3_R = 0x13, - GX_TEV_KCSEL_K0_G = 0x14, - GX_TEV_KCSEL_K1_G = 0x15, - GX_TEV_KCSEL_K2_G = 0x16, - GX_TEV_KCSEL_K3_G = 0x17, - GX_TEV_KCSEL_K0_B = 0x18, - GX_TEV_KCSEL_K1_B = 0x19, - GX_TEV_KCSEL_K2_B = 0x1A, - GX_TEV_KCSEL_K3_B = 0x1B, - GX_TEV_KCSEL_K0_A = 0x1C, - GX_TEV_KCSEL_K1_A = 0x1D, - GX_TEV_KCSEL_K2_A = 0x1E, - GX_TEV_KCSEL_K3_A = 0x1F, -} GXTevKColorSel; - -typedef enum _GXTevKAlphaSel { - GX_TEV_KASEL_8_8 = 0x00, - GX_TEV_KASEL_7_8 = 0x01, - GX_TEV_KASEL_6_8 = 0x02, - GX_TEV_KASEL_5_8 = 0x03, - GX_TEV_KASEL_4_8 = 0x04, - GX_TEV_KASEL_3_8 = 0x05, - GX_TEV_KASEL_2_8 = 0x06, - GX_TEV_KASEL_1_8 = 0x07, - GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, - GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, - GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, - GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, - GX_TEV_KASEL_K0_R = 0x10, - GX_TEV_KASEL_K1_R = 0x11, - GX_TEV_KASEL_K2_R = 0x12, - GX_TEV_KASEL_K3_R = 0x13, - GX_TEV_KASEL_K0_G = 0x14, - GX_TEV_KASEL_K1_G = 0x15, - GX_TEV_KASEL_K2_G = 0x16, - GX_TEV_KASEL_K3_G = 0x17, - GX_TEV_KASEL_K0_B = 0x18, - GX_TEV_KASEL_K1_B = 0x19, - GX_TEV_KASEL_K2_B = 0x1A, - GX_TEV_KASEL_K3_B = 0x1B, - GX_TEV_KASEL_K0_A = 0x1C, - GX_TEV_KASEL_K1_A = 0x1D, - GX_TEV_KASEL_K2_A = 0x1E, - GX_TEV_KASEL_K3_A = 0x1F, -} GXTevKAlphaSel; - -typedef enum _GXTevKColorID { - GX_KCOLOR0 = 0, - GX_KCOLOR1, - GX_KCOLOR2, - GX_KCOLOR3, - GX_MAX_KCOLOR, -} GXTevKColorID; - -typedef enum _GXZTexOp { - GX_ZT_DISABLE, - GX_ZT_ADD, - GX_ZT_REPLACE, - GX_MAX_ZTEXOP, -} GXZTexOp; - -typedef enum _GXIndTexFormat { - GX_ITF_8, - GX_ITF_5, - GX_ITF_4, - GX_ITF_3, - GX_MAX_ITFORMAT, -} GXIndTexFormat; - -typedef enum _GXIndTexBiasSel { - GX_ITB_NONE, - GX_ITB_S, - GX_ITB_T, - GX_ITB_ST, - GX_ITB_U, - GX_ITB_SU, - GX_ITB_TU, - GX_ITB_STU, - GX_MAX_ITBIAS, -} GXIndTexBiasSel; - -typedef enum _GXIndTexAlphaSel { - GX_ITBA_OFF, - GX_ITBA_S, - GX_ITBA_T, - GX_ITBA_U, - GX_MAX_ITBALPHA, -} GXIndTexAlphaSel; - -typedef enum _GXIndTexMtxID { - GX_ITM_OFF, - GX_ITM_0, - GX_ITM_1, - GX_ITM_2, - GX_ITM_S0 = 5, - GX_ITM_S1, - GX_ITM_S2, - GX_ITM_T0 = 9, - GX_ITM_T1, - GX_ITM_T2, -} GXIndTexMtxID; - -typedef enum _GXIndTexWrap { - GX_ITW_OFF, - GX_ITW_256, - GX_ITW_128, - GX_ITW_64, - GX_ITW_32, - GX_ITW_16, - GX_ITW_0, - GX_MAX_ITWRAP, -} GXIndTexWrap; - -typedef enum _GXIndTexStageID { - GX_INDTEXSTAGE0, - GX_INDTEXSTAGE1, - GX_INDTEXSTAGE2, - GX_INDTEXSTAGE3, - GX_MAX_INDTEXSTAGE, -} GXIndTexStageID; - -typedef enum _GXIndTexScale { - GX_ITS_1, - GX_ITS_2, - GX_ITS_4, - GX_ITS_8, - GX_ITS_16, - GX_ITS_32, - GX_ITS_64, - GX_ITS_128, - GX_ITS_256, - GX_MAX_ITSCALE, -} GXIndTexScale; - -typedef enum _GXClipMode { - GX_CLIP_ENABLE = 0, - GX_CLIP_DISABLE = 1, -} GXClipMode; - -typedef enum _GXTlut { - GX_TLUT0 = 0, - GX_TLUT1 = 1, - GX_TLUT2 = 2, - GX_TLUT3 = 3, - GX_TLUT4 = 4, - GX_TLUT5 = 5, - GX_TLUT6 = 6, - GX_TLUT7 = 7, - GX_TLUT8 = 8, - GX_TLUT9 = 9, - GX_TLUT10 = 10, - GX_TLUT11 = 11, - GX_TLUT12 = 12, - GX_TLUT13 = 13, - GX_TLUT14 = 14, - GX_TLUT15 = 15, - GX_BIGTLUT0 = 16, - GX_BIGTLUT1 = 17, - GX_BIGTLUT2 = 18, - GX_BIGTLUT3 = 19, -} GXTlut; - -typedef enum _GXTlutFmt { - GX_TL_IA8, - GX_TL_RGB565, - GX_TL_RGB5A3, - GX_MAX_TLUTFMT, -} GXTlutFmt; - -typedef enum _GXMiscToken { - GX_MT_NULL = 0, - GX_MT_XF_FLUSH = 1, - GX_MT_DL_SAVE_CONTEXT = 2, - GX_MT_ABORT_WAIT_COPYOUT = 3, -} GXMiscToken; - -typedef enum _GXTexCacheSize { - GX_TEXCACHE_32K, - GX_TEXCACHE_128K, - GX_TEXCACHE_512K, - GX_TEXCACHE_NONE -} GXTexCacheSize; - -typedef enum _GXPerf0 { - GX_PERF0_VERTICES, - GX_PERF0_CLIP_VTX, - GX_PERF0_CLIP_CLKS, - GX_PERF0_XF_WAIT_IN, - GX_PERF0_XF_WAIT_OUT, - GX_PERF0_XF_XFRM_CLKS, - GX_PERF0_XF_LIT_CLKS, - GX_PERF0_XF_BOT_CLKS, - GX_PERF0_XF_REGLD_CLKS, - GX_PERF0_XF_REGRD_CLKS, - GX_PERF0_CLIP_RATIO, - - GX_PERF0_TRIANGLES, - GX_PERF0_TRIANGLES_CULLED, - GX_PERF0_TRIANGLES_PASSED, - GX_PERF0_TRIANGLES_SCISSORED, - GX_PERF0_TRIANGLES_0TEX, - GX_PERF0_TRIANGLES_1TEX, - GX_PERF0_TRIANGLES_2TEX, - GX_PERF0_TRIANGLES_3TEX, - GX_PERF0_TRIANGLES_4TEX, - GX_PERF0_TRIANGLES_5TEX, - GX_PERF0_TRIANGLES_6TEX, - GX_PERF0_TRIANGLES_7TEX, - GX_PERF0_TRIANGLES_8TEX, - GX_PERF0_TRIANGLES_0CLR, - GX_PERF0_TRIANGLES_1CLR, - GX_PERF0_TRIANGLES_2CLR, - - GX_PERF0_QUAD_0CVG, - GX_PERF0_QUAD_NON0CVG, - GX_PERF0_QUAD_1CVG, - GX_PERF0_QUAD_2CVG, - GX_PERF0_QUAD_3CVG, - GX_PERF0_QUAD_4CVG, - GX_PERF0_AVG_QUAD_CNT, - - GX_PERF0_CLOCKS, - GX_PERF0_NONE - -} GXPerf0; - -typedef enum _GXPerf1 { - GX_PERF1_TEXELS, - GX_PERF1_TX_IDLE, - GX_PERF1_TX_REGS, - GX_PERF1_TX_MEMSTALL, - GX_PERF1_TC_CHECK1_2, - GX_PERF1_TC_CHECK3_4, - GX_PERF1_TC_CHECK5_6, - GX_PERF1_TC_CHECK7_8, - GX_PERF1_TC_MISS, - - GX_PERF1_VC_ELEMQ_FULL, - GX_PERF1_VC_MISSQ_FULL, - GX_PERF1_VC_MEMREQ_FULL, - GX_PERF1_VC_STATUS7, - GX_PERF1_VC_MISSREP_FULL, - GX_PERF1_VC_STREAMBUF_LOW, - GX_PERF1_VC_ALL_STALLS, - GX_PERF1_VERTICES, - - GX_PERF1_FIFO_REQ, - GX_PERF1_CALL_REQ, - GX_PERF1_VC_MISS_REQ, - GX_PERF1_CP_ALL_REQ, - - GX_PERF1_CLOCKS, - GX_PERF1_NONE - -} GXPerf1; - -typedef enum _GXVCachePerf { - GX_VC_POS, - GX_VC_NRM, - GX_VC_CLR0, - GX_VC_CLR1, - GX_VC_TEX0, - GX_VC_TEX1, - GX_VC_TEX2, - GX_VC_TEX3, - GX_VC_TEX4, - GX_VC_TEX5, - GX_VC_TEX6, - GX_VC_TEX7, - GX_VC_ALL = 0xf - -} GXVCachePerf; - -typedef enum _GXFBClamp { - GX_CLAMP_NONE = 0, - GX_CLAMP_TOP = 1, - GX_CLAMP_BOTTOM = 2, -} GXFBClamp; - -typedef enum _GXCopyMode { - GX_COPY_PROGRESSIVE = 0, - GX_COPY_INTLC_EVEN = 2, - GX_COPY_INTLC_ODD = 3, -} GXCopyMode; - -typedef enum _GXAlphaReadMode { - GX_READ_00 = 0, - GX_READ_FF = 1, - GX_READ_NONE = 2, - -} _GXAlphaReadMode; - -#define VI_INTERLACE 0 -#define VI_NON_INTERLACE 1 -#define VI_PROGRESSIVE 2 -#define VI_3D 3 - -#define VI_NTSC 0 -#define VI_PAL 1 -#define VI_MPAL 2 -#define VI_DEBUG 3 -#define VI_DEBUG_PAL 4 -#define VI_EURGB60 5 -#define VI_GCA 6 - -#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace)) - -typedef enum { - // NTSC - VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE), - VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE), - VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE), - VI_TVMODE_NTSC_3D = VI_TVMODE(VI_NTSC, VI_3D), - // PAL - VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE), - VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE), - - // MPAL - VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE), - VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE), - - // Debug - VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE), - - // Debug PAL - VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE), - VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE), - - // EU RGB60 - VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE), - VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE), - - // GCA - VI_TVMODE_GCA_INT = VI_TVMODE(VI_GCA, VI_INTERLACE), - VI_TVMODE_GCA_DS = VI_TVMODE(VI_GCA, VI_NON_INTERLACE), - VI_TVMODE_GCA_PROG = VI_TVMODE(VI_GCA, VI_PROGRESSIVE), -} VITVMode; - -typedef enum { - VI_XFBMODE_SF = 0, - VI_XFBMODE_DF = 1, -} VIXFBMode; - -typedef void (*VIPositionCallback)(s16 x, s16 y); -typedef void (*VIRetraceCallback)(u32 retraceCount); - -// Structure to use with timing in vi.c (size 0x28). -typedef struct VITimingInfo { - u8 equ; // _00 - u16 acv; // _02 - u16 prbOdd; // _04 - u16 prbEven; // _06 - u16 psbOdd; // _08 - u16 psbEven; // _0A - u8 bs1; // _0C - u8 bs2; // _0D - u8 bs3; // _0E - u8 bs4; // _0F - u16 be1; // _10 - u16 be2; // _12 - u16 be3; // _14 - u16 be4; // _16 - u16 numHalfLines; // _18 - u16 hlw; // _1A - u8 hsy; // _1C - u8 hcs; // _1D - u8 hce; // _1E - u8 hbe640; // _1F - u16 hbs640; // _20 - u8 hbeCCIR656; // _24 - u16 hbsCCIR656; // _26 -} VITimingInfo; - -// Structure to use with HorVer in vi.c (size 0x58). -typedef struct VIPositionInfo { - u16 dispPosX; // _00 - u16 dispPosY; // _02 - u16 dispSizeX; // _04 - u16 dispSizeY; // _06 - u16 adjDispPosX; // _08 - u16 adjDispPosY; // _0A - u16 adjDispSizeY; // _0C - u16 adjPanPosY; // _0E - u16 adjPanSizeY; // _10 - u16 fbSizeX; // _12 - u16 fbSizeY; // _14 - u16 panPosX; // _16 - u16 panPosY; // _18 - u16 panSizeX; // _1A - u16 panSizeY; // _1C - VIXFBMode xfbMode; // _20 - u32 nonInter; // _24 - u32 tv; // _28 - u8 wordPerLine; // _2C - u8 std; // _2D - u8 wpl; // _2E - u32 bufAddr; // _30 - u32 tfbb; // _34 - u32 bfbb; // _38 - u8 xof; // _3C - BOOL isBlack; // _40 - BOOL is3D; // _44 - u32 rbufAddr; // _48 - u32 rtfbb; // _4C - u32 rbfbb; // _50 - VITimingInfo* timing; // _54 -} VIPositionInfo; - -typedef struct _GXRenderModeObj { - /*0x00*/ VITVMode viTVmode; - /*0x04*/ u16 fbWidth; - /*0x06*/ u16 efbHeight; - /*0x08*/ u16 xfbHeight; - /*0x0A*/ u16 viXOrigin; - /*0x0C*/ u16 viYOrigin; - /*0x0E*/ u16 viWidth; - /*0x10*/ u16 viHeight; - /*0x14*/ VIXFBMode xFBmode; - /*0x18*/ u8 field_rendering; - u8 aa; - u8 sample_pattern[12][2]; - u8 vfilter[7]; -} GXRenderModeObj; - -typedef struct _GXColor { - u8 r; - u8 g; - u8 b; - u8 a; -} GXColor; - -typedef struct _GXTexObj { - u32 dummy[8]; -} GXTexObj; - -typedef struct _GXTlutObj { - u32 dummy[3]; -} GXTlutObj; - -typedef struct _GXLightObj { - u32 dummy[16]; -} GXLightObj; - -typedef struct _GXVtxDescList { - GXAttr attr; - GXAttrType type; -} GXVtxDescList; - -typedef struct _GXColorS10 { - s16 r; - s16 g; - s16 b; - s16 a; -} GXColorS10; - -typedef struct _GXTexRegion { - u32 dummy[4]; -} GXTexRegion; - -typedef struct _GXTlutRegion { - u32 dummy[4]; -} GXTlutRegion; - -typedef struct _GXVtxAttrFmtList { - // total size: 0x10 - GXAttr attr; // offset 0x0, size 0x4 - GXCompCnt cnt; // offset 0x4, size 0x4 - GXCompType type; // offset 0x8, size 0x4 - u8 frac; // offset 0xC, size 0x1 -} GXVtxAttrFmtList; - -void GXSetTevDirect(GXTevStageID tev_stage); -void GXSetNumIndStages(u8 nIndStages); -void GXSetIndTexMtx(GXIndTexMtxID mtx_sel, f32 offset[2][3], s8 scale_exp); -void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord, GXTexMapID tex_map); -void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format, - GXIndTexBiasSel bias_sel, GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s, - GXIndTexWrap wrap_t, GXBool add_prev, GXBool ind_lod, - GXIndTexAlphaSel alpha_sel); -void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets, - GXBool replace_mode, GXIndTexMtxID matrix_sel); - -void GXSetTevIndTile (GXTevStageID tev_stage, GXIndTexStageID ind_stage, - u16 tilesize_s, u16 tilesize_t, - u16 tilespacing_s, u16 tilespacing_t, - GXIndTexFormat format, GXIndTexMtxID matrix_sel, - GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel); -void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s, GXIndTexScale scale_t); - -#define GX_NOP 0x00 -#define GX_DRAW_QUADS 0x80 -#define GX_DRAW_TRIANGLES 0x90 -#define GX_DRAW_TRIANGLE_STRIP 0x98 -#define GX_DRAW_TRIANGLE_FAN 0xA0 -#define GX_DRAW_LINES 0xA8 -#define GX_DRAW_LINE_STRIP 0xB0 -#define GX_DRAW_POINTS 0xB8 - -#define GX_LOAD_BP_REG 0x61 -#define GX_LOAD_CP_REG 0x08 -#define GX_LOAD_XF_REG 0x10 -#define GX_LOAD_INDX_A 0x20 -#define GX_LOAD_INDX_B 0x28 -#define GX_LOAD_INDX_C 0x30 -#define GX_LOAD_INDX_D 0x38 - -#define GX_CMD_CALL_DL 0x40 -#define GX_CMD_INVL_VC 0x48 - -#define GX_OPCODE_MASK 0xF8 -#define GX_VAT_MASK 0x07 - -void GXSetScissor(u32 left, u32 top, u32 wd, u32 ht); -void GXSetCullMode(GXCullMode mode); -void GXSetCoPlanar(GXBool enable); - -void GXBeginDisplayList(void* list, u32 size); -u32 GXEndDisplayList(void); -void GXCallDisplayList(const void* list, u32 nbytes); - -void GXDrawSphere(u8 numMajor, u8 numMinor); - -typedef struct { - u8 pad[128]; -} GXFifoObj; - -typedef void (*GXBreakPtCallback)(void); - -void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size); -void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr); -void GXGetFifoPtrs(GXFifoObj* fifo, void** readPtr, void** writePtr); -GXFifoObj* GXGetCPUFifo(void); -GXFifoObj* GXGetGPFifo(void); -void GXSetCPUFifo(GXFifoObj* fifo); -void GXSetGPFifo(GXFifoObj* fifo); -void GXSaveCPUFifo(GXFifoObj* fifo); -void GXGetFifoStatus(GXFifoObj* fifo, GXBool* overhi, GXBool* underlow, u32* fifoCount, - GXBool* cpu_write, GXBool* gp_read, GXBool* fifowrap); -void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle, GXBool* cmdIdle, - GXBool* brkpt); -void GXInitFifoLimits(GXFifoObj* fifo, u32 hiWaterMark, u32 loWaterMark); -GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb); -void GXEnableBreakPt(void* breakPt); -void GXDisableBreakPt(void); - -extern GXRenderModeObj GXNtsc240Ds; -extern GXRenderModeObj GXNtsc240DsAa; -extern GXRenderModeObj GXNtsc240Int; -extern GXRenderModeObj GXNtsc240IntAa; -extern GXRenderModeObj GXNtsc480IntDf; -extern GXRenderModeObj GXNtsc480Int; -extern GXRenderModeObj GXNtsc480IntAa; -extern GXRenderModeObj GXNtsc480Prog; -extern GXRenderModeObj GXNtsc480ProgAa; -extern GXRenderModeObj GXMpal240Ds; -extern GXRenderModeObj GXMpal240DsAa; -extern GXRenderModeObj GXMpal240Int; -extern GXRenderModeObj GXMpal240IntAa; -extern GXRenderModeObj GXMpal480IntDf; -extern GXRenderModeObj GXMpal480Int; -extern GXRenderModeObj GXMpal480IntAa; -extern GXRenderModeObj GXPal264Ds; -extern GXRenderModeObj GXPal264DsAa; -extern GXRenderModeObj GXPal264Int; -extern GXRenderModeObj GXPal264IntAa; -extern GXRenderModeObj GXPal528IntDf; -extern GXRenderModeObj GXPal528Int; -extern GXRenderModeObj GXPal524IntAa; -extern GXRenderModeObj GXEurgb60Hz240Ds; -extern GXRenderModeObj GXEurgb60Hz240DsAa; -extern GXRenderModeObj GXEurgb60Hz240Int; -extern GXRenderModeObj GXEurgb60Hz240IntAa; -extern GXRenderModeObj GXEurgb60Hz480IntDf; -extern GXRenderModeObj GXEurgb60Hz480Int; -extern GXRenderModeObj GXEurgb60Hz480IntAa; - -#define GX_MAX_Z24 0x00FFFFFF - -void GXSetCopyClear(GXColor clear_clr, u32 clear_z); -void GXAdjustForOverscan(GXRenderModeObj* rmin, GXRenderModeObj* rmout, u16 hor, u16 ver); -void GXCopyDisp(void* dest, GXBool clear); -void GXSetDispCopyGamma(GXGamma gamma); -void GXSetDispCopySrc(u16 left, u16 top, u16 wd, u16 ht); -void GXSetDispCopyDst(u16 wd, u16 ht); -u32 GXSetDispCopyYScale(f32 vscale); -void GXSetCopyFilter(GXBool aa, u8 sample_pattern[12][2], GXBool vf, u8 vfilter[7]); -void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt); -void GXSetTexCopySrc(u16 left, u16 top, u16 wd, u16 ht); -void GXSetTexCopyDst(u16 wd, u16 ht, GXTexFmt fmt, GXBool mipmap); -void GXCopyTex(void* dest, GXBool clear); - -void GXSetVtxDesc(GXAttr attr, GXAttrType type); -void GXSetVtxDescv(GXVtxDescList* list); -void GXClearVtxDesc(void); -void GXSetVtxAttrFmt(GXVtxFmt vtxfmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8 frac); -void GXSetNumTexGens(u8 nTexGens); -void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts); -void GXSetTexCoordGen2(GXTexCoordID dst_coord, GXTexGenType func, GXTexGenSrc src_param, u32 mtx, - GXBool normalize, u32 postmtx); -void GXSetLineWidth(u8 width, GXTexOffset texOffsets); -void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets); -void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable); -void GXSetArray(GXAttr attr, const void* data, u8 stride); -void GXInvalidateVtxCache(void); - -static inline void GXSetTexCoordGen(GXTexCoordID dst_coord, GXTexGenType func, - GXTexGenSrc src_param, u32 mtx) { - GXSetTexCoordGen2(dst_coord, func, src_param, mtx, GX_FALSE, GX_PTIDENTITY); -} - -GXBool GXGetTexObjMipMap(const GXTexObj* obj); -GXTexFmt GXGetTexObjFmt(const GXTexObj* obj); -u16 GXGetTexObjHeight(const GXTexObj* obj); -u16 GXGetTexObjWidth(const GXTexObj* obj); -GXTexWrapMode GXGetTexObjWrapS(const GXTexObj* obj); -GXTexWrapMode GXGetTexObjWrapT(const GXTexObj* obj); -void* GXGetTexObjData(const GXTexObj* obj); -void GXGetProjectionv(f32* p); -void GXGetLightPos(const GXLightObj* lt_obj, f32* x, f32* y, f32* z); -void GXGetLightColor(const GXLightObj* lt_obj, GXColor* color); -void GXGetVtxAttrFmt(GXVtxFmt idx, GXAttr attr, GXCompCnt* compCnt, GXCompType* compType, - u8* shift); - -void GXSetNumChans(u8 nChans); -void GXSetChanCtrl(GXChannelID chan, GXBool enable, GXColorSrc amb_src, GXColorSrc mat_src, - u32 light_mask, GXDiffuseFn diff_fn, GXAttnFn attn_fn); -void GXSetChanAmbColor(GXChannelID chan, GXColor amb_color); -void GXSetChanMatColor(GXChannelID chan, GXColor mat_color); - -void GXInitLightSpot(GXLightObj* lt_obj, f32 cutoff, GXSpotFn spot_func); -void GXInitLightDistAttn(GXLightObj* lt_obj, f32 ref_distance, f32 ref_brightness, - GXDistAttnFn dist_func); -void GXInitLightPos(GXLightObj* lt_obj, f32 x, f32 y, f32 z); -void GXInitLightDir(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz); -void GXInitLightColor(GXLightObj* lt_obj, GXColor color); -void GXInitLightAttn(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2); -void GXInitLightAttnA(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2); -void GXInitLightAttnK(GXLightObj* lt_obj, f32 k0, f32 k1, f32 k2); -void GXLoadLightObjImm(GXLightObj* lt_obj, GXLightID light); - -typedef void (*GXDrawDoneCallback)(void); -typedef void (*GXDrawSyncCallback)(u16 token); - -GXFifoObj* GXInit(void* base, u32 size); -GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb); -void GXSetDrawSync(u16 token); -GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback); - -void GXDrawDone(void); -void GXSetDrawDone(void); -void GXFlush(void); -void GXPixModeSync(void); -void GXSetMisc(GXMiscToken token, u32 val); - -extern void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1); -extern void GXClearGPMetric(); -extern void GXReadXfRasMetric(u32* xfWaitIn, u32* xfWaitOut, u32* rasBusy, u32* clocks); - -// Unused/inlined in P2. -extern void GXReadGPMetric(u32* count0, u32* count1); -extern u32 GXReadGP0Metric(); -extern u32 GXReadGP1Metric(); -extern void GXReadMemMetric(u32* cpReq, u32* tcReq, u32* cpuReadReq, u32* cpuWriteReq, u32* dspReq, u32* ioReq, u32* viReq, u32* peReq, - u32* rfReq, u32* fiReq); -extern void GXClearMemMetric(); -extern void GXReadPixMetric(u32* topIn, u32* topOut, u32* bottomIn, u32* bottomOut, u32* clearIn, u32* copyClocks); -extern void GXClearPixMetric(); -extern void GXSetVCacheMetric(GXVCachePerf attr); -extern void GXReadVCacheMetric(u32* check, u32* miss, u32* stall); -extern void GXClearVCacheMetric(); -extern void GXInitXfRasMetric(); -extern u32 GXReadClksPerVtx(); - -void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color); -void GXSetFogColor(GXColor color); -// ? GXSetFogRangeAdj(); -void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, - GXLogicOp op); -void GXSetColorUpdate(GXBool update_enable); -void GXSetAlphaUpdate(GXBool update_enable); -void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable); -void GXSetZCompLoc(GXBool before_tex); -void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt); -void GXSetDither(GXBool dither); -void GXSetDstAlpha(GXBool enable, u8 alpha); -// ? GXSetFieldMask(); -void GXSetFieldMode(u8 field_mode, u8 half_aspect_ratio); - -void GXSetTevOp(GXTevStageID id, GXTevMode mode); -void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b, GXTevColorArg c, - GXTevColorArg d); -void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b, GXTevAlphaArg c, - GXTevAlphaArg d); -void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp, - GXTevRegID out_reg); -void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp, - GXTevRegID out_reg); -void GXSetTevColor(GXTevRegID id, GXColor color); -void GXSetTevColorS10(GXTevRegID id, GXColorS10 color); -void GXSetTevKColor(GXTevKColorID id, GXColor color); -void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel sel); -void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel sel); -void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel ras_sel, GXTevSwapSel tex_sel); -void GXSetTevSwapModeTable(GXTevSwapSel table, GXTevColorChan red, GXTevColorChan green, - GXTevColorChan blue, GXTevColorChan alpha); -void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1); -void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias); -void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map, GXChannelID color); -void GXSetNumTevStages(u8 nStages); - -typedef GXTexRegion* (*GXTexRegionCallback)(const GXTexObj* obj, GXTexMapID id); - -void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format, - GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap); -void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format, - GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap, u32 tlut); -void GXInitTexObjData(GXTexObj* obj, const void* data); -void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod, - f32 max_lod, f32 lod_bias, GXBool bias_clamp, GXBool do_edge_lod, - GXAnisotropy max_aniso); -void GXLoadTexObj(GXTexObj* obj, GXTexMapID id); -u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod); -void GXInvalidateTexAll(); -void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t); -void GXInitTlutObj(GXTlutObj* obj, void* data, GXTlutFmt format, u16 entries); -void GXLoadTlut(const GXTlutObj* obj, GXTlut idx); -void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts); -void GXInitTexCacheRegion(GXTexRegion* region, GXBool is_32b_mipmap, u32 tmem_even, - GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd); -GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback); -void GXInvalidateTexRegion(const GXTexRegion* region); - -void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts); - -#define GX_PROJECTION_SZ 7 - - -void GXSetProjection(f32 mtx[4][4], GXProjectionType type); -void GXLoadPosMtxImm(f32 mtx[3][4], u32 id); -void GXLoadNrmMtxImm(f32 mtx[3][4], u32 id); -void GXLoadTexMtxImm(f32 mtx[][4], u32 id, GXTexMtxType type); - -void GXSetViewport(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz); -void GXSetCurrentMtx(u32 id); -void GXSetViewportJitter(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz, u32 field); -void GXSetScissorBoxOffset(s32 x_off, s32 y_off); -void GXSetClipMode(GXClipMode mode); - -#define GXFIFO_ADDR 0xCC008000 - -typedef union { - u8 u8; - u16 u16; - u32 u32; - u64 u64; - s8 s8; - s16 s16; - s32 s32; - s64 s64; - f32 f32; - f64 f64; -} PPCWGPipe; - -#define GXWGFifo (*(volatile PPCWGPipe*)GXFIFO_ADDR) - -static inline void GXPosition2f32(const f32 x, const f32 y) { - GXWGFifo.f32 = x; - GXWGFifo.f32 = y; -} - -static inline void GXPosition2u16(const u16 x, const u16 y) { - GXWGFifo.u16 = x; - GXWGFifo.u16 = y; -} - -static inline void GXPosition2s16(const s16 x, const s16 y) { - GXWGFifo.s16 = x; - GXWGFifo.s16 = y; -} - -static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z) { - GXWGFifo.s16 = x; - GXWGFifo.s16 = y; - GXWGFifo.s16 = z; -} - -static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z) { - GXWGFifo.f32 = x; - GXWGFifo.f32 = y; - GXWGFifo.f32 = z; -} - -static inline void GXNormal3f32(const f32 x, const f32 y, const f32 z) { - GXWGFifo.f32 = x; - GXWGFifo.f32 = y; - GXWGFifo.f32 = z; -} - -static inline void GXColor1u32(const u32 v) { - GXWGFifo.u32 = v; -} - -static inline void GXColor3u8(const u8 r, const u8 g, const u8 b) { - GXWGFifo.u8 = r; - GXWGFifo.u8 = g; - GXWGFifo.u8 = b; -} - -static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a) { - GXWGFifo.u8 = r; - GXWGFifo.u8 = g; - GXWGFifo.u8 = b; - GXWGFifo.u8 = a; -} - -static inline void GXTexCoord2s16(const s16 u, const s16 v) { - GXWGFifo.s16 = u; - GXWGFifo.s16 = v; -} - -static inline void GXTexCoord2f32(const f32 u, const f32 v) { - GXWGFifo.f32 = u; - GXWGFifo.f32 = v; -} - -static inline void GXPosition1x8(u8 index) { - GXWGFifo.u8 = index; -} - -static inline void GXColor1x8(u8 index) { - GXWGFifo.u8 = index; -} - -static inline void GXPosition1x16(u16 index) { - GXWGFifo.u16 = index; -} - -static inline void GXColor1x16(u16 index) { - GXWGFifo.u16 = index; -} - -static inline void GXTexCoord1x16(u16 index) { - GXWGFifo.u16 = index; -} - -static inline void GXEnd(void) {} - -// Upper words of the masks, since UIMM is only 16 bits -#define OS_CACHED_REGION_PREFIX 0x8000 -#define OS_UNCACHED_REGION_PREFIX 0xC000 -#define OS_PHYSICAL_MASK 0x3FFF - -#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16) -#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16) - -#define AT_ADDRESS - -typedef s64 OSTime; -typedef u32 OSTick; -u32 __OSBusClock(); // sync with OSLoMem.h -u32 __OSCoreClock(); // sync with OSLoMem.h -#define OS_BUS_CLOCK (u32)__OSBusClock -#define OS_CORE_CLOCK __OSCoreClock -#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4) - -#define OSPhysicalToCached(paddr) ((void*)((u32)(paddr) + OS_BASE_CACHED)) -#define OSPhysicalToUncached(paddr) ((void*)((u32)(paddr) + OS_BASE_UNCACHED)) -#define OSCachedToPhysical(caddr) ((u32)((u8*)(caddr)-OS_BASE_CACHED)) -#define OSUncachedToPhysical(ucaddr) ((u32)((u8*)(ucaddr)-OS_BASE_UNCACHED)) -#define OSCachedToUncached(caddr) ((void*)((u8*)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED))) -#define OSUncachedToCached(ucaddr) ((void*)((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED))) - -#define OSTicksToCycles(ticks) (((ticks) * ((OS_CORE_CLOCK * 2) / OS_TIMER_CLOCK)) / 2) -#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK) -#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000)) -#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000)) -#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000)) -#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK) -#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000)) -#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8) -#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000) - -#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0)) - -#define OSRoundUp32B(v) (((u32)(v + 31) & ~31)) -#define OSRoundDown32B(x) (((u32)(x)) & ~31) - -void* OSGetArenaHi(void); -void* OSGetArenaLo(void); -void OSSetArenaHi(void* newHi); -void OSSetArenaLo(void* newLo); - -void* OSAllocFromArenaLo(u32 size, u32 align); -void* OSAllocFromArenaHi(u32 size, u32 align); - -void OSInit(); - -OSTime OSGetTime(); -OSTick OSGetTick(); - -typedef struct OSCalendarTime { - int sec; // seconds after the minute [0, 61] - int min; // minutes after the hour [0, 59] - int hour; // hours since midnight [0, 23] - int mday; // day of the month [1, 31] - int mon; // month since January [0, 11] - int year; // years in AD [1, ...] - int wday; // days since Sunday [0, 6] - int yday; // days since January 1 [0, 365] - - int msec; // milliseconds after the second [0,999] - int usec; // microseconds after the millisecond [0,999] -} OSCalendarTime; - -OSTime OSCalendarTimeToTicks(OSCalendarTime* td); -void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td); - -typedef struct OSStopwatch { - char* name; - OSTime total; - u32 hits; - OSTime min; - OSTime max; - OSTime last; - BOOL running; -} OSStopwatch; - -void OSInitStopwatch(OSStopwatch* sw, char* name); -void OSStartStopwatch(OSStopwatch* sw); -void OSStopStopwatch(OSStopwatch* sw); -OSTime OSCheckStopwatch(OSStopwatch* sw); -void OSResetStopwatch(OSStopwatch* sw); -void OSDumpStopwatch(OSStopwatch* sw); - -#define OS_CONSOLE_MASK 0xf0000000 -#define OS_CONSOLE_RETAIL 0x00000000 -#define OS_CONSOLE_DEVELOPMENT 0x10000000 -#define OS_CONSOLE_TDEV 0x20000000 - -#define OS_CONSOLE_RETAIL4 0x00000004 -#define OS_CONSOLE_RETAIL3 0x00000003 -#define OS_CONSOLE_RETAIL2 0x00000002 -#define OS_CONSOLE_RETAIL1 0x00000001 -#define OS_CONSOLE_TDEVHW4 0x20000007 -#define OS_CONSOLE_TDEVHW3 0x20000006 -#define OS_CONSOLE_TDEVHW2 0x20000005 -#define OS_CONSOLE_TDEVHW1 0x20000004 -#define OS_CONSOLE_DEVHW4 0x10000007 -#define OS_CONSOLE_DEVHW3 0x10000006 -#define OS_CONSOLE_DEVHW2 0x10000005 -#define OS_CONSOLE_DEVHW1 0x10000004 -#define OS_CONSOLE_MINNOW 0x10000003 -#define OS_CONSOLE_ARTHUR 0x10000002 -#define OS_CONSOLE_PC_EMULATOR 0x10000001 -#define OS_CONSOLE_EMULATOR 0x10000000 - -u32 OSGetConsoleType(); - -#define OS_SOUND_MODE_MONO 0u -#define OS_SOUND_MODE_STEREO 1u - -u32 OSGetSoundMode(void); -void OSSetSoundMode(u32 mode); - -#define OS_PROGRESSIVE_MODE_OFF 0u -#define OS_PROGRESSIVE_MODE_ON 1u - -u32 OSGetProgressiveMode(void); -void OSSetProgressiveMode(u32 on); - -#define OS_LANG_ENGLISH 0u -#define OS_LANG_GERMAN 1u -#define OS_LANG_FRENCH 2u -#define OS_LANG_SPANISH 3u -#define OS_LANG_ITALIAN 4u -#define OS_LANG_DUTCH 5u - -u8 OSGetLanguage(void); -void OSSetLanguage(u8 language); - -#define OS_EURGB60_OFF 0u -#define OS_EURGB60_ON 1u - -u32 OSGetEuRgb60Mode(void); -void OSSetEuRgb60Mode(u32 on); - -void OSRegisterVersion(const char* id); - -BOOL OSDisableInterrupts(void); -BOOL OSEnableInterrupts(void); -BOOL OSRestoreInterrupts(BOOL level); - -#define OSHalt(msg) OSPanic(__FILE__, __LINE__, msg) - - -#define ASSERT(exp) ((void)0) - -void OSReport(const char* msg, ...); -void OSPanic(const char* file, int line, const char* msg, ...); -void OSFatal(GXColor fg, GXColor bg, const char* msg); - -u32 OSGetPhysicalMemSize(void); -u32 OSGetConsoleSimulatedMemSize(void); - -#define __OS_CONTEXT_FRAME 768 - -#define OS_CONTEXT_R0 0 -#define OS_CONTEXT_R1 4 -#define OS_CONTEXT_R2 8 -#define OS_CONTEXT_R3 12 -#define OS_CONTEXT_R4 16 -#define OS_CONTEXT_R5 20 -#define OS_CONTEXT_R6 24 -#define OS_CONTEXT_R7 28 -#define OS_CONTEXT_R8 32 -#define OS_CONTEXT_R9 36 -#define OS_CONTEXT_R10 40 -#define OS_CONTEXT_R11 44 -#define OS_CONTEXT_R12 48 -#define OS_CONTEXT_R13 52 -#define OS_CONTEXT_R14 56 -#define OS_CONTEXT_R15 60 -#define OS_CONTEXT_R16 64 -#define OS_CONTEXT_R17 68 -#define OS_CONTEXT_R18 72 -#define OS_CONTEXT_R19 76 -#define OS_CONTEXT_R20 80 -#define OS_CONTEXT_R21 84 -#define OS_CONTEXT_R22 88 -#define OS_CONTEXT_R23 92 -#define OS_CONTEXT_R24 96 -#define OS_CONTEXT_R25 100 -#define OS_CONTEXT_R26 104 -#define OS_CONTEXT_R27 108 -#define OS_CONTEXT_R28 112 -#define OS_CONTEXT_R29 116 -#define OS_CONTEXT_R30 120 -#define OS_CONTEXT_R31 124 - -#define OS_CONTEXT_CR 128 -#define OS_CONTEXT_LR 132 -#define OS_CONTEXT_CTR 136 -#define OS_CONTEXT_XER 140 - -#define OS_CONTEXT_FPR0 144 -#define OS_CONTEXT_FPR1 152 -#define OS_CONTEXT_FPR2 160 -#define OS_CONTEXT_FPR3 168 -#define OS_CONTEXT_FPR4 176 -#define OS_CONTEXT_FPR5 184 -#define OS_CONTEXT_FPR6 192 -#define OS_CONTEXT_FPR7 200 -#define OS_CONTEXT_FPR8 208 -#define OS_CONTEXT_FPR9 216 -#define OS_CONTEXT_FPR10 224 -#define OS_CONTEXT_FPR11 232 -#define OS_CONTEXT_FPR12 240 -#define OS_CONTEXT_FPR13 248 -#define OS_CONTEXT_FPR14 256 -#define OS_CONTEXT_FPR15 264 -#define OS_CONTEXT_FPR16 272 -#define OS_CONTEXT_FPR17 280 -#define OS_CONTEXT_FPR18 288 -#define OS_CONTEXT_FPR19 296 -#define OS_CONTEXT_FPR20 304 -#define OS_CONTEXT_FPR21 312 -#define OS_CONTEXT_FPR22 320 -#define OS_CONTEXT_FPR23 328 -#define OS_CONTEXT_FPR24 336 -#define OS_CONTEXT_FPR25 344 -#define OS_CONTEXT_FPR26 352 -#define OS_CONTEXT_FPR27 360 -#define OS_CONTEXT_FPR28 368 -#define OS_CONTEXT_FPR29 376 -#define OS_CONTEXT_FPR30 384 -#define OS_CONTEXT_FPR31 392 - -#define OS_CONTEXT_FPSCR 400 - -#define OS_CONTEXT_SRR0 408 -#define OS_CONTEXT_SRR1 412 - -#define OS_CONTEXT_MODE 416 -#define OS_CONTEXT_STATE 418 - -#define OS_CONTEXT_GQR0 420 -#define OS_CONTEXT_GQR1 424 -#define OS_CONTEXT_GQR2 428 -#define OS_CONTEXT_GQR3 432 -#define OS_CONTEXT_GQR4 436 -#define OS_CONTEXT_GQR5 440 -#define OS_CONTEXT_GQR6 444 -#define OS_CONTEXT_GQR7 448 -#define __OSCONTEXT_PADDING 452 - -#define OS_CONTEXT_PSF0 456 -#define OS_CONTEXT_PSF1 464 -#define OS_CONTEXT_PSF2 472 -#define OS_CONTEXT_PSF3 480 -#define OS_CONTEXT_PSF4 488 -#define OS_CONTEXT_PSF5 496 -#define OS_CONTEXT_PSF6 504 -#define OS_CONTEXT_PSF7 512 -#define OS_CONTEXT_PSF8 520 -#define OS_CONTEXT_PSF9 528 -#define OS_CONTEXT_PSF10 536 -#define OS_CONTEXT_PSF11 544 -#define OS_CONTEXT_PSF12 552 -#define OS_CONTEXT_PSF13 560 -#define OS_CONTEXT_PSF14 568 -#define OS_CONTEXT_PSF15 576 -#define OS_CONTEXT_PSF16 584 -#define OS_CONTEXT_PSF17 592 -#define OS_CONTEXT_PSF18 600 -#define OS_CONTEXT_PSF19 608 -#define OS_CONTEXT_PSF20 616 -#define OS_CONTEXT_PSF21 624 -#define OS_CONTEXT_PSF22 632 -#define OS_CONTEXT_PSF23 640 -#define OS_CONTEXT_PSF24 648 -#define OS_CONTEXT_PSF25 656 -#define OS_CONTEXT_PSF26 664 -#define OS_CONTEXT_PSF27 672 -#define OS_CONTEXT_PSF28 680 -#define OS_CONTEXT_PSF29 688 -#define OS_CONTEXT_PSF30 696 -#define OS_CONTEXT_PSF31 704 -#define OS_CONTEXT_STATE_EXC 0x02u - -#define OS_CONTEXT_STATE_FPSAVED 0x01u - -typedef struct OSContext { - u32 gpr[32]; - u32 cr; - u32 lr; - u32 ctr; - u32 xer; - - f64 fpr[32]; - - u32 fpscr_pad; - u32 fpscr; - - u32 srr0; - u32 srr1; - - u16 mode; - u16 state; - - u32 gqr[8]; - u32 psf_pad; - f64 psf[32]; - -} OSContext; - -u32 OSSaveContext(OSContext* context); -void OSClearContext(OSContext* context); -OSContext* OSGetCurrentContext(); -void OSSetCurrentContext(OSContext* context); - -typedef struct OSAlarm OSAlarm; -typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context); - -struct OSAlarm { - OSAlarmHandler handler; - u32 tag; - OSTime fire; - OSAlarm* prev; - OSAlarm* next; - OSTime period; - OSTime start; -}; - -void OSInitAlarm(void); -void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler); -void OSSetAlarmTag(OSAlarm* alarm, u32 tag); -void OSSetAbsAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler); -void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler); -void OSCreateAlarm(OSAlarm* alarm); -void OSCancelAlarm(OSAlarm* alarm); -void OSCancelAlarms(u32 tag); - -BOOL OSCheckAlarmQueue(void); - - -typedef int OSHeapHandle; -typedef void (*OSAllocVisitor)(void* obj, u32 size); -void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps); -OSHeapHandle OSCreateHeap(void* start, void* end); -void OSDestroyHeap(OSHeapHandle heap); -void OSAddToHeap(OSHeapHandle heap, void* start, void* end); -OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap); -void* OSAllocFromHeap(OSHeapHandle heap, u32 size); -void* OSAllocFixed(void** rstart, void** rend); -void OSFreeToHeap(OSHeapHandle heap, void* ptr); -long OSCheckHeap(OSHeapHandle heap); -void OSDumpHeap(OSHeapHandle heap); -void *OSAllocFixed(void **rstart, void **rend); -u32 OSReferentSize(void* ptr); -void OSVisitAllocated(OSAllocVisitor visitor); -extern volatile OSHeapHandle __OSCurrHeap; -#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size)) -#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr)) - - -void* OSGetArenaHi(void); -void* OSGetArenaLo(void); -void OSSetArenaHi(void* addr); -void OSSetArenaLo(void* addr); -void* OSAllocFromArenaLo(u32 size, u32 align); -void* OSAllocFromArenaLo(u32 size, u32 align); - - -void DCInvalidateRange(void* addr, u32 nBytes); -void DCFlushRange(void* addr, u32 nBytes); -void DCStoreRange(void* addr, u32 nBytes); -void DCFlushRangeNoSync(void* addr, u32 nBytes); -void DCStoreRangeNoSync(void* addr, u32 nBytes); -void DCZeroRange(void* addr, u32 nBytes); -void DCTouchRange(void* addr, u32 nBytes); -void ICInvalidateRange(void* addr, u32 nBytes); - -#define LC_BASE_PREFIX 0xE000 -#define LC_BASE (LC_BASE_PREFIX << 16) -#define LCGetBase() ((void*)LC_BASE) - -void LCEnable(); -void LCDisable(void); -void LCLoadBlocks(void* destTag, void* srcAddr, u32 numBlocks); -void LCStoreBlocks(void* destAddr, void* srcTag, u32 numBlocks); -u32 LCLoadData(void* destAddr, void* srcAddr, u32 nBytes); -u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes); -u32 LCQueueLength(void); -void LCQueueWait(u32 len); -void LCFlushQueue(void); - - - -#define OS_ERROR_SYSTEM_RESET 0 -#define OS_ERROR_MACHINE_CHECK 1 -#define OS_ERROR_DSI 2 -#define OS_ERROR_ISI 3 -#define OS_ERROR_EXTERNAL_INTERRUPT 4 -#define OS_ERROR_ALIGNMENT 5 -#define OS_ERROR_PROGRAM 6 -#define OS_ERROR_FLOATING_POINT 7 -#define OS_ERROR_DECREMENTER 8 -#define OS_ERROR_SYSTEM_CALL 9 -#define OS_ERROR_TRACE 10 -#define OS_ERROR_PERFORMACE_MONITOR 11 -#define OS_ERROR_BREAKPOINT 12 -#define OS_ERROR_SYSTEM_INTERRUPT 13 -#define OS_ERROR_THERMAL_INTERRUPT 14 -#define OS_ERROR_PROTECTION 15 -#define OS_ERROR_FPE 16 - -#define OS_ERROR_MAX (OS_ERROR_FPE + 1) - -typedef u16 OSError; -typedef void (*OSErrorHandler)( OSError error, OSContext* context, ... ); - -OSErrorHandler OSSetErrorHandler(OSError code, OSErrorHandler handler); - - - -/* "include\dolphin\os\OSException.h" line 4 "dolphin/os/OSContext.h" */ -/* end "dolphin/os/OSContext.h" */ -/* "include\dolphin\os\OSException.h" line 5 "dolphin/types.h" */ -/* end "dolphin/types.h" */ - -#define __OS_EXCEPTION_SYSTEM_RESET 0 -#define __OS_EXCEPTION_MACHINE_CHECK 1 -#define __OS_EXCEPTION_DSI 2 -#define __OS_EXCEPTION_ISI 3 -#define __OS_EXCEPTION_EXTERNAL_INTERRUPT 4 -#define __OS_EXCEPTION_ALIGNMENT 5 -#define __OS_EXCEPTION_PROGRAM 6 -#define __OS_EXCEPTION_FLOATING_POINT 7 -#define __OS_EXCEPTION_DECREMENTER 8 -#define __OS_EXCEPTION_SYSTEM_CALL 9 -#define __OS_EXCEPTION_TRACE 10 -#define __OS_EXCEPTION_PERFORMACE_MONITOR 11 -#define __OS_EXCEPTION_BREAKPOINT 12 -#define __OS_EXCEPTION_SYSTEM_INTERRUPT 13 -#define __OS_EXCEPTION_THERMAL_INTERRUPT 14 -#define __OS_EXCEPTION_MAX \ - (__OS_EXCEPTION_THERMAL_INTERRUPT+1) - -typedef u8 __OSException; -typedef void (*__OSExceptionHandler)(__OSException exception, OSContext* context); - -#define OS_EXCEPTION_SAVE_GPRS(context) \ - stw r0, OS_CONTEXT_R0(context); \ - stw r1, OS_CONTEXT_R1(context); \ - stw r2, OS_CONTEXT_R2(context); \ - stmw r6, OS_CONTEXT_R6(context); \ - mfspr r0, GQR1; \ - stw r0, OS_CONTEXT_GQR1(context); \ - mfspr r0, GQR2; \ - stw r0, OS_CONTEXT_GQR2(context); \ - mfspr r0, GQR3; \ - stw r0, OS_CONTEXT_GQR3(context); \ - mfspr r0, GQR4; \ - stw r0, OS_CONTEXT_GQR4(context); \ - mfspr r0, GQR5; \ - stw r0, OS_CONTEXT_GQR5(context); \ - mfspr r0, GQR6; \ - stw r0, OS_CONTEXT_GQR6(context); \ - mfspr r0, GQR7; \ - stw r0, OS_CONTEXT_GQR7(context); - - -#define EXI_MEMORY_CARD_59 0x00000004 -#define EXI_MEMORY_CARD_123 0x00000008 -#define EXI_MEMORY_CARD_251 0x00000010 -#define EXI_MEMORY_CARD_507 0x00000020 - -#define EXI_MEMORY_CARD_1019 0x00000040 -#define EXI_MEMORY_CARD_2043 0x00000080 - -#define EXI_MEMORY_CARD_1019A 0x00000140 -#define EXI_MEMORY_CARD_1019B 0x00000240 -#define EXI_MEMORY_CARD_1019C 0x00000340 -#define EXI_MEMORY_CARD_1019D 0x00000440 -#define EXI_MEMORY_CARD_1019E 0x00000540 -#define EXI_MEMORY_CARD_1019F 0x00000640 -#define EXI_MEMORY_CARD_1019G 0x00000740 - -#define EXI_MEMORY_CARD_2043A 0x00000180 -#define EXI_MEMORY_CARD_2043B 0x00000280 -#define EXI_MEMORY_CARD_2043C 0x00000380 -#define EXI_MEMORY_CARD_2043D 0x00000480 -#define EXI_MEMORY_CARD_2043E 0x00000580 -#define EXI_MEMORY_CARD_2043F 0x00000680 -#define EXI_MEMORY_CARD_2043G 0x00000780 - -#define EXI_USB_ADAPTER 0x01010000 -#define EXI_NPDP_GDEV 0x01020000 - -#define EXI_MODEM 0x02020000 -#define EXI_ETHER 0x04020200 -#define EXI_ETHER_VIEWER 0x04220001 -#define EXI_STREAM_HANGER 0x04130000 - -#define EXI_MARLIN 0x03010000 - -#define EXI_IS_VIEWER 0x05070000 - -#define EXI_FREQ_1M 0 -#define EXI_FREQ_2M 1 -#define EXI_FREQ_4M 2 -#define EXI_FREQ_8M 3 -#define EXI_FREQ_16M 4 -#define EXI_FREQ_32M 5 - -#define EXI_READ 0 -#define EXI_WRITE 1 - -#define EXI_STATE_IDLE 0x00 -#define EXI_STATE_DMA 0x01 -#define EXI_STATE_IMM 0x02 -#define EXI_STATE_BUSY (EXI_STATE_DMA | EXI_STATE_IMM) -#define EXI_STATE_SELECTED 0x04 -#define EXI_STATE_ATTACHED 0x08 -#define EXI_STATE_LOCKED 0x10 - -BOOL EXIProbe(s32 chan); -s32 EXIProbeEx(s32 chan); - -s32 EXIGetType(s32 chan, u32 dev, u32* type); -char* EXIGetTypeString(u32 type); -u32 EXIClearInterrupts(s32 chan, BOOL exi, BOOL tc, BOOL ext); -s32 EXIGetID(s32 chan, u32 dev, u32* id); - -typedef void (*EXICallback)(s32 chan, OSContext* context); - - - -#define OS_GQR_F32 0x0000 -#define OS_GQR_U8 0x0004 -#define OS_GQR_U16 0x0005 -#define OS_GQR_S8 0x0006 -#define OS_GQR_S16 0x0007 - -#define OS_FASTCAST_U8 2 -#define OS_FASTCAST_U16 3 -#define OS_FASTCAST_S8 4 -#define OS_FASTCAST_S16 5 -// clang-format off -static inline void OSInitFastCast(void) { -} -// clang-format off - -static inline s16 __OSf32tos16(register f32 inF) -{ - u32 tmp; - register u32* tmpPtr = &tmp; - register s16 out; - // clang-format off - // clang-format on - - return out; -} - -static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); } - -static inline u8 __OSf32tou8(register f32 inF) -{ - u32 tmp; - register u32 *tmpPtr = &tmp; - register u8 out; - // clang-format off - // clang-format on - - return out; -} - -static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); } - -static inline s8 __OSf32tos8(register f32 inF) -{ - u32 tmp; - register u32 *tmpPtr = &tmp; - register s8 out; - // clang-format off - // clang-format on - - return out; -} - -static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); } - -static inline u16 __OSf32tou16(register f32 inF) -{ - u32 tmp; - register u32 *tmpPtr = &tmp; - register u16 out; - // clang-format off - // clang-format on - - return out; -} - -static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); } - -static inline float __OSs8tof32(register const s8* arg) { - register float ret; - - - return ret; -} - -static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); } - -static inline float __OSs16tof32(register const s16* arg) { - register float ret; - - - return ret; -} - -static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); } - -static inline float __OSu8tof32(register const u8* arg) { - register float ret; - - return ret; -} - -static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); } - -static inline float __OSu16tof32(register const u16* arg) { - register float ret; - - return ret; -} - -static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); } - -#define OS_FONT_ENCODE_ANSI 0u -#define OS_FONT_ENCODE_SJIS 1u -#define OS_FONT_ENCODE_UTF8 3u // UTF-8 [RFC 3629] -#define OS_FONT_ENCODE_UTF16 4u // UTF-16BE [RFC 2781] -#define OS_FONT_ENCODE_UTF32 5u // UTF-32 -#define OS_FONT_ENCODE_MAX 5u -#define OS_FONT_ENCODE_VOID 0xffffu - -#define OS_FONT_PROPORTIONAL FALSE -#define OS_FONT_FIXED TRUE - -u16 OSGetFontEncode(void); -u16 OSSetFontEncode(u16 encode); - -#define __OS_INTERRUPT_MEM_0 0 -#define __OS_INTERRUPT_MEM_1 1 -#define __OS_INTERRUPT_MEM_2 2 -#define __OS_INTERRUPT_MEM_3 3 -#define __OS_INTERRUPT_MEM_ADDRESS 4 -#define __OS_INTERRUPT_DSP_AI 5 -#define __OS_INTERRUPT_DSP_ARAM 6 -#define __OS_INTERRUPT_DSP_DSP 7 -#define __OS_INTERRUPT_AI_AI 8 -#define __OS_INTERRUPT_EXI_0_EXI 9 -#define __OS_INTERRUPT_EXI_0_TC 10 -#define __OS_INTERRUPT_EXI_0_EXT 11 -#define __OS_INTERRUPT_EXI_1_EXI 12 -#define __OS_INTERRUPT_EXI_1_TC 13 -#define __OS_INTERRUPT_EXI_1_EXT 14 -#define __OS_INTERRUPT_EXI_2_EXI 15 -#define __OS_INTERRUPT_EXI_2_TC 16 -#define __OS_INTERRUPT_PI_CP 17 -#define __OS_INTERRUPT_PI_PE_TOKEN 18 -#define __OS_INTERRUPT_PI_PE_FINISH 19 -#define __OS_INTERRUPT_PI_SI 20 -#define __OS_INTERRUPT_PI_DI 21 -#define __OS_INTERRUPT_PI_RSW 22 -#define __OS_INTERRUPT_PI_ERROR 23 -#define __OS_INTERRUPT_PI_VI 24 -#define __OS_INTERRUPT_PI_DEBUG 25 -#define __OS_INTERRUPT_PI_HSP 26 -#define __OS_INTERRUPT_MAX 32 - -#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt)) - -#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0) -#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1) -#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2) -#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3) -#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS) -#define OS_INTERRUPTMASK_MEM \ - (OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \ - OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS) -#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI) -#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM) -#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP) -#define OS_INTERRUPTMASK_DSP \ - (OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP) -#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI) -#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI) -#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI) -#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC) -#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT) -#define OS_INTERRUPTMASK_EXI_0 \ - (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT) -#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI) -#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC) -#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT) -#define OS_INTERRUPTMASK_EXI_1 \ - (OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT) -#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI) -#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC) -#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) -#define OS_INTERRUPTMASK_EXI \ - (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | \ - OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | \ - OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) -#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN) -#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH) -#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH) -#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP) -#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI) -#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI) -#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW) -#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR) -#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI) -#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG) -#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP) -#define OS_INTERRUPTMASK_PI \ - (OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | \ - OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | \ - OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | \ - OS_INTERRUPTMASK_PI_HSP) - -typedef s16 __OSInterrupt; -typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt, OSContext* context); - -typedef u32 OSInterruptMask; - -extern volatile __OSInterrupt __OSLastInterrupt; -extern volatile u32 __OSLastInterruptSrr0; -extern volatile OSTime __OSLastInterruptTime; - -__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, __OSInterruptHandler handler); - -__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt interrupt); - -void __OSDispatchInterrupt(__OSException exception, OSContext* context); - -OSInterruptMask OSGetInterruptMask(void); -OSInterruptMask OSSetInterruptMask(OSInterruptMask mask); -OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask); -OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask); - - -#define OS_PROTECT_CHAN0 0 -#define OS_PROTECT_CHAN1 1 -#define OS_PROTECT_CHAN2 2 -#define OS_PROTECT_CHAN3 3 - -#define OS_PROTECT_CONTROL_NONE 0x00 -#define OS_PROTECT_CONTROL_READ 0x01 -#define OS_PROTECT_CONTROL_WRITE 0x02 -#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE) - -void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control); - - -typedef struct OSThread OSThread; -typedef struct OSThreadQueue OSThreadQueue; -typedef struct OSThreadLink OSThreadLink; -typedef s32 OSPriority; // 0 highest, 31 lowest - -typedef struct OSMutex OSMutex; -typedef struct OSMutexQueue OSMutexQueue; -typedef struct OSMutexLink OSMutexLink; -typedef struct OSCond OSCond; - -typedef void (*OSIdleFunction)(void* param); -typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to); - -struct OSThreadQueue { - OSThread* head; - OSThread* tail; -}; - -struct OSThreadLink { - OSThread* next; - OSThread* prev; -}; - -struct OSMutexQueue { - OSMutex* head; - OSMutex* tail; -}; - -struct OSMutexLink { - OSMutex* next; - OSMutex* prev; -}; - -struct OSThread { - OSContext context; - u16 state; - u16 attr; - s32 suspend; - OSPriority priority; - OSPriority base; - void* val; - OSThreadQueue* queue; - OSThreadLink link; - OSThreadQueue queueJoin; - OSMutex* mutex; - OSMutexQueue queueMutex; - OSThreadLink linkActive; - u8* stackBase; - u32* stackEnd; -}; - -enum OS_THREAD_STATE { - OS_THREAD_STATE_READY = 1, - OS_THREAD_STATE_RUNNING = 2, - OS_THREAD_STATE_WAITING = 4, - OS_THREAD_STATE_MORIBUND = 8 -}; - -#define OS_THREAD_ATTR_DETACH 0x0001u - -#define OS_THREAD_STACK_MAGIC 0xDEADBABE - -#define OS_PRIORITY_MIN 0 // highest -#define OS_PRIORITY_MAX 31 // lowest -#define OS_PRIORITY_IDLE OS_PRIORITY_MAX - - -void OSInitThreadQueue(OSThreadQueue* queue); -OSThread* OSGetCurrentThread(void); -BOOL OSIsThreadSuspended(OSThread* thread); -BOOL OSIsThreadTerminated(OSThread* thread); -s32 OSDisableScheduler(void); -s32 OSEnableScheduler(void); -void OSYieldThread(void); -BOOL OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, - OSPriority priority, u16 attr); -void OSExitThread(void* val); -void OSCancelThread(OSThread* thread); -BOOL OSJoinThread(OSThread* thread, void** val); -void OSDetachThread(OSThread* thread); -s32 OSResumeThread(OSThread* thread); -s32 OSSuspendThread(OSThread* thread); -BOOL OSSetThreadPriority(OSThread* thread, OSPriority priority); -OSPriority OSGetThreadPriority(OSThread* thread); -void OSSleepThread(OSThreadQueue* queue); -void OSWakeupThread(OSThreadQueue* queue); - -OSThread* OSSetIdleFunction(OSIdleFunction idleFunction, void* param, void* stack, u32 stackSize); -OSThread* OSGetIdleFunction(void); -void OSClearStack(u8 val); -long OSCheckActiveThreads(void); - -/* end "dolphin/os/OSThread.h" */ -typedef struct OSMessageQueue OSMessageQueue; -typedef void* OSMessage; - -struct OSMessageQueue { - OSThreadQueue queueSend; - OSThreadQueue queueReceive; - OSMessage* msgArray; - s32 msgCount; - s32 firstIndex; - s32 usedCount; -}; - -// Flags to turn blocking on/off when sending/receiving message -#define OS_MESSAGE_NOBLOCK 0 -#define OS_MESSAGE_BLOCK 1 - -void OSInitMessageQueue(OSMessageQueue* mq, OSMessage* msgArray, s32 msgCount); -BOOL OSSendMessage(OSMessageQueue* mq, OSMessage msg, s32 flags); -BOOL OSJamMessage(OSMessageQueue* mq, OSMessage msg, s32 flags); -BOOL OSReceiveMessage(OSMessageQueue* mq, OSMessage* msg, s32 flags); - - -#define OS_MODULE_VERSION 2 -typedef struct OSModuleHeader OSModuleHeader; - -typedef u32 OSModuleID; -typedef struct OSModuleQueue OSModuleQueue; -typedef struct OSModuleLink OSModuleLink; -typedef struct OSModuleInfo OSModuleInfo; -typedef struct OSSectionInfo OSSectionInfo; -typedef struct OSImportInfo OSImportInfo; -typedef struct OSRel OSRel; - -struct OSModuleQueue { - OSModuleInfo* head; - OSModuleInfo* tail; -}; - -struct OSModuleLink { - OSModuleInfo* next; - OSModuleInfo* prev; -}; - -struct OSModuleInfo { - OSModuleID id; // unique identifier for the module - OSModuleLink link; // doubly linked list of modules - u32 numSections; // # of sections - u32 sectionInfoOffset; // offset to section info table - u32 nameOffset; // offset to module name - u32 nameSize; // size of module name - u32 version; // version number -}; - -struct OSModuleHeader { - // CAUTION: info must be the 1st member - OSModuleInfo info; - - // OS_MODULE_VERSION == 1 - u32 bssSize; // total size of bss sections in bytes - u32 relOffset; - u32 impOffset; - u32 impSize; // size in bytes - u8 prologSection; // section # for prolog function - u8 epilogSection; // section # for epilog function - u8 unresolvedSection; // section # for unresolved function - u8 bssSection; // section # for bss section (set at run-time) - u32 prolog; // prolog function offset - u32 epilog; // epilog function offset - u32 unresolved; // unresolved function offset - - // OS_MODULE_VERSION == 2 - u32 align; // module alignment constraint - u32 bssAlign; // bss alignment constraint - - // OS_MODULE_VERSION == 3 -}; - -#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset)) - -struct OSSectionInfo { - u32 offset; - u32 size; -}; - -// OSSectionInfo.offset bit -#define OS_SECTIONINFO_EXEC 0x1 -#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1) - -struct OSImportInfo { - OSModuleID id; // external module id - u32 offset; // offset to OSRel instructions -}; - -struct OSRel { - u16 offset; // byte offset from the previous entry - u8 type; - u8 section; - u32 addend; -}; - -#define R_DOLPHIN_NOP 201 // C9h current offset += OSRel.offset -#define R_DOLPHIN_SECTION 202 // CAh current section = OSRel.section -#define R_DOLPHIN_END 203 // CBh -#define R_DOLPHIN_MRKREF 204 // CCh - -void OSSetStringTable(const void* stringTable); -BOOL OSLink(OSModuleInfo* newModule, void* bss); -BOOL OSUnlink(OSModuleInfo* oldModule); - -OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset); - -// debugger notification -void OSNotifyLink(OSModuleInfo* module); -void OSNotifyUnlink(OSModuleInfo* module); - -struct OSMutex { - OSThreadQueue queue; - OSThread* thread; // the current owner - s32 count; // lock count - OSMutexLink link; // for OSThread.queueMutex -}; - -struct OSCond { - OSThreadQueue queue; -}; - -void OSInitMutex(OSMutex* mutex); -void OSLockMutex(OSMutex* mutex); -void OSUnlockMutex(OSMutex* mutex); -BOOL OSTryLockMutex(OSMutex* mutex); -void OSInitCond(OSCond* cond); -void OSWaitCond(OSCond* cond, OSMutex* mutex); -void OSSignalCond(OSCond* cond); - -#define OS_RESETCODE_RESTART 0x80000000 -#define OS_RESETCODE_SYSTEM 0x40000000 - -#define OS_RESETCODE_EXEC 0xC0000000 -#define OS_RESETCODE_NETCONFIG 0xC0010000 - -#define OS_RESET_TIMEOUT OSMillisecondsToTicks(1000) - -#define OS_RESET_RESTART 0 -#define OS_RESET_HOTRESET 1 -#define OS_RESET_SHUTDOWN 2 - -#define OS_RESET_PRIO_SO 110 -#define OS_RESET_PRIO_IP 111 -#define OS_RESET_PRIO_CARD 127 -#define OS_RESET_PRIO_PAD 127 -#define OS_RESET_PRIO_GX 127 -#define OS_RESET_PRIO_ALARM 4294967295 - -typedef BOOL (*OSResetFunction)(BOOL final); -typedef struct OSResetFunctionInfo OSResetFunctionInfo; - -struct OSResetFunctionInfo { - // public - OSResetFunction func; - u32 priority; - - // private - OSResetFunctionInfo* next; - OSResetFunctionInfo* prev; -}; - -u32 OSGetResetCode(void); - -typedef void (*OSResetCallback)(void); - -BOOL OSGetResetButtonState(void); - -BOOL OSGetResetSwitchState(void); -OSResetCallback OSSetResetCallback(OSResetCallback callback); - -#define SI_MAX_CHAN 4 -#define SI_MAX_COMCSR_INLNGTH 128 -#define SI_MAX_COMCSR_OUTLNGTH 128 -#define SI_ERROR_UNDER_RUN 0x0001 -#define SI_ERROR_OVER_RUN 0x0002 -#define SI_ERROR_COLLISION 0x0004 -#define SI_ERROR_NO_RESPONSE 0x0008 -#define SI_ERROR_WRST 0x0010 -#define SI_ERROR_RDST 0x0020 -#define SI_ERROR_UNKNOWN 0x0040 -#define SI_ERROR_BUSY 0x0080 -#define SI_CHAN0 0 -#define SI_CHAN1 1 -#define SI_CHAN2 2 -#define SI_CHAN3 3 -#define SI_CHAN0_BIT 0x80000000 -#define SI_CHAN1_BIT 0x40000000 -#define SI_CHAN2_BIT 0x20000000 -#define SI_CHAN3_BIT 0x10000000 -#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan)) -#define SI_TYPE_MASK 0x18000000u -#define SI_TYPE_N64 0x00000000u -#define SI_TYPE_DOLPHIN 0x08000000u -#define SI_TYPE_GC SI_TYPE_DOLPHIN -#define SI_GC_WIRELESS 0x80000000 -#define SI_GC_NOMOTOR 0x20000000 -#define SI_GC_STANDARD 0x01000000 -#define SI_WIRELESS_RECEIVED 0x40000000 -#define SI_WIRELESS_IR 0x04000000 -#define SI_WIRELESS_STATE 0x02000000 -#define SI_WIRELESS_ORIGIN 0x00200000 -#define SI_WIRELESS_FIX_ID 0x00100000 -#define SI_WIRELESS_TYPE 0x000f0000 -#define SI_WIRELESS_LITE_MASK 0x000c0000 -#define SI_WIRELESS_LITE 0x00040000 -#define SI_WIRELESS_CONT_MASK 0x00080000 -#define SI_WIRELESS_CONT 0x00000000 -#define SI_WIRELESS_ID 0x00c0ff00 -#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID) -#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000) -#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000) -#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000) -#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000) -#define SI_GBA (SI_TYPE_N64 | 0x00040000) -#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD) -#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS) -#define SI_GC_WAVEBIRD \ - (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID) -#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000) -#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000) - -u32 SIProbe(s32 chan); -char* SIGetTypeString(u32 type); -void SIRefreshSamplingRate(void); -void SISetSamplingRate(u32 msec); - -#define DVD_MIN_TRANSFER_SIZE 32 - -#define DVD_STATE_FATAL_ERROR -1 -#define DVD_STATE_END 0 -#define DVD_STATE_BUSY 1 -#define DVD_STATE_WAITING 2 -#define DVD_STATE_COVER_CLOSED 3 -#define DVD_STATE_NO_DISK 4 -#define DVD_STATE_COVER_OPEN 5 -#define DVD_STATE_WRONG_DISK 6 -#define DVD_STATE_MOTOR_STOPPED 7 -#define DVD_STATE_PAUSING 8 -#define DVD_STATE_IGNORED 9 -#define DVD_STATE_CANCELED 10 -#define DVD_STATE_RETRY 11 - -#define DVD_FILEINFO_READY 0 -#define DVD_FILEINFO_BUSY 1 - -#define DVD_RESULT_GOOD 0 -#define DVD_RESULT_FATAL_ERROR -1 -#define DVD_RESULT_IGNORED -2 -#define DVD_RESULT_CANCELED -3 - -#define DVD_AIS_SUCCESS 0x0 - -typedef struct DVDDiskID { - char gameName[4]; - char company[2]; - u8 diskNumber; - u8 gameVersion; - u8 streaming; - u8 streamingBufSize; // 0 = default - u8 padding[22]; // 0's are stored -} DVDDiskID; - -typedef struct DVDCommandBlock DVDCommandBlock; - -typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block); - -struct DVDCommandBlock { - DVDCommandBlock* next; - DVDCommandBlock* prev; - u32 command; - s32 state; - u32 offset; - u32 length; - void* addr; - u32 currTransferSize; - u32 transferredSize; - DVDDiskID* id; - DVDCBCallback callback; - void* userData; -}; - -typedef struct DVDFileInfo DVDFileInfo; - -typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo); - -struct DVDFileInfo { - DVDCommandBlock cb; - u32 startAddr; - u32 length; - DVDCallback callback; -}; - -typedef struct { - u32 entryNum; - u32 location; - u32 next; -} DVDDir; - -typedef struct { - u32 entryNum; - BOOL isDir; - char* name; -} DVDDirEntry; - -void DVDInit(); -BOOL DVDClose(DVDFileInfo* f); -BOOL DVDSetAutoFatalMessaging(BOOL); -void DVDReset(); -s32 DVDCancel(DVDCommandBlock* block); -BOOL DVDOpen(char* fileName, DVDFileInfo* fileInfo); -BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo); -s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block); -BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDCancel(DVDCommandBlock* block); -BOOL DVDCancelAllAsync(DVDCBCallback callback); -s32 DVDCancelAll(void); -BOOL DVDPrepareStreamAsync(DVDFileInfo* fInfo, u32 length, u32 offset, DVDCallback callback); -s32 DVDPrepareStream(DVDFileInfo* fInfo, u32 length, u32 offset); - -BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDCancelStream(DVDCommandBlock* block); - -BOOL DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDStopStreamAtEnd(DVDCommandBlock* block); - -BOOL DVDGetStreamErrorStatusAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamErrorStatus(DVDCommandBlock* block); - -BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamPlayAddr(DVDCommandBlock* block); - -s32 DVDGetDriveStatus(); - -s32 DVDConvertPathToEntrynum(char* pathPtr); - -BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, - DVDCallback callback, s32 prio); - -BOOL DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio); - - -#define DVDReadAsync(fileInfo, addr, length, offset, callback) \ - DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2) -#define DVDRead(fileInfo, addr, length, offset) \ - DVDReadPrio((fileInfo), (addr), (length), (offset), 2) - -#define DVDSeekAsync(fileInfo, offset, callback) \ - DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2) - -extern u32 __PADFixBits; - -#define PAD_SPEC_0 0 -#define PAD_SPEC_1 1 -#define PAD_SPEC_2 2 -#define PAD_SPEC_3 3 -#define PAD_SPEC_4 4 -#define PAD_SPEC_5 5 - -#define PAD_CHAN0 0 -#define PAD_CHAN1 1 -#define PAD_CHAN2 2 -#define PAD_CHAN3 3 -#define PAD_CHANMAX 4 - -#define PAD_MOTOR_STOP 0 -#define PAD_MOTOR_RUMBLE 1 -#define PAD_MOTOR_STOP_HARD 2 - -#define PAD_ERR_NONE 0 -#define PAD_ERR_NO_CONTROLLER -1 -#define PAD_ERR_NOT_READY -2 -#define PAD_ERR_TRANSFER -3 - -#define PAD_BUTTON_LEFT 0x0001 -#define PAD_BUTTON_RIGHT 0x0002 -#define PAD_BUTTON_DOWN 0x0004 -#define PAD_BUTTON_UP 0x0008 -#define PAD_TRIGGER_Z 0x0010 -#define PAD_TRIGGER_R 0x0020 -#define PAD_TRIGGER_L 0x0040 -#define PAD_BUTTON_A 0x0100 -#define PAD_BUTTON_B 0x0200 -#define PAD_BUTTON_X 0x0400 -#define PAD_BUTTON_Y 0x0800 -#define PAD_BUTTON_MENU 0x1000 -#define PAD_BUTTON_START 0x1000 - -#define PAD_CHAN0_BIT 0x80000000 -#define PAD_CHAN1_BIT 0x40000000 -#define PAD_CHAN2_BIT 0x20000000 -#define PAD_CHAN3_BIT 0x10000000 - -#define PADButtonDown(buttonLast, button) ((((buttonLast) ^ (button)) & (button))) - -#define PADButtonUp(buttonLast, button) ((((buttonLast) ^ (button)) & (buttonLast))) - - -typedef void (*PADSamplingCallback)(void); - -typedef struct PADStatus { - u16 button; - s8 stickX; - s8 stickY; - s8 substickX; - s8 substickY; - u8 triggerL; - u8 triggerR; - u8 analogA; - u8 analogB; - s8 err; -} PADStatus; - -BOOL PADInit(); -u32 PADRead(PADStatus* status); -BOOL PADReset(u32 mask); -BOOL PADRecalibrate(u32 mask); -void PADClamp(PADStatus* status); -void PADClampCircle(PADStatus* status); -void PADControlMotor(s32 chan, u32 cmd); -void PADSetSpec(u32 spec); -void PADControlAllMotors(const u32* cmdArr); -void PADSetAnalogMode(u32 mode); -PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback); - - -typedef struct { - f32 x, y, z; -} Vec, *VecPtr, Point3d, *Point3dPtr; - -typedef struct { - s16 x; - s16 y; - s16 z; -} S16Vec, *S16VecPtr; - -typedef struct { - f32 x, y, z, w; -} Quaternion, *QuaternionPtr, Qtrn, *QtrnPtr; - -typedef f32 Mtx[3][4]; - -typedef f32 (*MtxPtr)[4]; - -typedef f32 ROMtx[4][3]; - -typedef f32 (*ROMtxPtr)[3]; - -typedef f32 Mtx44[4][4]; - -typedef f32 (*Mtx44Ptr)[4]; - - - - -#define GEKKO - -#define MTX_USE_PS - -#define MTX_PTR_OFFSET 3 - -#define MTX44_PTR_OFFSET 4 - -typedef struct { - - u32 numMtx; - MtxPtr stackBase; - MtxPtr stackPtr; - -} MtxStack, *MtxStackPtr; - -#define MTXDegToRad(a) ((a)*0.01745329252f) -#define MTXRadToDeg(a) ((a)*57.29577951f) -#define MTXRowCol(m, r, c) ((m)[(r)][(c)]) - -void C_MTXIdentity(Mtx m); -void C_MTXCopy(const Mtx src, Mtx dst); -void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab); -void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count); -void C_MTXTranspose(const Mtx src, Mtx xPose); -u32 C_MTXInverse(const Mtx src, Mtx inv); -u32 C_MTXInvXpose(const Mtx src, Mtx invX); - -void PSMTXIdentity(Mtx m); -void PSMTXCopy(const Mtx src, Mtx dst); -void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab); -void PSMTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count); -void PSMTXTranspose(const Mtx src, Mtx xPose); -u32 PSMTXInverse(const Mtx src, Mtx inv); -u32 PSMTXInvXpose(const Mtx src, Mtx invX); - -#define MTXIdentity PSMTXIdentity -#define MTXCopy PSMTXCopy -#define MTXConcat PSMTXConcat -#define MTXConcatArray PSMTXConcatArray -#define MTXTranspose PSMTXTranspose -#define MTXInverse PSMTXInverse -#define MTXInvXpose PSMTXInvXpose - - -void C_MTXMultVec(const Mtx m, const Vec* src, Vec* dst); -void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); -void C_MTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); -void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); - - -void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); -void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); -void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); -void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); - - -#define MTXMultVec PSMTXMultVec -#define MTXMultVecArray PSMTXMultVecArray -#define MTXMultVecSR PSMTXMultVecSR -#define MTXMultVecArraySR PSMTXMultVecArraySR - - -void C_MTXQuat(Mtx m, const Quaternion* q); -void C_MTXReflect(Mtx m, const Vec* p, const Vec* n); - -void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT); -void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT); -void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS); -void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS); - -void C_MTXRotRad(Mtx m, char axis, f32 rad); -void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA); -void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); - - -void PSMTXQuat(Mtx m, const Quaternion* q); -void PSMTXReflect(Mtx m, const Vec* p, const Vec* n); - -void PSMTXTrans(Mtx m, f32 xT, f32 yT, f32 zT); -void PSMTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT); -void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS); -void PSMTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS); - -void PSMTXRotRad(Mtx m, char axis, f32 rad); -void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA); -void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); - - - -#define MTXQuat PSMTXQuat -#define MTXReflect PSMTXReflect -#define MTXTrans PSMTXTrans -#define MTXTransApply PSMTXTransApply -#define MTXScale PSMTXScale -#define MTXScaleApply PSMTXScaleApply -#define MTXRotRad PSMTXRotRad -#define MTXRotTrig PSMTXRotTrig -#define MTXRotAxisRad PSMTXRotAxisRad - -#define MTXRotDeg(m, axis, deg) PSMTXRotRad(m, axis, MTXDegToRad(deg)) -#define MTXRotAxisDeg(m, axis, deg) PSMTXRotAxisRad(m, axis, MTXDegToRad(deg)) - -void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target); - -#define MTXLookAt C_MTXLookAt - -void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f); -void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f); -void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f); - -#define MTXFrustum C_MTXFrustum -#define MTXPerspective C_MTXPerspective -#define MTXOrtho C_MTXOrtho - -void C_MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS, - f32 transT); - -void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, - f32 transT); - -void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, - f32 transT); - -#define MTXLightFrustum C_MTXLightFrustum -#define MTXLightPerspective C_MTXLightPerspective -#define MTXLightOrtho C_MTXLightOrtho - -void C_VECAdd(const Vec* a, const Vec* b, Vec* ab); -void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b); -void C_VECScale(const Vec* src, Vec* dst, f32 scale); -void C_VECNormalize(const Vec* src, Vec* unit); -f32 C_VECSquareMag(const Vec* v); -f32 C_VECMag(const Vec* v); -f32 C_VECDotProduct(const Vec* a, const Vec* b); -void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb); -f32 C_VECSquareDistance(const Vec* a, const Vec* b); -f32 C_VECDistance(const Vec* a, const Vec* b); -void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst); -void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half); - -void PSVECAdd(const Vec* a, const Vec* b, Vec* ab); -void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b); -void PSVECScale(const Vec* src, Vec* dst, f32 scale); -void PSVECNormalize(const Vec* src, Vec* unit); -f32 PSVECSquareMag(const Vec* v); -f32 PSVECMag(const Vec* v); -f32 PSVECDotProduct(const Vec* a, const Vec* b); -void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb); -f32 PSVECSquareDistance(const Vec* a, const Vec* b); -f32 PSVECDistance(const Vec* a, const Vec* b); - - -// TODO - -#define VECAdd PSVECAdd -#define VECSubtract PSVECSubtract -#define VECScale PSVECScale -#define VECNormalize PSVECNormalize -#define VECSquareMag PSVECSquareMag -#define VECMag PSVECMag -#define VECDotProduct PSVECDotProduct -#define VECCrossProduct PSVECCrossProduct -#define VECSquareDistance PSVECSquareDistance -#define VECDistance PSVECDistance - - -#define VECReflect C_VECReflect -#define VECHalfAngle C_VECHalfAngle - -void C_QUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r); -void C_QUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r); -void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq); -void C_QUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r); -void C_QUATScale(const Quaternion* q, Quaternion* r, f32 scale); -f32 C_QUATDotProduct(const Quaternion* p, const Quaternion* q); -void C_QUATNormalize(const Quaternion* src, Quaternion* unit); -void C_QUATInverse(const Quaternion* src, Quaternion* inv); -void C_QUATExp(const Quaternion* q, Quaternion* r); -void C_QUATLogN(const Quaternion* q, Quaternion* r); - -void C_QUATMakeClosest(const Quaternion* q, const Quaternion* qto, Quaternion* r); -void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad); -void C_QUATMtx(Quaternion* r, const Mtx m); - -void C_QUATLerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); -void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); -void C_QUATSquad(const Quaternion* p, const Quaternion* a, const Quaternion* b, const Quaternion* q, - Quaternion* r, f32 t); -void C_QUATCompA(const Quaternion* qprev, const Quaternion* q, const Quaternion* qnext, - Quaternion* a); - - -void PSQUATAdd(const Quaternion* p, const Quaternion* q, Quaternion* r); -void PSQUATSubtract(const Quaternion* p, const Quaternion* q, Quaternion* r); -void PSQUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq); -void PSQUATDivide(const Quaternion* p, const Quaternion* q, Quaternion* r); -void PSQUATScale(const Quaternion* q, Quaternion* r, f32 scale); -f32 PSQUATDotProduct(const Quaternion* p, const Quaternion* q); -void PSQUATNormalize(const Quaternion* src, Quaternion* unit); -void PSQUATInverse(const Quaternion* src, Quaternion* inv); - - - -#define QUATAdd PSQUATAdd -#define QUATSubtract PSQUATSubtract -#define QUATMultiply PSQUATMultiply -#define QUATDivide PSQUATDivide -#define QUATScale PSQUATScale -#define QUATDotProduct PSQUATDotProduct -#define QUATNormalize PSQUATNormalize -#define QUATInverse PSQUATInverse - -#define QUATExp C_QUATExp -#define QUATLogN C_QUATLogN -#define QUATMakeClosest C_QUATMakeClosest -#define QUATRotAxisRad C_QUATRotAxisRad -#define QUATMtx C_QUATMtx -#define QUATLerp C_QUATLerp -#define QUATSlerp C_QUATSlerp -#define QUATSquad C_QUATSquad -#define QUATCompA C_QUATCompA - -void PSMTXReorder(const Mtx src, ROMtx dest); -void PSMTXROMultVecArray(const ROMtx m, const Vec* srcBase, Vec* dstBase, u32 count); -void PSMTXROSkin2VecArray(const ROMtx m0, const ROMtx m1, const f32* wtBase, const Vec* srcBase, - Vec* dstBase, u32 count); -void PSMTXMultS16VecArray(const Mtx m, const S16Vec* srcBase, Vec* dstBase, u32 count); -void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count); - -void MTXInitStack(MtxStack* sPtr, u32 numMtx); -MtxPtr MTXPush(MtxStack* sPtr, const Mtx m); -MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m); -MtxPtr MTXPushInv(MtxStack* sPtr, const Mtx m); -MtxPtr MTXPushInvXpose(MtxStack* sPtr, const Mtx m); -MtxPtr MTXPop(MtxStack* sPtr); -MtxPtr MTXGetStackPtr(const MtxStack* sPtr); - -#define MTXAllocStack(sPtr, numMtx) \ - (((MtxStackPtr)(sPtr))->stackBase = (MtxPtr)OSAlloc(((numMtx) * sizeof(Mtx)))) - -#define MTXFreeStack(sPtr) (OSFree((void*)(((MtxStackPtr)(sPtr))->stackBase))) - - - - -/* end "dolphin/mtx.h" */ -/* "include\dolphin.h" line 10 "dolphin/gx.h" */ -/* end "dolphin/gx.h" */ -/* "include\dolphin.h" line 11 "dolphin/vi.h" */ - -#define _DOLPHIN_VI - -/* "include\dolphin\vi.h" line 3 "dolphin/gx/GXStruct.h" */ -/* end "dolphin/gx/GXStruct.h" */ -/* "include\dolphin\vi.h" line 4 "dolphin/vifuncs.h" */ - -#define _DOLPHIN_VIFUNCS - -/* "include\dolphin\vifuncs.h" line 3 "dolphin/types.h" */ -/* end "dolphin/types.h" */ - -/* "include\dolphin\vifuncs.h" line 5 "dolphin/vitypes.h" */ -/* end "dolphin/vitypes.h" */ - - -u32 VIGetNextField(void); -u32 VIGetRetraceCount(); -VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback callback); -VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback); -void __VIGetCurrentPosition(s16* x, s16* y); -u32 VIGetDTVStatus(void); - - -void VIInit(void); -void VIConfigure(const GXRenderModeObj* rm); -void VIFlush(void); -u32 VIGetTvFormat(void); -void VISetNextFrameBuffer(void* fb); -void VIWaitForRetrace(void); -void VISetBlack(BOOL black); - - - - -/* end "dolphin/vi.h" */ -/* "include\dolphin.h" line 12 "dolphin/ai.h" */ - -#define _DOLPHIN_AI - -/* "include\dolphin\ai.h" line 3 "types.h" */ -/* end "types.h" */ - - -typedef void (*AISCallback)(u32 count); -typedef void (*AIDCallback)(); - -AIDCallback AIRegisterDMACallback(AIDCallback callback); -void AIInitDMA(u32 start_addr, u32 length); -BOOL AIGetDMAEnableFlag(); -void AIStartDMA(); -void AIStopDMA(); -u32 AIGetDMABytesLeft(); -u32 AIGetDMAStartAddr(); -u32 AIGetDMALength(); -u32 AIGetDSPSampleRate(); -void AISetDSPSampleRate(u32 rate); -AISCallback AIRegisterStreamCallback(AISCallback callback); -u32 AIGetStreamSampleCount(); -void AIResetStreamSampleCount(); -void AISetStreamTrigger(u32 trigger); -u32 AIGetStreamTrigger(); -void AISetStreamPlayState(u32 state); -u32 AIGetStreamPlayState(); -void AISetStreamSampleRate(u32 rate); -u32 AIGetStreamSampleRate(); -void AISetStreamVolLeft(u8 vol); -void AISetStreamVolRight(u8 vol); -u8 AIGetStreamVolLeft(); -u8 AIGetStreamVolRight(); -void AIInit(u8* stack); -BOOL AICheckInit(); -void AIReset(); - - -/* end "dolphin/ai.h" */ -/* "include\dolphin.h" line 13 "dolphin/ar.h" */ - -#define _DOLPHIN_AR - -/* "include\dolphin\ar.h" line 3 "types.h" */ -/* end "types.h" */ - - -#define AR_STACK_INDEX_ENTRY_SIZE sizeof(u32) - -#define ARAM_DIR_MRAM_TO_ARAM 0x00 -#define ARAM_DIR_ARAM_TO_MRAM 0x01 - -#define AR_CLEAR_INTERNAL_ALL 0x00 -#define AR_CLEAR_INTERNAL_USER 0x01 -#define AR_CLEAR_EXPANSION 0x02 - -typedef void (*ARCallback)(void); - -ARCallback ARRegisterDMACallback(ARCallback callback); -u32 ARGetDMAStatus(void); -void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length); -u32 ARInit(u32* stack_index_addr, u32 num_entries); -u32 ARGetBaseAddress(void); -BOOL ARCheckInit(void); -void ARReset(void); -u32 ARAlloc(u32 length); -u32 ARFree(u32* length); -u32 ARGetSize(void); -u32 ARGetInternalSize(void); -void ARSetSize(void); -void ARClear(u32 flag); - -void __ARClearInterrupt(void); -u16 __ARGetInterruptStatus(void); - -#define ARStartDMARead(mmem, aram, len) ARStartDMA(ARAM_DIR_ARAM_TO_MRAM, mmem, aram, len) -#define ARStartDMAWrite(mmem, aram, len) ARStartDMA(ARAM_DIR_MRAM_TO_ARAM, mmem, aram, len) - - - -/* end "dolphin/ar.h" */ -/* "include\dolphin.h" line 14 "dolphin/arq.h" */ - -#define _DOLPHIN_ARQ - -/* "include\dolphin\arq.h" line 3 "types.h" */ -/* end "types.h" */ - -/* "include\dolphin\arq.h" line 5 "dolphin/ar.h" */ -/* end "dolphin/ar.h" */ - - - -/* "include\dolphin\arq.h" line 11 "dolphin/ar.h" */ -/* end "dolphin/ar.h" */ - -#define ARQ_DMA_ALIGNMENT 32 -#define ARQ_CHUNK_SIZE_DEFAULT 4096 - -#define ARQ_TYPE_MRAM_TO_ARAM ARAM_DIR_MRAM_TO_ARAM -#define ARQ_TYPE_ARAM_TO_MRAM ARAM_DIR_ARAM_TO_MRAM - -#define ARQ_PRIORITY_LOW 0 -#define ARQ_PRIORITY_HIGH 1 - -typedef void (*ARQCallback)(u32 pointerToARQRequest); - -typedef struct ARQRequest { - - struct ARQRequest* next; - u32 owner; - u32 type; - u32 priority; - u32 source; - u32 dest; - u32 length; - ARQCallback callback; - -} ARQRequest; - -void ARQInit(void); -void ARQReset(void); -void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source, u32 dest, - u32 length, ARQCallback callback); -void ARQRemoveRequest(ARQRequest* task); -void ARQRemoveOwnerRequest(u32 owner); -void ARQFlushQueue(void); -void ARQSetChunkSize(u32 size); -u32 ARQGetChunkSize(void); -BOOL ARQCheckInit(void); - - - -/* end "dolphin/arq.h" */ -/* "include\dolphin.h" line 15 "dolphin/dsp.h" */ - -#define _DOLPHIN_DSP - -/* "include\dolphin\dsp.h" line 3 "types.h" */ -/* end "types.h" */ -/* "include\dolphin\dsp.h" line 4 "dolphin/os.h" */ -/* end "dolphin/os.h" */ - - -#define DSP_TASK_FLAG_CLEARALL 0x00000000 -#define DSP_TASK_FLAG_ATTACHED 0x00000001 -#define DSP_TASK_FLAG_CANCEL 0x00000002 - -#define DSP_TASK_STATE_INIT 0 -#define DSP_TASK_STATE_RUN 1 -#define DSP_TASK_STATE_YIELD 2 -#define DSP_TASK_STATE_DONE 3 - -typedef void (*DSPCallback)(void* task); - -typedef struct STRUCT_DSP_TASK { - vu32 state; - vu32 priority; - vu32 flags; - u16* iram_mmem_addr; - u32 iram_length; - u32 iram_addr; - - u16* dram_mmem_addr; - u32 dram_length; - u32 dram_addr; - - u16 dsp_init_vector; - u16 dsp_resume_vector; - - DSPCallback init_cb; - DSPCallback res_cb; - DSPCallback done_cb; - DSPCallback req_cb; - - struct STRUCT_DSP_TASK* next; - struct STRUCT_DSP_TASK* prev; - - OSTime t_context; - OSTime t_task; - -} DSPTaskInfo; - -void DSPInit(); -void DSPReset(); -void DSPHalt(); -void DSPSendMailToDSP(u32 mail); -u32 DSPCheckMailToDSP(); -u32 DSPCheckMailFromDSP(); -u32 DSPGetDMAStatus(); - -DSPTaskInfo* DSPAddTask(DSPTaskInfo* task); - -void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next); -void __DSP_boot_task(DSPTaskInfo* task); -void __DSP_remove_task(DSPTaskInfo* task); -void __DSP_add_task(DSPTaskInfo* task); -void __DSP_debug_printf(const char* fmt, ...); - - -#define CARD_ENCODE_ANSI 0u -#define CARD_ENCODE_SJIS 1u - -/* Sizes */ -#define CARD_WORKAREA_SIZE (5 * 8 * 1024) -#define CARD_READ_SIZE 512 -#define CARD_MAX_FILE 127 -#define CARD_COMMENT_SIZE 64 -#define CARD_FILENAME_MAX 32 -#define CARD_ICON_MAX 8 -#define CARD_ICON_WIDTH 32 -#define CARD_ICON_HEIGHT 32 -#define CARD_BANNER_WIDTH 96 -#define CARD_BANNER_HEIGHT 32 - -/* Icon animation */ -#define CARD_MODE_NORMAL 0 -#define CARD_MODE_FAST 1 - -#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK) -#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK) -#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK) -#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK) -#define CARDSetBannerFormat(stat, f) \ - ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f))) -#define CARDSetIconAnim(stat, f) \ - ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f))) -#define CARDSetIconFormat(stat, n, f) \ - ((stat)->iconFormat = \ - (u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n))))) -#define CARDSetIconSpeed(stat, n, f) \ - ((stat)->iconSpeed = \ - (u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n))))) -#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr)) -#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr)) -#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo) - -#define CARD_RESULT_UNLOCKED 1 -#define CARD_RESULT_READY 0 -#define CARD_RESULT_BUSY -1 -#define CARD_RESULT_WRONGDEVICE -2 -#define CARD_RESULT_NOCARD -3 -#define CARD_RESULT_NOFILE -4 -#define CARD_RESULT_IOERROR -5 -#define CARD_RESULT_BROKEN -6 -#define CARD_RESULT_EXIST -7 -#define CARD_RESULT_NOENT -8 -#define CARD_RESULT_INSSPACE -9 -#define CARD_RESULT_NOPERM -10 -#define CARD_RESULT_LIMIT -11 -#define CARD_RESULT_NAMETOOLONG -12 -#define CARD_RESULT_ENCODING -13 -#define CARD_RESULT_CANCELED -14 -#define CARD_RESULT_FATAL_ERROR -128 - -#define CARD_STAT_ICON_NONE 0 -#define CARD_STAT_ICON_C8 1 -#define CARD_STAT_ICON_RGB5A3 2 -#define CARD_STAT_ICON_MASK 3 - -#define CARD_STAT_BANNER_NONE 0 -#define CARD_STAT_BANNER_C8 1 -#define CARD_STAT_BANNER_RGB5A3 2 -#define CARD_STAT_BANNER_MASK 3 - -#define CARD_STAT_ANIM_LOOP 0x00 -#define CARD_STAT_ANIM_BOUNCE 0x04 -#define CARD_STAT_ANIM_MASK 0x04 - -#define CARD_STAT_SPEED_END 0 -#define CARD_STAT_SPEED_FAST 1 -#define CARD_STAT_SPEED_MIDDLE 2 -#define CARD_STAT_SPEED_SLOW 3 -#define CARD_STAT_SPEED_MASK 3 - -#define CARD_ATTR_PUBLIC 0x04u -#define CARD_ATTR_NO_COPY 0x08u -#define CARD_ATTR_NO_MOVE 0x10u -#define CARD_ATTR_GLOBAL 0x20u -#define CARD_ATTR_COMPANY 0x40u - -typedef struct CARDFileInfo { - s32 chan; - s32 fileNo; - - s32 offset; - s32 length; - u16 iBlock; - u16 __padding; -} CARDFileInfo; - -typedef struct CARDStat { - char fileName[CARD_FILENAME_MAX]; - u32 length; - u32 time; // seconds since 01/01/2000 midnight - u8 gameName[4]; - u8 company[2]; - - u8 bannerFormat; - u8 __padding; - u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set. - u16 iconFormat; - u16 iconSpeed; - u32 commentAddr; // offset to the pair of 32 byte character strings. - - u32 offsetBanner; - u32 offsetBannerTlut; - u32 offsetIcon[CARD_ICON_MAX]; - u32 offsetIconTlut; - u32 offsetData; -} CARDStat; - -typedef void (*CARDCallback)(s32 chan, s32 result); - -void CARDInit(void); -BOOL CARDGetFastMode(void); -BOOL CARDSetFastMode(BOOL enable); - -s32 CARDCheck(s32 chan); -s32 CARDCheckAsync(s32 chan, CARDCallback callback); -s32 CARDCheckEx(s32 chan, s32* xferBytes); -s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback); -s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo); -s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, - CARDCallback callback); -s32 CARDDelete(s32 chan, const char* fileName); -s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback); -s32 CARDFastDelete(s32 chan, s32 fileNo); -s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback); -s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo); -s32 CARDFormat(s32 chan); -s32 CARDFormatAsync(s32 chan, CARDCallback callback); -s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed); -s32 CARDGetAttributes(s32 chan, s32 fileNo, u8* attr); -s32 CARDGetEncoding(s32 chan, u16* encode); -s32 CARDGetMemSize(s32 chan, u16* size); -s32 CARDGetResultCode(s32 chan); -s32 CARDGetSectorSize(s32 chan, u32* size); -s32 CARDGetSerialNo(s32 chan, u64* serialNo); -s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat); -s32 CARDGetXferredBytes(s32 chan); -s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback); -s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback, - CARDCallback attachCallback); -s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo); -BOOL CARDProbe(s32 chan); -s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize); -s32 CARDRename(s32 chan, const char* oldName, const char* newName); -s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback); -s32 CARDSetAttributesAsync(s32 chan, s32 fileNo, u8 attr, CARDCallback callback); -s32 CARDSetAttributes(s32 chan, s32 fileNo, u8 attr); -s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat); -s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback); -s32 CARDUnmount(s32 chan); -s32 CARDGetCurrentMode(s32 chan, u32* mode); -s32 CARDCancel(CARDFileInfo* fileInfo); -s32 CARDClose(CARDFileInfo* fileInfo); -s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset); -s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset, - CARDCallback callback); -s32 CARDWrite(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset); -s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset, - CARDCallback callback); - - -typedef struct jump_buf { - u32 lr; - u32 cr; - u32 sp; - u32 r2; - u32 pad; - u32 regs[19]; - double flt_regs[19]; -} jmp_buf; - -int gcsetjmp(jmp_buf *jump); -int gclongjmp(jmp_buf *jump, int status); - - -/* end "game/jmp.h" */ -/* "include\game\process.h" line 4 "dolphin/types.h" */ -/* end "dolphin/types.h" */ - -#define PROCESS_STAT_PAUSE 0x1 -#define PROCESS_STAT_UPAUSE 0x2 -#define PROCESS_STAT_PAUSE_EN 0x4 -#define PROCESS_STAT_UPAUSE_EN 0x8 - -typedef struct process { - struct process *next; - struct process *prev; - struct process *child; - struct process *parent; - struct process *next_child; - struct process *first_child; - void *heap; - u16 exec; - u16 stat; - u16 prio; - int sleep_time; - u32 base_sp; - jmp_buf jump; - void (*dtor)(void); - void *user_data; -} Process; - -void HuPrcInit(void); -void HuPrcEnd(void); -Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size); -void HuPrcChildLink(Process *parent, Process *child); -void HuPrcChildUnlink(Process *process); -Process *HuPrcChildCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size, Process *parent); -void HuPrcChildWatch(void); -Process *HuPrcCurrentGet(void); -int HuPrcKill(Process *process); -void HuPrcChildKill(Process *process); -void HuPrcSleep(int time); -void HuPrcVSleep(); -void HuPrcWakeup(Process *process); -void HuPrcDestructorSet2(Process *process, void (*func)(void)); -void HuPrcDestructorSet(void (*func)(void)); -void HuPrcCall(int tick); -void *HuPrcMemAlloc(s32 size); -void HuPrcMemFree(void *ptr); -void HuPrcSetStat(Process *process, u16 value); -void HuPrcResetStat(Process *process, u16 value); -void HuPrcAllPause(int flag); -void HuPrcAllUPause(int flag); - - - -#define MEMORY_DEFAULT_NUM 0x10000000 - -typedef enum { - HEAP_SYSTEM, - HEAP_MUSIC, - HEAP_DATA, - HEAP_DVD, - HEAP_MISC, - HEAP_MAX -} HeapID; - -void HuMemInitAll(void); -void *HuMemInit(void *ptr, s32 size); -void HuMemDCFlushAll(); -void HuMemDCFlush(HeapID heap); -void *HuMemDirectMalloc(HeapID heap, s32 size); -void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num); -void HuMemDirectFree(void *ptr); -void HuMemDirectFreeNum(HeapID heap, u32 num); -s32 HuMemUsedMallocSizeGet(HeapID heap); -s32 HuMemUsedMallocBlockGet(HeapID heap); -u32 HuMemHeapSizeGet(HeapID heap); -void *HuMemHeapPtrGet(HeapID heap); - -void *HuMemHeapInit(void *ptr, s32 size); -void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); -void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); -void HuMemMemoryFree(void *ptr, u32 retaddr); -void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); -s32 HuMemUsedMemorySizeGet(void *heap_ptr); -s32 HuMemUsedMemoryBlockGet(void *heap_ptr); -s32 HuMemMemorySizeGet(void *ptr); -s32 HuMemMemoryAllocSizeGet(s32 size); -void HuMemHeapDump(void *heap_ptr, s16 status); - - - -typedef struct data_read_stat DataReadStat; - -typedef struct file_list_entry { - char *name; - s32 file_id; -} FileListEntry; - -void *HuDvdDataRead(char *path); -void **HuDvdDataReadMulti(char **paths); -void *HuDvdDataReadDirect(char *path, HeapID heap); -void *HuDvdDataFastRead(s32 entrynum); -void *HuDvdDataFastReadNum(s32 entrynum, s32 num); -void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat); -void HuDvdDataClose(void *ptr); -void HuDvdErrorWatch(); - - - - -#define OM_DLL_MAX 20 - -typedef enum { - OVL_INVALID = -1, -/* "include\game\object.h" line 13 "ovl_table.h" */ -OVL__MINI, -OVL_BOOT, -OVL_E3SETUP, -OVL_INST, -OVL_M300, -OVL_M302, -OVL_M303, -OVL_M330, -OVL_M333, -OVL_M401, -OVL_M402, -OVL_M403, -OVL_M404, -OVL_M405, -OVL_M406, -OVL_M407, -OVL_M408, -OVL_M409, -OVL_M410, -OVL_M411, -OVL_M412, -OVL_M413, -OVL_M414, -OVL_M415, -OVL_M416, -OVL_M417, -OVL_M418, -OVL_M419, -OVL_M420, -OVL_M421, -OVL_M422, -OVL_M423, -OVL_M424, -OVL_M425, -OVL_M426, -OVL_M427, -OVL_M428, -OVL_M429, -OVL_M430, -OVL_M431, -OVL_M432, -OVL_M433, -OVL_M434, -OVL_M435, -OVL_M436, -OVL_M437, -OVL_M438, -OVL_M439, -OVL_M440, -OVL_M441, -OVL_M442, -OVL_M443, -OVL_M444, -OVL_M445, -OVL_M446, -OVL_M447, -OVL_M448, -OVL_M449, -OVL_M450, -OVL_M451, -OVL_M453, -OVL_M455, -OVL_M456, -OVL_M457, -OVL_M458, -OVL_M459, -OVL_M460, -OVL_M461, -OVL_M462, -OVL_M463, -OVL_MENT, -OVL_MESS, -OVL_MGMODE, -OVL_MODELTEST, -OVL_MODESEL, -OVL_MPEX, -OVL_MSETUP, -OVL_MSTORY2, -OVL_MSTORY3, -OVL_MSTORY4, -OVL_MSTORY, -OVL_NIS, -OVL_OPTION, -OVL_PRESENT, -OVL_RESULT, -OVL_SAF, -OVL_SELMENU, -OVL_STAFF, -OVL_SUBCHRSEL, -OVL_W01, -OVL_W02, -OVL_W03, -OVL_W04, -OVL_W05, -OVL_W06, -OVL_W10, -OVL_W20, -OVL_W21, -OVL_ZTAR, - OVL_COUNT -} OverlayID; - -#define OM_STAT_DELETED 0x1 -#define OM_STAT_DISABLED 0x2 -#define OM_STAT_ACTIVE 0x4 -#define OM_STAT_PAUSED 0x10 -#define OM_STAT_NOPAUSE 0x20 -#define OM_STAT_MODEL_PAUSED 0x100 - - -#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) -#define OM_GET_DATA_PTR(object, type) ((type *)(((object)->data))) - -typedef void (*omObjFunc)(struct om_obj_data *); - -typedef struct om_ovl_his_data { - OverlayID overlay; - int event; - int stat; -} omOvlHisData; - -typedef struct om_obj_data { -/* 0x00 */ u16 stat; -/* 0x02 */ s16 next_idx_alloc; -/* 0x04 */ s16 prio; -/* 0x06 */ s16 prev; -/* 0x08 */ s16 next; -/* 0x0A */ s16 next_idx; -/* 0x0C */ s16 group; -/* 0x0E */ u16 group_idx; -/* 0x10 */ u32 unk10; -/* 0x14 */ omObjFunc func; -/* 0x18 */ Vec trans; -/* 0x24 */ Vec rot; -/* 0x30 */ Vec scale; -/* 0x3C */ u16 mdlcnt; -/* 0x40 */ s16 *model; -/* 0x44 */ u16 mtncnt; -/* 0x48 */ s16 *motion; -/* 0x4C */ u32 work[4]; -/* 0x5C */ void *data; -} omObjData; - -typedef struct om_dll_data { - char *name; - OSModuleHeader *module; - void *bss; - s32 ret; -} omDllData; - -void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl); -void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat); -void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat); -void omOvlReturnEx(s16 level, s16 arg2); -void omOvlKill(s16 arg); -void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat); -omOvlHisData *omOvlHisGet(s32 level); -Process *omInitObjMan(s16 max_objs, int prio); -void omDestroyObjMan(void); -omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, omObjFunc func); -void omAddMember(Process *objman_process, u16 group, omObjData *object); -void omDelObjEx(Process *objman_process, omObjData *object); -void omDelMember(Process *objman_process, omObjData *object); -void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs); -omObjData **omGetGroupMemberListEx(Process *objman_process, s16 group); -void omSetStatBit(omObjData *obj, u16 stat); -void omResetStatBit(omObjData *obj, u16 stat); -void omSetTra(omObjData *obj, float x, float y, float z); -void omSetRot(omObjData *obj, float x, float y, float z); -void omSetSca(omObjData *obj, float x, float y, float z); -void omMain(void); -void omAllPause(BOOL pause); -char omPauseChk(void); -OverlayID omCurrentOvlGet(void); - - -void omDLLDBGOut(void); -void omDLLInit(FileListEntry *ovl_list); -int omDLLStart(s16 overlay, s16 flag); -void omDLLNumEnd(s16 overlay, s16 flag); -void omDLLEnd(s16 dllno, s16 flag); -omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag); -void omDLLUnlink(omDllData *dll_ptr, s16 flag); -s32 omDLLSearch(s16 overlay); -void omDLLInfoDump(OSModuleInfo *module); -void omDLLHeaderDump(OSModuleHeader *module); - -void omOutView(omObjData *object); -void omOutViewMulti(omObjData *object); -void omSystemKeyCheckSetup(Process *objman); -void omSystemKeyCheck(omObjData *object); -void omSysPauseEnable(u8 flag); -void omSysPauseCtrl(s16 flag); - -extern omObjData *omDBGSysKeyObj; -extern Process *omwatchproc; -extern OverlayID omnextovl; -extern OverlayID omcurovl; -extern int omcurdll; -extern int omovlhisidx; -extern int omovlevtno; -extern int omnextovlevtno; -extern int omovlstat; -extern char omUPauseFlag; -extern s16 omSysExitReq; -extern s16 omdispinfo; -extern u8 omSysPauseEnableFlag; -extern OverlayID omprevovl; - -extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; - -extern Vec CRot; -extern Vec Center; -extern float CZoom; -extern Vec CRotM[16]; -extern Vec CenterM[16]; -extern float CZoomM[16]; -extern s16 omDBGMenuButton; - - - -typedef struct hu_snd_grp_data { - /* 0x00 */ s16 ovl; - /* 0x02 */ s16 grpset; - /* 0x04 */ s32 auxANo; - /* 0x08 */ s32 auxBNo; - /* 0x0C */ s8 auxAVol; - /* 0x0D */ s8 auxBVol; -} HuSndGrpData; - -void HuAudInit(void); -s32 HuAudStreamPlay(void); -void HuAudStreamVolSet(s16 vol); -void HuAudStreamPauseOn(void); -void HuAudStreamPauseOff(void); -void HuAudStreamFadeOut(void); -void HuAudAllStop(void); -void HuAudFadeOut(s32 arg0); -s32 HuAudFXPlay(s32 arg0); -s32 HuAudFXPlayVol(s32 arg0, s16 arg1); -s32 HuAudFXPlayVolPan(s32 arg0, s16 arg1, s16 arg2); -void HuAudFXStop(s32 arg0); -void HuAudFXAllStop(void); -void HuAudFXFadeOut(s32 arg0, s32 arg1); -void HuAudFXPanning(s32 arg0, s16 arg1); -void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); -void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); -void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); -s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); -void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); -void HuAudFXListnerKill(void); -void HuAudFXPauseAll(s32 arg0); -s32 HuAudFXStatusGet(s32 arg0); -s32 HuAudFXPitchSet(s32 arg0, s16 arg1); -s32 HuAudFXVolSet(s32 arg0, s16 arg1); -s32 HuAudSeqPlay(s16 arg0); -void HuAudSeqStop(s32 arg0); -void HuAudSeqFadeOut(s32 arg0, s32 arg1); -void HuAudSeqAllFadeOut(s32 arg0); -void HuAudSeqAllStop(void); -void HuAudSeqPauseAll(s32 arg0); -void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2); -s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2); -s32 HuAudSStreamPlay(s16 arg0); -void HuAudSStreamStop(s32 arg0); -void HuAudSStreamFadeOut(s32 arg0, s32 arg1); -void HuAudSStreamAllFadeOut(s32 arg0); -void HuAudSStreamAllStop(void); -s32 HuAudSStreamStatGet(s32 arg0); -void HuAudDllSndGrpSet(u16 ovl); -void HuAudSndGrpSetSet(s16 arg0); -void HuAudSndGrpSet(s16 arg0); -void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); -void HuAudAUXSet(s32 arg0, s32 arg1); -void HuAudAUXVolSet(s8 arg0, s8 arg1); -void HuAudVoiceInit(s16 ovl); -s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); -s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); -void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); -s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); -s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); -void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); - -extern float Snd3DBackSurDisOffset; -extern float Snd3DFrontSurDisOffset; -extern float Snd3DStartDisOffset; -extern float Snd3DSpeedOffset; -extern float Snd3DDistOffset; -extern s32 musicOffF; -extern u8 fadeStat; - -extern HuSndGrpData HuSndGrpTbl[]; - - -/* "include\game\flag.h" line 3 "dolphin/types.h" */ -/* end "dolphin/types.h" */ - -#define FLAG_ID_MAKE(group, index) (((group) << 16)|(index)) - -s32 _CheckFlag(u32 flag); -void _SetFlag(u32 flag); -void _ClearFlag(u32 flag); -void _InitFlag(void); - - -//HACK: to prevent prototype errors -extern void HuPadRumbleAllStop(void); - -typedef struct player_config { - s16 character; - s16 pad_idx; - s16 diff; - s16 group; - s16 iscom; -} PlayerConfig; - -typedef struct system_state { -/* 0x00 */ struct { - u8 party : 1; - u8 team : 1; - }; -/* 0x01 */ u8 diff_story; -/* 0x02 */ struct { - u16 bonus_star : 1; - u16 explain_mg : 1; - u16 show_com_mg : 1; - u16 mg_list : 2; - u16 mess_speed : 2; - u16 save_mode : 2; - }; -/* 0x04 */ u8 turn; -/* 0x05 */ u8 max_turn; -/* 0x06 */ u8 star_flag; -/* 0x07 */ u8 star_total; -/* 0x08 */ struct { - u8 star_pos : 3; - u8 board : 5; -}; -/* 0x09 */ s8 last5_effect; -/* 0x0A */ s8 player_curr; -/* 0x0B */ s8 unk0B[3]; -/* 0x0E */ s16 block_pos; -/* 0x10 */ u8 board_data[32]; -/* 0x30 */ u8 mess_delay; -/* 0x31 */ struct { - u8 bowser_loss : 4; - u8 bowser_event : 4; - }; -/* 0x32 */ s8 lucky_value; -/* 0x34 */ u16 mg_next; -/* 0x36 */ s16 mg_type; -/* 0x38 */ u16 unk_38; -/* 0x3A */ u8 flag[3][16]; -/* 0x6A */ u8 unk_6A[0x72]; -} SystemState; //8018fcf8, sizeof 0xDC - -typedef struct player_state { -/* 0x00 */ struct { - u16 diff : 2; - u16 com : 1; - u16 character : 4; - u16 auto_size : 2; - u16 draw_ticket : 1; - u16 ticket_player : 6; - }; -/* 0x02 */ struct { - u8 team : 1; - u8 spark : 1; - u8 player_idx : 2; - }; -/* 0x03 */ s8 handicap; -/* 0x04 */ s8 port; -/* 0x05 */ s8 items[3]; -/* 0x08 */ struct { - u16 color : 2; - u16 moving : 1; - u16 jump : 1; - u16 show_next : 1; - u16 size : 2; - u16 num_dice : 2; - u16 rank : 2; - u16 bowser_suit : 1; - u16 team_backup : 1; - }; -/* 0x0A */ s8 roll; -/* 0x0C */ s16 space_curr; -/* 0x0E */ s16 space_prev; -/* 0x10 */ s16 space_next; -/* 0x12 */ s16 space_shock; -/* 0x14 */ s8 blue_count; -/* 0x15 */ s8 red_count; -/* 0x16 */ s8 question_count; -/* 0x17 */ s8 fortune_count; -/* 0x18 */ s8 bowser_count; -/* 0x19 */ s8 battle_count; -/* 0x1A */ s8 mushroom_count; -/* 0x1B */ s8 warp_count; -/* 0x1C */ s16 coins; -/* 0x1E */ s16 coins_mg; -/* 0x20 */ s16 coins_total; -/* 0x22 */ s16 coins_max; -/* 0x24 */ s16 coins_battle; -/* 0x26 */ s16 coin_collect; -/* 0x28 */ s16 coin_win; -/* 0x2A */ s16 stars; -/* 0x2C */ s16 stars_max; -/* 0x2E */ char unk_2E[2]; -} PlayerState; //size of 0x30 - -typedef struct pause_backup_config { - u8 explain_mg : 1; - u8 show_com_mg : 1; - u8 mg_list : 2; - u8 mess_speed : 2; - u8 save_mode : 2; -} PauseBackupConfig; - -typedef struct game_stat { -/* 0x0 */ s16 unk_00; -/* 0x2 */ u8 language; -/* 0x3 */ u8 sound_mode; -/* 0x4 */ s8 rumble; -/* 0x6 */ u16 total_stars; -/* 0x8 */ OSTime create_time; -/* 0x10 */ u32 mg_custom[2]; -/* 0x18 */ u32 mg_avail[2]; -/* 0x20 */ u32 mg_record[15]; -/* 0x5C */ u8 board_win_count[9][8]; -/* 0xA4 */ u8 board_play_count[9]; -/* 0xAE */ u16 board_max_stars[9]; -/* 0xC0 */ u16 board_max_coins[9]; -/* 0xD2 */ u8 present[60]; -/* 0x10E */ struct { - u8 story_continue : 1; - u8 party_continue : 1; - u8 open_w06 : 1; - u8 field10E_bit4 : 1; - u8 field10E_bit5 : 1; - u8 field10E_bit6 : 1; - }; -/* 0x10F */ PauseBackupConfig story_pause; -/* 0x110 */ PauseBackupConfig party_pause; -} GameStat; - -extern PlayerConfig GWPlayerCfg[4]; -extern PlayerState GWPlayer[4]; -extern SystemState GWSystem; -extern GameStat GWGameStat; - -static inline s32 GWTeamGet(void) -{ - return GWSystem.team; -} - -static inline s32 GWMGTypeGet(void) -{ - return GWSystem.mg_type; -} - -static inline void GWMGTypeSet(s32 type) -{ - GWSystem.mg_type = type; -} - -static inline s32 GWPartyGet(void) -{ - return GWSystem.party; -} - -static inline s32 GWLanguageGet(void) -{ - return GWGameStat.language; -} - -static inline s32 GWRumbleGet(void) -{ - return GWGameStat.rumble; -} - -static inline void GWRumbleSet(s32 value) -{ - GWGameStat.rumble = value; - if(value == 0) { - HuPadRumbleAllStop(); - } -} - -static inline s32 GWMGExplainGet(void) -{ - return GWSystem.explain_mg; -} - -static inline void GWMGExplainSet(s32 value) -{ - GWSystem.explain_mg = value; -} - -static inline s32 GWMGShowComGet(void) -{ - return GWSystem.show_com_mg; -} - -static inline void GWMGShowComSet(s32 value) -{ - GWSystem.show_com_mg = value; -} - -static inline s32 GWMGListGet(void) -{ - if (GWSystem.mg_list == 3) { - GWSystem.mg_list = 0; - } - return GWSystem.mg_list; -} - -static inline void GWMGListSet(s32 value) -{ - GWSystem.mg_list = value; -} - -static inline s32 GWMessSpeedGet(void) -{ - if (GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } - return GWSystem.mess_speed; -} - -static inline void GWMessSpeedSet(s32 value) -{ - GWSystem.mess_speed = value; - switch(value) { - case 0: - GWSystem.mess_delay = 16; - break; - - case 2: - GWSystem.mess_delay = 48; - break; - - default: - GWSystem.mess_delay = 32; - break; - } -} - -static inline void GWSaveModeSet(s32 value) -{ - GWSystem.save_mode = value; -} - -static inline s32 GWSaveModeGet(void) -{ - if (GWSystem.save_mode == 3) { - GWSaveModeSet(1); - } - return GWSystem.save_mode; -} - -static inline s32 GWTurnGet(void) -{ - return GWSystem.turn; -} - -static inline s32 GWBoardGet(void) -{ - return GWSystem.board; -} - -static inline s32 GWPlayerTeamGet(s32 player) -{ - return GWPlayer[player].team; -} - -static inline s32 GWLuckyValueGet(void) -{ - return GWSystem.lucky_value; -} - -static inline void GWLuckyValueSet(s32 value) -{ - GWSystem.lucky_value = value; -} - -static inline s16 GWPlayerCoinBattleGet(s32 player) -{ - return GWPlayer[player].coins_battle; -} - -static inline s16 GWPlayerCoinCollectGet(s32 player) -{ - return GWPlayer[player].coin_collect; -} - -static inline void GWPlayerCoinCollectSet(s32 player, s16 value) -{ - GWPlayer[player].coin_collect = value; -} - -static inline s16 GWPlayerCoinWinGet(s32 player) -{ - return GWPlayer[player].coin_win; -} - -static inline void GWPlayerCoinWinSet(s32 player, s16 value) -{ - if (_CheckFlag(0x1000C) == 0) { - GWPlayer[player].coin_win = value; - } -} - -#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value)) -#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), GWPlayerCoinCollectGet((player))+(value)) - -/* end "game/gamework_data.h" */ -/* "src\REL\E3setupDLL\main.c" line 3 "game/hsfman.h" */ - -#define _GAME_HSFMAN_H - -/* "include\game\hsfman.h" line 3 "game/hsfanim.h" */ - -#define GAME_HSFANIM_H - -/* "include\game\hsfanim.h" line 3 "game/hsfformat.h" */ - -#define _GAME_HSFFORMAT_H - -/* "include\game\hsfformat.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ -/* "include\game\hsfformat.h" line 4 "game/animdata.h" */ - -#define _GAME_ANIMDATA_H - -/* "include\game\animdata.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ - -#define ANIM_BMP_RGBA8 0 -#define ANIM_BMP_RGB5A3 1 -#define ANIM_BMP_RGB5A3_DUPE 2 -#define ANIM_BMP_C8 3 -#define ANIM_BMP_C4 4 -#define ANIM_BMP_IA8 5 -#define ANIM_BMP_IA4 6 -#define ANIM_BMP_I8 7 -#define ANIM_BMP_I4 8 -#define ANIM_BMP_A8 9 -#define ANIM_BMP_CMPR 10 - -#define ANIM_BMP_FMTMASK 0xF -#define ANIM_BMP_ALLOC 0x8000 -#define ANIM_BMP_NUM_MASK 0x7FFF - -#define ANIM_LAYER_FLIPX 0x1 -#define ANIM_LAYER_FLIPY 0x2 - -typedef struct anim_frame_data { - s16 pat; - s16 time; - s16 shiftX; - s16 shiftY; - s16 flip; - s16 pad; -} AnimFrameData; - -typedef struct anim_bank_data { - s16 timeNum; - s16 unk; - AnimFrameData *frame; -} AnimBankData; - -typedef struct anim_layer_data { - u8 alpha; - u8 flip; - s16 bmpNo; - s16 startX; - s16 startY; - s16 sizeX; - s16 sizeY; - s16 shiftX; - s16 shiftY; - s16 vtx[8]; -} AnimLayerData; - -typedef struct anim_pat_data { - s16 layerNum; - s16 centerX; - s16 centerY; - s16 sizeX; - s16 sizeY; - AnimLayerData *layer; -} AnimPatData; - -typedef struct anim_bmp_data { - u8 pixSize; - u8 dataFmt; - s16 palNum; - s16 sizeX; - s16 sizeY; - u32 dataSize; - void *palData; - void *data; -} AnimBmpData; - -typedef struct anim_data { - s16 bankNum; - s16 patNum; - s16 bmpNum; - s16 useNum; - AnimBankData *bank; - AnimPatData *pat; - AnimBmpData *bmp; -} AnimData; - - -#define HSF_OBJ_NULL1 0 -#define HSF_OBJ_REPLICA 1 -#define HSF_OBJ_MESH 2 -#define HSF_OBJ_ROOT 3 -#define HSF_OBJ_JOINT 4 -#define HSF_OBJ_NULL2 5 -#define HSF_OBJ_NULL3 6 -#define HSF_OBJ_NONE1 7 -#define HSF_OBJ_NONE2 8 -#define HSF_OBJ_MAP 9 - -#define HSF_TRACK_TRANSFORM 2 -#define HSF_TRACK_MORPH 3 -#define HSF_TRACK_CLUSTER 5 -#define HSF_TRACK_CLUSTER_WEIGHT 6 -#define HSF_TRACK_MATERIAL 9 -#define HSF_TRACK_ATTRIBUTE 10 - -#define HSF_CURVE_STEP 0 -#define HSF_CURVE_LINEAR 1 -#define HSF_CURVE_BEZIER 2 -#define HSF_CURVE_BITMAP 3 -#define HSF_CURVE_CONST 4 - -typedef struct hsf_vector3f { - float x; - float y; - float z; -} HsfVector3f; - -typedef struct hsf_vector2f { - float x; - float y; -} HsfVector2f; - -typedef struct hsf_section { - s32 ofs; - s32 count; -} HsfSection; - -typedef struct hsf_header { - char magic[8]; - HsfSection scene; - HsfSection color; - HsfSection material; - HsfSection attribute; - HsfSection vertex; - HsfSection normal; - HsfSection st; - HsfSection face; - HsfSection object; - HsfSection bitmap; - HsfSection palette; - HsfSection motion; - HsfSection cenv; - HsfSection skeleton; - HsfSection part; - HsfSection cluster; - HsfSection shape; - HsfSection mapAttr; - HsfSection matrix; - HsfSection symbol; - HsfSection string; -} HsfHeader; - -typedef struct hsf_scene { - GXFogType fogType; - f32 start; - f32 end; - GXColor color; -} HsfScene; - -typedef struct hsf_bitmap { - char *name; - u32 maxLod; - u8 dataFmt; - u8 pixSize; - s16 sizeX; - s16 sizeY; - s16 palSize; - GXColor tint; - void *palData; - u32 unk; - void *data; -} HsfBitmap; - -typedef struct hsf_palette { - char *name; - s32 unk; - u32 palSize; - u16 *data; -} HsfPalette; - -typedef struct hsf_attribute { - char *name; - void *unk04; - u8 unk8[4]; - float unk0C; - u8 unk10[4]; - float unk14; - u8 unk18[8]; - float unk20; - u8 unk24[4]; - float unk28; - float unk2C; - float unk30; - float unk34; - u8 unk38[44]; - u32 wrap_s; - u32 wrap_t; - u8 unk6C[12]; - u32 unk78; - u32 flag; - HsfBitmap *bitmap; -} HsfAttribute; - -typedef struct hsf_material { - char *name; - u8 unk4[4]; - u16 pass; - u8 vtxMode; - u8 litColor[3]; - u8 color[3]; - u8 shadowColor[3]; - float hilite_scale; - float unk18; - float invAlpha; - float unk20[2]; - float refAlpha; - float unk2C; - u32 flags; - u32 numAttrs; - s32 *attrs; -} HsfMaterial; - -typedef struct hsf_vertex_buf { - char *name; - s32 count; - void *data; -} HsfBuffer; - -typedef struct hsf_face { - s16 type; - s16 mat; - union { - struct { - s16 indices[3][4]; - u32 count; - s16 *data; - } strip; - s16 indices[4][4]; - }; - float nbt[3]; -} HsfFace; - -typedef struct hsf_const_data { - u32 flags; - s16 hook; - u8 unk6[2]; - void *unk08; - void *unk0C; - Mtx unk10; - AnimData *hilite_map; -} HsfConstData; - -typedef struct hsf_transform { - Vec pos; - Vec rot; - Vec scale; -} HsfTransform; - -typedef struct hsf_cenv_single { - u32 target; - u16 pos; - u16 posCnt; - u16 normal; - u16 normalCnt; -} HsfCenvSingle; - -typedef struct hsf_cenv_dual_weight { - float weight; - u16 pos; - u16 posCnt; - u16 normal; - u16 normalCnt; -} HsfCenvDualWeight; - -typedef struct hsf_cenv_dual { - u32 target1; - u32 target2; - u32 weightCnt; - HsfCenvDualWeight *weight; -} HsfCenvDual; - -typedef struct hsf_cenv_multi_weight { - u32 target; - float value; -} HsfCenvMultiWeight; - -typedef struct hsf_cenv_multi { - u32 weightCnt; - u16 pos; - u16 posCnt; - u16 normal; - u16 normalCnt; - HsfCenvMultiWeight *weight; -} HsfCenvMulti; - -typedef struct hsf_cenv { - char *name; - HsfCenvSingle *singleData; - HsfCenvDual *dualData; - HsfCenvMulti *multiData; - u32 singleCount; - u32 dualCount; - u32 multiCount; - u32 vtxCount; - u32 copyCount; -} HsfCenv; - -typedef struct hsf_part { - char *name; - u32 count; - u16 *vertex; -} HsfPart; - -typedef struct hsf_cluster { - char *name[2]; - union { - char *targetName; - s32 target; - }; - HsfPart *part; - float unk10; - float unk14[1]; // unknown array size - u8 unk18[124]; - u8 adjusted; - u8 unk95; - u16 type; - u32 vertexCnt; - HsfBuffer **vertex; -} HsfCluster; - -typedef struct hsf_shape { - char *name; - union { - u16 count16[2]; - u32 vertexCnt; - }; - HsfBuffer **vertex; -} HsfShape; - -typedef struct hsf_object_data { - struct hsf_object *parent; - u32 childrenCount; - struct hsf_object **children; - HsfTransform base; - HsfTransform curr; - union { - struct { - HsfVector3f min; - HsfVector3f max; - float baseMorph; - float morphWeight[33]; - } mesh; - struct hsf_object *replica; - }; - - HsfBuffer *face; - HsfBuffer *vertex; - HsfBuffer *normal; - HsfBuffer *color; - HsfBuffer *st; - HsfMaterial *material; - HsfAttribute *attribute; - u8 unk120[2]; - u8 shapeType; - u8 unk123; - u32 vertexShapeCnt; - HsfBuffer **vertexShape; - u32 clusterCnt; - HsfCluster **cluster; - u32 cenvCnt; - HsfCenv *cenv; - void *file[2]; -} HsfObjectData; - -typedef struct hsf_camera { - HsfVector3f target; - HsfVector3f pos; - float aspect_dupe; - float fov; - float near; - float far; -} HsfCamera; - -typedef struct hsf_light { - HsfVector3f pos; - HsfVector3f target; - u8 type; - u8 r; - u8 g; - u8 b; - float unk2C; - float ref_distance; - float ref_brightness; - float cutoff; -} HsfLight; -typedef struct hsf_object { - char *name; - u32 type; - HsfConstData *constData; - u32 flags; - union { - HsfObjectData data; - HsfCamera camera; - HsfLight light; - }; -} HsfObject; - -typedef struct hsf_skeleton { - char *name; - HsfTransform transform; -} HsfSkeleton; - -typedef struct hsf_bitmap_keyframe { - float time; - HsfBitmap *data; -} HsfBitmapKey; - -typedef struct hsf_track { - u8 type; - u8 start; - union { - u16 target; - s16 target_s16; - }; - union { - s32 unk04; - struct { - union { - s16 param; - u16 param_u16; - }; - union { - u16 channel; - s16 channel_s16; - }; - }; - }; - u16 curveType; - u16 numKeyframes; - union { - float value; - void *data; - }; -} HsfTrack; - -typedef struct hsf_motion { - char *name; - s32 numTracks; - HsfTrack *track; - float len; -} HsfMotion; - -typedef struct hsf_map_attr { - float minX; - float minZ; - float maxX; - float maxZ; - u16 *data; - u32 dataLen; -} HsfMapAttr; - -typedef struct hsf_matrix { - u32 base_idx; - u32 count; - Mtx *data; -} HsfMatrix; - -typedef struct hsf_data { - u8 magic[8]; - HsfScene *scene; - HsfAttribute *attribute; - HsfMaterial *material; - HsfBuffer *vertex; - HsfBuffer *normal; - HsfBuffer *st; - HsfBuffer *color; - HsfBuffer *face; - HsfBitmap *bitmap; - HsfPalette *palette; - HsfObject *root; - HsfCenv *cenv; - HsfSkeleton *skeleton; - HsfCluster *cluster; - HsfPart *part; - HsfShape *shape; - HsfMotion *motion; - HsfObject *object; - HsfMapAttr *mapAttr; - HsfMatrix *matrix; - s16 sceneCnt; - s16 attributeCnt; - s16 materialCnt; - s16 vertexCnt; - s16 normalCnt; - s16 stCnt; - s16 colorCnt; - s16 faceCnt; - s16 bitmapCnt; - s16 paletteCnt; - s16 objectCnt; - s16 cenvCnt; - s16 skeletonCnt; - s16 clusterCnt; - s16 partCnt; - s16 shapeCnt; - s16 mapAttrCnt; - s16 motionCnt; - s16 matrixCnt; -} HsfData; - -/* end "game/hsfformat.h" */ -/* "include\game\hsfanim.h" line 4 "game/hsfman.h" */ -/* end "game/hsfman.h" */ -/* "include\game\hsfanim.h" line 5 "game/animdata.h" */ -/* end "game/animdata.h" */ - -typedef struct model_data ModelData; -typedef struct particle_data ParticleData; - -typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix); - -typedef struct { - /* 0x00 */ union { - u16 unk00; - s16 unk00_s16; - }; - /* 0x02 */ s16 unk02; - /* 0x04 */ s16 unk04; - /* 0x06 */ s16 unk06; - /* 0x08 */ Vec unk08; - /* 0x14 */ Vec unk14; - /* 0x20 */ float unk20; - /* 0x24 */ float unk24; - /* 0x28 */ float unk28; - /* 0x2C */ float unk2C; - /* 0x30 */ float unk30; - /* 0x34 */ Vec unk34; - /* 0x40 */ GXColor unk40; -} HsfanimStruct01; // Size 0x44 - -typedef struct particle_data { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ float unk_04; - /* 0x08 */ char unk_08[0x14]; - /* 0x1C */ void *unk_1C; - /* 0x20 */ s16 unk_20; - /* 0x22 */ s16 unk_22; - /* 0x24 */ float unk_24; - /* 0x28 */ float unk_28; - /* 0x2C */ u8 unk_2C; - /* 0x2D */ u8 unk_2D; - /* 0x2E */ char unk_2E[2]; - /* 0x30 */ s16 unk_30; - /* 0x32 */ char unk_32[2]; - /* 0x34 */ u32 unk_34; - /* 0x38 */ s32 unk_38; - /* 0x3C */ u32 unk_3C; - /* 0x40 */ s32 unk_40; - /* 0x44 */ AnimData *unk_44; - /* 0x48 */ HsfanimStruct01 *unk_48; - /* 0x4C */ Vec *unk_4C; - /* 0x50 */ void *unk_50; - /* 0x54 */ ParticleHook unk_54; -} ParticleData; // Size 0x58 - -typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ char unk02[2]; - /* 0x04 */ float unk04; - /* 0x08 */ float unk08; - /* 0x0C */ float unk0C; - /* 0x10 */ Vec unk10; - /* 0x1C */ float unk1C; - /* 0x20 */ float unk20; - /* 0x24 */ float unk24; - /* 0x28 */ float unk28; - /* 0x2C */ s16 unk2C; - /* 0x2E */ GXColor unk2E[4]; - /* 0x3E */ GXColor unk3E[4]; -} HsfanimStruct00; // Size unknown - -typedef struct { - /* 0x00 */ u16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ s16 unk04; - /* 0x06 */ s16 unk06; - /* 0x08 */ float unk08; - /* 0x0C */ float unk0C; - /* 0x10 */ AnimData *unk10; -} Hu3DTexAnimDataStruct; // Size 0x14 - -typedef struct { - /* 0x00 */ u16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ Vec unk04; - /* 0x10 */ char unk10[0xC]; - /* 0x1C */ Vec unk1C; - /* 0x28 */ char unk28[0xC]; - /* 0x34 */ float unk34; - /* 0x38 */ float unk38; - /* 0x3C */ Mtx unk3C; -} Hu3DTexScrDataStruct; // Size 0x6C - -void Hu3DAnimInit(void); -s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2); -s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2); -void Hu3DAnimKill(s16 arg0); -void Hu3DAnimModelKill(s16 arg0); -void Hu3DAnimAllKill(void); -void Hu3DAnimAttrSet(s16 arg0, u16 arg1); -void Hu3DAnimAttrReset(s16 arg0, s32 arg1); -void Hu3DAnimSpeedSet(s16 arg0, float arg1); -void Hu3DAnimBankSet(s16 arg0, s32 arg1); -void Hu3DAnmNoSet(s16 arg0, u16 arg1); -s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2); -void Hu3DAnimExec(void); -s16 Hu3DTexScrollCreate(s16 arg0, char *arg1); -void Hu3DTexScrollKill(s16 arg0); -void Hu3DTexScrollAllKill(void); -void Hu3DTexScrollPosSet(s16 arg0, float arg1, float arg2, float arg3); -void Hu3DTexScrollPosMoveSet(s16 arg0, float arg1, float arg2, float arg3); -void Hu3DTexScrollRotSet(s16 arg0, float arg1); -void Hu3DTexScrollRotMoveSet(s16 arg0, float arg1); -void Hu3DTexScrollPauseDisableSet(s16 arg0, s32 arg1); -s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1); -void Hu3DParticleScaleSet(s16 arg0, float arg1); -void Hu3DParticleZRotSet(s16 arg0, float arg1); -void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3); -void Hu3DParticleTPLvlSet(s16 arg0, float arg1); -void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1); -void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1); -void Hu3DParticleAttrSet(s16 arg0, u8 arg1); -void Hu3DParticleAttrReset(s16 arg0, u8 arg1); -void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1); -void Hu3DParManInit(void); -s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2); -s16 Hu3DParManLink(s16 arg0, HsfanimStruct00 *arg1); -void Hu3DParManKill(s16 arg0); -void Hu3DParManAllKill(void); -void *Hu3DParManPtrGet(s16 arg0); -void Hu3DParManPosSet(s16 arg0, float arg1, float arg2, float arg3); -void Hu3DParManVecSet(s16 arg0, float arg1, float arg2, float arg3); -void Hu3DParManRotSet(s16 arg0, float arg1, float arg2, float arg3); -void Hu3DParManAttrSet(s16 arg0, s32 arg1); -void Hu3DParManAttrReset(s16 arg0, s32 arg1); -s16 Hu3DParManModelIDGet(s16 arg0); -void Hu3DParManTimeLimitSet(s16 arg0, s32 arg1); -void Hu3DParManVacumeSet(s16 arg0, float arg1, float arg2, float arg3, float arg4); -void Hu3DParManColorSet(s16 arg0, s16 arg1); - -extern Hu3DTexAnimDataStruct Hu3DTexAnimData[256]; -extern Hu3DTexScrDataStruct Hu3DTexScrData[16]; - -/* end "game/hsfanim.h" */ -/* "include\game\hsfman.h" line 4 "game/hsfformat.h" */ -/* end "game/hsfformat.h" */ -/* "include\game\hsfman.h" line 5 "game/memory.h" */ -/* end "game/memory.h" */ -/* "include\game\hsfman.h" line 6 "game/data.h" */ - -#define _GAME_DATA_H - -/* "include\game\data.h" line 3 "game/dvd.h" */ -/* end "game/dvd.h" */ - -/* "include\game\data.h" line 5 "datadir_enum.h" */ - -#define DATADIR_ENUM - - -enum { -/* "include\datadir_enum.h" line 6 "datadir_table.h" */ -DATADIR_ID_E3SETUP, -DATADIR_ID_BBATTLE, -DATADIR_ID_BGUEST, -DATADIR_ID_BKOOPA, -DATADIR_ID_BKOOPASUIT, -DATADIR_ID_BKUJIYA, -DATADIR_ID_BLAST5, -DATADIR_ID_BOARD, -DATADIR_ID_BPAUSE, -DATADIR_ID_BYOKODORI, -DATADIR_ID_DAISY, -DATADIR_ID_DAISYMDL0, -DATADIR_ID_DAISYMDL1, -DATADIR_ID_DAISYMOT, -DATADIR_ID_DONKEY, -DATADIR_ID_DONKEYMDL0, -DATADIR_ID_DONKEYMDL1, -DATADIR_ID_DONKEYMOT, -DATADIR_ID_EFFECT, -DATADIR_ID_GAMEMES, -DATADIR_ID_INST, -DATADIR_ID_INSTFONT, -DATADIR_ID_INSTPIC, -DATADIR_ID_LUIGI, -DATADIR_ID_LUIGIMDL0, -DATADIR_ID_LUIGIMDL1, -DATADIR_ID_LUIGIMOT, -DATADIR_ID_M300, -DATADIR_ID_M302, -DATADIR_ID_M303, -DATADIR_ID_M330, -DATADIR_ID_M333, -DATADIR_ID_M401, -DATADIR_ID_M402, -DATADIR_ID_M403, -DATADIR_ID_M404, -DATADIR_ID_M405, -DATADIR_ID_M406, -DATADIR_ID_M407, -DATADIR_ID_M408, -DATADIR_ID_M409, -DATADIR_ID_M410, -DATADIR_ID_M411, -DATADIR_ID_M412, -DATADIR_ID_M413, -DATADIR_ID_M414, -DATADIR_ID_M415, -DATADIR_ID_M416, -DATADIR_ID_M417, -DATADIR_ID_M418, -DATADIR_ID_M419, -DATADIR_ID_M420, -DATADIR_ID_M421, -DATADIR_ID_M422, -DATADIR_ID_M423, -DATADIR_ID_M424, -DATADIR_ID_M425, -DATADIR_ID_M426, -DATADIR_ID_M427, -DATADIR_ID_M428, -DATADIR_ID_M429, -DATADIR_ID_M430, -DATADIR_ID_M431, -DATADIR_ID_M432, -DATADIR_ID_M433, -DATADIR_ID_M434, -DATADIR_ID_M435, -DATADIR_ID_M436, -DATADIR_ID_M437, -DATADIR_ID_M438, -DATADIR_ID_M439, -DATADIR_ID_M440, -DATADIR_ID_M441, -DATADIR_ID_M442, -DATADIR_ID_M443, -DATADIR_ID_M444, -DATADIR_ID_M445, -DATADIR_ID_M446, -DATADIR_ID_M447, -DATADIR_ID_M448, -DATADIR_ID_M449, -DATADIR_ID_M450, -DATADIR_ID_M451, -DATADIR_ID_M453, -DATADIR_ID_M455, -DATADIR_ID_M456, -DATADIR_ID_M457, -DATADIR_ID_M458, -DATADIR_ID_M459, -DATADIR_ID_M460, -DATADIR_ID_M461, -DATADIR_ID_M462, -DATADIR_ID_MARIO, -DATADIR_ID_MARIOMDL0, -DATADIR_ID_MARIOMDL1, -DATADIR_ID_MARIOMOT, -DATADIR_ID_MENT, -DATADIR_ID_MGCONST, -DATADIR_ID_MGMODE, -DATADIR_ID_MODESEL, -DATADIR_ID_MPEX, -DATADIR_ID_MSTORY, -DATADIR_ID_MSTORY2, -DATADIR_ID_MSTORY3, -DATADIR_ID_MSTORY4, -DATADIR_ID_OPTION, -DATADIR_ID_PEACH, -DATADIR_ID_PEACHMDL0, -DATADIR_ID_PEACHMDL1, -DATADIR_ID_PEACHMOT, -DATADIR_ID_PRESENT, -DATADIR_ID_RESULT, -DATADIR_ID_SAF, -DATADIR_ID_SELMENU, -DATADIR_ID_SETUP, -DATADIR_ID_STAFF, -DATADIR_ID_TITLE, -DATADIR_ID_W01, -DATADIR_ID_W02, -DATADIR_ID_W03, -DATADIR_ID_W04, -DATADIR_ID_W05, -DATADIR_ID_W06, -DATADIR_ID_W10, -DATADIR_ID_W20, -DATADIR_ID_W21, -DATADIR_ID_WALUIGI, -DATADIR_ID_WALUIGIMDL0, -DATADIR_ID_WALUIGIMDL1, -DATADIR_ID_WALUIGIMOT, -DATADIR_ID_WARIO, -DATADIR_ID_WARIOMDL0, -DATADIR_ID_WARIOMDL1, -DATADIR_ID_WARIOMOT, -DATADIR_ID_WIN, -DATADIR_ID_YOSHI, -DATADIR_ID_YOSHIMDL0, -DATADIR_ID_YOSHIMDL1, -DATADIR_ID_YOSHIMOT, -DATADIR_ID_ZTAR, - DATADIR_ID_MAX -}; - - -#define DATADIR_DEFINE(name, path) DATADIR_##name = (DATADIR_ID_##name) << 16, - - -#define DATA_MAKE_NUM(dir, file) ((dir)+(file)) - -#define DATA_DECODE_NONE 0 -#define DATA_DECODE_LZ 1 -#define DATA_DECODE_SLIDE 2 -#define DATA_DECODE_FSLIDE_ALT 3 -#define DATA_DECODE_FSLIDE 4 -#define DATA_DECODE_RLE 5 - -#define DATA_NUM_LISTEND -1 - -/* "include\game\data.h" line 16 "dolphin/types.h" */ -/* end "dolphin/types.h" */ - - -typedef struct data_read_stat { - s32 dir_id; - void *dir; - void *file; - u32 raw_len; - u32 comp_type; - BOOL used; - s32 num; - u32 status; - DVDFileInfo file_info; -} DataReadStat; - -void HuDataInit(void); -int HuDataReadChk(s32 data_num); -DataReadStat *HuDataGetStatus(void *dir_ptr); -void *HuDataGetDirPtr(s32 data_num); -DataReadStat *HuDataDirRead(s32 data_num); -DataReadStat *HuDataDirReadNum(s32 data_num, s32 num); -DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num); -void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo); -s32 HuDataDirReadAsync(s32 data_num); -s32 HuDataDirReadNumAsync(s32 data_num, s32 num); -BOOL HuDataGetAsyncStat(s32 status); -void *HuDataRead(s32 data_num); -void *HuDataReadNum(s32 data_num, s32 num); -void *HuDataSelHeapRead(s32 data_num, HeapID heap); -void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap); -void **HuDataReadMulti(s32 *data_ids); -s32 HuDataGetSize(s32 data_num); -void HuDataClose(void *ptr); -void HuDataCloseMulti(void **ptrs); -void HuDataDirClose(s32 data_id); -void HuDataDirCloseNum(s32 num); -void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap); - -void HuDecodeData(void *src, void *dst, u32 size, int decode_type); - -extern u32 DirDataSize; - - -#define Hu3DModelCreateFile(data_id) (Hu3DModelCreate(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) - -typedef struct particle_data ParticleData; - -typedef void (*ModelHookFunc)(struct model_data *, Mtx); - -typedef struct model_data { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - s8 unk_04; - s8 unk_05; - s16 layer; - s16 unk_08; - s16 unk_0A; - s16 unk_0C; - s16 unk_0E; - s16 unk_10[4]; - s16 cluster_attr[4]; - s16 unk_20; - u16 camera; - s16 unk_24; - u16 unk_26; - u16 unk_28[8]; - s16 unk_38[8]; - HsfData *unk_48; - HsfData *unk_4C; - u32 attr; - u32 motion_attr; - Point3d unk_58; - f32 unk_64; - f32 unk_68; - f32 unk_6C; - f32 unk_70; - f32 unk_74; - f32 unk_78; - f32 unk_7C; - f32 unk_80; - f32 unk_84; - f32 unk_88; - f32 unk_8C; - f32 unk_90; - f32 unk_94; - f32 unk_98; - f32 unk_9C; - f32 unk_A0; - f32 unk_A4[4]; - f32 unk_B4[4]; - union { - HsfData *hsfData; - ModelHookFunc hook; - }; - HsfData *unk_C8; - Vec pos; - Vec rot; - Vec scale; - Mtx unk_F0; - ParticleData *unk_120; -} ModelData; // sizeof 0x124 -typedef struct camera_data { - f32 fov; - f32 near; - f32 far; - f32 aspect; - f32 aspect_dupe; - Vec pos; - Vec up; - Vec target; - s16 scissor_x; - s16 scissor_y; - s16 scissor_w; - s16 scissor_h; - f32 viewport_x; - f32 viewport_y; - f32 viewport_w; - f32 viewport_h; - f32 near_z; - f32 far_z; -} CameraData; // sizeof 0x58 -typedef struct ThreeDProjectionStruct { - u8 unk_00; - char unk_01[0x3]; - void *unk_04; - Vec unk_08; - Point3d unk_14; - Point3d unk_20; - Vec unk_2C; - Mtx unk_38; - Mtx unk_68; -} ThreeDProjectionStruct; // sizeof 0x98 -typedef struct shadow_data { - u8 unk_00; - u8 unk_01; - u16 unk_02; - void* unk_04; - Vec unk_08; - Vec unk_14; - Vec unk_20; - Vec unk_2C; - Mtx unk_38; - Mtx unk_68; -} ShadowData; // sizeof 0x98 -typedef struct light_data { - s16 unk_00; - s16 unk_02; - f32 unk_04; - f32 unk_08; - char unk_0C[0x10]; - Vec unk_1C; - Vec unk_28; - Vec unk_34; - GXColor color; -} LightData; - -extern void GXWaitDrawDone(); /* extern */ -extern void GXInitSpecularDir(GXLightObj*, f32, f32, f32); - -void Hu3DInit(void); -void Hu3DPreProc(void); -void Hu3DExec(void); -void Hu3DAllKill(void); -void Hu3DBGColorSet(u8, u8, u8); -void Hu3DLayerHookSet(s16, void (*)(s16)); -void Hu3DPauseSet(s32); -void Hu3DNoSyncSet(s32); -s16 Hu3DModelCreate(void *); -s16 Hu3DModelLink(s16); -s16 Hu3DHookFuncCreate(ModelHookFunc); -void Hu3DModelKill(s16); -void Hu3DModelAllKill(void); -void Hu3DModelPosSet(s16, f32, f32, f32); -void Hu3DModelPosSetV(s16, Vec *); -void Hu3DModelRotSet(s16, f32, f32, f32); -void Hu3DModelRotSetV(s16, Vec *); -void Hu3DModelScaleSet(s16, f32, f32, f32); -void Hu3DModelScaleSetV(s16, Vec *); -void Hu3DModelAttrSet(s16, u32); -void Hu3DModelAttrReset(s16, u32); -u32 Hu3DModelAttrGet(s16); -u32 Hu3DModelMotionAttrGet(s16); -void Hu3DModelClusterAttrSet(s16, s16, s32); -void Hu3DModelClusterAttrReset(s16, s16, s32); -void Hu3DModelCameraSet(s16, u16); -void Hu3DModelLayerSet(s16, s16); -HsfObject* Hu3DModelObjPtrGet(s16, char *); -void Hu3DModelTPLvlSet(s16, f32); -void Hu3DModelHiliteMapSet(s16, AnimData*); -void Hu3DModelShadowSet(s16); -void Hu3DModelShadowReset(s16); -void Hu3DModelShadowDispOn(s16); -void Hu3DModelShadowDispOff(s16); -void Hu3DModelShadowMapSet(s16); -void Hu3DModelShadowMapObjSet(s16, char *); -void Hu3DModelAmbSet(s16, f32, f32, f32); -void Hu3DModelHookSet(s16, char *, s16); -void Hu3DModelHookReset(s16); -void Hu3DModelHookObjReset(s16, char *); -void Hu3DModelProjectionSet(s16, s16); -void Hu3DModelProjectionReset(s16, s16); -void Hu3DModelHiliteTypeSet(s16, s16); -void Hu3DModelReflectTypeSet(s16, s16); -void Hu3DCameraCreate(s32); -void Hu3DCameraPerspectiveSet(s32, f32, f32, f32, f32); -void Hu3DCameraViewportSet(s32, f32, f32, f32, f32, f32, f32); -void Hu3DCameraScissorSet(s32, u32, u32, u32, u32); -void Hu3DCameraPosSet(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); -void Hu3DCameraPosSetV(s32 cam, Vec *pos, Vec *up, Vec *target); -void Hu3DCameraKill(s32); -void Hu3DCameraAllKill(void); -void Hu3DCameraSet(s32, Mtx); -BOOL Hu3DModelCameraInfoSet(s16, u16); -s16 Hu3DModelCameraCreate(s16, u16); -void Hu3DCameraMotionOn(s16, s8); -void Hu3DCameraMotionStart(s16, u16); -void Hu3DCameraMotionOff(s16); -void Hu3DLighInit(void); -s16 Hu3DGLightCreate(f32, f32, f32, f32, f32, f32, u8, u8, u8); -s16 Hu3DGLightCreateV(Vec*, Vec*, GXColor*); -s16 Hu3DLLightCreate(s16, f32, f32, f32, f32, f32, f32, u8, u8, u8); -s16 Hu3DLLightCreateV(s16, Vec*, Vec*, GXColor*); -void Hu3DGLightSpotSet(s16, u16, f32); -void Hu3DLLightSpotSet(s16, s16, u16, f32); -void Hu3DGLightInfinitytSet(s16); -void Hu3DLLightInfinitytSet(s16, s16); -void Hu3DGLightPointSet(s16, u16, f32, f32); -void Hu3DLLightPointSet(s16, s16, u16, f32, f32); -void Hu3DGLightKill(s16); -void Hu3DLLightKill(s16, s16); -void Hu3DLightAllKill(void); -void Hu3DGLightColorSet(s16, u8, u8, u8, u8); -void Hu3DLLightColorSet(s16, s16, u8, u8, u8, u8); -void Hu3DGLightPosSetV(s16, Vec*, Point3d*); -void Hu3DLLightPosSetV(s16, s16, Vec*, Point3d*); -void Hu3DGLightPosSet(s16, f32, f32, f32, f32, f32, f32); -void Hu3DLLightPosSet(s16, s16, f32, f32, f32, f32, f32, f32); -void Hu3DGLightPosAimSetV(s16, Point3d*, Point3d*); -void Hu3DLLightPosAimSetV(s16, s16, Point3d*, Point3d*); -void Hu3DGLightPosAimSet(s16, f32, f32, f32, f32, f32, f32); -void Hu3DLLightPosAimSet(s16, s16, f32, f32, f32, f32, f32, f32); -void Hu3DGLightStaticSet(s16, s32); -void Hu3DLLightStaticSet(s16, s16, s32); -s32 Hu3DModelLightInfoSet(s16, s16); -s16 Hu3DLightSet(ModelData*, Mtx*, Mtx*, f32); -void lightSet(LightData* arg0, s16 arg1, Mtx *arg2, Mtx *arg3, f32 arg8); -void Hu3DReflectMapSet(AnimData* arg0); -void Hu3DReflectNoSet(s16 arg0); -void Hu3DFogSet(f32, f32, u8, u8, u8); -void Hu3DFogClear(void); -void Hu3DShadowCreate(f32, f32, f32); -void Hu3DShadowPosSet(Vec*, Vec*, Vec*); -void Hu3DShadowTPLvlSet(f32); -void Hu3DShadowSizeSet(u16); -void Hu3DShadowExec(void); -s16 Hu3DProjectionCreate(void*, f32, f32, f32); -void Hu3DProjectionKill(s16); -void Hu3DProjectionPosSet(s16, Vec*, Vec*, Vec*); -void Hu3DProjectionTPLvlSet(s16, f32); -void Hu3DMipMapSet(char*, s16, s32, f32); - -extern ModelData Hu3DData[0x200]; -extern CameraData Hu3DCamera[0x10]; -extern AnimData *reflectAnim[5]; -extern AnimData *hiliteAnim[4]; -extern ThreeDProjectionStruct Hu3DProjection[4]; -extern ShadowData Hu3DShadowData; -extern Mtx Hu3DCameraMtx; -extern Mtx Hu3DCameraMtxXPose; -extern LightData Hu3DGlobalLight[0x8]; -extern s16 reflectMapNo; -extern AnimData *toonAnim; -extern s16 Hu3DShadowCamBit; -extern s32 Hu3DShadowF; -extern s32 shadowModelDrawF; -extern s16 Hu3DCameraNo; -extern s16 Hu3DCameraBit; -extern s16 Hu3DPauseF; - - -/* end "game/hsfman.h" */ -/* "src\REL\E3setupDLL\main.c" line 4 "game/wipe.h" */ - -#define _GAME_WIPE_H - -/* "include\game\wipe.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ - -#define WIPE_TYPE_NORMAL 0 -#define WIPE_TYPE_CROSS 1 -#define WIPE_TYPE_DUMMY 2 -#define WIPE_MODE_IN 1 -#define WIPE_MODE_OUT 2 -#define WIPE_MODE_BLANK 3 - -typedef struct wipe_state { - u32 unk00; - u32 unk04; - void *copy_data; - u32 unk0C; - void *unk10[8]; - float time; - float duration; - u32 unk38; - u16 w; - u16 h; - u16 x; - u16 y; - GXColor color; - volatile u8 type; - u8 mode; - u8 stat; - u8 keep_copy; -} WipeState; - -void WipeInit(GXRenderModeObj *rmode); -void WipeExecAlways(void); -void WipeCreate(s16 mode, s16 type, s16 duration); -void WipeColorSet(u8 r, u8 g, u8 b); -u8 WipeStatGet(void); - -extern WipeState wipeData; -extern BOOL wipeFadeInF; - - -/* "src\REL\E3setupDLL\main.c" line 5 "game/pad.h" */ - -#define _GAME_PAD_H - -/* "include\game\pad.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ - -#define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN) - -#define PAD_BUTTON_TRIGGER_L 0x4000 -#define PAD_BUTTON_TRIGGER_R 0x2000 - -extern u16 HuPadBtn[4]; -extern u16 HuPadBtnDown[4]; -extern u16 HuPadBtnRep[4]; -extern s8 HuPadStkX[4]; -extern s8 HuPadStkY[4]; -extern s8 HuPadSubStkX[4]; -extern s8 HuPadSubStkY[4]; -extern u8 HuPadTrigL[4]; -extern u8 HuPadTrigR[4]; -extern u8 HuPadDStk[4]; -extern u8 HuPadDStkRep[4]; -extern s8 HuPadErr[4]; -extern u16 _PadBtn[4]; -extern u16 _PadBtnDown[4]; -extern s32 VCounter; - -void HuPadInit(void); -void HuPadRead(void); -void HuPadRumbleSet(s16 pad, s16 duration, s16 off, s16 on); -void HuPadRumbleStop(s16 pad); -void HuPadRumbleAllStop(void); -s16 HuPadStatGet(s16 pad); -u32 HuPadRumbleGet(void); - - -/* "src\REL\E3setupDLL\main.c" line 6 "game/hsfmotion.h" */ - -#define _GAME_HSFMOTION_H - -/* "include\game\hsfmotion.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ -/* "include\game\hsfmotion.h" line 4 "game/hsfformat.h" */ -/* end "game/hsfformat.h" */ - -#define Hu3DJointMotionFile(model, data_id) (Hu3DJointMotion((model), HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) - - -typedef struct motion_data { - s16 unk_00; - s16 unk_02; - HsfData *unk_04; -} MotionData; - -typedef struct { - /* 0x00 */ float unk00; - /* 0x04 */ HsfBitmap *unk04; -} UnknownHsfMotionStruct01; // Size 8 - -void Hu3DMotionInit(void); -s16 Hu3DMotionCreate(void *arg0); -s16 Hu3DMotionModelCreate(s16 arg0); -s32 Hu3DMotionKill(s16 arg0); -void Hu3DMotionAllKill(void); -void Hu3DMotionSet(s16 arg0, s16 arg1); -void Hu3DMotionOverlaySet(s16 arg0, s16 arg1); -void Hu3DMotionOverlayReset(s16 arg0); -float Hu3DMotionOverlayTimeGet(s16 arg0); -void Hu3DMotionOverlayTimeSet(s16 arg0, float arg1); -void Hu3DMotionOverlaySpeedSet(s16 arg0, float arg1); -void Hu3DMotionShiftSet(s16 arg0, s16 arg1, float arg2, float arg3, u32 arg4); -void Hu3DMotionShapeSet(s16 arg0, s16 arg1); -s16 Hu3DMotionShapeIDGet(s16 arg0); -void Hu3DMotionShapeSpeedSet(s16 arg0, float arg1); -void Hu3DMotionShapeTimeSet(s16 arg0, float arg1); -float Hu3DMotionShapeMaxTimeGet(s16 arg0); -void Hu3DMotionShapeStartEndSet(s16 arg0, float arg1, float arg2); -s16 Hu3DMotionClusterSet(s16 arg0, s16 arg1); -s16 Hu3DMotionClusterNoSet(s16 arg0, s16 arg1, s16 arg2); -void Hu3DMotionShapeReset(s16 arg0); -void Hu3DMotionClusterReset(s16 arg0, s16 arg1); -s16 Hu3DMotionIDGet(s16 arg0); -s16 Hu3DMotionShiftIDGet(s16 arg0); -void Hu3DMotionTimeSet(s16 arg0, float arg1); -float Hu3DMotionTimeGet(s16 arg0); -float Hu3DMotionShiftTimeGet(s16 arg0); -float Hu3DMotionMaxTimeGet(s16 arg0); -float Hu3DMotionShiftMaxTimeGet(s16 arg0); -void Hu3DMotionShiftStartEndSet(s16 arg0, float arg1, float arg2); -float Hu3DMotionMotionMaxTimeGet(s16 arg0); -void Hu3DMotionStartEndSet(s16 arg0, float arg1, float arg2); -s32 Hu3DMotionEndCheck(s16 arg0); -void Hu3DMotionSpeedSet(s16 arg0, float arg1); -void Hu3DMotionShiftSpeedSet(s16 arg0, float arg1); -void Hu3DMotionNoMotSet(s16 arg0, char *arg1, u32 arg2); -void Hu3DMotionNoMotReset(s16 arg0, char *arg1, u32 arg2); -void Hu3DMotionForceSet(s16 arg0, char *arg1, u32 arg2, float arg3); -void Hu3DMotionNext(s16 arg0); -void Hu3DMotionExec(s16 arg0, s16 arg1, float arg2, s32 arg3); -void Hu3DCameraMotionExec(s16 arg0); -void Hu3DSubMotionExec(s16 arg0); -float *GetObjTRXPtr(HsfObject *arg0, u16 arg1); -void SetObjMatMotion(s16 arg0, HsfTrack *arg1, float arg2); -void SetObjAttrMotion(s16 arg0, HsfTrack *arg1, float arg2); -void SetObjCameraMotion(s16 arg0, HsfTrack *arg1, float arg2); -void SetObjLightMotion(s16 arg0, HsfTrack *arg1, float arg2); -float GetCurve(HsfTrack *arg0, float arg1); -float GetConstant(s32 arg0, float *arg1, float arg2); -float GetLinear(s32 arg0, float arg1[][2], float arg2); -float GetBezier(s32 arg0, HsfTrack *arg1, float arg2); -HsfBitmap *GetBitMap(s32 arg0, UnknownHsfMotionStruct01 *arg1, float arg2); -s16 Hu3DJointMotion(s16 arg0, void *arg1); -void JointModel_Motion(s16 arg0, s16 arg1); -void Hu3DMotionCalc(s16 arg0); - -extern MotionData Hu3DMotion[256]; - - -/* end "game/hsfmotion.h" */ -/* "src\REL\E3setupDLL\main.c" line 7 "game/init.h" */ - -#define _GAME_INIT_H - -/* "include\game\init.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ - -extern GXRenderModeObj *RenderMode; -extern OSHeapHandle currentHeapHandle; - -extern void *DemoFrameBuffer1; -extern void *DemoFrameBuffer2; -extern void *DemoCurrentBuffer; -extern u32 minimumVcount; -extern float minimumVcountf; -extern u32 worstVcount; - -void HuSysInit(GXRenderModeObj *mode); -void HuSysBeforeRender(); -void HuSysDoneRender(s32 retrace_count); - - -/* "src\REL\E3setupDLL\main.c" line 8 "game/minigame_seq.h" */ - -#define _GAME_MINIGAME_SEQ_H - -/* "include\game\minigame_seq.h" line 3 "game/object.h" */ -/* end "game/object.h" */ -/* "include\game\minigame_seq.h" line 4 "stdarg.h" */ - -#define STDARG_H - -typedef struct { - char gpr; - char fpr; - char reserved[2]; - char* input_arg_area; - char* reg_save_area; -} __va_list[1]; -typedef __va_list va_list; - -void* __va_arg(va_list v_list, unsigned char type); - -#define va_start(ap, fmt) ((void) fmt, __builtin_va_info(&ap)) -#define va_arg(ap, t) (*((t*) __va_arg(ap, _var_arg_typeof(t)))) -#define va_end(ap) (void) 0 - - - -#define MG_SEQ_TYPE_TIMER 1 -#define MG_SEQ_TYPE_AUTO 3 -#define MG_SEQ_TYPE_1VS3 4 -#define MG_SEQ_TYPE_WIN 5 -#define MG_SEQ_TYPE_BATTLE 6 -#define MG_SEQ_TYPE_STORY 7 -#define MG_SEQ_TYPE_4P 8 -#define MG_SEQ_TYPE_2VS2 9 -#define MG_SEQ_TYPE_PINBALL 10 -#define MG_SEQ_TYPE_BOWSER 11 -#define MG_SEQ_TYPE_ALTWIN 12 -#define MG_SEQ_TYPE_DRAW 13 -#define MG_SEQ_TYPE_RECORD 14 - -#define MG_SEQ_WIN_TYPE_WIN 3 -#define MG_SEQ_WIN_TYPE_LOSE 4 -#define MG_SEQ_WIN_TYPE_CHAMPION 5 - -#define MG_SEQ_WORD_START 0 -#define MG_SEQ_WORD_FINISH 1 -#define MG_SEQ_WORD_DRAW 2 - -#define MGSeqTimerCreate(value) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), -1, -1) -#define MGSeqTimerCreateXY(value, x, y) MGSeqCreate(MG_SEQ_TYPE_TIMER, (value), (int)(x), (int)(y)) -#define MGSeqStartCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_START) -#define MGSeqFinishCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_FINISH) -#define MGSeqDrawCreate() MGSeqCreate(MG_SEQ_TYPE_AUTO, MG_SEQ_WORD_DRAW) -#define MGSeqStartCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_START) -#define MGSeqFinishCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_FINISH) -#define MGSeqDrawCreateType(type) MGSeqCreate((type), MG_SEQ_WORD_DRAW) -#define MGSeqWinCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_WIN, (player_1), (player_2), (player_3), (player_4)) -#define MGSeqLoseCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_WIN, MG_SEQ_WIN_TYPE_LOSE, (player_1), (player_2), (player_3), (player_4)) -#define MGSeqChampionCreate(player_1, player_2, player_3, player_4) MGSeqCreate(MG_SEQ_TYPE_ALTWIN, MG_SEQ_WIN_TYPE_CHAMPION, (player_1), (player_2), (player_3), (player_4)) -#define MGSeqRecordCreate(value) MGSeqCreate(MG_SEQ_TYPE_RECORD, (value)) - - - -typedef struct seq_work SeqWork; - -typedef int (*SeqUpdateFunc)(SeqWork *work); -typedef int (*SeqInitFunc)(SeqWork *work, va_list params); - -typedef struct seq_work { - SeqUpdateFunc update; - char *data; - float x; - float y; - float scale_x; - float scale_y; - float unk_18; - float angle; - float win_scale; - float unk_24; - s16 time; - s16 time_max; - s16 timer_val; - s16 state; - s16 alt_word_len; - s16 word_len; - s16 param[2]; - s16 type; - s16 spr_grp[16]; - s16 sprite[16]; - u8 seq_no; - u8 stat; - u8 unk_7C; - u8 unk_7D; -} SeqWork; - -void MGSeqInit(void); -void MGSeqMain(void); -s16 MGSeqCreate(s16 type, ...); -u8 MGSeqStatGet(s16 id); -void MGSeqPosSet(s16 id, float x, float y); -void MGSeqParamSet(s16 id, s16 param1, s16 param2); -void MGSeqSprKill(SeqWork *work); -void MGSeqKill(s16 id); -void MGSeqKillAll(void); -s32 MGSeqDoneCheck(void); -void MGSeqStub(void); -void MGSeqPauseInit(void); -void MGSeqPauseEnableCtrl(s32 flag); -void MGSeqPracticeInit(void); -void MGSeqPracticeExitCheck(omObjData *object); - -extern OverlayID mgSeqOvlPrev; - - -/* end "game/minigame_seq.h" */ -/* "src\REL\E3setupDLL\main.c" line 9 "game/chrman.h" */ - -#define _GAME_CHRMAN_H - -/* "include\game\chrman.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ - -void CharManInit(void); -void *CharAMemPtrGet(s16 character); -void CharARAMOpen(s16 character); -void CharARAMClose(s16 character); -void CharKill(s16 arg0); -void CharKillAll(void); -s16 CharModelCreate(s16 character, s16 lod); -s16 CharModelMotionCreate(s16 character, s32 arg1); -void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2); -void CharModelMotionKill(s16 character, u32 motion); -void CharModelMotionDataClose(s16 character); -void CharModelDataClose(s16 arg0); -void CharModelKill(s16 character); -void CharModelMotionSet(s16 character, s16 motion); -void CharModelTexAnimSet(s16 character); -char **CharModelTexNameGet(s16 arg0, s16 arg1); -char *CharModelHookNameGet(s16 arg0, s16 arg1, s16 arg2); -void CharModelMotionTimeSet(s16 character, float time); -float CharModelMotionTimeGet(s16 character); -float CharModelMotionMaxTimeGet(s16 character); -s32 CharModelMotionEndCheck(s16 character); -s16 CharModelMotionShiftIDGet(s16 character); -void CharModelMotionShiftSet(s16 character, s16 motion, float time, float shift_time, u32 attr); -float CharModelMotionShiftTimeGet(s16 character); -void CharModelMotionSpeedSet(s16 character, float speed); -void CharModelLayerSetAll(s16 arg0); -void CharModelItemHookCreate(s16 character, char *arg1); -void CharModelEffectCreate(s16 arg0, Vec *arg1); -void CharModelCoinEffectCreate(s16 arg0, Vec *arg1); -void fn_8004EC74(s16 character); -void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2); -void fn_8004F058(s16 character); -void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2); -void CharModelLayerSetAll2(s16 arg0); -void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); -void fn_8004F52C(s16 character, s32 arg1); -void CharModelEffectEnableSet(s16 character, s32 arg1); -s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3); -s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2); -s32 CharModelStepTypeSet(s16 character, s32 arg1); - - -/* end "game/chrman.h" */ -/* "src\REL\E3setupDLL\main.c" line 10 "game/sprite.h" */ - -#define _GAME_SPRITE_H - -/* "include\game\sprite.h" line 3 "dolphin.h" */ -/* end "dolphin.h" */ -/* "include\game\sprite.h" line 4 "game/data.h" */ -/* end "game/data.h" */ -/* "include\game\sprite.h" line 5 "game/memory.h" */ -/* end "game/memory.h" */ - -#define HUSPR_MAX 384 -#define HUSPR_GRP_MAX 256 - -#define HUSPR_NONE -1 -#define HUSPR_GRP_NONE -1 - -#define HUSPR_ATTR_NOANIM 0x1 -#define HUSPR_ATTR_LOOP 0x2 -#define HUSPR_ATTR_DISPOFF 0x4 -#define HUSPR_ATTR_LINEAR 0x8 -#define HUSPR_ATTR_FUNC 0x10 -#define HUSPR_ATTR_NOPAUSE 0x20 -#define HUSPR_ATTR_REVERSE 0x40 -#define HUSPR_ATTR_ADDCOL 0x80 -#define HUSPR_ATTR_INVCOL 0x100 - -/* "include\game\sprite.h" line 23 "game/animdata.h" */ -/* end "game/animdata.h" */ - -typedef void (*HuSprFunc)(struct hu_sprite *); - -typedef struct hu_sprite { - u8 r; - u8 g; - u8 b; - u8 draw_no; - s16 frame; - s16 bank; - s16 attr; - s16 dirty_flag; - s16 prio; - float time; - float x; - float y; - float z_rot; - float scale_x; - float scale_y; - float speed; - float a; - GXTexWrapMode wrap_s; - GXTexWrapMode wrap_t; - s16 tex_scale_x; - s16 tex_scale_y; - Mtx *group_mtx; - union { - AnimData *data; - HuSprFunc func; - }; - AnimPatData *pat_data; - AnimFrameData *frame_data; - s16 work[4]; - AnimData *bg; - u16 bg_bank; - s16 scissor_x; - s16 scissor_y; - s16 scissor_w; - s16 scissor_h; -} HuSprite; - -typedef struct hu_spr_grp { - s16 capacity; - float x; - float y; - float z_rot; - float scale_x; - float scale_y; - float center_x; - float center_y; - s16 *members; - Mtx mtx; -} HuSprGrp; - -extern HuSprite HuSprData[HUSPR_MAX]; -extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX]; - -#define HuSprAnimReadFile(data_id) (HuSprAnimRead(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) - -void HuSprInit(void); -void HuSprClose(void); -void HuSprExec(s16 draw_no); -void HuSprBegin(void); -HuSprite *HuSprCall(void); -void HuSprFinish(void); -void HuSprPauseSet(BOOL value); -AnimData *HuSprAnimRead(void *data); -void HuSprAnimLock(AnimData *anim); -s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank); -s16 HuSprFuncCreate(HuSprFunc func, s16 prio); -s16 HuSprGrpCreate(s16 capacity); -s16 HuSprGrpCopy(s16 group); -void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite); -void HuSprGrpMemberKill(s16 group, s16 member); -void HuSprGrpKill(s16 group); -void HuSprKill(s16 sprite); -void HuSprAnimKill(AnimData *anim); -void HuSprAttrSet(s16 group, s16 member, s32 attr); -void HuSprAttrReset(s16 group, s16 member, s32 attr); -void HuSprPosSet(s16 group, s16 member, float x, float y); -void HuSprZRotSet(s16 group, s16 member, float z_rot); -void HuSprScaleSet(s16 group, s16 member, float x, float y); -void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl); -void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b); -void HuSprSpeedSet(s16 group, s16 member, float speed); -void HuSprBankSet(s16 group, s16 member, s16 bank); -void HuSprGrpPosSet(s16 group, float x, float y); -void HuSprGrpCenterSet(s16 group, float x, float y); -void HuSprGrpZRotSet(s16 group, float z_rot); -void HuSprGrpScaleSet(s16 group, float x, float y); -void HuSprGrpTPLvlSet(s16 group, float tp_lvl); - -void HuSprGrpDrawNoSet(s16 group, s32 draw_no); - -void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); -void HuSprPriSet(s16 group, s16 member, s16 prio); -void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); -void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h); -AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt); -void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank); -void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank); -void AnimDebug(AnimData *anim); - -void HuSprDispInit(void); -void HuSprDisp(HuSprite *sprite); -void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter); -void HuSprExecLayerSet(s16 draw_no, s16 layer); - - -/* "src\REL\E3setupDLL\main.c" line 11 "game/window.h" */ - -#define _GAME_WINDOW_H - -/* "include\game\window.h" line 3 "game/animdata.h" */ -/* end "game/animdata.h" */ -/* "include\game\window.h" line 4 "dolphin.h" */ -/* end "dolphin.h" */ - -#define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) -#define MAKE_MESSID_PTR(ptr) ((u32)(ptr)) - -typedef struct { - /* 0x00 */ u8 color; - /* 0x01 */ u8 fade; - /* 0x02 */ s16 x; - /* 0x04 */ s16 y; - /* 0x06 */ s16 character; -} WinChar; // Size 8 - -typedef struct { - /* 0x00 */ u8 stat; - /* 0x02 */ s16 x; - /* 0x04 */ s16 y; -} WinChoice; // Size 6 - -typedef struct { - /* 0x000 */ u8 stat; - /* 0x001 */ u8 active_pad; - /* 0x002 */ u8 player_disable; - /* 0x003 */ u8 color_key; - /* 0x004 */ s16 group; - /* 0x006 */ s16 sprite_id[30]; - /* 0x042 */ s16 speed; - /* 0x044 */ s16 mess_time; - /* 0x046 */ s16 advance_sprite; - /* 0x048 */ s16 prio; - /* 0x04C */ u32 attr; - /* 0x050 */ AnimData *frame; - /* 0x054 */ s16 mess_rect_x; - /* 0x056 */ s16 mess_rect_w; - /* 0x058 */ s16 mess_rect_y; - /* 0x05A */ s16 mess_rect_h; - /* 0x05C */ s16 mess_x; - /* 0x05E */ s16 mess_y; - /* 0x060 */ s16 mess_color; - /* 0x062 */ s16 mess_shadow_color; - /* 0x064 */ s16 spacing_x; - /* 0x066 */ s16 spacing_y; - /* 0x068 */ s16 w; - /* 0x06A */ s16 h; - /* 0x06C */ float pos_x; - /* 0x070 */ float pos_y; - /* 0x074 */ float scale_x; - /* 0x078 */ float scale_y; - /* 0x07C */ float z_rot; - /* 0x080 */ s16 num_chars; - /* 0x082 */ s16 max_chars; - /* 0x084 */ WinChar *char_data; - /* 0x088 */ s16 mess_stackptr; - /* 0x08C */ s32 unk8C; - /* 0x090 */ u8 *mess; - /* 0x094 */ u8 *mess_stack[8]; - /* 0x0B4 */ u8 *insert_mess[8]; - /* 0x0D4 */ s16 num_choices; - /* 0x0D6 */ s16 choice; - /* 0x0D8 */ s16 cursor_sprite; - /* 0x0DA */ u8 choice_disable[16]; - /* 0x0EA */ WinChoice choice_data[16]; - /* 0x14A */ s16 scissor_x; - /* 0x14C */ s16 scissor_y; - /* 0x14E */ s16 scissor_w; - /* 0x150 */ s16 scissor_h; - /* 0x152 */ s16 tab_w; - /* 0x154 */ s16 push_key; - /* 0x156 */ s16 key_down; - /* 0x158 */ s16 key_auto; - /* 0x160 */ u8 mess_pal[10][3]; -} WindowData; // Size 0x180 - -extern WindowData winData[32]; -extern void *messDataPtr; - -void HuWindowInit(void); -void HuWinInit(s32 mess_data_no); -s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame); -void HuWinKill(s16 window); -void HuWinAllKill(void); -void HuWinHomeClear(s16 window); -void HuWinKeyWaitEntry(s16 window); -u32 HuWinActivePadGet(WindowData *window); -u32 HuWinActiveKeyGetX(WindowData *window); -void HuWinPosSet(s16 window, float x, float y); -void HuWinScaleSet(s16 window, float x, float y); -void HuWinZRotSet(s16 window, float z_rot); -void HuWinCenterPosSet(s16 window, float x, float y); -void HuWinDrawNoSet(s16 window, s16 draw_no); -void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h); -void HuWinPriSet(s16 window, s16 prio); -void HuWinAttrSet(s16 window, u32 attr); -void HuWinAttrReset(s16 window, u32 attr); -s16 HuWinStatGet(s16 window); -void HuWinMesColSet(s16 window, u8 color); -void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b); -void HuWinBGTPLvlSet(s16 window, float tp_level); -void HuWinBGColSet(s16 window, GXColor *bg_color); -void HuWinMesSpeedSet(s16 window, s16 speed); -void HuWinMesRead(s32 mess_data_no); -void HuWinMesSet(s16 window, u32 mess); -void HuWinInsertMesSet(s16 window, u32 mess, s16 index); -s16 HuWinChoiceGet(s16 window, s16 start_choice); -s16 HuWinChoiceNumGet(s16 window); -void HuWinChoiceDisable(s16 window, s16 choice); -s16 HuWinChoiceNowGet(s16 window); -void HuWinMesWait(s16 window); -s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); -s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); -void HuWinSprPosSet(s16 window, s16 index, float x, float y); -void HuWinSprPriSet(s16 window, s16 index, s16 prio); -s16 HuWinSprIDGet(s16 window, s16 index); -void HuWinSprKill(s16 window, s16 index); -void HuWinDispOff(s16 window); -void HuWinDispOn(s16 window); -void HuWinComKeyWait(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay); -void HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4); -void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 delay); -void HuWinComKeyGet(s16 window, u32 *data); -void HuWinComKeyReset(void); -void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...); -void HuWinInsertMesSizeGet(u32 mess, s16 index); -void HuWinMesSizeCancelCRSet(s32 cancel_cr); -void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end); -s16 HuWinKeyWaitNumGet(u32 mess); -void HuWinPushKeySet(s16 window, s16 push_key); -void HuWinDisablePlayerSet(s16 window, u8 player); -void HuWinDisablePlayerReset(s16 window, u8 player); -s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait); -s16 HuWinExCreateStyled(float x, float y, s16 w, s16 h, s16 portrait, s16 frame); -void HuWinExAnimIn(s16 window); -void HuWinExAnimOut(s16 window); -void HuWinExCleanup(s16 window); -void HuWinExAnimPopIn(s16 window, s16 portrait); -void *MessData_MesPtrGet(void *data, u32 index); - -extern void *messDataPtr; - - -/* end "game/window.h" */ -/* "src\REL\E3setupDLL\main.c" line 12 "ext_math.h" */ - -#define _EXT_MATH_H - -/* "include\ext_math.h" line 3 "math.h" */ - -#define _MATH_H - -#define M_PI 3.141592653589793 - - -#define _MATH_INLINE static inline - - -extern inline float sqrtf(float x) -{ - volatile float y; - if(x > 0.0f) - { - double guess = __frsqrte((double)x); // returns an approximation to - guess = 0.5*guess*(3.0 - guess*guess*x); // now have 12 sig bits - guess = 0.5*guess*(3.0 - guess*guess*x); // now have 24 sig bits - guess = 0.5*guess*(3.0 - guess*guess*x); // now have 32 sig bits - y=(float)(x*guess); - return y; - } - return x; -} - -double atan(double x); -double copysign(double x, double y); -double cos(double x); -double floor(double x); -double frexp(double x, int *exp); -double ldexp(double x, int exp); -double modf(double x, double *intpart); -double sin(double x); -double tan(double x); -double acos(double x); -double asin(double x); -double atan2(double y, double x); -double fmod(double x, double y); -double log(double x); -double pow(double x, double y); -float tanf(float x); -float sinf(float x); -float cosf(float x); -float atan2f(float y, float x); -float acosf(float x); - -extern inline double fabs(double x) -{ - return __fabs(x); -} - - -/* end "math.h" */ -/* "include\ext_math.h" line 4 "dolphin/mtx.h" */ -/* end "dolphin/mtx.h" */ - -typedef struct vec2f { - float x; - float y; -} 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) -#define cosd(x) cos(M_PI*(x)/180.0) -#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI)) diff --git a/ctx_working.c b/ctx_working.c deleted file mode 100644 index c1752823..00000000 --- a/ctx_working.c +++ /dev/null @@ -1,2402 +0,0 @@ -typedef signed char s8; -typedef signed short int s16; -typedef signed long s32; -typedef signed long long int s64; -typedef unsigned char u8; -typedef unsigned short int u16; -typedef unsigned long u32; -typedef unsigned long long int u64; - -typedef volatile u8 vu8; -typedef volatile u16 vu16; -typedef volatile u32 vu32; -typedef volatile u64 vu64; - -typedef volatile s8 vs8; -typedef volatile s16 vs16; -typedef volatile s32 vs32; -typedef volatile s64 vs64; - -typedef float f32; -typedef double f64; - -typedef volatile f32 vf32; -typedef volatile f64 vf64; -typedef int BOOL; -#define FALSE 0 -#define TRUE 1 - -#define NULL ((void *)0) -#define nullptr NULL - -typedef enum _GXCITexFmt { - GX_TF_C4 = 0x8, - GX_TF_C8 = 0x9, - GX_TF_C14X2 = 0xa, -} GXCITexFmt; - -typedef enum _GXTexWrapMode { - GX_CLAMP, - GX_REPEAT, - GX_MIRROR, - GX_MAX_TEXWRAPMODE, -} GXTexWrapMode; - -typedef enum _GXTexFilter { - GX_NEAR, - GX_LINEAR, - GX_NEAR_MIP_NEAR, - GX_LIN_MIP_NEAR, - GX_NEAR_MIP_LIN, - GX_LIN_MIP_LIN, -} GXTexFilter; - -typedef enum _GXAnisotropy { - GX_ANISO_1, - GX_ANISO_2, - GX_ANISO_4, - GX_MAX_ANISOTROPY, -} GXAnisotropy; - -typedef enum _GXTexMapID { - GX_TEXMAP0, - GX_TEXMAP1, - GX_TEXMAP2, - GX_TEXMAP3, - GX_TEXMAP4, - GX_TEXMAP5, - GX_TEXMAP6, - GX_TEXMAP7, - GX_MAX_TEXMAP, - GX_TEXMAP_NULL = 0xFF, - GX_TEX_DISABLE = 0x100, -} GXTexMapID; - -typedef enum _GXTexCoordID { - GX_TEXCOORD0, - GX_TEXCOORD1, - GX_TEXCOORD2, - GX_TEXCOORD3, - GX_TEXCOORD4, - GX_TEXCOORD5, - GX_TEXCOORD6, - GX_TEXCOORD7, - GX_MAX_TEXCOORD, - GX_TEXCOORD_NULL = 0xFF, -} GXTexCoordID; - -typedef enum _GXTevStageID { - GX_TEVSTAGE0, - GX_TEVSTAGE1, - GX_TEVSTAGE2, - GX_TEVSTAGE3, - GX_TEVSTAGE4, - GX_TEVSTAGE5, - GX_TEVSTAGE6, - GX_TEVSTAGE7, - GX_TEVSTAGE8, - GX_TEVSTAGE9, - GX_TEVSTAGE10, - GX_TEVSTAGE11, - GX_TEVSTAGE12, - GX_TEVSTAGE13, - GX_TEVSTAGE14, - GX_TEVSTAGE15, - GX_MAX_TEVSTAGE, -} GXTevStageID; - -typedef enum _GXTevMode { - GX_MODULATE, - GX_DECAL, - GX_BLEND, - GX_REPLACE, - GX_PASSCLR, -} GXTevMode; - -typedef enum _GXTexMtxType { - GX_MTX3x4, - GX_MTX2x4, -} GXTexMtxType; - -typedef enum _GXTexGenType { - GX_TG_MTX3x4, - GX_TG_MTX2x4, - GX_TG_BUMP0, - GX_TG_BUMP1, - GX_TG_BUMP2, - GX_TG_BUMP3, - GX_TG_BUMP4, - GX_TG_BUMP5, - GX_TG_BUMP6, - GX_TG_BUMP7, - GX_TG_SRTG, -} GXTexGenType; - -typedef enum _GXPosNrmMtx { - GX_PNMTX0 = 0, - GX_PNMTX1 = 3, - GX_PNMTX2 = 6, - GX_PNMTX3 = 9, - GX_PNMTX4 = 12, - GX_PNMTX5 = 15, - GX_PNMTX6 = 18, - GX_PNMTX7 = 21, - GX_PNMTX8 = 24, - GX_PNMTX9 = 27, -} GXPosNrmMtx; - -typedef enum _GXTexMtx { - GX_TEXMTX0 = 30, - GX_TEXMTX1 = 33, - GX_TEXMTX2 = 36, - GX_TEXMTX3 = 39, - GX_TEXMTX4 = 42, - GX_TEXMTX5 = 45, - GX_TEXMTX6 = 48, - GX_TEXMTX7 = 51, - GX_TEXMTX8 = 54, - GX_TEXMTX9 = 57, - GX_IDENTITY = 60, -} GXTexMtx; - -typedef enum _GXChannelID { - GX_COLOR0, - GX_COLOR1, - GX_ALPHA0, - GX_ALPHA1, - GX_COLOR0A0, - GX_COLOR1A1, - GX_COLOR_ZERO, - GX_ALPHA_BUMP, - GX_ALPHA_BUMPN, - GX_COLOR_NULL = 0xFF, -} GXChannelID; - -typedef enum _GXTexGenSrc { - GX_TG_POS, - GX_TG_NRM, - GX_TG_BINRM, - GX_TG_TANGENT, - GX_TG_TEX0, - GX_TG_TEX1, - GX_TG_TEX2, - GX_TG_TEX3, - GX_TG_TEX4, - GX_TG_TEX5, - GX_TG_TEX6, - GX_TG_TEX7, - GX_TG_TEXCOORD0, - GX_TG_TEXCOORD1, - GX_TG_TEXCOORD2, - GX_TG_TEXCOORD3, - GX_TG_TEXCOORD4, - GX_TG_TEXCOORD5, - GX_TG_TEXCOORD6, - GX_TG_COLOR0, - GX_TG_COLOR1, - GX_MAX_TEXGENSRC, -} GXTexGenSrc; - -typedef enum _GXBlendMode { - GX_BM_NONE, - GX_BM_BLEND, - GX_BM_LOGIC, - GX_BM_SUBTRACT, - GX_MAX_BLENDMODE, -} GXBlendMode; - -typedef enum _GXBlendFactor { - GX_BL_ZERO, - GX_BL_ONE, - GX_BL_SRCCLR, - GX_BL_INVSRCCLR, - GX_BL_SRCALPHA, - GX_BL_INVSRCALPHA, - GX_BL_DSTALPHA, - GX_BL_INVDSTALPHA, - GX_BL_DSTCLR = GX_BL_SRCCLR, - GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, -} GXBlendFactor; - -#define GX_FALSE ((GXBool)0) -#define GX_TRUE ((GXBool)1) - -#define GX_ENABLE ((GXBool)1) -#define GX_DISABLE ((GXBool)0) - -typedef enum _GXProjectionType { - GX_PERSPECTIVE, - GX_ORTHOGRAPHIC, -} GXProjectionType; - -typedef enum _GXCompare { - GX_NEVER, - GX_LESS, - GX_EQUAL, - GX_LEQUAL, - GX_GREATER, - GX_NEQUAL, - GX_GEQUAL, - GX_ALWAYS, -} GXCompare; - -typedef enum _GXAlphaOp { - GX_AOP_AND, - GX_AOP_OR, - GX_AOP_XOR, - GX_AOP_XNOR, - GX_MAX_ALPHAOP, -} GXAlphaOp; - -typedef enum _GXZFmt16 { - GX_ZC_LINEAR, - GX_ZC_NEAR, - GX_ZC_MID, - GX_ZC_FAR, -} GXZFmt16; - -typedef enum _GXGamma { - GX_GM_1_0, - GX_GM_1_7, - GX_GM_2_2, -} GXGamma; - -typedef enum _GXPixelFmt { - GX_PF_RGB8_Z24, - GX_PF_RGBA6_Z24, - GX_PF_RGB565_Z16, - GX_PF_Z24, - GX_PF_Y8, - GX_PF_U8, - GX_PF_V8, - GX_PF_YUV420, -} GXPixelFmt; - -typedef enum _GXPrimitive { - GX_QUADS = 0x80, - GX_TRIANGLES = 0x90, - GX_TRIANGLESTRIP = 0x98, - GX_TRIANGLEFAN = 0xA0, - GX_LINES = 0xA8, - GX_LINESTRIP = 0xB0, - GX_POINTS = 0xB8, -} GXPrimitive; - -typedef enum _GXVtxFmt { - GX_VTXFMT0, - GX_VTXFMT1, - GX_VTXFMT2, - GX_VTXFMT3, - GX_VTXFMT4, - GX_VTXFMT5, - GX_VTXFMT6, - GX_VTXFMT7, - GX_MAX_VTXFMT, -} GXVtxFmt; - -typedef enum _GXAttr { - GX_VA_PNMTXIDX, - GX_VA_TEX0MTXIDX, - GX_VA_TEX1MTXIDX, - GX_VA_TEX2MTXIDX, - GX_VA_TEX3MTXIDX, - GX_VA_TEX4MTXIDX, - GX_VA_TEX5MTXIDX, - GX_VA_TEX6MTXIDX, - GX_VA_TEX7MTXIDX, - GX_VA_POS, - GX_VA_NRM, - GX_VA_CLR0, - GX_VA_CLR1, - GX_VA_TEX0, - GX_VA_TEX1, - GX_VA_TEX2, - GX_VA_TEX3, - GX_VA_TEX4, - GX_VA_TEX5, - GX_VA_TEX6, - GX_VA_TEX7, - GX_POS_MTX_ARRAY, - GX_NRM_MTX_ARRAY, - GX_TEX_MTX_ARRAY, - GX_LIGHT_ARRAY, - GX_VA_NBT, - GX_VA_MAX_ATTR, - GX_VA_NULL = 0xFF, -} GXAttr; - -#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1) - -typedef enum _GXAttrType { - GX_NONE, - GX_DIRECT, - GX_INDEX8, - GX_INDEX16, -} GXAttrType; - -#define _GX_TF_CTF 0x20 -#define _GX_TF_ZTF 0x10 - -typedef enum _GXTexFmt { - GX_TF_I4 = 0x0, - GX_TF_I8 = 0x1, - GX_TF_IA4 = 0x2, - GX_TF_IA8 = 0x3, - GX_TF_RGB565 = 0x4, - GX_TF_RGB5A3 = 0x5, - GX_TF_RGBA8 = 0x6, - GX_TF_CMPR = 0xE, - - GX_CTF_R4 = 0x0 , - GX_CTF_RA4 = 0x2 , - GX_CTF_RA8 = 0x3 , - GX_CTF_YUVA8 = 0x6 , - GX_CTF_A8 = 0x7 , - GX_CTF_R8 = 0x8 , - GX_CTF_G8 = 0x9 , - GX_CTF_B8 = 0xA , - GX_CTF_RG8 = 0xB , - GX_CTF_GB8 = 0xC , - - GX_TF_Z8 = 0x1 , - GX_TF_Z16 = 0x3 , - GX_TF_Z24X8 = 0x6 , - - GX_CTF_Z4 = 0x0 , - GX_CTF_Z8M = 0x9 , - GX_CTF_Z8L = 0xA, - GX_CTF_Z16L = 0xC, - - GX_TF_A8 = GX_CTF_A8, -} GXTexFmt; - -typedef enum _GXCITexFmt { - GX_TF_C4 = 0x8, - GX_TF_C8 = 0x9, - GX_TF_C14X2 = 0xa, -} GXCITexFmt; - -typedef enum _GXTexWrapMode { - GX_CLAMP, - GX_REPEAT, - GX_MIRROR, - GX_MAX_TEXWRAPMODE, -} GXTexWrapMode; - -typedef enum _GXTexFilter { - GX_NEAR, - GX_LINEAR, - GX_NEAR_MIP_NEAR, - GX_LIN_MIP_NEAR, - GX_NEAR_MIP_LIN, - GX_LIN_MIP_LIN, -} GXTexFilter; - -typedef enum _GXAnisotropy { - GX_ANISO_1, - GX_ANISO_2, - GX_ANISO_4, - GX_MAX_ANISOTROPY, -} GXAnisotropy; - -typedef enum _GXTexMapID { - GX_TEXMAP0, - GX_TEXMAP1, - GX_TEXMAP2, - GX_TEXMAP3, - GX_TEXMAP4, - GX_TEXMAP5, - GX_TEXMAP6, - GX_TEXMAP7, - GX_MAX_TEXMAP, - GX_TEXMAP_NULL = 0xFF, - GX_TEX_DISABLE = 0x100, -} GXTexMapID; - -typedef enum _GXTexCoordID { - GX_TEXCOORD0, - GX_TEXCOORD1, - GX_TEXCOORD2, - GX_TEXCOORD3, - GX_TEXCOORD4, - GX_TEXCOORD5, - GX_TEXCOORD6, - GX_TEXCOORD7, - GX_MAX_TEXCOORD, - GX_TEXCOORD_NULL = 0xFF, -} GXTexCoordID; - -typedef enum _GXTevStageID { - GX_TEVSTAGE0, - GX_TEVSTAGE1, - GX_TEVSTAGE2, - GX_TEVSTAGE3, - GX_TEVSTAGE4, - GX_TEVSTAGE5, - GX_TEVSTAGE6, - GX_TEVSTAGE7, - GX_TEVSTAGE8, - GX_TEVSTAGE9, - GX_TEVSTAGE10, - GX_TEVSTAGE11, - GX_TEVSTAGE12, - GX_TEVSTAGE13, - GX_TEVSTAGE14, - GX_TEVSTAGE15, - GX_MAX_TEVSTAGE, -} GXTevStageID; - -typedef enum _GXTevMode { - GX_MODULATE, - GX_DECAL, - GX_BLEND, - GX_REPLACE, - GX_PASSCLR, -} GXTevMode; - -typedef enum _GXTexMtxType { - GX_MTX3x4, - GX_MTX2x4, -} GXTexMtxType; - -typedef enum _GXTexGenType { - GX_TG_MTX3x4, - GX_TG_MTX2x4, - GX_TG_BUMP0, - GX_TG_BUMP1, - GX_TG_BUMP2, - GX_TG_BUMP3, - GX_TG_BUMP4, - GX_TG_BUMP5, - GX_TG_BUMP6, - GX_TG_BUMP7, - GX_TG_SRTG, -} GXTexGenType; - -typedef enum _GXPosNrmMtx { - GX_PNMTX0 = 0, - GX_PNMTX1 = 3, - GX_PNMTX2 = 6, - GX_PNMTX3 = 9, - GX_PNMTX4 = 12, - GX_PNMTX5 = 15, - GX_PNMTX6 = 18, - GX_PNMTX7 = 21, - GX_PNMTX8 = 24, - GX_PNMTX9 = 27, -} GXPosNrmMtx; - -typedef enum _GXTexMtx { - GX_TEXMTX0 = 30, - GX_TEXMTX1 = 33, - GX_TEXMTX2 = 36, - GX_TEXMTX3 = 39, - GX_TEXMTX4 = 42, - GX_TEXMTX5 = 45, - GX_TEXMTX6 = 48, - GX_TEXMTX7 = 51, - GX_TEXMTX8 = 54, - GX_TEXMTX9 = 57, - GX_IDENTITY = 60, -} GXTexMtx; - -typedef enum _GXChannelID { - GX_COLOR0, - GX_COLOR1, - GX_ALPHA0, - GX_ALPHA1, - GX_COLOR0A0, - GX_COLOR1A1, - GX_COLOR_ZERO, - GX_ALPHA_BUMP, - GX_ALPHA_BUMPN, - GX_COLOR_NULL = 0xFF, -} GXChannelID; - -typedef enum _GXTexGenSrc { - GX_TG_POS, - GX_TG_NRM, - GX_TG_BINRM, - GX_TG_TANGENT, - GX_TG_TEX0, - GX_TG_TEX1, - GX_TG_TEX2, - GX_TG_TEX3, - GX_TG_TEX4, - GX_TG_TEX5, - GX_TG_TEX6, - GX_TG_TEX7, - GX_TG_TEXCOORD0, - GX_TG_TEXCOORD1, - GX_TG_TEXCOORD2, - GX_TG_TEXCOORD3, - GX_TG_TEXCOORD4, - GX_TG_TEXCOORD5, - GX_TG_TEXCOORD6, - GX_TG_COLOR0, - GX_TG_COLOR1, - GX_MAX_TEXGENSRC, -} GXTexGenSrc; - -typedef enum _GXBlendMode { - GX_BM_NONE, - GX_BM_BLEND, - GX_BM_LOGIC, - GX_BM_SUBTRACT, - GX_MAX_BLENDMODE, -} GXBlendMode; - -typedef enum _GXBlendFactor { - GX_BL_ZERO, - GX_BL_ONE, - GX_BL_SRCCLR, - GX_BL_INVSRCCLR, - GX_BL_SRCALPHA, - GX_BL_INVSRCALPHA, - GX_BL_DSTALPHA, - GX_BL_INVDSTALPHA, - GX_BL_DSTCLR = GX_BL_SRCCLR, - GX_BL_INVDSTCLR = GX_BL_INVSRCCLR, -} GXBlendFactor; - -typedef enum _GXLogicOp { - GX_LO_CLEAR, - GX_LO_AND, - GX_LO_REVAND, - GX_LO_COPY, - GX_LO_INVAND, - GX_LO_NOOP, - GX_LO_XOR, - GX_LO_OR, - GX_LO_NOR, - GX_LO_EQUIV, - GX_LO_INV, - GX_LO_REVOR, - GX_LO_INVCOPY, - GX_LO_INVOR, - GX_LO_NAND, - GX_LO_SET, -} GXLogicOp; - -typedef enum _GXCompCnt { - GX_POS_XY = 0, - GX_POS_XYZ = 1, - GX_NRM_XYZ = 0, - GX_NRM_NBT = 1, - GX_NRM_NBT3 = 2, - GX_CLR_RGB = 0, - GX_CLR_RGBA = 1, - GX_TEX_S = 0, - GX_TEX_ST = 1, -} GXCompCnt; - -typedef enum _GXCompType { - GX_U8 = 0, - GX_S8 = 1, - GX_U16 = 2, - GX_S16 = 3, - GX_F32 = 4, - GX_RGB565 = 0, - GX_RGB8 = 1, - GX_RGBX8 = 2, - GX_RGBA4 = 3, - GX_RGBA6 = 4, - GX_RGBA8 = 5, -} GXCompType; - -typedef enum _GXPTTexMtx { - GX_PTTEXMTX0 = 64, - GX_PTTEXMTX1 = 67, - GX_PTTEXMTX2 = 70, - GX_PTTEXMTX3 = 73, - GX_PTTEXMTX4 = 76, - GX_PTTEXMTX5 = 79, - GX_PTTEXMTX6 = 82, - GX_PTTEXMTX7 = 85, - GX_PTTEXMTX8 = 88, - GX_PTTEXMTX9 = 91, - GX_PTTEXMTX10 = 94, - GX_PTTEXMTX11 = 97, - GX_PTTEXMTX12 = 100, - GX_PTTEXMTX13 = 103, - GX_PTTEXMTX14 = 106, - GX_PTTEXMTX15 = 109, - GX_PTTEXMTX16 = 112, - GX_PTTEXMTX17 = 115, - GX_PTTEXMTX18 = 118, - GX_PTTEXMTX19 = 121, - GX_PTIDENTITY = 125, -} GXPTTexMtx; - -typedef enum _GXTevRegID { - GX_TEVPREV, - GX_TEVREG0, - GX_TEVREG1, - GX_TEVREG2, - GX_MAX_TEVREG, -} GXTevRegID; - -typedef enum _GXDiffuseFn { - GX_DF_NONE, - GX_DF_SIGN, - GX_DF_CLAMP, -} GXDiffuseFn; - -typedef enum _GXColorSrc { - GX_SRC_REG, - GX_SRC_VTX, -} GXColorSrc; - -typedef enum _GXAttnFn { - GX_AF_SPEC, - GX_AF_SPOT, - GX_AF_NONE, -} GXAttnFn; - -typedef enum _GXLightID { - GX_LIGHT0 = 0x001, - GX_LIGHT1 = 0x002, - GX_LIGHT2 = 0x004, - GX_LIGHT3 = 0x008, - GX_LIGHT4 = 0x010, - GX_LIGHT5 = 0x020, - GX_LIGHT6 = 0x040, - GX_LIGHT7 = 0x080, - GX_MAX_LIGHT = 0x100, - GX_LIGHT_NULL = 0, -} GXLightID; - -typedef enum _GXTexOffset { - GX_TO_ZERO, - GX_TO_SIXTEENTH, - GX_TO_EIGHTH, - GX_TO_FOURTH, - GX_TO_HALF, - GX_TO_ONE, - GX_MAX_TEXOFFSET, -} GXTexOffset; - -typedef enum _GXSpotFn { - GX_SP_OFF, - GX_SP_FLAT, - GX_SP_COS, - GX_SP_COS2, - GX_SP_SHARP, - GX_SP_RING1, - GX_SP_RING2, -} GXSpotFn; - -typedef enum _GXDistAttnFn { - GX_DA_OFF, - GX_DA_GENTLE, - GX_DA_MEDIUM, - GX_DA_STEEP, -} GXDistAttnFn; - -typedef enum _GXCullMode { - GX_CULL_NONE, - GX_CULL_FRONT, - GX_CULL_BACK, - GX_CULL_ALL, -} GXCullMode; - -typedef enum _GXTevSwapSel { - GX_TEV_SWAP0 = 0, - GX_TEV_SWAP1, - GX_TEV_SWAP2, - GX_TEV_SWAP3, - GX_MAX_TEVSWAP, -} GXTevSwapSel; - -typedef enum _GXTevColorChan { - GX_CH_RED = 0, - GX_CH_GREEN, - GX_CH_BLUE, - GX_CH_ALPHA, -} GXTevColorChan; - -typedef enum _GXFogType { - GX_FOG_NONE = 0, - GX_FOG_PERSP_LIN = 2, - GX_FOG_PERSP_EXP = 4, - GX_FOG_PERSP_EXP2 = 5, - GX_FOG_PERSP_REVEXP = 6, - GX_FOG_PERSP_REVEXP2 = 7, - GX_FOG_ORTHO_LIN = 10, - GX_FOG_ORTHO_EXP = 12, - GX_FOG_ORTHO_EXP2 = 13, - GX_FOG_ORTHO_REVEXP = 14, - GX_FOG_ORTHO_REVEXP2 = 15, - GX_FOG_LIN = GX_FOG_PERSP_LIN, - GX_FOG_EXP = GX_FOG_PERSP_EXP, - GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, - GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, - GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, -} GXFogType; - -typedef enum _GXTevColorArg { - GX_CC_CPREV, - GX_CC_APREV, - GX_CC_C0, - GX_CC_A0, - GX_CC_C1, - GX_CC_A1, - GX_CC_C2, - GX_CC_A2, - GX_CC_TEXC, - GX_CC_TEXA, - GX_CC_RASC, - GX_CC_RASA, - GX_CC_ONE, - GX_CC_HALF, - GX_CC_KONST, - GX_CC_ZERO, -} GXTevColorArg; - -typedef enum _GXTevAlphaArg { - GX_CA_APREV, - GX_CA_A0, - GX_CA_A1, - GX_CA_A2, - GX_CA_TEXA, - GX_CA_RASA, - GX_CA_KONST, - GX_CA_ZERO, -} GXTevAlphaArg; - -typedef enum _GXTevOp { - GX_TEV_ADD = 0, - GX_TEV_SUB = 1, - GX_TEV_COMP_R8_GT = 8, - GX_TEV_COMP_R8_EQ = 9, - GX_TEV_COMP_GR16_GT = 10, - GX_TEV_COMP_GR16_EQ = 11, - GX_TEV_COMP_BGR24_GT = 12, - GX_TEV_COMP_BGR24_EQ = 13, - GX_TEV_COMP_RGB8_GT = 14, - GX_TEV_COMP_RGB8_EQ = 15, - GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, - GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, -} GXTevOp; - -typedef enum _GXTevBias { - GX_TB_ZERO, - GX_TB_ADDHALF, - GX_TB_SUBHALF, - GX_MAX_TEVBIAS, -} GXTevBias; - -typedef enum _GXTevScale { - GX_CS_SCALE_1, - GX_CS_SCALE_2, - GX_CS_SCALE_4, - GX_CS_DIVIDE_2, - GX_MAX_TEVSCALE, -} GXTevScale; - -typedef enum _GXTevKColorSel { - GX_TEV_KCSEL_8_8 = 0x00, - GX_TEV_KCSEL_7_8 = 0x01, - GX_TEV_KCSEL_6_8 = 0x02, - GX_TEV_KCSEL_5_8 = 0x03, - GX_TEV_KCSEL_4_8 = 0x04, - GX_TEV_KCSEL_3_8 = 0x05, - GX_TEV_KCSEL_2_8 = 0x06, - GX_TEV_KCSEL_1_8 = 0x07, - GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, - GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, - GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, - GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, - GX_TEV_KCSEL_K0 = 0x0C, - GX_TEV_KCSEL_K1 = 0x0D, - GX_TEV_KCSEL_K2 = 0x0E, - GX_TEV_KCSEL_K3 = 0x0F, - GX_TEV_KCSEL_K0_R = 0x10, - GX_TEV_KCSEL_K1_R = 0x11, - GX_TEV_KCSEL_K2_R = 0x12, - GX_TEV_KCSEL_K3_R = 0x13, - GX_TEV_KCSEL_K0_G = 0x14, - GX_TEV_KCSEL_K1_G = 0x15, - GX_TEV_KCSEL_K2_G = 0x16, - GX_TEV_KCSEL_K3_G = 0x17, - GX_TEV_KCSEL_K0_B = 0x18, - GX_TEV_KCSEL_K1_B = 0x19, - GX_TEV_KCSEL_K2_B = 0x1A, - GX_TEV_KCSEL_K3_B = 0x1B, - GX_TEV_KCSEL_K0_A = 0x1C, - GX_TEV_KCSEL_K1_A = 0x1D, - GX_TEV_KCSEL_K2_A = 0x1E, - GX_TEV_KCSEL_K3_A = 0x1F, -} GXTevKColorSel; - -typedef enum _GXTevKAlphaSel { - GX_TEV_KASEL_8_8 = 0x00, - GX_TEV_KASEL_7_8 = 0x01, - GX_TEV_KASEL_6_8 = 0x02, - GX_TEV_KASEL_5_8 = 0x03, - GX_TEV_KASEL_4_8 = 0x04, - GX_TEV_KASEL_3_8 = 0x05, - GX_TEV_KASEL_2_8 = 0x06, - GX_TEV_KASEL_1_8 = 0x07, - GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, - GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, - GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, - GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, - GX_TEV_KASEL_K0_R = 0x10, - GX_TEV_KASEL_K1_R = 0x11, - GX_TEV_KASEL_K2_R = 0x12, - GX_TEV_KASEL_K3_R = 0x13, - GX_TEV_KASEL_K0_G = 0x14, - GX_TEV_KASEL_K1_G = 0x15, - GX_TEV_KASEL_K2_G = 0x16, - GX_TEV_KASEL_K3_G = 0x17, - GX_TEV_KASEL_K0_B = 0x18, - GX_TEV_KASEL_K1_B = 0x19, - GX_TEV_KASEL_K2_B = 0x1A, - GX_TEV_KASEL_K3_B = 0x1B, - GX_TEV_KASEL_K0_A = 0x1C, - GX_TEV_KASEL_K1_A = 0x1D, - GX_TEV_KASEL_K2_A = 0x1E, - GX_TEV_KASEL_K3_A = 0x1F, -} GXTevKAlphaSel; - -typedef enum _GXTevKColorID { - GX_KCOLOR0 = 0, - GX_KCOLOR1, - GX_KCOLOR2, - GX_KCOLOR3, - GX_MAX_KCOLOR, -} GXTevKColorID; - -typedef enum _GXZTexOp { - GX_ZT_DISABLE, - GX_ZT_ADD, - GX_ZT_REPLACE, - GX_MAX_ZTEXOP, -} GXZTexOp; - -typedef enum _GXIndTexFormat { - GX_ITF_8, - GX_ITF_5, - GX_ITF_4, - GX_ITF_3, - GX_MAX_ITFORMAT, -} GXIndTexFormat; - -typedef enum _GXIndTexBiasSel { - GX_ITB_NONE, - GX_ITB_S, - GX_ITB_T, - GX_ITB_ST, - GX_ITB_U, - GX_ITB_SU, - GX_ITB_TU, - GX_ITB_STU, - GX_MAX_ITBIAS, -} GXIndTexBiasSel; - -typedef enum _GXIndTexAlphaSel { - GX_ITBA_OFF, - GX_ITBA_S, - GX_ITBA_T, - GX_ITBA_U, - GX_MAX_ITBALPHA, -} GXIndTexAlphaSel; - -typedef enum _GXIndTexMtxID { - GX_ITM_OFF, - GX_ITM_0, - GX_ITM_1, - GX_ITM_2, - GX_ITM_S0 = 5, - GX_ITM_S1, - GX_ITM_S2, - GX_ITM_T0 = 9, - GX_ITM_T1, - GX_ITM_T2, -} GXIndTexMtxID; - -typedef enum _GXIndTexWrap { - GX_ITW_OFF, - GX_ITW_256, - GX_ITW_128, - GX_ITW_64, - GX_ITW_32, - GX_ITW_16, - GX_ITW_0, - GX_MAX_ITWRAP, -} GXIndTexWrap; - -typedef enum _GXIndTexStageID { - GX_INDTEXSTAGE0, - GX_INDTEXSTAGE1, - GX_INDTEXSTAGE2, - GX_INDTEXSTAGE3, - GX_MAX_INDTEXSTAGE, -} GXIndTexStageID; - -typedef enum _GXIndTexScale { - GX_ITS_1, - GX_ITS_2, - GX_ITS_4, - GX_ITS_8, - GX_ITS_16, - GX_ITS_32, - GX_ITS_64, - GX_ITS_128, - GX_ITS_256, - GX_MAX_ITSCALE, -} GXIndTexScale; - -typedef enum _GXClipMode { - GX_CLIP_ENABLE = 0, - GX_CLIP_DISABLE = 1, -} GXClipMode; - -typedef enum _GXTlut { - GX_TLUT0 = 0, - GX_TLUT1 = 1, - GX_TLUT2 = 2, - GX_TLUT3 = 3, - GX_TLUT4 = 4, - GX_TLUT5 = 5, - GX_TLUT6 = 6, - GX_TLUT7 = 7, - GX_TLUT8 = 8, - GX_TLUT9 = 9, - GX_TLUT10 = 10, - GX_TLUT11 = 11, - GX_TLUT12 = 12, - GX_TLUT13 = 13, - GX_TLUT14 = 14, - GX_TLUT15 = 15, - GX_BIGTLUT0 = 16, - GX_BIGTLUT1 = 17, - GX_BIGTLUT2 = 18, - GX_BIGTLUT3 = 19, -} GXTlut; - -typedef enum _GXTlutFmt { - GX_TL_IA8, - GX_TL_RGB565, - GX_TL_RGB5A3, - GX_MAX_TLUTFMT, -} GXTlutFmt; - -typedef enum _GXMiscToken { - GX_MT_NULL = 0, - GX_MT_XF_FLUSH = 1, - GX_MT_DL_SAVE_CONTEXT = 2, - GX_MT_ABORT_WAIT_COPYOUT = 3, -} GXMiscToken; - -typedef enum _GXTexCacheSize { - GX_TEXCACHE_32K, - GX_TEXCACHE_128K, - GX_TEXCACHE_512K, - GX_TEXCACHE_NONE -} GXTexCacheSize; - -typedef enum _GXPerf0 { - GX_PERF0_VERTICES, - GX_PERF0_CLIP_VTX, - GX_PERF0_CLIP_CLKS, - GX_PERF0_XF_WAIT_IN, - GX_PERF0_XF_WAIT_OUT, - GX_PERF0_XF_XFRM_CLKS, - GX_PERF0_XF_LIT_CLKS, - GX_PERF0_XF_BOT_CLKS, - GX_PERF0_XF_REGLD_CLKS, - GX_PERF0_XF_REGRD_CLKS, - GX_PERF0_CLIP_RATIO, - - GX_PERF0_TRIANGLES, - GX_PERF0_TRIANGLES_CULLED, - GX_PERF0_TRIANGLES_PASSED, - GX_PERF0_TRIANGLES_SCISSORED, - GX_PERF0_TRIANGLES_0TEX, - GX_PERF0_TRIANGLES_1TEX, - GX_PERF0_TRIANGLES_2TEX, - GX_PERF0_TRIANGLES_3TEX, - GX_PERF0_TRIANGLES_4TEX, - GX_PERF0_TRIANGLES_5TEX, - GX_PERF0_TRIANGLES_6TEX, - GX_PERF0_TRIANGLES_7TEX, - GX_PERF0_TRIANGLES_8TEX, - GX_PERF0_TRIANGLES_0CLR, - GX_PERF0_TRIANGLES_1CLR, - GX_PERF0_TRIANGLES_2CLR, - - GX_PERF0_QUAD_0CVG, - GX_PERF0_QUAD_NON0CVG, - GX_PERF0_QUAD_1CVG, - GX_PERF0_QUAD_2CVG, - GX_PERF0_QUAD_3CVG, - GX_PERF0_QUAD_4CVG, - GX_PERF0_AVG_QUAD_CNT, - - GX_PERF0_CLOCKS, - GX_PERF0_NONE - -} GXPerf0; - -typedef enum _GXPerf1 { - GX_PERF1_TEXELS, - GX_PERF1_TX_IDLE, - GX_PERF1_TX_REGS, - GX_PERF1_TX_MEMSTALL, - GX_PERF1_TC_CHECK1_2, - GX_PERF1_TC_CHECK3_4, - GX_PERF1_TC_CHECK5_6, - GX_PERF1_TC_CHECK7_8, - GX_PERF1_TC_MISS, - - GX_PERF1_VC_ELEMQ_FULL, - GX_PERF1_VC_MISSQ_FULL, - GX_PERF1_VC_MEMREQ_FULL, - GX_PERF1_VC_STATUS7, - GX_PERF1_VC_MISSREP_FULL, - GX_PERF1_VC_STREAMBUF_LOW, - GX_PERF1_VC_ALL_STALLS, - GX_PERF1_VERTICES, - - GX_PERF1_FIFO_REQ, - GX_PERF1_CALL_REQ, - GX_PERF1_VC_MISS_REQ, - GX_PERF1_CP_ALL_REQ, - - GX_PERF1_CLOCKS, - GX_PERF1_NONE - -} GXPerf1; - -typedef enum _GXVCachePerf { - GX_VC_POS, - GX_VC_NRM, - GX_VC_CLR0, - GX_VC_CLR1, - GX_VC_TEX0, - GX_VC_TEX1, - GX_VC_TEX2, - GX_VC_TEX3, - GX_VC_TEX4, - GX_VC_TEX5, - GX_VC_TEX6, - GX_VC_TEX7, - GX_VC_ALL = 0xf - -} GXVCachePerf; - -typedef enum _GXFBClamp { - GX_CLAMP_NONE = 0, - GX_CLAMP_TOP = 1, - GX_CLAMP_BOTTOM = 2, -} GXFBClamp; - -typedef enum _GXCopyMode { - GX_COPY_PROGRESSIVE = 0, - GX_COPY_INTLC_EVEN = 2, - GX_COPY_INTLC_ODD = 3, -} GXCopyMode; - -typedef enum _GXAlphaReadMode { - GX_READ_00 = 0, - GX_READ_FF = 1, - GX_READ_NONE = 2, - -} _GXAlphaReadMode; - -typedef enum _GXLogicOp { - GX_LO_CLEAR, - GX_LO_AND, - GX_LO_REVAND, - GX_LO_COPY, - GX_LO_INVAND, - GX_LO_NOOP, - GX_LO_XOR, - GX_LO_OR, - GX_LO_NOR, - GX_LO_EQUIV, - GX_LO_INV, - GX_LO_REVOR, - GX_LO_INVCOPY, - GX_LO_INVOR, - GX_LO_NAND, - GX_LO_SET, -} GXLogicOp; - -typedef enum _GXCompCnt { - GX_POS_XY = 0, - GX_POS_XYZ = 1, - GX_NRM_XYZ = 0, - GX_NRM_NBT = 1, - GX_NRM_NBT3 = 2, - GX_CLR_RGB = 0, - GX_CLR_RGBA = 1, - GX_TEX_S = 0, - GX_TEX_ST = 1, -} GXCompCnt; - -typedef enum _GXCompType { - GX_U8 = 0, - GX_S8 = 1, - GX_U16 = 2, - GX_S16 = 3, - GX_F32 = 4, - GX_RGB565 = 0, - GX_RGB8 = 1, - GX_RGBX8 = 2, - GX_RGBA4 = 3, - GX_RGBA6 = 4, - GX_RGBA8 = 5, -} GXCompType; - -typedef enum _GXPTTexMtx { - GX_PTTEXMTX0 = 64, - GX_PTTEXMTX1 = 67, - GX_PTTEXMTX2 = 70, - GX_PTTEXMTX3 = 73, - GX_PTTEXMTX4 = 76, - GX_PTTEXMTX5 = 79, - GX_PTTEXMTX6 = 82, - GX_PTTEXMTX7 = 85, - GX_PTTEXMTX8 = 88, - GX_PTTEXMTX9 = 91, - GX_PTTEXMTX10 = 94, - GX_PTTEXMTX11 = 97, - GX_PTTEXMTX12 = 100, - GX_PTTEXMTX13 = 103, - GX_PTTEXMTX14 = 106, - GX_PTTEXMTX15 = 109, - GX_PTTEXMTX16 = 112, - GX_PTTEXMTX17 = 115, - GX_PTTEXMTX18 = 118, - GX_PTTEXMTX19 = 121, - GX_PTIDENTITY = 125, -} GXPTTexMtx; - -typedef struct _GXColor { - u8 r; - u8 g; - u8 b; - u8 a; -} GXColor; - -typedef struct _GXTexObj { - u32 dummy[8]; -} GXTexObj; - -typedef struct _GXTlutObj { - u32 dummy[3]; -} GXTlutObj; - -typedef struct _GXLightObj { - u32 dummy[16]; -} GXLightObj; - -typedef struct _GXVtxDescList { - GXAttr attr; - GXAttrType type; -} GXVtxDescList; - -typedef struct _GXColorS10 { - s16 r; - s16 g; - s16 b; - s16 a; -} GXColorS10; - -typedef struct _GXTexRegion { - u32 dummy[4]; -} GXTexRegion; - -typedef struct _GXTlutRegion { - u32 dummy[4]; -} GXTlutRegion; - -typedef struct _GXVtxAttrFmtList { - // total size: 0x10 - GXAttr attr; // offset 0x0, size 0x4 - GXCompCnt cnt; // offset 0x4, size 0x4 - GXCompType type; // offset 0x8, size 0x4 - u8 frac; // offset 0xC, size 0x1 -} GXVtxAttrFmtList; - -typedef enum _GXTevRegID { - GX_TEVPREV, - GX_TEVREG0, - GX_TEVREG1, - GX_TEVREG2, - GX_MAX_TEVREG, -} GXTevRegID; - -typedef enum _GXDiffuseFn { - GX_DF_NONE, - GX_DF_SIGN, - GX_DF_CLAMP, -} GXDiffuseFn; - -typedef enum _GXColorSrc { - GX_SRC_REG, - GX_SRC_VTX, -} GXColorSrc; - -typedef enum _GXAttnFn { - GX_AF_SPEC, - GX_AF_SPOT, - GX_AF_NONE, -} GXAttnFn; - -typedef enum _GXLightID { - GX_LIGHT0 = 0x001, - GX_LIGHT1 = 0x002, - GX_LIGHT2 = 0x004, - GX_LIGHT3 = 0x008, - GX_LIGHT4 = 0x010, - GX_LIGHT5 = 0x020, - GX_LIGHT6 = 0x040, - GX_LIGHT7 = 0x080, - GX_MAX_LIGHT = 0x100, - GX_LIGHT_NULL = 0, -} GXLightID; - -typedef enum _GXTexOffset { - GX_TO_ZERO, - GX_TO_SIXTEENTH, - GX_TO_EIGHTH, - GX_TO_FOURTH, - GX_TO_HALF, - GX_TO_ONE, - GX_MAX_TEXOFFSET, -} GXTexOffset; - -typedef enum _GXSpotFn { - GX_SP_OFF, - GX_SP_FLAT, - GX_SP_COS, - GX_SP_COS2, - GX_SP_SHARP, - GX_SP_RING1, - GX_SP_RING2, -} GXSpotFn; - -typedef enum _GXDistAttnFn { - GX_DA_OFF, - GX_DA_GENTLE, - GX_DA_MEDIUM, - GX_DA_STEEP, -} GXDistAttnFn; - -typedef enum _GXCullMode { - GX_CULL_NONE, - GX_CULL_FRONT, - GX_CULL_BACK, - GX_CULL_ALL, -} GXCullMode; - -typedef enum _GXTevSwapSel { - GX_TEV_SWAP0 = 0, - GX_TEV_SWAP1, - GX_TEV_SWAP2, - GX_TEV_SWAP3, - GX_MAX_TEVSWAP, -} GXTevSwapSel; - -typedef enum _GXTevColorChan { - GX_CH_RED = 0, - GX_CH_GREEN, - GX_CH_BLUE, - GX_CH_ALPHA, -} GXTevColorChan; - -typedef enum _GXFogType { - GX_FOG_NONE = 0, - GX_FOG_PERSP_LIN = 2, - GX_FOG_PERSP_EXP = 4, - GX_FOG_PERSP_EXP2 = 5, - GX_FOG_PERSP_REVEXP = 6, - GX_FOG_PERSP_REVEXP2 = 7, - GX_FOG_ORTHO_LIN = 10, - GX_FOG_ORTHO_EXP = 12, - GX_FOG_ORTHO_EXP2 = 13, - GX_FOG_ORTHO_REVEXP = 14, - GX_FOG_ORTHO_REVEXP2 = 15, - GX_FOG_LIN = GX_FOG_PERSP_LIN, - GX_FOG_EXP = GX_FOG_PERSP_EXP, - GX_FOG_EXP2 = GX_FOG_PERSP_EXP2, - GX_FOG_REVEXP = GX_FOG_PERSP_REVEXP, - GX_FOG_REVEXP2 = GX_FOG_PERSP_REVEXP2, -} GXFogType; - -typedef enum _GXTevColorArg { - GX_CC_CPREV, - GX_CC_APREV, - GX_CC_C0, - GX_CC_A0, - GX_CC_C1, - GX_CC_A1, - GX_CC_C2, - GX_CC_A2, - GX_CC_TEXC, - GX_CC_TEXA, - GX_CC_RASC, - GX_CC_RASA, - GX_CC_ONE, - GX_CC_HALF, - GX_CC_KONST, - GX_CC_ZERO, -} GXTevColorArg; - -typedef enum _GXTevAlphaArg { - GX_CA_APREV, - GX_CA_A0, - GX_CA_A1, - GX_CA_A2, - GX_CA_TEXA, - GX_CA_RASA, - GX_CA_KONST, - GX_CA_ZERO, -} GXTevAlphaArg; - -typedef enum _GXTevOp { - GX_TEV_ADD = 0, - GX_TEV_SUB = 1, - GX_TEV_COMP_R8_GT = 8, - GX_TEV_COMP_R8_EQ = 9, - GX_TEV_COMP_GR16_GT = 10, - GX_TEV_COMP_GR16_EQ = 11, - GX_TEV_COMP_BGR24_GT = 12, - GX_TEV_COMP_BGR24_EQ = 13, - GX_TEV_COMP_RGB8_GT = 14, - GX_TEV_COMP_RGB8_EQ = 15, - GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, - GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ, -} GXTevOp; - -typedef enum _GXTevBias { - GX_TB_ZERO, - GX_TB_ADDHALF, - GX_TB_SUBHALF, - GX_MAX_TEVBIAS, -} GXTevBias; - -typedef enum _GXTevScale { - GX_CS_SCALE_1, - GX_CS_SCALE_2, - GX_CS_SCALE_4, - GX_CS_DIVIDE_2, - GX_MAX_TEVSCALE, -} GXTevScale; - -typedef enum _GXTevKColorSel { - GX_TEV_KCSEL_8_8 = 0x00, - GX_TEV_KCSEL_7_8 = 0x01, - GX_TEV_KCSEL_6_8 = 0x02, - GX_TEV_KCSEL_5_8 = 0x03, - GX_TEV_KCSEL_4_8 = 0x04, - GX_TEV_KCSEL_3_8 = 0x05, - GX_TEV_KCSEL_2_8 = 0x06, - GX_TEV_KCSEL_1_8 = 0x07, - GX_TEV_KCSEL_1 = GX_TEV_KCSEL_8_8, - GX_TEV_KCSEL_3_4 = GX_TEV_KCSEL_6_8, - GX_TEV_KCSEL_1_2 = GX_TEV_KCSEL_4_8, - GX_TEV_KCSEL_1_4 = GX_TEV_KCSEL_2_8, - GX_TEV_KCSEL_K0 = 0x0C, - GX_TEV_KCSEL_K1 = 0x0D, - GX_TEV_KCSEL_K2 = 0x0E, - GX_TEV_KCSEL_K3 = 0x0F, - GX_TEV_KCSEL_K0_R = 0x10, - GX_TEV_KCSEL_K1_R = 0x11, - GX_TEV_KCSEL_K2_R = 0x12, - GX_TEV_KCSEL_K3_R = 0x13, - GX_TEV_KCSEL_K0_G = 0x14, - GX_TEV_KCSEL_K1_G = 0x15, - GX_TEV_KCSEL_K2_G = 0x16, - GX_TEV_KCSEL_K3_G = 0x17, - GX_TEV_KCSEL_K0_B = 0x18, - GX_TEV_KCSEL_K1_B = 0x19, - GX_TEV_KCSEL_K2_B = 0x1A, - GX_TEV_KCSEL_K3_B = 0x1B, - GX_TEV_KCSEL_K0_A = 0x1C, - GX_TEV_KCSEL_K1_A = 0x1D, - GX_TEV_KCSEL_K2_A = 0x1E, - GX_TEV_KCSEL_K3_A = 0x1F, -} GXTevKColorSel; - -typedef enum _GXTevKAlphaSel { - GX_TEV_KASEL_8_8 = 0x00, - GX_TEV_KASEL_7_8 = 0x01, - GX_TEV_KASEL_6_8 = 0x02, - GX_TEV_KASEL_5_8 = 0x03, - GX_TEV_KASEL_4_8 = 0x04, - GX_TEV_KASEL_3_8 = 0x05, - GX_TEV_KASEL_2_8 = 0x06, - GX_TEV_KASEL_1_8 = 0x07, - GX_TEV_KASEL_1 = GX_TEV_KASEL_8_8, - GX_TEV_KASEL_3_4 = GX_TEV_KASEL_6_8, - GX_TEV_KASEL_1_2 = GX_TEV_KASEL_4_8, - GX_TEV_KASEL_1_4 = GX_TEV_KASEL_2_8, - GX_TEV_KASEL_K0_R = 0x10, - GX_TEV_KASEL_K1_R = 0x11, - GX_TEV_KASEL_K2_R = 0x12, - GX_TEV_KASEL_K3_R = 0x13, - GX_TEV_KASEL_K0_G = 0x14, - GX_TEV_KASEL_K1_G = 0x15, - GX_TEV_KASEL_K2_G = 0x16, - GX_TEV_KASEL_K3_G = 0x17, - GX_TEV_KASEL_K0_B = 0x18, - GX_TEV_KASEL_K1_B = 0x19, - GX_TEV_KASEL_K2_B = 0x1A, - GX_TEV_KASEL_K3_B = 0x1B, - GX_TEV_KASEL_K0_A = 0x1C, - GX_TEV_KASEL_K1_A = 0x1D, - GX_TEV_KASEL_K2_A = 0x1E, - GX_TEV_KASEL_K3_A = 0x1F, -} GXTevKAlphaSel; - -typedef enum _GXTevKColorID { - GX_KCOLOR0 = 0, - GX_KCOLOR1, - GX_KCOLOR2, - GX_KCOLOR3, - GX_MAX_KCOLOR, -} GXTevKColorID; - -typedef enum _GXZTexOp { - GX_ZT_DISABLE, - GX_ZT_ADD, - GX_ZT_REPLACE, - GX_MAX_ZTEXOP, -} GXZTexOp; - -typedef enum _GXIndTexFormat { - GX_ITF_8, - GX_ITF_5, - GX_ITF_4, - GX_ITF_3, - GX_MAX_ITFORMAT, -} GXIndTexFormat; - -typedef enum _GXIndTexBiasSel { - GX_ITB_NONE, - GX_ITB_S, - GX_ITB_T, - GX_ITB_ST, - GX_ITB_U, - GX_ITB_SU, - GX_ITB_TU, - GX_ITB_STU, - GX_MAX_ITBIAS, -} GXIndTexBiasSel; - -typedef enum _GXIndTexAlphaSel { - GX_ITBA_OFF, - GX_ITBA_S, - GX_ITBA_T, - GX_ITBA_U, - GX_MAX_ITBALPHA, -} GXIndTexAlphaSel; - -typedef enum _GXIndTexMtxID { - GX_ITM_OFF, - GX_ITM_0, - GX_ITM_1, - GX_ITM_2, - GX_ITM_S0 = 5, - GX_ITM_S1, - GX_ITM_S2, - GX_ITM_T0 = 9, - GX_ITM_T1, - GX_ITM_T2, -} GXIndTexMtxID; - -typedef enum _GXIndTexWrap { - GX_ITW_OFF, - GX_ITW_256, - GX_ITW_128, - GX_ITW_64, - GX_ITW_32, - GX_ITW_16, - GX_ITW_0, - GX_MAX_ITWRAP, -} GXIndTexWrap; - -typedef enum _GXIndTexStageID { - GX_INDTEXSTAGE0, - GX_INDTEXSTAGE1, - GX_INDTEXSTAGE2, - GX_INDTEXSTAGE3, - GX_MAX_INDTEXSTAGE, -} GXIndTexStageID; - -typedef enum _GXIndTexScale { - GX_ITS_1, - GX_ITS_2, - GX_ITS_4, - GX_ITS_8, - GX_ITS_16, - GX_ITS_32, - GX_ITS_64, - GX_ITS_128, - GX_ITS_256, - GX_MAX_ITSCALE, -} GXIndTexScale; - -typedef enum _GXClipMode { - GX_CLIP_ENABLE = 0, - GX_CLIP_DISABLE = 1, -} GXClipMode; - -typedef enum _GXTlut { - GX_TLUT0 = 0, - GX_TLUT1 = 1, - GX_TLUT2 = 2, - GX_TLUT3 = 3, - GX_TLUT4 = 4, - GX_TLUT5 = 5, - GX_TLUT6 = 6, - GX_TLUT7 = 7, - GX_TLUT8 = 8, - GX_TLUT9 = 9, - GX_TLUT10 = 10, - GX_TLUT11 = 11, - GX_TLUT12 = 12, - GX_TLUT13 = 13, - GX_TLUT14 = 14, - GX_TLUT15 = 15, - GX_BIGTLUT0 = 16, - GX_BIGTLUT1 = 17, - GX_BIGTLUT2 = 18, - GX_BIGTLUT3 = 19, -} GXTlut; - -typedef enum _GXTlutFmt { - GX_TL_IA8, - GX_TL_RGB565, - GX_TL_RGB5A3, - GX_MAX_TLUTFMT, -} GXTlutFmt; - -typedef enum _GXMiscToken { - GX_MT_NULL = 0, - GX_MT_XF_FLUSH = 1, - GX_MT_DL_SAVE_CONTEXT = 2, - GX_MT_ABORT_WAIT_COPYOUT = 3, -} GXMiscToken; - -typedef enum _GXTexCacheSize { - GX_TEXCACHE_32K, - GX_TEXCACHE_128K, - GX_TEXCACHE_512K, - GX_TEXCACHE_NONE -} GXTexCacheSize; - -typedef enum _GXPerf0 { - GX_PERF0_VERTICES, - GX_PERF0_CLIP_VTX, - GX_PERF0_CLIP_CLKS, - GX_PERF0_XF_WAIT_IN, - GX_PERF0_XF_WAIT_OUT, - GX_PERF0_XF_XFRM_CLKS, - GX_PERF0_XF_LIT_CLKS, - GX_PERF0_XF_BOT_CLKS, - GX_PERF0_XF_REGLD_CLKS, - GX_PERF0_XF_REGRD_CLKS, - GX_PERF0_CLIP_RATIO, - - GX_PERF0_TRIANGLES, - GX_PERF0_TRIANGLES_CULLED, - GX_PERF0_TRIANGLES_PASSED, - GX_PERF0_TRIANGLES_SCISSORED, - GX_PERF0_TRIANGLES_0TEX, - GX_PERF0_TRIANGLES_1TEX, - GX_PERF0_TRIANGLES_2TEX, - GX_PERF0_TRIANGLES_3TEX, - GX_PERF0_TRIANGLES_4TEX, - GX_PERF0_TRIANGLES_5TEX, - GX_PERF0_TRIANGLES_6TEX, - GX_PERF0_TRIANGLES_7TEX, - GX_PERF0_TRIANGLES_8TEX, - GX_PERF0_TRIANGLES_0CLR, - GX_PERF0_TRIANGLES_1CLR, - GX_PERF0_TRIANGLES_2CLR, - - GX_PERF0_QUAD_0CVG, - GX_PERF0_QUAD_NON0CVG, - GX_PERF0_QUAD_1CVG, - GX_PERF0_QUAD_2CVG, - GX_PERF0_QUAD_3CVG, - GX_PERF0_QUAD_4CVG, - GX_PERF0_AVG_QUAD_CNT, - - GX_PERF0_CLOCKS, - GX_PERF0_NONE - -} GXPerf0; - -typedef enum _GXPerf1 { - GX_PERF1_TEXELS, - GX_PERF1_TX_IDLE, - GX_PERF1_TX_REGS, - GX_PERF1_TX_MEMSTALL, - GX_PERF1_TC_CHECK1_2, - GX_PERF1_TC_CHECK3_4, - GX_PERF1_TC_CHECK5_6, - GX_PERF1_TC_CHECK7_8, - GX_PERF1_TC_MISS, - - GX_PERF1_VC_ELEMQ_FULL, - GX_PERF1_VC_MISSQ_FULL, - GX_PERF1_VC_MEMREQ_FULL, - GX_PERF1_VC_STATUS7, - GX_PERF1_VC_MISSREP_FULL, - GX_PERF1_VC_STREAMBUF_LOW, - GX_PERF1_VC_ALL_STALLS, - GX_PERF1_VERTICES, - - GX_PERF1_FIFO_REQ, - GX_PERF1_CALL_REQ, - GX_PERF1_VC_MISS_REQ, - GX_PERF1_CP_ALL_REQ, - - GX_PERF1_CLOCKS, - GX_PERF1_NONE - -} GXPerf1; - -typedef enum _GXVCachePerf { - GX_VC_POS, - GX_VC_NRM, - GX_VC_CLR0, - GX_VC_CLR1, - GX_VC_TEX0, - GX_VC_TEX1, - GX_VC_TEX2, - GX_VC_TEX3, - GX_VC_TEX4, - GX_VC_TEX5, - GX_VC_TEX6, - GX_VC_TEX7, - GX_VC_ALL = 0xf - -} GXVCachePerf; - -typedef enum _GXFBClamp { - GX_CLAMP_NONE = 0, - GX_CLAMP_TOP = 1, - GX_CLAMP_BOTTOM = 2, -} GXFBClamp; - -typedef enum _GXCopyMode { - GX_COPY_PROGRESSIVE = 0, - GX_COPY_INTLC_EVEN = 2, - GX_COPY_INTLC_ODD = 3, -} GXCopyMode; - -typedef enum _GXAlphaReadMode { - GX_READ_00 = 0, - GX_READ_FF = 1, - GX_READ_NONE = 2, - -} _GXAlphaReadMode; - -#define ANIM_BMP_RGBA8 0 -#define ANIM_BMP_RGB5A3 1 -#define ANIM_BMP_RGB5A3_DUPE 2 -#define ANIM_BMP_C8 3 -#define ANIM_BMP_C4 4 -#define ANIM_BMP_IA8 5 -#define ANIM_BMP_IA4 6 -#define ANIM_BMP_I8 7 -#define ANIM_BMP_I4 8 -#define ANIM_BMP_A8 9 -#define ANIM_BMP_CMPR 10 - -#define ANIM_BMP_FMTMASK 0xF -#define ANIM_BMP_ALLOC 0x8000 -#define ANIM_BMP_NUM_MASK 0x7FFF - -#define ANIM_LAYER_FLIPX 0x1 -#define ANIM_LAYER_FLIPY 0x2 - -typedef struct anim_frame_data { - s16 pat; - s16 time; - s16 shiftX; - s16 shiftY; - s16 flip; - s16 pad; -} AnimFrameData; - -typedef struct anim_bank_data { - s16 timeNum; - s16 unk; - AnimFrameData *frame; -} AnimBankData; - -typedef struct anim_layer_data { - u8 alpha; - u8 flip; - s16 bmpNo; - s16 startX; - s16 startY; - s16 sizeX; - s16 sizeY; - s16 shiftX; - s16 shiftY; - s16 vtx[8]; -} AnimLayerData; - -typedef struct anim_pat_data { - s16 layerNum; - s16 centerX; - s16 centerY; - s16 sizeX; - s16 sizeY; - AnimLayerData *layer; -} AnimPatData; - -typedef struct anim_bmp_data { - u8 pixSize; - u8 dataFmt; - s16 palNum; - s16 sizeX; - s16 sizeY; - u32 dataSize; - void *palData; - void *data; -} AnimBmpData; - -typedef struct anim_data { - s16 bankNum; - s16 patNum; - s16 bmpNum; - s16 useNum; - AnimBankData *bank; - AnimPatData *pat; - AnimBmpData *bmp; -} AnimData; - -typedef struct { - f32 x, y, z; -} Vec, *VecPtr, Point3d, *Point3dPtr; - -typedef struct { - s16 x; - s16 y; - s16 z; -} S16Vec, *S16VecPtr; - -typedef struct { - f32 x, y, z, w; -} Quaternion, *QuaternionPtr, Qtrn, *QtrnPtr; - -typedef f32 Mtx[3][4]; - -typedef f32 (*MtxPtr)[4]; - -typedef f32 ROMtx[4][3]; - -typedef f32 (*ROMtxPtr)[3]; - -typedef f32 Mtx44[4][4]; - -typedef f32 (*Mtx44Ptr)[4]; - -#define HUSPR_MAX 384 -#define HUSPR_GRP_MAX 256 - -#define HUSPR_NONE -1 -#define HUSPR_GRP_NONE -1 - -#define HUSPR_ATTR_NOANIM 0x1 -#define HUSPR_ATTR_LOOP 0x2 -#define HUSPR_ATTR_DISPOFF 0x4 -#define HUSPR_ATTR_LINEAR 0x8 -#define HUSPR_ATTR_FUNC 0x10 -#define HUSPR_ATTR_NOPAUSE 0x20 -#define HUSPR_ATTR_REVERSE 0x40 -#define HUSPR_ATTR_ADDCOL 0x80 -#define HUSPR_ATTR_INVCOL 0x100 - -typedef void (*HuSprFunc)(struct hu_sprite *); - -typedef struct hu_sprite { - u8 r; - u8 g; - u8 b; - u8 draw_no; - s16 frame; - s16 bank; - s16 attr; - s16 dirty_flag; - s16 prio; - float time; - float x; - float y; - float z_rot; - float scale_x; - float scale_y; - float speed; - float a; - GXTexWrapMode wrap_s; - GXTexWrapMode wrap_t; - s16 tex_scale_x; - s16 tex_scale_y; - Mtx *group_mtx; - union { - AnimData *data; - HuSprFunc func; - }; - AnimPatData *pat_data; - AnimFrameData *frame_data; - s16 work[4]; - AnimData *bg; - u16 bg_bank; - s16 scissor_x; - s16 scissor_y; - s16 scissor_w; - s16 scissor_h; -} HuSprite; - -typedef struct hu_spr_grp { - s16 capacity; - float x; - float y; - float z_rot; - float scale_x; - float scale_y; - float center_x; - float center_y; - s16 *members; - Mtx mtx; -} HuSprGrp; - -extern HuSprite HuSprData[HUSPR_MAX]; -extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX]; - -#define HuSprAnimReadFile(data_id) \ - (HuSprAnimRead( \ - HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) - -void HuSprInit(void); -void HuSprClose(void); -void HuSprExec(s16 draw_no); -void HuSprBegin(void); -HuSprite *HuSprCall(void); -void HuSprFinish(void); -void HuSprPauseSet(BOOL value); -AnimData *HuSprAnimRead(void *data); -void HuSprAnimLock(AnimData *anim); -s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank); -s16 HuSprFuncCreate(HuSprFunc func, s16 prio); -s16 HuSprGrpCreate(s16 capacity); -s16 HuSprGrpCopy(s16 group); -void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite); -void HuSprGrpMemberKill(s16 group, s16 member); -void HuSprGrpKill(s16 group); -void HuSprKill(s16 sprite); -void HuSprAnimKill(AnimData *anim); -void HuSprAttrSet(s16 group, s16 member, s32 attr); -void HuSprAttrReset(s16 group, s16 member, s32 attr); -void HuSprPosSet(s16 group, s16 member, float x, float y); -void HuSprZRotSet(s16 group, s16 member, float z_rot); -void HuSprScaleSet(s16 group, s16 member, float x, float y); -void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl); -void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b); -void HuSprSpeedSet(s16 group, s16 member, float speed); -void HuSprBankSet(s16 group, s16 member, s16 bank); -void HuSprGrpPosSet(s16 group, float x, float y); -void HuSprGrpCenterSet(s16 group, float x, float y); -void HuSprGrpZRotSet(s16 group, float z_rot); -void HuSprGrpScaleSet(s16 group, float x, float y); -void HuSprGrpTPLvlSet(s16 group, float tp_lvl); -void HuSprGrpDrawNoSet(s16 group, s32 draw_no); -void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); -void HuSprPriSet(s16 group, s16 member, s16 prio); -void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); -void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h); -AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt); -void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank); -void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank); -void AnimDebug(AnimData *anim); - -void HuSprDispInit(void); -void HuSprDisp(HuSprite *sprite); -void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, - GXTexWrapMode wrap_t, GXTexFilter filter); -void HuSprExecLayerSet(s16 draw_no, s16 layer); - -#define MEMORY_DEFAULT_NUM 0x10000000 - -typedef enum { - HEAP_SYSTEM, - HEAP_MUSIC, - HEAP_DATA, - HEAP_DVD, - HEAP_MISC, - HEAP_MAX -} HeapID; - -void HuMemInitAll(void); -void *HuMemInit(void *ptr, s32 size); -void HuMemDCFlushAll(); -void HuMemDCFlush(HeapID heap); -void *HuMemDirectMalloc(HeapID heap, s32 size); -void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num); -void HuMemDirectFree(void *ptr); -void HuMemDirectFreeNum(HeapID heap, u32 num); -s32 HuMemUsedMallocSizeGet(HeapID heap); -s32 HuMemUsedMallocBlockGet(HeapID heap); -u32 HuMemHeapSizeGet(HeapID heap); -void *HuMemHeapPtrGet(HeapID heap); - -void *HuMemHeapInit(void *ptr, s32 size); -void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); -void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); -void HuMemMemoryFree(void *ptr, u32 retaddr); -void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); -s32 HuMemUsedMemorySizeGet(void *heap_ptr); -s32 HuMemUsedMemoryBlockGet(void *heap_ptr); -s32 HuMemMemorySizeGet(void *ptr); -s32 HuMemMemoryAllocSizeGet(s32 size); -void HuMemHeapDump(void *heap_ptr, s16 status); - -#define DVD_MIN_TRANSFER_SIZE 32 - -#define DVD_STATE_FATAL_ERROR -1 -#define DVD_STATE_END 0 -#define DVD_STATE_BUSY 1 -#define DVD_STATE_WAITING 2 -#define DVD_STATE_COVER_CLOSED 3 -#define DVD_STATE_NO_DISK 4 -#define DVD_STATE_COVER_OPEN 5 -#define DVD_STATE_WRONG_DISK 6 -#define DVD_STATE_MOTOR_STOPPED 7 -#define DVD_STATE_PAUSING 8 -#define DVD_STATE_IGNORED 9 -#define DVD_STATE_CANCELED 10 -#define DVD_STATE_RETRY 11 - -#define DVD_FILEINFO_READY 0 -#define DVD_FILEINFO_BUSY 1 - -#define DVD_RESULT_GOOD 0 -#define DVD_RESULT_FATAL_ERROR -1 -#define DVD_RESULT_IGNORED -2 -#define DVD_RESULT_CANCELED -3 - -#define DVD_AIS_SUCCESS 0x0 - -typedef struct DVDDiskID { - char gameName[4]; - char company[2]; - u8 diskNumber; - u8 gameVersion; - u8 streaming; - u8 streamingBufSize; // 0 = default - u8 padding[22]; // 0's are stored -} DVDDiskID; - -typedef struct DVDCommandBlock DVDCommandBlock; - -typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock *block); - -struct DVDCommandBlock { - DVDCommandBlock *next; - DVDCommandBlock *prev; - u32 command; - s32 state; - u32 offset; - u32 length; - void *addr; - u32 currTransferSize; - u32 transferredSize; - DVDDiskID *id; - DVDCBCallback callback; - void *userData; -}; - -typedef struct DVDFileInfo DVDFileInfo; - -typedef void (*DVDCallback)(s32 result, DVDFileInfo *fileInfo); - -struct DVDFileInfo { - DVDCommandBlock cb; - u32 startAddr; - u32 length; - DVDCallback callback; -}; - -typedef struct { - u32 entryNum; - u32 location; - u32 next; -} DVDDir; - -typedef struct { - u32 entryNum; - BOOL isDir; - char *name; -} DVDDirEntry; - -void DVDInit(); -BOOL DVDClose(DVDFileInfo *f); -BOOL DVDSetAutoFatalMessaging(BOOL); -void DVDReset(); -s32 DVDCancel(DVDCommandBlock *block); -BOOL DVDOpen(char *fileName, DVDFileInfo *fileInfo); -BOOL DVDFastOpen(s32 entrynum, DVDFileInfo *fileInfo); -s32 DVDGetCommandBlockStatus(const DVDCommandBlock *block); -BOOL DVDCancelAsync(DVDCommandBlock *block, DVDCBCallback callback); -s32 DVDCancel(DVDCommandBlock *block); -BOOL DVDCancelAllAsync(DVDCBCallback callback); -s32 DVDCancelAll(void); -BOOL DVDPrepareStreamAsync(DVDFileInfo *fInfo, u32 length, u32 offset, - DVDCallback callback); -s32 DVDPrepareStream(DVDFileInfo *fInfo, u32 length, u32 offset); - -BOOL DVDCancelStreamAsync(DVDCommandBlock *block, DVDCBCallback callback); -s32 DVDCancelStream(DVDCommandBlock *block); - -BOOL DVDStopStreamAtEndAsync(DVDCommandBlock *block, DVDCBCallback callback); -s32 DVDStopStreamAtEnd(DVDCommandBlock *block); - -BOOL DVDGetStreamErrorStatusAsync(DVDCommandBlock *block, - DVDCBCallback callback); -s32 DVDGetStreamErrorStatus(DVDCommandBlock *block); - -BOOL DVDGetStreamPlayAddrAsync(DVDCommandBlock *block, DVDCBCallback callback); -s32 DVDGetStreamPlayAddr(DVDCommandBlock *block); - -s32 DVDGetDriveStatus(); - -s32 DVDConvertPathToEntrynum(char *pathPtr); - -BOOL DVDReadAsyncPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, - DVDCallback callback, s32 prio); - -BOOL DVDReadPrio(DVDFileInfo *fileInfo, void *addr, s32 length, s32 offset, - s32 prio); - -#define DVDReadAsync(fileInfo, addr, length, offset, callback) \ - DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2) -#define DVDRead(fileInfo, addr, length, offset) \ - DVDReadPrio((fileInfo), (addr), (length), (offset), 2) - -#define DVDSeekAsync(fileInfo, offset, callback) \ - DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2) - -#define DATA_DECODE_NONE 0 -#define DATA_DECODE_LZ 1 -#define DATA_DECODE_SLIDE 2 -#define DATA_DECODE_FSLIDE_ALT 3 -#define DATA_DECODE_FSLIDE 4 -#define DATA_DECODE_RLE 5 - -#define DATA_NUM_LISTEND -1 - -typedef struct data_read_stat { - s32 dir_id; - void *dir; - void *file; - u32 raw_len; - u32 comp_type; - BOOL used; - s32 num; - u32 status; - DVDFileInfo file_info; -} DataReadStat; - -void HuDataInit(void); -int HuDataReadChk(s32 data_num); -DataReadStat *HuDataGetStatus(void *dir_ptr); -void *HuDataGetDirPtr(s32 data_num); -DataReadStat *HuDataDirRead(s32 data_num); -DataReadStat *HuDataDirReadNum(s32 data_num, s32 num); -DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num); -void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo *fileInfo); -s32 HuDataDirReadAsync(s32 data_num); -s32 HuDataDirReadNumAsync(s32 data_num, s32 num); -BOOL HuDataGetAsyncStat(s32 status); -void *HuDataRead(s32 data_num); -void *HuDataReadNum(s32 data_num, s32 num); -void *HuDataSelHeapRead(s32 data_num, HeapID heap); -void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap); -void **HuDataReadMulti(s32 *data_ids); -s32 HuDataGetSize(s32 data_num); -void HuDataClose(void *ptr); -void HuDataCloseMulti(void **ptrs); -void HuDataDirClose(s32 data_id); -void HuDataDirCloseNum(s32 num); -void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap); - -void HuDecodeData(void *src, void *dst, u32 size, int decode_type); - -extern u32 DirDataSize; - -typedef struct { - /* 0x00 */ u8 color; - /* 0x01 */ u8 fade; - /* 0x02 */ s16 x; - /* 0x04 */ s16 y; - /* 0x06 */ s16 character; -} WinChar; // Size 8 - -typedef struct { - /* 0x00 */ u8 stat; - /* 0x02 */ s16 x; - /* 0x04 */ s16 y; -} WinChoice; // Size 6 - -typedef struct { - /* 0x000 */ u8 stat; - /* 0x001 */ u8 active_pad; - /* 0x002 */ u8 player_disable; - /* 0x003 */ u8 color_key; - /* 0x004 */ s16 group; - /* 0x006 */ s16 sprite_id[30]; - /* 0x042 */ s16 speed; - /* 0x044 */ s16 mess_time; - /* 0x046 */ s16 advance_sprite; - /* 0x048 */ s16 prio; - /* 0x04C */ u32 attr; - /* 0x050 */ AnimData *frame; - /* 0x054 */ s16 mess_rect_x; - /* 0x056 */ s16 mess_rect_w; - /* 0x058 */ s16 mess_rect_y; - /* 0x05A */ s16 mess_rect_h; - /* 0x05C */ s16 mess_x; - /* 0x05E */ s16 mess_y; - /* 0x060 */ s16 mess_color; - /* 0x062 */ s16 mess_shadow_color; - /* 0x064 */ s16 spacing_x; - /* 0x066 */ s16 spacing_y; - /* 0x068 */ s16 w; - /* 0x06A */ s16 h; - /* 0x06C */ float pos_x; - /* 0x070 */ float pos_y; - /* 0x074 */ float scale_x; - /* 0x078 */ float scale_y; - /* 0x07C */ float z_rot; - /* 0x080 */ s16 num_chars; - /* 0x082 */ s16 max_chars; - /* 0x084 */ WinChar *char_data; - /* 0x088 */ s16 mess_stackptr; - /* 0x08C */ s32 unk8C; - /* 0x090 */ u8 *mess; - /* 0x094 */ u8 *mess_stack[8]; - /* 0x0B4 */ u8 *insert_mess[8]; - /* 0x0D4 */ s16 num_choices; - /* 0x0D6 */ s16 choice; - /* 0x0D8 */ s16 cursor_sprite; - /* 0x0DA */ u8 choice_disable[16]; - /* 0x0EA */ WinChoice choice_data[16]; - /* 0x14A */ s16 scissor_x; - /* 0x14C */ s16 scissor_y; - /* 0x14E */ s16 scissor_w; - /* 0x150 */ s16 scissor_h; - /* 0x152 */ s16 tab_w; - /* 0x154 */ s16 push_key; - /* 0x156 */ s16 key_down; - /* 0x158 */ s16 key_auto; - /* 0x160 */ u8 mess_pal[10][3]; -} WindowData; // Size 0x180 - -extern WindowData winData[32]; -extern void *messDataPtr; - -void HuWindowInit(void); -void HuWinInit(s32 mess_data_no); -s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame); -void HuWinKill(s16 window); -void HuWinAllKill(void); -void HuWinHomeClear(s16 window); -void HuWinKeyWaitEntry(s16 window); -u32 HuWinActivePadGet(WindowData *window); -u32 HuWinActiveKeyGetX(WindowData *window); -void HuWinPosSet(s16 window, float x, float y); -void HuWinScaleSet(s16 window, float x, float y); -void HuWinZRotSet(s16 window, float z_rot); -void HuWinCenterPosSet(s16 window, float x, float y); -void HuWinDrawNoSet(s16 window, s16 draw_no); -void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h); -void HuWinPriSet(s16 window, s16 prio); -void HuWinAttrSet(s16 window, u32 attr); -void HuWinAttrReset(s16 window, u32 attr); -s16 HuWinStatGet(s16 window); -void HuWinMesColSet(s16 window, u8 color); -void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b); -void HuWinBGTPLvlSet(s16 window, float tp_level); -void HuWinBGColSet(s16 window, GXColor *bg_color); -void HuWinMesSpeedSet(s16 window, s16 speed); -void HuWinMesRead(s32 mess_data_no); -void HuWinMesSet(s16 window, u32 mess); -void HuWinInsertMesSet(s16 window, u32 mess, s16 index); -s16 HuWinChoiceGet(s16 window, s16 start_choice); -s16 HuWinChoiceNumGet(s16 window); -void HuWinChoiceDisable(s16 window, s16 choice); -s16 HuWinChoiceNowGet(s16 window); -void HuWinMesWait(s16 window); -s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); -s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); -void HuWinSprPosSet(s16 window, s16 index, float x, float y); -void HuWinSprPriSet(s16 window, s16 index, s16 prio); -s16 HuWinSprIDGet(s16 window, s16 index); -void HuWinSprKill(s16 window, s16 index); -void HuWinDispOff(s16 window); -void HuWinDispOn(s16 window); -void HuWinComKeyWait(s32 player_1, s32 player_2, s32 player_3, s32 player_4, - s16 delay); -void HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4); -void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, - s16 delay); -void HuWinComKeyGet(s16 window, u32 *data); -void HuWinComKeyReset(void); -void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...); -void HuWinInsertMesSizeGet(u32 mess, s16 index); -void HuWinMesSizeCancelCRSet(s32 cancel_cr); -void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end); -s16 HuWinKeyWaitNumGet(u32 mess); -void HuWinPushKeySet(s16 window, s16 push_key); -void HuWinDisablePlayerSet(s16 window, u8 player); -void HuWinDisablePlayerReset(s16 window, u8 player); -s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait); -s16 HuWinExCreateStyled(float x, float y, s16 w, s16 h, s16 portrait, - s16 frame); -void HuWinExAnimIn(s16 window); -void HuWinExAnimOut(s16 window); -void HuWinExCleanup(s16 window); -void HuWinExAnimPopIn(s16 window, s16 portrait); -void *MessData_MesPtrGet(void *data, u32 index); - -extern void *messDataPtr; - -typedef void (*omObjFunc)(struct om_obj_data *); - -typedef struct om_obj_data { - /* 0x00 */ u16 stat; - /* 0x02 */ s16 next_idx_alloc; - /* 0x04 */ s16 prio; - /* 0x06 */ s16 prev; - /* 0x08 */ s16 next; - /* 0x0A */ s16 next_idx; - /* 0x0C */ s16 group; - /* 0x0E */ u16 group_idx; - /* 0x10 */ u32 unk10; - /* 0x14 */ omObjFunc func; - /* 0x18 */ Vec trans; - /* 0x24 */ Vec rot; - /* 0x30 */ Vec scale; - /* 0x3C */ u16 mdlcnt; - /* 0x40 */ s16 *model; - /* 0x44 */ u16 mtncnt; - /* 0x48 */ s16 *motion; - /* 0x4C */ u32 work[4]; - /* 0x5C */ void *data; -} omObjData; - - -typedef struct hu_snd_grp_data { - /* 0x00 */ s16 ovl; - /* 0x02 */ s16 grpset; - /* 0x04 */ s32 auxANo; - /* 0x08 */ s32 auxBNo; - /* 0x0C */ s8 auxAVol; - /* 0x0D */ s8 auxBVol; -} HuSndGrpData; - -void HuAudInit(void); -s32 HuAudStreamPlay(void); -void HuAudStreamVolSet(s16 vol); -void HuAudStreamPauseOn(void); -void HuAudStreamPauseOff(void); -void HuAudStreamFadeOut(void); -void HuAudAllStop(void); -void HuAudFadeOut(s32 arg0); -s32 HuAudFXPlay(s32 arg0); -s32 HuAudFXPlayVol(s32 arg0, s16 arg1); -s32 HuAudFXPlayVolPan(s32 arg0, s16 arg1, s16 arg2); -void HuAudFXStop(s32 arg0); -void HuAudFXAllStop(void); -void HuAudFXFadeOut(s32 arg0, s32 arg1); -void HuAudFXPanning(s32 arg0, s16 arg1); -void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); -void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); -void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); -s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); -void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); -void HuAudFXListnerKill(void); -void HuAudFXPauseAll(s32 arg0); -s32 HuAudFXStatusGet(s32 arg0); -s32 HuAudFXPitchSet(s32 arg0, s16 arg1); -s32 HuAudFXVolSet(s32 arg0, s16 arg1); -s32 HuAudSeqPlay(s16 arg0); -void HuAudSeqStop(s32 arg0); -void HuAudSeqFadeOut(s32 arg0, s32 arg1); -void HuAudSeqAllFadeOut(s32 arg0); -void HuAudSeqAllStop(void); -void HuAudSeqPauseAll(s32 arg0); -void HuAudSeqPause(s32 arg0, s32 arg1, s32 arg2); -s32 HuAudSeqMidiCtrlGet(s32 arg0, s8 arg1, s8 arg2); -s32 HuAudSStreamPlay(s16 arg0); -void HuAudSStreamStop(s32 arg0); -void HuAudSStreamFadeOut(s32 arg0, s32 arg1); -void HuAudSStreamAllFadeOut(s32 arg0); -void HuAudSStreamAllStop(void); -s32 HuAudSStreamStatGet(s32 arg0); -void HuAudDllSndGrpSet(u16 ovl); -void HuAudSndGrpSetSet(s16 arg0); -void HuAudSndGrpSet(s16 arg0); -void HuAudSndCommonGrpSet(s16 arg0, s32 arg1); -void HuAudAUXSet(s32 arg0, s32 arg1); -void HuAudAUXVolSet(s8 arg0, s8 arg1); -void HuAudVoiceInit(s16 ovl); -s32 HuAudPlayerVoicePlay(s16 arg0, s16 arg1); -s32 HuAudPlayerVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); -void HuAudPlayerVoicePlayEntry(s16 arg0, s16 arg1); -s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); -s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); -void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); - -extern float Snd3DBackSurDisOffset; -extern float Snd3DFrontSurDisOffset; -extern float Snd3DStartDisOffset; -extern float Snd3DSpeedOffset; -extern float Snd3DDistOffset; -extern s32 musicOffF; -extern u8 fadeStat; - -extern HuSndGrpData HuSndGrpTbl[]; - -void GWInit(void); -void GWGameStatReset(void); -s32 GWMessSpeedGet(void); -s32 GWMessDelayGet(void); -void GWMGRecordSet(int index, s32 value); -s32 GWMGRecordGet(int index); -void GWCharColorGet(int character, GXColor *color); -void GWBoardPlayCountSet(int board, u8 value); -void GWBoardPlayCountAdd(int board, u8 value); -u8 GWBoardPlayCountGet(int board); -void GWBoardMaxStarsSet(int board, int value); -u16 GWBoardMaxStarsGet(int board); -void GWBoardMaxCoinsSet(int board, int value); -u16 GWBoardMaxCoinsGet(int board); -int GWBoardWinCountInc(int character, int board); -int GWBoardWinCountGet(int character, int board); -void GWBoardWinCountSet(int character, int board, int value); -int GWMGAvailGet(int id); -int GWMGAvailSet(int id); -int GWMGCustomGet(int id); -int GWMGCustomSet(int id); -int GWMGCustomReset(int id); -s16 GWCoinsGet(int player); -void GWCoinsSet(int player, s16 value); -void GWCoinsAdd(int player, s16 amount); -void GWStarsSet(int player, s16 value); -void GWStarsAdd(int player, s16 amount); -s32 GWStarsGet(int player); -void GWTotalStarsSet(s16 value); -void GWTotalStarsAdd(s16 amount); -u16 GWTotalStarsGet(void); diff --git a/include/REL/w20Dll.h b/include/REL/w20Dll.h new file mode 100644 index 00000000..484b0f77 --- /dev/null +++ b/include/REL/w20Dll.h @@ -0,0 +1,12 @@ +#ifndef REL_W20_H +#define REL_W20_H + +#include "dolphin/types.h" + +typedef struct UnkW20BoardData { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s16 unk_04; + /* 0x06 */ s16 unk_06; +} UnkW20BoardData; + +#endif diff --git a/src/REL/w20Dll/main.c b/src/REL/w20Dll/main.c new file mode 100644 index 00000000..f4c3829d --- /dev/null +++ b/src/REL/w20Dll/main.c @@ -0,0 +1,154 @@ +#include "game/board/model.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "math.h" + +#include "REL/w20Dll.h" + +s16 lbl_1_bss_C; +s32 lbl_1_bss_8; +s32 lbl_1_bss_4; +UnkW20BoardData *lbl_1_bss_0; + +s16 lbl_1_data_0 = 0xFFFF; +s16 lbl_1_data_2 = 0xFFFF; +s16 lbl_1_data_4 = 0xFFFF; +s16 lbl_1_data_6 = 0xFFFF; +s16 lbl_1_data_8 = 0xFFFF; +s16 lbl_1_data_A = 0xFFFF; +s32 lbl_1_data_C[] = { + 0x005F0000, + 0x001A0000, + 0x006D0000, + 0x008A0000, + 0x00850000, + 0x00110000, + 0x000D0000, + 0x00810000, +}; + +s32 unkMotTbl[] = { DATA_MAKE_NUM(DATADIR_BGUEST, 42), -1 }; + +void fn_1_44C(void); +void fn_1_490(void); +void fn_1_494(void); +s32 fn_1_498(void); +void fn_1_4A0(void); +void fn_1_4A4(void); +void fn_1_4A8(void); +s32 fn_1_4AC(s16 arg0, float arg8, float arg9); + +void BoardCreate(void) +{ + s32 sp8; + s32 var_r31; + + var_r31 = GWSystem.board; + sp8 = var_r31; + lbl_1_bss_0 = (UnkW20BoardData *)GWSystem.board_data; + lbl_1_bss_0->unk_00 = 0; + lbl_1_bss_0->unk_04 = 0; + lbl_1_bss_0->unk_06 = 0; + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W20, 0)); + lbl_1_data_0 = BoardModelCreate(0x7C0001, NULL, 0); + fn_8006DDE8(lbl_1_data_0, -1.0f); + BoardModelPosSet(lbl_1_data_0, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_0, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_0, 1.0f); + lbl_1_data_2 = BoardModelCreate(0x7C0002, NULL, 0); + fn_8006DDE8(lbl_1_data_2, -1.0f); + BoardModelPosSet(lbl_1_data_2, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_2, 0, 0x40000001); + lbl_1_data_6 = BoardModelCreate(0x20029, unkMotTbl, 0); + BoardModelMotionStart(lbl_1_data_6, 1, 0x40000001); + lbl_1_data_8 = BoardModelCreate(0x20029, unkMotTbl, 0); + BoardModelMotionStart(lbl_1_data_8, 1, 0x40000001); + BoardLightHookSet(fn_1_44C, fn_1_490); + BoardSpaceWalkEventFuncSet(fn_1_498); + BoardSpaceWalkMiniEventFuncSet(fn_1_4A8); + BoardSpaceLandEventFuncSet(fn_1_494); + BoardShopHostSet(lbl_1_data_6); + BoardLotteryHostSet(lbl_1_data_8); + BoardStarHostSet(lbl_1_data_6); +} + +void BoardDestroy(void) +{ + if (lbl_1_data_6 != -1) { + BoardModelKill(lbl_1_data_6); + lbl_1_data_6 = -1; + } + if (lbl_1_data_0 != -1) { + BoardModelKill(lbl_1_data_0); + lbl_1_data_0 = -1; + } + if (lbl_1_data_2 != -1) { + BoardModelKill(lbl_1_data_2); + lbl_1_data_2 = -1; + } + BoardSpaceDestroy(); +} + +void fn_1_44C(void) +{ + s16 var_r31; + + var_r31 = BoardModelIDGet(lbl_1_data_0); + Hu3DModelLightInfoSet(var_r31, 1); +} + +void fn_1_490(void) { } + +void fn_1_494(void) { } + +s32 fn_1_498(void) { return 0; } + +void fn_1_4A0(void) { } + +void fn_1_4A4(void) { } + +void fn_1_4A8(void) { } + +s32 fn_1_4AC(s16 arg0, float arg8, float arg9) +{ + float var_f29; + float var_f31; + s32 var_r31; + + var_r31 = 0; + var_f31 = BoardModelRotYGet(arg0); + arg8 = fmod(arg8, 360.0f); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (arg8 < 0.0f) { + arg8 += 360.0f; + } + if (var_f31 != arg8) { + var_f29 = arg8 - var_f31; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + if (var_f29 < 180.0f) { + if (var_f29 > arg9) { + var_f31 += arg9; + } else { + var_f31 = arg8; + } + } else if ((360.0f - var_f29) > arg9) { + var_f31 -= arg9; + } else { + var_f31 = arg8; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelRotYSet(arg0, var_f31); + } else { + var_r31 = 1; + } + return var_r31; +} diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml deleted file mode 100644 index d0170ed0..00000000 --- a/tools/permuter_settings.toml +++ /dev/null @@ -1,2 +0,0 @@ -build_system = "ninja" -compiler_type = "mwcc" From ad4e1b349d2d7fd7d9042ea298357ac6b144ee20 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Thu, 2 May 2024 10:41:23 +0200 Subject: [PATCH 09/22] Finish staffDll --- config/GMPE01_00/rels/staffDll/symbols.txt | 70 +-- configure.py | 2 +- include/REL/staffDll.h | 15 + src/REL/staffDll/main.c | 606 +++++++++++++++++++++ 4 files changed, 659 insertions(+), 34 deletions(-) create mode 100644 include/REL/staffDll.h create mode 100644 src/REL/staffDll/main.c diff --git a/config/GMPE01_00/rels/staffDll/symbols.txt b/config/GMPE01_00/rels/staffDll/symbols.txt index 4c847261..da011122 100644 --- a/config/GMPE01_00/rels/staffDll/symbols.txt +++ b/config/GMPE01_00/rels/staffDll/symbols.txt @@ -9,39 +9,43 @@ ShowPicture = .text:0x00000BCC; // type:function size:0x1C4 scope:local MainProc = .text:0x00000D90; // type:function size:0x500 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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float +lbl_1_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4 = .rodata:0x00000004; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8 = .rodata:0x00000008; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C = .rodata:0x0000000C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float staffData = .data:0x00000000; // type:object size:0x1158 scope:local staffLogoPosTbl = .data:0x00001158; // type:object size:0xC scope:local data:float lbl_1_data_1164 = .data:0x00001164; // type:object size:0x14 data:string diff --git a/configure.py b/configure.py index 9a52b90e..b4ea02e2 100644 --- a/configure.py +++ b/configure.py @@ -1355,7 +1355,7 @@ config.libs = [ Rel('staffDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/staffDll/main.c"), + Object(Matching, "REL/staffDll/main.c"), } ), Rel('subchrselDll', diff --git a/include/REL/staffDll.h b/include/REL/staffDll.h new file mode 100644 index 00000000..6549cec7 --- /dev/null +++ b/include/REL/staffDll.h @@ -0,0 +1,15 @@ +#ifndef STAFFDLL_H +#define STAFFDLL_H + +#include "dolphin/types.h" + +typedef struct UnkStaffDllStruct { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ u32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; +} UnkStaffDllStruct; + +#endif diff --git a/src/REL/staffDll/main.c b/src/REL/staffDll/main.c new file mode 100644 index 00000000..88f4493d --- /dev/null +++ b/src/REL/staffDll/main.c @@ -0,0 +1,606 @@ +#include "game/animdata.h" +#include "game/audio.h" +#include "game/hsfman.h" +#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/wipe.h" + +#include "REL/staffDll.h" + +s16 imgGroup[26]; +s16 staffLogoGroup[3]; +s16 thpGroup; +s16 thpCoverGroup; +s32 staffSide; +s32 currImg; +omObjData *multiViewObj; + +static UnkStaffDllStruct staffData[] = { + { 0x00340001, 0, 0.0f, 0, 0, 0 }, + { 0x00350000, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { 0x00340002, 0, 0.0f, 0, 0, 0 }, + { 0x00350001, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340003, 0, 0.0f, 0, 0, 0 }, + { 0x00350002, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340004, 0, 0.0f, 0, 0, 0 }, + { 0x00350003, 2, 0.0f, 0, 0, 0 }, + { 0x00350004, 2, 0.0f, 0, 0, 0 }, + { 0x00350005, 2, 0.0f, 0, 0, 0 }, + { 0x00350006, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00350007, 2, 0.0f, 0, 0, 0 }, + { 0x00350008, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340005, 0, 0.0f, 0, 0, 0 }, + { 0x00350009, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340006, 0, 0.0f, 0, 0, 0 }, + { 0x0035000A, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340007, 0, 0.0f, 0, 0, 0 }, + { 0x0034001C, 1, 0.0f, 0, 0, 0 }, + { 0x0035000B, 2, 0.0f, 0, 0, 0 }, + { 0x0035000C, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001D, 1, 0.0f, 0, 0, 0 }, + { 0x0035000D, 2, 0.0f, 0, 0, 0 }, + { 0x0035000E, 2, 0.0f, 0, 0, 0 }, + { 0x0035000F, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00350010, 2, 0.0f, 0, 0, 0 }, + { 0x00350011, 2, 0.0f, 0, 0, 0 }, + { 0x00350012, 2, 0.0f, 0, 0, 0 }, + { 0x00350013, 2, 0.0f, 0, 0, 0 }, + { 0x00350014, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001E, 1, 0.0f, 0, 0, 0 }, + { 0x00350015, 2, 0.0f, 0, 0, 0 }, + { 0x00350016, 2, 0.0f, 0, 0, 0 }, + { 0x00350017, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340008, 0, 0.0f, 0, 0, 0 }, + { 0x00350018, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340009, 0, 0.0f, 0, 0, 0 }, + { 0x00350019, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000A, 0, 0.0f, 0, 0, 0 }, + { 0x0034001C, 1, 0.0f, 0, 0, 0 }, + { 0x0035001A, 2, 0.0f, 0, 0, 0 }, + { 0x0035001B, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001D, 1, 0.0f, 0, 0, 0 }, + { 0x0035001C, 2, 0.0f, 0, 0, 0 }, + { 0x0035001D, 2, 0.0f, 0, 0, 0 }, + { 0x0035001E, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001E, 1, 0.0f, 0, 0, 0 }, + { 0x0035001F, 2, 0.0f, 0, 0, 0 }, + { 0x00350020, 2, 0.0f, 0, 0, 0 }, + { 0x00350021, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000B, 0, 0.0f, 0, 0, 0 }, + { 0x0034001F, 1, 0.0f, 0, 0, 0 }, + { 0x00350022, 2, 0.0f, 0, 0, 0 }, + { 0x00350023, 2, 0.0f, 0, 0, 0 }, + { 0x00350024, 2, 0.0f, 0, 0, 0 }, + { 0x00350025, 2, 0.0f, 0, 0, 0 }, + { 0x00350026, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00350027, 2, 0.0f, 0, 0, 0 }, + { 0x00350028, 2, 0.0f, 0, 0, 0 }, + { 0x00350029, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001C, 1, 0.0f, 0, 0, 0 }, + { 0x0035002A, 2, 0.0f, 0, 0, 0 }, + { 0x0035002B, 2, 0.0f, 0, 0, 0 }, + { 0x0035002C, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0034001D, 1, 0.0f, 0, 0, 0 }, + { 0x0035002D, 2, 0.0f, 0, 0, 0 }, + { 0x0035002E, 2, 0.0f, 0, 0, 0 }, + { 0x0035002F, 2, 0.0f, 0, 0, 0 }, + { 0x00350030, 2, 0.0f, 0, 0, 0 }, + { 0x00350031, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00350032, 2, 0.0f, 0, 0, 0 }, + { 0x00350033, 2, 0.0f, 0, 0, 0 }, + { 0x00350034, 2, 0.0f, 0, 0, 0 }, + { 0x00350035, 2, 0.0f, 0, 0, 0 }, + { 0x00350036, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000C, 0, 0.0f, 0, 0, 0 }, + { 0x00350037, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000D, 0, 0.0f, 0, 0, 0 }, + { 0x00350038, 2, 0.0f, 0, 0, 0 }, + { 0x00350039, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000E, 0, 0.0f, 0, 0, 0 }, + { 0x0035003A, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0034000F, 0, 0.0f, 0, 0, 0 }, + { 0x0035003B, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340010, 0, 0.0f, 0, 0, 0 }, + { 0x0035003C, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00340011, 0, 0.0f, 0, 0, 0 }, + { 0x0035003B, 2, 0.0f, 0, 0, 0 }, + { 0x0035003C, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00340012, 0, 0.0f, 0, 0, 0 }, + { 0x0035003D, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00340013, 0, 0.0f, 0, 0, 0 }, + { 0x0035003E, 2, 0.0f, 0, 0, 0 }, + { 0x0035003F, 2, 0.0f, 0, 0, 0 }, + { 0x00350040, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340014, 0, 0.0f, 0, 0, 0 }, + { 0x00350041, 2, 0.0f, 0, 0, 0 }, + { 0x00350042, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340015, 0, 0.0f, 0, 0, 0 }, + { 0x00350043, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340022, 0, 0.0f, 0, 0, 0 }, + { 0x00340024, 1, 0.0f, 0, 0, 0 }, + { 0x00350056, 2, 0.0f, 0, 0, 0 }, + { 0x00350057, 2, 0.0f, 0, 0, 0 }, + { 0x00350058, 2, 0.0f, 0, 0, 0 }, + { 0x00350059, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00340025, 1, 0.0f, 0, 0, 0 }, + { 0x0035005A, 2, 0.0f, 0, 0, 0 }, + { 0x0035005B, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340023, 0, 0.0f, 0, 0, 0 }, + { 0x0035005C, 2, 0.0f, 0, 0, 0 }, + { 0x0035005D, 2, 0.0f, 0, 0, 0 }, + { 0x0035005E, 2, 0.0f, 0, 0, 0 }, + { 0x0035005F, 2, 0.0f, 0, 0, 0 }, + { 0x00350060, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340016, 0, 0.0f, 0, 0, 0 }, + { 0x00350044, 2, 0.0f, 0, 0, 0 }, + { 0x00350045, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x00350046, 2, 0.0f, 0, 0, 0 }, + { 0x00350047, 2, 0.0f, 0, 0, 0 }, + { 0x00350048, 2, 0.0f, 0, 0, 0 }, + { 0x00350049, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { 0x0035004A, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x0035004B, 2, 0.0f, 0, 0, 0 }, + { 0x0035004C, 2, 0.0f, 0, 0, 0 }, + { 0x0035004D, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340017, 0, 0.0f, 0, 0, 0 }, + { 0x0035004E, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { 0x00340018, 0, 0.0f, 0, 0, 0 }, + { 0x0035004F, 2, 0.0f, 0, 0, 0 }, + { 0x00350050, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { 0x00340019, 0, 0.0f, 0, 0, 0 }, + { 0x00350038, 2, 0.0f, 0, 0, 0 }, + { 0x00350051, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { 0x0034001A, 0, 0.0f, 0, 0, 0 }, + { 0x00350052, 2, 0.0f, 0, 0, 0 }, + { 0x00350053, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { 0x0034001B, 0, 0.0f, 0, 0, 0 }, + { 0x00350054, 2, 0.0f, 0, 0, 0 }, + { 0x00350055, 2, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFD, 0, 74.0f, 0, 0, 0 }, + { 0xFFFFFFFE, 0, 0.0f, 0, 0, 0 }, + { 0xFFFFFFFF, 0, 0.0f, 0, 0, 0 }, +}; +static float staffLogoPosTbl[] = { 460.0f, 293.0f, 293.0f }; +char lbl_1_data_1164[] = "movie/stmov_a00.thp"; + +const float lbl_1_rodata_0 = 1.75f; +const float lbl_1_rodata_4 = 0.0f; +const float lbl_1_rodata_8 = 2.125f; +const float lbl_1_rodata_C = 0.0f; + +void MainProc(void); +void CreateStaff(void); +void ShowPicture(void); + +void ModuleProlog(void) +{ + Process *var_r31; + s32 var_lr; + + var_r31 = omInitObjMan(0x32, 0x2000); + omGameSysInit(var_r31); + HuWinInit(1); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 20.0f, 20.0f, 10000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraScissorSet(1, 0, 0, 640, 480); + multiViewObj = omAddObjEx(var_r31, 0x7FDA, 0, 0, -1, omOutViewMulti); + multiViewObj->work[0] = 1; + CRotM[0].x = -35.0f; + CRotM[0].y = 0.0f; + CRotM[0].z = 0.0f; + CenterM[0].x = 0.0f; + CenterM[0].y = 0.0f; + CenterM[0].z = -250.0f; + CZoomM[0] = 4820.0f; + Hu3DBGColorSet(0, 0, 0); + CreateStaff(); + HuPrcChildCreate(MainProc, 0x1000, 0x2000, 0, HuPrcCurrentGet()); + WipeCreate(1, 0, 60); +} + +static void ExitProc(void) +{ + while (TRUE) { + if (omSysExitReq == 1) { + WipeCreate(2, 0, 0x3C); + HuAudFadeOut(0x3E8); + HuPrcSleep(0x3C); + MGSeqKillAll(); + omOvlReturnEx(1, 1); + + while (TRUE) { + HuPrcVSleep(); + } + } + HuPrcVSleep(); + } + + while (!omSysExitReq) { + HuPrcVSleep(); + } + WipeCreate(2, 0, 0x3C); + HuAudFadeOut(0x3E8); + HuPrcSleep(0x3C); + MGSeqKillAll(); + omOvlReturnEx(1, 1); + + while (TRUE) { + HuPrcVSleep(); + } +} + +static void CreateStaff(void) +{ + void *var_r29; + AnimData *var_r28; + s16 var_r30; + s32 var_r31; + + staffSide = 0; + currImg = 0; + + for (var_r31 = 0; var_r31 < 26; var_r31++) { + var_r29 = HuDataSelHeapReadNum(var_r31 + 0x730000, MEMORY_DEFAULT_NUM, HEAP_DATA); + var_r28 = HuSprAnimRead(var_r29); + var_r30 = HuSprCreate(var_r28, 0x4002, 0); + imgGroup[var_r31] = HuSprGrpCreate(1); + HuSprGrpMemberSet(imgGroup[var_r31], 0, var_r30); + if (staffSide != 0) { + HuSprGrpPosSet(imgGroup[var_r31], 380.0f, 240.0f); + } else { + HuSprGrpPosSet(imgGroup[var_r31], 200.0f, 240.0f); + } + HuSprAttrSet(imgGroup[var_r31], 0, 4); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = HuDataSelHeapReadNum(var_r31 + 0x73001A, MEMORY_DEFAULT_NUM, HEAP_DATA); + var_r28 = HuSprAnimRead(var_r29); + var_r30 = HuSprCreate(var_r28, 0x100, 0); + staffLogoGroup[var_r31] = HuSprGrpCreate(1); + HuSprGrpMemberSet(staffLogoGroup[var_r31], 0, var_r30); + HuSprAttrSet(staffLogoGroup[var_r31], 0, 4); + } + thpGroup = HuSprGrpCreate(1); + var_r30 = HuTHPSprCreate(&lbl_1_data_1164, 0, 0x4002); + HuSprGrpMemberSet(thpGroup, 0, var_r30); + HuSprGrpScaleSet(thpGroup, 0.65f, 0.65f); + HuSprGrpPosSet(thpGroup, 280.0f, 200.0f); + HuSprAttrSet(thpGroup, 0, 4); + HuTHPStop(); + var_r29 = HuDataSelHeapReadNum(0x73001D, MEMORY_DEFAULT_NUM, HEAP_DATA); + var_r28 = HuSprAnimRead(var_r29); + var_r30 = HuSprCreate(var_r28, 0x4001, 0); + thpCoverGroup = HuSprGrpCreate(1); + HuSprGrpMemberSet(thpCoverGroup, 0, var_r30); + HuSprGrpScaleSet(thpCoverGroup, 40.0f, 40.0f); + HuSprGrpPosSet(thpCoverGroup, 280.0f, 200.0f); + HuSprAttrSet(thpCoverGroup, 0, 4); + HuPrcChildCreate(ShowPicture, 0x1000, 0x2000, 0, HuPrcCurrentGet()); + HuPrcChildCreate(ExitProc, 0x1000, 0x1000, 0, HuPrcCurrentGet()); +} + +static void MoveStaff(void) +{ + float sp8[2]; + Process *temp_ret; + float var_f30; + float var_f31; + s16 var_r30; + u32 var_r29; + UnkStaffDllStruct *var_r31; + + var_r31 = (UnkStaffDllStruct *)HuPrcCurrentGet()->user_data; + var_r31->unk_14 = 0; + switch (var_r31->unk_00) { + case -2: + HuSprAttrReset(staffLogoGroup[var_r31->unk_10], 0, 4); + var_f31 = staffLogoPosTbl[var_r31->unk_10]; + var_f30 = 576.0f; + break; + default: + HuWinMesMaxSizeGet(1, sp8, var_r31->unk_00); + var_r29 = 0; + switch (var_r31->unk_04) { + case 3: + var_f31 = 320.0f - (0.75f * sp8[0]) / 2; + break; + case 0: + var_f31 = 10.0f; + if (staffSide == 0) { + var_f31 += 240.0f; + } + break; + case 1: + var_f31 = 30.0f; + if (staffSide == 0) { + var_f31 += 240.0f; + } + break; + case 2: + var_f31 = 550.0f - (0.75f * sp8[0]); + if (staffSide != 0) { + var_f31 -= 240.0f; + } + var_r29 = 0x1000; + break; + } + var_f30 = 476.0f; + var_r30 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 1); + HuWinAttrSet(var_r30, var_r29); + HuWinPriSet(var_r30, 0x100); + HuWinBGTPLvlSet(var_r30, 0.0f); + HuWinMesSpeedSet(var_r30, 0); + HuWinMesSet(var_r30, var_r31->unk_00); + HuWinScaleSet(var_r30, 0.75f, 0.75f); + switch (var_r31->unk_04) { + case 0: + case 1: + HuWinMesPalSet(var_r30, 7, 96, 240, 255); + break; + default: + HuWinMesPalSet(var_r30, 7, 255, 255, 255); + break; + } + break; + } + while (TRUE) { + var_f30 -= 0.4f; + if (var_r31->unk_00 == (u32)-2) { + if (!(var_f30 < -114.0f)) { + goto block_27; + } else { + break; + } + } + if (var_f30 < -24.0f) { + break; + } + block_27: + if (var_r31->unk_00 == (u32)-2) { + HuSprGrpPosSet(staffLogoGroup[var_r31->unk_10], var_f31, var_f30); + } else { + HuWinPosSet(var_r30, var_f31, var_f30); + } + HuPrcVSleep(); + } + var_r31->unk_14 = 1; + if (var_r31->unk_00 == (u32)-2) { + HuSprAttrSet(staffLogoGroup[var_r31->unk_10], 0, 4); + } else { + HuWinKill(var_r30); + } + HuPrcVSleep(); + HuPrcKill(HuPrcCurrentGet()); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void HidePicture(void) +{ + s32 prevImg; + + prevImg = currImg; + currImg++; + if (staffSide != 0) { + HuSprGrpPosSet(imgGroup[currImg], 380.0f, 240.0f); + } else { + HuSprGrpPosSet(imgGroup[currImg], 200.0f, 240.0f); + } + HuSprAttrSet(imgGroup[prevImg], 0, 4); + HuPrcSleep(20); + HuSprAttrReset(imgGroup[currImg], 0, 4); + HuPrcKill(HuPrcCurrentGet()); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void ShowPicture(void) +{ + float var_f31; + s32 var_r31; + + HuPrcSleep(360); + HuSprAttrReset(imgGroup[currImg], 0, 4); + + for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 30; var_r31++, var_f31 += 1.0f / 30.0f) { + HuSprTPLvlSet(imgGroup[currImg], 0, var_f31); + HuPrcVSleep(); + } + HuSprTPLvlSet(imgGroup[currImg], 0, 1.0f); + + while (TRUE) { + if (currImg >= 24) { + HuPrcSleep(430); + } else { + HuPrcSleep(550); + } + if (currImg >= 25) { + break; + } + HuPrcChildCreate(HidePicture, 0x1000, 0x2000, 0, HuPrcCurrentGet()); + } + + for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 30; var_r31++, var_f31 -= 1.0f / 30.0f) { + HuSprTPLvlSet(imgGroup[25], 0, var_f31); + HuPrcVSleep(); + } + HuSprAttrSet(imgGroup[25], 0, 4); + HuSprAttrSet(imgGroup[25], 0, 4); + + while (TRUE) { + HuPrcVSleep(); + } +} + +static void MainProc(void) +{ + s32 var_r31; + UnkStaffDllStruct *var_r30; + s32 var_r29; + Process *var_r28; + s32 var_r27; + float var_f29; + float var_f30; + float var_f31; + + HuPrcSleep(0x3C); + var_r27 = HuAudSStreamPlay(0x16); + + for (var_r31 = 0;; var_r31++) { + var_r30 = &staffData[var_r31]; + if (var_r30->unk_00 == (u32)-1) { + break; + } + + switch (var_r30->unk_00) { + case -3: + HuPrcSleep(var_r30->unk_08 / 0.4f); + break; + default: + var_r28 = HuPrcChildCreate(MoveStaff, 0x1000, 0x2000, 0, HuPrcCurrentGet()); + var_r28->user_data = var_r30; + if (var_r30->unk_0C == 1) { + staffSide++; + staffSide &= 1; + HuPrcChildCreate(HidePicture, 0x1000, 0x2000, 0, HuPrcCurrentGet()); + } else { + HuPrcSleep(60); + } + break; + } + } + var_r30 = &staffData[var_r31 - 1]; + + while (var_r30->unk_14 == 0) { + HuPrcVSleep(); + } + HuPrcSleep(60); + HuSprAttrReset(staffLogoGroup[1], 0, 4); + var_f29 = staffLogoPosTbl[1]; + var_f30 = 526.0f; + var_r29 = 0; + + while (TRUE) { + var_f30 -= 0.4f; + if (var_f30 < 400.0f) { + break; + } + if ((var_r29 == 0) && (var_f30 < 506.0f)) { + var_r29 = 1; + HuAudSStreamFadeOut(var_r27, 6000); + } + HuSprGrpPosSet(staffLogoGroup[1], var_f29, var_f30); + HuPrcVSleep(); + } + HuSprGrpPosSet(staffLogoGroup[1], var_f29, 400.0f); + HuPrcSleep(0xF0); + HuSprAttrReset(thpGroup, 0, 4); + HuSprAttrReset(thpCoverGroup, 0, 4); + HuTHPRestart(); + + for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 90; var_r31++, var_f31 -= 0.1f / 9.0f) { + HuSprTPLvlSet(thpCoverGroup, 0, var_f31); + HuPrcVSleep(); + } + HuSprAttrSet(thpCoverGroup, 0, 4); + + while (HuTHPFrameGet() < 450) { + HuPrcVSleep(); + } + HuSprAttrReset(thpCoverGroup, 0, 4); + + for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 120; var_r31++, var_f31 += 0.05f / 6.0f) { + HuSprTPLvlSet(thpCoverGroup, 0, var_f31); + HuPrcVSleep(); + } + HuSprTPLvlSet(thpCoverGroup, 0, 1.0f); + HuSprAttrSet(thpGroup, 0, 4); + HuTHPClose(); + + for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 0x1E; var_r31++, var_f31 -= 1.0f / 30.0f) { + HuSprTPLvlSet(staffLogoGroup[1], 0, var_f31); + HuPrcVSleep(); + } + HuSprAttrSet(staffLogoGroup[1], 0, 4); + HuPrcSleep(0x78); + HuSprAttrReset(staffLogoGroup[2], 0, 4); + HuSprGrpPosSet(staffLogoGroup[2], 280.0f, 240.0f); + + for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 0x1E; var_r31++, var_f31 += 1.0f / 30.0f) { + HuSprTPLvlSet(staffLogoGroup[2], 0, var_f31); + HuPrcVSleep(); + } + + HuPrcSleep(600); + + while (TRUE) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if ((HuPadBtn[var_r31] & PAD_BUTTON_MENU) != 0) { + break; + } + } + if (var_r31 < 4) { + break; + } + HuPrcVSleep(); + } + WipeCreate(2, 0, 0x3C); + HuAudFadeOut(0x3E8); + HuPrcSleep(0x3C); + MGSeqKillAll(); + omOvlReturnEx(1, 1); + + while (TRUE) { + HuPrcVSleep(); + } +} From 77f986743031e91c4c2f61a903e861dc77c82d32 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 2 May 2024 08:26:48 -0500 Subject: [PATCH 10/22] Clean up staffdll/main.c --- config/GMPE01_00/rels/staffDll/symbols.txt | 2 +- include/REL/staffDll.h | 2 +- src/REL/staffDll/main.c | 279 ++++++++++----------- 3 files changed, 137 insertions(+), 146 deletions(-) diff --git a/config/GMPE01_00/rels/staffDll/symbols.txt b/config/GMPE01_00/rels/staffDll/symbols.txt index da011122..ad21899f 100644 --- a/config/GMPE01_00/rels/staffDll/symbols.txt +++ b/config/GMPE01_00/rels/staffDll/symbols.txt @@ -48,7 +48,7 @@ lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:f lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float staffData = .data:0x00000000; // type:object size:0x1158 scope:local staffLogoPosTbl = .data:0x00001158; // type:object size:0xC scope:local data:float -lbl_1_data_1164 = .data:0x00001164; // type:object size:0x14 data:string +lbl_1_data_1164 = .data:0x00001164; // type:object size:0x14 scope:local data:string multiViewObj = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte currImg = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte staffSide = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte diff --git a/include/REL/staffDll.h b/include/REL/staffDll.h index 6549cec7..21e81970 100644 --- a/include/REL/staffDll.h +++ b/include/REL/staffDll.h @@ -4,7 +4,7 @@ #include "dolphin/types.h" typedef struct UnkStaffDllStruct { - /* 0x00 */ s32 unk_00; + /* 0x00 */ u32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ float unk_08; /* 0x0C */ u32 unk_0C; diff --git a/src/REL/staffDll/main.c b/src/REL/staffDll/main.c index 88f4493d..13bd4fad 100644 --- a/src/REL/staffDll/main.c +++ b/src/REL/staffDll/main.c @@ -10,82 +10,83 @@ #include "game/wipe.h" #include "REL/staffDll.h" +#include "rel_sqrt_consts.h" -s16 imgGroup[26]; -s16 staffLogoGroup[3]; -s16 thpGroup; -s16 thpCoverGroup; -s32 staffSide; -s32 currImg; -omObjData *multiViewObj; +static s16 imgGroup[26]; +static s16 staffLogoGroup[3]; +static s16 thpGroup; +static s16 thpCoverGroup; +static s32 staffSide; +static s32 currImg; +static omObjData *multiViewObj; static UnkStaffDllStruct staffData[] = { { 0x00340001, 0, 0.0f, 0, 0, 0 }, { 0x00350000, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { -3, 0, 72.0f, 0, 0, 0 }, { 0x00340002, 0, 0.0f, 0, 0, 0 }, { 0x00350001, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340003, 0, 0.0f, 0, 0, 0 }, { 0x00350002, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340004, 0, 0.0f, 0, 0, 0 }, { 0x00350003, 2, 0.0f, 0, 0, 0 }, { 0x00350004, 2, 0.0f, 0, 0, 0 }, { 0x00350005, 2, 0.0f, 0, 0, 0 }, { 0x00350006, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00350007, 2, 0.0f, 0, 0, 0 }, { 0x00350008, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340005, 0, 0.0f, 0, 0, 0 }, { 0x00350009, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340006, 0, 0.0f, 0, 0, 0 }, { 0x0035000A, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340007, 0, 0.0f, 0, 0, 0 }, { 0x0034001C, 1, 0.0f, 0, 0, 0 }, { 0x0035000B, 2, 0.0f, 0, 0, 0 }, { 0x0035000C, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001D, 1, 0.0f, 0, 0, 0 }, { 0x0035000D, 2, 0.0f, 0, 0, 0 }, { 0x0035000E, 2, 0.0f, 0, 0, 0 }, { 0x0035000F, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00350010, 2, 0.0f, 0, 0, 0 }, { 0x00350011, 2, 0.0f, 0, 0, 0 }, { 0x00350012, 2, 0.0f, 0, 0, 0 }, { 0x00350013, 2, 0.0f, 0, 0, 0 }, { 0x00350014, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001E, 1, 0.0f, 0, 0, 0 }, { 0x00350015, 2, 0.0f, 0, 0, 0 }, { 0x00350016, 2, 0.0f, 0, 0, 0 }, { 0x00350017, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340008, 0, 0.0f, 0, 0, 0 }, { 0x00350018, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340009, 0, 0.0f, 0, 0, 0 }, { 0x00350019, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000A, 0, 0.0f, 0, 0, 0 }, { 0x0034001C, 1, 0.0f, 0, 0, 0 }, { 0x0035001A, 2, 0.0f, 0, 0, 0 }, { 0x0035001B, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001D, 1, 0.0f, 0, 0, 0 }, { 0x0035001C, 2, 0.0f, 0, 0, 0 }, { 0x0035001D, 2, 0.0f, 0, 0, 0 }, { 0x0035001E, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001E, 1, 0.0f, 0, 0, 0 }, { 0x0035001F, 2, 0.0f, 0, 0, 0 }, { 0x00350020, 2, 0.0f, 0, 0, 0 }, { 0x00350021, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000B, 0, 0.0f, 0, 0, 0 }, { 0x0034001F, 1, 0.0f, 0, 0, 0 }, { 0x00350022, 2, 0.0f, 0, 0, 0 }, @@ -93,130 +94,124 @@ static UnkStaffDllStruct staffData[] = { { 0x00350024, 2, 0.0f, 0, 0, 0 }, { 0x00350025, 2, 0.0f, 0, 0, 0 }, { 0x00350026, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00350027, 2, 0.0f, 0, 0, 0 }, { 0x00350028, 2, 0.0f, 0, 0, 0 }, { 0x00350029, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001C, 1, 0.0f, 0, 0, 0 }, { 0x0035002A, 2, 0.0f, 0, 0, 0 }, { 0x0035002B, 2, 0.0f, 0, 0, 0 }, { 0x0035002C, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0034001D, 1, 0.0f, 0, 0, 0 }, { 0x0035002D, 2, 0.0f, 0, 0, 0 }, { 0x0035002E, 2, 0.0f, 0, 0, 0 }, { 0x0035002F, 2, 0.0f, 0, 0, 0 }, { 0x00350030, 2, 0.0f, 0, 0, 0 }, { 0x00350031, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00350032, 2, 0.0f, 0, 0, 0 }, { 0x00350033, 2, 0.0f, 0, 0, 0 }, { 0x00350034, 2, 0.0f, 0, 0, 0 }, { 0x00350035, 2, 0.0f, 0, 0, 0 }, { 0x00350036, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000C, 0, 0.0f, 0, 0, 0 }, { 0x00350037, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000D, 0, 0.0f, 0, 0, 0 }, { 0x00350038, 2, 0.0f, 0, 0, 0 }, { 0x00350039, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000E, 0, 0.0f, 0, 0, 0 }, { 0x0035003A, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0034000F, 0, 0.0f, 0, 0, 0 }, { 0x0035003B, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340010, 0, 0.0f, 0, 0, 0 }, { 0x0035003C, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00340011, 0, 0.0f, 0, 0, 0 }, { 0x0035003B, 2, 0.0f, 0, 0, 0 }, { 0x0035003C, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00340012, 0, 0.0f, 0, 0, 0 }, { 0x0035003D, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00340013, 0, 0.0f, 0, 0, 0 }, { 0x0035003E, 2, 0.0f, 0, 0, 0 }, { 0x0035003F, 2, 0.0f, 0, 0, 0 }, { 0x00350040, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340014, 0, 0.0f, 0, 0, 0 }, { 0x00350041, 2, 0.0f, 0, 0, 0 }, { 0x00350042, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340015, 0, 0.0f, 0, 0, 0 }, { 0x00350043, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340022, 0, 0.0f, 0, 0, 0 }, { 0x00340024, 1, 0.0f, 0, 0, 0 }, { 0x00350056, 2, 0.0f, 0, 0, 0 }, { 0x00350057, 2, 0.0f, 0, 0, 0 }, { 0x00350058, 2, 0.0f, 0, 0, 0 }, { 0x00350059, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00340025, 1, 0.0f, 0, 0, 0 }, { 0x0035005A, 2, 0.0f, 0, 0, 0 }, { 0x0035005B, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340023, 0, 0.0f, 0, 0, 0 }, { 0x0035005C, 2, 0.0f, 0, 0, 0 }, { 0x0035005D, 2, 0.0f, 0, 0, 0 }, { 0x0035005E, 2, 0.0f, 0, 0, 0 }, { 0x0035005F, 2, 0.0f, 0, 0, 0 }, { 0x00350060, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340016, 0, 0.0f, 0, 0, 0 }, { 0x00350044, 2, 0.0f, 0, 0, 0 }, { 0x00350045, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x00350046, 2, 0.0f, 0, 0, 0 }, { 0x00350047, 2, 0.0f, 0, 0, 0 }, { 0x00350048, 2, 0.0f, 0, 0, 0 }, { 0x00350049, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 24.0f, 0, 0, 0 }, + { -3, 0, 24.0f, 0, 0, 0 }, { 0x0035004A, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x0035004B, 2, 0.0f, 0, 0, 0 }, { 0x0035004C, 2, 0.0f, 0, 0, 0 }, { 0x0035004D, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340017, 0, 0.0f, 0, 0, 0 }, { 0x0035004E, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 48.0f, 0, 0, 0 }, + { -3, 0, 48.0f, 0, 0, 0 }, { 0x00340018, 0, 0.0f, 0, 0, 0 }, { 0x0035004F, 2, 0.0f, 0, 0, 0 }, { 0x00350050, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { -3, 0, 72.0f, 0, 0, 0 }, { 0x00340019, 0, 0.0f, 0, 0, 0 }, { 0x00350038, 2, 0.0f, 0, 0, 0 }, { 0x00350051, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { -3, 0, 72.0f, 0, 0, 0 }, { 0x0034001A, 0, 0.0f, 0, 0, 0 }, { 0x00350052, 2, 0.0f, 0, 0, 0 }, { 0x00350053, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 72.0f, 0, 0, 0 }, + { -3, 0, 72.0f, 0, 0, 0 }, { 0x0034001B, 0, 0.0f, 0, 0, 0 }, { 0x00350054, 2, 0.0f, 0, 0, 0 }, { 0x00350055, 2, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFD, 0, 74.0f, 0, 0, 0 }, - { 0xFFFFFFFE, 0, 0.0f, 0, 0, 0 }, - { 0xFFFFFFFF, 0, 0.0f, 0, 0, 0 }, + { -3, 0, 74.0f, 0, 0, 0 }, + { -2, 0, 0.0f, 0, 0, 0 }, + { -1, 0, 0.0f, 0, 0, 0 }, }; static float staffLogoPosTbl[] = { 460.0f, 293.0f, 293.0f }; -char lbl_1_data_1164[] = "movie/stmov_a00.thp"; -const float lbl_1_rodata_0 = 1.75f; -const float lbl_1_rodata_4 = 0.0f; -const float lbl_1_rodata_8 = 2.125f; -const float lbl_1_rodata_C = 0.0f; - -void MainProc(void); -void CreateStaff(void); -void ShowPicture(void); +static void MainProc(void); +static void CreateStaff(void); +static void ShowPicture(void); void ModuleProlog(void) { @@ -242,16 +237,16 @@ void ModuleProlog(void) Hu3DBGColorSet(0, 0, 0); CreateStaff(); HuPrcChildCreate(MainProc, 0x1000, 0x2000, 0, HuPrcCurrentGet()); - WipeCreate(1, 0, 60); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); } static void ExitProc(void) { while (TRUE) { if (omSysExitReq == 1) { - WipeCreate(2, 0, 0x3C); - HuAudFadeOut(0x3E8); - HuPrcSleep(0x3C); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudFadeOut(1000); + HuPrcSleep(60); MGSeqKillAll(); omOvlReturnEx(1, 1); @@ -265,9 +260,9 @@ static void ExitProc(void) while (!omSysExitReq) { HuPrcVSleep(); } - WipeCreate(2, 0, 0x3C); - HuAudFadeOut(0x3E8); - HuPrcSleep(0x3C); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudFadeOut(1000); + HuPrcSleep(60); MGSeqKillAll(); omOvlReturnEx(1, 1); @@ -289,7 +284,7 @@ static void CreateStaff(void) for (var_r31 = 0; var_r31 < 26; var_r31++) { var_r29 = HuDataSelHeapReadNum(var_r31 + 0x730000, MEMORY_DEFAULT_NUM, HEAP_DATA); var_r28 = HuSprAnimRead(var_r29); - var_r30 = HuSprCreate(var_r28, 0x4002, 0); + var_r30 = HuSprCreate(var_r28, 16386, 0); imgGroup[var_r31] = HuSprGrpCreate(1); HuSprGrpMemberSet(imgGroup[var_r31], 0, var_r30); if (staffSide != 0) { @@ -297,34 +292,34 @@ static void CreateStaff(void) } else { HuSprGrpPosSet(imgGroup[var_r31], 200.0f, 240.0f); } - HuSprAttrSet(imgGroup[var_r31], 0, 4); + HuSprAttrSet(imgGroup[var_r31], 0, HUSPR_ATTR_DISPOFF); } for (var_r31 = 0; var_r31 < 3; var_r31++) { var_r29 = HuDataSelHeapReadNum(var_r31 + 0x73001A, MEMORY_DEFAULT_NUM, HEAP_DATA); var_r28 = HuSprAnimRead(var_r29); - var_r30 = HuSprCreate(var_r28, 0x100, 0); + var_r30 = HuSprCreate(var_r28, 256, 0); staffLogoGroup[var_r31] = HuSprGrpCreate(1); HuSprGrpMemberSet(staffLogoGroup[var_r31], 0, var_r30); - HuSprAttrSet(staffLogoGroup[var_r31], 0, 4); + HuSprAttrSet(staffLogoGroup[var_r31], 0, HUSPR_ATTR_DISPOFF); } thpGroup = HuSprGrpCreate(1); - var_r30 = HuTHPSprCreate(&lbl_1_data_1164, 0, 0x4002); + var_r30 = HuTHPSprCreate("movie/stmov_a00.thp", 0, 16386); HuSprGrpMemberSet(thpGroup, 0, var_r30); HuSprGrpScaleSet(thpGroup, 0.65f, 0.65f); HuSprGrpPosSet(thpGroup, 280.0f, 200.0f); - HuSprAttrSet(thpGroup, 0, 4); + HuSprAttrSet(thpGroup, 0, HUSPR_ATTR_DISPOFF); HuTHPStop(); var_r29 = HuDataSelHeapReadNum(0x73001D, MEMORY_DEFAULT_NUM, HEAP_DATA); var_r28 = HuSprAnimRead(var_r29); - var_r30 = HuSprCreate(var_r28, 0x4001, 0); + var_r30 = HuSprCreate(var_r28, 16385, 0); thpCoverGroup = HuSprGrpCreate(1); HuSprGrpMemberSet(thpCoverGroup, 0, var_r30); HuSprGrpScaleSet(thpCoverGroup, 40.0f, 40.0f); HuSprGrpPosSet(thpCoverGroup, 280.0f, 200.0f); - HuSprAttrSet(thpCoverGroup, 0, 4); - HuPrcChildCreate(ShowPicture, 0x1000, 0x2000, 0, HuPrcCurrentGet()); - HuPrcChildCreate(ExitProc, 0x1000, 0x1000, 0, HuPrcCurrentGet()); + HuSprAttrSet(thpCoverGroup, 0, HUSPR_ATTR_DISPOFF); + HuPrcChildCreate(ShowPicture, 4096, 8192, 0, HuPrcCurrentGet()); + HuPrcChildCreate(ExitProc, 4096, 4096, 0, HuPrcCurrentGet()); } static void MoveStaff(void) @@ -337,11 +332,11 @@ static void MoveStaff(void) u32 var_r29; UnkStaffDllStruct *var_r31; - var_r31 = (UnkStaffDllStruct *)HuPrcCurrentGet()->user_data; + var_r31 = HuPrcCurrentGet()->user_data; var_r31->unk_14 = 0; switch (var_r31->unk_00) { case -2: - HuSprAttrReset(staffLogoGroup[var_r31->unk_10], 0, 4); + HuSprAttrReset(staffLogoGroup[var_r31->unk_10], 0, HUSPR_ATTR_DISPOFF); var_f31 = staffLogoPosTbl[var_r31->unk_10]; var_f30 = 576.0f; break; @@ -349,62 +344,58 @@ static void MoveStaff(void) HuWinMesMaxSizeGet(1, sp8, var_r31->unk_00); var_r29 = 0; switch (var_r31->unk_04) { - case 3: - var_f31 = 320.0f - (0.75f * sp8[0]) / 2; - break; - case 0: - var_f31 = 10.0f; - if (staffSide == 0) { - var_f31 += 240.0f; - } - break; - case 1: - var_f31 = 30.0f; - if (staffSide == 0) { - var_f31 += 240.0f; - } - break; - case 2: - var_f31 = 550.0f - (0.75f * sp8[0]); - if (staffSide != 0) { - var_f31 -= 240.0f; - } - var_r29 = 0x1000; - break; + case 3: + var_f31 = 320.0f - (0.75f * sp8[0]) / 2; + break; + case 0: + var_f31 = 10.0f; + if (!staffSide) { + var_f31 += 240.0f; + } + break; + case 1: + var_f31 = 30.0f; + if (!staffSide) { + var_f31 += 240.0f; + } + break; + case 2: + var_f31 = 550.0f - (0.75f * sp8[0]); + if (staffSide) { + var_f31 -= 240.0f; + } + var_r29 = 0x1000; + break; } var_f30 = 476.0f; var_r30 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 1); HuWinAttrSet(var_r30, var_r29); - HuWinPriSet(var_r30, 0x100); + HuWinPriSet(var_r30, 256); HuWinBGTPLvlSet(var_r30, 0.0f); HuWinMesSpeedSet(var_r30, 0); HuWinMesSet(var_r30, var_r31->unk_00); HuWinScaleSet(var_r30, 0.75f, 0.75f); switch (var_r31->unk_04) { - case 0: - case 1: - HuWinMesPalSet(var_r30, 7, 96, 240, 255); - break; - default: - HuWinMesPalSet(var_r30, 7, 255, 255, 255); - break; + case 0: + case 1: + HuWinMesPalSet(var_r30, 7, 96, 240, 255); + break; + default: + HuWinMesPalSet(var_r30, 7, 255, 255, 255); + break; } break; } while (TRUE) { var_f30 -= 0.4f; - if (var_r31->unk_00 == (u32)-2) { - if (!(var_f30 < -114.0f)) { - goto block_27; - } else { + if (var_r31->unk_00 == -2) { + if (var_f30 < -114.0f) { break; } - } - if (var_f30 < -24.0f) { + } else if (var_f30 < -24.0f) { break; } - block_27: - if (var_r31->unk_00 == (u32)-2) { + if (var_r31->unk_00 == -2) { HuSprGrpPosSet(staffLogoGroup[var_r31->unk_10], var_f31, var_f30); } else { HuWinPosSet(var_r30, var_f31, var_f30); @@ -412,8 +403,8 @@ static void MoveStaff(void) HuPrcVSleep(); } var_r31->unk_14 = 1; - if (var_r31->unk_00 == (u32)-2) { - HuSprAttrSet(staffLogoGroup[var_r31->unk_10], 0, 4); + if (var_r31->unk_00 == -2) { + HuSprAttrSet(staffLogoGroup[var_r31->unk_10], 0, HUSPR_ATTR_DISPOFF); } else { HuWinKill(var_r30); } @@ -435,9 +426,9 @@ static void HidePicture(void) } else { HuSprGrpPosSet(imgGroup[currImg], 200.0f, 240.0f); } - HuSprAttrSet(imgGroup[prevImg], 0, 4); + HuSprAttrSet(imgGroup[prevImg], 0, HUSPR_ATTR_DISPOFF); HuPrcSleep(20); - HuSprAttrReset(imgGroup[currImg], 0, 4); + HuSprAttrReset(imgGroup[currImg], 0, HUSPR_ATTR_DISPOFF); HuPrcKill(HuPrcCurrentGet()); while (TRUE) { HuPrcVSleep(); @@ -450,7 +441,7 @@ static void ShowPicture(void) s32 var_r31; HuPrcSleep(360); - HuSprAttrReset(imgGroup[currImg], 0, 4); + HuSprAttrReset(imgGroup[currImg], 0, HUSPR_ATTR_DISPOFF); for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 30; var_r31++, var_f31 += 1.0f / 30.0f) { HuSprTPLvlSet(imgGroup[currImg], 0, var_f31); @@ -474,8 +465,8 @@ static void ShowPicture(void) HuSprTPLvlSet(imgGroup[25], 0, var_f31); HuPrcVSleep(); } - HuSprAttrSet(imgGroup[25], 0, 4); - HuSprAttrSet(imgGroup[25], 0, 4); + HuSprAttrSet(imgGroup[25], 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(imgGroup[25], 0, HUSPR_ATTR_DISPOFF); while (TRUE) { HuPrcVSleep(); @@ -493,12 +484,12 @@ static void MainProc(void) float var_f30; float var_f31; - HuPrcSleep(0x3C); - var_r27 = HuAudSStreamPlay(0x16); + HuPrcSleep(60); + var_r27 = HuAudSStreamPlay(22); for (var_r31 = 0;; var_r31++) { var_r30 = &staffData[var_r31]; - if (var_r30->unk_00 == (u32)-1) { + if (var_r30->unk_00 == -1) { break; } @@ -525,7 +516,7 @@ static void MainProc(void) HuPrcVSleep(); } HuPrcSleep(60); - HuSprAttrReset(staffLogoGroup[1], 0, 4); + HuSprAttrReset(staffLogoGroup[1], 0, HUSPR_ATTR_DISPOFF); var_f29 = staffLogoPosTbl[1]; var_f30 = 526.0f; var_r29 = 0; @@ -543,40 +534,40 @@ static void MainProc(void) HuPrcVSleep(); } HuSprGrpPosSet(staffLogoGroup[1], var_f29, 400.0f); - HuPrcSleep(0xF0); - HuSprAttrReset(thpGroup, 0, 4); - HuSprAttrReset(thpCoverGroup, 0, 4); + HuPrcSleep(240); + HuSprAttrReset(thpGroup, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(thpCoverGroup, 0, HUSPR_ATTR_DISPOFF); HuTHPRestart(); for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 90; var_r31++, var_f31 -= 0.1f / 9.0f) { HuSprTPLvlSet(thpCoverGroup, 0, var_f31); HuPrcVSleep(); } - HuSprAttrSet(thpCoverGroup, 0, 4); + HuSprAttrSet(thpCoverGroup, 0, HUSPR_ATTR_DISPOFF); while (HuTHPFrameGet() < 450) { HuPrcVSleep(); } - HuSprAttrReset(thpCoverGroup, 0, 4); + HuSprAttrReset(thpCoverGroup, 0, HUSPR_ATTR_DISPOFF); for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 120; var_r31++, var_f31 += 0.05f / 6.0f) { HuSprTPLvlSet(thpCoverGroup, 0, var_f31); HuPrcVSleep(); } HuSprTPLvlSet(thpCoverGroup, 0, 1.0f); - HuSprAttrSet(thpGroup, 0, 4); + HuSprAttrSet(thpGroup, 0, HUSPR_ATTR_DISPOFF); HuTHPClose(); - for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 0x1E; var_r31++, var_f31 -= 1.0f / 30.0f) { + for (var_r31 = 0, var_f31 = 1.0f; var_r31 < 30; var_r31++, var_f31 -= 1.0f / 30.0f) { HuSprTPLvlSet(staffLogoGroup[1], 0, var_f31); HuPrcVSleep(); } - HuSprAttrSet(staffLogoGroup[1], 0, 4); - HuPrcSleep(0x78); - HuSprAttrReset(staffLogoGroup[2], 0, 4); + HuSprAttrSet(staffLogoGroup[1], 0, HUSPR_ATTR_DISPOFF); + HuPrcSleep(120); + HuSprAttrReset(staffLogoGroup[2], 0, HUSPR_ATTR_DISPOFF); HuSprGrpPosSet(staffLogoGroup[2], 280.0f, 240.0f); - for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 0x1E; var_r31++, var_f31 += 1.0f / 30.0f) { + for (var_r31 = 0, var_f31 = 0.0f; var_r31 < 30; var_r31++, var_f31 += 1.0f / 30.0f) { HuSprTPLvlSet(staffLogoGroup[2], 0, var_f31); HuPrcVSleep(); } @@ -585,7 +576,7 @@ static void MainProc(void) while (TRUE) { for (var_r31 = 0; var_r31 < 4; var_r31++) { - if ((HuPadBtn[var_r31] & PAD_BUTTON_MENU) != 0) { + if (HuPadBtn[var_r31] & PAD_BUTTON_START) { break; } } @@ -594,9 +585,9 @@ static void MainProc(void) } HuPrcVSleep(); } - WipeCreate(2, 0, 0x3C); - HuAudFadeOut(0x3E8); - HuPrcSleep(0x3C); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudFadeOut(1000); + HuPrcSleep(60); MGSeqKillAll(); omOvlReturnEx(1, 1); From f9636fe567e3c69718acb9401d55cd02870ee96e Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sun, 5 May 2024 00:47:51 -0700 Subject: [PATCH 11/22] Matched most of REL/m402 + applying ext_math macros --- config/GMPE01_00/rels/m402Dll/symbols.txt | 398 ++--- include/game/chrman.h | 2 +- src/REL/m402Dll/main.c | 1966 +++++++++++++++++++++ src/REL/messDll/main.c | 32 +- src/game/board/boo.c | 54 +- src/game/board/boo_house.c | 12 +- src/game/board/char_wheel.c | 8 +- src/game/board/com.c | 4 +- src/game/board/item.c | 58 +- src/game/board/roll.c | 8 +- src/game/board/shop.c | 14 +- src/game/board/star.c | 6 +- src/game/window.c | 20 +- 13 files changed, 2277 insertions(+), 305 deletions(-) create mode 100755 src/REL/m402Dll/main.c diff --git a/config/GMPE01_00/rels/m402Dll/symbols.txt b/config/GMPE01_00/rels/m402Dll/symbols.txt index 5fa3679a..7976e2db 100644 --- a/config/GMPE01_00/rels/m402Dll/symbols.txt +++ b/config/GMPE01_00/rels/m402Dll/symbols.txt @@ -1,204 +1,204 @@ -fn_1_0 = .text:0x00000000; // type:function size:0x24 -fn_1_24 = .text:0x00000024; // type:function size:0x88 -fn_1_AC = .text:0x000000AC; // type:function size:0xA4 -fn_1_150 = .text:0x00000150; // type:function size:0x24 -fn_1_174 = .text:0x00000174; // type:function size:0x164 -fn_1_2D8 = .text:0x000002D8; // type:function size:0x13C -fn_1_414 = .text:0x00000414; // type:function size:0x58 -fn_1_46C = .text:0x0000046C; // type:function size:0x114 -fn_1_580 = .text:0x00000580; // type:function size:0x218 -fn_1_798 = .text:0x00000798; // type:function size:0x254 -fn_1_9EC = .text:0x000009EC; // type:function size:0x54 -fn_1_A40 = .text:0x00000A40; // type:function size:0x10C -fn_1_B4C = .text:0x00000B4C; // type:function size:0x6A8 -fn_1_11F4 = .text:0x000011F4; // type:function size:0x15C -fn_1_1350 = .text:0x00001350; // type:function size:0x8C -fn_1_13DC = .text:0x000013DC; // type:function size:0x334 -fn_1_1710 = .text:0x00001710; // type:function size:0x350 -fn_1_1A60 = .text:0x00001A60; // type:function size:0x2B8 -fn_1_1D18 = .text:0x00001D18; // type:function size:0x58 -fn_1_1D70 = .text:0x00001D70; // type:function size:0xB0 -fn_1_1E20 = .text:0x00001E20; // type:function size:0x104 -fn_1_1F24 = .text:0x00001F24; // type:function size:0x34 -fn_1_1F58 = .text:0x00001F58; // type:function size:0x6C -fn_1_1FC4 = .text:0x00001FC4; // type:function size:0x3F0 +fn_1_0 = .text:0x00000000; // type:function size:0x24 scope:local +fn_1_24 = .text:0x00000024; // type:function size:0x88 scope:local +fn_1_AC = .text:0x000000AC; // type:function size:0xA4 scope:local +fn_1_150 = .text:0x00000150; // type:function size:0x24 scope:local +fn_1_174 = .text:0x00000174; // type:function size:0x164 scope:local +fn_1_2D8 = .text:0x000002D8; // type:function size:0x13C scope:local +fn_1_414 = .text:0x00000414; // type:function size:0x58 scope:local +fn_1_46C = .text:0x0000046C; // type:function size:0x114 scope:local +fn_1_580 = .text:0x00000580; // type:function size:0x218 scope:local +fn_1_798 = .text:0x00000798; // type:function size:0x254 scope:local +fn_1_9EC = .text:0x000009EC; // type:function size:0x54 scope:local +fn_1_A40 = .text:0x00000A40; // type:function size:0x10C scope:local +fn_1_B4C = .text:0x00000B4C; // type:function size:0x6A8 scope:local +fn_1_11F4 = .text:0x000011F4; // type:function size:0x15C scope:local +fn_1_1350 = .text:0x00001350; // type:function size:0x8C scope:local +fn_1_13DC = .text:0x000013DC; // type:function size:0x334 scope:local +fn_1_1710 = .text:0x00001710; // type:function size:0x350 scope:local +fn_1_1A60 = .text:0x00001A60; // type:function size:0x2B8 scope:local +fn_1_1D18 = .text:0x00001D18; // type:function size:0x58 scope:local +fn_1_1D70 = .text:0x00001D70; // type:function size:0xB0 scope:local +fn_1_1E20 = .text:0x00001E20; // type:function size:0x104 scope:local +fn_1_1F24 = .text:0x00001F24; // type:function size:0x34 scope:local +fn_1_1F58 = .text:0x00001F58; // type:function size:0x6C scope:local +fn_1_1FC4 = .text:0x00001FC4; // type:function size:0x3F0 scope:local _prolog = .text:0x000023B4; // type:function size:0x54 scope:global _epilog = .text:0x00002408; // type:function size:0x4C scope:global -fn_1_2454 = .text:0x00002454; // type:function size:0x2F0 -fn_1_2744 = .text:0x00002744; // type:function size:0x64 -fn_1_27A8 = .text:0x000027A8; // type:function size:0xD8 -fn_1_2880 = .text:0x00002880; // type:function size:0xF0 -fn_1_2970 = .text:0x00002970; // type:function size:0x1C0 -fn_1_2B30 = .text:0x00002B30; // type:function size:0x28C -fn_1_2DBC = .text:0x00002DBC; // type:function size:0x380 -fn_1_313C = .text:0x0000313C; // type:function size:0xC8 -fn_1_3204 = .text:0x00003204; // type:function size:0xF8C -fn_1_4190 = .text:0x00004190; // type:function size:0xF4 -fn_1_4284 = .text:0x00004284; // type:function size:0x154 -fn_1_43D8 = .text:0x000043D8; // type:function size:0x1FF0 -fn_1_63C8 = .text:0x000063C8; // type:function size:0x490 -fn_1_6858 = .text:0x00006858; // type:function size:0x4 -fn_1_685C = .text:0x0000685C; // type:function size:0x258 -fn_1_6AB4 = .text:0x00006AB4; // type:function size:0x3B0 -fn_1_6E64 = .text:0x00006E64; // type:function size:0x1BC -fn_1_7020 = .text:0x00007020; // type:function size:0xC4 -fn_1_70E4 = .text:0x000070E4; // type:function size:0x86C -fn_1_7950 = .text:0x00007950; // type:function size:0x19C -fn_1_7AEC = .text:0x00007AEC; // type:function size:0x25C -fn_1_7D48 = .text:0x00007D48; // type:function size:0x4 -fn_1_7D4C = .text:0x00007D4C; // type:function size:0x134 -fn_1_7E80 = .text:0x00007E80; // type:function size:0x4 -fn_1_7E84 = .text:0x00007E84; // type:function size:0x1C4 -fn_1_8048 = .text:0x00008048; // type:function size:0x1D0 -fn_1_8218 = .text:0x00008218; // type:function size:0xE40 -fn_1_9058 = .text:0x00009058; // type:function size:0x1EC -fn_1_9244 = .text:0x00009244; // type:function size:0x8B0 -fn_1_9AF4 = .text:0x00009AF4; // type:function size:0xD0 +fn_1_2454 = .text:0x00002454; // type:function size:0x2F0 scope:local +fn_1_2744 = .text:0x00002744; // type:function size:0x64 scope:local +fn_1_27A8 = .text:0x000027A8; // type:function size:0xD8 scope:local +fn_1_2880 = .text:0x00002880; // type:function size:0xF0 scope:local +fn_1_2970 = .text:0x00002970; // type:function size:0x1C0 scope:local +fn_1_2B30 = .text:0x00002B30; // type:function size:0x28C scope:local +fn_1_2DBC = .text:0x00002DBC; // type:function size:0x380 scope:local +fn_1_313C = .text:0x0000313C; // type:function size:0xC8 scope:local +fn_1_3204 = .text:0x00003204; // type:function size:0xF8C scope:local +fn_1_4190 = .text:0x00004190; // type:function size:0xF4 scope:local +fn_1_4284 = .text:0x00004284; // type:function size:0x154 scope:local +fn_1_43D8 = .text:0x000043D8; // type:function size:0x1FF0 scope:local +fn_1_63C8 = .text:0x000063C8; // type:function size:0x490 scope:local +fn_1_6858 = .text:0x00006858; // type:function size:0x4 scope:local +fn_1_685C = .text:0x0000685C; // type:function size:0x258 scope:local +fn_1_6AB4 = .text:0x00006AB4; // type:function size:0x3B0 scope:local +fn_1_6E64 = .text:0x00006E64; // type:function size:0x1BC scope:local +fn_1_7020 = .text:0x00007020; // type:function size:0xC4 scope:local +fn_1_70E4 = .text:0x000070E4; // type:function size:0x86C scope:local +fn_1_7950 = .text:0x00007950; // type:function size:0x19C scope:local +fn_1_7AEC = .text:0x00007AEC; // type:function size:0x25C scope:local +fn_1_7D48 = .text:0x00007D48; // type:function size:0x4 scope:local +fn_1_7D4C = .text:0x00007D4C; // type:function size:0x134 scope:local +fn_1_7E80 = .text:0x00007E80; // type:function size:0x4 scope:local +fn_1_7E84 = .text:0x00007E84; // type:function size:0x1C4 scope:local +fn_1_8048 = .text:0x00008048; // type:function size:0x1D0 scope:local +fn_1_8218 = .text:0x00008218; // type:function size:0xE40 scope:local +fn_1_9058 = .text:0x00009058; // type:function size:0x1EC scope:local +ModuleProlog = .text:0x00009244; // type:function size:0x8B0 +fn_1_9AF4 = .text:0x00009AF4; // type:function size:0xD0 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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 data:double -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 data:double -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 data:double -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 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_data_0 = .data:0x00000000; // type:object size:0x10 -lbl_1_data_10 = .data:0x00000010; // type:object size:0xC data:4byte -lbl_1_data_1C = .data:0x0000001C; // type:object size:0xC -lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:4byte -lbl_1_data_34 = .data:0x00000034; // type:object size:0xC -lbl_1_data_40 = .data:0x00000040; // type:object size:0xC -lbl_1_data_4C = .data:0x0000004C; // type:object size:0x14 -lbl_1_data_60 = .data:0x00000060; // type:object size:0xC -lbl_1_data_6C = .data:0x0000006C; // type:object size:0xC -lbl_1_data_78 = .data:0x00000078; // type:object size:0x160 -lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x10 -lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0xC -lbl_1_data_1F4 = .data:0x000001F4; // type:object size:0x4 data:4byte -lbl_1_data_1F8 = .data:0x000001F8; // type:object size:0x8 -lbl_1_data_200 = .data:0x00000200; // type:object size:0x18 -lbl_1_data_218 = .data:0x00000218; // type:object size:0x1C -lbl_1_data_234 = .data:0x00000234; // type:object size:0x190 -lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x14 -lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x1A data:string -lbl_1_data_3F2 = .data:0x000003F2; // type:object size:0x9 data:string -lbl_1_data_3FB = .data:0x000003FB; // type:object size:0x6 data:string -lbl_1_data_401 = .data:0x00000401; // type:object size:0x10 data:string -lbl_1_data_411 = .data:0x00000411; // type:object size:0x1F +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 scope:local data:double +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 scope:local data:double +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 scope:local data:double +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +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 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_data_0 = .data:0x00000000; // type:object size:0x10 scope:local data:2byte +lbl_1_data_10 = .data:0x00000010; // type:object size:0xC scope:local data:float +lbl_1_data_1C = .data:0x0000001C; // type:object size:0xC scope:local data:float +lbl_1_data_28 = .data:0x00000028; // type:object size:0xC scope:local data:float +lbl_1_data_34 = .data:0x00000034; // type:object size:0xC scope:local data:float +lbl_1_data_40 = .data:0x00000040; // type:object size:0xC scope:local data:float +lbl_1_data_4C = .data:0x0000004C; // type:object size:0x4 scope:local +lbl_1_data_60 = .data:0x00000060; // type:object size:0xC scope:local data:float +lbl_1_data_6C = .data:0x0000006C; // type:object size:0xC scope:local data:float +lbl_1_data_78 = .data:0x00000078; // type:object size:0x160 scope:local +lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x10 scope:local +lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0xC scope:local +lbl_1_data_1F4 = .data:0x000001F4; // type:object size:0x4 scope:local data:4byte +lbl_1_data_1F8 = .data:0x000001F8; // type:object size:0x8 scope:local +lbl_1_data_200 = .data:0x00000200; // type:object size:0x18 scope:local data:float +lbl_1_data_218 = .data:0x00000218; // type:object size:0x1C scope:local +lbl_1_data_234 = .data:0x00000234; // type:object size:0x190 scope:local +lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x14 scope:local +lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x1A scope:local data:string +lbl_1_data_3F2 = .data:0x000003F2; // type:object size:0x9 scope:local data:string +lbl_1_data_3FB = .data:0x000003FB; // type:object size:0x6 scope:local data:string +lbl_1_data_401 = .data:0x00000401; // type:object size:0x10 scope:local data:string +lbl_1_data_411 = .data:0x00000411; // type:object size:0x1D scope:local data:string jumptable_1_data_430 = .data:0x00000430; // type:object size:0x40 scope:local -lbl_1_data_470 = .data:0x00000470; // type:object size:0x17 data:string -lbl_1_data_487 = .data:0x00000487; // type:object size:0x1B data:string -lbl_1_data_4A2 = .data:0x000004A2; // type:object size:0x24 data:string -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:float -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:float -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:float -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte -lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 data:2byte -lbl_1_bss_16 = .bss:0x00000016; // type:object size:0xE -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 data:2byte -lbl_1_bss_26 = .bss:0x00000026; // type:object size:0x2 data:2byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:float -lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 data:float -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:float -lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x4 data:float -lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x8 data:float -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 data:4byte -lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x4 data:4byte -lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 data:4byte -lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 data:4byte -lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x4 data:4byte -lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte -lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte -lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x100 -lbl_1_bss_15C = .bss:0x0000015C; // type:object size:0x40 data:4byte -lbl_1_bss_19C = .bss:0x0000019C; // type:object size:0x4 data:float -lbl_1_bss_1A0 = .bss:0x000001A0; // type:object size:0x4 data:4byte -lbl_1_bss_1A4 = .bss:0x000001A4; // type:object size:0x4 data:4byte -lbl_1_bss_1A8 = .bss:0x000001A8; // type:object size:0x2 data:2byte -lbl_1_bss_1AA = .bss:0x000001AA; // type:object size:0x2 data:2byte -lbl_1_bss_1AC = .bss:0x000001AC; // type:object size:0x4 data:4byte -lbl_1_bss_1B0 = .bss:0x000001B0; // type:object size:0x4 data:4byte -lbl_1_bss_1B4 = .bss:0x000001B4; // type:object size:0x4 data:4byte -lbl_1_bss_1B8 = .bss:0x000001B8; // type:object size:0xC data:4byte -lbl_1_bss_1C4 = .bss:0x000001C4; // type:object size:0xC data:4byte -lbl_1_bss_1D0 = .bss:0x000001D0; // type:object size:0xC data:4byte -lbl_1_bss_1DC = .bss:0x000001DC; // type:object size:0xC data:4byte -lbl_1_bss_1E8 = .bss:0x000001E8; // type:object size:0x4 data:4byte -lbl_1_bss_1EC = .bss:0x000001EC; // type:object size:0x18 data:4byte -lbl_1_bss_204 = .bss:0x00000204; // type:object size:0xC data:4byte +lbl_1_data_470 = .data:0x00000470; // type:object size:0x17 scope:local data:string +lbl_1_data_487 = .data:0x00000487; // type:object size:0x1B scope:local data:string +lbl_1_data_4A2 = .data:0x000004A2; // type:object size:0x24 scope:local data:string +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:float +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:float +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:float +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_16 = .bss:0x00000016; // type:object size:0xE scope:local +lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_26 = .bss:0x00000026; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x4 scope:local data:4byte +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 +lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x100 scope:local +lbl_1_bss_15C = .bss:0x0000015C; // type:object size:0x40 scope:local data:4byte +lbl_1_bss_19C = .bss:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_bss_1A0 = .bss:0x000001A0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1A4 = .bss:0x000001A4; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1A8 = .bss:0x000001A8; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_1AA = .bss:0x000001AA; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_1AC = .bss:0x000001AC; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1B0 = .bss:0x000001B0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1B4 = .bss:0x000001B4; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1B8 = .bss:0x000001B8; // type:object size:0xC scope:local data:4byte +lbl_1_bss_1C4 = .bss:0x000001C4; // type:object size:0xC scope:local data:4byte +lbl_1_bss_1D0 = .bss:0x000001D0; // type:object size:0xC scope:local data:4byte +lbl_1_bss_1DC = .bss:0x000001DC; // type:object size:0xC scope:local data:4byte +lbl_1_bss_1E8 = .bss:0x000001E8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1EC = .bss:0x000001EC; // type:object size:0x18 scope:local data:4byte +lbl_1_bss_204 = .bss:0x00000204; // type:object size:0xC scope:local data:4byte diff --git a/include/game/chrman.h b/include/game/chrman.h index 0dd38dc2..d305e3a6 100755 --- a/include/game/chrman.h +++ b/include/game/chrman.h @@ -10,7 +10,7 @@ void CharARAMClose(s16 character); void CharKill(s16 arg0); void CharKillAll(void); s16 CharModelCreate(s16 character, s16 lod); -s16 CharModelMotionCreate(s16 character, s32 arg1); +s16 CharModelMotionCreate(s16 character, s32 data_num); void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2); void CharModelMotionKill(s16 character, u32 motion); void CharModelMotionDataClose(s16 character); diff --git a/src/REL/m402Dll/main.c b/src/REL/m402Dll/main.c new file mode 100755 index 00000000..1d1995e8 --- /dev/null +++ b/src/REL/m402Dll/main.c @@ -0,0 +1,1966 @@ +#include "REL/executor.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/flag.h" +#include "game/frand.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/wipe.h" + +#include "dolphin.h" +#include "ext_math.h" +#include "rel_sqrt_consts.h" + +#undef ABS +#define ABS(x) ((0 > (x)) ? -(x) : (x)) + +typedef struct unk_bss_204_struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ struct unk_bss_204_struct *unk04; + /* 0x08 */ struct unk_bss_204_struct *unk08; +} UnkBss204Struct; // Size 0xC + +typedef struct unk_bss_1ec_struct { + /* 0x00 */ HsfanimStruct00 *unk00; + /* 0x04 */ s32 *unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ struct unk_bss_1ec_struct *unk10; + /* 0x14 */ struct unk_bss_1ec_struct *unk14; +} UnkBss1ECStruct; // Size 0x18 + +typedef struct { + /* 0x00 */ u32 unk00; + /* 0x04 */ s16 unk04; + /* 0x06 */ char unk06[2]; // padding? +} UnkBss5CStruct; // Size 8 + +typedef struct { + /* 0x00 */ float unk00; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ float unk2C; + /* 0x30 */ float unk30; + /* 0x34 */ s32 unk34; + /* 0x38 */ s32 unk38; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s32 unk48; + /* 0x4C */ s32 unk4C; + /* 0x50 */ s32 unk50; + /* 0x54 */ s32 unk54; + /* 0x58 */ s32 unk58; + /* 0x5C */ s32 unk5C; + /* 0x60 */ s32 unk60; +} UnkFn27A8Struct; // Size 0x64 + +typedef struct { + /* 0x00 */ float unk00; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ s32 unk10; +} UnkData234Struct; // Size 0x14 + +typedef struct { + /* 0x00 */ float unk00; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ s32 unk18; +} UnkFn6AB4Struct; // Size 0x1C + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ float unk0C; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ Vec unk24; + /* 0x30 */ float unk30; + /* 0x34 */ float unk34; + /* 0x38 */ s32 unk38; +} UnkFn70E4Struct; // Size 0x3C + +static void fn_1_0(void); +static void fn_1_24(u16 arg0, s16 arg1); +static s16 fn_1_AC(s16 arg0); +static void fn_1_150(void); +static void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6); +static void fn_1_2D8(void); +static void fn_1_414(void); +static s16 fn_1_46C(s32 arg0); +static void fn_1_580(s32 *arg0, s32 arg1, s32 arg2); +static void fn_1_798(s32 arg0); +static void fn_1_9EC(void); +static void fn_1_A40(void); +static void fn_1_B4C(float arg0, s32 arg1); +static void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3); +static void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2); +static s32 fn_1_13DC(float arg0, Vec *arg1); +static void fn_1_1710(float arg0, Vec *arg1); +static void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2); +static void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2); +static void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3); +static float fn_1_1E20(float arg0, float arg1, float arg2); +static void fn_1_1F24(s32 arg0); +static void fn_1_1F58(s32 arg0); +static void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3); +static void fn_1_2454(void); +static void fn_1_2744(s16 arg0, GXColor *arg1); +static u16 fn_1_27A8(UnkFn27A8Struct *arg0); +static void fn_1_2880(UnkFn27A8Struct *arg0, omObjData *arg1); +static void fn_1_2970(UnkFn27A8Struct *arg0, omObjData *arg1, u8 arg2); +static void fn_1_2B30(UnkFn27A8Struct *arg0, omObjData *arg1, omObjData *arg2); +static u8 fn_1_2DBC(UnkFn27A8Struct *arg0, omObjData *arg1); +static void fn_1_313C(UnkFn27A8Struct *arg0, omObjData *arg1); +static void fn_1_3204(omObjData *arg0); +static void fn_1_4190(float arg0); +static void fn_1_4284(float arg0); +static void fn_1_43D8(omObjData *arg0); +static void fn_1_63C8(omObjData *arg0); +static void fn_1_6858(omObjData *arg0); +static void fn_1_685C(omObjData *arg0); +static void fn_1_6AB4(omObjData *arg0); +static void fn_1_6E64(omObjData *arg0); +static void fn_1_7020(omObjData *arg0); +static void fn_1_70E4(omObjData *arg0); +static void fn_1_7950(omObjData *arg0); +static void fn_1_7AEC(s32 arg0, Vec *arg1, Vec *arg2); +static void fn_1_7D48(omObjData *arg0); +static void fn_1_7D4C(omObjData *arg0); +static void fn_1_7E80(omObjData *arg0); +static void fn_1_7E84(omObjData *arg0); +static void fn_1_8048(void); +static void fn_1_8218(omObjData *arg0); +static void fn_1_9058(omObjData *arg0); +static void fn_1_9AF4(omObjData *arg0); + +static UnkBss204Struct lbl_1_bss_204; +static UnkBss1ECStruct lbl_1_bss_1EC; +static Process *lbl_1_bss_1E8; +static Vec lbl_1_bss_1DC; +static Vec lbl_1_bss_1D0; +static Vec lbl_1_bss_1C4; +static Vec lbl_1_bss_1B8; +static u32 lbl_1_bss_1B4; +static s32 lbl_1_bss_1B0; +static s32 lbl_1_bss_1AC; +static s16 lbl_1_bss_1AA; +static s16 lbl_1_bss_1A8; +static s32 lbl_1_bss_1A4; +static s32 lbl_1_bss_1A0; +static float lbl_1_bss_19C; +static s32 lbl_1_bss_15C[16]; +static UnkBss5CStruct lbl_1_bss_5C[32]; +static omObjData *lbl_1_bss_58; +static omObjData **lbl_1_bss_54; +static omObjData **lbl_1_bss_50; +static omObjData **lbl_1_bss_4C; +static omObjData **lbl_1_bss_48; +static omObjData **lbl_1_bss_44; +static omObjData **lbl_1_bss_40; +static u8 lbl_1_bss_3C_unused[4]; +static float lbl_1_bss_38; +static float lbl_1_bss_34; +static float lbl_1_bss_30; +static float lbl_1_bss_2C; +static float lbl_1_bss_28; +static s16 lbl_1_bss_26; +static s16 lbl_1_bss_24; +static s16 lbl_1_bss_16[7]; +static s16 lbl_1_bss_14; +static s32 lbl_1_bss_10; +static float lbl_1_bss_C; +static float lbl_1_bss_8; +static float lbl_1_bss_4; +static u8 lbl_1_bss_0[4]; + +static s16 lbl_1_data_0[] = { + 0, 1, 2, 3, 4, 5, 6, 7 +}; + +static Vec lbl_1_data_10 = { 0.0f, 2500.0f, 2200.0f }; +static Vec lbl_1_data_1C = { 0.0f, 1.0f, 0.0f }; +static Vec lbl_1_data_28 = { 0.0f, 388.0f, 0.0f }; +static Vec lbl_1_data_34 = { 0.0f, 2000.0f, 1000.0f }; +static Vec lbl_1_data_40 = { 0.0f, -2.0f, -1.0f }; +static GXColor lbl_1_data_4C = { 0xFF, 0xFF, 0xFF, 0xFF }; + +static Vec lbl_1_data_50_unused = { 0.0f, -1.0f, 0.0f }; +static u8 lbl_1_data_5C_unused[] = { 0xFF, 0xFF, 0xFF, 0xFF }; + +static Vec lbl_1_data_60 = { 0.0f, 4000.0f, 1000.0f }; +static Vec lbl_1_data_6C = { 0.0f, 0.0f, 0.0f }; + +static s32 lbl_1_data_78[8][11] = { + { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 2), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 16), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 62), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 8), + DATA_MAKE_NUM(DATADIR_M402, 0), + DATA_MAKE_NUM(DATADIR_M402, 24), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 117), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 2), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 17), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 62), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 9), + DATA_MAKE_NUM(DATADIR_M402, 1), + DATA_MAKE_NUM(DATADIR_M402, 25), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 117), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 2), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 18), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 62), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 10), + DATA_MAKE_NUM(DATADIR_M402, 2), + DATA_MAKE_NUM(DATADIR_M402, 26), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 117), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 2), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 19), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 62), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 11), + DATA_MAKE_NUM(DATADIR_M402, 3), + DATA_MAKE_NUM(DATADIR_M402, 27), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 117), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 2), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 20), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 62), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 12), + DATA_MAKE_NUM(DATADIR_M402, 4), + DATA_MAKE_NUM(DATADIR_M402, 28), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 117), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 2), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 21), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 62), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 13), + DATA_MAKE_NUM(DATADIR_M402, 5), + DATA_MAKE_NUM(DATADIR_M402, 29), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 117), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 2), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 22), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 62), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 14), + DATA_MAKE_NUM(DATADIR_M402, 6), + DATA_MAKE_NUM(DATADIR_M402, 30), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 117), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 76) + }, + { + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 2), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_M402, 23), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 62), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 3), + DATA_MAKE_NUM(DATADIR_M402, 15), + DATA_MAKE_NUM(DATADIR_M402, 7), + DATA_MAKE_NUM(DATADIR_M402, 31), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 117), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 76) + } +}; + +static s32 lbl_1_data_1D8[] = { + DATA_MAKE_NUM(DATADIR_M402, 38), + DATA_MAKE_NUM(DATADIR_M402, 40), + DATA_MAKE_NUM(DATADIR_M402, 37), + DATA_MAKE_NUM(DATADIR_M402, 39) +}; + +static s32 lbl_1_data_1E8[] = { + DATA_MAKE_NUM(DATADIR_M402, 41), + DATA_MAKE_NUM(DATADIR_M402, 42), + DATA_MAKE_NUM(DATADIR_M402, 43) +}; + +static s32 lbl_1_data_1F4 = DATA_MAKE_NUM(DATADIR_M402, 44); + +static s32 lbl_1_data_1F8[] = { + DATA_MAKE_NUM(DATADIR_M402, 45), + DATA_MAKE_NUM(DATADIR_M402, 46) +}; + +static Vec lbl_1_data_200[] = { + { 450.0f, 290.0f, 0.0f }, + { -450.0f, 290.0f, 0.0f } +}; + +static s32 lbl_1_data_218[] = { + DATA_MAKE_NUM(DATADIR_M402, 48), + DATA_MAKE_NUM(DATADIR_M402, 50), + DATA_MAKE_NUM(DATADIR_M402, 47), + DATA_MAKE_NUM(DATADIR_M402, 49), + DATA_MAKE_NUM(DATADIR_M402, 51), + DATA_MAKE_NUM(DATADIR_M402, 52), + DATA_MAKE_NUM(DATADIR_M402, 53) +}; + +static UnkData234Struct lbl_1_data_234[] = { + { 0.0f, 0.0f, 0.0f, 0.0f, -1 }, + { 2.0f, 2.0f, 0.1f, 0.125f, 0x514 }, + { 2.0f, 2.0f, 0.2f, 0.25f, -1 }, + { 3.0f, 4.0f, 0.3f, 0.35f, 0x515 }, + { 3.0f, 4.0f, 0.4f, 0.45f, -1 }, + { 3.0f, 6.0f, 0.45f, 0.5125f, 0x516 }, + { 3.0f, 6.0f, 0.5f, 0.575f, -1 }, + { 3.0f, 6.0f, 0.55f, 0.6375f, -1 }, + { 3.0f, 6.0f, 0.6f, 0.7f, -1 }, + { 4.0f, 8.0f, 0.65f, 0.75f, 0x517 }, + { 4.0f, 8.0f, 0.7f, 0.8f, -1 }, + { 4.0f, 8.0f, 0.75f, 0.85f, -1 }, + { 4.0f, 8.0f, 0.8f, 0.9f, -1 }, + { 4.0f, 10.0f, 0.83f, 0.9166f, 0x518 }, + { 4.0f, 10.0f, 0.86f, 0.9333f, -1 }, + { 4.0f, 10.0f, 0.9f, 0.95f, -1 }, + { 4.0f, 10.0f, 0.93f, 0.9666f, -1 }, + { 4.0f, 10.0f, 0.96f, 0.9833f, -1 }, + { 4.0f, 10.0f, 1.0f, 1.0f, -1 }, + { 1.0f, 10.0f, 1.0f, 1.0f, -1 } +}; + +static s32 lbl_1_data_3C4[] = { + 0x00000514, + 0x00000515, + 0x00000516, + 0x00000517, + 0x00000518 +}; + +static void fn_1_0(void) { + lbl_1_bss_204.unk04 = NULL; + lbl_1_bss_204.unk08 = NULL; +} + +static void fn_1_24(u16 arg0, s16 arg1) { + UnkBss204Struct *temp_r31; + UnkBss204Struct *temp_r30; + UnkBss204Struct *temp_r29; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk02 = arg1; + temp_r30 = &lbl_1_bss_204; + temp_r29 = temp_r30->unk08; + temp_r30->unk08 = temp_r31; + if (NULL != temp_r29) { + temp_r29->unk04 = temp_r31; + } + temp_r31->unk04 = temp_r30; + temp_r31->unk08 = temp_r29; +} + +static s16 fn_1_AC(s16 arg0) { + UnkBss204Struct *var_r31; + UnkBss204Struct *temp_r29; + UnkBss204Struct *temp_r30; + s16 temp_r28; + + var_r31 = lbl_1_bss_204.unk08; + while (NULL != var_r31) { + if (arg0 == var_r31->unk00) { + temp_r28 = var_r31->unk02; + temp_r29 = var_r31->unk04; + temp_r30 = var_r31->unk08; + temp_r29->unk08 = temp_r30; + if (NULL != temp_r30) { + temp_r30->unk04 = temp_r29; + } + HuMemDirectFree(var_r31); + return temp_r28; + } + var_r31 = var_r31->unk08; + } + return -1; +} + +static void fn_1_150(void) { + lbl_1_bss_1EC.unk10 = NULL; + lbl_1_bss_1EC.unk14 = NULL; +} + +static void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6) { + UnkBss1ECStruct *temp_r27; + UnkBss1ECStruct *var_r31; + UnkBss1ECStruct *temp_r28; + s32 i; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r31), MEMORY_DEFAULT_NUM); + var_r31->unk00 = arg1; + var_r31->unk08 = arg3; + var_r31->unk0C = arg4; + var_r31->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, arg4 * sizeof(*var_r31->unk04), MEMORY_DEFAULT_NUM); + for (i = 0; i < arg4; i++, arg5++) { + var_r31->unk04[i] = Hu3DParManLink(arg0, arg1); + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrReset(var_r31->unk04[i], 1); + Hu3DParManPosSet(var_r31->unk04[i], arg5->x, arg5->y, arg5->z); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg6); + Hu3DModelLayerSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg2); + } + } + temp_r28 = &lbl_1_bss_1EC; + temp_r27 = temp_r28->unk14; + temp_r28->unk14 = var_r31; + if (NULL != temp_r27) { + temp_r27->unk10 = var_r31; + } + var_r31->unk10 = temp_r28; + var_r31->unk14 = temp_r27; +} + +static void fn_1_2D8(void) { + UnkBss1ECStruct *var_r31; + UnkBss1ECStruct *temp_r28; + UnkBss1ECStruct *temp_r29; + s32 i; + + var_r31 = lbl_1_bss_1EC.unk14; + while (NULL != var_r31) { + var_r31->unk08--; + if (var_r31->unk08 == 0) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrSet(var_r31->unk04[i], 1); + } + } + } + temp_r28 = var_r31->unk10; + temp_r29 = var_r31->unk14; + if (-var_r31->unk00->unk00 > var_r31->unk08) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManKill(var_r31->unk04[i]); + } + } + temp_r28->unk14 = temp_r29; + if (NULL != temp_r29) { + temp_r29->unk10 = temp_r28; + } + HuMemDirectFree(var_r31->unk04); + HuMemDirectFree(var_r31); + } + var_r31 = temp_r29; + } +} + +static void fn_1_414(void) { + s32 i; + + for (i = 0; i < 32; i++) { + lbl_1_bss_5C[i].unk00 = 0; + lbl_1_bss_5C[i].unk04 = -1; + } +} + +static s16 fn_1_46C(s32 arg0) { + s32 i; + + for (i = 0; i < 32; i++) { + if (arg0 == lbl_1_bss_5C[i].unk00) { + return Hu3DModelLink(lbl_1_bss_5C[i].unk04); + } + } + for (i = 0; i < 32; i++) { + if (lbl_1_bss_5C[i].unk00 == 0) { + lbl_1_bss_5C[i].unk00 = arg0; + lbl_1_bss_5C[i].unk04 = Hu3DModelCreateFile(arg0); + return lbl_1_bss_5C[i].unk04; + } + } + return Hu3DModelCreateFile(arg0); +} + +static void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) { + s32 var_r30; + + espBankSet(arg0[arg1 + 1], 10); + espBankSet(arg0[arg1 + 4], 11); + if (36000 <= arg2) { // TODO: not matching. + arg2 = 35999; + } + var_r30 = arg2 / 3600; + arg2 -= var_r30 * 3600; + if (var_r30 > 9) { + var_r30 = 9; + } + espBankSet(arg0[arg1], var_r30); + var_r30 = arg2 / 60; + arg2 -= var_r30 * 60; + espBankSet(arg0[arg1 + 2], var_r30 / 10); + espBankSet(arg0[arg1 + 3], var_r30 % 10); + var_r30 = 101.5f * arg2 / 60.0f; + espBankSet(arg0[arg1 + 5], var_r30 / 10); + espBankSet(arg0[arg1 + 6], var_r30 % 10); +} + +static void fn_1_798(s32 arg0) { + lbl_1_bss_19C = 0.0f; + lbl_1_bss_1AC = lbl_1_bss_1B0; + GWMGRecordSet(arg0, lbl_1_bss_1AC); + fn_1_580(lbl_1_bss_15C, 7, lbl_1_bss_1B0); +} + +static void fn_1_9EC(void) { + s32 i; + + for (i = 0; i < 16; i++) { + espDispOn(lbl_1_bss_15C[i]); + } +} + +static void fn_1_A40(void) { + float temp_f31; + s32 i; + + if (0.0f <= lbl_1_bss_19C) { + lbl_1_bss_19C += 16.0f; + temp_f31 = 1.0 + 0.2f * sind(lbl_1_bss_19C); + for (i = 7; i <= 14; i++) { + espScaleSet(lbl_1_bss_15C[i], temp_f31, temp_f31); + } + } +} + +static void fn_1_B4C(float arg0, s32 arg1) { + float temp_f30; + float temp_f31; + s32 i; + + temp_f31 = 288.0f; + temp_f30 = arg0; + lbl_1_bss_15C[15] = espEntry(arg1, 0, 0); + espTPLvlSet(lbl_1_bss_15C[15], 0.5f); + espColorSet(lbl_1_bss_15C[15], 0, 0, 0); + espPosSet(lbl_1_bss_15C[15], temp_f31, temp_f30); + temp_f31 = 248.0f; + temp_f30 = arg0 - 8.0f; + lbl_1_bss_15C[14] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 55), 0, 0); + espPosSet(lbl_1_bss_15C[14], temp_f31 - 18.0f, temp_f30); + for (i = 7; i <= 13; i++) { + lbl_1_bss_15C[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 48), 0, 0); + espPosSet(lbl_1_bss_15C[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_15C, 7, lbl_1_bss_1AC); + temp_f31 = 248.0f; + temp_f30 = arg0 + 8.0f; + for (i = 0; i <= 6; i++) { + lbl_1_bss_15C[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 49), 0, 0); + espPosSet(lbl_1_bss_15C[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_15C, 0, 0); + for (i = 0; i < 16; i++) { + espDrawNoSet(lbl_1_bss_15C[i], 0); + espDispOff(lbl_1_bss_15C[i]); + espAttrSet(lbl_1_bss_15C[i], HUSPR_ATTR_NOANIM); + espPriSet(lbl_1_bss_15C[i], 0x80 + i); + } +} + +static void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3) { + float temp_f31; + + if (1.0f < arg0) { + arg0 = 1.0f; + } + temp_f31 = sind(90.0f * arg0) * sind(90.0f * arg0); + arg3->x = arg1->x + temp_f31 * (arg2->x - arg1->x); + arg3->y = arg1->y + temp_f31 * (arg2->y - arg1->y); + arg3->z = arg1->z + temp_f31 * (arg2->z - arg1->z); +} + +static void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2) { + Hu3DCameraPosSetV(1, arg0, arg1, arg2); + lbl_1_bss_1DC = *arg0; + lbl_1_bss_1C4 = *arg2; +} + +static s32 fn_1_13DC(float arg0, Vec *arg1) { + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_1DC, &lbl_1_bss_1D0, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_1C4, &lbl_1_bss_1B8, &spC); + Hu3DCameraPosSetV(1, &sp18, arg1, &spC); + if (1.0f <= arg0) { + return 1; + } else { + lbl_1_bss_1A0 = 1; + return 0; + } +} + +static void fn_1_1710(float arg0, Vec *arg1) { + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_1DC, &lbl_1_bss_1D0, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_1C4, &lbl_1_bss_1B8, &spC); + fn_1_1350(&sp18, arg1, &spC); + lbl_1_bss_1A0 = 1; +} + +static void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2) { + Mtx sp1C; + Vec sp10; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f31; + CameraData *temp_r31; + s32 i; + + for (i = 0; i < 16; i++) { + if (arg1 & (1 << i)) { + break; + } + } + temp_r31 = &Hu3DCamera[i]; + C_MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target); + PSMTXMultVec(sp1C, arg0, &sp10); + temp_f30 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * temp_r31->aspect; + temp_f29 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)); + temp_f28 = 0.9f * temp_r31->viewport_x; + temp_f31 = 0.9f * temp_r31->viewport_w; + arg2->x = temp_f31 / 2 + sp10.x * ((temp_f31 / 2) / -temp_f30) + temp_f28; + arg2->y = temp_r31->viewport_h / 2 + sp10.y * ((temp_r31->viewport_h / 2) / temp_f29) + temp_r31->viewport_y; + arg2->z = 0.0f; +} + +static void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2) { + Mtx sp10; + + Hu3DModelObjMtxGet(arg0, arg1, sp10); + arg2->x = sp10[0][3]; + arg2->y = sp10[1][3]; + arg2->z = sp10[2][3]; +} + +static void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3) { + Mtx spC; + ModelData *var_r30; + + var_r30 = &Hu3DData[arg0]; + Hu3DModelObjMtxGet(arg0, arg1, spC); + PSMTXConcat(var_r30->unk_F0, spC, spC); + if (NULL != arg3) { + PSMTXCopy(spC, arg3); + } + arg2->x = spC[0][3]; + arg2->y = spC[1][3]; + arg2->z = spC[2][3]; +} + +static float fn_1_1E20(float arg0, float arg1, float arg2) { + float var_f31; + float var_f30; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +static void fn_1_1F24(s32 arg0) { + lbl_1_bss_1A4 = HuAudSeqPlay(arg0); +} + +static void fn_1_1F58(s32 arg0) { + if (lbl_1_bss_1A4 >= 0) { + if (arg0 < 0) { + arg0 = 1000; + } + HuAudSeqFadeOut(lbl_1_bss_1A4, arg0); + } + lbl_1_bss_1A4 = -1; +} + +static inline float fn_1_1FC4InlineFunc(float arg0, float arg1, float arg2) { + float var_f29; + float var_f27; + + var_f29 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f29) { + var_f29 += 360.0f; + } + if (180.0f < var_f29) { + var_f29 -= 360.0f; + } + var_f27 = fmod(arg0 + var_f29 * arg2, 360.0); + if (0.0f > var_f27) { + var_f27 += 360.0f; + } + return var_f27; +} + +static void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) { + Vec sp18; + float var_f28; + s32 var_r30; + + sp18.x = 0.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + sp18.x = arg2 / 4.0f; + sp18.z = -(float) arg3 / 4.0f; + var_r30 = 0; + var_f28 = VECMagXZ(&sp18); + if (0.5f <= var_f28) { + if (10.0f <= var_f28) { + sp18.x /= var_f28; + sp18.z /= var_f28; + var_f28 = 10.0f; + sp18.x = 10.0f * sp18.x; + sp18.z = 10.0f * sp18.z; + } + *arg1 = fn_1_1FC4InlineFunc(*arg1, atan2d(sp18.x, sp18.z), 0.4f); + if (8.0f <= var_f28) { + var_r30 = 2; + } else { + var_r30 = 1; + } + } + PSVECAdd((Vec*) &arg0, &sp18, (Vec*) &arg0); +} + +#include "src/REL/executor.c" + +static void fn_1_2454(void) { + HuSysVWaitSet(1); + if (HuPadBtnDown[0] & 0x400) { + lbl_1_bss_1B0 = -1; + } + print8(24, 32, 1.5f, "%f COUNT:%d MES:%d WIN:%d", lbl_1_bss_38, lbl_1_bss_1B4, lbl_1_bss_1AA, lbl_1_bss_26); + print8(24, 48, 1.5f, "%f %f %f", lbl_1_bss_4, lbl_1_bss_C, lbl_1_bss_8); + print8(24, 64, 1.5f, "%x %x", HuMemHeapSizeGet(HEAP_SYSTEM) - HuMemUsedMallocSizeGet(HEAP_SYSTEM), HuMemHeapSizeGet(HEAP_DATA) - HuMemUsedMallocSizeGet(HEAP_DATA)); + lbl_1_bss_8 -= HuPadSubStkX[0] / 59.0f; + lbl_1_bss_C -= (HuPadSubStkY[0] / 59.0f) * 4.0f; + lbl_1_bss_4 -= (HuPadTrigL[0] / 150.0f) * 4.0f; + lbl_1_bss_4 += (HuPadTrigR[0] / 150.0f) * 4.0f; +} + +static void fn_1_2744(s16 arg0, GXColor *arg1) { + s16 var_r30; + + var_r30 = Hu3DLLightCreateV(arg0, &lbl_1_data_34, &lbl_1_data_40, arg1); + Hu3DLLightStaticSet(arg0, var_r30, 1); +} + +static u16 fn_1_27A8(UnkFn27A8Struct *arg0) { + u16 var_r30; + + var_r30 = 0; + if (frandmod(arg0->unk34) == 0) { + var_r30 = 0x100; + } + if (--arg0->unk38 < 0) { + arg0->unk34 -= frandmod(3); + if (arg0->unk34 < 2) { + arg0->unk34 = 2; + } + arg0->unk38 = (arg0->unk3C >> 1) + frandmod(arg0->unk3C); + } + if (var_r30 == 0) { + if (++arg0->unk40 > 60) { + arg0->unk40 = 0; + var_r30 = 0x100; + } + } else { + arg0->unk40 = 0; + } + return var_r30; +} + +static void fn_1_2880(UnkFn27A8Struct *arg0, omObjData *arg1) { + arg0->unk4C = 2016; + arg0->unk60 = 0; + arg0->unk2C = 0.0f; + arg0->unk30 = 0.0f; + arg0->unk1C = 670.0f; + arg0->unk20 = 0.0f; + arg0->unk24 = arg0->unk1C; + arg0->unk08 = 0.0f; + arg0->unk0C = 0.0f; + arg0->unk10 = arg0->unk0C; + Hu3DModelAttrReset(arg1->model[0], 0x40000002); + Hu3DModelAttrSet(arg1->model[0], 0x40000001); + Hu3DMotionSet(arg1->model[0], arg1->motion[0]); +} + +static void fn_1_2970(UnkFn27A8Struct *arg0, omObjData *arg1, u8 arg2) { + Vec sp18; + Vec spC; + float temp_f31; + s32 i; + + fn_1_1D18(arg1->model[0], "motionC-stretch", &sp18); + for (i = 0; i < 8; i++) { + temp_f31 = arg0->unk1C + 50.0f; + spC.x = 20.0f * frandf() - 10.0f; + spC.y = arg0->unk18; + spC.z = 20.0f; + if (arg2 != 0) { + spC.y += 180.0f; + spC.z = 10.0f; + } + temp_f31 = 3.0f * (30.0f * frandf() - 15.0f); + spC.y += temp_f31 + 10.0f * (0.0f > temp_f31 ? -1 : 1); + fn_1_7AEC(arg0->unk54, &sp18, &spC); + } +} + +static void fn_1_2B30(UnkFn27A8Struct *arg0, omObjData *arg1, omObjData *arg2) { + arg0->unk50 = 0; + arg0->unk20 = (770.0f - arg0->unk1C) / 18.0f; + arg0->unk0C = Hu3DMotionTimeGet(arg2->model[0]); + Hu3DMotionTimeSet(lbl_1_bss_54[arg0->unk54]->model[0], 0.0f); + Hu3DMotionSpeedSet(arg1->model[0], 1.0f); + Hu3DModelAttrReset(arg1->model[0], 0x40000003); + Hu3DMotionShiftSet(arg1->model[0], arg1->motion[7], 0.0f, 8.0f, 0); + fn_1_2970(arg0, arg2, 1); + HuAudCharVoicePlay(arg0->unk58, 0x123); +} + +static u8 fn_1_2DBC(UnkFn27A8Struct *arg0, omObjData *arg1) { + Vec sp20; + float var_f30; + float var_f29; + + arg0->unk50++; + var_f30 = 90.0f * (arg0->unk50 / 18.0f); + var_f29 = arg0->unk0C * (1.0 - sind(var_f30)); + Hu3DMotionTimeSet(arg1->model[0], var_f29); + fn_1_1D18(arg1->model[0], "motionC-stretch", &sp20); + arg0->unk28 = sp20.y - arg0->unk14 + 388.0f; + arg0->unk1C += arg0->unk20; + if (18.0f < arg0->unk50) { + arg0->unk20 = (670.0f - arg0->unk1C) / 20.0f; + Hu3DModelAttrReset(arg1->model[0], 0x40000003); + Hu3DMotionSet(arg1->model[0], arg1->motion[2]); + Hu3DMotionTimeSet(arg1->model[0], 20.0f); + omVibrate(arg0->unk54, 12, 4, 2); + HuAudFXPlay(0x50F); + fn_1_2970(arg0, arg1, 0); + return 1; + } + return 0; +} + +static void fn_1_313C(UnkFn27A8Struct *arg0, omObjData *arg1) { + Vec sp8; + + arg0->unk1C += arg0->unk20; + if (670.0f > arg0->unk1C) { + arg0->unk1C = 670.0f; + } + fn_1_1D18(arg1->model[0], "motionC-stretch", &sp8); + arg0->unk28 = sp8.y - arg0->unk14 + 388.0f; +} + +static void fn_1_3204(omObjData *arg0) { + Vec sp48; + Vec sp3C; + Vec sp24; + Vec spC; + float temp_f31; + UnkFn27A8Struct *temp_r31; + omObjData *temp_r29; + UnkData234Struct *temp_r28; + u16 var_r26; + s32 temp_r20; + + temp_r31 = arg0->data; + if (lbl_1_bss_58->work[0] == 1007) { + switch (temp_r31->unk4C) { + case 2017: + temp_r31->unk4C = 2014; + break; + case 2018: + temp_r31->unk4C = 2015; + break; + default: + temp_r31->unk4C = 2010; + break; + } + Hu3DMotionSpeedSet(arg0->model[0], 1.0f); + if (lbl_1_bss_26 == temp_r31->unk54) { + temp_r20 = temp_r31->unk54; + if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { + GWPlayer[temp_r20].coin_win = 10; + } + } + arg0->func = fn_1_43D8; + return; + } + if (lbl_1_bss_58->work[0] == 1006) { + temp_r29 = lbl_1_bss_48[temp_r31->unk54]; + if (temp_r31->unk60 < 19) { + if (GWPlayerCfg[temp_r31->unk54].iscom) { + var_r26 = fn_1_27A8(temp_r31); + } else { + var_r26 = HuPadBtnDown[temp_r31->unk5C]; + } + if (temp_r31->unk60 == 0) { + if (var_r26 & 0x100) { + temp_r31->unk60 = 1; + temp_r31->unk2C = 0.0f; + temp_r31->unk30 = 0.0f; + temp_r31->unk08 = 0.0f; + temp_r31->unk0C = 0.0f; + temp_r31->unk10 = temp_r31->unk0C; + temp_r31->unk20 = 0.0f; + temp_r31->unk24 = temp_r31->unk1C; + HuAudFXPlay(0x50E); + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[5], 0.0f, 2.0f, 0x40000001); + } + } else { + temp_r31->unk30 += 1.0f; + } + switch (temp_r31->unk4C) { + case 2016: + if (var_r26 & 0x100) { + temp_r28 = &lbl_1_data_234[temp_r31->unk60]; + if (temp_r28->unk10 >= 0 && 0.0f == temp_r31->unk2C) { + HuAudFXPlay(temp_r28->unk10); + } + temp_r31->unk2C += 1.0f; + Hu3DMotionTimeSet(lbl_1_bss_54[temp_r31->unk54]->model[0], temp_r28->unk04); + temp_f31 = temp_r28->unk08 - temp_r28[-1].unk08; + temp_f31 *= 1.0f - temp_r31->unk2C / temp_r28->unk00; + temp_r31->unk24 = 670.0f - 450.0f * (temp_r28->unk08 - temp_f31); + temp_f31 = temp_r28->unk0C - temp_r28[-1].unk0C; + temp_f31 *= 1.0f - temp_r31->unk2C / temp_r28->unk00; + temp_r31->unk10 = (temp_r28->unk0C - temp_f31) * Hu3DMotionMaxTimeGet(temp_r29->model[0]); + temp_f31 = temp_r31->unk60 / 20.0f; + temp_r31->unk20 = temp_f31 * (temp_r31->unk24 - temp_r31->unk1C); + temp_r31->unk08 = temp_f31 * (temp_r31->unk10 - temp_r31->unk0C); + if (temp_r28->unk00 <= temp_r31->unk2C) { + temp_r31->unk60++; + if (temp_r31->unk60 == 3) { + Hu3DMotionSpeedSet(arg0->model[0], 0.83f); + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[6], 0.0f, 4.0f, 0x40000001); + } + if (temp_r31->unk60 == 9) { + Hu3DMotionSpeedSet(arg0->model[0], 1.0f); + } + temp_r31->unk2C = 0.0f; + temp_r31->unk30 = 0.0f; + if (temp_r31->unk60 >= 19) { + temp_r31->unk1C = temp_r31->unk24; + temp_r31->unk20 = 0.0f; + temp_r31->unk0C = temp_r31->unk10; + temp_r31->unk08 = 0.0f; + if (lbl_1_bss_26 < 0) { + lbl_1_bss_26 = temp_r31->unk54; + } else if (frandmod(100) > 50) { + lbl_1_bss_26 = temp_r31->unk54; + } + } + } + } + if (60.0f <= temp_r31->unk30) { + temp_r31->unk4C = 2017; + fn_1_2B30(temp_r31, arg0, temp_r29); + } else { + if (temp_r31->unk1C > temp_r31->unk24) { + temp_r31->unk1C += temp_r31->unk20; + if (temp_r31->unk1C <= temp_r31->unk24) { + temp_r31->unk1C = temp_r31->unk24; + } + } + if (temp_r31->unk0C < temp_r31->unk10) { + temp_r31->unk0C += temp_r31->unk08; + if (temp_r31->unk0C >= temp_r31->unk10) { + temp_r31->unk0C = temp_r31->unk10; + } + } + Hu3DMotionTimeSet(temp_r29->model[0], temp_r31->unk0C); + } + break; + case 2017: + if (fn_1_2DBC(temp_r31, temp_r29) != 0) { + temp_r31->unk4C = 2018; + temp_r31->unk50 = 120; + } + break; + case 2018: + fn_1_313C(temp_r31, temp_r29); + temp_r31->unk50 -= 1.0f; + if (temp_r31->unk50 == 32) { + Hu3DMotionSet(arg0->model[0], arg0->motion[9]); + Hu3DMotionShiftSet(temp_r29->model[0], temp_r29->motion[1], 0.0f, 20.0f, 0x40000002); + } + if (0.0f > temp_r31->unk50) { + fn_1_2880(temp_r31, arg0); + } + break; + default: + OSReport("*** player mode error(%d)!!\n", temp_r31->unk4C); + break; + } + if (lbl_1_bss_28 < temp_r31->unk1C) { + lbl_1_bss_28 = temp_r31->unk1C; + } + omSetTra(arg0, temp_r31->unk1C * sind(180.0f + temp_r31->unk18), temp_r31->unk28, temp_r31->unk1C * cosd(180.0f + temp_r31->unk18)); + } + } +} + +static void fn_1_4190(float arg0) { + Vec sp8; + s32 i; + + for (i = 0; i < 4; i++) { + sp8.x = 155.5 * sind(arg0); + sp8.y = 588.0f; + sp8.z = 155.5 * cosd(arg0); + fn_1_7AEC(5, &sp8, NULL); + arg0 += 90.0f; + } +} + +static void fn_1_4284(float arg0) { + Vec sp8; + s32 i; + + for (i = 0; i < 4; i++) { + sp8.x = 155.5 * sind(arg0); + sp8.y = 388.0f; + sp8.z = 155.5 * cosd(arg0); + sp8.x += 40.0f * frandf() - 20.0f; + sp8.z += 40.0f * frandf() - 20.0f; + fn_1_7AEC(4, &sp8, NULL); + arg0 += 90.0f; + } +} + +static void fn_1_43D8(omObjData *arg0) { + Vec spE8; + float temp_f31; + float temp_f23; + UnkFn27A8Struct *temp_r31; + omObjData *temp_r30; + s32 temp_r28; + + temp_r31 = arg0->data; + temp_r30 = lbl_1_bss_48[temp_r31->unk54]; + switch (temp_r31->unk4C) { + case 2000: + if (lbl_1_bss_58->work[0] == 1001) { + temp_r31->unk4C++; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[1], 0.0f, 10.0f, 0); + } + break; + case 2001: + temp_r31->unk1C -= 1.0f; + if (Hu3DMotionEndCheck(arg0->model[0])) { + temp_r31->unk4C++; + temp_r31->unk08 = 0.0f; + temp_r31->unk04 = 2000.0f; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[2], 0.0f, 10.0f, 0); + Hu3DMotionSet(temp_r30->model[0], temp_r30->motion[0]); + Hu3DModelAttrSet(temp_r30->model[0], 0x40000002); + Hu3DModelAttrReset(temp_r30->model[0], 0x40000001); + Hu3DModelAttrReset(temp_r30->model[0], 1); + } + break; + case 2002: + temp_r31->unk08 += 0.4f; + temp_r31->unk04 -= temp_r31->unk08; + if (temp_r31->unk48 != 0 && Hu3DMotionEndCheck(arg0->model[0])) { + temp_r31->unk48 = 0; + HuAudCharVoicePlay(temp_r31->unk58, 0x128); + } + if (786.0f > temp_r31->unk04) { + temp_r31->unk4C++; + if (temp_r31->unk54 == 0) { + HuAudFXPlay(0x50D); + } + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[3], 0.0f, 10.0f, 0); + } + break; + case 2003: + temp_r31->unk08 += 0.4f; + temp_r31->unk04 -= temp_r31->unk08; + if (536.0f > temp_r31->unk04) { + temp_r31->unk4C++; + temp_r31->unk50 = 0; + temp_r31->unk04 = 536.0f; + Hu3DModelAttrReset(temp_r30->model[0], 0x40000002); + spE8.x = temp_r31->unk00 * sind(180.0f + temp_r31->unk18); + spE8.y = temp_r31->unk04; + spE8.z = temp_r31->unk00 * cosd(180.0f + temp_r31->unk18); + fn_1_7AEC(6, &spE8, NULL); + omVibrate(temp_r31->unk54, 12, 0xC, 0); + } + break; + case 2004: + temp_r31->unk50++; + if (70.0f < temp_r31->unk50) { + temp_r31->unk4C++; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[4], 0.0f, 10.0f, 0); + } + break; + case 2005: + temp_r31->unk50++; + if (130.0f == temp_r31->unk50) { + if (lbl_1_bss_10 != 0) { + lbl_1_bss_10 = 0; + HuAudFXPlay(0x510); + } + fn_1_2970(temp_r31, temp_r30, 0); + } + if (!Hu3DMotionEndCheck(arg0->model[0])) { + temp_r31->unk1C -= 2.3f; + } + if (Hu3DMotionEndCheck(temp_r30->model[0])) { + temp_r31->unk4C++; + temp_r31->unk50 = 0; + temp_r31->unk0C = 0.0f; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[5], 0.0f, 10.0f, 0x40000001); + Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[1], 0.0f, 10.0f, 0x40000002); + } + break; + case 2006: + if (temp_r31->unk50++ > 10) { + temp_r31->unk4C++; + } + fn_1_1D18(temp_r30->model[0], "motionC-stretch", &spE8); + temp_r31->unk14 = spE8.y; + break; + case 2007: + temp_r31->unk1C -= 5.0f; + if (670.0f > temp_r31->unk1C) { + temp_f31 = (670.0f - temp_r31->unk1C) / 450.0f; + Hu3DMotionTimeSet(lbl_1_bss_54[temp_r31->unk54]->model[0], 10.0f * temp_f31); + temp_r28 = (s32) (10.0f * temp_f31) >> 1; + if (temp_r28 < 5 && temp_r31->unk44 != lbl_1_data_3C4[temp_r28]) { + temp_r31->unk44 = lbl_1_data_3C4[temp_r28]; + HuAudFXPlay(temp_r31->unk44); + } + } + if (470.0f > temp_r31->unk1C) { + temp_r31->unk4C++; + temp_r31->unk1C = 470.0f; + fn_1_2B30(temp_r31, arg0, temp_r30); + } else { + temp_r31->unk0C += 0.7f; + Hu3DMotionTimeSet(temp_r30->model[0], temp_r31->unk0C); + } + break; + case 2008: + if (fn_1_2DBC(temp_r31, temp_r30) != 0) { + temp_r31->unk4C++; + temp_r31->unk50 = 120; + } + break; + case 2009: + fn_1_313C(temp_r31, temp_r30); + temp_r31->unk50 -= 1.0f; + if (temp_r31->unk50 == 32) { + Hu3DMotionSet(arg0->model[0], arg0->motion[9]); + Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[1], 0.0f, 20.0f, 0x40000002); + } + if (0.0f > temp_r31->unk50) { + lbl_1_bss_58->work[0]++; + fn_1_2880(temp_r31, arg0); + arg0->func = fn_1_3204; + } + break; + case 2011: + if (temp_r31->unk54 == lbl_1_bss_26) { + temp_r31->unk4C = 2012; + temp_r31->unk20 = 10.5f; + Hu3DModelAttrReset(arg0->model[0], 0x40000003); + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[8], 0.0f, 20.0f, 0); + Hu3DModelAttrReset(temp_r30->model[0], 0x40000003); + Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[2], 20.0f, 20.0f, 0); + HuAudFXPlay(0x513); + fn_1_4190(temp_r31->unk18); + } else { + temp_r31->unk4C = 2014; + fn_1_2B30(temp_r31, arg0, temp_r30); + } + break; + case 2012: + temp_r31->unk1C -= temp_r31->unk20; + if (0.0f > temp_r31->unk1C) { + temp_r31->unk1C = 0.0f; + } + temp_r31->unk20 -= 0.25f; + if (0.0f > temp_r31->unk20) { + temp_r31->unk4C++; + temp_r31->unk50 = 0; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[9], 0.0f, 20.0f, 0); + } + if (4.5f <= temp_r31->unk20) { + fn_1_4284(temp_r31->unk18); + } + break; + case 2013: + temp_r31->unk50++; + temp_f23 = 90.0f * (temp_r31->unk50 / 20.0f); + temp_f31 = sind(temp_f23) * sind(temp_f23); + if (180.0f > temp_r31->unk18) { + temp_r31->unk24 = temp_r31->unk18 + -temp_r31->unk18 * temp_f31; + } else { + temp_r31->unk24 = temp_r31->unk18 + (360.0f - temp_r31->unk18) * temp_f31; + } + omSetRot(arg0, 0.0f, temp_r31->unk24, 0.0f); + if (20.0f <= temp_r31->unk50) { + temp_r31->unk4C = 2011; + } + break; + case 0x7DE: + if (fn_1_2DBC(temp_r31, temp_r30) != 0) { + temp_r31->unk4C++; + temp_r31->unk50 = 120; + } + break; + case 0x7DF: + fn_1_313C(temp_r31, temp_r30); + temp_r31->unk50 -= 1.0f; + if (temp_r31->unk50 == 32) { + Hu3DMotionSet(arg0->model[0], arg0->motion[9]); + Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[1], 0.0f, 20.0f, 0x40000002); + } + if (0.0f > temp_r31->unk50) { + temp_r31->unk4C = 2011; + } + break; + default: + OSReport("*** player mode error(%d)!!\n", temp_r31->unk4C); + break; + } + omSetTra(arg0, temp_r31->unk1C * sind(180.0f + temp_r31->unk18), temp_r31->unk28, temp_r31->unk1C * cosd(180.0f + temp_r31->unk18)); + omSetTra(temp_r30, temp_r31->unk00 * sind(180.0f + temp_r31->unk18), temp_r31->unk04, temp_r31->unk00 * cosd(180.0f + temp_r31->unk18)); + if (lbl_1_bss_58->work[0] < 1008 && temp_r31->unk54 == lbl_1_bss_26) { + lbl_1_bss_1B8.x = temp_r31->unk1C * sind(180.0f + temp_r31->unk18); + lbl_1_bss_1B8.y = 508.0f; + lbl_1_bss_1B8.z = temp_r31->unk1C * cosd(180.0f + temp_r31->unk18); + lbl_1_bss_1D0.x = lbl_1_bss_1B8.x; + lbl_1_bss_1D0.y = lbl_1_bss_1B8.y + 270.0f; + lbl_1_bss_1D0.z = lbl_1_bss_1B8.z + 850.0f; + } +} + +static void fn_1_63C8(omObjData *arg0) { + UnkFn27A8Struct *temp_r31; + s16 temp_r28; + s16 var_r27; + s32 i; + + temp_r31 = arg0->data; + temp_r31->unk54 = arg0->work[0]; + temp_r31->unk58 = GWPlayerCfg[temp_r31->unk54].character; + temp_r31->unk5C = GWPlayerCfg[temp_r31->unk54].pad_idx; + temp_r31->unk4C = 2000; + temp_r31->unk60 = 0; + temp_r31->unk28 = 388.0f; + temp_r31->unk2C = 0.0f; + temp_r31->unk30 = 0.0f; + temp_r31->unk0C = 0.0f; + temp_r31->unk00 = 895.0f; + temp_r31->unk04 = 536.0f; + temp_r31->unk44 = -1; + temp_r31->unk48 = 1; + temp_r31->unk34 = 10; + temp_r31->unk38 = 10; + temp_r31->unk3C = 10; + temp_r31->unk40 = 60; + arg0->model[0] = CharModelCreate(lbl_1_data_0[temp_r31->unk58], 4); + CharModelStepTypeSet(lbl_1_data_0[temp_r31->unk58], 0); + for (i = 0; i < 11; i++) { + arg0->motion[i] = CharModelMotionCreate(lbl_1_data_0[temp_r31->unk58], lbl_1_data_78[temp_r31->unk58][i]); + CharModelMotionSet(lbl_1_data_0[temp_r31->unk58], arg0->motion[i]); + } + temp_r28 = arg0->model[0]; + var_r27 = Hu3DLLightCreateV(temp_r28, &lbl_1_data_34, &lbl_1_data_40, &lbl_1_data_4C); + Hu3DLLightStaticSet(temp_r28, var_r27, 1); + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + Hu3DModelLayerSet(arg0->model[0], 3); + Hu3DMotionSet(arg0->model[0], arg0->motion[0]); + temp_r31->unk18 = 135.0f + 90.0f * temp_r31->unk54; + temp_r31->unk1C = 895.0f; + omSetTra(arg0, temp_r31->unk1C * sind(180.0f + temp_r31->unk18), temp_r31->unk28, temp_r31->unk1C * cosd(180.0f + temp_r31->unk18)); + omSetRot(arg0, 0.0f, temp_r31->unk18, 0.0f); + Hu3DModelShadowSet(arg0->model[0]); + Hu3DModelAttrReset(arg0->model[0], 1); + if (GWPlayerCfg[temp_r31->unk54].iscom) { + switch (GWPlayerCfg[temp_r31->unk54].diff) { + case 0: + temp_r31->unk34 = 26; + temp_r31->unk3C = 90; + break; + case 1: + temp_r31->unk34 = 24; + temp_r31->unk3C = 80; + break; + case 2: + temp_r31->unk34 = 22; + temp_r31->unk3C = 70; + break; + case 3: + default: + temp_r31->unk34 = 18; + temp_r31->unk3C = 40; + break; + } + temp_r31->unk38 = (temp_r31->unk3C >> 1) + frandmod(temp_r31->unk3C); + } + CharModelMotionDataClose(lbl_1_data_0[temp_r31->unk58]); + arg0->func = fn_1_43D8; +} + +static void fn_1_6858(omObjData *arg0) { +} + +static void fn_1_685C(omObjData *arg0) { + float temp_f31; + float temp_f29; + float temp_f30; + s32 temp_r29; + s32 i; + + temp_r29 = arg0->work[0]; + arg0->model[0] = Hu3DModelCreateFile(lbl_1_data_1D8[temp_r29]); + for (i = 0; i < 3; i++) { + arg0->motion[i] = Hu3DJointMotionFile(arg0->model[0], lbl_1_data_1E8[i]); + } + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelAttrSet(arg0->model[0], 0x40000002); + Hu3DModelLayerSet(arg0->model[0], 4); + Hu3DMotionSet(arg0->model[0], arg0->motion[0]); + temp_f31 = ((UnkFn27A8Struct*) lbl_1_bss_4C[temp_r29]->data)->unk18; + temp_f29 = ((UnkFn27A8Struct*) lbl_1_bss_4C[temp_r29]->data)->unk04; + temp_f30 = ((UnkFn27A8Struct*) lbl_1_bss_4C[temp_r29]->data)->unk00; + omSetTra(arg0, temp_f30 * sind(180.0f + temp_f31), temp_f29, temp_f30 * cosd(180.0f + temp_f31)); + omSetRot(arg0, 0.0f, temp_f31, 0.0f); + Hu3DModelShadowSet(arg0->model[0]); + arg0->func = fn_1_6858; +} + +static void fn_1_6AB4(omObjData *arg0) { + Vec *temp_r29; + UnkFn6AB4Struct *temp_r31; + float temp_f31; + + temp_r29 = &lbl_1_data_200[arg0->work[0]]; + temp_r31 = arg0->data; + switch (temp_r31->unk18) { + case 3000: + temp_r31->unk14 -= 1.0f; + if (0.0f > temp_r31->unk14 && frandmod(20) == 0) { + temp_r31->unk18 = 3001; + temp_r31->unk0C = 360.0f * frandf(); + temp_r31->unk10 = 10.0f; + HuAudFXPlay(0x512); + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 20.0f, 0); + } + break; + case 3001: + temp_r31->unk00 += sind(temp_r31->unk0C); + temp_r31->unk08 += cosd(temp_r31->unk0C); + temp_f31 = temp_r31->unk00 - temp_r29->x; + if (50.0f < ABS(temp_f31)) { + temp_r31->unk00 = temp_r29->x + 50.0f * (0.0f > temp_f31 ? -1 : 1); + } + temp_f31 = temp_r31->unk08 - temp_r29->z; + if (50.0f < ABS(temp_f31)) { + temp_r31->unk08 = temp_r29->z + 50.0f * (0.0f > temp_f31 ? -1 : 1); + } + temp_r31->unk04 += temp_r31->unk10; + temp_r31->unk10 -= 0.5f; + if (temp_r29->y > temp_r31->unk04) { + temp_r31->unk18 = 3000; + temp_r31->unk14 = 20.0f; + temp_r31->unk04 = temp_r29->y; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[1], 0.0f, 20.0f, 0); + } + break; + } + omSetTra(arg0, temp_r31->unk00, temp_r31->unk04, temp_r31->unk08); + omSetRot(arg0, 0.0f, temp_r31->unk0C, 0.0f); +} + +static void fn_1_6E64(omObjData *arg0) { + Vec *temp_r29; + UnkFn6AB4Struct *temp_r30; + s32 i; + + temp_r29 = &lbl_1_data_200[arg0->work[0]]; + temp_r30 = arg0->data; + arg0->model[0] = Hu3DModelCreateFile(lbl_1_data_1F4); + for (i = 0; i < 2; i++) { + arg0->motion[i] = Hu3DJointMotionFile(arg0->model[0], lbl_1_data_1F8[i]); + } + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelLayerSet(arg0->model[0], 5); + Hu3DMotionSet(arg0->model[0], arg0->motion[1]); + temp_r30->unk18 = 3000; + temp_r30->unk14 = 0.0f; + temp_r30->unk00 = temp_r29->x; + temp_r30->unk04 = temp_r29->y; + temp_r30->unk08 = temp_r29->z; + temp_r30->unk0C = 360.0f * frandf(); + omSetTra(arg0, temp_r30->unk00, temp_r30->unk04, temp_r30->unk08); + omSetRot(arg0, 0.0f, temp_r30->unk0C, 0.0f); + Hu3DModelShadowSet(arg0->model[0]); + Hu3DModelAttrReset(arg0->model[0], 0x40000002); + Hu3DModelAttrReset(arg0->model[0], 1); + arg0->func = fn_1_6AB4; +} + +static void fn_1_7020(omObjData *arg0) { + Hu3DModelAttrSet(arg0->model[0], 1); + fn_1_24(arg0->work[0], arg0->model[0]); + omDelObjEx(lbl_1_bss_1E8, arg0); + lbl_1_bss_24--; +} + +static void fn_1_70E4(omObjData *arg0) { + Mtx sp18; + Vec spC; + float var_f27; + float temp_f26; + float temp_f30; + float temp_f31; + UnkFn70E4Struct *temp_r31; + + temp_r31 = arg0->data; + switch (arg0->work[0]) { + case 0: + case 1: + case 2: + case 3: + var_f27 = temp_r31->unk24.z; + spC.x = 0.0f; + spC.y = 0.0f; + spC.z = var_f27; + temp_r31->unk24.z *= 0.92f; + PSMTXIdentity(sp18); + mtxRot(sp18, temp_r31->unk24.x, temp_r31->unk24.y, 0.0f); + PSMTXMultVec(sp18, &spC, &spC); + PSVECAdd(&spC, &temp_r31->unk00, &temp_r31->unk00); + omSetTra(arg0, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z); + Hu3DModelTPLvlSet(arg0->model[0], temp_r31->unk30); + temp_r31->unk30 -= 0.02f; + if (0.1f > temp_r31->unk30) { + fn_1_7020(arg0); + } + break; + case 4: + temp_r31->unk00.y += temp_r31->unk30; + if (390.0f >= temp_r31->unk00.y) { + temp_r31->unk00.y = 390.0f; + } + omSetTra(arg0, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z); + if (390.0f >= temp_r31->unk00.y) { + break; + } + temp_r31->unk0C += 8.0f + frandmod(8); + temp_r31->unk10 += 8.0f + frandmod(8); + temp_r31->unk14 += 8.0f + frandmod(8); + omSetRot(arg0, temp_r31->unk0C, temp_r31->unk10, temp_r31->unk14); + if (0.0f < temp_r31->unk30) { + temp_r31->unk30 -= 0.3f; + break; + } + if (0.0f == temp_r31->unk34) { + temp_r31->unk34 = 0.003f + 0.006f * frandf(); + } + temp_r31->unk30 -= temp_r31->unk34; + temp_r31->unk00.x += temp_r31->unk24.x; + temp_r31->unk00.z += temp_r31->unk24.z; + if (!(lbl_1_bss_1B4 & 3)) { + temp_r31->unk24.x = 6.0f * frandf() - 3.0f; + temp_r31->unk24.z = 6.0f * frandf() - 3.0f; + } + break; + case 5: + if (Hu3DMotionEndCheck(arg0->model[0])) { + fn_1_7020(arg0); + } + break; + case 6: + spC = lbl_1_data_10; + temp_f26 = Hu3DMotionMaxTimeGet(arg0->model[0]); + temp_f31 = 1.0f - Hu3DMotionTimeGet(arg0->model[0]) / temp_f26; + spC.x += 100.0f * temp_f31 * frandf() * (frandmod(100) > 50 ? 1.0f : -1.0f); + spC.z += 100.0f * temp_f31 * frandf() * (frandmod(100) > 50 ? 1.0f : -1.0f); + Hu3DCameraPosSetV(1, &spC, &lbl_1_data_1C, &lbl_1_data_28); + lbl_1_bss_1DC = spC; + lbl_1_bss_1C4 = lbl_1_data_28; + temp_f30 = 0.5f * Hu3DMotionMaxTimeGet(arg0->model[0]); + if (temp_f30 < Hu3DMotionTimeGet(arg0->model[0])) { + temp_f31 = 1.0f - (Hu3DMotionTimeGet(arg0->model[0]) - temp_f30) / temp_f30; + Hu3DModelTPLvlSet(arg0->model[0], temp_f31); + temp_f31 = 1.0f - temp_f31; + omSetSca(arg0, temp_r31->unk18 + temp_f31, temp_r31->unk1C + temp_f31, temp_r31->unk20 + temp_f31); + } + if (Hu3DMotionEndCheck(arg0->model[0])) { + Hu3DCameraPosSetV(1, &lbl_1_data_10, &lbl_1_data_1C, &lbl_1_data_28); + lbl_1_bss_1DC = lbl_1_data_10; + lbl_1_bss_1C4 = lbl_1_data_28; + fn_1_7020(arg0); + } + break; + default: + OSReport("effect id error!!(%d)\n", arg0->work[0]); + break; + } +} + +static void fn_1_7950(omObjData *arg0) { + UnkFn70E4Struct *temp_r30; + s16 var_r25; + + temp_r30 = arg0->data; + temp_r30->unk38--; + if (temp_r30->unk38 <= 0) { + var_r25 = fn_1_AC(arg0->work[0]); + if (var_r25 < 0) { + arg0->model[0] = Hu3DModelLink(lbl_1_bss_16[arg0->work[0]]); + } else { + arg0->model[0] = var_r25; + } + Hu3DMotionTimeSet(arg0->model[0], 0.0f); + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelLayerSet(arg0->model[0], 2); + omSetTra(arg0, temp_r30->unk00.x, temp_r30->unk00.y, temp_r30->unk00.z); + omSetRot(arg0, temp_r30->unk0C, temp_r30->unk10, temp_r30->unk14); + omSetSca(arg0, temp_r30->unk18, temp_r30->unk1C, temp_r30->unk20); + Hu3DModelAttrReset(arg0->model[0], 0x40000003); + Hu3DModelAttrReset(arg0->model[0], 1); + arg0->func = fn_1_70E4; + } +} + +static void fn_1_7AEC(s32 arg0, Vec *arg1, Vec *arg2) { + omObjData *temp_r3; + UnkFn70E4Struct *temp_r31; + + if (lbl_1_bss_24 < 300) { + lbl_1_bss_24++; + temp_r3 = omAddObjEx(lbl_1_bss_1E8, 105, 1, 1, 5, fn_1_7950); + temp_r3->work[0] = arg0; + temp_r3->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM); + temp_r31 = temp_r3->data; + temp_r31->unk0C = 0.0f; + temp_r31->unk10 = 0.0f; + temp_r31->unk14 = 0.0f; + temp_r31->unk18 = 1.0f; + temp_r31->unk1C = 1.0f; + temp_r31->unk20 = 1.0f; + temp_r31->unk24.x = 0.0f; + temp_r31->unk24.y = 0.0f; + temp_r31->unk24.z = 0.0f; + temp_r31->unk00 = *arg1; + if (NULL != arg2) { + temp_r31->unk24 = *arg2; + } + temp_r31->unk38 = frandmod(10); + switch (arg0) { + case 0: + case 1: + case 2: + case 3: + temp_r31->unk30 = 1.0f; + break; + case 4: + temp_r31->unk30 = 12.0f + 2.0f * frandf(); + temp_r31->unk34 = 0.0f; + temp_r31->unk18 = 8.0f; + temp_r31->unk1C = 8.0f; + temp_r31->unk20 = 8.0f; + break; + case 5: + temp_r31->unk18 = 4.0f; + temp_r31->unk1C = 4.0f; + temp_r31->unk20 = 4.0f; + break; + } + } +} + +static void fn_1_7D48(omObjData *arg0) { +} + +static void fn_1_7D4C(omObjData *arg0) { + arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M402, 35)); + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelAttrSet(arg0->model[0], 0x40000002); + Hu3DModelLayerSet(arg0->model[0], 0); + omSetTra(arg0, 0.0f, 0.0f, 0.0f); + omSetRot(arg0, 0.0f, 270.0f + 90.0f * arg0->work[0], 0.0f); + Hu3DModelShadowMapSet(arg0->model[0]); + Hu3DModelAttrReset(arg0->model[0], 1); + arg0->func = fn_1_7D48; +} + +static void fn_1_7E80(omObjData *arg0) { +} + +static void fn_1_7E84(omObjData *arg0) { + float temp_f31; + + arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M402, 36)); + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + Hu3DModelAttrReset(arg0->model[0], 0x40000002); + Hu3DModelLayerSet(arg0->model[0], 1); + temp_f31 = 135.0f + 90.0f * arg0->work[0]; + omSetTra(arg0, 155.5 * sind(temp_f31), 0.0f, 155.5 * cosd(temp_f31)); + omSetRot(arg0, 0.0f, 0.0f, 0.0f); + Hu3DModelAttrReset(arg0->model[0], 1); + arg0->func = fn_1_7E80; +} + +static inline void fn_1_8048InlineFunc(Vec *arg0, float arg1, float arg2, float arg3) { + arg0->x = arg1; + arg0->y = arg2; + arg0->z = arg3; +} + +static void fn_1_8048(void) { + Vec sp14; + Vec sp8; + + lbl_1_bss_38 += lbl_1_bss_34; + if (360.0f < lbl_1_bss_38) { + lbl_1_bss_34 -= 0.2f; + if (0.0f > lbl_1_bss_34) { + lbl_1_bss_34 = 0.0f; + } + } + sp14.x = 2000.0 * cosd(lbl_1_bss_38); + sp14.y = 2000.0 * sind(lbl_1_bss_38); + sp14.z = 0.0f; + fn_1_8048InlineFunc(&sp8, -sp14.x, -sp14.y, -sp14.z); + Hu3DGLightPosSetV(lbl_1_bss_14, &sp14, &sp8); +} + +static void fn_1_8218(omObjData *arg0) { + Vec sp38; + float temp_f26; + omObjData *temp_r30; + + if (omSysExitReq != 0) { + fn_1_1F58(-1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_9AF4; + } + lbl_1_bss_1B4++; + switch (arg0->work[0]) { + case 1000: + if (WipeStatGet() == 0) { + arg0->work[0]++; + } + break; + case 1001: + case 1002: + case 1003: + case 1004: + break; + case 1005: + if (lbl_1_bss_1AA < 0) { + lbl_1_bss_1AA = MGSeqCreate(3, 0); + } else { + if (lbl_1_bss_1A4 < 0 && (MGSeqStatGet(lbl_1_bss_1AA) & 0x10)) { + lbl_1_bss_1A4 = HuAudSeqPlay(0x46); + } + if (MGSeqStatGet(lbl_1_bss_1AA) == 0) { + arg0->work[0]++; + lbl_1_bss_1B0 = 1800; + lbl_1_bss_1A8 = MGSeqCreate(1, lbl_1_bss_1B0 / 60, -1, -1); + lbl_1_bss_1AA = -1; + } + } + break; + case 1006: + MGSeqParamSet(lbl_1_bss_1A8, 1, (lbl_1_bss_1B0 + 59) / 60); + lbl_1_bss_1B0--; + if (lbl_1_bss_1B0 < 0 || lbl_1_bss_26 >= 0) { + lbl_1_bss_1B0 = 1800; + lbl_1_bss_2C = 0.0f; + arg0->work[0] = 1007; + } + if (670.0f <= lbl_1_bss_28) { + lbl_1_bss_28 = 670.0f; + } + temp_f26 = 2.5f * (670.0f - lbl_1_bss_28); + sp38 = lbl_1_data_10; + sp38.y = lbl_1_bss_1DC.y + (lbl_1_data_10.y - temp_f26 - lbl_1_bss_1DC.y) / 3.0f; + sp38.z = lbl_1_bss_1DC.z + (lbl_1_data_10.z - temp_f26 - lbl_1_bss_1DC.z) / 3.0f; + fn_1_1350(&sp38, &lbl_1_data_1C, &lbl_1_data_28); + lbl_1_bss_28 = 0.0f; + break; + case 1007: + if (lbl_1_bss_1AA < 0) { + MGSeqParamSet(lbl_1_bss_1A8, 2, -1); + lbl_1_bss_1A8 = -1; + lbl_1_bss_1AA = MGSeqCreate(3, 1); + fn_1_1F58(100); + } else { + lbl_1_bss_2C += 1.0f; + if (90.0f >= lbl_1_bss_2C) { + fn_1_13DC(lbl_1_bss_2C / 90.0f, &lbl_1_data_1C); + } + if (MGSeqStatGet(lbl_1_bss_1AA) == 0) { + arg0->work[0]++; + lbl_1_bss_1AA = -1; + lbl_1_bss_2C = 0.0f; + } + } + break; + case 1008: + if (lbl_1_bss_1AA < 0) { + if (lbl_1_bss_26 < 0) { + lbl_1_bss_1AA = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + } else { + lbl_1_bss_1AA = MGSeqCreate(5, 3, GWPlayerCfg[lbl_1_bss_26].character, -1, -1, -1); + temp_r30 = lbl_1_bss_4C[lbl_1_bss_26]; + Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[10], 0.0f, 20.0f, 0); + HuAudSStreamPlay(1); + } + } else { + lbl_1_bss_2C += 1.0f; + if (lbl_1_bss_26 >= 0 && 110.0f == lbl_1_bss_2C) { + Hu3DModelAttrSet(arg0->model[1], 1); + Hu3DModelAttrReset(arg0->model[2], 0x40000002); + Hu3DModelAttrReset(arg0->model[2], 1); + Hu3DMotionTimeSet(arg0->model[2], 0.0f); + Hu3DMotionSpeedSet(arg0->model[2], 3.0f); + } + if (210.0f < lbl_1_bss_2C && MGSeqStatGet(lbl_1_bss_1AA) == 0) { + fn_1_1F58(-1); + lbl_1_bss_1AA = -1; + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_9AF4; + } + } + break; + default: + OSReport("*** main mode error(%d)!!\n", arg0->work[0]); + break; + } + lbl_1_bss_30 -= 1.0f; + if (0.0f == lbl_1_bss_30) { + Hu3DModelAttrSet(arg0->model[1], 1); + Hu3DModelAttrReset(arg0->model[2], 0x40000002); + Hu3DModelAttrReset(arg0->model[2], 1); + Hu3DMotionTimeSet(arg0->model[2], 0.0f); + Hu3DMotionSpeedSet(arg0->model[2], 3.0f); + } + if (0.0f > lbl_1_bss_30) { + lbl_1_bss_30 = -1.0f; + fn_1_8048(); + if (Hu3DMotionEndCheck(arg0->model[2])) { + Hu3DModelAttrReset(arg0->model[1], 1); + Hu3DModelAttrSet(arg0->model[2], 1); + } + } +} + +static void fn_1_9058(omObjData *arg0) { + s16 temp_r29; + s16 temp_r28; + s32 i; + + arg0->work[0] = 1000; + arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M402, 32)); + arg0->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M402, 33)); + arg0->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M402, 34)); + for (i = 0; i < 3; i++) { + Hu3DModelAttrSet(arg0->model[i], 1); + Hu3DModelAttrSet(arg0->model[i], 0x40000002); + Hu3DModelLayerSet(arg0->model[i], 0); + Hu3DModelPosSet(arg0->model[i], 0.0f, 0.0f, 0.0f); + } + Hu3DModelReflectTypeSet(arg0->model[0], 3); + Hu3DModelReflectTypeSet(arg0->model[1], 3); + Hu3DModelReflectTypeSet(arg0->model[2], 3); + temp_r29 = arg0->model[0]; + temp_r28 = Hu3DLLightCreateV(temp_r29, &lbl_1_data_34, &lbl_1_data_40, &lbl_1_data_4C); + Hu3DLLightStaticSet(temp_r29, temp_r28, 1); + Hu3DModelAttrReset(arg0->model[0], 1); + Hu3DModelAttrReset(arg0->model[1], 1); + Hu3DModelShadowMapSet(arg0->model[0]); + HuAudFXPlay(0x519); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_8218; +} + +void ModuleProlog(void) { + Vec sp20; + omObjData *temp_r30; + s32 i; + + OSReport("******* M402 ObjectSetup *********\n"); + lbl_1_bss_1E8 = omInitObjMan(400, 0x2000); + omGameSysInit(lbl_1_bss_1E8); + lbl_1_bss_1B4 = 0; + lbl_1_bss_1AA = -1; + lbl_1_bss_1A8 = -1; + lbl_1_bss_26 = -1; + lbl_1_bss_1A4 = -1; + lbl_1_bss_10 = 1; + lbl_1_bss_8 = 0.0f; + lbl_1_bss_C = 2200.0f; + lbl_1_bss_4 = 2500.0f; + lbl_1_bss_1D0 = lbl_1_data_10; + lbl_1_bss_1B8 = lbl_1_data_28; + Hu3DReflectNoSet(0); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 20000.0f, 1.2f); + fn_1_1350(&lbl_1_data_10, &lbl_1_data_1C, &lbl_1_data_28); + lbl_1_bss_38 = 180.0f; + lbl_1_bss_34 = 4.0f; + lbl_1_bss_30 = 60.0f; + lbl_1_bss_14 = Hu3DGLightCreateV(&lbl_1_data_34, &lbl_1_data_40, &lbl_1_data_4C); + Hu3DGLightStaticSet(lbl_1_bss_14, 1); + fn_1_8048(); + Hu3DShadowCreate(30.0f, 20.0f, 20000.0f); + Hu3DShadowTPLvlSet(0.5f); + PSVECNormalize(&lbl_1_data_60, &sp20); + Hu3DShadowPosSet(&lbl_1_data_60, &sp20, &lbl_1_data_6C); + omMakeGroupEx(lbl_1_bss_1E8, 0, 4); + lbl_1_bss_54 = omGetGroupMemberListEx(lbl_1_bss_1E8, 0); + for (i = 0; i < 4; i++) { + temp_r30 = omAddObjEx(lbl_1_bss_1E8, 100, 1, 0, 0, fn_1_7D4C); + temp_r30->work[0] = i; + } + omMakeGroupEx(lbl_1_bss_1E8, 1, 4); + lbl_1_bss_50 = omGetGroupMemberListEx(lbl_1_bss_1E8, 1); + for (i = 0; i < 4; i++) { + temp_r30 = omAddObjEx(lbl_1_bss_1E8, 101, 1, 0, 1, fn_1_7E84); + temp_r30->work[0] = i; + } + omMakeGroupEx(lbl_1_bss_1E8, 2, 4); + lbl_1_bss_4C = omGetGroupMemberListEx(lbl_1_bss_1E8, 2); + for (i = 0; i < 4; i++) { + temp_r30 = omAddObjEx(lbl_1_bss_1E8, 102, 1, 11, 2, fn_1_63C8); + temp_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkFn27A8Struct), MEMORY_DEFAULT_NUM); + temp_r30->work[0] = i; + } + omMakeGroupEx(lbl_1_bss_1E8, 3, 4); + lbl_1_bss_48 = omGetGroupMemberListEx(lbl_1_bss_1E8, 3); + for (i = 0; i < 4; i++) { + temp_r30 = omAddObjEx(lbl_1_bss_1E8, 103, 1, 3, 3, fn_1_685C); + temp_r30->work[0] = i; + } + omMakeGroupEx(lbl_1_bss_1E8, 4, 2); + lbl_1_bss_44 = omGetGroupMemberListEx(lbl_1_bss_1E8, 4); + for (i = 0; i < 2; i++) { + temp_r30 = omAddObjEx(lbl_1_bss_1E8, 104, 1, 2, 4, fn_1_6E64); + temp_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkFn6AB4Struct), MEMORY_DEFAULT_NUM); + temp_r30->work[0] = i; + } + fn_1_0(); + lbl_1_bss_24 = 0; + omMakeGroupEx(lbl_1_bss_1E8, 5, 300); + lbl_1_bss_40 = omGetGroupMemberListEx(lbl_1_bss_1E8, 5); + for (i = 0; i < 7; i++) { + lbl_1_bss_16[i] = Hu3DModelCreateFile(lbl_1_data_218[i]); + Hu3DModelAttrSet(lbl_1_bss_16[i], 1); + Hu3DModelAttrSet(lbl_1_bss_16[i], 0x40000002); + } + lbl_1_bss_58 = omAddObjEx(lbl_1_bss_1E8, 106, 3, 1, -1, fn_1_9058); +} + +static void fn_1_9AF4(omObjData *arg0) { + s32 i; + + if (WipeStatGet() == 0) { + if (lbl_1_bss_1AA >= 0) { + MGSeqKill(lbl_1_bss_1AA); + } + if (lbl_1_bss_1A8 >= 0) { + MGSeqKill(lbl_1_bss_1A8); + } + MGSeqKillAll(); + HuAudAllStop(); + for (i = 0; i < 4; i++) { + CharModelKill(lbl_1_data_0[GWPlayerCfg[i].character]); + } + omOvlReturnEx(1, 1); + } +} diff --git a/src/REL/messDll/main.c b/src/REL/messDll/main.c index 5ef28622..38c846f0 100755 --- a/src/REL/messDll/main.c +++ b/src/REL/messDll/main.c @@ -8,7 +8,7 @@ #include "game/wipe.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" #include "rel_sqrt_consts.h" extern s32 sprintf(char*, const char*, s32); @@ -68,25 +68,25 @@ static void fn_1_300(omObjData *arg0) { CRot.y += HuPadSubStkX[0] / 20; CZoom += HuPadTrigL[0] / 2; CZoom -= HuPadTrigR[0] / 2; - sp2C.x = Center.x + CZoom * (sin(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0)); - sp2C.y = Center.y + CZoom * -sin(CRot.x * M_PI / 180.0); - sp2C.z = Center.z + CZoom * (cos(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0)); + sp2C.x = Center.x + CZoom * (sind(CRot.y) * cosd(CRot.x)); + sp2C.y = Center.y + CZoom * -sind(CRot.x); + sp2C.z = Center.z + CZoom * (cosd(CRot.y) * cosd(CRot.x)); sp20.x = Center.x - sp2C.x; sp20.y = Center.y - sp2C.y; sp20.z = Center.z - sp2C.z; - sp14.x = sin(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0); - sp14.y = cos(CRot.x * M_PI / 180.0); - sp14.z = cos(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0); + sp14.x = sind(CRot.y) * sind(CRot.x); + sp14.y = cosd(CRot.x); + sp14.z = cosd(CRot.y) * sind(CRot.x); temp_f31 = CRot.z; - sp8.x = sp14.x * (sp20.x * sp20.x + (1.0f - sp20.x * sp20.x) * cos(temp_f31 * M_PI / 180.0)) - + sp14.y * (sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0)) - + sp14.z * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.y * sin(temp_f31 * M_PI / 180.0)); - sp8.y = 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)); - sp8.z = sp14.x * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.y * sin(temp_f31 * M_PI / 180.0)) - + sp14.y * (sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0)) - + sp14.z * (sp20.z * sp20.z + (1.0f - sp20.z * sp20.z) * cos(temp_f31 * M_PI / 180.0)); + sp8.x = sp14.x * (sp20.x * sp20.x + (1.0f - sp20.x * sp20.x) * cosd(temp_f31)) + + sp14.y * (sp20.x * sp20.y * (1.0 - cosd(temp_f31)) - sp20.z * sind(temp_f31)) + + sp14.z * (sp20.x * sp20.z * (1.0 - cosd(temp_f31)) + sp20.y * sind(temp_f31)); + sp8.y = 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)); + sp8.z = sp14.x * (sp20.x * sp20.z * (1.0 - cosd(temp_f31)) - sp20.y * sind(temp_f31)) + + sp14.y * (sp20.y * sp20.z * (1.0 - cosd(temp_f31)) + sp20.x * sind(temp_f31)) + + sp14.z * (sp20.z * sp20.z + (1.0f - sp20.z * sp20.z) * cosd(temp_f31)); PSVECCrossProduct(&sp14, &sp20, &sp20); PSVECNormalize(&sp20, &sp20); temp_r31 = HuPadSubStkX[0] & 0xF8; diff --git a/src/game/board/boo.c b/src/game/board/boo.c index 2042ae27..b4d2a436 100755 --- a/src/game/board/boo.c +++ b/src/game/board/boo.c @@ -17,7 +17,7 @@ #include "game/board/space.h" #include "game/board/window.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -635,12 +635,12 @@ static void BallMain(omObjData *arg0) { temp_f30 = 240.0f; BoardCameraRotGet(&sp20); BoardCameraTargetGet(&sp2C); - sp8.x = sp2C.x + sin(sp20.y * M_PI / 180.0) * cos(sp20.x * M_PI / 180.0) * temp_f30; - sp8.y = sp2C.y + -sin(sp20.x * M_PI / 180.0) * temp_f30; - sp8.z = sp2C.z + cos(sp20.y * M_PI / 180.0) * cos(sp20.x * M_PI / 180.0) * temp_f30; - sp14.x = sin(sp20.y * M_PI / 180.0) * sin(sp20.x * M_PI / 180.0); - sp14.y = cos(sp20.x * M_PI / 180.0); - sp14.z = cos(sp20.y * M_PI / 180.0) * sin(sp20.x * M_PI / 180.0); + sp8.x = sp2C.x + sind(sp20.y) * cosd(sp20.x) * temp_f30; + sp8.y = sp2C.y + -sind(sp20.x) * temp_f30; + sp8.z = sp2C.z + cosd(sp20.y) * cosd(sp20.x) * temp_f30; + sp14.x = sind(sp20.y) * sind(sp20.x); + sp14.y = cosd(sp20.x); + sp14.z = cosd(sp20.y) * sind(sp20.x); if (temp_r30->unk01 != 0) { temp_r30->unk02 += temp_r30->unk01; if (temp_r30->unk02 > 255) { @@ -711,8 +711,8 @@ static void BallRenderHook(void) { sp20.z = 0.0f; C_MTXLookAt(sp38, &sp2C, &sp20, &sp14); GXLoadPosMtxImm(sp38, GX_PNMTX0); - sp2C.x = sin(5 * M_PI / 72) * 20000.0 * 1.2f; - sp2C.y = sin(5 * M_PI / 72) * 20000.0 * 0.8333333f; + sp2C.x = sind(12.5) * 20000.0 * 1.2f; + sp2C.y = sind(12.5) * 20000.0 * 0.8333333f; sp2C.z = -9000.0f; GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(-sp2C.x, -sp2C.y, sp2C.z); @@ -754,12 +754,12 @@ static void UpdateBallCamera(omObjData *arg0) { sp20.x = arg0->trans.x; sp20.y = arg0->trans.y + arg0->rot.y; sp20.z = arg0->trans.z; - sp14.x = sp20.x + sin(0.0) * cos(arg0->rot.x * M_PI / 180.0) * arg0->rot.z; - sp14.y = sp20.y + -sin(arg0->rot.x * M_PI / 180.0) * arg0->rot.z; - sp14.z = sp20.z + cos(0.0) * cos(arg0->rot.x * M_PI / 180.0) * arg0->rot.z; - sp8.x = sin(0.0) * sin(arg0->rot.x * M_PI / 180.0); - sp8.y = cos(arg0->rot.x * M_PI / 180.0); - sp8.z = cos(0.0) * sin(arg0->rot.x * M_PI / 180.0); + sp14.x = sp20.x + sin(0.0) * cosd(arg0->rot.x) * arg0->rot.z; + sp14.y = sp20.y + -sind(arg0->rot.x) * arg0->rot.z; + sp14.z = sp20.z + cos(0.0) * cosd(arg0->rot.x) * arg0->rot.z; + sp8.x = sin(0.0) * sind(arg0->rot.x); + sp8.y = cosd(arg0->rot.x); + sp8.z = cos(0.0) * sind(arg0->rot.x); Hu3DCameraPosSetV(var_r30->unk02, &sp14, &sp8, &sp20); } @@ -909,9 +909,9 @@ static void BallPlayerZoomOut(omObjData *arg0, BallPlayerWork *arg1) { sp14.x = arg0->trans.x; sp14.y = arg0->trans.y; sp14.z = arg0->trans.z; - sp8.x = sp14.x + 120.0 * sin(-M_PI / 2); + sp8.x = sp14.x + 120.0 * sind(-90); sp8.y = sp14.y; - sp8.z = sp14.z + 120.0 * cos(-M_PI / 2); + sp8.z = sp14.z + 120.0 * cosd(-90); BoardPlayerPosLerpStart(stealTarget, &sp14, &sp8, 20); var_r29 = GWPlayer[stealTarget].character; HuAudFXPlay(booSfxTbl[0][var_r29]); @@ -1082,9 +1082,9 @@ static void BallBooCreate(void) { BoardModelCameraSet(temp_r31->unk04, 1); temp_f31 = BoardPlayerRotYGet(stealTarget); BoardPlayerPosGet(stealTarget, &sp14); - ballBooObj->trans.x = sp14.x + 240.0 * sin(-temp_f31 * M_PI / 180.0); + ballBooObj->trans.x = sp14.x + 240.0 * sind(-temp_f31); ballBooObj->trans.y = sp14.y + 160.0f; - ballBooObj->trans.z = sp14.z + 240.0 * cos(-temp_f31 * M_PI / 180.0); + ballBooObj->trans.z = sp14.z + 240.0 * cosd(-temp_f31); BoardModelPosSet(temp_r31->unk04, ballBooObj->trans.x, ballBooObj->trans.y, ballBooObj->trans.z); if (stealType == 2) { var_f30 = 126.0f; @@ -1093,9 +1093,9 @@ static void BallBooCreate(void) { var_f30 = 90.0f; var_f29 = 100.0f; } - sp8.x = sp14.x + var_f30 * sin(-temp_f31 * M_PI / 180.0); + sp8.x = sp14.x + var_f30 * sind(-temp_f31); sp8.y = sp14.y + var_f29; - sp8.z = sp14.z + var_f30 * cos(-temp_f31 * M_PI / 180.0); + sp8.z = sp14.z + var_f30 * cosd(-temp_f31); ballBooObj->rot.x = (sp8.x - ballBooObj->trans.x) / 60.0f; ballBooObj->rot.y = (sp8.y - ballBooObj->trans.y) / 60.0f; ballBooObj->rot.z = (sp8.z - ballBooObj->trans.z) / 60.0f; @@ -1104,7 +1104,7 @@ static void BallBooCreate(void) { ballBooObj->scale.z = 1.0f; sp8.x = sp14.x - ballBooObj->trans.x; sp8.z = sp14.z - ballBooObj->trans.z; - ballBooObj->scale.y = 180.0 * (atan2(sp8.x, sp8.z) / M_PI); + ballBooObj->scale.y = atan2d(sp8.x, sp8.z); BoardModelRotYSet(temp_r31->unk04, ballBooObj->scale.y); BoardModelMotionStart(temp_r31->unk04, 1, 0x40000001); } @@ -1246,7 +1246,7 @@ static void BallBooAttack(omObjData *arg0, BallBooWork *arg1) { } } OSu8tof32(&arg1->unk02, &var_f29); - arg0->scale.z = 1.0 + sin(var_f29 * M_PI / 180.0); + arg0->scale.z = 1.0 + sind(var_f29); } static void BallBooFlash(omObjData *arg0, BallBooWork *arg1) { @@ -1258,9 +1258,9 @@ static void BallBooFlash(omObjData *arg0, BallBooWork *arg1) { BoardModelMotionShiftSet(arg1->unk04, 3, 0.0f, 10.0f, 0x40000001); temp_f31 = BoardPlayerRotYGet(stealTarget); BoardPlayerPosGet(stealTarget, &sp8); - sp8.x += 500.0 * sin(-temp_f31 * M_PI / 180.0); + sp8.x += 500.0 * sind(-temp_f31); sp8.y = sp8.y + 160.0f; - sp8.z += 500.0 * cos(-temp_f31 * M_PI / 180.0); + sp8.z += 500.0 * cosd(-temp_f31); arg0->rot.x = (sp8.x - arg0->trans.x) / 72.0f; arg0->rot.y = (sp8.y - arg0->trans.y) / 72.0f; arg0->rot.z = (sp8.z - arg0->trans.z) / 72.0f; @@ -1365,8 +1365,8 @@ void TakeBallStar(void) { ballTakeCoinObj->trans.y = sp8.y + 150.0f; ballTakeCoinObj->trans.z = sp8.z; temp_r31->unk04 = sp8.y; - ballTakeCoinObj->rot.x = 3.0 * sin(4 * M_PI / 9); - ballTakeCoinObj->rot.z = 3.0 * cos(4 * M_PI / 9); + ballTakeCoinObj->rot.x = 3.0 * sind(80); + ballTakeCoinObj->rot.z = 3.0 * cosd(80); ballTakeCoinObj->rot.y = 0.0f; BoardModelPosSet(temp_r31->unk02, ballTakeCoinObj->trans.x, ballTakeCoinObj->trans.y, ballTakeCoinObj->trans.z); BoardModelVisibilitySet(temp_r31->unk02, 1); diff --git a/src/game/board/boo_house.c b/src/game/board/boo_house.c index 3d8cf829..05e5b246 100644 --- a/src/game/board/boo_house.c +++ b/src/game/board/boo_house.c @@ -15,6 +15,8 @@ #include "game/board/player.h" #include "game/board/window.h" +#include "ext_math.h" + // bss static s16 houseMdl[6]; @@ -134,7 +136,7 @@ static void ExecBooHouse(void) { Vec sp20; Vec sp14; Vec sp8; - f32 temp_f31; + float temp_f31; s16 temp_r29; s32 var_r31; s16 var_r30; @@ -187,7 +189,7 @@ static void ExecBooHouse(void) { BoardSpacePosGet(0, temp_r29, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); - temp_f31 = (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + temp_f31 = atan2d(-sp20.x, -sp20.z); sp14.x = -15.0f; sp14.y = temp_f31; sp14.z = 0.0f; @@ -577,7 +579,7 @@ void ApplySteal(void) { s32 temp_r30; s32 temp_r6; s32 var_r31; - f32 var_f31; + float var_f31; BoardModelHookSet(houseMdl[0], "yoko8", booMdl); BoardModelVisibilitySet(booMdl, 1); @@ -749,7 +751,7 @@ void BoardBooHouseTutorialExec(void) { Vec sp20; Vec sp14; Vec sp8; - f32 temp_f31; + float temp_f31; s16 temp_r28; s16 temp_r29; s32 temp_r27; @@ -765,7 +767,7 @@ void BoardBooHouseTutorialExec(void) { BoardSpacePosGet(0, temp_r28, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); - temp_f31 = (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + temp_f31 = atan2d(-sp20.x, -sp20.z); sp14.x = -15.0f; sp14.y = temp_f31; sp14.z = 0.0f; diff --git a/src/game/board/char_wheel.c b/src/game/board/char_wheel.c index a3d53557..e155fa5f 100755 --- a/src/game/board/char_wheel.c +++ b/src/game/board/char_wheel.c @@ -10,7 +10,7 @@ #include "game/board/tutorial.h" #include "game/board/ui.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -374,7 +374,7 @@ static void GrowCharWheel(CharWheelWork *arg0) { if (arg0->unk02 < 90) { arg0->unk02 += 3; } else { - if (_CheckFlag(0x1000B)) { + if (_CheckFlag(FLAG_ID_MAKE(1, 11))) { BoardTutorialHookExec(0x14, 0); } arg0->unk02 = 90; @@ -382,7 +382,7 @@ static void GrowCharWheel(CharWheelWork *arg0) { wheelFXStat = HuAudFXPlay(0x30A); } OSs8tof32(&arg0->unk02, &temp_f30); - HuSprGrpScaleSet(wheelSprGrp, sin(temp_f30 * M_PI / 180.0), sin(temp_f30 * M_PI / 180.0)); + HuSprGrpScaleSet(wheelSprGrp, sind(temp_f30), sind(temp_f30)); } static void ShrinkCharWheel(CharWheelWork *arg0) { @@ -397,7 +397,7 @@ static void ShrinkCharWheel(CharWheelWork *arg0) { targetF = 0; } OSs8tof32(&arg0->unk02, &temp_f30); - HuSprGrpScaleSet(wheelSprGrp, sin(temp_f30 * M_PI / 180.0), sin(temp_f30 * M_PI / 180.0)); + HuSprGrpScaleSet(wheelSprGrp, sind(temp_f30), sind(temp_f30)); } static void KillCharWheelSpr(void) { diff --git a/src/game/board/com.c b/src/game/board/com.c index 3f6cc4bf..d98c4bb7 100755 --- a/src/game/board/com.c +++ b/src/game/board/com.c @@ -9,7 +9,7 @@ #include "game/board/window.h" #include "game/board/boo.h" -#include "math.h" +#include "ext_math.h" typedef BOOL (*UseCheckFunc)(s32 player, s32 item); @@ -625,7 +625,7 @@ s32 BoardComJunctionInputGet(s32 item, Vec *input, s32 num_dirs, float *dirs) { BoardSpacePosGet(0, space, &pos_junction); BoardSpacePosGet(0, space_next, &pos_next); PSVECSubtract(&pos_next, &pos_junction, &dir); - angle = BoardDAngleCalc(90.0 - 180.0 * (atan2(dir.z, dir.x) / M_PI)); + angle = BoardDAngleCalc(90.0 - atan2d(dir.z, dir.x)); if (angle < 0.0f) { angle += 360.0f; } diff --git a/src/game/board/item.c b/src/game/board/item.c index b7b40ddf..949e4983 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -26,6 +26,8 @@ #include "game/board/view.h" #include "game/frand.h" +#include "ext_math.h" + typedef struct { /* 0x00 */ s16 unk00; /* 0x02 */ s16 unk02; @@ -285,7 +287,7 @@ static void ItemSizeShowAnim(void) { BoardModelRotSetV(suitMdl, &spC); BoardModelPosSetV(suitMdl, &sp24); for (i = 0; i < 120; i++) { - sp24.y += 3.0 * sin(var_f31 * M_PI / 180.0); + sp24.y += 3.0 * sind(var_f31); BoardModelPosSetV(suitMdl, &sp24); var_f31 += 9.0f; if (var_f31 >= 360.0f) { @@ -318,7 +320,7 @@ static void ItemRotProc(void) { while (1) { if (temp_r31->unk00 == 0) { sp14 = sp20; - sp14.y += temp_r31->unk04 * sin(temp_r31->unk0C * M_PI / 180.0); + sp14.y += temp_r31->unk04 * sind(temp_r31->unk0C); BoardModelPosSetV(temp_r31->unk02, &sp14); temp_r31->unk0C += temp_r31->unk08; if (temp_r31->unk0C >= 360.0f) { @@ -489,8 +491,8 @@ static Process *ItemShowProc(UnkItemShowProcStruct *arg0, Vec *arg1) { if (arg0 == NULL || arg0->unk1C != 0) { CharModelLayerSetAll(3); sp20.y += 35.0f; - sp20.z += 50.0 * cos(sp14.y * M_PI / 180.0); - sp20.x += 50.0 * sin(sp14.y * M_PI / 180.0); + sp20.z += 50.0 * cosd(sp14.y); + sp20.x += 50.0 * sind(sp14.y); CharModelEffectCreate(1, &sp20); HuPrcSleep(10); } @@ -1124,12 +1126,12 @@ static void ExecItemSwap(void) { for (var_r31 = 0; var_r31 < 60; var_r31++) { for (var_r30 = 0; var_r30 < var_r28 / 2; var_r30++) { sp6C = sp1A4[var_r30]; - sp6C.x += 3.0 * sin((frandmods(360)) * M_PI / 180.0); - sp6C.y += 3.0 * sin((frandmods(360)) * M_PI / 180.0); + sp6C.x += 3.0 * sind(frandmods(360)); + sp6C.y += 3.0 * sind(frandmods(360)); BoardModelPosSetV(sp54[var_r30], &sp6C); sp6C = sp180[var_r30]; - sp6C.x += 3.0 * sin((frandmods(360)) * M_PI / 180.0); - sp6C.y += 3.0 * sin((frandmods(360)) * M_PI / 180.0); + sp6C.x += 3.0 * sind(frandmods(360)); + sp6C.y += 3.0 * sind(frandmods(360)); BoardModelPosSetV(sp54[var_r30 + 3], &sp6C); } HuPrcSleep(2); @@ -1263,8 +1265,8 @@ static void ExecItemSpark(void) { BoardSpaceRotGet(0, GWPlayer[currItemRestore].space_curr, &sp20); BoardModelRotSetV(suitMdl, &sp20); BoardModelPosGet(suitMdl, &sp2C); - sp2C.z += 106.0 * sin(sp20.x * M_PI / 180.0); - sp2C.x -= 106.0 * sin(sp20.z * M_PI / 180.0); + sp2C.z += 106.0 * sind(sp20.x); + sp2C.x -= 106.0 * sind(sp20.z); BoardModelPosSetV(suitMdl, &sp2C); HuAudFXPlay(0x31B); BoardModelMotionStart(suitMdl, 1, 0); @@ -1369,9 +1371,9 @@ static void ExecItemWhistle(void) { temp_r17 = BoardModelMotionCreate(sp20[var_r31], DATA_MAKE_NUM(DATADIR_BGUEST, 40)); BoardModelMotionStart(sp20[var_r31], temp_r17, 0x40000001); sp28[var_r31] = 120.0f; - spF0[var_r31].x = spB4.x + 120.0 * sin(var_f31 * M_PI / 180.0); + spF0[var_r31].x = spB4.x + 120.0 * sind(var_f31); spF0[var_r31].y = 1000.0f + spB4.y + 100.0f * var_r31; - spF0[var_r31].z = spB4.z + 120.0 * cos(var_f31 * M_PI / 180.0); + spF0[var_r31].z = spB4.z + 120.0 * cosd(var_f31); spC0[var_r31].x = spC0[var_r31].z = 0.0f; spC0[var_r31].y = var_f31 + 90.0f; if (spC0[var_r31].y >= 360.0f) { @@ -1490,8 +1492,8 @@ static void ExecItemWhistle(void) { if (spC0[var_r31].y >= 360.0f) { spC0[var_r31].y -= 360.0f; } - spF0[var_r31].x = spB4.x + 120.0 * sin(sp38[var_r31] * M_PI / 180.0); - spF0[var_r31].z = spB4.z + 120.0 * cos(sp38[var_r31] * M_PI / 180.0); + spF0[var_r31].x = spB4.x + 120.0 * sind(sp38[var_r31]); + spF0[var_r31].z = spB4.z + 120.0 * cosd(sp38[var_r31]); BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); } @@ -1523,8 +1525,8 @@ static void ExecItemWhistle(void) { spF0[var_r31].y = spB4.y; sp48[var_r31] = -1.0f; } - spF0[var_r31].x = spB4.x + sp28[var_r31] * sin(sp38[var_r31] * M_PI / 180.0); - spF0[var_r31].z = spB4.z + sp28[var_r31] * cos(sp38[var_r31] * M_PI / 180.0); + spF0[var_r31].x = spB4.x + sp28[var_r31] * sind(sp38[var_r31]); + spF0[var_r31].z = spB4.z + sp28[var_r31] * cosd(sp38[var_r31]); BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); } } @@ -1955,12 +1957,12 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat } } if (j != particle->unk_30) { - var_r31->unk34.x = 60.0 * sin((spC.y - 90.0f) * M_PI / 180.0); + var_r31->unk34.x = 60.0 * sind(spC.y - 90.0f); var_r31->unk34.y = 30.0f; - var_r31->unk34.z = 60.0 * cos((spC.y - 90.0f) * M_PI / 180.0); + var_r31->unk34.z = 60.0 * cosd(spC.y - 90.0f); sp8 = 12.0f; - var_r31->unk08.x = 12.0 * cos((i * 110.0f + 35.0f) * M_PI / 180.0); - var_r31->unk08.y = 12.0 * sin((i * 110.0f + 35.0f) * M_PI / 180.0); + var_r31->unk08.x = 12.0 * cosd(i * 110.0f + 35.0f); + var_r31->unk08.y = 12.0 * sind(i * 110.0f + 35.0f); var_r31->unk08.z = 3.0f + frand8() * 5.0f * 0.003921569f; var_r31->unk14.y = 255.0f; var_r31->unk2C = 25.0f; @@ -1983,9 +1985,9 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat if (var_r31->unk14.y <= 120.0f) { var_r31->unk14.y = 200.0f; temp_f31 = frand8() * 180.0f * 0.003921569f; - var_r31->unk08.x = 6.0 * cos(temp_f31 * M_PI / 180.0); + var_r31->unk08.x = 6.0 * cosd(temp_f31); var_r31->unk08.y = -4.0f; - var_r31->unk08.z = 6.0 * sin(temp_f31 * M_PI / 180.0); + var_r31->unk08.z = 6.0 * sind(temp_f31); var_r31->unk00_s16 = 1; } var_r31->unk40.a = var_r31->unk14.y; @@ -2017,11 +2019,11 @@ static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx ma var_r31->unk34.y = -50.0f + frand8() * 100.0f * 0.003921569f; var_r31->unk34.z = -10.0f + frand8() * 20.0f * 0.003921569f; temp_f31 = 0.5f + frand8() * 3.0f * 0.003921569f; - var_r31->unk08.x = temp_f31 * cos((i * 110.0f + 35.0f) * M_PI / 180.0); - var_r31->unk08.y = temp_f31 * sin((i * 110.0f + 35.0f) * M_PI / 180.0); + var_r31->unk08.x = temp_f31 * cosd(i * 110.0f + 35.0f); + var_r31->unk08.y = temp_f31 * sind(i * 110.0f + 35.0f); var_r31->unk08.z = 0.0f; var_r31->unk14.y = 255.0f; - temp_f30 = 125.0f + frand8() * 0x64 * 0.003921569f; + temp_f30 = 125.0f + frand8() * 100 * 0.003921569f; var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = temp_f30; var_r31->unk00 = 0; var_r31->unk2C = 80.0f + frand8() * 60.0f * 0.003921569f; @@ -2288,9 +2290,9 @@ static void GenieSceneExec(void) { booCamUp.x = sp38.x + (sp50.x - sp38.x) * 0.7f; booCamUp.y = sp38.y + 400.0f; booCamUp.z = sp38.z + (sp50.z - sp38.z) * 0.7f; - booCamPos.x = booCamUp.x + sin(-5 * M_PI / 9) * 1100.0; + booCamPos.x = booCamUp.x + sind(-100) * 1100.0; booCamPos.y = booCamUp.y + 950.0f; - booCamPos.z = booCamUp.z + cos(-5 * M_PI / 9) * 1100.0; + booCamPos.z = booCamUp.z + cosd(-100) * 1100.0; HuAudFXPlay(0x356); BoardWinCreate(2, MAKE_MESSID(18, 27), -1); BoardWinWait(); @@ -2565,7 +2567,7 @@ static void ExecItemBagShow(void) { break; } sp8 = sp14; - sp8.y += 15.0 * sin(var_f31 * M_PI / 180.0); + sp8.y += 15.0 * sind(var_f31); BoardModelPosSetV(suitMdl, &sp8); var_f31 += 36.0f; HuPrcVSleep(); diff --git a/src/game/board/roll.c b/src/game/board/roll.c index 643c4925..918fae5e 100755 --- a/src/game/board/roll.c +++ b/src/game/board/roll.c @@ -12,6 +12,8 @@ #include "game/board/player.h" #include "game/board/tutorial.h" +#include "ext_math.h" + typedef struct { struct { u8 unk00_field0 : 1; @@ -481,7 +483,7 @@ static void DiceMain(omObjData *arg0) { var_f27 = 1.0f; var_f28 = 0.5f; } - arg0->scale.x = var_f27 + var_f28 * sin((float) (temp_r29->unk04 % 180) * M_PI / 180.0); + arg0->scale.x = var_f27 + var_f28 * sind((float) (temp_r29->unk04 % 180)); arg0->scale.y = arg0->scale.x; arg0->scale.z = arg0->scale.x; if (temp_r29->unk04 <= 360) { @@ -502,7 +504,7 @@ static void DiceMain(omObjData *arg0) { temp_r29->unk04 -= 360; } OSs16tof32(&temp_r29->unk04, &temp_f29); - arg0->trans.y += 0.20000000298023224 * sin(temp_f29 * M_PI / 180.0); + arg0->trans.y += 0.2f * sind(temp_f29); break; case 2: temp_r29->unk04++; @@ -523,7 +525,7 @@ static void DiceMain(omObjData *arg0) { OSs16tof32(&temp_r29->unk04, &temp_f29); if (temp_r29->unk04 < 4) { arg0->trans.y += 10.0f + (0.5f * temp_f29); - arg0->scale.x = (arg0->scale.x + (0.10000000149011612 * sin((M_PI * (4.0f * temp_f29)) / 180.0))); + arg0->scale.x += 0.1f * sind(4.0f * temp_f29); arg0->scale.y = arg0->scale.x; arg0->scale.z = arg0->scale.x; } else { diff --git a/src/game/board/shop.c b/src/game/board/shop.c index 71cc0b2f..20608ce6 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -21,7 +21,7 @@ #include "game/board/window.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -262,7 +262,7 @@ static void ExecShop(void) { BoardSpacePosGet(0, temp_r25, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); - temp_f31 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + temp_f31 = atan2d(-sp20.x, -sp20.z); sp14.x = -10.0f; sp14.y = temp_f31; sp14.z = 0.0f; @@ -535,7 +535,7 @@ static void UpdateShopWin(omObjData *arg0) { temp_r28->unk04 = 90; } OSs8tof32(&temp_r28->unk04, &var_f28); - arg0->scale.x = arg0->scale.y = arg0->scale.z = 0.25 * sin(var_f28 * M_PI / 180.0); + arg0->scale.x = arg0->scale.y = arg0->scale.z = 0.25 * sind(var_f28); } if (temp_r28->unk00_field1 == 5) { var_f29 = -12.5f; @@ -575,7 +575,7 @@ static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) { BoardModelMotionSpeedSet(itemMdl, 0.033333335f); } BoardCameraDirGet(&spC); - arg1->rot.y = BoardDAngleCalc(180.0 * (atan2(-spC.x, -spC.z) / M_PI)); + arg1->rot.y = BoardDAngleCalc(atan2d(-spC.x, -spC.z)); OSf32tos16(&arg1->rot.y, &angleVal); } } @@ -689,7 +689,7 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { temp_f27 = -0.08166667f * temp_f27 * temp_f27; arg0->trans.y += temp_f27; BoardCameraDirGet(&sp10); - var_f26 = BoardDAngleCalc(180.0 * (atan2(-sp10.x, -sp10.z) / M_PI)); + var_f26 = BoardDAngleCalc(atan2d(-sp10.x, -sp10.z)); OSf32tos16(&var_f26, &angleVal); } else { arg0->scale.x += arg0->scale.y; @@ -723,7 +723,7 @@ static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) { if (var_f30 > 90.0f) { var_f30 = 90.0f; } - arg0->scale.x = cos(var_f30 * M_PI / 180.0); + arg0->scale.x = cosd(var_f30); arg0->trans.y += arg0->rot.x; angleVal += 8; if (angleVal > 360) { @@ -1137,7 +1137,7 @@ void BoardShopTutorialExec(s32 arg0) { BoardSpacePosGet(0, temp_r27, &sp3C); PSVECSubtract(&sp3C, &sp48, &sp30); PSVECNormalize(&sp30, &sp30); - temp_f31 = 180.0 * (atan2(-sp30.x, -sp30.z) / M_PI); + temp_f31 = atan2d(-sp30.x, -sp30.z); sp24.x = -10.0f; sp24.y = temp_f31; sp24.z = 0.0f; diff --git a/src/game/board/star.c b/src/game/board/star.c index d2613730..2c246d38 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -20,7 +20,7 @@ #include "game/board/ui.h" #include "game/board/window.h" -#include "math.h" +#include "ext_math.h" typedef struct { struct { @@ -207,7 +207,7 @@ static void ExecStar(void) { var_r22 = BoardSpaceLinkFlagSearch(0, temp_r24, 0x04000000); BoardSpacePosGet(0, var_r22, &sp18); PSVECSubtract(&sp18, &sp24, &spC); - temp_f30 = 90.0 - 180.0 * (atan2(spC.z, spC.x) / M_PI); + temp_f30 = 90.0 - atan2d(spC.z, spC.x); temp_f30 = 90.0f * ((temp_f30 + 3.0f) / 90.0f); temp_f29 = BoardPlayerRotYGet(temp_r31); BoardPlayerIdleSet(temp_r31); @@ -511,7 +511,7 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { } } OSs16tof32(&arg0->unk08, &var_f30); - arg1->scale.x = sin((var_f30 + 90.0f) * M_PI / 180.0); + arg1->scale.x = sind(var_f30 + 90.0f); if (arg1->scale.x <= 0.0f) { arg1->scale.x = 0.001f; } diff --git a/src/game/window.c b/src/game/window.c index fbe521c0..114e5f4e 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -10,7 +10,7 @@ #include "game/armem.h" #include "game/audio.h" -#include "math.h" +#include "ext_math.h" #include "stdarg.h" #include "string.h" @@ -1784,7 +1784,7 @@ static s32 winPortraitTbl[] = { WIN_BOWSER_TALK_ANM, WIN_KKID_TALK_ANM, WIN_KOOPA_TALK_ANM, - WIN_CONDOR_TALK_ANM, + WIN_CONDOR_TALK_ANM, WIN_BOO_BLUE_TALK_ANM, WIN_DOLPHIN_TALK_ANM, WIN_BOO_RED_TALK_ANM, @@ -1842,7 +1842,7 @@ void HuWinExAnimIn(s16 window) { HuSprScaleSet(window_ptr->group, 0, 1.0f, 0.0f); HuWinDispOn(window); for (i=0; i<=10; i++) { - HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.0 - 1.1 * cos(M_PI * (9.0f * i) / 180.0)); + HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.0 - 1.1 * cosd(9.0f * i)); HuPrcVSleep(); } HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.0f); @@ -1852,13 +1852,13 @@ void HuWinExAnimIn(s16 window) { HuWinDispOn(window); for (i=0; i<=20; i++) { if (i <= 10) { - HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.1 * (1.0 - cos(M_PI * (9.0f * i) / 180.0))); + HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.1 * (1.0 - cosd(9.0f * i))); } else { HuSprScaleSet(window_ptr->group, 0, 1.0f, 1.0f); } if (i > 10) { s16 time = i - 10; - HuSprScaleSet(window_ptr->group, 2, 1.0f, 1.0 - 1.1 * cos(M_PI * (9.0f * time) / 180.0)); + HuSprScaleSet(window_ptr->group, 2, 1.0f, 1.0 - 1.1 * cosd(9.0f * time)); } HuPrcVSleep(); } @@ -1873,18 +1873,18 @@ void HuWinExAnimOut(s16 window) { _HuWinHomeClear(window_ptr); if (window_ptr->sprite_id[2] == -1) { for (i=0; i<=10; i++) { - HuSprScaleSet(window_ptr->group, 0, 1.0f, cos(M_PI * (9.0f * i) / 180.0)); + HuSprScaleSet(window_ptr->group, 0, 1.0f, cosd(9.0f * i)); HuPrcVSleep(); } HuWinDispOff(window); } else { for (i=0; i<=15; i++) { if (i <= 10) { - HuSprScaleSet(window_ptr->group, 2, 1.0f, cos(M_PI * (9.0f * i) / 180.0)); + HuSprScaleSet(window_ptr->group, 2, 1.0f, cosd(9.0f * i)); } if (i > 5) { s16 time = i - 5; - HuSprScaleSet(window_ptr->group, 0, 1.0f, cos(M_PI * (9.0f * time) / 180.0)); + HuSprScaleSet(window_ptr->group, 0, 1.0f, cosd(9.0f * time)); } HuPrcVSleep(); } @@ -1901,13 +1901,13 @@ void HuWinExAnimPopIn(s16 window, s16 portrait) { s16 i; for (i=0; i<=10; i++) { - HuSprScaleSet(window_ptr->group, 2, 1.0f, cos(M_PI * (9.0f * i) / 180.0)); + HuSprScaleSet(window_ptr->group, 2, 1.0f, cosd(9.0f * i)); HuPrcVSleep(); } HuWinSprKill(window, 2); HuWinExCreatePortrait(window, portrait, 48.0f, 48.0f); for (i=0; i<=10; i++) { - HuSprScaleSet(window_ptr->group, 2, 1.0f, sin(M_PI * (9.0f * i) / 180.0)); + HuSprScaleSet(window_ptr->group, 2, 1.0f, sind(9.0f * i)); HuPrcVSleep(); } HuSprScaleSet(window_ptr->group, 2, 1.0f, 1.0f); From b65b4d7fa7a3299afe1eaae52813fc4d69c1b4dd Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 5 May 2024 06:55:41 -0500 Subject: [PATCH 12/22] Fix m402dll --- configure.py | 4 ++-- src/REL/m402Dll/main.c | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/configure.py b/configure.py index b4ea02e2..a224261f 100644 --- a/configure.py +++ b/configure.py @@ -299,7 +299,7 @@ def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4 def Rel(lib_name, objects): return { "lib": lib_name, - "mw_version": "GC/2.6", + "mw_version": "GC/1.3.2", "cflags": cflags_rel, "host": True, "objects": objects, @@ -802,7 +802,7 @@ config.libs = [ ), Rel('m402Dll', objects = { - Object(NonMatching, "REL/m402Dll/main.c"), + Object(Matching, "REL/m402Dll/main.c"), } ), Rel('m403Dll', diff --git a/src/REL/m402Dll/main.c b/src/REL/m402Dll/main.c index 1d1995e8..3d954828 100755 --- a/src/REL/m402Dll/main.c +++ b/src/REL/m402Dll/main.c @@ -537,7 +537,7 @@ static s16 fn_1_46C(s32 arg0) { return Hu3DModelCreateFile(arg0); } -static void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) { +void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) { s32 var_r30; espBankSet(arg0[arg1 + 1], 10); @@ -1243,7 +1243,8 @@ static void fn_1_43D8(omObjData *arg0) { arg0->func = fn_1_3204; } break; - case 2011: + + case 2010: if (temp_r31->unk54 == lbl_1_bss_26) { temp_r31->unk4C = 2012; temp_r31->unk20 = 10.5f; @@ -1258,6 +1259,10 @@ static void fn_1_43D8(omObjData *arg0) { fn_1_2B30(temp_r31, arg0, temp_r30); } break; + + case 2011: + break; + case 2012: temp_r31->unk1C -= temp_r31->unk20; if (0.0f > temp_r31->unk1C) { @@ -1287,13 +1292,13 @@ static void fn_1_43D8(omObjData *arg0) { temp_r31->unk4C = 2011; } break; - case 0x7DE: + case 2014: if (fn_1_2DBC(temp_r31, temp_r30) != 0) { temp_r31->unk4C++; temp_r31->unk50 = 120; } break; - case 0x7DF: + case 2015: fn_1_313C(temp_r31, temp_r30); temp_r31->unk50 -= 1.0f; if (temp_r31->unk50 == 32) { From 565e274b2af0005ce97d61055e1b5cf4e1498d1e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 5 May 2024 06:58:00 -0500 Subject: [PATCH 13/22] Remove static from fn_1_580 --- src/REL/m402Dll/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/REL/m402Dll/main.c b/src/REL/m402Dll/main.c index 3d954828..0099633c 100755 --- a/src/REL/m402Dll/main.c +++ b/src/REL/m402Dll/main.c @@ -537,12 +537,12 @@ static s16 fn_1_46C(s32 arg0) { return Hu3DModelCreateFile(arg0); } -void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) { +static void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) { s32 var_r30; espBankSet(arg0[arg1 + 1], 10); espBankSet(arg0[arg1 + 4], 11); - if (36000 <= arg2) { // TODO: not matching. + if (36000 <= arg2) { arg2 = 35999; } var_r30 = arg2 / 3600; From 3f6a256b4a071e06704c337b3e3dbd326a8c8a4f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 5 May 2024 10:52:42 -0500 Subject: [PATCH 14/22] Cleanups and almost finish modeseldll fn_1_2490 is down to one weird register allocation issue --- include/game/window.h | 2 + src/REL/bootDll/main.c | 49 +++---- src/REL/instDll/main.c | 95 ++++++------- src/REL/modeseldll/modesel.c | 261 +++++++++++++++++++++++++++++++++++ 4 files changed, 336 insertions(+), 71 deletions(-) create mode 100644 src/REL/modeseldll/modesel.c diff --git a/include/game/window.h b/include/game/window.h index a2ff8eb1..85be8616 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -109,7 +109,9 @@ s16 HuWinChoiceGet(s16 window, s16 start_choice); s16 HuWinChoiceNumGet(s16 window); void HuWinChoiceDisable(s16 window, s16 choice); s16 HuWinChoiceNowGet(s16 window); +#ifndef HUWIN_USE_OLD_DEFS void HuWinMesWait(s16 window); +#endif s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); void HuWinSprPosSet(s16 window, s16 index, float x, float y); diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index b5b6f749..199b450d 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -13,6 +13,8 @@ #include "game/thpmain.h" #include "game/msm.h" #include "math.h" +#include "ext_math.h" + #include "rel_sqrt_consts.h" #include "data_num/title.h" @@ -375,15 +377,15 @@ void fn_1_1178(void) y = lbl_1_bss_3C[i].y; z = lbl_1_bss_3C[i].z; - pos.x = (((sin((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].x); - pos.y = (-sin((M_PI*x)/180.0)*lbl_1_bss_1C[i])+lbl_1_bss_24[i].y; - pos.z = ((cos((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].z; + pos.x = (((sind(y)*cosd(x))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].x); + pos.y = (-sind(x)*lbl_1_bss_1C[i])+lbl_1_bss_24[i].y; + pos.z = ((cosd(y)*cosd(x))*lbl_1_bss_1C[i])+lbl_1_bss_24[i].z; target.x = lbl_1_bss_24[i].x; target.y = lbl_1_bss_24[i].y; target.z = lbl_1_bss_24[i].z; - up.x = sin((M_PI*y)/180.0)*sin((M_PI*x)/180.0); - up.y = cos((M_PI*x)/180.0); - up.z = cos((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + up.x = sind(y)*sind(x); + up.y = cosd(x); + up.z = cosd(y)*sind(x); Hu3DCameraPosSet(lbl_1_data_58[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); } } @@ -408,27 +410,27 @@ void fn_1_152C(void) { if (lbl_1_bss_1C[0] < 100.0f) { lbl_1_bss_1C[0] = 100.0f; } - pos.x = lbl_1_bss_24[0].x + (lbl_1_bss_1C[0] * (sin((M_PI * lbl_1_bss_3C[0].y) / 180.0) * cos((M_PI * lbl_1_bss_3C[0].x) / 180.0))); - pos.y = (lbl_1_bss_24[0].y + (lbl_1_bss_1C[0] * -sin((M_PI * lbl_1_bss_3C[0].x) / 180.0))); - pos.z = (lbl_1_bss_24[0].z + (lbl_1_bss_1C[0] * (cos((M_PI * lbl_1_bss_3C[0].y) / 180.0) * cos((M_PI * lbl_1_bss_3C[0].x) / 180.0)))); + pos.x = lbl_1_bss_24[0].x + (lbl_1_bss_1C[0] * (sind(lbl_1_bss_3C[0].y) * cosd(lbl_1_bss_3C[0].x))); + pos.y = (lbl_1_bss_24[0].y + (lbl_1_bss_1C[0] * -sind(lbl_1_bss_3C[0].x))); + pos.z = (lbl_1_bss_24[0].z + (lbl_1_bss_1C[0] * (cosd(lbl_1_bss_3C[0].y) * cosd(lbl_1_bss_3C[0].x)))); offset.x = lbl_1_bss_24[0].x - pos.x; offset.y = lbl_1_bss_24[0].y - pos.y; offset.z = lbl_1_bss_24[0].z - pos.z; - dir.x = (sin((M_PI * lbl_1_bss_3C[0].y) / 180.0) * sin((M_PI * lbl_1_bss_3C[0].x) / 180.0)); - dir.y = cos((M_PI * lbl_1_bss_3C[0].x) / 180.0); - dir.z = (cos((M_PI * lbl_1_bss_3C[0].y) / 180.0) * sin((M_PI * lbl_1_bss_3C[0].x) / 180.0)); + dir.x = (sind(lbl_1_bss_3C[0].y) * sind(lbl_1_bss_3C[0].x)); + dir.y = cosd(lbl_1_bss_3C[0].x); + dir.z = (cosd(lbl_1_bss_3C[0].y) * sind(lbl_1_bss_3C[0].x)); z_rot = lbl_1_bss_3C[0].z; - y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cos((M_PI * z_rot) / 180.0)) - + dir.y * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.z * sin((M_PI * z_rot) / 180.0)) - + dir.z * (offset.x * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.y * sin((M_PI * z_rot) / 180.0)); + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); - y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cos((M_PI * z_rot) / 180.0)) - + dir.x * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.z * sin((M_PI * z_rot) / 180.0)) - + dir.z * (offset.y * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.x * sin((M_PI * z_rot) / 180.0)); + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); - y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cos((M_PI * z_rot) / 180.0)) - + (dir.x * (offset.x * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) - offset.y * sin((M_PI * z_rot) / 180.0)) - + dir.y * (offset.y * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) + offset.x * sin((M_PI * z_rot) / 180.0))); + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); PSVECCrossProduct(&dir, &offset, &offset); PSVECNormalize(&offset, &offset); @@ -507,7 +509,7 @@ static BOOL TitleProc(void) } HuSprAttrReset(titleGroup, 3, HUSPR_ATTR_DISPOFF); for(i=1; i<=50; i++) { - scale = (cos((i*1.8)*M_PI/180.0)*10.0)+1.0; + scale = (cosd(i*1.8)*10.0)+1.0; HuSprScaleSet(titleGroup, 3, scale, scale); HuSprTPLvlSet(titleGroup, 3, i/50.0); HuPrcVSleep(); @@ -525,7 +527,7 @@ static BOOL TitleProc(void) HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF); return 1; } - scale = (sin((i*scale_time)*M_PI/180.0)*0.1)+0.9; + scale = (sind(i*scale_time)*0.1)+0.9; scale_time += 0.05; if(scale_time > 5) { scale_time = 5; @@ -548,4 +550,3 @@ static BOOL TitleProc(void) return 0; } -char data_pad[] = "\0\0\0\0\0\0\0"; \ No newline at end of file diff --git a/src/REL/instDll/main.c b/src/REL/instDll/main.c index fa3066d4..b5e83a73 100644 --- a/src/REL/instDll/main.c +++ b/src/REL/instDll/main.c @@ -19,6 +19,7 @@ #include "game/chrman.h" #include "math.h" +#include "ext_math.h" #include "rel_sqrt_consts.h" @@ -260,7 +261,7 @@ static void fn_1_994(void) } pos_z = -500.0f; for(i=0; i<=50; i++) { - Hu3DModelPosSet(model, 0.0f, 2500.0*cos(M_PI*(i*1.8f)/180.0)-200.0, pos_z); + Hu3DModelPosSet(model, 0.0f, 2500.0*cosd(i*1.8f)-200.0, pos_z); Hu3DModelRotSet(model, 0, 0, 45.0f*(1.0f-(i/50.0f))); pos_z += 50.0/7.0; Hu3DShadowTPLvlSet(0.5*(i/50.0f)); @@ -269,8 +270,8 @@ static void fn_1_994(void) HuAudFXPlay(1211); Hu3DModelAttrReset(model, 0x40000002); for(i=1; i<=20; i++) { - Hu3DModelPosSet(model, 0.0f, (200.0*(sin(M_PI*(i*2.25f)/180.0)*(1.0/sin(M_PI/4))))-200.0, pos_z); - rot_x = (20-i)*cos(M_PI*(i*13.5f)/180.0); + Hu3DModelPosSet(model, 0.0f, (200.0*(sind(i*2.25f)*(1.0/sind(45))))-200.0, pos_z); + rot_x = (20-i)*cosd(i*13.5f); Hu3DModelRotSet(model, rot_x, 0.0f, 0.0f); pos_z += 50.0/7.0; HuPrcVSleep(); @@ -546,7 +547,7 @@ static void fn_1_17E4(void) CharModelMotionSet(char_tbl[j], mot_tbl[j][1]); } if(time <= 30) { - Hu3DModelPosSet(player_mdl[j], player_pos[j].x, player_pos[j].y+(300.0*sin(M_PI*(time*9.0f)/180.0)), player_pos[j].z-(time*20)); + Hu3DModelPosSet(player_mdl[j], player_pos[j].x, player_pos[j].y+(300.0*sind(time*9.0f)), player_pos[j].z-(time*20)); if(time <= 10) { tplvl = 1-(0.1*time); Hu3DModelTPLvlSet(platform_mdl[j], 0.5*tplvl); @@ -624,11 +625,11 @@ static void fn_1_220C(void) Hu3DMotionTimeSet(model, 40); HuAudFXPlay(lbl_1_data_10C[lbl_1_bss_12*2]); for(i=0; i<=20; i++) { - Hu3DModelPosSet(model, -153.0f-(100.0f-(100.0f*(i/20.0f))), (100.0*sin(M_PI*(i*9.0f)/180.0)) + -150.0 + ofs_x, 356.0f); + Hu3DModelPosSet(model, -153.0f-(100.0f-(100.0f*(i/20.0f))), (100.0*sind(i*9.0f)) + -150.0 + ofs_x, 356.0f); HuPrcVSleep(); } for(i=0; i<=10; i++) { - Hu3DModelPosSet(model, -153.0f, (15.0*sin(M_PI*(i*18.0f)/180.0)) + -150.f + ofs_x, 356.0f); + Hu3DModelPosSet(model, -153.0f, (15.0*sind(i*18.0f)) + -150.f + ofs_x, 356.0f); Hu3DModelRotSet(model, 0.0f, 90-((i/10.0f)*70), 0); HuPrcVSleep(); } @@ -645,7 +646,7 @@ static void fn_1_220C(void) HuPrcSleep(20); HuAudFXPlay(lbl_1_data_10C[(lbl_1_bss_12*2)+1]); for(i=0; i<=30; i++) { - Hu3DModelPosSet(model, (i*5)-153, (50.0*sin(M_PI*(i*9.0f)/180.0)) + -150.0 + ofs_x, (i*20)+356); + Hu3DModelPosSet(model, (i*5)-153, (50.0*sind(i*9.0f)) + -150.0 + ofs_x, (i*20)+356); HuPrcVSleep(); } HuPrcEnd(); @@ -698,7 +699,7 @@ static void fn_1_2804(void) } HuPrcSleep(40); for(i=0; i<=20; i++) { - pos_x = 500.0*cos(M_PI*(i*4.5f)/180.0)+142.0; + pos_x = 500.0*cosd(i*4.5f)+142.0; HuWinPosSet(window, pos_x, 320); HuPrcVSleep(); } @@ -725,7 +726,7 @@ static void fn_1_2804(void) HuWinMesPalSet(window, 7, 0, 0, 192); HuWinPosSet(window_other, 142.0f, 320.0f); for(i=0; i<=10; i++) { - HuWinPosSet(window_other, 30.0*sin(M_PI*(i*9.0f)/180.0)+142.0, 160.0*(1.0-cos(M_PI*(i*9.0f)/180.0))+320.0); + HuWinPosSet(window_other, 30.0*sind(i*9.0f)+142.0, 160.0*(1.0-cosd(i*9.0f))+320.0); HuPrcVSleep(); } HuPrcSleep(5); @@ -734,7 +735,7 @@ static void fn_1_2804(void) HuPrcVSleep(); } for(i=0; i<=20; i++) { - pos_x = 500.0*(1.0-cos(M_PI*(i*4.5f)/180.0))+142.0; + pos_x = 500.0*(1.0-cosd(i*4.5f))+142.0; HuWinPosSet(window, pos_x, 320); HuPrcVSleep(); } @@ -870,9 +871,9 @@ static void fn_1_2FA0(void) for(temp_r31=0; temp_r31<36; temp_r31++) { temp_f30 = temp_r31; if(temp_f30 <= 20.0f) { - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+temp_f29; + temp_f31 = 300.0*cosd(4.5f*temp_f30)+temp_f29; HuSprGrpPosSet(temp_r25, temp_f31, temp_f28); - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(576.0f-(temp_r22/2)-24.0f); + temp_f31 = 300.0*cosd(4.5f*temp_f30)+(576.0f-(temp_r22/2)-24.0f); for(temp_r30=0; temp_r30 0.0f) { if(temp_f30 <= 20.0f) { - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+lbl_1_data_124[2]; + temp_f31 = 300.0*cosd(4.5f*temp_f30)+lbl_1_data_124[2]; HuSprGrpPosSet(temp_r24, temp_f31, 186.0f); - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[2]-88.0f); + temp_f31 = 300.0*cosd(4.5f*temp_f30)+(lbl_1_data_124[2]-88.0f); HuWinPosSet(sp10[0], 16.0f+temp_f31, 168.0f); } } temp_f30 = temp_r31-6; if(temp_f30 > 0.0f) { if(temp_f30 <= 20.0f) { - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+lbl_1_data_124[4]; + temp_f31 = 300.0*cosd(4.5f*temp_f30)+lbl_1_data_124[4]; HuSprGrpPosSet(temp_r23, temp_f31, 242.0f); - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[4]-100.0f); + temp_f31 = 300.0*cosd(4.5f*temp_f30)+(lbl_1_data_124[4]-100.0f); HuWinPosSet(sp10[1], 16.0f+temp_f31, 224.0f); } } temp_f30 = temp_r31-9; if(temp_f30 > 0.0f) { if(temp_f30 <= 20.0f) { - temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[6]-217.0f); + temp_f31 = 300.0*cosd(4.5f*temp_f30)+(lbl_1_data_124[6]-217.0f); HuWinPosSet(sp10[2], 16.0f+temp_f31, 274.0f); } } @@ -919,14 +920,14 @@ static void fn_1_2FA0(void) HuWinMesSet(sp10[2], 0x240002+lbl_1_bss_10+lbl_1_bss_6); } for(temp_r31=0; temp_r31<=10; temp_r31++) { - HuWinPosSet(temp_r27, 30.0*sin(M_PI*(temp_r31*9.0f)/180.0)+temp_f31, 200.0*(1.0-cos(M_PI*(temp_r31*9.0f)/180.0))+274.0); + HuWinPosSet(temp_r27, 30.0*sind(temp_r31*9.0f)+temp_f31, 200.0*(1.0-cosd(temp_r31*9.0f))+274.0); HuPrcVSleep(); } } HuPrcVSleep(); } for(temp_r31=0; temp_r31<20; temp_r31++) { - temp_f30 = 1.0-cos(M_PI*(temp_r31*4.5f)/180.0); + temp_f30 = 1.0-cosd(temp_r31*4.5f); temp_f31 = temp_f29+(500.0f*temp_f30); HuSprGrpPosSet(temp_r25, temp_f31, temp_f28); temp_f31 = ((576.0f-(work.alt_word_len/2))-24.0f)+(500.0f*temp_f30); @@ -968,15 +969,15 @@ static void fn_1_4174(omObjData *object) y = lbl_1_bss_40[i].y; z = lbl_1_bss_40[i].z; - pos.x = (((sin((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_20[i])+lbl_1_bss_28[i].x); - pos.y = (-sin((M_PI*x)/180.0)*lbl_1_bss_20[i])+lbl_1_bss_28[i].y; - pos.z = ((cos((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_20[i])+lbl_1_bss_28[i].z; + pos.x = (((sind(y)*cosd(x))*lbl_1_bss_20[i])+lbl_1_bss_28[i].x); + pos.y = (-sind(x)*lbl_1_bss_20[i])+lbl_1_bss_28[i].y; + pos.z = ((cosd(y)*cosd(x))*lbl_1_bss_20[i])+lbl_1_bss_28[i].z; target.x = lbl_1_bss_28[i].x; target.y = lbl_1_bss_28[i].y; target.z = lbl_1_bss_28[i].z; - up.x = sin((M_PI*y)/180.0)*sin((M_PI*x)/180.0); - up.y = cos((M_PI*x)/180.0); - up.z = cos((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + up.x = sind(y)*sind(x); + up.y = cosd(x); + up.z = cosd(y)*sind(x); Hu3DCameraPosSet(lbl_1_data_144[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); } } @@ -1000,27 +1001,27 @@ static void fn_1_4528(omObjData *object) if (lbl_1_bss_20[0] < 100.0f) { lbl_1_bss_20[0] = 100.0f; } - pos.x = lbl_1_bss_28[0].x + (lbl_1_bss_20[0] * (sin((M_PI * lbl_1_bss_40[0].y) / 180.0) * cos((M_PI * lbl_1_bss_40[0].x) / 180.0))); - pos.y = (lbl_1_bss_28[0].y + (lbl_1_bss_20[0] * -sin((M_PI * lbl_1_bss_40[0].x) / 180.0))); - pos.z = (lbl_1_bss_28[0].z + (lbl_1_bss_20[0] * (cos((M_PI * lbl_1_bss_40[0].y) / 180.0) * cos((M_PI * lbl_1_bss_40[0].x) / 180.0)))); + pos.x = lbl_1_bss_28[0].x + (lbl_1_bss_20[0] * (sind(lbl_1_bss_40[0].y) * cosd(lbl_1_bss_40[0].x))); + pos.y = (lbl_1_bss_28[0].y + (lbl_1_bss_20[0] * -sind(lbl_1_bss_40[0].x))); + pos.z = (lbl_1_bss_28[0].z + (lbl_1_bss_20[0] * (cosd(lbl_1_bss_40[0].y) * cosd(lbl_1_bss_40[0].x)))); offset.x = lbl_1_bss_28[0].x - pos.x; offset.y = lbl_1_bss_28[0].y - pos.y; offset.z = lbl_1_bss_28[0].z - pos.z; - dir.x = (sin((M_PI * lbl_1_bss_40[0].y) / 180.0) * sin((M_PI * lbl_1_bss_40[0].x) / 180.0)); - dir.y = cos((M_PI * lbl_1_bss_40[0].x) / 180.0); - dir.z = (cos((M_PI * lbl_1_bss_40[0].y) / 180.0) * sin((M_PI * lbl_1_bss_40[0].x) / 180.0)); + dir.x = (sind(lbl_1_bss_40[0].y) * sind(lbl_1_bss_40[0].x)); + dir.y = cosd(lbl_1_bss_40[0].x); + dir.z = (cosd(lbl_1_bss_40[0].y) * sind(lbl_1_bss_40[0].x)); z_rot = lbl_1_bss_40[0].z; - y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cos((M_PI * z_rot) / 180.0)) - + dir.y * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.z * sin((M_PI * z_rot) / 180.0)) - + dir.z * (offset.x * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.y * sin((M_PI * z_rot) / 180.0)); + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); - y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cos((M_PI * z_rot) / 180.0)) - + dir.x * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.z * sin((M_PI * z_rot) / 180.0)) - + dir.z * (offset.y * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.x * sin((M_PI * z_rot) / 180.0)); + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); - y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cos((M_PI * z_rot) / 180.0)) - + (dir.x * (offset.x * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) - offset.y * sin((M_PI * z_rot) / 180.0)) - + dir.y * (offset.y * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) + offset.x * sin((M_PI * z_rot) / 180.0))); + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); PSVECCrossProduct(&dir, &offset, &offset); PSVECNormalize(&offset, &offset); @@ -1070,14 +1071,14 @@ static void fn_1_50B0(ModelData *model, Mtx mtx) GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); target.x = target.z = 0.0f; - target.x = lbl_1_data_14C*sin(M_PI*lbl_1_bss_40[0].y/180.0); - target.z = lbl_1_data_14C*cos(M_PI*lbl_1_bss_40[0].y/180.0); + target.x = lbl_1_data_14C*sind(lbl_1_bss_40[0].y); + target.z = lbl_1_data_14C*cosd(lbl_1_bss_40[0].y); target.y = 415.0f; - pos.x = (sin(M_PI*lbl_1_bss_40[0].y/180.0)*cos(M_PI*lbl_1_bss_40[0].x/180.0)*lbl_1_bss_20[0])+lbl_1_bss_28[0].x; - pos.y = (-sin(M_PI*lbl_1_bss_40[0].x/180.0)*lbl_1_bss_20[0])+lbl_1_bss_28[0].y; - pos.z = (cos(M_PI*lbl_1_bss_40[0].y/180.0)*cos(M_PI*lbl_1_bss_40[0].x/180.0)*lbl_1_bss_20[0])+lbl_1_bss_28[0].z; - up.x = -sin(M_PI*lbl_1_bss_40[0].y/180.0); - up.z = -cos(M_PI*lbl_1_bss_40[0].y/180.0); + pos.x = (sind(lbl_1_bss_40[0].y)*cosd(lbl_1_bss_40[0].x)*lbl_1_bss_20[0])+lbl_1_bss_28[0].x; + pos.y = (-sind(lbl_1_bss_40[0].x)*lbl_1_bss_20[0])+lbl_1_bss_28[0].y; + pos.z = (cos(M_PI*lbl_1_bss_40[0].y/180.0)*cosd(lbl_1_bss_40[0].x)*lbl_1_bss_20[0])+lbl_1_bss_28[0].z; + up.x = -sind(lbl_1_bss_40[0].y); + up.z = -cosd(lbl_1_bss_40[0].y); up.y = 0; MTXLookAt(lookat, &pos, &up, &target); MTXLightPerspective(light, lbl_1_bss_C, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); diff --git a/src/REL/modeseldll/modesel.c b/src/REL/modeseldll/modesel.c new file mode 100644 index 00000000..f1032d6a --- /dev/null +++ b/src/REL/modeseldll/modesel.c @@ -0,0 +1,261 @@ +#define HUWIN_USE_OLD_DEFS +#include "game/object.h" +#include "game/gamework_data.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/window.h" +#include "game/object.h" +#include "game/process.h" +#include "game/hsfman.h" +#include "game/pad.h" +#include "game/hsfanim.h" + +#include "ext_math.h" +#include "REL/modeseldll.h" + +s16 lbl_1_data_80[] = { + 16, 17, 18, + 19, 20, 21 +}; + +s32 lbl_1_data_8C[] = { + 0x630030, + 0x630032, + 0x630034, + 0x630036, + 0x630038, + 0x63003A +}; + +s32 lbl_1_data_A4[] = { + 0x630031, + 0x630033, + 0x630035, + 0x630037, + 0x630039, + 0x63003B +}; + +u32 lbl_1_data_BC[] = { + 0x110001, + 0x110002, + 0x110003, + 0x110004, + 0x110005, + 0x110006 +}; + +s16 lbl_1_bss_82; +s16 lbl_1_bss_80; + +void fn_1_3668(void); + +//Scratch is at https://decomp.me/scratch/iirXp +//Register allocation issues at line 180 with load of 1.0 double constant +s32 fn_1_2490(void) +{ + float sp10[2]; + float sp8[2]; + float temp_f31; + float temp_f30; + s16 temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s32 temp_r25; + WindowData *temp_r24; + AnimData *temp_r23; + AnimData *temp_r22; + s16 temp_r21; + fn_1_3668(); + fn_1_1EC0(1); + temp_r25 = HuAudFXPlay(2094); + if(omovlevtno) { + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + } + for(temp_r31=0; temp_r31<=20; temp_r31++) { + temp_f31 = 1.0-sind(90.0*(temp_r31/20.0)); + Hu3DModelPosSet(lbl_1_bss_19A[14], 0, -50.0f+(200.0f*temp_f31), 0); + Hu3DModelPosSet(lbl_1_bss_19A[15], 0, -50.0f+(200.0f*temp_f31), 0); + HuPrcVSleep(); + } + HuPrcSleep(20); + Hu3DModelAttrReset(lbl_1_bss_19A[14], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_19A[15], 0x40000002); + HuAudFXPlay(2093); + HuPrcSleep(120); + HuAudFXPlay(2095); + for(temp_r31=0; temp_r31<=30; temp_r31++) { + temp_f31 = temp_r31/30.0; + Hu3DModelPosSet(lbl_1_bss_19A[14], 0, -50.0f-(20.0f*temp_f31), 0); + HuPrcVSleep(); + } + HuWinMesMaxSizeBetGet(sp10, 0x110000, 0x110006); + lbl_1_bss_82 = HuWinExCreateStyled(-10000, 432-sp10[1], sp10[0], sp10[1], -1, 0); + HuWinMesSpeedSet(lbl_1_bss_82, 0); + temp_r24 = &winData[lbl_1_bss_82]; + temp_r24->active_pad = 1; + HuWinExAnimIn(lbl_1_bss_82); + HuWinMesSet(lbl_1_bss_82, 0x110000); + HuWinMesMaxSizeGet(1, sp8, 0x1A0020); + temp_r29 = HuWinCreate(-10000, 8+(432-sp10[1]-sp8[1]), sp8[0], sp8[1], 0); + HuWinMesSpeedSet(temp_r29, 0); + HuWinBGTPLvlSet(temp_r29, 0); + HuWinMesSet(temp_r29, 0x1A0020); + HuWinDispOff(temp_r29); + while(!Hu3DMotionEndCheck(lbl_1_bss_19A[15])) { + HuPrcVSleep(); + } + Hu3DModelAttrSet(lbl_1_bss_19A[15], 1); + for(temp_r31=0; temp_r31<6; temp_r31++) { + Hu3DModelAttrReset(lbl_1_bss_19A[lbl_1_data_80[temp_r31]], 1); + Hu3DModelAttrSet(lbl_1_bss_19A[lbl_1_data_80[temp_r31]], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_19A[lbl_1_data_80[temp_r31]], 0); + Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[temp_r31]], 0, -50, 0); + } + HuWinMesWait(lbl_1_bss_82); + temp_r26 = 0; + lbl_1_bss_80 = temp_r26; + espAttrReset(lbl_1_bss_152[10], HUSPR_ATTR_DISPOFF); + espBankSet(lbl_1_bss_152[10], 0); + for(temp_r31=0; temp_r31<=10; temp_r31++) { + temp_f31 = temp_r31/10.0f; + Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[lbl_1_bss_80]], 0, -50, 50.0*sind(90.0f*temp_f31)); + espPosSet(lbl_1_bss_152[10], 288.0, -50.0+(106.0*sind(90.0f*temp_f31))); + HuPrcVSleep(); + } + HuWinMesSet(lbl_1_bss_82, lbl_1_data_BC[lbl_1_bss_80]); + HuWinDispOn(temp_r29); + while(1) { + temp_r30 = 0; + if(HuPadDStkRep[0] & PAD_BUTTON_LEFT) { + temp_r30 = -1; + } else if(HuPadDStkRep[0] & PAD_BUTTON_RIGHT) { + temp_r30 = 1; + } + if(temp_r30) { + if(lbl_1_bss_80+temp_r30 < 0) { + lbl_1_bss_80 = 0; + } else if(lbl_1_bss_80+temp_r30 >= 6) { + lbl_1_bss_80 = 5; + } else { + lbl_1_bss_80 += temp_r30; + } + if(temp_r26 != lbl_1_bss_80) { + HuAudFXPlay(0); + for(temp_r31=0; temp_r31<=10; temp_r31++) { + temp_f31 = temp_r31/10.0f; + Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[temp_r26]], 0, -50, 50.0*cosd(90.0f*temp_f31)); + Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[lbl_1_bss_80]], 0, -50, 50.0*sind(90.0f*temp_f31)); + espPosSet(lbl_1_bss_152[10], 288.0, -50.0+(106.0*(1.0-sind(180.0f*temp_f31)))); + if(temp_r31 == 5) { + espBankSet(lbl_1_bss_152[10], lbl_1_bss_80); + } + HuPrcVSleep(); + } + temp_r26 = lbl_1_bss_80; + HuWinMesSet(lbl_1_bss_82, lbl_1_data_BC[lbl_1_bss_80]); + } + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + HuAudFXPlay(2); + break; + } else if(HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + HuAudFXStop(temp_r25); + return -1; + } else { + HuPrcVSleep(); + continue; + } + } + Hu3DModelAttrReset(lbl_1_bss_19A[lbl_1_data_80[lbl_1_bss_80]], 0x40000002); + HuAudSeqAllFadeOut(1000); + for(temp_r31=0; temp_r31<=20; temp_r31++) { + temp_f31 = temp_r31/20.0f; + for(temp_r28=0; temp_r28<6; temp_r28++) { + if(temp_r28 != lbl_1_bss_80) { + Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[temp_r28]], 0, -50-(300.0*(1.0-cosd(90.0f*temp_f31))), 0); + espPosSet(lbl_1_bss_152[10], 288.0, -50.0+(106.0*(cosd(90.0f*temp_f31)))); + } + } + HuPrcVSleep(); + } + HuWinKill(temp_r29); + HuWinExAnimOut(lbl_1_bss_82); + HuAudFXStop(temp_r25); + temp_r27 = HuSprGrpCreate(1); + temp_r21 = HuTHPSprCreateVol("movie/opmov_c00.thp", 0, 3000, 90.0); + HuSprGrpMemberSet(temp_r27, 0, temp_r21); + HuSprPosSet(temp_r27, 0, 288.0f, 240.0f); + HuSprDrawNoSet(temp_r27, 0, 127); + HuPrcSleep(2); + espAttrSet(lbl_1_bss_152[9], HUSPR_ATTR_DISPOFF); + for(temp_r31=0; temp_r31<=10; temp_r31++) { + temp_f31 = temp_r31/10.0; + Hu3DModelPosSet(lbl_1_bss_19A[14], 0, -70.0f-(100.0f*temp_f31), 0); + HuPrcVSleep(); + } + temp_r23 = HuSprAnimRead(HuDataReadNum(lbl_1_data_8C[lbl_1_bss_80], MEMORY_DEFAULT_NUM)); + temp_r22 = HuSprAnimRead(HuDataReadNum(lbl_1_data_A4[lbl_1_bss_80], MEMORY_DEFAULT_NUM)); + Hu3DAnimCreate(temp_r23, lbl_1_bss_19A[22], "ys002_a1"); + Hu3DAnimCreate(temp_r22, lbl_1_bss_19A[22], "ys002_a2"); + Hu3DModelAttrSet(lbl_1_bss_19A[lbl_1_data_80[lbl_1_bss_80]], 1); + Hu3DMotionTimeSet(lbl_1_bss_19A[22], 0); + Hu3DModelAttrReset(lbl_1_bss_19A[22], 1); + Hu3DModelAttrSet(lbl_1_bss_19A[22], 0x40000002); + Hu3DModelPosSet(lbl_1_bss_19A[22], 0, 27, 50); + Hu3DModelScaleSet(lbl_1_bss_19A[22], 1.0f, 1.063f, 1.0f); + for(temp_r31=1; temp_r31<=20; temp_r31++) { + temp_f31 = temp_r31/20.0; + Hu3DModelPosSet(lbl_1_bss_19A[22], 0, 27.0-(60.0*sind(90.0f*temp_f31)), 50); + HuPrcVSleep(); + } + HuPrcSleep(90); + Hu3DFogSet(3000, 8000, 255, 255, 255); + Hu3DModelAttrReset(lbl_1_bss_19A[22], 0x40000002); + HuPrcSleep(60); + temp_f31 =0; + temp_f30 = 5; + while(!HuTHPEndCheck()) { + Hu3DModelPosSet(lbl_1_bss_19A[22], 0, -33.0f+(temp_f31/30.0f), 50.0f-temp_f31); + temp_f31 += temp_f30; + temp_f30 += 5.0f; + HuPrcVSleep(); + } + _ClearFlag(0x1000B); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuTHPClose(); + HuSprGrpKill(temp_r27); + return lbl_1_bss_80; +} + +void fn_1_3668(void) +{ + Vec sp20; + Vec sp14; + Vec sp8; + Hu3DShadowCreate(20, 100, 5000); + Hu3DShadowTPLvlSet(0.3f); + Hu3DShadowSizeSet(192); + sp14.x = sp14.y = sp14.z = 0; + sp20.x = 0; + sp20.z = 300; + sp20.y = 400; + sp8.x = 0; + sp8.y = 1; + sp8.z = 0; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + Hu3DModelAttrReset(lbl_1_bss_19A[15], 1); + Hu3DModelAttrSet(lbl_1_bss_19A[15], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_19A[15], 0); + Hu3DModelAttrReset(lbl_1_bss_19A[14], 1); + Hu3DModelAttrSet(lbl_1_bss_19A[14], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_19A[14], 0); +} \ No newline at end of file From 56a9e44b90424c4e64423fc188a672b3c3480fe8 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Mon, 6 May 2024 04:39:37 +0200 Subject: [PATCH 15/22] Matched everything in present except two functions in present.c --- config/GMPE01_00/rels/present/splits.txt | 4 +- config/GMPE01_00/rels/present/symbols.txt | 225 +++--- configure.py | 8 +- include/REL/present.h | 166 ++++ src/REL/present/camera.c | 235 ++++++ src/REL/present/common.c | 228 ++++++ src/REL/present/init.c | 176 +++++ src/REL/present/main.c | 311 ++++++++ src/REL/present/present.c | 897 ++++++++++++++++++++++ 9 files changed, 2133 insertions(+), 117 deletions(-) create mode 100644 include/REL/present.h create mode 100644 src/REL/present/camera.c create mode 100644 src/REL/present/common.c create mode 100644 src/REL/present/init.c create mode 100644 src/REL/present/main.c create mode 100644 src/REL/present/present.c diff --git a/config/GMPE01_00/rels/present/splits.txt b/config/GMPE01_00/rels/present/splits.txt index 5ac9cc92..3c65c150 100644 --- a/config/GMPE01_00/rels/present/splits.txt +++ b/config/GMPE01_00/rels/present/splits.txt @@ -10,12 +10,12 @@ REL/executor.c: .text start:0x00000000 end:0x000000A0 REL/present/init.c: - .text start:0x000000A0 end:0x00000920 + .text start:0x000000A0 end:0x000006B4 .rodata start:0x00000000 end:0x00000020 .bss start:0x00000000 end:0x00000020 REL/present/camera.c: - .text start:0x00000920 end:0x00001458 + .text start:0x000006B4 end:0x00001458 .rodata start:0x00000020 end:0x000000A0 .data start:0x00000000 end:0x00000050 diff --git a/config/GMPE01_00/rels/present/symbols.txt b/config/GMPE01_00/rels/present/symbols.txt index fb21664c..d6e7f4bc 100644 --- a/config/GMPE01_00/rels/present/symbols.txt +++ b/config/GMPE01_00/rels/present/symbols.txt @@ -68,122 +68,125 @@ fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 _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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x218 -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 -lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 data:float -lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 data:float -lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 data:float -lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 data:double -lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 -lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 -lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 data:float -lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 data:float -lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 data:float -lbl_1_rodata_A2C = .rodata:0x00000A2C; // type:object size:0x4 data:float -lbl_1_rodata_A30 = .rodata:0x00000A30; // type:object size:0x4 data:float -lbl_1_rodata_A34 = .rodata:0x00000A34; // type:object size:0x4 data:float -lbl_1_rodata_A38 = .rodata:0x00000A38; // type:object size:0x4 data:float -lbl_1_rodata_A3C = .rodata:0x00000A3C; // type:object size:0x4 data:float -lbl_1_rodata_A40 = .rodata:0x00000A40; // type:object size:0x4 data:float -lbl_1_rodata_A44 = .rodata:0x00000A44; // type:object size:0x4 data:float -lbl_1_rodata_A48 = .rodata:0x00000A48; // type:object size:0x4 data:float -lbl_1_rodata_A50 = .rodata:0x00000A50; // type:object size:0x8 data:double -lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 data:float -lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 data:double -lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 data:double -lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 data:float -lbl_1_rodata_A74 = .rodata:0x00000A74; // type:object size:0x28 -lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 data:float -lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 data:float -lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 data:float -lbl_1_rodata_AA8 = .rodata:0x00000AA8; // type:object size:0x4 data:float -lbl_1_rodata_AAC = .rodata:0x00000AAC; // type:object size:0x4 data:float -lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 data:float -lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 data:double -lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 data:double -lbl_1_rodata_AC8 = .rodata:0x00000AC8; // type:object size:0x28 -lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 -lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 -lbl_1_rodata_B40 = .rodata:0x00000B40; // type:object size:0x28 -lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 -lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 data:float -lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 data:float -lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 data:float -lbl_1_rodata_B9C = .rodata:0x00000B9C; // type:object size:0x4 data:float -lbl_1_rodata_BA0 = .rodata:0x00000BA0; // type:object size:0x4 data:float -lbl_1_rodata_BA4 = .rodata:0x00000BA4; // type:object size:0xC -lbl_1_rodata_BB0 = .rodata:0x00000BB0; // type:object size:0x4 data:float -lbl_1_rodata_BB4 = .rodata:0x00000BB4; // type:object size:0x4 data:float -lbl_1_rodata_BB8 = .rodata:0x00000BB8; // type:object size:0x4 data:float -lbl_1_rodata_BBC = .rodata:0x00000BBC; // type:object size:0x4 data:float -lbl_1_rodata_BC0 = .rodata:0x00000BC0; // type:object size:0x4 data:float -lbl_1_rodata_BC4 = .rodata:0x00000BC4; // type:object size:0x4 data:float -lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 data:float -lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 data:float -lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x8 data:float -lbl_1_rodata_BD8 = .rodata:0x00000BD8; // type:object size:0xC -lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 data:float -lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 data:float -lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 data:float -lbl_1_rodata_BF0 = .rodata:0x00000BF0; // type:object size:0x4 data:float -lbl_1_rodata_BF4 = .rodata:0x00000BF4; // type:object size:0x4 data:float -lbl_1_rodata_BF8 = .rodata:0x00000BF8; // type:object size:0x8 data:double -lbl_1_rodata_C00 = .rodata:0x00000C00; // type:object size:0x4 data:float -lbl_1_rodata_C08 = .rodata:0x00000C08; // type:object size:0x8 data:double -lbl_1_rodata_C10 = .rodata:0x00000C10; // type:object size:0x4 data:float -lbl_1_rodata_C14 = .rodata:0x00000C14; // type:object size:0x4 data:float -lbl_1_rodata_C18 = .rodata:0x00000C18; // type:object size:0x4 data:float -lbl_1_rodata_C1C = .rodata:0x00000C1C; // type:object size:0x4 data:float -lbl_1_rodata_C20 = .rodata:0x00000C20; // type:object size:0x8 data:double -lbl_1_rodata_C28 = .rodata:0x00000C28; // type:object size:0x8 data:double -lbl_1_rodata_C30 = .rodata:0x00000C30; // type:object size:0x4 data:float -lbl_1_rodata_C34 = .rodata:0x00000C34; // type:object size:0x4 data:float -lbl_1_rodata_C38 = .rodata:0x00000C38; // type:object size:0x4 data:float -lbl_1_rodata_C40 = .rodata:0x00000C40; // type:object size:0x8 data:double -lbl_1_rodata_C48 = .rodata:0x00000C48; // type:object size:0x4 data:float -lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B data:string -lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B data:string -lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A -lbl_1_data_50 = .data:0x00000050; // type:object size:0x1C +__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float +__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x218 scope:local +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 scope:local +lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 scope:local +lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 scope:local +lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A2C = .rodata:0x00000A2C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A30 = .rodata:0x00000A30; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A34 = .rodata:0x00000A34; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A38 = .rodata:0x00000A38; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A3C = .rodata:0x00000A3C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A40 = .rodata:0x00000A40; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A44 = .rodata:0x00000A44; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A48 = .rodata:0x00000A48; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A50 = .rodata:0x00000A50; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A74 = .rodata:0x00000A74; // type:object size:0x28 scope:local +lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AA8 = .rodata:0x00000AA8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AAC = .rodata:0x00000AAC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_AC8 = .rodata:0x00000AC8; // type:object size:0x28 scope:local +lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 scope:local +lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 scope:local +lbl_1_rodata_B40 = .rodata:0x00000B40; // type:object size:0x28 scope:local +lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 scope:local +lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B9C = .rodata:0x00000B9C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BA0 = .rodata:0x00000BA0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BA4 = .rodata:0x00000BA4; // type:object size:0x8 scope:local +lbl_1_rodata_BB0 = .rodata:0x00000BB0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BB4 = .rodata:0x00000BB4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BB8 = .rodata:0x00000BB8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BBC = .rodata:0x00000BBC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC0 = .rodata:0x00000BC0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC4 = .rodata:0x00000BC4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BD8 = .rodata:0x00000BD8; // type:object size:0xC scope:local +lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BF0 = .rodata:0x00000BF0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BF4 = .rodata:0x00000BF4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BF8 = .rodata:0x00000BF8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C00 = .rodata:0x00000C00; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C08 = .rodata:0x00000C08; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C10 = .rodata:0x00000C10; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C14 = .rodata:0x00000C14; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C18 = .rodata:0x00000C18; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C1C = .rodata:0x00000C1C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C20 = .rodata:0x00000C20; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C28 = .rodata:0x00000C28; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C30 = .rodata:0x00000C30; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C34 = .rodata:0x00000C34; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C38 = .rodata:0x00000C38; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C40 = .rodata:0x00000C40; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C48 = .rodata:0x00000C48; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B scope:local data:string +lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B scope:local data:string +lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A scope:local data:string +lbl_1_data_50 = .data:0x00000050; // type:object size:0x1C data:4byte lbl_1_data_6C = .data:0x0000006C; // type:object size:0x10 data:4byte -lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 +lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 scope:local data:string lbl_1_data_84 = .data:0x00000084; // type:object size:0x20 jumptable_1_data_A4 = .data:0x000000A4; // type:object size:0x2C scope:local jumptable_1_data_D0 = .data:0x000000D0; // type:object size:0x1C scope:local -lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x24 -lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A data:string -lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E +lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x24 data:float +lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A scope:local data:string +lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E scope:local data:string jumptable_1_data_16C = .data:0x0000016C; // type:object size:0x34 scope:local lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0xC data:4byte -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte +lbl_1_bss_14 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x8 data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index a224261f..c77657bc 100644 --- a/configure.py +++ b/configure.py @@ -1326,11 +1326,11 @@ config.libs = [ Rel('present', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/present/init.c"), - Object(NonMatching, "REL/present/camera.c"), + Object(Matching, "REL/present/init.c"), + Object(Matching, "REL/present/camera.c"), Object(NonMatching, "REL/present/present.c"), - Object(NonMatching, "REL/present/main.c"), - Object(NonMatching, "REL/present/common.c"), + Object(Matching, "REL/present/main.c"), + Object(Matching, "REL/present/common.c"), } ), Rel('resultDll', diff --git a/include/REL/present.h b/include/REL/present.h new file mode 100644 index 00000000..59c8fc88 --- /dev/null +++ b/include/REL/present.h @@ -0,0 +1,166 @@ +#ifndef PRESENT_H +#define PRESENT_H + +#include "game/object.h" +// #include "REL/option.h" // this causes problems because of the extern bsses + +typedef struct UnkWindowDataStruct { + /* 0x00 */ Process *process; + /* 0x04 */ s16 window; + /* 0x06 */ char unk06[2]; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ u32 unk18; + /* 0x1C */ s32 choice; + /* 0x20 */ s32 unk_20; +} UnkWindowDataStruct; // this already exists in option.h + +typedef struct UnkPresentStruct { + /* 0x00 */ UnkWindowDataStruct *unk_00; + /* 0x04 */ s32 unk_04; +} UnkPresentStruct; + +typedef struct UnkPresentStruct2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ omObjData *unk_10[134]; + /* 0x228 */ UnkWindowDataStruct *unk_228; + /* 0x22C */ UnkWindowDataStruct *unk_22C; + /* 0x230 */ s16 sprite; + /* 0x234 */ s32 unk_234; + /* 0x238 */ s32 unk_238; + /* 0x23C */ float unk_23C; + /* 0x240 */ float unk_240; + /* 0x244 */ float unk_244; + /* 0x248 */ float unk_248; + /* 0x24C */ float unk_24C; + /* 0x250 */ float unk_250; + /* 0x254 */ float unk_254; + /* 0x258 */ float unk_258; + /* 0x25C */ float unk_25C; + /* 0x260 */ float unk_260; + /* 0x264 */ float unk_264; + /* 0x268 */ float unk_268; + /* 0x26C */ float unk_26C; + /* 0x270 */ s32 unk_270[60]; +} UnkPresentStruct2; + +typedef struct UnkPresentStruct3 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ GXColor unk_18; +} UnkPresentStruct3; + +typedef struct UnkPresentStruct4 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ Vec unk_18; +} UnkPresentStruct4; + +typedef struct UnkPresentStruct5 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s16 unk_04; + /* 0x08 */ float x; + /* 0x0C */ float y; + /* 0x10 */ float z; + /* 0x14 */ float unk_14; + /* 0x18 */ s32 unk18[2]; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ float unk_30; + /* 0x34 */ float unk_34; + /* 0x38 */ float unk_38; + /* 0x3C */ s32 unk3C[3]; + /* 0x48 */ float unk_48; + /* 0x4C */ float unk_4C; + /* 0x50 */ s32 unk_50; + /* 0x54 */ s32 unk_54; +} UnkPresentStruct5; + +typedef struct UnkPresentStruct6 { + /* 0x00 */ s16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; +} UnkPresentStruct6; // looks like a struct in option/scene.c + +typedef struct UnkPresentStruct6Weird { + /* 0x00 */ s16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ float unk_0C; +} UnkPresentStruct6Weird; // looks like a struct in option/scene.c + +typedef struct UnkPresentCameraStruct { + /* 0x00 */ Vec pos; + /* 0x0C */ Vec target; + /* 0x18 */ Vec up; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ Vec unk_2C; + /* 0x38 */ Vec unk_38; + /* 0x44 */ float unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ float unk_50; + /* 0x54 */ float unk_54; + /* 0x58 */ Vec unk_58; + /* 0x64 */ Vec unk_64; + /* 0x70 */ float unk70; + /* 0x74 */ float unk74; + /* 0x78 */ float unk78; + /* 0x7C */ float unk_7C; + /* 0x80 */ float unk_80; + /* 0x84 */ float unk_84; + /* 0x88 */ float unk_88; + /* 0x8C */ float unk_8C; + /* 0x90 */ float unk_90; + /* 0x94 */ float unk_94; + /* 0x98 */ float unk_98; +} UnkPresentCameraStruct; + +typedef struct UnkPresentNestedInnerStruct { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk_0C; +} UnkPresentNestedInnerStruct; + +typedef struct UnkPresentNestedOuterStruct { + /* 0x00 */ UnkPresentNestedInnerStruct unk_00[11]; + /* 0xB0 */ s32 unkB0; +} UnkPresentNestedOuterStruct; + +typedef struct UnkPresentStruct7 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ float unk_04; +} UnkPresentStruct7; + +extern omObjData *lbl_1_bss_10; +extern omObjData *lbl_1_bss_8; +extern Process *lbl_1_bss_4; + +void fn_1_144(s16 arg0, s32 arg1, s32 arg2); +void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2); +omObjData *fn_1_6B4(); +void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1); +void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1); +void fn_1_BF8(omObjData *object); +omObjData *fn_1_1458(void); +void fn_1_180C(omObjData *object, s32 arg1); +s32 fn_1_1850(omObjData *object); +omObjData *fn_1_39A8(void); +UnkWindowDataStruct *fn_1_3EA4(s32 arg0); +void fn_1_4080(UnkWindowDataStruct *windowData); +void fn_1_4098(UnkWindowDataStruct *windowData); +void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess); +omObjData *fn_1_42F4(void); +void fn_1_45C0(omObjData *arg0, s32 arg1); +s32 fn_1_4604(omObjData *object); + +#endif diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c new file mode 100644 index 00000000..95c6a85a --- /dev/null +++ b/src/REL/present/camera.c @@ -0,0 +1,235 @@ +#include "ext_math.h" +#include "game/hsfman.h" +#include "game/pad.h" +#include "game/printfunc.h" + +#include "REL/present.h" + +void fn_1_C20(omObjData *object); + +omObjData *fn_1_6B4(void) +{ + omObjData *var_r30; + UnkPresentCameraStruct *var_r31; + + var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8); + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); + var_r30->data = var_r31; + + var_r31->pos.x = 0.0f; + var_r31->pos.y = 0.0f; + var_r31->pos.z = 0.0f; + + var_r31->target.x = 0.0f; + var_r31->target.y = 0.0f; + var_r31->target.z = 0.0f; + + var_r31->up.x = 0.0f; + var_r31->up.y = 1.0f; + var_r31->up.z = 0.0f; + + var_r31->unk_24 = 0.0f; + var_r31->unk_28 = 0.0f; + var_r31->unk_8C = 1.0f; + var_r31->unk_84 = 1.0f; + var_r31->unk_94 = 1.0f; + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f); + fn_1_9A4(var_r30, 0.0f, 0.0f, -600.0f, 1); + fn_1_920(var_r30, 0.0f, 220.0f, 250.0f, 1); + + return var_r30; +} + +void fn_1_8F0(omObjData *object) +{ + HuMemDirectFree(object->data); +} + +void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_58.x = arg8; + var_r31->unk_58.y = arg9; + var_r31->unk_58.z = argA; + + var_r31->unk_2C = var_r31->pos; + var_r31->unk_84 = 0.0f; + var_r31->unk_88 = 1.0f / arg1; +} + +void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_64.x = arg8; + var_r31->unk_64.y = arg9; + var_r31->unk_64.z = argA; + + var_r31->unk_38 = var_r31->target; + var_r31->unk_8C = 0.0f; + var_r31->unk_90 = 1.0f / arg1; +} + +void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_64.y = argA; + var_r31->unk_7C = arg8; + var_r31->unk_80 = arg9; + + var_r31->unk_38.y = var_r31->target.y; + var_r31->unk_50 = var_r31->unk_24; + var_r31->unk_54 = var_r31->unk_28; + var_r31->unk_94 = 0.0f; + var_r31->unk_98 = 1.0f / arg1; +} + +float fn_1_AAC(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + + var_r31 = object->data; + var_f31 = var_r31->unk_24; + return var_f31; +} + +float fn_1_ADC(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + + var_r31 = object->data; + var_f31 = var_r31->unk_28; + return var_f31; +} + +void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + *arg1 = var_r31->pos.x; + *arg2 = var_r31->pos.y; + *arg3 = var_r31->pos.z; +} + +void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + *arg1 = var_r31->target.x; + *arg2 = var_r31->target.y; + *arg3 = var_r31->target.z; +} + +s32 fn_1_B6C(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + + var_r31 = object->data; + var_r30 = 1; + var_r29 = 1; + if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) { + var_r29 = 0; + } + if (!var_r29 && !(var_r31->unk_84 < 1.0f)) { + var_r30 = 0; + } + return var_r30; +} + +void fn_1_BF8(omObjData *object) +{ + fn_1_C20(object); +} + +void fn_1_C20(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + + var_r31 = object->data; + if (var_r31->unk_84 < 1.0f) { + var_f28 = sind(90.0f * var_r31->unk_84); + var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x); + var_r31->pos.y = var_r31->unk_2C.y + var_f28 * (var_r31->unk_58.y - var_r31->unk_2C.y); + var_r31->pos.z = var_r31->unk_2C.z + var_f28 * (var_r31->unk_58.z - var_r31->unk_2C.z); + + if ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) { + var_r31->pos = var_r31->unk_58; + } + } + if (var_r31->unk_8C < 1.0f) { + var_f28 = sind(90.0f * var_r31->unk_8C); + var_r31->target.x = var_r31->unk_38.x + var_f28 * (var_r31->unk_64.x - var_r31->unk_38.x); + var_r31->target.y = var_r31->unk_38.y + var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y); + var_r31->target.z = var_r31->unk_38.z + var_f28 * (var_r31->unk_64.z - var_r31->unk_38.z); + + if ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) { + var_r31->target = var_r31->unk_64; + } + } + if (var_r31->unk_94 < 1.0f) { + var_f28 = sind(90.0f * var_r31->unk_94); + var_r31->target.y = var_r31->unk_38.y + (var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y)); + var_r31->unk_24 = var_r31->unk_50 + (var_f28 * (var_r31->unk_7C - var_r31->unk_50)); + var_r31->unk_28 = var_r31->unk_54 + (var_f28 * (var_r31->unk_80 - var_r31->unk_54)); + + if ((var_r31->unk_94 += var_r31->unk_98) >= 1.0f) { + var_r31->target.y = var_r31->unk_64.y; + var_r31->unk_24 = var_r31->unk_7C; + var_r31->unk_28 = var_r31->unk_80; + } + var_r31->target.x = var_r31->unk_24 * -sind(var_r31->unk_28); + var_r31->target.z = var_r31->unk_24 * cosd(var_r31->unk_28); + } + var_f31 = var_r31->target.x - var_r31->pos.x; + var_f30 = var_r31->target.z - var_r31->pos.z; + + var_r31->unk_24 = sqrtf(var_f31 * var_f31 + var_f30 * var_f30); + var_r31->unk_28 = fmod(-atan2d(var_f31, var_f30), 360.0); + if (var_r31->unk_28 < 0.0f) { + var_r31->unk_28 += 360.0f; + } + Hu3DCameraPosSet(1, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z, var_r31->up.x, var_r31->up.y, var_r31->up.z, var_r31->target.x, + var_r31->target.y, var_r31->target.z); +} + +void fn_1_1198(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + + if (HuPadBtn[0] & PAD_BUTTON_B) { + var_r31 = object->data; + var_r31->target.x = var_r31->target.x + (0.5f * HuPadStkX[0]); + var_r31->target.y = var_r31->target.y + (0.5f * HuPadStkY[0]); + var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]); + var_r31->pos.z = var_r31->pos.z - (0.5f * HuPadTrigR[0]); + var_r31->pos.x = var_r31->pos.x + (0.5f * HuPadSubStkY[0]); + var_r31->pos.y = var_r31->pos.y + (0.5f * HuPadSubStkX[0]); + } +} + +void fn_1_1398(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z); + print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); + print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", var_r31->unk_24, var_r31->unk_28); +} diff --git a/src/REL/present/common.c b/src/REL/present/common.c new file mode 100644 index 00000000..fa2aff10 --- /dev/null +++ b/src/REL/present/common.c @@ -0,0 +1,228 @@ +#include "ext_math.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "REL/present.h" + +void fn_1_4620(omObjData *arg0); +void fn_1_4880(omObjData *arg0); + +omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; + +static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B }; + +void fn_1_4A04(omObjData *object); +float fn_1_4CEC(float arg8, float arg9, float argA); + +omObjData *fn_1_42F4(void) +{ + omObjData *var_r31; + s32 var_lr; + s32 var_r29; + UnkPresentStruct5 *var_r30; + + var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL); + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM); + var_r31->data = var_r30; + var_r30->x = 0.0f; + var_r30->z = 0.0f; + var_r30->y = 0.0f; + var_r30->unk_20 = 0.0f; + var_r30->unk_24 = 0.0f; + var_r30->unk_28 = 0.0f; + var_r30->unk_2C = 0.0f; + var_r30->unk_34 = 0.0f; + var_r30->unk_30 = 0.0f; + var_r31->model[0] = Hu3DModelCreate(HuDataReadNum(0x6E0088, MEMORY_DEFAULT_NUM)); + Hu3DModelLayerSet(var_r31->model[0], 1); + + for (var_r29 = 0; var_r29 < 3; var_r29++) { + var_r31->motion[var_r29] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_BD8[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); + } + Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[var_r30->unk_04 = 0], 0.0f, 8.0f, 0x40000001); + var_r30->unk_50 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 10); + var_r30->unk_54 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 10); + CharModelLayerSetAll(1); + Hu3DModelShadowSet(var_r31->model[0]); + fn_1_45C0(var_r31, 0); + fn_1_4A04(var_r31); + Hu3DModelAttrSet(var_r31->model[0], 1); + + return var_r31; +} + +void fn_1_4534(omObjData *object) +{ + s32 var_r31; + void *var_r29; + void *var_r30; + + var_r29 = object->data; + + for (var_r31 = 0; var_r31 < 1; var_r31++) { + Hu3DModelKill(object->model[var_r31]); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + Hu3DMotionKill(object->motion[var_r31]); + } + HuMemDirectFree(var_r29); +} + +void fn_1_45C0(omObjData *object, s32 arg1) +{ + UnkPresentStruct5 *var_r31; + + var_r31 = object->data; + var_r31->unk_00 = arg1; + object->func = lbl_1_data_1A0[arg1]; + object->unk10 = 0; + object->unk10 = 0; +} + +s32 fn_1_4604(omObjData *object) +{ + s32 *var_r31; + + var_r31 = object->data; + return *var_r31; +} + +void fn_1_4620(omObjData *object) +{ + float var_f31; + omObjData *var_r30; + void *var_r29; + UnkPresentStruct5 *var_r31; + + var_r31 = object->data; + switch (object->unk10) { + case 0: + Hu3DModelAttrReset(object->model[0], 1); + var_r31->x = -300.0f; + var_r31->z = -180.0f; + var_r31->unk_48 = 0.0f; + var_r31->unk_4C = 0.025f; + object->unk10 = 1; + case 1: + var_f31 = sind(90.0f * var_r31->unk_48); + var_f31 *= var_f31; + var_r31->unk_14 = -300.0f + (300.0f * var_f31); + var_r31->unk_2C = var_r31->unk_14 - var_r31->x; + if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + break; + } + var_r31->x = 0.0f; + var_r31->unk_48 = 0.0f; + var_r31->unk_4C = 0.05f; + object->unk10 = 2; + case 2: + var_r31->unk_2C = 0.0f; + var_r31->unk_34 = 0.01f; + if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + break; + } + var_r31->unk_24 = 0.0f; + var_r31->unk_2C = 0.0f; + var_r31->unk_30 = 0.0f; + var_r31->unk_34 = 0.0f; + object->unk10 = 3; + case 3: + fn_1_45C0(object, 0); + break; + default: + break; + } + fn_1_4A04(object); +} + +void fn_1_4880(omObjData *object) +{ + float var_f31; + UnkPresentStruct5 *var_r30; + void *var_r29; + + var_r30 = object->data; + switch (object->unk10) { + case 0: + var_r30->unk_48 = 0.0f; + var_r30->unk_4C = 0.025f; + Hu3DModelAttrReset(object->model[0], 1); + object->unk10 = 1; + case 1: + var_f31 = sind(90.0f * var_r30->unk_48); + var_f31 *= var_f31; + var_r30->unk_14 = -(300.0f * var_f31); + var_r30->unk_2C = var_r30->unk_14 - var_r30->x; + if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) { + break; + } + object->unk10 = 2; + case 2: + Hu3DModelAttrSet(object->model[0], 1); + fn_1_45C0(object, 0); + break; + default: + break; + } + fn_1_4A04(object); + (void)object; +} + +void fn_1_4A04(omObjData *object) +{ + float var_f29; + float var_f30; + double var_f31; + s16 var_r29; + UnkPresentStruct5 *var_r31; + + var_r31 = object->data; + var_r29 = 0; + var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34; + var_r31->unk_38 = sqrtf(var_f30); + if (0.001f <= var_r31->unk_38) { + if (12.0f <= var_r31->unk_38) { + var_r31->unk_2C = var_r31->unk_2C / var_r31->unk_38; + var_r31->unk_34 = var_r31->unk_34 / var_r31->unk_38; + var_r31->unk_38 = 12.0f; + var_r31->unk_2C = 12.0f * var_r31->unk_2C; + var_r31->unk_34 = 12.0f * var_r31->unk_34; + } + var_r31->unk_24 = fn_1_4CEC(var_r31->unk_24, atan2d(var_r31->unk_2C, var_r31->unk_34), 0.4f); + + if (8.0f <= var_r31->unk_38) { + var_r29 = 2; + } else { + var_r29 = 1; + } + } + var_r31->x = var_r31->x + var_r31->unk_2C; + var_r31->z = var_r31->z + var_r31->unk_34; + if (var_r31->unk_04 != var_r29) { + Hu3DMotionShiftSet(object->model[0], object->motion[var_r31->unk_04 = var_r29], 0.0f, 8.0f, 0x40000001); // or 0x41000000 + } + omSetTra(object, var_r31->x, var_r31->y, var_r31->z); + omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28); +} + +float fn_1_4CEC(float arg8, float arg9, float argA) +{ + float var_f30; + float var_f31; + + var_f31 = fmod(arg9 - arg8, 360.0f); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg8 + (var_f31 * argA), 360.0f); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} diff --git a/src/REL/present/init.c b/src/REL/present/init.c new file mode 100644 index 00000000..fabc34fa --- /dev/null +++ b/src/REL/present/init.c @@ -0,0 +1,176 @@ +#include "game/audio.h" +#include "game/esprite.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/present.h" + +omObjData *lbl_1_bss_18; +omObjData *lbl_1_bss_14; +omObjData *lbl_1_bss_10; +omObjData *lbl_1_bss_C; +omObjData *lbl_1_bss_8; +Process *lbl_1_bss_4; +omObjData *lbl_1_bss_0; + +void fn_1_254(void); +void fn_1_45C(void); +void fn_1_5EC(omObjData *object); + +void ModuleProlog(void) +{ + lbl_1_bss_4 = omInitObjMan(150, 8192); + omGameSysInit(lbl_1_bss_4); + HuWinInit(1); + lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC); + lbl_1_bss_0->unk10 = 0; + lbl_1_bss_18 = fn_1_39A8(); +} + +void fn_1_144(s16 arg0, s32 arg1, s32 arg2) +{ + Process *var_r30; + UnkPresentStruct6 *var_r31; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM); + var_r31->unk_00 = arg0; + var_r31->unk_08 = 1.0f / arg2; + if (arg1) { + var_r31->unk_08 = var_r31->unk_08; + var_r31->unk_04 = 0.0f; + } else { + var_r31->unk_08 = -var_r31->unk_08; + var_r31->unk_04 = 1.0f; + } + espDispOn(var_r31->unk_00); + espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet()); + var_r30->user_data = var_r31; +} + +void fn_1_254(void) +{ + UnkPresentStruct6 *var_r31; + + var_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08; + if (var_r31->unk_04 > 1.0f) { + var_r31->unk_04 = 1.0f; + break; + } else if (var_r31->unk_04 < 0.0f) { + var_r31->unk_04 = 0.0f; + break; + } else { + espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + HuPrcVSleep(); + } + } + espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + if (var_r31->unk_08 < 0.0f) { + espDispOff(var_r31->unk_00); + } + HuMemDirectFree(var_r31); + HuPrcEnd(); +} + +void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) +{ + Process *var_r30; + UnkPresentStruct6Weird *var_r31; // TODO correct type? why are only 12 bytes allocated? + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); + var_r31->unk_00 = arg0; + var_r31->unk_0C = 1.0f / arg2; + var_r31->unk_04 = arg8; + + if (arg1) { + var_r31->unk_0C = var_r31->unk_0C; + var_r31->unk_08 = 0.0f; + } else { + var_r31->unk_0C = -var_r31->unk_0C; + var_r31->unk_08 = 1.0f; + } + Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); + Hu3DModelAttrReset(var_r31->unk_00, 1); + var_r30 = HuPrcChildCreate(fn_1_45C, 100, 5376, 0, HuPrcCurrentGet()); + var_r30->user_data = var_r31; +} + +void fn_1_45C(void) +{ + UnkPresentStruct6Weird *var_r31; // TODO correct type? how is 0C possible? + + var_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C; + if (var_r31->unk_08 > 1.0f) { + var_r31->unk_08 = 1.0f; + break; + } else if (var_r31->unk_08 < 0.0f) { + var_r31->unk_08 = 0.0f; + break; + } else { + Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); + HuPrcVSleep(); + } + } + Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); + if (var_r31->unk_0C < 0.0f) { + Hu3DModelAttrSet(var_r31->unk_00, 1); + } + HuMemDirectFree(var_r31); + HuPrcEnd(); +} + +u32 fn_1_550(u16 arg0) +{ + u32 var_r31; + + var_r31 = HuPadBtnDown[0] & arg0; + return var_r31 != 0; +} + +u32 fn_1_584(u16 arg0) +{ + u32 var_r31; + + var_r31 = HuPadDStkRep[0] & arg0; + return var_r31 != 0; +} + +u32 fn_1_5B8(u16 arg0) +{ + u32 var_r31; + + var_r31 = HuPadDStk[0] & arg0; + return var_r31 != 0; +} + +void fn_1_5EC(omObjData *object) +{ + switch (object->unk10) { + case 0: + object->unk10 = 1; + case 1: + if (!omSysExitReq) { + break; + } + object->unk10 = 2; + case 2: + WipeCreate(2, 0, 60); + HuAudFadeOut(1000); + object->unk10 = 3; + break; + case 3: + if (!WipeStatGet()) { + fn_1_3B18(lbl_1_bss_18); + omOvlReturnEx(1, 1); + } + break; + default: + break; + } +} diff --git a/src/REL/present/main.c b/src/REL/present/main.c new file mode 100644 index 00000000..6542a7b7 --- /dev/null +++ b/src/REL/present/main.c @@ -0,0 +1,311 @@ +#include "game/audio.h" +#include "game/hsfman.h" +#include "game/object.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" + +#include "REL/present.h" + +omObjData *lbl_1_bss_20; + +UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; + +void fn_1_3B8C(omObjData *object); +void fn_1_3DB8(omObjData *object); +void fn_1_4040(UnkWindowDataStruct *arg0); +void fn_1_4190(UnkWindowDataStruct *arg0); +void fn_1_41E0(void); +void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1); + +omObjData *fn_1_39A8(void) +{ + omObjData *object; + UnkPresentStruct *var_r30; + + object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL); + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM); + object->data = var_r30; + var_r30->unk_04 = 0; + lbl_1_bss_8 = fn_1_6B4(); + lbl_1_bss_10 = fn_1_1458(); + lbl_1_bss_20 = fn_1_42F4(); + var_r30->unk_00 = fn_1_3EA4(0); + Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); + Hu3DShadowTPLvlSet(0.45f); + Hu3DShadowPosSet(&lbl_1_data_F0.unk_00, &lbl_1_data_F0.unk_0C, &lbl_1_data_F0.unk_18); + if (omovlevtno > 0) { + OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n"); + object->func = fn_1_3DB8; + object->unk10 = 0; + } else { + OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n"); + object->func = fn_1_3B8C; + object->unk10 = 0; + } + + return object; +} + +void fn_1_3B18(omObjData *object) +{ + UnkWindowDataStruct **var_r31; + + var_r31 = object->data; + fn_1_8F0(lbl_1_bss_8); + fn_1_1784(lbl_1_bss_10); + fn_1_4534(lbl_1_bss_20); + fn_1_4040(*var_r31); + HuMemDirectFree(var_r31); +} + +void fn_1_3B8C(omObjData *object) +{ + UnkPresentStruct *var_r30; + + var_r30 = object->data; + + switch (object->unk10) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + object->unk10 = 1; + case 1: + if (WipeStatGet()) { + return; + } + object->unk10 = 2; + case 2: + fn_1_180C(lbl_1_bss_10, 1); + object->unk10 = 3; + case 3: + if (fn_1_1850(lbl_1_bss_10)) { + return; + } + object->unk10 = 4; + case 4: + fn_1_45C0(lbl_1_bss_20, 1); + object->unk10 = 5; + case 5: + if (fn_1_4604(lbl_1_bss_20)) { + return; + } + object->unk10 = 6; + case 6: + HuAudFXPlay(66); + fn_1_4080(var_r30->unk_00); + fn_1_40B0(var_r30->unk_00, 0x320002); + object->unk10 = 7; + case 7: + if (var_r30->unk_00->unk_20) { + return; + } + fn_1_41BC(var_r30->unk_00, 1); + object->unk10 = 8; + case 8: + if (var_r30->unk_00->unk_20) { + return; + } + fn_1_4098(var_r30->unk_00); + if (!var_r30->unk_00->choice) { + var_r30->unk_04 = 0; + object->unk10 = 11; + return; + } else { + object->unk10 = 9; + return; + } + case 9: + fn_1_45C0(lbl_1_bss_20, 2); + object->unk10 = 10; + return; + case 10: + if (fn_1_4604(lbl_1_bss_20)) { + return; + } + object->unk10 = 2; + return; + case 11: + object->unk10 = 12; + var_r30->unk_04 = 0; + case 12: + if (var_r30->unk_00->unk_20) { + return; + } + if (var_r30->unk_04++ >= 60) { + omSysExitReq = 1; + object->func = NULL; + object->unk10 = 0; + } + default: + break; + } +} + +void fn_1_3DB8(omObjData *arg0) +{ + void *sp8; + + sp8 = arg0->data; + switch (arg0->unk10) { + case 0: + fn_1_186C(lbl_1_bss_10, omovlevtno - 1); + arg0->unk10 = 1; + case 1: + fn_1_180C(lbl_1_bss_10, 3); + arg0->unk10 = 2; + case 2: + if (!fn_1_1850(lbl_1_bss_10)) { + arg0->unk10 = 3; + } else { + break; + } + case 3: + arg0->unk10 = 4; + case 4: + omSysExitReq = 1; + arg0->func = NULL; + arg0->unk10 = 0; + break; + default: + break; + } +} + +UnkWindowDataStruct *fn_1_3EA4(s32 arg0) +{ + UnkWindowDataStruct *var_r31; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); + var_r31->unk18 = 0; + var_r31->unk10 = 0; + var_r31->unk14 = 0; + var_r31->unk_20 = 0; + var_r31->process = HuPrcChildCreate(fn_1_41E0, 1000, 8192, 0, lbl_1_bss_4); + var_r31->process->user_data = var_r31; + var_r31->unk08 = arg0; + switch (arg0) { + case 0: + var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); + HuWinBGTPLvlSet(var_r31->window, 0.8f); + HuWinMesSpeedSet(var_r31->window, 0); + HuWinMesPalSet(var_r31->window, 7, 0, 0, 0); + break; + case 1: + var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0); + HuWinAttrSet(var_r31->window, 2048); + HuWinBGTPLvlSet(var_r31->window, 0.0f); + HuWinMesSpeedSet(var_r31->window, 0); + break; + } + HuWinDrawNoSet(var_r31->window, 63); + fn_1_4190(var_r31); + HuSprExecLayerSet(63, 2); + return var_r31; +} + +void fn_1_4040(UnkWindowDataStruct *windowData) +{ + HuWinExCleanup(windowData->window); + HuPrcKill(windowData->process); + HuMemDirectFree(windowData); +} + +void fn_1_4080(UnkWindowDataStruct *windowData) +{ + if (!windowData->unk0C) { + windowData->unk_20 = 1; + } +} + +void fn_1_4098(UnkWindowDataStruct *windowData) +{ + if (windowData->unk0C) { + windowData->unk_20 = 2; + } +} + +void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess) +{ + if (!windowData->unk_20) { + HuWinMesSet(windowData->window, mess); + return; + } + windowData->unk18 = mess; +} + +void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index) +{ + HuWinInsertMesSet(windowData->window, mess, index); +} + +void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) +{ + HuWinPosSet(windowData->window, x, y); +} + +void fn_1_4184(UnkWindowDataStruct *windowData) +{ + windowData->unk0C = 1; +} + +void fn_1_4190(UnkWindowDataStruct *windowData) +{ + windowData->unk0C = 0; +} + +void fn_1_419C(UnkWindowDataStruct *windowData) +{ + if (!windowData->unk_20) { + windowData->unk_20 = 3; + } + windowData->unk10 = 1; +} + +void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) +{ + if (!windowData->unk_20) { + windowData->unk_20 = 4; + } + windowData->unk14 = 1; + windowData->choice = arg1; +} + +void fn_1_41E0(void) +{ + UnkWindowDataStruct *windowData; + + windowData = HuPrcCurrentGet()->user_data; + while (TRUE) { + switch (windowData->unk_20) { + case 1: + windowData->unk0C = 1; + HuWinExAnimIn(windowData->window); + break; + case 2: + HuWinExAnimOut(windowData->window); + windowData->unk0C = 0; + break; + case 3: + winData[windowData->window].active_pad = 1; + HuWinMesWait(windowData->window); + windowData->unk10 = 0; + break; + case 4: + windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice); + windowData->unk14 = 0; + break; + } + if (windowData->unk18 != 0) { + HuWinMesSet(windowData->window, windowData->unk18); + windowData->unk18 = 0; + } + windowData->unk_20 = 0; + if (windowData->unk10 != 0) { + windowData->unk_20 = 3; + } + if (windowData->unk14 != 0) { + windowData->unk_20 = 4; + } + HuPrcVSleep(); + } +} diff --git a/src/REL/present/present.c b/src/REL/present/present.c new file mode 100644 index 00000000..374eb215 --- /dev/null +++ b/src/REL/present/present.c @@ -0,0 +1,897 @@ +#include "ext_math.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" +#include "game/hsfman.h" +#include "game/wipe.h" + +#include "REL/present.h" + +void fn_1_180C(omObjData *object, s32 arg1); +void fn_1_1928(omObjData *arg0); +void fn_1_1FA8(omObjData *object, s32 arg1); +void fn_1_20E8(omObjData *arg0); +void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3); +void fn_1_2708(omObjData *arg0, float arg8, s32 arg1); +void fn_1_2774(omObjData *arg0); +s32 fn_1_28F0(omObjData *object); +void fn_1_2924(omObjData *object); +s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2); +s32 fn_1_2BCC(omObjData *object, s32 arg1); +s32 fn_1_2C5C(omObjData *object, s32 arg1); +s32 fn_1_3394(s32 arg0); +void fn_1_33AC(omObjData *arg0); +s32 fn_1_393C(s32 arg0, s32 arg1); + +UnkPresentStruct3 lbl_1_data_50 = { { 0.0f, 400.0f, 0.0f }, { 0.0f, -400.0f, -500.0f }, { 255, 255, 255, 255 } }; +omObjFunc lbl_1_data_6C[] = { NULL, fn_1_1928, fn_1_20E8, fn_1_33AC }; + +static const s32 lbl_1_rodata_A0[] = { 0x006E006C, 0x006E006B, 0x006E0000, 0x006E0001, 0x006E0002, 0x006E0003, 0x006E0004, 0x006E0005, 0x006E0006, + 0x006E0007, 0x006E0008, 0x006E0009, 0x006E000A, 0x006E000B, 0x006E000C, 0x006E000D, 0x006E000E, 0x006E000F, 0x006E0010, 0x006E0011, 0x006E0012, + 0x006E0013, 0x006E0014, 0x006E0015, 0x006E0016, 0x006E0017, 0x006E0018, 0x006E0019, 0x006E001A, 0x006E001B, 0x006E001C, 0x006E001D, 0x006E001E, + 0x006E001F, 0x006E0020, 0x006E0021, 0x006E0022, 0x006E0023, 0x006E0024, 0x006E0025, 0x006E0026, 0x006E0027, 0x006E0028, 0x006E0029, 0x006E002A, + 0x006E002B, 0x006E002C, 0x006E002D, 0x006E002E, 0x006E002F, 0x006E0030, 0x006E0031, 0x006E0032, 0x006E0033, 0x006E0034, 0x006E0035, 0x006E0036, + 0x006E0037, 0x006E0038, 0x006E0039, 0x006E003A, 0x006E003B, 0x006E003C, 0x006E003D, 0x006E003E, 0x006E003F, 0x006E0040, 0x006E0041, 0x006E0042, + 0x006E0043, 0x006E0044, 0x006E0045, 0x006E0046, 0x006E0047, 0x006E0048, 0x006E0049, 0x006E004A, 0x006E004B, 0x006E004C, 0x006E004D, 0x006E004E, + 0x006E004F, 0x006E0050, 0x006E0051, 0x006E0052, 0x006E0053, 0x006E0054, 0x006E0055, 0x006E0056, 0x006E0057, 0x006E0058, 0x006E0059, 0x006E005A, + 0x006E005B, 0x006E005C, 0x006E005D, 0x006E005E, 0x006E005F, 0x006E0060, 0x006E0061, 0x006E0062, 0x006E0063, 0x006E0064, 0x006E0065, 0x006E0066, + 0x006E0067, 0x006E0068, 0x006E0069, 0x006E006A, 0x006E006D, 0x006E006F, 0x006E0071, 0x006E0073, 0x006E0075, 0x006E0077, 0x006E0079, 0x006E007B, + 0x006E007D, 0x006E006E, 0x006E0070, 0x006E0072, 0x006E0074, 0x006E0076, 0x006E0078, 0x006E007A, 0x006E007C, 0x006E007F, 0x006E0080, 0x006E0081, + 0x006E0082, 0x006E0083, 0x006E0084, 0x006E0085, 0x006E0086 }; + +static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { + { { { 0x00000006, 0x00000002, 0x00000008, 0x00320006 }, { 0x00320042, 0x00000003, 0x00000009, 0x00320007 }, + { 0x00320043, 0x00000004, 0x0000000A, 0x00320008 }, { 0x00320044, 0x00000005, 0x0000000B, 0x00320009 }, + { 0x00320045, 0x00000006, 0x0000000C, 0x0032000A }, { 0x00320046, 0x00000007, 0x0000000D, 0x0032000B }, + { 0x00320047, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000000E, 0x00000014, 0x0032000C }, { 0x00320048, 0x0000000F, 0x00000015, 0x0032000D }, + { 0x00320049, 0x00000010, 0x00000016, 0x0032000E }, { 0x0032004A, 0x00000011, 0x00000017, 0x0032000F }, + { 0x0032004B, 0x00000012, 0x00000018, 0x00320010 }, { 0x0032004C, 0x00000013, 0x00000019, 0x00320011 }, + { 0x0032004D, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000001A, 0x00000020, 0x00320012 }, { 0x0032004E, 0x0000001B, 0x00000021, 0x00320013 }, + { 0x0032004F, 0x0000001C, 0x00000022, 0x00320014 }, { 0x00320050, 0x0000001D, 0x00000023, 0x00320015 }, + { 0x00320051, 0x0000001E, 0x00000024, 0x00320016 }, { 0x00320052, 0x0000001F, 0x00000025, 0x00320017 }, + { 0x00320053, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000026, 0x0000002C, 0x00320018 }, { 0x00320054, 0x00000027, 0x0000002D, 0x00320019 }, + { 0x00320055, 0x00000028, 0x0000002E, 0x0032001A }, { 0x00320056, 0x00000029, 0x0000002F, 0x0032001B }, + { 0x00320057, 0x0000002A, 0x00000030, 0x0032001C }, { 0x00320058, 0x0000002B, 0x00000031, 0x0032001D }, + { 0x00320059, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000032, 0x00000038, 0x0032001E }, { 0x0032005A, 0x00000033, 0x00000039, 0x0032001F }, + { 0x0032005B, 0x00000034, 0x0000003A, 0x00320020 }, { 0x0032005C, 0x00000035, 0x0000003B, 0x00320021 }, + { 0x0032005D, 0x00000036, 0x0000003C, 0x00320022 }, { 0x0032005E, 0x00000037, 0x0000003D, 0x00320023 }, + { 0x0032005F, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000001, 0x00000001, 0xFFFFFFFF, 0x00320041 }, { 0x00320041, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000003E, 0x00000044, 0x00320024 }, { 0x00320060, 0x0000003F, 0x00000045, 0x00320025 }, + { 0x00320061, 0x00000040, 0x00000046, 0x00320026 }, { 0x00320062, 0x00000041, 0x00000047, 0x00320027 }, + { 0x00320063, 0x00000042, 0x00000048, 0x00320028 }, { 0x00320064, 0x00000043, 0x00000049, 0x00320029 }, + { 0x00320065, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000004A, 0x00000050, 0x0032002A }, { 0x00320066, 0x0000004B, 0x00000051, 0x0032002B }, + { 0x00320067, 0x0000004C, 0x00000052, 0x0032002C }, { 0x00320068, 0x0000004D, 0x00000053, 0x0032002D }, + { 0x00320069, 0x0000004E, 0x00000054, 0x0032002E }, { 0x0032006A, 0x0000004F, 0x00000055, 0x0032002F }, + { 0x0032006B, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000056, 0x0000005C, 0x00320030 }, { 0x0032006C, 0x00000057, 0x0000005D, 0x00320031 }, + { 0x0032006D, 0x00000058, 0x0000005E, 0x00320032 }, { 0x0032006E, 0x00000059, 0x0000005F, 0x00320033 }, + { 0x0032006F, 0x0000005A, 0x00000060, 0x00320034 }, { 0x00320070, 0x0000005B, 0x00000061, 0x00320035 }, + { 0x00320071, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x0000000B, 0x00000062, 0xFFFFFFFF, 0x00320036 }, { 0x00320072, 0x00000063, 0xFFFFFFFF, 0x00320037 }, + { 0x00320073, 0x00000064, 0xFFFFFFFF, 0x00320038 }, { 0x00320074, 0x00000065, 0xFFFFFFFF, 0x00320039 }, + { 0x00320075, 0x00000066, 0xFFFFFFFF, 0x0032003A }, { 0x00320076, 0x00000067, 0xFFFFFFFF, 0x0032003B }, + { 0x00320077, 0x00000068, 0xFFFFFFFF, 0x0032003C }, { 0x00320078, 0x00000069, 0xFFFFFFFF, 0x0032003D }, + { 0x00320079, 0x0000006A, 0xFFFFFFFF, 0x0032003E }, { 0x0032007A, 0x0000006B, 0xFFFFFFFF, 0x0032003F }, + { 0x0032007B, 0x0000006C, 0xFFFFFFFF, 0x00320040 } }, + 0x0032007C }, +}; + +omObjData *fn_1_1458(void) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + omObjData *var_r29; + s32 var_r28; + s16 var_r27; + LightData *var_r26; + + var_r29 = omAddObjEx(lbl_1_bss_4, 1003, 0, 0, 1, NULL); + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 868, MEMORY_DEFAULT_NUM); + var_r29->data = var_r31; + var_r31->unk_234 = 0; + var_r31->unk_238 = 0; + var_r31->unk_23C = 0.0f; + var_r31->unk_248 = 1.0f; + var_r31->unk_250 = 0.0f; + + for (var_r30 = 0; var_r30 < 60; var_r30++) { + var_r31->unk_270[var_r30] = GWGameStat.present[var_r30]; + } + + for (var_r30 = 0; var_r30 < 59; var_r30++) { + if (!var_r31->unk_270[var_r30]) { + break; + } + } + if (var_r30 == 59) { + var_r31->unk_270[59] = 1; + } + Hu3DLighInit(); + var_r27 = Hu3DGLightCreateV(&lbl_1_data_50.unk_00, &lbl_1_data_50.unk_0C, &lbl_1_data_50.unk_18); + Hu3DGLightInfinitytSet(var_r27); + Hu3DGLightStaticSet(var_r27, 1); + var_r26 = &Hu3DGlobalLight[var_r27]; + var_r26->unk_00 = var_r26->unk_00 | 0x8000; + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + var_r31->unk_10[var_r30] = omAddObjEx(lbl_1_bss_4, 1003, 1, 0, 1, NULL); + var_r31->unk_10[var_r30]->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_rodata_A0[var_r30], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelLayerSet(var_r31->unk_10[var_r30]->model[0], 0); + Hu3DModelAttrSet(var_r31->unk_10[var_r30]->model[0], 1); + } + + for (var_r28 = 0; var_r28 < 8; var_r28++) { + for (var_r30 = 0; var_r30 < 6; var_r30++) { + Hu3DModelLayerSet(var_r31->unk_10[var_r30 + 2 + var_r28 * 6 * 2]->model[0], 1); + } + } + Hu3DModelShadowMapSet(var_r31->unk_10[0]->model[0]); + fn_1_2924(var_r29); + var_r31->sprite = espEntry(7209095, 0, 0); + espDispOff(var_r31->sprite); + var_r31->unk_228 = fn_1_3EA4(0); + var_r31->unk_22C = fn_1_3EA4(1); + fn_1_2708(var_r29, var_r31->unk_234 * 36.0f, 1); + fn_1_2774(var_r29); + fn_1_180C(var_r29, 0); + + (void)var_r27; + return var_r29; +} + +void fn_1_1784(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + void *var_r29; + + var_r31 = object->data; + fn_1_4040(var_r31->unk_228); + fn_1_4040(var_r31->unk_22C); + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + Hu3DModelKill(var_r31->unk_10[var_r30]->model[0]); + } + espKill(var_r31->sprite); + HuMemDirectFree(var_r31); +} + +void fn_1_180C(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + var_r31->unk_0C = arg1; + object->func = lbl_1_data_6C[arg1]; + object->unk10 = 0; + object->unk10 = 0; +} + +s32 fn_1_1850(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + return var_r31->unk_0C; +} + +static const s32 lbl_1_rodata_9D8[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; +static const s32 lbl_1_rodata_9F8[] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 0 }; + +void fn_1_186C(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + if (arg1 < 48) { + var_r31->unk_234 = lbl_1_rodata_9D8[arg1 / 6]; + var_r31->unk_238 = arg1 % 6; + return; + } + if (arg1 < 59) { + var_r31->unk_234 = 9; + var_r31->unk_238 = (arg1 - 48) % 11; + return; + } + var_r31->unk_234 = 5; + var_r31->unk_238 = 0; +} + +void fn_1_1928(omObjData *object) +{ + Vec sp8; + UnkPresentStruct2 *var_r31; + s32 var_r29; + UnkPresentStruct2 *var_r28; + + var_r31 = object->data; + switch (object->unk10) { + case 0: + var_r31->unk_00 = 0; + var_r31->unk_08 = 0; + object->unk10 = 1; + case 1: + if (var_r31->unk_08) { + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 420.0f, -600.0f, 30); + } else { + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + } + object->unk10 = 2; + case 2: + if (!fn_1_B6C(lbl_1_bss_8) && !var_r31->unk_228->unk_20 && !fn_1_28F0(object)) { + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); + if (var_r31->unk_08) { + var_r29 = 0x320080; + } else if (var_r31->unk_234 == 5) { + var_r29 = 0x320085; + } else { + var_r29 = 0x32007e; + } + fn_1_40B0(var_r31->unk_22C, var_r29); + switch (var_r31->unk_234) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: + case 8: + if (var_r31->unk_08) { + if (fn_1_2B84(object, var_r31->unk_234, 5)) { + var_r29 = 0x320005; + } else { + var_r29 = 0x320082; + } + } else if (fn_1_2BCC(object, var_r31->unk_234) > 0) { + var_r29 = 0x320001; + } else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_9F8[var_r31->unk_234], 0); + break; + case 5: + if (fn_1_2B84(object, 5, 0)) { + var_r29 = 0x320041; + } else { + var_r29 = 0x320084; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + case 9: + if (fn_1_2BCC(object, 9) > 0) { + var_r29 = 0x320083; + } else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + default: + break; + } + if (var_r31->unk_08) { + sp8.x = 0.0f; + sp8.y = 600.0f; + sp8.z = -500.0f; + } else { + sp8.x = 0.0f; + sp8.y = 210.0f; + sp8.z = -500.0f; + } + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + espPosSet(var_r31->sprite, sp8.x, sp8.y); + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + } + object->unk10 = 3; + } + break; + case 3: + if (!var_r31->unk_228->unk_20) { + if (fn_1_550(512) && !var_r31->unk_08) { + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(3); + object->unk10 = 4; + } else if (fn_1_550(256) && !var_r31->unk_08) { + if (var_r31->unk_234 != 5) { + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(2); + fn_1_180C(object, 2); + } + } else if (fn_1_584(8) && !var_r31->unk_08) { + if ((var_r31->unk_234 != 5) && (var_r31->unk_234 != 9)) { + var_r31->unk_08 = 1; + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(0); + object->unk10 = 1; + } + } else if (fn_1_584(4) && var_r31->unk_08) { + var_r31->unk_08 = 0; + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(0); + object->unk10 = 1; + } else if (fn_1_584(1)) { + fn_1_1FA8(object, 1); + HuAudFXPlay(0); + object->unk10 = 2; + } else if (fn_1_584(2)) { + fn_1_1FA8(object, 2); + HuAudFXPlay(0); + object->unk10 = 2; + } + } + break; + case 4: + fn_1_180C(object, 0); + break; + } + fn_1_2774(object); +} + +void fn_1_1FA8(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + float var_f30; + float var_f31; + float var_f29; + + var_r31 = object->data; + + for (var_r30 = 0, var_f31 = 0.0f;; var_r30++) { + var_f31 += 36.0f; + if (arg1 == 1) { + var_r29 = -1; + } else { + var_r29 = 1; + } + var_r31->unk_234 = var_r31->unk_234 + var_r29; + if (var_r31->unk_234 < 0) { + var_r31->unk_234 = 9; + } else if (var_r31->unk_234 >= 10) { + var_r31->unk_234 = 0; + } + if (!((var_r31->unk_08) && ((var_r31->unk_234 == 5) || (var_r31->unk_234 == 9)))) { + break; + } + } + if (arg1 == 1) { + var_f30 = -var_f31; + } else { + var_f30 = var_f31; + } + var_f29 = var_r31->unk_23C + var_f30; + if (!var_r30) { + var_r28 = 30; + } else { + var_r28 = 45; + } + fn_1_2708(object, var_f29, var_r28); +} + +void fn_1_20E8(omObjData *object) +{ + Vec sp8; + UnkPresentStruct2 *var_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r25; + float var_f31; + float var_f30; + + var_r31 = object->data; + var_r29 = var_r31->unk_238; + var_r27 = var_r31->unk_234; + switch (object->unk10) { + case 0: + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, -120.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + var_r31->unk_04 = fn_1_2BCC(object, var_r27) > 0; + var_r31->unk_00 = 0; + var_r31->unk_238 = 0; + if (var_r31->unk_04) { + var_r25 = fn_1_3394(var_r31->unk_234); + for (var_r28 = 0; var_r28 < var_r25; var_r28++) { + if (fn_1_2B84(object, var_r27, var_r28)) { + var_r31->unk_238 = var_r28; + break; + } + } + } + object->unk10 = 1; + case 1: + if (fn_1_B6C(lbl_1_bss_8)) { + break; + } + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); + fn_1_40B0(var_r31->unk_22C, 0x32007F); + + if (var_r31->unk_04) { + // fn_1_40B0(var_r31->unk_228, ((((u8 *)lbl_1_rodata_2B8) + var_r27 * 180 + var_r29 * 16))->unk10); + // fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_00->unk10); // TODO match + } else { + fn_1_40B0(var_r31->unk_228, 0x320003); + } + var_r31->unk_258 = 0.0f; + var_r31->unk_25C = 5.0f / 30.0f; + if (var_r31->unk_04) { + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_04], &sp8.x, &sp8.y, &sp8.z); + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + var_r31->unk_260 = sp8.x; + var_r31->unk_264 = sp8.y; + } else { + var_r31->unk_260 = var_r31->unk_268; + var_r31->unk_264 = var_r31->unk_26C; + } + var_r31->unk_268 = sp8.x; + var_r31->unk_26C = sp8.y; + object->unk10 = 2; + } else { + object->unk10 = 3; + break; + } + case 2: + var_f31 = var_r31->unk_260 + (var_r31->unk_258 * (var_r31->unk_268 - var_r31->unk_260)); + var_f30 = var_r31->unk_264 + (var_r31->unk_258 * (var_r31->unk_26C - var_r31->unk_264)); + espPosSet(var_r31->sprite, var_f31, var_f30); + if ((var_r31->unk_258 = var_r31->unk_258 + var_r31->unk_25C) < 1.0f) { + break; + } + espPosSet(var_r31->sprite, var_r31->unk_268, var_r31->unk_26C); + object->unk10 = 3; + case 3: + if (fn_1_550(512)) { + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(3); + object->unk10 = 4; + } else if (var_r31->unk_04) { + if (fn_1_584(1) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 5); + } else if (fn_1_584(1) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 9); + } else if (fn_1_584(2) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 6); + } else if (fn_1_584(2) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 10); + } else if (fn_1_584(1)) { + var_r29 = fn_1_2C5C(object, 1); + } else if (fn_1_584(2)) { + var_r29 = fn_1_2C5C(object, 2); + } else if (fn_1_584(8)) { + var_r29 = fn_1_2C5C(object, 4); + } else if (fn_1_584(4)) { + var_r29 = fn_1_2C5C(object, 8); + } + } else { + break; + } + if (var_r29 == -1) { + var_r29 = var_r31->unk_238; + } + if (var_r29 != var_r31->unk_238) { + var_r31->unk_238 = var_r29; + object->unk10 = 1; + HuAudFXPlay(0); + } + break; + case 4: + if (var_r31->unk_00) { + fn_1_144(var_r31->sprite, 0, 5); + } + fn_1_180C(object, 1); + break; + default: + break; + } +} + +void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + Mtx sp8; + + Hu3DModelObjMtxGet(object->model[0], "cursor", sp8); + *arg1 = sp8[0][3]; + *arg2 = sp8[1][3]; + *arg3 = sp8[2][3]; +} + +void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = arg0->data; + var_r31->unk_244 = arg8; + var_r31->unk_240 = var_r31->unk_23C; + var_r31->unk_248 = 0.0f; + var_r31->unk_250 = 1.0f / arg1; +} + +void fn_1_2774(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + float var_f31; + s32 var_r30; + + var_r31 = object->data; + + if (var_r31->unk_248 < 1.0f) { + var_f31 = sin(90.0f * var_r31->unk_248 * M_PI / 180.0f); + var_f31 *= var_f31; + var_r31->unk_23C = var_r31->unk_240 + (var_f31 * (var_r31->unk_244 - var_r31->unk_240)); + + if ((var_r31->unk_248 = var_r31->unk_248 + var_r31->unk_250) >= 1.0f) { + var_r31->unk_23C = var_r31->unk_244; + } + } + var_r31->unk_23C = fmod(var_r31->unk_23C, 360.0); + + if (var_r31->unk_23C < 0.0f) { + var_r31->unk_23C += 360.0f; + } + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + omSetRot(var_r31->unk_10[var_r30], 0.0f, var_r31->unk_23C, 0.0f); + } +} + +s32 fn_1_28F0(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + return var_r31->unk_248 < 1.0f; +} + +s32 lbl_1_data_84[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; + +void fn_1_2924(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r27; + s32 var_r29; + + var_r31 = object->data; + Hu3DModelAttrReset(var_r31->unk_10[0]->model[0], 1); + + for (var_r29 = 0; var_r29 < 8; var_r29++) { + if (fn_1_2BCC(object, lbl_1_data_84[var_r29]) > 0) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 109]->model[0], 1); + } + + for (var_r27 = 0, var_r30 = 0; var_r30 < 6; var_r30++) { + if (fn_1_2B84(object, lbl_1_data_84[var_r29], var_r30)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 2 + var_r30]->model[0], 1); + Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 8 + var_r30]->model[0], 1); + var_r27++; + } + } + if (var_r27 >= 6) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 118]->model[0], 1); + } + } + if (fn_1_2BCC(object, 9) > 0) { + Hu3DModelAttrReset(var_r31->unk_10[117]->model[0], 1); + } + for (var_r30 = 0; var_r30 < 11; var_r30++) { + if (fn_1_2B84(object, 9, var_r30)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 98]->model[0], 1); + } + } + if (fn_1_2B84(object, 5, 0)) { + Hu3DModelAttrReset(var_r31->unk_10[1]->model[0], 1); + } + for (var_r30 = 0; var_r30 < 8; var_r30++) { + if (fn_1_2B84(object, lbl_1_data_84[var_r30], 5)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 126]->model[0], 1); + } + } +} + +static const s32 lbl_1_rodata_A74[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; + +s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = arg0->data; + return var_r31->unk_270[arg2 + lbl_1_rodata_A74[arg1]] != 0; +} + +s32 fn_1_2BCC(omObjData *object, s32 arg1) +{ + s32 var_r31; + s32 var_r30; + UnkPresentStruct2 *var_r29; + s32 var_r28; + + var_r28 = fn_1_3394(arg1); + + for (var_r30 = 0, var_r31 = 0; var_r31 < var_r28; var_r31++) { + if (fn_1_2B84(object, arg1, var_r31)) { + var_r30++; + } + } + + return var_r30; +} + +s32 fn_1_2C5C(omObjData *object, s32 arg1) +{ + UnkPresentStruct7 spA4[10]; + Vec sp38; + Vec sp2C; + UnkPresentStruct7 sp24; + float var_f31; + float var_f30; + float var_f29; + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r28; + s32 var_r26; + s32 var_r23; + s32 var_r22; + omObjData *var_r21; + omObjData *var_r19; + s32 var_r18; + s32 var_r17; + + var_r31 = object->data; + + var_r22 = fn_1_3394(var_r31->unk_234); + + var_r18 = fn_1_2BCC(object, var_r31->unk_234); + if (var_r18 == 1) { + return var_r31->unk_238; + } + var_r21 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_04]; + + fn_1_268C(var_r21, &sp38.x, &sp38.y, &sp38.z); + Hu3D3Dto2D(&sp38, 1, &sp38); + for (var_r28 = 0, var_r26 = 0; !var_r28 && (var_r26 < 1); var_r26++) { + for (var_r28 = 0, var_r30 = 0; var_r30 < var_r22; var_r30++) { + if (var_r30 == var_r31->unk_238) { + continue; + } + if (!fn_1_2B84(object, var_r30, var_r31->unk_234)) { + continue; + } + var_r19 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r30].unk_04]; + fn_1_268C(var_r19, &sp2C.x, &sp2C.y, &sp2C.z); + Hu3D3Dto2D(&sp2C, 1, &sp2C); + var_f30 = sp38.x - sp2C.x; + var_f29 = sp38.y - sp2C.y; + var_f31 = fmod(atan2d(var_f30, var_f29), 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if ((arg1 == 1 && var_f31 >= 45.0f && var_f31 < 135.0f) || (arg1 == 2 && var_f31 >= 225.0f && var_f31 < 315.0f) + || (arg1 == 8 && var_f31 >= 135.0f && var_f31 < 225.0f) + || (arg1 == 4 && (var_f31 >= 0.0f && var_f31 < 45.0f || var_f31 >= 315.0f && var_f31 < 360.0f)) + || (arg1 == 5 && var_f31 >= 0.0f && var_f31 < 90.0f) || (arg1 == 9 && var_f31 >= 90.0f && var_f31 < 180.0f) + || (arg1 == 6 && var_f31 >= 270.0f && var_f31 < 360.0f) || (arg1 == 10 && var_f31 >= 180.0f && var_f31 < 270.0f)) { + spA4[var_r28].unk_00 = var_r30; + spA4[var_r28].unk_04 = sqrtf(var_f30 * var_f30 + var_f29 * var_f29); + var_r28++; + } + } + + if (var_r28) { + continue; + } + switch (arg1) { + case 0: + break; + case 1: + L_00003218: + arg1 = 2; + break; + case 2: + L_00003220: + arg1 = 1; + break; + case 3: + break; + case 4: + L_00003228: + arg1 = 8; + break; + case 7: + break; + case 8: + L_00003230: + arg1 = 4; + break; + case 5: + L_00003238: + arg1 = 10; + break; + case 9: + L_00003240: + arg1 = 6; + break; + case 6: + L_00003248: + arg1 = 9; + break; + case 10: + L_00003250: + arg1 = 5; + break; + default: + break; + } + // L_00003254: + } + if (!var_r28) { + return var_r31->unk_238; + } + do { + for (var_r23 = 0, var_r30 = 0; var_r30 < (var_r28 - 1); var_r30++) { + if (spA4[var_r30].unk_04 > spA4[var_r30 + 1].unk_04) { + sp24 = spA4[var_r30 + 1]; + spA4[var_r30 + 1] = spA4[var_r30]; + spA4[var_r30] = sp24; + var_r23 = 1; + } + } + } while (var_r23); + if (var_r26 <= 1) { + var_r17 = 0; + } else { + var_r17 = var_r28 - 1; + } + return spA4[var_r17].unk_00; +} + +static const s32 lbl_1_rodata_AC8[] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; + +s32 fn_1_3394(s32 arg0) +{ + return lbl_1_rodata_AC8[arg0]; +} + +static const s32 lbl_1_rodata_AF0[] = { 2, 14, 26, 38, 50, 0, 62, 74, 86, 0 }; +static const s32 lbl_1_rodata_B18[] = { 8, 20, 32, 44, 56, 0, 68, 80, 92, 0 }; +static const s32 lbl_1_rodata_B40[] = { 126, 127, 128, 129, 130, 0, 131, 132, 133, 0 }; +static const s32 lbl_1_rodata_B68[] = { 118, 119, 120, 121, 122, 0, 123, 124, 125, 0 }; + +void fn_1_33AC(omObjData *object) +{ + f32 var_f29; + f32 var_f30; + f32 var_f31; + UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r30; + UnkPresentStruct2 *var_r28; + s32 var_r27; + + var_r31 = object->data; + switch (object->unk10) { + case 0: + var_f29 = 36.0f * var_r31->unk_234; + fn_1_2708(object, var_f29, 1); + fn_1_2774(object); + Hu3DModelAttrSet(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B68[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B40[var_r31->unk_234]]->model[0], 1); + var_r31->unk_24C = 0.0f; + var_r31->unk_254 = 1.0f / 360.0f; + object->unk10 = 1; + case 1: + WipeCreate(1, 0, 120); + object->unk10 = 2; + case 2: + var_f31 = sind(90.0f * var_r31->unk_24C); + var_f31 *= var_f31; + fn_1_920(lbl_1_bss_8, 0.0f, 820.0f - (600.0f * var_f31), -120.0f, 1); + fn_1_9A4(lbl_1_bss_8, 0.0f, 680.0f - (680.0f * var_f31), -600.0f, 1); + omSetTra(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_AF0[var_r31->unk_234]], 0.0f, 840.0f - (840.0f * var_f31), 0.0f); + if ((var_r31->unk_24C = var_r31->unk_24C + var_r31->unk_254) < 1.0f) { + return; + } + if (fn_1_393C(var_r31->unk_234, var_r31->unk_238)) { + fn_1_334(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1, 0.4f, 30); + } + object->unk10 = 3; + case 3: + fn_1_4080(var_r31->unk_228); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_0C, 0); + fn_1_40B0(var_r31->unk_228, 0x320004); + fn_1_419C(var_r31->unk_228); + object->unk10 = 4; + case 4: + if (var_r31->unk_228->unk_20) { + break; + } + object->unk10 = 5; + case 5: + fn_1_4098(var_r31->unk_228); + object->unk10 = 6; + case 6: + if (!var_r31->unk_228->unk_20) { + fn_1_180C(object, 0); + } + break; + } +} + +static const s32 lbl_1_rodata_BA4[][2] = { { 7, 1 } }; + +s32 fn_1_393C(s32 arg0, s32 arg1) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 1; var_r31++) { + if (arg0 == lbl_1_rodata_BA4[var_r31][0] && arg1 == lbl_1_rodata_BA4[var_r31][1]) { + return 0; + } + } + return 1; +} From 6fd683a1913260501fcad3a82343e29996b0ed6d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 6 May 2024 06:46:19 -0500 Subject: [PATCH 16/22] Fully match present.c --- configure.py | 2 +- include/REL/present.h | 4 +- src/REL/present/present.c | 141 +++++++++++++++----------------------- 3 files changed, 59 insertions(+), 88 deletions(-) diff --git a/configure.py b/configure.py index c77657bc..c26c011b 100644 --- a/configure.py +++ b/configure.py @@ -1328,7 +1328,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(Matching, "REL/present/init.c"), Object(Matching, "REL/present/camera.c"), - Object(NonMatching, "REL/present/present.c"), + Object(Matching, "REL/present/present.c"), Object(Matching, "REL/present/main.c"), Object(Matching, "REL/present/common.c"), } diff --git a/include/REL/present.h b/include/REL/present.h index 59c8fc88..af9b3a01 100644 --- a/include/REL/present.h +++ b/include/REL/present.h @@ -132,8 +132,8 @@ typedef struct UnkPresentNestedInnerStruct { } UnkPresentNestedInnerStruct; typedef struct UnkPresentNestedOuterStruct { - /* 0x00 */ UnkPresentNestedInnerStruct unk_00[11]; - /* 0xB0 */ s32 unkB0; + /* 0x00 */ s32 unk00; + /* 0x04 */ UnkPresentNestedInnerStruct unk_04[11]; } UnkPresentNestedOuterStruct; typedef struct UnkPresentStruct7 { diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 374eb215..8598cf4b 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -41,76 +41,55 @@ static const s32 lbl_1_rodata_A0[] = { 0x006E006C, 0x006E006B, 0x006E0000, 0x006 0x006E0082, 0x006E0083, 0x006E0084, 0x006E0085, 0x006E0086 }; static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { - { { { 0x00000006, 0x00000002, 0x00000008, 0x00320006 }, { 0x00320042, 0x00000003, 0x00000009, 0x00320007 }, - { 0x00320043, 0x00000004, 0x0000000A, 0x00320008 }, { 0x00320044, 0x00000005, 0x0000000B, 0x00320009 }, - { 0x00320045, 0x00000006, 0x0000000C, 0x0032000A }, { 0x00320046, 0x00000007, 0x0000000D, 0x0032000B }, - { 0x00320047, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x0000000E, 0x00000014, 0x0032000C }, { 0x00320048, 0x0000000F, 0x00000015, 0x0032000D }, - { 0x00320049, 0x00000010, 0x00000016, 0x0032000E }, { 0x0032004A, 0x00000011, 0x00000017, 0x0032000F }, - { 0x0032004B, 0x00000012, 0x00000018, 0x00320010 }, { 0x0032004C, 0x00000013, 0x00000019, 0x00320011 }, - { 0x0032004D, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x0000001A, 0x00000020, 0x00320012 }, { 0x0032004E, 0x0000001B, 0x00000021, 0x00320013 }, - { 0x0032004F, 0x0000001C, 0x00000022, 0x00320014 }, { 0x00320050, 0x0000001D, 0x00000023, 0x00320015 }, - { 0x00320051, 0x0000001E, 0x00000024, 0x00320016 }, { 0x00320052, 0x0000001F, 0x00000025, 0x00320017 }, - { 0x00320053, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x00000026, 0x0000002C, 0x00320018 }, { 0x00320054, 0x00000027, 0x0000002D, 0x00320019 }, - { 0x00320055, 0x00000028, 0x0000002E, 0x0032001A }, { 0x00320056, 0x00000029, 0x0000002F, 0x0032001B }, - { 0x00320057, 0x0000002A, 0x00000030, 0x0032001C }, { 0x00320058, 0x0000002B, 0x00000031, 0x0032001D }, - { 0x00320059, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x00000032, 0x00000038, 0x0032001E }, { 0x0032005A, 0x00000033, 0x00000039, 0x0032001F }, - { 0x0032005B, 0x00000034, 0x0000003A, 0x00320020 }, { 0x0032005C, 0x00000035, 0x0000003B, 0x00320021 }, - { 0x0032005D, 0x00000036, 0x0000003C, 0x00320022 }, { 0x0032005E, 0x00000037, 0x0000003D, 0x00320023 }, - { 0x0032005F, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000001, 0x00000001, 0xFFFFFFFF, 0x00320041 }, { 0x00320041, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x0000003E, 0x00000044, 0x00320024 }, { 0x00320060, 0x0000003F, 0x00000045, 0x00320025 }, - { 0x00320061, 0x00000040, 0x00000046, 0x00320026 }, { 0x00320062, 0x00000041, 0x00000047, 0x00320027 }, - { 0x00320063, 0x00000042, 0x00000048, 0x00320028 }, { 0x00320064, 0x00000043, 0x00000049, 0x00320029 }, - { 0x00320065, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x0000004A, 0x00000050, 0x0032002A }, { 0x00320066, 0x0000004B, 0x00000051, 0x0032002B }, - { 0x00320067, 0x0000004C, 0x00000052, 0x0032002C }, { 0x00320068, 0x0000004D, 0x00000053, 0x0032002D }, - { 0x00320069, 0x0000004E, 0x00000054, 0x0032002E }, { 0x0032006A, 0x0000004F, 0x00000055, 0x0032002F }, - { 0x0032006B, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x00000006, 0x00000056, 0x0000005C, 0x00320030 }, { 0x0032006C, 0x00000057, 0x0000005D, 0x00320031 }, - { 0x0032006D, 0x00000058, 0x0000005E, 0x00320032 }, { 0x0032006E, 0x00000059, 0x0000005F, 0x00320033 }, - { 0x0032006F, 0x0000005A, 0x00000060, 0x00320034 }, { 0x00320070, 0x0000005B, 0x00000061, 0x00320035 }, - { 0x00320071, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, - 0x00000000 }, - { { { 0x0000000B, 0x00000062, 0xFFFFFFFF, 0x00320036 }, { 0x00320072, 0x00000063, 0xFFFFFFFF, 0x00320037 }, - { 0x00320073, 0x00000064, 0xFFFFFFFF, 0x00320038 }, { 0x00320074, 0x00000065, 0xFFFFFFFF, 0x00320039 }, - { 0x00320075, 0x00000066, 0xFFFFFFFF, 0x0032003A }, { 0x00320076, 0x00000067, 0xFFFFFFFF, 0x0032003B }, - { 0x00320077, 0x00000068, 0xFFFFFFFF, 0x0032003C }, { 0x00320078, 0x00000069, 0xFFFFFFFF, 0x0032003D }, - { 0x00320079, 0x0000006A, 0xFFFFFFFF, 0x0032003E }, { 0x0032007A, 0x0000006B, 0xFFFFFFFF, 0x0032003F }, - { 0x0032007B, 0x0000006C, 0xFFFFFFFF, 0x00320040 } }, - 0x0032007C }, + { 0x00000006, { { 0x00000002, 0x00000008, 0x00320006, 0x00320042 }, { 0x00000003, 0x00000009, 0x00320007, 0x00320043 }, + { 0x00000004, 0x0000000A, 0x00320008, 0x00320044 }, { 0x00000005, 0x0000000B, 0x00320009, 0x00320045 }, + { 0x00000006, 0x0000000C, 0x0032000A, 0x00320046 }, { 0x00000007, 0x0000000D, 0x0032000B, 0x00320047 }, + }, + }, + { 0x00000006, { { 0x0000000E, 0x00000014, 0x0032000C, 0x00320048 }, { 0x0000000F, 0x00000015, 0x0032000D, 0x00320049 }, + { 0x00000010, 0x00000016, 0x0032000E, 0x0032004A }, { 0x00000011, 0x00000017, 0x0032000F, 0x0032004B }, + { 0x00000012, 0x00000018, 0x00320010, 0x0032004C }, { 0x00000013, 0x00000019, 0x00320011, 0x0032004D }, + }, + }, + { 0x00000006, { { 0x0000001A, 0x00000020, 0x00320012, 0x0032004E }, { 0x0000001B, 0x00000021, 0x00320013, 0x0032004F }, + { 0x0000001C, 0x00000022, 0x00320014, 0x00320050 }, { 0x0000001D, 0x00000023, 0x00320015, 0x00320051 }, + { 0x0000001E, 0x00000024, 0x00320016, 0x00320052 }, { 0x0000001F, 0x00000025, 0x00320017, 0x00320053 }, + }, + }, + { 0x00000006, { { 0x00000026, 0x0000002C, 0x00320018, 0x00320054 }, { 0x00000027, 0x0000002D, 0x00320019, 0x00320055 }, + { 0x00000028, 0x0000002E, 0x0032001A, 0x00320056 }, { 0x00000029, 0x0000002F, 0x0032001B, 0x00320057 }, + { 0x0000002A, 0x00000030, 0x0032001C, 0x00320058 }, { 0x0000002B, 0x00000031, 0x0032001D, 0x00320059 }, + }, + }, + { 0x00000006, { { 0x00000032, 0x00000038, 0x0032001E, 0x0032005A }, { 0x00000033, 0x00000039, 0x0032001F, 0x0032005B }, + { 0x00000034, 0x0000003A, 0x00320020, 0x0032005C }, { 0x00000035, 0x0000003B, 0x00320021, 0x0032005D }, + { 0x00000036, 0x0000003C, 0x00320022, 0x0032005E }, { 0x00000037, 0x0000003D, 0x00320023, 0x0032005F }, + }, + }, + { 0x00000001, { { 0x00000001, 0xFFFFFFFF, 0x00320041, 0x00320041 } } }, + { 0x00000006, { { 0x0000003E, 0x00000044, 0x00320024, 0x00320060 }, { 0x0000003F, 0x00000045, 0x00320025, 0x00320061 }, + { 0x00000040, 0x00000046, 0x00320026, 0x00320062 }, { 0x00000041, 0x00000047, 0x00320027, 0x00320063 }, + { 0x00000042, 0x00000048, 0x00320028, 0x00320064 }, { 0x00000043, 0x00000049, 0x00320029, 0x00320065 }, + }, + }, + { 0x00000006, { { 0x0000004A, 0x00000050, 0x0032002A, 0x00320066 }, { 0x0000004B, 0x00000051, 0x0032002B, 0x00320067 }, + { 0x0000004C, 0x00000052, 0x0032002C, 0x00320068 }, { 0x0000004D, 0x00000053, 0x0032002D, 0x00320069 }, + { 0x0000004E, 0x00000054, 0x0032002E, 0x0032006A }, { 0x0000004F, 0x00000055, 0x0032002F, 0x0032006B }, + }, + }, + { 0x00000006, { { 0x00000056, 0x0000005C, 0x00320030, 0x0032006C }, { 0x00000057, 0x0000005D, 0x00320031, 0x0032006D }, + { 0x00000058, 0x0000005E, 0x00320032, 0x0032006E }, { 0x00000059, 0x0000005F, 0x00320033, 0x0032006F }, + { 0x0000005A, 0x00000060, 0x00320034, 0x00320070 }, { 0x0000005B, 0x00000061, 0x00320035, 0x00320071 }, + }, + }, + { 0x0000000B, { { 0x00000062, 0xFFFFFFFF, 0x00320036, 0x00320072 }, { 0x00000063, 0xFFFFFFFF, 0x00320037, 0x00320073 }, + { 0x00000064, 0xFFFFFFFF, 0x00320038, 0x00320074 }, { 0x00000065, 0xFFFFFFFF, 0x00320039, 0x00320075 }, + { 0x00000066, 0xFFFFFFFF, 0x0032003A, 0x00320076 }, { 0x00000067, 0xFFFFFFFF, 0x0032003B, 0x00320077 }, + { 0x00000068, 0xFFFFFFFF, 0x0032003C, 0x00320078 }, { 0x00000069, 0xFFFFFFFF, 0x0032003D, 0x00320079 }, + { 0x0000006A, 0xFFFFFFFF, 0x0032003E, 0x0032007A }, { 0x0000006B, 0xFFFFFFFF, 0x0032003F, 0x0032007B }, + { 0x0000006C, 0xFFFFFFFF, 0x00320040, 0x0032007C } + }, + }, }; omObjData *fn_1_1458(void) @@ -467,15 +446,14 @@ void fn_1_20E8(omObjData *object) fn_1_40B0(var_r31->unk_22C, 0x32007F); if (var_r31->unk_04) { - // fn_1_40B0(var_r31->unk_228, ((((u8 *)lbl_1_rodata_2B8) + var_r27 * 180 + var_r29 * 16))->unk10); - // fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_00->unk10); // TODO match + fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_0C); } else { fn_1_40B0(var_r31->unk_228, 0x320003); } var_r31->unk_258 = 0.0f; var_r31->unk_25C = 5.0f / 30.0f; if (var_r31->unk_04) { - fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_04], &sp8.x, &sp8.y, &sp8.z); + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_00], &sp8.x, &sp8.y, &sp8.z); Hu3D3Dto2D(&sp8, 1, &sp8); sp8.y -= 15.0f; sp8.x -= 20.0f; @@ -710,20 +688,18 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) if (var_r18 == 1) { return var_r31->unk_238; } - var_r21 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_04]; - fn_1_268C(var_r21, &sp38.x, &sp38.y, &sp38.z); + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk_00], &sp38.x, &sp38.y, &sp38.z); Hu3D3Dto2D(&sp38, 1, &sp38); for (var_r28 = 0, var_r26 = 0; !var_r28 && (var_r26 < 1); var_r26++) { for (var_r28 = 0, var_r30 = 0; var_r30 < var_r22; var_r30++) { if (var_r30 == var_r31->unk_238) { continue; } - if (!fn_1_2B84(object, var_r30, var_r31->unk_234)) { + if (!fn_1_2B84(object, var_r31->unk_234, var_r30)) { continue; } - var_r19 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r30].unk_04]; - fn_1_268C(var_r19, &sp2C.x, &sp2C.y, &sp2C.z); + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r30].unk_00], &sp2C.x, &sp2C.y, &sp2C.z); Hu3D3Dto2D(&sp2C, 1, &sp2C); var_f30 = sp38.x - sp2C.x; var_f29 = sp38.y - sp2C.y; @@ -802,12 +778,7 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) } } } while (var_r23); - if (var_r26 <= 1) { - var_r17 = 0; - } else { - var_r17 = var_r28 - 1; - } - return spA4[var_r17].unk_00; + return spA4[(var_r26 <= 1) ? 0 : var_r28 - 1].unk_00; } static const s32 lbl_1_rodata_AC8[] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; @@ -862,7 +833,7 @@ void fn_1_33AC(omObjData *object) object->unk10 = 3; case 3: fn_1_4080(var_r31->unk_228); - fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_0C, 0); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk08, 0); fn_1_40B0(var_r31->unk_228, 0x320004); fn_1_419C(var_r31->unk_228); object->unk10 = 4; From 36948439b26c34a9313972eb0b9c126b3ea68581 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Wed, 8 May 2024 17:53:15 -0700 Subject: [PATCH 17/22] Matched REL/m403 + some code cleanup --- config/GMPE01_00/rels/m403Dll/symbols.txt | 474 +++--- configure.py | 4 +- include/REL/m403Dll.h | 21 + include/game/hsfanim.h | 2 +- include/game/hsfman.h | 4 +- src/REL/m402Dll/main.c | 36 +- src/REL/m403Dll/main.c | 1592 +++++++++++++++++++++ src/REL/m403Dll/scene.c | 1024 +++++++++++++ src/REL/option/rumble.c | 4 +- src/REL/present/present.c | 8 +- src/REL/w01Dll/main.c | 16 +- src/REL/w04Dll/big_boo.c | 8 +- src/REL/w06Dll/bowser.c | 12 +- src/game/board/item.c | 18 +- src/game/board/pause.c | 18 +- src/game/board/star.c | 8 +- src/game/board/start.c | 10 +- src/game/hsfman.c | 12 +- src/game/saveload.c | 48 +- 19 files changed, 2967 insertions(+), 352 deletions(-) create mode 100755 include/REL/m403Dll.h create mode 100755 src/REL/m403Dll/main.c create mode 100755 src/REL/m403Dll/scene.c diff --git a/config/GMPE01_00/rels/m403Dll/symbols.txt b/config/GMPE01_00/rels/m403Dll/symbols.txt index 312ab162..d46cc4f0 100644 --- a/config/GMPE01_00/rels/m403Dll/symbols.txt +++ b/config/GMPE01_00/rels/m403Dll/symbols.txt @@ -1,256 +1,256 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0x384 -fn_1_424 = .text:0x00000424; // type:function size:0x20 -fn_1_444 = .text:0x00000444; // type:function size:0x3E8 -fn_1_82C = .text:0x0000082C; // type:function size:0x9E8 -fn_1_1214 = .text:0x00001214; // type:function size:0x60 -fn_1_1274 = .text:0x00001274; // type:function size:0x1EC -fn_1_1460 = .text:0x00001460; // type:function size:0x278 -fn_1_16D8 = .text:0x000016D8; // type:function size:0x104 -fn_1_17DC = .text:0x000017DC; // type:function size:0x274 -fn_1_1A50 = .text:0x00001A50; // type:function size:0xA0 -fn_1_1AF0 = .text:0x00001AF0; // type:function size:0x2B8 -fn_1_1DA8 = .text:0x00001DA8; // type:function size:0x28 -fn_1_1DD0 = .text:0x00001DD0; // type:function size:0x388 -fn_1_2158 = .text:0x00002158; // type:function size:0x14C -fn_1_22A4 = .text:0x000022A4; // type:function size:0x2F4 -fn_1_2598 = .text:0x00002598; // type:function size:0xA44 -fn_1_2FDC = .text:0x00002FDC; // type:function size:0x824 -fn_1_3800 = .text:0x00003800; // type:function size:0x94 -fn_1_3894 = .text:0x00003894; // type:function size:0x2EC -fn_1_3B80 = .text:0x00003B80; // type:function size:0x1EC -fn_1_3D6C = .text:0x00003D6C; // type:function size:0xE0 -fn_1_3E4C = .text:0x00003E4C; // type:function size:0x1C0 -fn_1_400C = .text:0x0000400C; // type:function size:0x9C -fn_1_40A8 = .text:0x000040A8; // type:function size:0x480 -fn_1_4528 = .text:0x00004528; // type:function size:0x54 -fn_1_457C = .text:0x0000457C; // type:function size:0x168 -fn_1_46E4 = .text:0x000046E4; // type:function size:0x120 -fn_1_4804 = .text:0x00004804; // type:function size:0x30C -fn_1_4B10 = .text:0x00004B10; // type:function size:0x78 -fn_1_4B88 = .text:0x00004B88; // type:function size:0x11C -fn_1_4CA4 = .text:0x00004CA4; // type:function size:0x78 -fn_1_4D1C = .text:0x00004D1C; // type:function size:0x2D8 -fn_1_4FF4 = .text:0x00004FF4; // type:function size:0x2B8 -fn_1_52AC = .text:0x000052AC; // type:function size:0x154 -fn_1_5400 = .text:0x00005400; // type:function size:0x3E0 -fn_1_57E0 = .text:0x000057E0; // type:function size:0x214 -fn_1_59F4 = .text:0x000059F4; // type:function size:0x198 -fn_1_5B8C = .text:0x00005B8C; // type:function size:0xD8 -fn_1_5C64 = .text:0x00005C64; // type:function size:0xBC -fn_1_5D20 = .text:0x00005D20; // type:function size:0x33C -fn_1_605C = .text:0x0000605C; // type:function size:0x4B0 +fn_1_424 = .text:0x00000424; // type:function size:0x20 scope:local +fn_1_444 = .text:0x00000444; // type:function size:0x3E8 scope:local +fn_1_82C = .text:0x0000082C; // type:function size:0x9E8 scope:local +fn_1_1214 = .text:0x00001214; // type:function size:0x60 scope:local +fn_1_1274 = .text:0x00001274; // type:function size:0x1EC scope:local +fn_1_1460 = .text:0x00001460; // type:function size:0x278 scope:local +fn_1_16D8 = .text:0x000016D8; // type:function size:0x104 scope:local +fn_1_17DC = .text:0x000017DC; // type:function size:0x274 scope:local +fn_1_1A50 = .text:0x00001A50; // type:function size:0xA0 scope:local +fn_1_1AF0 = .text:0x00001AF0; // type:function size:0x2B8 scope:local +fn_1_1DA8 = .text:0x00001DA8; // type:function size:0x28 scope:local +fn_1_1DD0 = .text:0x00001DD0; // type:function size:0x388 scope:local +fn_1_2158 = .text:0x00002158; // type:function size:0x14C scope:local +fn_1_22A4 = .text:0x000022A4; // type:function size:0x2F4 scope:local +fn_1_2598 = .text:0x00002598; // type:function size:0xA44 scope:local +fn_1_2FDC = .text:0x00002FDC; // type:function size:0x824 scope:local +fn_1_3800 = .text:0x00003800; // type:function size:0x94 scope:local +fn_1_3894 = .text:0x00003894; // type:function size:0x2EC scope:local +fn_1_3B80 = .text:0x00003B80; // type:function size:0x1EC scope:local +fn_1_3D6C = .text:0x00003D6C; // type:function size:0xE0 scope:local +fn_1_3E4C = .text:0x00003E4C; // type:function size:0x1C0 scope:local +fn_1_400C = .text:0x0000400C; // type:function size:0x9C scope:local +fn_1_40A8 = .text:0x000040A8; // type:function size:0x480 scope:local +fn_1_4528 = .text:0x00004528; // type:function size:0x54 scope:local +fn_1_457C = .text:0x0000457C; // type:function size:0x168 scope:local +fn_1_46E4 = .text:0x000046E4; // type:function size:0x120 scope:local +fn_1_4804 = .text:0x00004804; // type:function size:0x30C scope:local +fn_1_4B10 = .text:0x00004B10; // type:function size:0x78 scope:local +fn_1_4B88 = .text:0x00004B88; // type:function size:0x11C scope:local +fn_1_4CA4 = .text:0x00004CA4; // type:function size:0x78 scope:local +fn_1_4D1C = .text:0x00004D1C; // type:function size:0x2D8 scope:local +fn_1_4FF4 = .text:0x00004FF4; // type:function size:0x2B8 scope:local +fn_1_52AC = .text:0x000052AC; // type:function size:0x154 scope:local +fn_1_5400 = .text:0x00005400; // type:function size:0x3E0 scope:local +fn_1_57E0 = .text:0x000057E0; // type:function size:0x214 scope:local +fn_1_59F4 = .text:0x000059F4; // type:function size:0x198 scope:local +fn_1_5B8C = .text:0x00005B8C; // type:function size:0xD8 scope:local +fn_1_5C64 = .text:0x00005C64; // type:function size:0xBC scope:local +fn_1_5D20 = .text:0x00005D20; // type:function size:0x33C scope:local +fn_1_605C = .text:0x0000605C; // type:function size:0x4B0 scope:local fn_1_650C = .text:0x0000650C; // type:function size:0x260 fn_1_676C = .text:0x0000676C; // type:function size:0x20 -fn_1_678C = .text:0x0000678C; // type:function size:0x84 -fn_1_6810 = .text:0x00006810; // type:function size:0x4 -fn_1_6814 = .text:0x00006814; // type:function size:0x16C -fn_1_6980 = .text:0x00006980; // type:function size:0x318 -fn_1_6C98 = .text:0x00006C98; // type:function size:0x240 -fn_1_6ED8 = .text:0x00006ED8; // type:function size:0x110 -fn_1_6FE8 = .text:0x00006FE8; // type:function size:0x400 -fn_1_73E8 = .text:0x000073E8; // type:function size:0x5B4 -fn_1_799C = .text:0x0000799C; // type:function size:0xFC -fn_1_7A98 = .text:0x00007A98; // type:function size:0x88 -fn_1_7B20 = .text:0x00007B20; // type:function size:0xB4 -fn_1_7BD4 = .text:0x00007BD4; // type:function size:0x4C -fn_1_7C20 = .text:0x00007C20; // type:function size:0x10 +fn_1_678C = .text:0x0000678C; // type:function size:0x84 scope:local +fn_1_6810 = .text:0x00006810; // type:function size:0x4 scope:local +fn_1_6814 = .text:0x00006814; // type:function size:0x16C scope:local +fn_1_6980 = .text:0x00006980; // type:function size:0x318 scope:local +fn_1_6C98 = .text:0x00006C98; // type:function size:0x240 scope:local +fn_1_6ED8 = .text:0x00006ED8; // type:function size:0x110 scope:local +fn_1_6FE8 = .text:0x00006FE8; // type:function size:0x400 scope:local +fn_1_73E8 = .text:0x000073E8; // type:function size:0x5B4 scope:local +fn_1_799C = .text:0x0000799C; // type:function size:0xFC scope:local +fn_1_7A98 = .text:0x00007A98; // type:function size:0x88 scope:local +fn_1_7B20 = .text:0x00007B20; // type:function size:0xB4 scope:local +fn_1_7BD4 = .text:0x00007BD4; // type:function size:0x4C scope:local +fn_1_7C20 = .text:0x00007C20; // type:function size:0x10 scope:local fn_1_7C30 = .text:0x00007C30; // type:function size:0x20 fn_1_7C50 = .text:0x00007C50; // type:function size:0x10 fn_1_7C60 = .text:0x00007C60; // type:function size:0xA4 -fn_1_7D04 = .text:0x00007D04; // type:function size:0x274 +fn_1_7D04 = .text:0x00007D04; // type:function size:0x274 scope:local fn_1_7F78 = .text:0x00007F78; // type:function size:0x15C fn_1_80D4 = .text:0x000080D4; // type:function size:0x180 -fn_1_8254 = .text:0x00008254; // type:function size:0x10 +fn_1_8254 = .text:0x00008254; // type:function size:0x10 scope:local fn_1_8264 = .text:0x00008264; // type:function size:0x10 -fn_1_8274 = .text:0x00008274; // type:function size:0x5C +fn_1_8274 = .text:0x00008274; // type:function size:0x5C scope:local fn_1_82D0 = .text:0x000082D0; // type:function size:0x1A0 fn_1_8470 = .text:0x00008470; // type:function size:0x200 fn_1_8670 = .text:0x00008670; // type:function size:0x30 fn_1_86A0 = .text:0x000086A0; // type:function size:0x8CC _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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x9 data:byte -lbl_1_rodata_A9 = .rodata:0x000000A9; // type:object size:0xB data:byte -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 data:double -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 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_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -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_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 data:double -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte -lbl_1_data_4 = .data:0x00000004; // type:object size:0xC -lbl_1_data_10 = .data:0x00000010; // type:object size:0xC -lbl_1_data_1C = .data:0x0000001C; // type:object size:0x28 -lbl_1_data_44 = .data:0x00000044; // type:object size:0x24 -lbl_1_data_68 = .data:0x00000068; // type:object size:0x4 data:4byte -lbl_1_data_6C = .data:0x0000006C; // type:object size:0x20 +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x9 scope:local data:byte +lbl_1_rodata_A9 = .rodata:0x000000A9; // type:object size:0x9 scope:local data:byte +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 scope:local data:double +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +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_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data:double +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 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_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +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_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:double +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 scope:local data:2byte +lbl_1_data_4 = .data:0x00000004; // type:object size:0xC scope:local data:float +lbl_1_data_10 = .data:0x00000010; // type:object size:0xC scope:local data:float +lbl_1_data_1C = .data:0x0000001C; // type:object size:0x4 scope:local +lbl_1_data_44 = .data:0x00000044; // type:object size:0x23 scope:local data:string +lbl_1_data_68 = .data:0x00000068; // type:object size:0x4 scope:local data:4byte +lbl_1_data_6C = .data:0x0000006C; // type:object size:0x20 scope:local jumptable_1_data_8C = .data:0x0000008C; // type:object size:0x1C scope:local jumptable_1_data_A8 = .data:0x000000A8; // type:object size:0x1C scope:local -lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x20 -lbl_1_data_E4 = .data:0x000000E4; // type:object size:0x30 -lbl_1_data_114 = .data:0x00000114; // type:object size:0x20 -lbl_1_data_134 = .data:0x00000134; // type:object size:0x20 -lbl_1_data_154 = .data:0x00000154; // type:object size:0x4 data:4byte -lbl_1_data_158 = .data:0x00000158; // type:object size:0xC0 -lbl_1_data_218 = .data:0x00000218; // type:object size:0xC0 -lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x78 -lbl_1_data_350 = .data:0x00000350; // type:object size:0x78 -lbl_1_data_3C8 = .data:0x000003C8; // type:object size:0xC0 -lbl_1_data_488 = .data:0x00000488; // type:object size:0xC0 -lbl_1_data_548 = .data:0x00000548; // type:object size:0x78 -lbl_1_data_5C0 = .data:0x000005C0; // type:object size:0x78 -lbl_1_data_638 = .data:0x00000638; // type:object size:0x108 -lbl_1_data_740 = .data:0x00000740; // type:object size:0x108 -lbl_1_data_848 = .data:0x00000848; // type:object size:0x108 -lbl_1_data_950 = .data:0x00000950; // type:object size:0x108 -lbl_1_data_A58 = .data:0x00000A58; // type:object size:0x30 -lbl_1_data_A88 = .data:0x00000A88; // type:object size:0x48 -lbl_1_data_AD0 = .data:0x00000AD0; // type:object size:0xC data:4byte -lbl_1_data_ADC = .data:0x00000ADC; // type:object size:0xC data:4byte -lbl_1_data_AE8 = .data:0x00000AE8; // type:object size:0x14 data:4byte -lbl_1_data_AFC = .data:0x00000AFC; // type:object size:0x18 -lbl_1_data_B14 = .data:0x00000B14; // type:object size:0x18 -lbl_1_data_B2C = .data:0x00000B2C; // type:object size:0x48 -lbl_1_data_B74 = .data:0x00000B74; // type:object size:0x30 -lbl_1_data_BA4 = .data:0x00000BA4; // type:object size:0x18 -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte -lbl_1_bss_2 = .bss:0x00000002; // type:object size:0x2 data:2byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x8 data:2byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x2 data:2byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0xC data:2byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x2 data:2byte -lbl_1_bss_2A = .bss:0x0000002A; // type:object size:0x2 data:2byte -lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x2 data:2byte -lbl_1_bss_2E = .bss:0x0000002E; // type:object size:0x2 data:2byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x2 data:2byte -lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x10 -lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x4 data:4byte -lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 data:4byte -lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 data:4byte -lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x8 data:4byte -lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x18 -lbl_1_bss_70 = .bss:0x00000070; // type:object size:0x4 data:4byte -lbl_1_bss_74 = .bss:0x00000074; // type:object size:0x4 data:4byte -lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 data:4byte -lbl_1_bss_7C = .bss:0x0000007C; // type:object size:0x4 data:4byte -lbl_1_bss_80 = .bss:0x00000080; // type:object size:0x4 data:float -lbl_1_bss_84 = .bss:0x00000084; // type:object size:0x4 data:4byte -lbl_1_bss_88 = .bss:0x00000088; // type:object size:0x4 data:4byte -lbl_1_bss_8C = .bss:0x0000008C; // type:object size:0x4 data:4byte -lbl_1_bss_90 = .bss:0x00000090; // type:object size:0x4 data:4byte -lbl_1_bss_94 = .bss:0x00000094; // type:object size:0x4 data:4byte -lbl_1_bss_98 = .bss:0x00000098; // type:object size:0x4 data:4byte -lbl_1_bss_9C = .bss:0x0000009C; // type:object size:0x14 -lbl_1_bss_B0 = .bss:0x000000B0; // type:object size:0x4 data:4byte -lbl_1_bss_B4 = .bss:0x000000B4; // type:object size:0x4 data:4byte +lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x20 scope:local +lbl_1_data_E4 = .data:0x000000E4; // type:object size:0x30 scope:local data:float +lbl_1_data_114 = .data:0x00000114; // type:object size:0x20 scope:local data:float +lbl_1_data_134 = .data:0x00000134; // type:object size:0x20 scope:local data:float +lbl_1_data_154 = .data:0x00000154; // type:object size:0x4 scope:local data:4byte +lbl_1_data_158 = .data:0x00000158; // type:object size:0xC0 scope:local data:float +lbl_1_data_218 = .data:0x00000218; // type:object size:0xC0 scope:local data:float +lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x78 scope:local data:float +lbl_1_data_350 = .data:0x00000350; // type:object size:0x78 scope:local data:float +lbl_1_data_3C8 = .data:0x000003C8; // type:object size:0xC0 scope:local data:float +lbl_1_data_488 = .data:0x00000488; // type:object size:0xC0 scope:local data:float +lbl_1_data_548 = .data:0x00000548; // type:object size:0x78 scope:local data:float +lbl_1_data_5C0 = .data:0x000005C0; // type:object size:0x78 scope:local data:float +lbl_1_data_638 = .data:0x00000638; // type:object size:0x108 scope:local data:float +lbl_1_data_740 = .data:0x00000740; // type:object size:0x108 scope:local data:float +lbl_1_data_848 = .data:0x00000848; // type:object size:0x108 scope:local data:float +lbl_1_data_950 = .data:0x00000950; // type:object size:0x108 scope:local data:float +lbl_1_data_A58 = .data:0x00000A58; // type:object size:0x30 scope:local +lbl_1_data_A88 = .data:0x00000A88; // type:object size:0x48 scope:local data:float +lbl_1_data_AD0 = .data:0x00000AD0; // type:object size:0xC scope:local data:4byte +lbl_1_data_ADC = .data:0x00000ADC; // type:object size:0xC scope:local data:4byte +lbl_1_data_AE8 = .data:0x00000AE8; // type:object size:0x14 scope:local data:4byte +lbl_1_data_AFC = .data:0x00000AFC; // type:object size:0x18 scope:local +lbl_1_data_B14 = .data:0x00000B14; // type:object size:0x18 scope:local +lbl_1_data_B2C = .data:0x00000B2C; // type:object size:0x48 scope:local data:float +lbl_1_data_B74 = .data:0x00000B74; // type:object size:0x30 scope:local +lbl_1_data_BA4 = .data:0x00000BA4; // type:object size:0x18 scope:local +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2 = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0xC scope:local data:2byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2A = .bss:0x0000002A; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2E = .bss:0x0000002E; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x10 scope:local +lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x4 scope:local data:4byte +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 +lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x8 scope:local data:4byte +lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x18 scope:local +lbl_1_bss_70 = .bss:0x00000070; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_74 = .bss:0x00000074; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7C = .bss:0x0000007C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_80 = .bss:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_bss_84 = .bss:0x00000084; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_88 = .bss:0x00000088; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_8C = .bss:0x0000008C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_90 = .bss:0x00000090; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_94 = .bss:0x00000094; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_98 = .bss:0x00000098; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_9C = .bss:0x0000009C; // type:object size:0x14 scope:local +lbl_1_bss_B0 = .bss:0x000000B0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_B4 = .bss:0x000000B4; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index c26c011b..9a835e91 100644 --- a/configure.py +++ b/configure.py @@ -808,8 +808,8 @@ config.libs = [ Rel('m403Dll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m403Dll/main.c"), - Object(NonMatching, "REL/m403Dll/scene.c"), + Object(Matching, "REL/m403Dll/main.c"), + Object(Matching, "REL/m403Dll/scene.c"), } ), Rel('m404Dll', diff --git a/include/REL/m403Dll.h b/include/REL/m403Dll.h new file mode 100755 index 00000000..287c2294 --- /dev/null +++ b/include/REL/m403Dll.h @@ -0,0 +1,21 @@ +#ifndef M403DLL_H +#define M403DLL_H + +#include "game/process.h" + +#include "dolphin.h" + +void fn_1_650C(Process *arg0); +void fn_1_676C(void); +void fn_1_7C30(float arg0); +void fn_1_7C50(s32 arg0); +void fn_1_7C60(void); +float fn_1_7F78(float arg0, float arg1); +float fn_1_80D4(Vec *arg0, float arg1); +s32 fn_1_8264(void); +s32 fn_1_82D0(Vec *arg0); +s32 fn_1_8470(Vec *arg0); +void fn_1_8670(s32 arg0); +s32 fn_1_86A0(Vec *arg0, Vec *arg1); + +#endif diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index edfe1862..e06f19f9 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -41,7 +41,7 @@ typedef struct particle_data { /* 0x28 */ float unk_28; /* 0x2C */ u8 unk_2C; /* 0x2D */ u8 unk_2D; - /* 0x2E */ char unk_2E[2]; + /* 0x2E */ s16 unk_2E; /* 0x30 */ s16 unk_30; /* 0x32 */ char unk_32[2]; /* 0x34 */ u32 unk_34; diff --git a/include/game/hsfman.h b/include/game/hsfman.h index b0481822..f90b11db 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -191,8 +191,8 @@ void Hu3DGLightSpotSet(s16, u16, f32); void Hu3DLLightSpotSet(s16, s16, u16, f32); void Hu3DGLightInfinitytSet(s16); void Hu3DLLightInfinitytSet(s16, s16); -void Hu3DGLightPointSet(s16, u16, f32, f32); -void Hu3DLLightPointSet(s16, s16, u16, f32, f32); +void Hu3DGLightPointSet(s16, f32, f32, u16); +void Hu3DLLightPointSet(s16, s16, f32, f32, u16); void Hu3DGLightKill(s16); void Hu3DLLightKill(s16, s16); void Hu3DLightAllKill(void); diff --git a/src/REL/m402Dll/main.c b/src/REL/m402Dll/main.c index 0099633c..6b21f7cf 100755 --- a/src/REL/m402Dll/main.c +++ b/src/REL/m402Dll/main.c @@ -751,24 +751,6 @@ static void fn_1_1F58(s32 arg0) { lbl_1_bss_1A4 = -1; } -static inline float fn_1_1FC4InlineFunc(float arg0, float arg1, float arg2) { - float var_f29; - float var_f27; - - var_f29 = fmod(arg1 - arg0, 360.0); - if (0.0f > var_f29) { - var_f29 += 360.0f; - } - if (180.0f < var_f29) { - var_f29 -= 360.0f; - } - var_f27 = fmod(arg0 + var_f29 * arg2, 360.0); - if (0.0f > var_f27) { - var_f27 += 360.0f; - } - return var_f27; -} - static void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) { Vec sp18; float var_f28; @@ -789,7 +771,7 @@ static void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) { sp18.x = 10.0f * sp18.x; sp18.z = 10.0f * sp18.z; } - *arg1 = fn_1_1FC4InlineFunc(*arg1, atan2d(sp18.x, sp18.z), 0.4f); + *arg1 = fn_1_1E20(*arg1, atan2d(sp18.x, sp18.z), 0.4f); if (8.0f <= var_f28) { var_r30 = 2; } else { @@ -943,7 +925,6 @@ static void fn_1_3204(omObjData *arg0) { omObjData *temp_r29; UnkData234Struct *temp_r28; u16 var_r26; - s32 temp_r20; temp_r31 = arg0->data; if (lbl_1_bss_58->work[0] == 1007) { @@ -960,10 +941,7 @@ static void fn_1_3204(omObjData *arg0) { } Hu3DMotionSpeedSet(arg0->model[0], 1.0f); if (lbl_1_bss_26 == temp_r31->unk54) { - temp_r20 = temp_r31->unk54; - if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { - GWPlayer[temp_r20].coin_win = 10; - } + GWPlayerCoinWinSet(temp_r31->unk54, 10); } arg0->func = fn_1_43D8; return; @@ -1243,7 +1221,7 @@ static void fn_1_43D8(omObjData *arg0) { arg0->func = fn_1_3204; } break; - + case 2010: if (temp_r31->unk54 == lbl_1_bss_26) { temp_r31->unk4C = 2012; @@ -1259,10 +1237,10 @@ static void fn_1_43D8(omObjData *arg0) { fn_1_2B30(temp_r31, arg0, temp_r30); } break; - - case 2011: - break; - + + case 2011: + break; + case 2012: temp_r31->unk1C -= temp_r31->unk20; if (0.0f > temp_r31->unk1C) { diff --git a/src/REL/m403Dll/main.c b/src/REL/m403Dll/main.c new file mode 100755 index 00000000..4447b3ac --- /dev/null +++ b/src/REL/m403Dll/main.c @@ -0,0 +1,1592 @@ +#include "REL/m403Dll.h" +#include "REL/executor.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/frand.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "game/wipe.h" + +#include "ext_math.h" +#include "rel_sqrt_consts.h" + +typedef struct { + /* 0x000 */ u8 unk00; + /* 0x001 */ char unk01[3]; + /* 0x004 */ Vec unk04; + /* 0x010 */ Vec unk10; + /* 0x01C */ Vec unk1C; + /* 0x028 */ Vec unk28; + /* 0x034 */ Vec unk34; + /* 0x040 */ Vec unk40; + /* 0x04C */ Vec unk4C; + /* 0x058 */ Vec unk58; + /* 0x064 */ Vec unk64; + /* 0x070 */ Vec unk70; + /* 0x07C */ Vec unk7C; + /* 0x088 */ float unk88[3][3]; + /* 0x0AC */ Vec unkAC; + /* 0x0B8 */ Vec unkB8; + /* 0x0C4 */ Vec unkC4; + /* 0x0D0 */ float unkD0[3][3]; + /* 0x0F4 */ float unkF4[3]; + /* 0x100 */ float unk100[3]; + /* 0x10C */ float unk10C[3]; + /* 0x118 */ float unk118[3]; + /* 0x124 */ float unk124[3]; + /* 0x130 */ float unk130; + /* 0x134 */ float unk134; + /* 0x138 */ float unk138; + /* 0x13C */ float unk13C; + /* 0x140 */ float unk140; + /* 0x144 */ float unk144; + /* 0x148 */ float unk148; +} Unkm403Struct_00; // Size 0x14C + +typedef struct { + /* 0x00 */ u8 unk00; + /* 0x01 */ u8 unk01; + /* 0x02 */ u8 unk02; + /* 0x03 */ u8 unk03; + /* 0x04 */ u8 unk04; + /* 0x05 */ u8 unk05; + /* 0x06 */ u8 unk06; + /* 0x07 */ u8 unk07; + /* 0x08 */ char unk08[2]; + /* 0x0A */ u8 unk0A; + /* 0x0B */ char unk0B[1]; + /* 0x0C */ u8 unk0C; + /* 0x0D */ u8 unk0D; + /* 0x0E */ u8 unk0E; + /* 0x0F */ char unk0F[1]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ s16 unk14; + /* 0x16 */ s16 unk16; + /* 0x18 */ s16 unk18; + /* 0x1A */ s16 unk1A; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ Vec unk2C; + /* 0x38 */ float unk38; + /* 0x3C */ float unk3C; + /* 0x40 */ float unk40; + /* 0x44 */ float unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ Vec unk50; + /* 0x5C */ s16 unk5C; // Start of a struct of size 0x40 (memset)? + /* 0x5E */ s16 unk5E; + /* 0x60 */ float unk60; + /* 0x64 */ float unk64; + /* 0x68 */ char unk68[0x34]; + /* 0x9C */ u8 unk9C; + /* 0x9D */ char unk9D[3]; + /* 0xA0 */ s32 unkA0; +} Unkm403Struct_01; // Size 0xA4 + +static void fn_1_424(omObjData *arg0); +static void fn_1_444(omObjData *arg0); +static void fn_1_82C(omObjData *arg0); +static void fn_1_1214(omObjData *arg0); +static void fn_1_1274(omObjData *arg0); +static void fn_1_1460(omObjData *arg0); +static void fn_1_16D8(omObjData *arg0); +static void fn_1_17DC(omObjData *arg0); +static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3); +static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6); +static void fn_1_1DA8(float arg0); +static void fn_1_1DD0(omObjData *arg0); +static void fn_1_2158(omObjData *arg0); +static void fn_1_22A4(omObjData *arg0); +static void fn_1_2598(omObjData *arg0); +static void fn_1_2FDC(omObjData *arg0); +static void fn_1_3800(void); +static s32 fn_1_3894(void); +static void fn_1_3B80(omObjData *arg0); +static void fn_1_3D6C(Vec *arg0, Vec *arg1); +static void fn_1_3E4C(omObjData *arg0); +static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2); +static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix); +static s32 fn_1_4528(void); +static float fn_1_457C(float arg0, float arg1, float arg2); +static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3); +static void fn_1_4804(float *arg0, float *arg1); +static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3); +static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4); +static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3); +static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4); +static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3); +static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4); +static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3); +static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5); +static float fn_1_59F4(Vec *arg0); +static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3); +static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2); +static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2); +static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4); + +static omObjData *lbl_1_bss_50; +static omObjData *lbl_1_bss_4C; +static omObjData *lbl_1_bss_48; +static omObjData *lbl_1_bss_44; +static omObjData *lbl_1_bss_34[4]; +static u16 lbl_1_bss_30; +static s16 lbl_1_bss_2E; +static s16 lbl_1_bss_2C; +static s16 lbl_1_bss_2A; +static s16 lbl_1_bss_28; +static s16 lbl_1_bss_1C[6]; +static s16 lbl_1_bss_18[2]; +static u8 lbl_1_bss_10_unused[8]; +static s32 lbl_1_bss_C; +static u8 lbl_1_bss_6_unused[6]; +static s16 lbl_1_bss_4; +static s16 lbl_1_bss_2; +static s16 lbl_1_bss_0; + +static s16 lbl_1_data_0 = -1; +static Vec lbl_1_data_4 = { 0.0f, 4000.0f, 4000.0f }; +static Vec lbl_1_data_10 = { 0.0f, -0.7f, -0.6f }; +static GXColor lbl_1_data_1C = { 0xFF, 0xFF, 0xFF, 0xFF }; + +static Vec lbl_1_data_20_unused = { 0.0f, 4000.0f, -2000.0f }; +static Vec lbl_1_data_2C_unused = { 0.0f, 1.0f, 0.0f }; +static u8 lbl_1_data_38_unused[0xC] = { 0 }; + +void ModuleProlog(void) { + LightData *var_r28; + Process *temp_r31; + omObjData *var_r29; + s32 temp_r27; + s32 var_r26; + s32 i; + + OSReport("******* M403ObjectSetup *********\n"); + Hu3DLighInit(); + var_r26 = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C); + Hu3DGLightInfinitytSet(var_r26); + var_r28 = &Hu3DGlobalLight[0]; + var_r28->unk_00 |= 0x8000; + temp_r31 = omInitObjMan(50, 0x2000); + temp_r27 = frand() & 0x1F; + for (i = 0; i < temp_r27; i++) { + fn_1_4528(); + } + CRot.x = -23.5f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 320.0f; + Center.z = 147.0f; + CZoom = 1720.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 400.0f, 10000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + lbl_1_bss_4C = omAddObjEx(temp_r31, 0x7FDA, 0, 0, -1, omOutView); + lbl_1_bss_50 = omAddObjEx(temp_r31, 0x10, 8, 0, -1, fn_1_424); + lbl_1_bss_44 = omAddObjEx(temp_r31, 0x20, 16, 0, -1, fn_1_1274); + lbl_1_bss_48 = omAddObjEx(temp_r31, 0x50, 16, 0, -1, fn_1_16D8); + omAddObjEx(temp_r31, 0x60, 0, 0, -1, fn_1_3B80); + fn_1_650C(temp_r31); + fn_1_7C50(3); + omMakeGroupEx(temp_r31, 0, 4); + omGetGroupMemberListEx(temp_r31, 0); + for (i = 0; i < 4; i++) { + var_r29 = omAddObjEx(temp_r31, 0x30, 2, 8, 0, fn_1_1DD0); + lbl_1_bss_34[i] = var_r29; + var_r29->work[0] = i; + var_r29->work[1] = i; + } + omGameSysInit(temp_r31); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + HuAudSndGrpSet(0x1C); + lbl_1_bss_2 = 0; + if (GWMGRecordGet(9) == 0U) { + GWMGRecordSet(9, 5); + } +} + +static void fn_1_424(omObjData *arg0) { + lbl_1_bss_30 = 0; + arg0->func = fn_1_444; +} + +static void fn_1_444(omObjData *arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + float var_f30; + + switch (lbl_1_bss_30) { + case 0: + sp2C.x = 0.0f; + sp2C.y = 0.0f; + sp2C.z = -50.0f; + sp20.x = -90.0f; + sp20.y = 90.0f; + sp20.z = 0.0f; + var_f31 = 2200.0f; + fn_1_1A50(1.0f, &sp2C, &sp20, var_f31); + lbl_1_bss_28 = 60; + lbl_1_bss_30++; + break; + case 1: + if (--lbl_1_bss_28 == 0) { + lbl_1_bss_30++; + } + break; + case 2: + if (lbl_1_bss_28 == 0) { + fn_1_7C60(); + lbl_1_bss_28 = 90; + sp2C.x = 200.0f; + sp2C.y = 100.0f; + sp2C.z = -50.0f; + sp20.x = -50.0f; + sp20.y = 90.0f; + sp20.z = 0.0f; + var_f31 = 2000.0f; + sp14.x = 0.0f; + sp14.y = 320.0f; + sp14.z = 147.0f; + sp8.x = -23.5f; + sp8.y = 0.0f; + sp8.z = 0.0f; + var_f30 = 1720.0f; + fn_1_1AF0(180.0f, &sp14, &sp8, var_f30, &sp2C, &sp20, var_f31); + } + if (--lbl_1_bss_28 == 0) { + lbl_1_bss_30++; + } + break; + case 3: + if (lbl_1_bss_28 == 0) { + lbl_1_bss_28 = 90; + } + if (--lbl_1_bss_28 == 0) { + lbl_1_bss_30++; + } + break; + case 4: + lbl_1_bss_30 = 5; + lbl_1_bss_2E = lbl_1_bss_2C = -1; + arg0->func = fn_1_82C; + HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M403, 19), MEMORY_DEFAULT_NUM)); + break; + } + if (omSysExitReq != 0 && WipeStatGet() == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_1214; + } +} + +static s32 lbl_1_data_68 = -1; + +s32 lbl_1_data_6C[] = { + DATA_MAKE_NUM(DATADIR_MGCONST, 0), + DATA_MAKE_NUM(DATADIR_MGCONST, 1), + DATA_MAKE_NUM(DATADIR_MGCONST, 2), + DATA_MAKE_NUM(DATADIR_MGCONST, 3), + DATA_MAKE_NUM(DATADIR_MGCONST, 4), + DATA_MAKE_NUM(DATADIR_MGCONST, 5), + DATA_MAKE_NUM(DATADIR_MGCONST, 6), + DATA_MAKE_NUM(DATADIR_MGCONST, 7) +}; + +static void fn_1_82C(omObjData *arg0) { + Vec sp1C; + Vec sp10; + float var_f31; + s16 sp8[4]; + s32 var_r30; + s32 var_r27; + s32 var_r29; + s32 i; + + switch (lbl_1_bss_30) { + case 5: + if (lbl_1_bss_2C == -1) { + lbl_1_bss_2A = 1800; + lbl_1_bss_2C = MGSeqStartCreate(); + MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f); + } else if (MGSeqStatGet(lbl_1_bss_2C) == 0) { + lbl_1_bss_2C = -1; + lbl_1_bss_30++; + lbl_1_bss_28 = 0; + lbl_1_data_0 = 4; + if (lbl_1_bss_2 != 0) { + sp1C.x = 476.0f; + sp1C.y = 64.0f; + var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0); + lbl_1_bss_1C[0] = var_r30; + espPosSet(var_r30, sp1C.x + 32.0f, sp1C.y); + var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0); + lbl_1_bss_1C[1] = var_r30; + espPosSet(var_r30, sp1C.x + 56.0f, sp1C.y); + var_r30 = espEntry(lbl_1_data_6C[GWPlayerCfg[lbl_1_bss_4].character], 1, 0); + lbl_1_bss_1C[2] = var_r30; + espPosSet(var_r30, sp1C.x, sp1C.y); + var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 22), 3, 0); + lbl_1_bss_1C[3] = var_r30; + espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y); + var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 23), 4, 0); + lbl_1_bss_1C[4] = var_r30; + espColorSet(var_r30, 0, 0, 0); + espTPLvlSet(var_r30, 0.5); + espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y); + } + } + if (lbl_1_data_68 == -1 && (MGSeqStatGet(lbl_1_bss_2C) & 0x10)) { + lbl_1_data_68 = HuAudSeqPlay(0x48); + } + break; + case 6: + var_r29 = 0; + if (lbl_1_bss_2 != 0) { + if (((Unkm403Struct_01*) lbl_1_bss_34[lbl_1_bss_4]->data)->unk07 == 0 && fn_1_8264() == 0) { + var_r29++; + } + } else if (lbl_1_data_0 <= 1 && fn_1_8264() == 0) { + var_r29++; + } + if (lbl_1_bss_2 != 0) { + espBankSet(lbl_1_bss_1C[0], lbl_1_bss_0 / 10); + espBankSet(lbl_1_bss_1C[1], lbl_1_bss_0 % 10); + } + if (var_r29 != 0) { + lbl_1_bss_30++; + } + break; + case 7: + if (lbl_1_bss_2C == -1) { + lbl_1_bss_2C = MGSeqFinishCreate(); + MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f); + MGSeqKill(lbl_1_bss_2E); + HuAudSeqFadeOut(lbl_1_data_68, 100); + break; + } + if (MGSeqStatGet(lbl_1_bss_2C) == 0) { + lbl_1_bss_2C = -1; + if (lbl_1_bss_2 == 0) { + if (lbl_1_data_0 != 0) { + for (i = 0; i < 4; i++) { + if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { + break; + } + } + sp1C.x = lbl_1_bss_34[i]->trans.x; + sp1C.y = 100.0f; + sp1C.z = lbl_1_bss_34[i]->trans.z; + sp10.x = -18.0f; + sp10.y = 0.0f; + sp10.z = 0.0f; + var_f31 = 600.0f; + fn_1_1A50(45.0f, &sp1C, &sp10, var_f31); + } + lbl_1_bss_30 = 9; + lbl_1_bss_28 = 90; + break; + } + if (GWMGRecordGet(9) < lbl_1_bss_0 - 1) { + GWMGRecordSet(9, lbl_1_bss_0 - 1); + lbl_1_bss_30 = 8; + break; + } + lbl_1_bss_2C = -1; + lbl_1_bss_30 = 11; + lbl_1_bss_28 = 150; + } + break; + case 8: + if (lbl_1_bss_2C == -1) { + lbl_1_bss_2C = MGSeqRecordCreate(lbl_1_bss_0 - 1); + break; + } + if (MGSeqStatGet(lbl_1_bss_2C) == 0) { + lbl_1_bss_2C = -1; + lbl_1_bss_28 = 150; + lbl_1_bss_30 = 11; + } + break; + case 9: + if (--lbl_1_bss_28 == 0) { + lbl_1_bss_30++; + } + break; + case 10: + if (lbl_1_bss_2C == -1) { + if (lbl_1_data_0 == 0) { + lbl_1_bss_2C = MGSeqDrawCreate(); + HuAudSStreamPlay(4); + } else { + for (i = 0; i < 4; i++) { + sp8[i] = -1; + } + for (i = 0, var_r27 = 0; i < 4; i++) { + if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { + GWPlayerCoinWinAdd(i, 10); + sp8[var_r27++] = GWPlayerCfg[i].character; + } + } + lbl_1_bss_2C = MGSeqWinCreate(sp8[0], sp8[1], sp8[2], sp8[3]); + HuAudSStreamPlay(1); + } + } + lbl_1_bss_2C = -1; + lbl_1_bss_28 = 210; + lbl_1_bss_30++; + break; + case 11: + if (--lbl_1_bss_28 == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_1214; + } + break; + } + if (omSysExitReq != 0 && WipeStatGet() == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + arg0->func = fn_1_1214; + } +} + +static void fn_1_1214(omObjData *arg0) { + if (WipeStatGet() == 0) { + fn_1_676C(); + CharModelKill(-1); + MGSeqKill(lbl_1_bss_2E); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +static void fn_1_1274(omObjData *arg0) { + Hu3DLightAllKill(); + lbl_1_bss_18[0] = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C); + Hu3DGLightStaticSet(lbl_1_bss_18[0], 1); + Hu3DGLightInfinitytSet(lbl_1_bss_18[0]); + lbl_1_bss_18[1] = Hu3DGLightCreate(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0, 0, 0); + Hu3DGLightStaticSet(lbl_1_bss_18[1], 1); + Hu3DGLightPointSet(lbl_1_bss_18[1], 0.0f, 0.0f, 3); + Hu3DGLightColorSet(lbl_1_bss_18[0], 0, 0, 0, 0xFF); + Hu3DGLightPosSet(lbl_1_bss_18[1], -1470.0f, 800.0f, -2000.0f, 0.0f, -1.0f, 0.0f); + Hu3DGLightColorSet(lbl_1_bss_18[1], 0, 0, 0, 0xFF); + Hu3DGLightPointSet(lbl_1_bss_18[1], 1200.0f, 0.6f, 3); + arg0->func = fn_1_1460; +} + +static void fn_1_1460(omObjData *arg0) { + s8 sp11[] = { 1, 0, 2, 1, 0, 3, 2, 1, 0 }; + s8 sp8[] = { 1, 1, 2, 2, 2, 3, 3, 3, 3 }; + s32 var_r30; + + switch (lbl_1_bss_30) { + case 0: + break; + case 1: + Hu3DGLightColorSet(lbl_1_bss_18[0], 0xF0, 0xF0, 0xF0, 0xFF); + break; + case 2: + break; + case 3: + Hu3DGLightColorSet(lbl_1_bss_18[1], 0xFF, 0xE0, 0xD0, 0xFF); + break; + case 4: + break; + case 5: + arg0->work[0] = 30; + arg0->work[1] = 17; + lbl_1_bss_C = 1; + break; + case 6: + if (fn_1_8264() != 0) { + break; + } + if (lbl_1_bss_C == 0) { + lbl_1_bss_C = 30; + lbl_1_bss_0++; + } + lbl_1_bss_C--; + if (lbl_1_bss_C == 0) { + var_r30 = (arg0->work[1] - 2) / 2; + if (var_r30 < 0) { + var_r30 = 0; + } + fn_1_8670(sp11[var_r30]); + fn_1_7C50(sp8[var_r30]); + fn_1_7C30(0.01f * arg0->work[0]); + arg0->work[0] += 5; + if (arg0->work[1] > 2) { + arg0->work[1]--; + } + } + break; + } +} + +static void fn_1_16D8(omObjData *arg0) { + Unkm403Struct_00 *temp_r3; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + arg0->data = temp_r3; + temp_r3->unk148 = temp_r3->unk144 = 0.0f; + temp_r3->unk140 = 1.0f; + temp_r3->unk10.x = temp_r3->unk28.x = -23.5f; + temp_r3->unk10.y = temp_r3->unk28.y = 0.0f; + temp_r3->unk10.z = temp_r3->unk28.z = 0.0f; + temp_r3->unk04.x = temp_r3->unk1C.x = 0.0f; + temp_r3->unk04.y = temp_r3->unk1C.y = 320.0f; + temp_r3->unk04.z = temp_r3->unk1C.z = 147.0f; + temp_r3->unk130 = temp_r3->unk134 = 1720.0f; + arg0->func = fn_1_17DC; +} + +static void fn_1_17DC(omObjData *arg0) { + Unkm403Struct_00 *temp_r31; + float temp_f31; + + temp_r31 = arg0->data; + if (temp_r31->unk148 > 0.0f) { + temp_r31->unk148 -= temp_r31->unk140; + temp_f31 = (temp_r31->unk144 - temp_r31->unk148) / temp_r31->unk144; + temp_f31 = sind(90.0f * temp_f31); + if (temp_r31->unk00 == 0) { + temp_r31->unk04.x = temp_r31->unk1C.x + temp_f31 * (temp_r31->unk34.x - temp_r31->unk1C.x); + temp_r31->unk04.y = temp_r31->unk1C.y + temp_f31 * (temp_r31->unk34.y - temp_r31->unk1C.y); + temp_r31->unk04.z = temp_r31->unk1C.z + temp_f31 * (temp_r31->unk34.z - temp_r31->unk1C.z); + temp_r31->unk10.x = temp_r31->unk28.x + temp_f31 * (temp_r31->unk40.x - temp_r31->unk28.x); + temp_r31->unk10.y = temp_r31->unk28.y + temp_f31 * (temp_r31->unk40.y - temp_r31->unk28.y); + temp_r31->unk10.z = temp_r31->unk28.z + temp_f31 * (temp_r31->unk40.z - temp_r31->unk28.z); + temp_r31->unk130 = temp_r31->unk134 + temp_f31 * (temp_r31->unk138 - temp_r31->unk134); + } else { + fn_1_57E0(2.0f * temp_f31, &temp_r31->unk04, temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3); + fn_1_57E0(2.0f * temp_f31, &temp_r31->unk10, temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3); + temp_r31->unk130 = fn_1_52AC(2.0f * temp_f31, temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3); + } + } + CRot.x = temp_r31->unk10.x; + CRot.y = temp_r31->unk10.y; + CRot.z = temp_r31->unk10.z; + Center.x = temp_r31->unk04.x; + Center.y = temp_r31->unk04.y; + Center.z = temp_r31->unk04.z; + CZoom = temp_r31->unk130; +} + +static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3) { + Unkm403Struct_00 *temp_r31; + + temp_r31 = lbl_1_bss_48->data; + temp_r31->unk00 = 0; + temp_r31->unk144 = arg0; + temp_r31->unk148 = arg0; + temp_r31->unk1C = temp_r31->unk04; + temp_r31->unk34.x = arg1->x; + temp_r31->unk34.y = arg1->y; + temp_r31->unk34.z = arg1->z; + temp_r31->unk28 = temp_r31->unk10; + temp_r31->unk40.x = arg2->x; + temp_r31->unk40.y = arg2->y; + temp_r31->unk40.z = arg2->z; + temp_r31->unk134 = temp_r31->unk130; + temp_r31->unk138 = arg3; +} + +static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6) { + Unkm403Struct_00 *temp_r31; + + temp_r31 = lbl_1_bss_48->data; + temp_r31->unk00 = 1; + temp_r31->unk148 = temp_r31->unk144 = arg0; + temp_r31->unk1C = temp_r31->unk04; + temp_r31->unk34.x = arg1->x; + temp_r31->unk34.y = arg1->y; + temp_r31->unk34.z = arg1->z; + temp_r31->unk4C.x = arg4->x; + temp_r31->unk4C.y = arg4->y; + temp_r31->unk4C.z = arg4->z; + temp_r31->unk28 = temp_r31->unk10; + temp_r31->unk40.x = arg2->x; + temp_r31->unk40.y = arg2->y; + temp_r31->unk40.z = arg2->z; + temp_r31->unk58.x = arg5->x; + temp_r31->unk58.y = arg5->y; + temp_r31->unk58.z = arg5->z; + temp_r31->unk134 = temp_r31->unk130; + temp_r31->unk138 = arg3; + temp_r31->unk13C = arg6; + temp_r31->unk64 = temp_r31->unk1C; + temp_r31->unk70 = temp_r31->unk4C; + temp_r31->unk7C = temp_r31->unk34; + temp_r31->unkAC = temp_r31->unk28; + temp_r31->unkB8 = temp_r31->unk58; + temp_r31->unkC4 = temp_r31->unk40; + temp_r31->unk10C[0] = temp_r31->unk134; + temp_r31->unk10C[1] = temp_r31->unk13C; + temp_r31->unk10C[2] = temp_r31->unk138; + temp_r31->unk124[0] = 0.0f; + temp_r31->unk124[1] = ABS(temp_r31->unk10C[1] - temp_r31->unk10C[0]); + temp_r31->unk124[2] = ABS(temp_r31->unk10C[2] - temp_r31->unk10C[1]) + temp_r31->unk124[1]; + fn_1_5400(temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3); + fn_1_5400(temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3); + fn_1_4FF4(temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3); +} + +static void fn_1_1DA8(float arg0) { + Unkm403Struct_00 *temp_r31; + + temp_r31 = lbl_1_bss_48->data; + temp_r31->unk140 = arg0; +} + +static s32 lbl_1_data_C4[] = { + 0, 2, 3, 8, 10, 9, 23, 24 +}; + +static Vec lbl_1_data_E4[] = { + { -300.0f, 2200.0f, 0.0f }, + { -100.0f, 2200.0f, 0.0f }, + { 100.0f, 2200.0f, 0.0f }, + { 300.0f, 2200.0f, 0.0f } +}; + +static float lbl_1_data_114[] = { + 40.0f, 40.0f, 40.0f, 40.0f, + 40.0f, 100.0f, 40.0f, 80.0f +}; + +static float lbl_1_data_134[] = { + 160.0f, 160.0f, 180.0f, 160.0f, + 160.0f, 180.0f, 180.0f, 200.0f +}; + +static u32 lbl_1_data_154 = 0x41C64E6D; + +static void fn_1_1DD0(omObjData *arg0) { + Unkm403Struct_01 *temp_r3; + s32 temp_r27; + s32 i; + s32 temp_r28; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + arg0->data = temp_r3; + temp_r3->unk00 = arg0->work[0]; + temp_r3->unk01 = GWPlayerCfg[temp_r3->unk00].character; + temp_r3->unk02 = temp_r3->unk00 >> 1; + temp_r3->unk03 = temp_r3->unk00 & 1; + temp_r3->unk04 = GWPlayerCfg[temp_r3->unk00].pad_idx; + temp_r3->unk05 = GWPlayerCfg[temp_r3->unk00].iscom; + temp_r3->unk06 = GWPlayerCfg[temp_r3->unk00].diff; + temp_r3->unk18 = temp_r3->unk1A = 0; + temp_r3->unk07 = 1; + temp_r3->unk0C = 1; + temp_r3->unk0D = 0; + temp_r3->unk0E = 0; + temp_r3->unk0A = 0; + temp_r3->unk9C = 0; + temp_r27 = arg0->work[1]; + temp_r3->unk2C.x = lbl_1_data_E4[temp_r27].x; + temp_r3->unk2C.y = lbl_1_data_E4[temp_r27].y + 100.0f * ((fn_1_4528() - 0x8000) / 32768.0f); + temp_r3->unk2C.z = lbl_1_data_E4[temp_r27].z; + temp_r3->unk44 = temp_r3->unk48 = temp_r3->unk4C = 0.0f; + temp_r3->unk38 = temp_r3->unk3C = temp_r3->unk40 = 0.0f; + temp_r3->unk20 = temp_r3->unk3C; + temp_r3->unk24 = 0.0f; + temp_r3->unk1C = 0.0f; + temp_r3->unk28 = 1.0f; + memset(&temp_r3->unk5C, 0, 0x40); + temp_r3->unkA0 = 1; + if (lbl_1_bss_2 != 0 && temp_r3->unk05 == 0) { + lbl_1_bss_4 = temp_r3->unk00; + } + temp_r28 = CharModelCreate(temp_r3->unk01, 4); + arg0->model[0] = temp_r28; + Hu3DModelAttrSet(temp_r28, 0x40000001); + Hu3DModelShadowSet(temp_r28); + for (i = 0; i < 8; i++) { + arg0->motion[i] = CharModelMotionCreate(temp_r3->unk01, lbl_1_data_C4[i]); + } + CharModelMotionDataClose(temp_r3->unk01); + CharModelMotionSet(temp_r3->unk01, arg0->motion[temp_r3->unk18]); + omSetTra(arg0, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z); + Hu3DModelPosSet(temp_r28, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z); + Hu3DModelRotSet(temp_r28, 0.0f, 30.0f, 0.0f); + CharModelStepTypeSet(temp_r3->unk01, 1); + CharModelVoiceEnableSet(temp_r3->unk01, arg0->motion[3], 0); + arg0->func = fn_1_2158; +} + +static void fn_1_2158(omObjData *arg0) { + Unkm403Struct_01 *temp_r31; + s32 sp8; + + sp8 = arg0->model[0]; + temp_r31 = arg0->data; + temp_r31->unk10 = temp_r31->unk12 = 0; + temp_r31->unk14 = temp_r31->unk16 = 0; + switch (lbl_1_bss_30) { + case 3: + break; + case 2: + if (lbl_1_bss_28 < 60.0f) { + break; + } + /* fallthrough */ + case 1: + temp_r31->unk18 = 3; + temp_r31->unk48 = 0.0f; + temp_r31->unk0C = 0; + break; + case 5: + arg0->func = fn_1_22A4; + break; + } + if (temp_r31->unk2C.y < 10.0f) { + omVibrate(temp_r31->unk00, 12, 6, 6); + temp_r31->unk2C.y = 10.0f; + temp_r31->unk0C = 1; + } + fn_1_2FDC(arg0); +} + +static void fn_1_22A4(omObjData *arg0) { + Unkm403Struct_01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + + temp_r29 = arg0->model[0]; + temp_r31 = arg0->data; + if (temp_r31->unk07 != 0) { + if (lbl_1_bss_30 == 6 && !(temp_r31->unk07 & 2)) { + if (temp_r31->unk05 != 0) { + fn_1_2598(arg0); + } else { + temp_r31->unk10 = HuPadStkX[temp_r31->unk04]; + temp_r31->unk12 = HuPadStkY[temp_r31->unk04]; + temp_r31->unk14 = HuPadBtnDown[temp_r31->unk04]; + temp_r31->unk16 = HuPadBtn[temp_r31->unk04]; + } + } else { + temp_r31->unk10 = temp_r31->unk12 = 0; + temp_r31->unk14 = temp_r31->unk16 = 0; + } + switch (lbl_1_bss_30) { + case 5: + case 6: + break; + case 7: + case 9: + arg0->scale.y += 0.2f * (1.0f - arg0->scale.y); + temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, 0.0f, 0.9f); + break; + case 10: + if (temp_r31->unk18 != 6) { + temp_r31->unk18 = 6; + } + break; + } + if (temp_r31->unk07 & 2) { + temp_r31->unk10 = temp_r31->unk12 = 0; + temp_r31->unk14 = temp_r31->unk16 = 0; + if (arg0->scale.y < 0.2f) { + omVibrate(temp_r31->unk00, 12, 4, 2); + HuAudFXPlay(0x523); + temp_r31->unk07 = 0; + Hu3DModelShadowReset(temp_r29); + Hu3DModelAttrSet(temp_r29, 1); + lbl_1_data_0--; + temp_r28 = fn_1_400C(DATA_MAKE_NUM(DATADIR_M403, 19), 100, fn_1_40A8); + Hu3DModelPosSet(temp_r28, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); + Hu3DModelLayerSet(temp_r28, 2); + } + } + if (fn_1_8264() != 0) { + temp_r31->unkA0 = 0; + } else if (!(temp_r31->unk07 & 2) && temp_r31->unkA0 == 0) { + omVibrate(temp_r31->unk00, 12, 6, 6); + temp_r31->unkA0 = 1; + } + fn_1_2FDC(arg0); + } +} + +static void fn_1_2598(omObjData *arg0) { + Vec sp38[6]; + Vec sp14; + Vec sp8; + float sp20[6]; + float var_f31; + float var_f30; + float temp_f29; + float var_f28; + Unkm403Struct_01 *temp_r31; + s16 var_r27; + s16 var_r26; + s16 var_r21; + s16 var_r20; + s16 temp_r28; + s32 var_r23; + s32 var_r22; + s32 var_r25; + s32 temp_r24; + s32 var_r29; + s32 i; + + var_r22 = 0; + for (i = 0, var_r29 = 0; i < 4; i++) { + temp_r31 = lbl_1_bss_34[i]->data; + if (temp_r31->unk05 == 0 && temp_r31->unk07 != 0) { + break; + } + } + temp_r31 = arg0->data; + if (i >= 4 && temp_r31->unk9C == 0) { + var_r22 = 1; + } + temp_r28 = temp_r31->unk06; + var_r27 = var_r26 = var_r21 = var_r20 = 0; + switch (temp_r31->unk5C) { + case 0: + if (fn_1_8264() != 0) { + temp_r31->unk5C = 1; + } + break; + case 1: + temp_r31->unk5C = 2; + temp_r31->unk5E = (s32) (60.0f * (1.2f - 0.2f * temp_r28) * (fn_1_4528() / 65536.0f)); + temp_r31->unk60 = 500.0f * ((fn_1_4528() - 0x8000) / 32768.0f); + temp_r31->unk64 = 200.0f * ((fn_1_4528() - 0x8000) / 32768.0f); + var_r27 = temp_r31->unk10; + var_r26 = temp_r31->unk12; + break; + case 2: + sp8.x = temp_r31->unk60 - temp_r31->unk2C.x; + sp8.y = 0.0f; + sp8.z = temp_r31->unk64 - temp_r31->unk2C.z; + var_f31 = fn_1_59F4(&sp8); + if (var_f31 < 20.0f) { + temp_r31->unk5C = 3; + } else { + if (var_f31 >= 100.0f) { + var_f28 = 0.8f; + } else { + var_f28 = 0.4f; + } + var_f30 = fn_1_457C(temp_r31->unk3C, atan2d(sp8.x, sp8.z), var_f28); + temp_f29 = 48.0f + 4.0f * temp_r28; + var_r27 = temp_f29 * sind(var_f30); + var_r26 = temp_f29 * -cosd(var_f30); + if (fn_1_8264() == 0) { + temp_r31->unk5C = 0; + if (temp_r31->unk5E == 0) { + temp_r31->unk5E = -1; + } + } else if (temp_r31->unk5E >= 0) { + if (temp_r31->unk5E == 0) { + if (var_f31 < 150.0f && temp_r31->unk0E != 0) { + temp_r31->unk5C = 3; + } else if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) { + temp_r31->unk5C = 4; + } else { + temp_r31->unk5C = 1; + } + } else { + temp_r31->unk5E--; + } + } + } + break; + case 3: + sp8.x = temp_r31->unk60 - temp_r31->unk2C.x; + sp8.y = 0.0f; + sp8.z = temp_r31->unk64 - temp_r31->unk2C.z; + if (fn_1_59F4(&sp8) >= 30.000002f && temp_r31->unk0E == 0) { + temp_r31->unk5C = 2; + } else if (fn_1_8264() == 0) { + temp_r31->unk5C = 0; + } else { + if (temp_r31->unk5E > 0) { + temp_r31->unk5E--; + } + if (temp_r31->unk5E == 0) { + if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) { + temp_r31->unk5C = 4; + } else { + temp_r31->unk5C = 1; + } + } + } + break; + case 4: + temp_r24 = fn_1_82D0(&sp38[0]); + for (i = 0; i < temp_r24; i++) { + PSVECSubtract(&sp38[i], &temp_r31->unk2C, &sp8); + sp20[i] = PSVECMag(&sp8); + } + for (i = 0; i < temp_r24 - 1; i++) { + for (var_r29 = i + 1; var_r29 < temp_r24; var_r29++) { + if (sp20[i] > sp20[var_r29]) { + sp14 = sp38[i]; + sp38[i] = sp38[var_r29]; + sp38[var_r29] = sp14; + var_f31 = sp20[i]; + sp20[i] = sp20[var_r29]; + sp20[var_r29] = var_f31; + } + } + } + var_r25 = 1000; + var_r23 = var_r25 * (fn_1_4528() / 65536.0f); + for (i = 0; i < temp_r24 - 1; i++) { + var_r25 = var_r25 * (5.0f + temp_r28) * 0.1f; + var_r23 -= var_r25; + if (var_r23 < 0) { + break; + } + } + temp_r31->unk60 = sp38[i].x + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f); + temp_r31->unk64 = sp38[i].z + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f); + temp_r31->unk5C = 2; + temp_r31->unk5E = -1; + var_r27 = temp_r31->unk10; + var_r26 = temp_r31->unk12; + break; + } + temp_r31->unk10 = var_r27; + temp_r31->unk12 = var_r26; + temp_r31->unk14 = var_r21; + temp_r31->unk16 = var_r20; +} + +static void fn_1_2FDC(omObjData *arg0) { + float var_f29; + Unkm403Struct_01 *temp_r31; + s32 temp_r25; + s16 var_r27; + s16 var_r28; + s16 temp_r30; + s16 temp_r29; + s16 spA; + s16 sp8; + + temp_r31 = arg0->data; + temp_r25 = arg0->model[0]; + var_r28 = temp_r31->unk18; + temp_r31->unk50 = temp_r31->unk2C; + temp_r30 = temp_r31->unk10; + temp_r29 = temp_r31->unk12; + spA = temp_r31->unk14; + sp8 = temp_r31->unk16; + switch (temp_r31->unk18) { + case 0: + case 1: + case 2: + temp_r31->unk1C = 0.14f * sqrtf(temp_r30 * temp_r30 + temp_r29 * temp_r29); + if (temp_r31->unk1C > 0.1f) { + if (temp_r31->unk1C >= 6.0f) { + var_r28 = 2; + var_r27 = 1; + } else { + var_r28 = 1; + var_r27 = 1; + } + var_f29 = atan2d(temp_r30, -temp_r29); + temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, var_f29, 0.5f); + temp_r31->unk20 = temp_r31->unk3C; + temp_r31->unk24 += 1.0f; + if (temp_r31->unk24 >= 0.5f * temp_r31->unk28) { + temp_r31->unk24 -= 0.5f * temp_r31->unk28; + } + temp_r31->unk1C *= 1.0 + 0.25 * cosd(90.0f * (temp_r31->unk24 / (0.5f * temp_r31->unk28))); + } else { + temp_r31->unk24 = 0.0f; + temp_r31->unk1C = 0.0f; + var_r28 = 0; + var_r27 = 1; + } + temp_r31->unk48 = -2.4333334f; + break; + case 3: + var_r27 = 0; + if (Hu3DData[temp_r25].unk_0C == -1 && CharModelMotionEndCheck(temp_r31->unk01)) { + temp_r31->unk48 += -2.4333334f; + } else { + temp_r31->unk48 = 0.0f; + } + if (temp_r31->unk0C != 0) { + if (temp_r31->unk0D != 0) { + temp_r31->unk48 = 0.0f; + temp_r31->unk0D = 0; + var_r28 = 5; + var_r27 = 0; + } else { + temp_r31->unk48 *= -0.1f; + temp_r31->unk0C = 0; + var_r28 = 4; + var_r27 = 0; + } + } + break; + case 4: + temp_r31->unk48 += -2.4333334f; + if (temp_r31->unk0C != 0 && CharModelMotionEndCheck(temp_r31->unk01)) { + var_r28 = 5; + var_r27 = 0; + } + break; + case 5: + if (CharModelMotionEndCheck(temp_r31->unk01)) { + var_r28 = 0; + var_r27 = 1; + } + break; + case 6: + case 7: + var_r27 = 0; + temp_r31->unk48 = -2.4333334f; + break; + } + if (temp_r31->unk07 & 4) { + if (temp_r31->unk0A & 2) { + Hu3DModelAttrSet(temp_r25, 1); + } else { + Hu3DModelAttrReset(temp_r25, 1); + } + if (--temp_r31->unk0A == 0) { + temp_r31->unk07 &= ~4; + } + } + temp_r31->unk44 = temp_r31->unk1C * sind(temp_r31->unk20); + temp_r31->unk4C = temp_r31->unk1C * cosd(temp_r31->unk20); + temp_r31->unk2C.x += temp_r31->unk44; + if (temp_r31->unk0C == 0) { + temp_r31->unk2C.y += temp_r31->unk48; + } + temp_r31->unk2C.z += temp_r31->unk4C; + if (var_r28 != temp_r31->unk1A) { + temp_r31->unk1A = var_r28; + temp_r31->unk18 = var_r28; + CharModelMotionShiftSet(temp_r31->unk01, arg0->motion[temp_r31->unk18], 0.0f, 8.0f, var_r27); + temp_r31->unk28 = CharModelMotionMaxTimeGet(temp_r31->unk01); + } + omSetTra(arg0, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); + omSetRot(arg0, temp_r31->unk38, temp_r31->unk3C, temp_r31->unk40); +} + +static void fn_1_3800(void) { + s32 var_r29; + s32 i; + Unkm403Struct_01 *temp_r30; + + var_r29 = 0; + for (i = 0; i < 4; i++) { + temp_r30 = lbl_1_bss_34[i]->data; + if (temp_r30->unk07 != 0) { + temp_r30->unk0E = 0; + } + } + while (fn_1_3894() != 0 && var_r29 < 50) { + var_r29++; + } +} + +static s32 fn_1_3894(void) { + Vec sp14[4]; + Vec sp8; + float var_f31; + float var_f30; + s32 var_r26; + omObjData* temp_r25; + Unkm403Struct_01 *temp_r28; + Unkm403Struct_01 *temp_r27; + Unkm403Struct_01 *temp_r31; + s32 i; + s32 j; + + var_r26 = 0; + for (i = 0; i < 4; i++) { + sp14[i].x = sp14[i].y = sp14[i].z = 0.0f; + } + for (i = 0; i < 3; i++) { + temp_r28 = lbl_1_bss_34[i]->data; + if (temp_r28->unk07 != 0) { + for (j = i + 1; j < 4; j++) { + temp_r27 = lbl_1_bss_34[j]->data; + if (temp_r27->unk07 != 0) { + PSVECSubtract(&temp_r28->unk2C, &temp_r27->unk2C, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 < 80.0f) { + PSVECNormalize(&sp8, &sp8); + var_f30 = 0.0001f + 0.5f * (80.0f - var_f31); + PSVECScale(&sp8, &sp8, var_f30); + PSVECAdd(&sp14[i], &sp8, &sp14[i]); + PSVECSubtract(&sp14[j], &sp8, &sp14[j]); + temp_r28->unk0E++; + temp_r27->unk0E++; + var_r26++; + } + } + } + } + } + for (i = 0; i < 4; i++) { + temp_r25 = lbl_1_bss_34[i]; + temp_r31 = temp_r25->data; + if (temp_r31->unk07 != 0) { + PSVECAdd(&temp_r31->unk2C, &sp14[i], &temp_r31->unk2C); + if (temp_r31->unk2C.x > 660.0f) { + temp_r31->unk2C.x = 660.0f; + } + if (temp_r31->unk2C.x < -660.0f) { + temp_r31->unk2C.x = -660.0f; + } + if (temp_r31->unk2C.z > 360.0f) { + temp_r31->unk2C.z = 360.0f; + } + if (temp_r31->unk2C.z < -360.0f) { + temp_r31->unk2C.z = -360.0f; + } + omSetTra(temp_r25, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); + } + } + return var_r26; +} + +static void fn_1_3B80(omObjData *arg0) { + s32 sp8[4]; + s32 var_r30; + s32 i; + + if (lbl_1_bss_30 < 6) { + return; + } + if (fn_1_8264() != 0) { + for (i = 0; i < 4; i++) { + fn_1_3E4C(lbl_1_bss_34[i]); + } + } else { + for (i = 0, var_r30 = 0; i < 4; i++) { + ((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 0; + if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { + sp8[var_r30++] = i; + } + } + if (var_r30 != 0) { + i = sp8[(s32) (var_r30 * (fn_1_4528() / 65536.0f))]; + ((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 1; + } + } + fn_1_3800(); +} + +static void fn_1_3D6C(Vec *arg0, Vec *arg1) { + Vec sp18[6]; + Vec spC; + float var_f31; + float var_f30; + s32 temp_r30; + s32 i; + + temp_r30 = fn_1_8470(sp18); + var_f31 = 2000.0f; + for (i = 0; i < temp_r30; i++) { + PSVECSubtract(&sp18[i], arg0, &spC); + var_f30 = PSVECMag(&spC); + if (var_f30 >= var_f31) { + continue; + } + var_f31 = var_f30; + *arg1 = sp18[i]; + } +} + +static void fn_1_3E4C(omObjData *arg0) { + Vec sp8; + float var_f30; + float var_f31; + Unkm403Struct_01 *temp_r31; + + temp_r31 = arg0->data; + if (temp_r31->unk07 != 0) { + var_f30 = fn_1_80D4(&temp_r31->unk2C, lbl_1_data_114[temp_r31->unk01]) - 10.0f; + if (var_f30 < 0.0f) { + var_f30 = 0.0f; + } + if (!(temp_r31->unk07 & 2)) { + var_f31 = 1.0f; + if (var_f30 < lbl_1_data_134[temp_r31->unk01]) { + if (fn_1_86A0(&temp_r31->unk2C, &sp8) != 0) { + temp_r31->unk2C.x = sp8.x; + temp_r31->unk2C.z = sp8.z; + } else { + if (fn_1_7F78(temp_r31->unk2C.x, temp_r31->unk2C.z) - 10.0f < 100.0f) { + temp_r31->unk07 |= 2; + } + var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01]; + } + } + } else { + var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01]; + } + if (arg0->scale.y < var_f31) { + var_f31 = arg0->scale.y + 0.2f * (var_f31 - arg0->scale.y); + } + arg0->scale.y = var_f31; + } +} + +static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2) { + AnimData *var_r29; + ParticleData *temp_r31; + s32 temp_r30; + + var_r29 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); + temp_r30 = Hu3DParticleCreate(var_r29, arg1); + Hu3DParticleHookSet(temp_r30, arg2); + temp_r31 = Hu3DData[temp_r30].unk_120; + temp_r31->unk_2E = temp_r30; + temp_r31->unk_00 = temp_r31->unk_02 = 0; + return temp_r30; +} + +static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix) { + float temp_f31; + float temp_f30; + float temp_f29; + HsfanimStruct01 *var_r31; + s16 sp8; + s32 i; + + sp8 = 0; + switch (particle->unk_00) { + case 0: + temp_f29 = 360.0f / particle->unk_30; + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk08.x = sind(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f); + var_r31->unk08.y = 0.0f; + var_r31->unk08.z = cosd(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f); + var_r31->unk34.x = 0.0f; + var_r31->unk34.y = 0.0f; + var_r31->unk34.z = 0.0f; + } + particle->unk_02 = 30; + particle->unk_00++; + /* fallthrough */ + case 1: + particle->unk_02--; + temp_f31 = (30.0f - particle->unk_02) / 30.0f; + temp_f30 = particle->unk_02 / 30.0f; + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk34.x += 5.0f * temp_f30 * var_r31->unk08.x; + var_r31->unk34.y = 20.0f; + var_r31->unk34.z += 5.0f * temp_f30 * var_r31->unk08.z; + var_r31->unk2C = 20.0f + 60.0f * temp_f31; + var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = 0xFF; + var_r31->unk40.a = 64.0f * (1.0f - temp_f31 * temp_f31); + } + if (particle->unk_02 == 0) { + particle->unk_00++; + } + break; + case 2: + Hu3DModelKill(particle->unk_2E); + return; + } + DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); +} + +static s32 fn_1_4528(void) { + lbl_1_data_154 *= 0x41C64E6D; + lbl_1_data_154 += 0x3039; + return lbl_1_data_154 >> 16; +} + +static float fn_1_457C(float arg0, float arg1, float arg2) { + float var_f31; + + if (arg0 > 180.0f) { + arg0 -= 360.0f; + } else if (arg0 <= -180.0f) { + arg0 += 360.0f; + } + if (arg1 > 180.0f) { + arg1 -= 360.0f; + } else if (arg1 <= -180.0f) { + arg1 += 360.0f; + } + var_f31 = arg0 - arg1; + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } else if (var_f31 <= -180.0f) { + var_f31 += 360.0f; + } + arg0 = arg1 + var_f31 * arg2; + if (arg0 > 180.0f) { + arg0 -= 360.0f; + } else if (arg0 <= -180.0f) { + arg0 += 360.0f; + } + return arg0; +} + +static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3) { + Mtx sp38; + Mtx sp8; + + if (arg3 != 0.0f) { + PSMTXRotRad(arg0, 'Z', MTXDegToRad(arg3)); + } else { + PSMTXIdentity(arg0); + } + if (arg1 != 0.0f) { + PSMTXRotRad(sp38, 'X', MTXDegToRad(arg1)); + PSMTXConcat(sp38, arg0, arg0); + } + if (arg2 != 0.0f) { + PSMTXRotRad(sp8, 'Y', MTXDegToRad(arg2)); + PSMTXConcat(sp8, arg0, arg0); + } +} + +static void fn_1_4804(float *arg0, float *arg1) { + float temp_f29; + float var_f28; + double var_f30; + + arg1[0] = atan2d(arg0[10], arg0[6]); + arg1[2] = atan2d(arg0[0], arg0[1]); + temp_f29 = -arg0[2]; + if (1.0 - temp_f29 * temp_f29 < 0.0) { + var_f30 = -(1.0 - temp_f29 * temp_f29); + } else { + var_f30 = 1.0 - temp_f29 * temp_f29; + } + var_f28 = sqrtf(var_f30); + if (arg1[0] > 90.0f && arg1[0] < 270.0f && arg1[2] > 90.0f && arg1[2] < 270.0f) { + arg1[0] = fmod(180.0f + arg1[0], 360.0); + arg1[2] = fmod(180.0f + arg1[2], 360.0); + var_f28 = -var_f28; + } + arg1[1] = atan2d(var_f28, temp_f29); +} + +static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3) { + float temp_f31; + float var_f30; + + temp_f31 = 1.0 - arg0; + var_f30 = temp_f31 * temp_f31 * arg1 + temp_f31 * arg0 * arg2 * 2.0 + arg0 * arg0 * arg3; + return var_f30; +} + +static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) { + s32 i; + + for (i = 0; i < 3; i++) { + *(arg3++) = fn_1_4B10(arg4, *(arg0++), *(arg1++), *(arg2++)); + } +} + +static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3) { + float var_f31 = 2.0 * ((arg0 - 1.0) * arg1 + (1.0 - 2.0 * arg0) * arg2 + arg0 * arg3); + return var_f31; +} + +static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) { + float spC[3]; + float var_f29; + s32 i; + + for (i = 0; i < 3; i++) { + spC[i] = fn_1_4CA4(arg4, *(arg0++), *(arg1++), *(arg2++)); + } + var_f29 = VECMagPoint(spC[0], spC[1], spC[2]); + if (var_f29) { + var_f29 = 1.0 / var_f29; + for (i = 0; i < 3; i++) { + *(arg3++) = var_f29 * spC[i]; + } + } else { + *(arg3++) = 0.0f; + *(arg3++) = 0.0f; + *(arg3++) = 1.0f; + } +} + +static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3) { + float sp48[16]; + float sp8[16]; + double temp_f31; + s32 i; + + arg2[0] = 0.0f; + arg2[arg3 - 1] = 0.0f; + for (i = 0; i < arg3 - 1; i++) { + sp48[i] = arg0[i + 1] - arg0[i]; + if (sp48[i] == 0.0f) { + sp8[i + 1] = 0.0f; + } else { + sp8[i + 1] = (arg1[i + 1] - arg1[i]) / sp48[i]; + } + } + arg2[1] = sp8[2] - sp8[1]; + sp8[1] = 2.0f * (arg0[2] - arg0[0]); + for (i = 1; i < arg3 - 2; i++) { + temp_f31 = sp48[i] / sp8[i]; + arg2[i + 1] = sp8[i + 2] - sp8[i + 1] - temp_f31 * arg2[i]; + sp8[i + 1] = 2.0f * (arg0[i + 2] - arg0[i]) - temp_f31 * sp48[i]; + } + arg2[arg3 - 2] -= sp48[arg3 - 2] * arg2[arg3 - 1]; + for (i = arg3 - 2; i > 0; i--) { + if (sp8[i] == 0.0f) { + arg2[i] = 0.0f; + } else { + arg2[i] = (arg2[i] - sp48[i] * arg2[i + 1]) / sp8[i]; + } + } +} + +static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4) { + float temp_f31; + float temp_f30; + float var_f29; + s32 temp_r31; + + temp_r31 = arg0; + arg0 -= temp_r31; + temp_f31 = arg1[temp_r31 + 1] - arg1[temp_r31]; + temp_f30 = temp_f31 * arg0; + var_f29 = arg2[temp_r31] + temp_f30 * (temp_f30 * (3.0f * arg3[temp_r31] + temp_f30 * (arg3[temp_r31 + 1] - arg3[temp_r31]) / temp_f31) + ((arg2[temp_r31 + 1] - arg2[temp_r31]) / temp_f31 - temp_f31 * (2.0f * arg3[temp_r31] + arg3[temp_r31 + 1]))); + if (temp_f31 == 0.0f) { + var_f29 = arg2[temp_r31]; + } + return var_f29; +} + +static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3) { + Vec sp8; + float temp_f31; + float spD4[16]; + float sp94[16]; + s32 j; + s32 i; + + arg0[0] = 0.0f; + for (i = 1; i < arg3; i++) { + PSVECSubtract(&arg1[i], &arg1[i - 1], &sp8); + arg0[i] = arg0[i - 1] + PSVECMag(&sp8); + } + for (j = 0; j < 3; j++) { + for (i = 0; i < arg3; i++) { + spD4[i] = ((float*) &arg1[i])[j]; + } + fn_1_4FF4(arg0, spD4, sp94, arg3); + for (i = 0; i < arg3; i++) { + arg2[i][j] = sp94[i]; + } + } +} + +static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5) { + float sp48[16]; + float sp8[16]; + s32 i; + s32 j; + + for (i = 0; i < 3; i++) { + for (j = 0; j < arg5; j++) { + sp48[j] = ((float*) &arg3[j])[i]; + sp8[j] = arg4[j][i]; + } + ((float*) arg1)[i] = fn_1_52AC(arg0, arg2, sp48, sp8, arg5); + } +} + +static float fn_1_59F4(Vec *arg0) { + float var_f30; + float var_f29; + + var_f30 = arg0->x * arg0->x + arg0->y * arg0->y + arg0->z * arg0->z; + var_f30 = sqrtf(var_f30); + if (var_f30 != 0.0f) { + var_f29 = 1.0f / var_f30; + arg0->x *= var_f29; + arg0->y *= var_f29; + arg0->z *= var_f29; + } else { + arg0->x = arg0->y = arg0->z = 0.0f; + } + return var_f30; +} + +static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3) { + if (arg3 <= 0.0f) { + arg2->x = arg0.x; + arg2->y = arg0.y; + arg2->z = arg0.z; + arg3 = 0.0f; + } else if (arg3 >= 1.0f) { + arg2->x = arg0.x + arg1.x; + arg2->y = arg0.y + arg1.y; + arg2->z = arg0.z + arg1.z; + arg3 = 1.0f; + } else { + arg2->x = arg0.x + arg3 * arg1.x; + arg2->y = arg0.y + arg3 * arg1.y; + arg2->z = arg0.z + arg3 * arg1.z; + } +} + +static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2) { + float var_f31; + float temp_f30; + + var_f31 = arg2.x * (arg1.x - arg0.x) + arg2.y * (arg1.y - arg0.y) + arg2.z * (arg1.z - arg0.z); + temp_f30 = -(arg2.x * arg2.x + arg2.y * arg2.y + arg2.z * arg2.z); + if (temp_f30 != 0.0f) { + var_f31 /= temp_f30; + } + return var_f31; +} + +static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2) { + Vec sp44; + float var_f31; + + if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) { + return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z); + } + var_f31 = fn_1_5C64(*arg0, *arg1, *arg2); + fn_1_5B8C(*arg1, *arg2, &sp44, var_f31); + return (arg0->x - sp44.x) * (arg0->x - sp44.x) + (arg0->y - sp44.y) * (arg0->y - sp44.y) + (arg0->z - sp44.z) * (arg0->z - sp44.z); +} + +static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4) { + float var_f27; + + if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) { + return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z); + } + var_f27 = fn_1_5C64(*arg0, *arg1, *arg2); + fn_1_5B8C(*arg1, *arg2, arg3, var_f27); + arg4->x = arg3->x - arg0->x; + arg4->y = arg3->y - arg0->y; + arg4->z = arg3->z - arg0->z; + return fn_1_59F4(arg4); +} diff --git a/src/REL/m403Dll/scene.c b/src/REL/m403Dll/scene.c new file mode 100755 index 00000000..71a7f6cf --- /dev/null +++ b/src/REL/m403Dll/scene.c @@ -0,0 +1,1024 @@ +#include "REL/m403Dll.h" +#include "game/audio.h" +#include "game/frand.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/object.h" + +#include "ext_math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + char unk01[3]; + s32 unk04; + float unk08; + s32 unk0C[6]; + s32 unk24[12]; +} UnkBss9CData; // Size 0x54 + +static void fn_1_678C(omObjData *arg0); +static void fn_1_6810(omObjData *arg0); +static void fn_1_6814(omObjData *arg0); +static void fn_1_6980(omObjData *arg0); +static void fn_1_6C98(omObjData *arg0); +static void fn_1_6ED8(omObjData *arg0); +static void fn_1_6FE8(omObjData *arg0); +static void fn_1_73E8(omObjData *arg0); +static void fn_1_799C(void); +static void fn_1_7A98(s16 arg0); +static s32 fn_1_7B20(float arg0, float arg1); +static void fn_1_7BD4(s32 arg0, Vec *arg1); +static s32 fn_1_7C20(UnkBss9CData *arg0, s32 arg1); +static s32 fn_1_7D04(float arg0, float arg1, Vec *arg2); +static s32 fn_1_8254(void); +static s32 fn_1_8274(UnkBss9CData *arg0, s32 *arg1); + +static omObjData *lbl_1_bss_B4; +static omObjData *lbl_1_bss_B0; +static omObjData *lbl_1_bss_9C[5]; +static s32 lbl_1_bss_98; +static s32 lbl_1_bss_94; +static s32 lbl_1_bss_90; +static s32 lbl_1_bss_8C; +static s32 lbl_1_bss_88; +static s32 lbl_1_bss_84; +static float lbl_1_bss_80; +static s32 lbl_1_bss_7C; +static s32 lbl_1_bss_78; +static s32 lbl_1_bss_74; +static s32 lbl_1_bss_70; +static s32 lbl_1_bss_58[6]; + +static Vec lbl_1_data_158[] = { + { 92.39f, 0.0f, 38.27f }, + { 100.0f, 0.0f, 0.0f }, + { 92.39f, 0.0f, -38.27f }, + { 70.71f, 0.0f, -70.71f }, + { 38.27f, 0.0f, -92.39f }, + { 0.0f, 0.0f, -100.0f }, + { -38.27f, 0.0f, -92.39f }, + { -70.71f, 0.0f, -70.71f }, + { -92.39f, 0.0f, -38.27f }, + { -100.0f, 0.0f, 0.0f }, + { -92.39f, 0.0f, 38.27f }, + { -70.71f, 0.0f, 70.71f }, + { -38.27f, 0.0f, 92.39f }, + { 0.0f, 0.0f, 100.0f }, + { 38.27f, 0.0f, 92.39f }, + { 70.71f, 0.0f, 70.71f } +}; + +static Vec lbl_1_data_218[] = { + { 55.43f, 0.0f, 22.96f }, + { 60.0f, 0.0f, 0.0f }, + { 55.43f, 0.0f, -22.96f }, + { 42.43f, 0.0f, -42.43f }, + { 22.96f, 0.0f, -55.43f }, + { 0.0f, 0.0f, -60.0f }, + { -22.96f, 0.0f, -55.43f }, + { -42.43f, 0.0f, -42.43f }, + { -55.43f, 0.0f, -22.96f }, + { -60.0f, 0.0f, 0.0f }, + { -55.43f, 0.0f, 22.96f }, + { -42.43f, 0.0f, 42.43f }, + { -22.96f, 0.0f, 55.43f }, + { 0.0f, 0.0f, 60.0f }, + { 22.96f, 0.0f, 55.43f }, + { 42.43f, 0.0f, 42.43f } +}; + +static Vec lbl_1_data_2D8[] = { + { 38.79f, 0.0f, -53.4f }, + { 0.0f, 0.0f, -120.0f }, + { -38.79f, 0.0f, -53.4f }, + { -114.13f, 0.0f, -37.08f }, + { -62.77f, 0.0f, 20.4f }, + { -70.53f, 0.0f, 97.08f }, + { 0.0f, 0.0f, 66.0f }, + { 70.53f, 0.0f, 97.08f }, + { 62.77f, 0.0f, 20.4f }, + { 114.13f, 0.0f, -37.08f } +}; + +static Vec lbl_1_data_350[] = { + { 21.34f, 0.0f, -29.37f }, + { 0.0f, 0.0f, -66.0f }, + { -21.34f, 0.0f, -29.37f }, + { -62.77f, 0.0f, -20.4f }, + { -34.52f, 0.0f, 11.22f }, + { -38.79f, 0.0f, 53.4f }, + { 0.0f, 0.0f, 36.3f }, + { 38.79f, 0.0f, 53.4f }, + { 34.52f, 0.0f, 11.22f }, + { 62.77f, 0.0f, -20.4f } +}; + +static Vec lbl_1_data_3C8[] = { + { 110.87f, 0.0f, 45.92f }, + { 120.0f, 0.0f, 0.0f }, + { 110.87f, 0.0f, -45.92f }, + { 84.85f, 0.0f, -84.85f }, + { 45.92f, 0.0f, -110.87f }, + { 0.0f, 0.0f, -120.0f }, + { -45.92f, 0.0f, -110.87f }, + { -84.85f, 0.0f, -84.85f }, + { -110.87f, 0.0f, -45.92f }, + { -120.0f, 0.0f, 0.0f }, + { -110.87f, 0.0f, 45.92f }, + { -84.85f, 0.0f, 84.85f }, + { -45.92f, 0.0f, 110.87f }, + { 0.0f, 0.0f, 120.0f }, + { 45.92f, 0.0f, 110.87f }, + { 84.85f, 0.0f, 84.85f } +}; + +static Vec lbl_1_data_488[] = { + { 73.17f, 0.0f, 30.31f }, + { 79.2f, 0.0f, 0.0f }, + { 73.17f, 0.0f, -30.31f }, + { 56.0f, 0.0f, -56.0f }, + { 30.31f, 0.0f, -73.17f }, + { 0.0f, 0.0f, -79.2f }, + { -30.31f, 0.0f, -73.17f }, + { -56.0f, 0.0f, -56.0f }, + { -73.17f, 0.0f, -30.31f }, + { -79.2f, 0.0f, 0.0f }, + { -73.17f, 0.0f, 30.31f }, + { -56.0f, 0.0f, 56.0f }, + { -30.31f, 0.0f, 73.17f }, + { 0.0f, 0.0f, 79.2f }, + { 30.31f, 0.0f, 73.17f }, + { 56.0f, 0.0f, 56.0f } +}; + +static Vec lbl_1_data_548[] = { + { 48.49f, 0.0f, -66.74f }, + { 0.0f, 0.0f, -150.0f }, + { -48.49f, 0.0f, -66.74f }, + { -142.66f, 0.0f, -46.35f }, + { -78.46f, 0.0f, 25.49f }, + { -88.17f, 0.0f, 121.35f }, + { 0.0f, 0.0f, 82.5f }, + { 88.17f, 0.0f, 121.35f }, + { 78.46f, 0.0f, 25.49f }, + { 142.66f, 0.0f, -46.35f } +}; + +static Vec lbl_1_data_5C0[] = { + { 29.09f, 0.0f, -40.05f }, + { 0.0f, 0.0f, -90.0f }, + { -29.09f, 0.0f, -40.05f }, + { -85.59f, 0.0f, -27.81f }, + { -47.08f, 0.0f, 15.3f }, + { -52.9f, 0.0f, 72.81f }, + { 0.0f, 0.0f, 49.5f }, + { 52.9f, 0.0f, 72.81f }, + { 47.08f, 0.0f, 15.3f }, + { 85.59f, 0.0f, -27.81f } +}; + +static Vec lbl_1_data_638[] = { + { 129.1f, 0.0f, 54.6f }, + { 140.0f, 0.0f, 0.0f }, + { 129.3f, 0.0f, -53.6f }, + { 99.0f, 0.0f, -99.0f }, + { 53.6f, 0.0f, -129.3f }, + { 0.0f, 0.0f, -140.0f }, + { -53.6f, 0.0f, -129.3f }, + { -99.0f, 0.0f, -99.0f }, + { -129.4f, 0.0f, -53.5f }, + { -140.0f, 0.0f, 0.0f }, + { -136.0f, 0.0f, 20.4f }, + { -102.1f, 0.0f, -7.6f }, + { -70.0f, 0.0f, -14.0f }, + { -37.8f, 0.0f, -7.6f }, + { -10.6f, 0.0f, 10.6f }, + { 7.6f, 0.0f, 37.8f }, + { 14.0f, 0.0f, 70.0f }, + { 7.6f, 0.0f, 102.2f }, + { -20.4f, 0.0f, 136.0f }, + { 0.1f, 0.0f, 140.1f }, + { 53.9f, 0.0f, 129.5f }, + { 99.5f, 0.0f, 99.0f } +}; + +static Vec lbl_1_data_740[] = { + { 95.9f, 0.0f, 42.9f }, + { 106.6f, 0.0f, 0.4f }, + { 98.4f, 0.0f, -37.2f }, + { 81.7f, 0.0f, -65.9f }, + { 55.4f, 0.0f, -89.6f }, + { 11.5f, 0.0f, -101.7f }, + { -24.5f, 0.0f, -99.9f }, + { -60.9f, 0.0f, -88.6f }, + { -98.7f, 0.0f, -64.4f }, + { -110.4f, 0.0f, -41.5f }, + { -110.4f, 0.0f, -30.8f }, + { -90.4f, 0.0f, -42.3f }, + { -53.8f, 0.0f, -48.5f }, + { -14.6f, 0.0f, -40.5f }, + { 17.1f, 0.0f, -16.3f }, + { 35.8f, 0.0f, 28.2f }, + { 35.8f, 0.0f, 65.6f }, + { 24.7f, 0.0f, 101.6f }, + { 19.6f, 0.0f, 114.6f }, + { 34.9f, 0.0f, 114.5f }, + { 62.9f, 0.0f, 99.0f }, + { 83.0f, 0.0f, 73.2f } +}; + +static Vec lbl_1_data_848[] = { + { 110.9f, 0.0f, 45.9f }, + { 120.0f, 0.0f, 0.0f }, + { 110.9f, 0.0f, -45.8f }, + { 84.8f, 0.0f, -84.9f }, + { 45.9f, 0.0f, -110.9f }, + { 0.0f, 0.0f, -120.0f }, + { -45.9f, 0.0f, -110.9f }, + { -84.9f, 0.0f, -84.8f }, + { -110.9f, 0.0f, -45.9f }, + { -120.0f, 0.0f, 0.0f }, + { -116.5f, 0.0f, 17.5f }, + { -87.6f, 0.0f, -6.6f }, + { -60.0f, 0.0f, -12.0f }, + { -32.4f, 0.0f, -6.5f }, + { -9.1f, 0.0f, 9.1f }, + { 6.5f, 0.0f, 32.5f }, + { 12.0f, 0.0f, 60.0f }, + { 6.5f, 0.0f, 87.6f }, + { -17.5f, 0.0f, 116.5f }, + { 0.0f, 0.0f, 120.0f }, + { 45.9f, 0.0f, 110.9f }, + { 84.8f, 0.0f, 84.9f } +}; + +static Vec lbl_1_data_950[] = { + { 80.0f, 0.0f, 31.0f }, + { 83.9f, 0.0f, -0.1f }, + { 77.2f, 0.0f, -31.7f }, + { 60.4f, 0.0f, -56.8f }, + { 35.6f, 0.0f, -77.4f }, + { -0.5f, 0.0f, -84.1f }, + { -31.5f, 0.0f, -82.9f }, + { -58.9f, 0.0f, -71.4f }, + { -86.3f, 0.0f, -49.4f }, + { -91.5f, 0.0f, -36.4f }, + { -91.5f, 0.0f, -27.3f }, + { -82.1f, 0.0f, -29.8f }, + { -54.7f, 0.0f, -36.2f }, + { -21.9f, 0.0f, -30.9f }, + { 13.3f, 0.0f, -10.2f }, + { 28.3f, 0.0f, 18.3f }, + { 33.4f, 0.0f, 58.4f }, + { 28.0f, 0.0f, 81.6f }, + { 20.7f, 0.0f, 93.3f }, + { 30.4f, 0.0f, 93.3f }, + { 55.4f, 0.0f, 82.2f }, + { 70.4f, 0.0f, 59.3f } +}; + +static s32 lbl_1_data_A58[] = { + DATA_MAKE_NUM(DATADIR_M403, 4), + DATA_MAKE_NUM(DATADIR_M403, 5), + DATA_MAKE_NUM(DATADIR_M403, 6), + DATA_MAKE_NUM(DATADIR_M403, 9), + DATA_MAKE_NUM(DATADIR_M403, 12), + DATA_MAKE_NUM(DATADIR_M403, 15), + DATA_MAKE_NUM(DATADIR_M403, 7), + DATA_MAKE_NUM(DATADIR_M403, 8), + DATA_MAKE_NUM(DATADIR_M403, 10), + DATA_MAKE_NUM(DATADIR_M403, 11), + DATA_MAKE_NUM(DATADIR_M403, 13), + DATA_MAKE_NUM(DATADIR_M403, 14) +}; + +static Vec lbl_1_data_A88[] = { + { -400.0f, 0.0f, 300.0f }, + { 0.0f, 0.0f, 300.0f }, + { 400.0f, 0.0f, 300.0f }, + { -400.0f, 0.0f, 700.0f }, + { 0.0f, 0.0f, 700.0f }, + { 400.0f, 0.0f, 700.0f } +}; + +static s32 lbl_1_data_AD0[] = { 6, 8, 10 }; +static s32 lbl_1_data_ADC[] = { 7, 9, 11 }; +static s32 lbl_1_data_AE8[] = { 1, 2, 3, 4, 5 }; + +static Vec *lbl_1_data_AFC[] = { + lbl_1_data_3C8, + lbl_1_data_158, + lbl_1_data_548, + lbl_1_data_2D8, + lbl_1_data_638, + lbl_1_data_848 +}; + +static s32 lbl_1_data_B14[] = { + 16, 16, 10, 10, 22, 22 +}; + +static Vec lbl_1_data_B2C[] = { + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, -20.0f }, + { 0.0f, 0.0f, -20.0f }, + { 40.0f, 0.0f, -20.0f }, + { 40.0f, 0.0f, -20.0f } +}; + +static Vec *lbl_1_data_B74[][2] = { + { lbl_1_data_3C8, lbl_1_data_488 }, + { lbl_1_data_158, lbl_1_data_218 }, + { lbl_1_data_548, lbl_1_data_5C0 }, + { lbl_1_data_2D8, lbl_1_data_350 }, + { lbl_1_data_638, lbl_1_data_740 }, + { lbl_1_data_848, lbl_1_data_950 } +}; + +static s32 lbl_1_data_BA4[] = { + 16, 16, 10, 10, 22, 22 +}; + +void fn_1_650C(Process *arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 i; + + sp20.x = 0.0f; + sp20.y = 3000.0f; + sp20.z = 50.0f; + sp14.x = 0.0f; + sp14.y = 1.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + lbl_1_bss_B4 = omAddObjEx(arg0, 10, 2, 0, -1, fn_1_678C); + lbl_1_bss_B0 = omAddObjEx(arg0, 12, 4, 0, -1, fn_1_6814); + for (i = 0; i < 5; i++) { + lbl_1_bss_9C[i] = omAddObjEx(arg0, 14, 7, 0, -1, fn_1_6C98); + } + Hu3DShadowCreate(30.0f, 20.0f, 25000.0f); + Hu3DShadowTPLvlSet(0.65f); + Hu3DShadowPosSet(&sp20, &sp14, &sp8); + lbl_1_bss_98 = 0; + lbl_1_bss_94 = lbl_1_bss_90 = 2; + lbl_1_bss_84 = 0; + lbl_1_bss_88 = 0; + lbl_1_bss_80 = 0.75f; + lbl_1_bss_74 = 3; + lbl_1_bss_70 = 0; + lbl_1_bss_7C = 0; + lbl_1_bss_78 = 0; + memset(lbl_1_bss_58, 0, sizeof(lbl_1_bss_58)); +} + +void fn_1_676C(void) { + fn_1_799C(); +} + +static void fn_1_678C(omObjData *arg0) { + arg0->stat |= 0x100; + arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 16)); + arg0->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 17)); + arg0->func = fn_1_6810; +} + +static void fn_1_6810(omObjData *arg0) { +} + +static void fn_1_6814(omObjData *arg0) { + arg0->stat |= 0x100; + arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 0)); + arg0->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 3)); + arg0->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 1)); + arg0->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M403, 2)); + Hu3DMotionSpeedSet(arg0->model[2], 0.0f); + Hu3DModelShadowSet(arg0->model[1]); + Hu3DModelPosSet(arg0->model[1], 0.0f, 0.0f, -500.0f); + Hu3DData[arg0->model[3]].unk_94 = 0.0f; + Hu3DData[arg0->model[3]].unk_98 = 2.0f; + arg0->work[3] = 30; + arg0->func = fn_1_6980; +} + +static void fn_1_6980(omObjData *arg0) { + ModelData *var_r30; + UnkBss9CData *var_r29; + + if (lbl_1_bss_7C != 0) { + if (lbl_1_bss_78 == 0) { + if (arg0->work[0] < 60.0f) { + arg0->work[0]++; + var_r30 = &Hu3DData[arg0->model[1]]; + var_r30->rot.x = -120.0f * arg0->work[0] / 60.0f; + } else { + lbl_1_bss_78 ^= 1; + lbl_1_bss_7C = 0; + } + } else if (arg0->work[0] != 0) { + arg0->work[0]--; + var_r30 = &Hu3DData[arg0->model[1]]; + var_r30->rot.x = -120.0f * arg0->work[0] / 60.0f; + } else { + lbl_1_bss_78 ^= 1; + lbl_1_bss_7C = 0; + } + } + var_r29 = lbl_1_bss_9C[lbl_1_bss_94]->data; + if (lbl_1_bss_8C != 0) { + lbl_1_bss_8C = 0; + lbl_1_bss_88 = 1; + } + if (lbl_1_bss_94 != lbl_1_bss_90) { + lbl_1_bss_88 = 0; + lbl_1_bss_84 = 0; + } + lbl_1_bss_90 = lbl_1_bss_94; + if (var_r29->unk00_field0 != 0) { + lbl_1_bss_94 = (lbl_1_bss_94 + 1) % 5; + lbl_1_bss_84 = 1; + } + if (arg0->work[3] != 0) { + if (--arg0->work[3] == 0) { + HuAudFXPlay(0x521); + } + } +} + +static void fn_1_6C98(omObjData *arg0) { + UnkBss9CData *var_r29; + s32 i; + + var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r29), MEMORY_DEFAULT_NUM); + arg0->data = var_r29; + memset(arg0->data, 0, sizeof(*var_r29)); + for (i = 0; i < 12; i++) { + var_r29->unk24[i] = -1; + } + for (i = 0; i < 12U; i++) { + var_r29->unk24[i] = Hu3DModelCreateFile(lbl_1_data_A58[i]); + Hu3DModelAttrSet(var_r29->unk24[i], 1); + } + arg0->model[0] = var_r29->unk24[0]; + Hu3DModelAttrReset(arg0->model[0], 1); + var_r29->unk00_field0 = 0; + var_r29->unk04 = 4 - lbl_1_bss_98; + fn_1_6FE8(arg0); + arg0->trans.y = 5.0f; + arg0->trans.z = -500.0f; + switch (var_r29->unk04) { + case 0: + case 1: + break; + case 2: + for (i = 0; i < 7; i++) { + Hu3DModelShadowSet(arg0->model[i]); + } + break; + case 3: + for (i = 0; i < 7; i++) { + Hu3DModelShadowMapSet(arg0->model[i]); + } + arg0->trans.y = 2.5f; + break; + case 4: + for (i = 0; i < 7; i++) { + Hu3DModelShadowMapSet(arg0->model[i]); + } + arg0->trans.y = 0.0f; + break; + } + fn_1_6ED8(arg0); + lbl_1_bss_98++; + arg0->func = fn_1_73E8; +} + +static void fn_1_6ED8(omObjData *arg0) { + Mtx sp38; + Mtx sp8; + s32 i; + + PSMTXTrans(sp38, arg0->trans.x, arg0->trans.y, arg0->trans.z); + mtxRot(sp8, arg0->rot.x, arg0->rot.y, arg0->rot.z); + PSMTXConcat(sp38, sp8, sp38); + for (i = 0; i < 6; i++) { + PSMTXTrans(sp8, lbl_1_data_A88[i].x, lbl_1_data_A88[i].y, lbl_1_data_A88[i].z); + PSMTXConcat(sp38, sp8, sp8); + Hu3DModelPosSet(arg0->model[i + 1], sp8[0][3], sp8[1][3], sp8[2][3]); + Hu3DModelRotSet(arg0->model[i + 1], arg0->rot.x, arg0->rot.y, arg0->rot.z); + } +} + +static void fn_1_6FE8(omObjData *arg0) { + UnkBss9CData *temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 var_r24; + s32 var_r25; + s32 var_r26; + s32 sp8[6]; + s32 i; + + temp_r30 = arg0->data; + for (i = 0; i < 100; i++) { + temp_r29 = (frand8() * 3) >> 8; + temp_r28 = (frand8() * 3) >> 8; + var_r26 = lbl_1_data_AD0[temp_r29]; + lbl_1_data_AD0[temp_r29] = lbl_1_data_AD0[temp_r28]; + lbl_1_data_AD0[temp_r28] = var_r26; + temp_r29 = (frand8() * 3) >> 8; + temp_r28 = (frand8() * 3) >> 8; + var_r26 = lbl_1_data_ADC[temp_r29]; + lbl_1_data_ADC[temp_r29] = lbl_1_data_ADC[temp_r28]; + lbl_1_data_ADC[temp_r28] = var_r26; + temp_r29 = (frand8() * 5) >> 8; + temp_r28 = (frand8() * 5) >> 8; + var_r26 = lbl_1_data_AE8[temp_r29]; + lbl_1_data_AE8[temp_r29] = lbl_1_data_AE8[temp_r28]; + lbl_1_data_AE8[temp_r28] = var_r26; + } + var_r25 = 0; + for (i = 0; i < 6; i++) { + if (lbl_1_bss_58[i] < 6) { + sp8[var_r25++] = i; + } + } + for (i = 0; i < 100; i++) { + temp_r29 = (var_r25 * frand8()) >> 8; + temp_r28 = (var_r25 * frand8()) >> 8; + var_r26 = sp8[temp_r29]; + sp8[temp_r29] = sp8[temp_r28]; + sp8[temp_r28] = var_r26; + } + for (i = 0; i < 6; i++) { + temp_r30->unk0C[i] = 0; + } + for (i = 0; i < lbl_1_bss_70; i++) { + temp_r30->unk0C[sp8[i]] = lbl_1_data_ADC[i]; + } + for (; i < lbl_1_bss_74; i++) { + temp_r30->unk0C[sp8[i]] = lbl_1_data_AD0[i]; + } + var_r24 = 0; + for (i = 0; i < 6; i++) { + if (temp_r30->unk0C[i] == 0) { + temp_r30->unk0C[i] = lbl_1_data_AE8[var_r24++]; + } + } + memcpy(lbl_1_bss_58, &temp_r30->unk0C, sizeof(temp_r30->unk0C)); + for (i = 0; i < 6; i++) { + if (arg0->model[i + 1] >= 0) { + Hu3DModelAttrSet(arg0->model[i + 1], 1); + } + } + for (i = 0; i < 6; i++) { + arg0->model[i + 1] = temp_r30->unk24[temp_r30->unk0C[i]]; + Hu3DModelAttrReset(arg0->model[i + 1], 1); + } +} + +static void fn_1_73E8(omObjData *arg0) { + UnkBss9CData *temp_r30; + ModelData *var_r27; + s32 i; + + temp_r30 = arg0->data; + if (lbl_1_bss_88 == 0) { + if (lbl_1_bss_7C != 0 && temp_r30->unk04 < 3) { + var_r27 = &Hu3DData[lbl_1_bss_B0->model[1]]; + arg0->rot.x = var_r27->rot.x; + switch (temp_r30->unk04) { + case 0: + arg0->trans.z = -500.0f + 2.5f * lbl_1_bss_B0->work[0] / 60.0f; + break; + case 1: + arg0->trans.z = -500.0f + 5.0f * lbl_1_bss_B0->work[0] / 60.0f; + break; + case 2: + arg0->trans.z = -500.0f + 7.5f * lbl_1_bss_B0->work[0] / 60.0f; + break; + } + } else { + return; + } + } else { + switch (temp_r30->unk04) { + case 0: + if (lbl_1_bss_84 != 0) { + arg0->trans.z = -495.0f; + temp_r30->unk04++; + } + break; + case 1: + if (lbl_1_bss_84 != 0) { + arg0->trans.z = -492.5f; + temp_r30->unk00_field0 = 0; + temp_r30->unk04++; + temp_r30->unk08 = 0.0f; + for (i = 0; i < 7; i++) { + Hu3DModelShadowSet(arg0->model[i]); + } + } + break; + case 2: + if (lbl_1_bss_84 != 0) { + temp_r30->unk04++; + arg0->trans.y = 2.5f; + for (i = 0; i < 7; i++) { + Hu3DModelShadowReset(arg0->model[i]); + Hu3DModelShadowMapSet(arg0->model[i]); + } + } else { + temp_r30->unk08 += lbl_1_bss_80; + if (temp_r30->unk08 > 90.0f) { + temp_r30->unk00_field0 = 1; + temp_r30->unk08 = 90.0f; + HuAudFXPlay(0x522); + } + arg0->rot.x = -120.0 * cosd(temp_r30->unk08); + arg0->trans.z = 7.5 * cosd(temp_r30->unk08) + -500.0; + } + break; + case 3: + if (lbl_1_bss_84 != 0) { + temp_r30->unk04++; + arg0->trans.y = 0.0f; + } + break; + case 4: + if (lbl_1_bss_84 != 0) { + temp_r30->unk04 = 0; + arg0->trans.y = 5.0f; + arg0->trans.z = -497.5f; + arg0->rot.x = -120.0f; + for (i = 0; i < 7; i++) { + fn_1_7A98(arg0->model[i]); + } + fn_1_6FE8(arg0); + } + break; + } + } + fn_1_6ED8(arg0); +} + +static void fn_1_799C(void) { + omObjData* temp_r30; + UnkBss9CData *temp_r29; + s32 i; + s32 j; + + for (i = 0; i < 5; i++) { + temp_r30 = lbl_1_bss_9C[i]; + temp_r29 = temp_r30->data; + if (temp_r29 != NULL) { + for (j = 0; j < 12; j++) { + if (temp_r29->unk24[j] >= 0) { + Hu3DModelKill(temp_r29->unk24[j]); + } + } + HuMemDirectFree(temp_r29); + lbl_1_bss_9C[i]->data = NULL; + } + for (i = 0; i < temp_r30->mdlcnt; i++) { + temp_r30->model[i] = -1; + } + } +} + +static void fn_1_7A98(s16 arg0) { + s16 i; + HsfData *temp_r31; + HsfObject *var_r28; + HsfObject *var_r30; + HsfConstData *temp_r27; + + temp_r31 = Hu3DData[arg0].hsfData; + var_r28 = temp_r31->object; + for (i = 0; i < temp_r31->objectCnt; i++, var_r28++) { + var_r30 = var_r28; + if (var_r30->constData) { + temp_r27 = var_r30->constData; + temp_r27->flags &= ~8; + } + } +} + +static s32 fn_1_7B20(float arg0, float arg1) { + s32 var_r31; + s32 var_r30; + + var_r31 = (arg0 + 600.0f) / 400.0f; + var_r30 = (arg1 + 400.0f) / 400.0f; + if (var_r31 < 0) { + var_r31 = 0; + } else if (var_r31 > 2) { + var_r31 = 2; + } + if (var_r30 < 0) { + var_r30 = 0; + } else if (var_r30 > 1) { + var_r30 = 1; + } + return var_r31 + var_r30 * 3; +} + +static void fn_1_7BD4(s32 arg0, Vec *arg1) { + arg1->x = lbl_1_data_A88[arg0].x; + arg1->y = lbl_1_data_A88[arg0].y; + arg1->z = lbl_1_data_A88[arg0].z; +} + +static s32 fn_1_7C20(UnkBss9CData *arg0, s32 arg1) { + return arg0->unk0C[arg1]; +} + +void fn_1_7C30(float arg0) { + lbl_1_bss_8C = 1; + lbl_1_bss_80 = arg0; +} + +void fn_1_7C50(s32 arg0) { + lbl_1_bss_74 = arg0; +} + +void fn_1_7C60(void) { + float var_f30; + + lbl_1_bss_7C = 1; + var_f30 = (lbl_1_bss_78 == 0) ? 1.6666666f : -1.6666666f; + Hu3DMotionSpeedSet(lbl_1_bss_B0->model[2], var_f30); + HuAudFXPlay(0x524); +} + +static s32 fn_1_7D04(float arg0, float arg1, Vec *arg2) { + Mtx sp4C; + Mtx sp1C; + Vec sp10; + Vec *var_r30; + s32 temp_r28; + s32 temp_r21; + s32 temp_r23; + omObjData *temp_r31; + UnkBss9CData *var_r22; + s32 i; + + temp_r31 = lbl_1_bss_9C[lbl_1_bss_94]; + var_r22 = temp_r31->data; + temp_r21 = fn_1_7B20(arg0, arg1); + temp_r28 = fn_1_7C20(var_r22, temp_r21); + if (temp_r28 < 6) { + return 0; + } + temp_r28 -= 6; + fn_1_7BD4(temp_r21, &sp10); + sp10 = lbl_1_data_A88[temp_r21]; + PSMTXTrans(sp4C, temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + mtxRot(sp1C, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); + PSMTXConcat(sp4C, sp1C, sp4C); + PSMTXTrans(sp1C, sp10.x, sp10.y, sp10.z); + PSMTXConcat(sp4C, sp1C, sp4C); + var_r30 = lbl_1_data_AFC[temp_r28]; + temp_r23 = lbl_1_data_B14[temp_r28]; + for (i = 0; i < temp_r23; i++) { + PSMTXTrans(sp1C, var_r30->x, var_r30->y, var_r30->z); + PSMTXConcat(sp4C, sp1C, sp1C); + arg2->x = sp1C[0][3]; + arg2->y = sp1C[1][3]; + arg2->z = sp1C[2][3]; + arg2++; + var_r30++; + } + return temp_r23; +} + +float fn_1_7F78(float arg0, float arg1) { + float temp_f30; + float var_f31; + omObjData *temp_r31; + + temp_r31 = lbl_1_bss_9C[lbl_1_bss_94]; + temp_f30 = -(arg1 - temp_r31->trans.z); + if (cosd(temp_r31->rot.x) <= 0.0) { + var_f31 = 9999.0f; + } else { + var_f31 = temp_f30 * sind(temp_r31->rot.x) / cosd(temp_r31->rot.x); + if (var_f31 > 9999.0f) { + var_f31 = 9999.0f; + } + } + return var_f31; +} + +float fn_1_80D4(Vec *arg0, float arg1) { + return fn_1_7F78(0.0f, arg0->z - arg1); +} + +static s32 fn_1_8254(void) { + return lbl_1_bss_7C; +} + +s32 fn_1_8264(void) { + return lbl_1_bss_88; +} + +static s32 fn_1_8274(UnkBss9CData *arg0, s32 *arg1) { + s32 var_r30; + s32 i; + + var_r30 = 0; + for (i = 0; i < 6; i++) { + if (arg0->unk0C[i] >= 6) { + arg1[var_r30++] = i; + } + } + return var_r30; +} + +s32 fn_1_82D0(Vec *arg0) { + omObjData *temp_r31; + UnkBss9CData *temp_r28; + s32 sp8[6]; + s32 var_r26; + s32 temp_r27; + s32 i; + + temp_r31 = lbl_1_bss_9C[lbl_1_bss_94]; + temp_r28 = temp_r31->data; + var_r26 = fn_1_8274(temp_r28, sp8); + for (i = 0; i < var_r26; i++) { + fn_1_7BD4(sp8[i], arg0); + temp_r27 = fn_1_7C20(temp_r28, sp8[i]) - 6; + arg0->x += temp_r31->trans.x + lbl_1_data_B2C[temp_r27].x; + arg0->y += temp_r31->trans.y + lbl_1_data_B2C[temp_r27].y; + arg0->z += temp_r31->trans.z + lbl_1_data_B2C[temp_r27].z; + arg0++; + } + return var_r26; +} + +s32 fn_1_8470(Vec *arg0) { + Mtx sp50; + Mtx sp20; + omObjData* temp_r30; + UnkBss9CData *temp_r27; + s32 sp8[6]; + s32 temp_r26; + s32 var_r25; + s32 i; + + temp_r30 = lbl_1_bss_9C[lbl_1_bss_94]; + temp_r27 = temp_r30->data; + var_r25 = fn_1_8274(temp_r27, sp8); + PSMTXTrans(sp50, temp_r30->trans.x, temp_r30->trans.y, temp_r30->trans.z); + mtxRot(sp20, temp_r30->rot.x, temp_r30->rot.y, temp_r30->rot.z); + PSMTXConcat(sp50, sp20, sp50); + for (i = 0; i < var_r25; i++) { + fn_1_7BD4(sp8[i], arg0); + temp_r26 = fn_1_7C20(temp_r27, sp8[i]) - 6; + arg0->x += lbl_1_data_B2C[temp_r26].x; + arg0->y += lbl_1_data_B2C[temp_r26].y; + arg0->z += lbl_1_data_B2C[temp_r26].z; + PSMTXTrans(sp20, arg0->x, arg0->y, arg0->z); + PSMTXConcat(sp50, sp20, sp20); + arg0->x = sp20[0][3]; + arg0->y = sp20[1][3]; + arg0->z = sp20[2][3]; + arg0++; + } + return var_r25; +} + +void fn_1_8670(s32 arg0) { + if (arg0 > lbl_1_bss_74) { + arg0 = lbl_1_bss_74; + } + lbl_1_bss_70 = arg0; +} + +s32 fn_1_86A0(Vec *arg0, Vec *arg1) { + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + float var_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + s32 temp_r17; + s32 temp_r21; + s32 temp_r24; + s32 temp_r27; + s32 var_r20; + Vec *temp_r29; + Vec *temp_r30; + omObjData *temp_r28; + UnkBss9CData *temp_r18; + s32 i; + + temp_r28 = lbl_1_bss_9C[lbl_1_bss_94]; + temp_r18 = temp_r28->data; + if (temp_r28->rot.x > 0.0f || temp_r28->rot.x <= -90.0f) { + return 0; + } + PSVECSubtract(arg0, &temp_r28->trans, &sp3C); + sp3C.z /= cosd(temp_r28->rot.x); + temp_r17 = fn_1_7B20(arg0->x, arg0->z); + temp_r24 = fn_1_7C20(temp_r18, temp_r17); + if (temp_r24 < 6) { + return 0; + } + temp_r24 -= 6; + sp48 = lbl_1_data_A88[temp_r17]; + PSVECSubtract(&sp3C, &sp48, &sp3C); + temp_r30 = lbl_1_data_B74[temp_r24][0]; + temp_r29 = lbl_1_data_B74[temp_r24][1]; + temp_r21 = lbl_1_data_BA4[temp_r24]; + for (i = 0; i < temp_r21; i++) { + temp_r27 = (i + 1) % temp_r21; + PSVECSubtract(&temp_r30[temp_r27], &temp_r30[i], &sp24); + PSVECSubtract(&sp3C, &temp_r30[temp_r27], &sp18); + PSVECCrossProduct(&sp24, &sp18, &spC); + if (spC.y < 0.0f) { + continue; + } + PSVECSubtract(&temp_r29[temp_r27], &temp_r30[temp_r27], &sp24); + PSVECSubtract(&sp3C, &temp_r29[temp_r27], &sp18); + PSVECCrossProduct(&sp24, &sp18, &spC); + if (spC.y < 0.0f) { + continue; + } + PSVECSubtract(&temp_r29[i], &temp_r29[temp_r27], &sp24); + PSVECSubtract(&sp3C, &temp_r29[i], &sp18); + PSVECCrossProduct(&sp24, &sp18, &spC); + if (spC.y < 0.0f) { + continue; + } + PSVECSubtract(&temp_r30[i], &temp_r29[i], &sp24); + PSVECSubtract(&sp3C, &temp_r30[i], &sp18); + PSVECCrossProduct(&sp24, &sp18, &spC); + if (spC.y < 0.0f) { + continue; + } + PSVECSubtract(&temp_r30[temp_r27], &temp_r30[i], &sp24); + temp_f30 = (sp3C.x * sp24.x - sp24.x * temp_r30[i].x + sp3C.y * sp24.y - sp24.y * temp_r30[i].y + sp3C.z * sp24.z - sp24.z * temp_r30[i].z) / (sp24.x * sp24.x + sp24.y * sp24.y + sp24.z * sp24.z); + sp30.x = temp_r30[i].x + temp_f30 * sp24.x; + sp30.y = temp_r30[i].y + temp_f30 * sp24.y; + sp30.z = temp_r30[i].z + temp_f30 * sp24.z; + PSVECSubtract(&sp30, &sp3C, &spC); + temp_f28 = PSVECMag(&spC); + PSVECSubtract(&temp_r29[temp_r27], &temp_r29[i], &sp18); + temp_f29 = (sp3C.x * sp18.x - sp18.x * temp_r29[i].x + sp3C.y * sp18.y - sp18.y * temp_r29[i].y + sp3C.z * sp18.z - sp18.z * temp_r29[i].z) / (sp18.x * sp18.x + sp18.y * sp18.y + sp18.z * sp18.z); + sp30.x = temp_r29[i].x + temp_f29 * sp18.x; + sp30.y = temp_r29[i].y + temp_f29 * sp18.y; + sp30.z = temp_r29[i].z + temp_f29 * sp18.z; + PSVECSubtract(&sp30, &sp3C, &spC); + temp_f27 = PSVECMag(&spC); + if (temp_f28 == 0.0f) { + var_f31 = temp_f30; + } else if (temp_f27 == 0.0f) { + var_f31 = temp_f29; + } else { + temp_f26 = 1.0f - temp_f28 / (temp_f28 + temp_f27); + var_f31 = temp_f30 * temp_f26 + temp_f29 * (1.0f - temp_f26); + } + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } else if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + sp3C.x = temp_r29[i].x + var_f31 * sp18.x; + sp3C.y = temp_r29[i].y + var_f31 * sp18.y; + sp3C.z = temp_r29[i].z + var_f31 * sp18.z; + arg1->x = temp_r28->trans.x + sp48.x + sp3C.x; + arg1->y = temp_r28->trans.y + sp48.y + sp3C.y; + arg1->z = temp_r28->trans.z + (sp48.z + sp3C.z) * cosd(temp_r28->rot.x); + return 1; + } + var_r20 = 0; + for (i = 0; i < temp_r21; i++) { + temp_r27 = (i + 1) % temp_r21; + var_f31 = (sp3C.z - temp_r30[i].z) / (temp_r30[temp_r27].z - temp_r30[i].z); + spC.x = temp_r30[i].x + var_f31 * (temp_r30[temp_r27].x - temp_r30[i].x); + if (var_f31 >= 0.0f && var_f31 < 1.0f && spC.x > sp3C.x) { + var_r20++; + } + } + if (var_r20 & 1) { + arg1->x = arg0->x; + arg1->y = arg0->y; + arg1->z = arg0->z; + return 1; + } + return 0; +} diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c index 2b21ac52..5bb0ae3a 100755 --- a/src/REL/option/rumble.c +++ b/src/REL/option/rumble.c @@ -129,13 +129,13 @@ static void fn_1_32F0(omObjData *arg0) { fn_1_39E0(temp_r31->unk00, 1, 1); temp_r31->unk20 = 1; temp_r31->unk28 = 0; - GWRumbleSet(1); + GWRumbleSet(1); arg0->unk10 = 3; } else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) { fn_1_39E0(temp_r31->unk00, 0, 1); temp_r31->unk20 = 0; temp_r31->unk28 = 0; - GWRumbleSet(0); + GWRumbleSet(0); arg0->unk10 = 3; } } diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 8598cf4b..458235f4 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -84,10 +84,10 @@ static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { }, { 0x0000000B, { { 0x00000062, 0xFFFFFFFF, 0x00320036, 0x00320072 }, { 0x00000063, 0xFFFFFFFF, 0x00320037, 0x00320073 }, { 0x00000064, 0xFFFFFFFF, 0x00320038, 0x00320074 }, { 0x00000065, 0xFFFFFFFF, 0x00320039, 0x00320075 }, - { 0x00000066, 0xFFFFFFFF, 0x0032003A, 0x00320076 }, { 0x00000067, 0xFFFFFFFF, 0x0032003B, 0x00320077 }, - { 0x00000068, 0xFFFFFFFF, 0x0032003C, 0x00320078 }, { 0x00000069, 0xFFFFFFFF, 0x0032003D, 0x00320079 }, - { 0x0000006A, 0xFFFFFFFF, 0x0032003E, 0x0032007A }, { 0x0000006B, 0xFFFFFFFF, 0x0032003F, 0x0032007B }, - { 0x0000006C, 0xFFFFFFFF, 0x00320040, 0x0032007C } + { 0x00000066, 0xFFFFFFFF, 0x0032003A, 0x00320076 }, { 0x00000067, 0xFFFFFFFF, 0x0032003B, 0x00320077 }, + { 0x00000068, 0xFFFFFFFF, 0x0032003C, 0x00320078 }, { 0x00000069, 0xFFFFFFFF, 0x0032003D, 0x00320079 }, + { 0x0000006A, 0xFFFFFFFF, 0x0032003E, 0x0032007A }, { 0x0000006B, 0xFFFFFFFF, 0x0032003F, 0x0032007B }, + { 0x0000006C, 0xFFFFFFFF, 0x00320040, 0x0032007C } }, }, }; diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index c17f0a58..615dce8c 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -1114,7 +1114,7 @@ static void fn_1_3624(void) { } temp_r19 = HuAudFXPlay(0x40C); fn_1_4774(); - WipeCreate(1, 0, -1); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); lbl_1_bss_6B0 = 1; HuAudFXPlay(0x413); while (TRUE) { @@ -1163,7 +1163,7 @@ static void fn_1_3624(void) { lbl_1_bss_660.x = lbl_1_bss_660.z = 0.0f; BoardAudSeqFadeOut(1, 1000); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, -1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); HuAudFXPlay(0x401); temp_f28 = (-lbl_1_bss_63C - lbl_1_bss_660.y) / 30.0f; for (i = 0; i < 30; i++) { @@ -1213,7 +1213,7 @@ static void fn_1_45F4(void) { BoardAudSeqPause(0, 0, 1000); BoardCameraMoveSet(1); BoardCameraMotionWait(); - WipeCreate(1, 0, 21); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1316,7 +1316,7 @@ static s32 fn_1_48B4(void) { HuAudFXPlay(0x402); BoardStatusShowSetAll(0); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 21); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1930,7 +1930,7 @@ static void fn_1_77EC(s32 arg0, s32 arg1) { static void fn_1_7894(void) { lbl_1_bss_6B1 = 1; WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 21); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1987,7 +1987,7 @@ static void fn_1_7A64(void) { fn_1_852C(); BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670); BoardCameraMotionWait(); - WipeCreate(1, 0, -1); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); lbl_1_bss_6B0 = 1; temp_r19 = HuAudFXPlay(0x412); while (TRUE) { @@ -2005,13 +2005,13 @@ static void fn_1_7A64(void) { if (lbl_1_bss_0->unk00_field0 == 0) { if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 20.0f && var_r28 == 0) { WipeColorSet(0, 0, 0); - WipeCreate(2, 0, -1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); var_r28 = 1; } } else { if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644 - 20.0f && var_r28 == 0) { WipeColorSet(0, 0, 0); - WipeCreate(2, 0, -1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); var_r28 = 1; } } diff --git a/src/REL/w04Dll/big_boo.c b/src/REL/w04Dll/big_boo.c index 4e897c0f..ff859078 100755 --- a/src/REL/w04Dll/big_boo.c +++ b/src/REL/w04Dll/big_boo.c @@ -301,7 +301,7 @@ static void fn_1_68D8(void) { HuPrcVSleep(); } BoardModelAlphaSet(lbl_1_bss_274, 0); - WipeCreate(2, 0, 60); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); WipeColorSet(0, 0, 0); while (WipeStatGet() != 0) { HuPrcVSleep(); @@ -384,7 +384,7 @@ static void fn_1_6CF8(void) { 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); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -417,7 +417,7 @@ static void fn_1_7300(void) { s32 i; s32 j; - WipeCreate(2, 0, 30); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -453,7 +453,7 @@ static void fn_1_7300(void) { 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); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c index e0a282bf..acc1bb8b 100755 --- a/src/REL/w06Dll/bowser.c +++ b/src/REL/w06Dll/bowser.c @@ -317,7 +317,7 @@ static void fn_1_95AC(s32 arg0) { HuPrcVSleep(); } WipeColorSet(0xFF, 0xFF, 0xFF); - WipeCreate(2, 1, 1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_CROSS, 1); HuPrcSleep(2); BoardCameraMoveSet(0); BoardModelVisibilitySet(BoardPlayerModelGet(arg0), 0); @@ -334,7 +334,7 @@ static void fn_1_95AC(s32 arg0) { sp38.z = sp2C.z; BoardPlayerPosSetV(arg0, &sp38); BoardModelVisibilitySet(BoardPlayerModelGet(arg0), 1); - WipeCreate(1, 1, 30); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_CROSS, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -553,7 +553,7 @@ static void fn_1_A408(s32 arg0) { _SetFlag(FLAG_ID_MAKE(1, 28)); _SetFlag(FLAG_ID_MAKE(1, 14)); WipeColorSet(0xFF, 0xFF, 0xFF); - WipeCreate(2, 0, -1); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -669,7 +669,7 @@ static void fn_1_AB4C(s32 arg0, s32 arg1) { BoardCameraMotionStartEx(lbl_1_data_49A, &spC, &sp18, 2000.0f, -1.0f, 2); BoardCameraMotionWait(); BoardCameraTargetModelSet(-1); - WipeCreate(1, 0, 21); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1048,7 +1048,7 @@ static void fn_1_C40C(void) { sp20.y += 250.0f; BoardModelPosSetV(lbl_1_data_4A0, &sp20); BoardModelScaleSet(lbl_1_data_4A0, 10.0f, 10.0f, 10.0f); - WipeCreate(1, 0, 21); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1083,7 +1083,7 @@ static void fn_1_C40C(void) { BoardWinKill(); BoardAudSeqFadeOut(1, 1000); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 21); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } diff --git a/src/game/board/item.c b/src/game/board/item.c index 949e4983..e9486df6 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -863,7 +863,7 @@ static void ExecItemPipe(void) { HuPrcVSleep(); } WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 30); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -889,7 +889,7 @@ static void ExecItemPipe(void) { BoardPlayerVoiceEnableSet(sp2C[var_r31], 4, 0); BoardModelVisibilitySet(BoardPlayerModelGet(sp2C[var_r31]), 0); } - WipeCreate(1, 0, 30); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1422,7 +1422,7 @@ static void ExecItemWhistle(void) { HuPrcVSleep(); } WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 60); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1437,7 +1437,7 @@ static void ExecItemWhistle(void) { for (var_r31 = 0; var_r31 < 4; var_r31++) { BoardModelVisibilitySet(sp20[var_r31], 1); } - WipeCreate(1, 0, 60); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1540,7 +1540,7 @@ static void ExecItemWhistle(void) { BoardModelPosSetV(temp_r28, &sp9C); var_f30 *= 0.945f; if (sp9C.y >= 500.0f && var_r26 == 0) { - WipeCreate(2, 0, 45); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 45); BoardAudSeqFadeOut(0, 1000); var_r26 = 1; } @@ -2248,7 +2248,7 @@ static void GenieSceneExec(void) { Hu3DModelPosSet(temp_r27, booCamPos.x, booCamPos.y, booCamPos.z - 175.0f); temp_r23 = Hu3DData[temp_r27].unk_120; temp_r23->unk_02 = 1; - WipeCreate(1, 0, 45); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 45); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -2345,7 +2345,7 @@ static void GenieSceneExec(void) { } HuPrcVSleep(); } - WipeCreate(2, 0, 45); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 45); BoardAudSeqFadeOut(1, 1000); while (WipeStatGet() != 0) { HuPrcVSleep(); @@ -2428,7 +2428,7 @@ static void ExecItemGenie(void) { HuAudFXStop(temp_r25); HuAudFXPauseAll(1); WipeColorSet(0xFF, 0xFF, 0xFF); - WipeCreate(2, 0, 45); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 45); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -2448,7 +2448,7 @@ static void ExecItemGenie(void) { BoardPlayerPosSetV(currItemRestore, &spC); BoardCameraMotionWait(); BoardCameraMoveSet(1); - WipeCreate(1, 0, 45); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 45); HuPrcSleep(15); BoardAudSeqPause(0, 0, 1000); while (WipeStatGet() != 0) { diff --git a/src/game/board/pause.c b/src/game/board/pause.c index a3b6a10d..3bdcbfe3 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -506,13 +506,13 @@ static void PauseConfigObjFunc(omObjData *arg0) { break; case 1: if (UpdatePauseBox(arg0, temp_r31, 1) != 0) { - GWMGExplainSet(boxState[1]); + GWMGExplainSet(boxState[1]); } UpdatePauseText(cursorPos); break; case 2: if (UpdatePauseBox(arg0, temp_r31, 2) != 0) { - GWMGShowComSet(boxState[2]); + GWMGShowComSet(boxState[2]); } UpdatePauseText(cursorPos); break; @@ -534,7 +534,7 @@ static void PauseConfigObjFunc(omObjData *arg0) { break; case 4: if (UpdatePauseBox(arg0, temp_r31, 4) != 0) { - GWRumbleSet(boxState[4]); + GWRumbleSet(boxState[4]); } UpdatePauseText(cursorPos); break; @@ -542,13 +542,13 @@ static void PauseConfigObjFunc(omObjData *arg0) { if (UpdatePauseBoxExt(arg0, temp_r31, 5) != 0) { switch (boxState[5]) { case 0: - GWMessSpeedSet(2); + GWMessSpeedSet(2); break; case 1: - GWMessSpeedSet(1); + GWMessSpeedSet(1); break; case 2: - GWMessSpeedSet(0); + GWMessSpeedSet(0); break; } } @@ -562,13 +562,13 @@ static void PauseConfigObjFunc(omObjData *arg0) { if (UpdatePauseBoxExt(arg0, temp_r31, 6) != 0) { switch (boxState[6]) { case 0: - GWSaveModeSet(1); + GWSaveModeSet(1); break; case 1: - GWSaveModeSet(0); + GWSaveModeSet(0); break; case 2: - GWSaveModeSet(2); + GWSaveModeSet(2); break; } } diff --git a/src/game/board/star.c b/src/game/board/star.c index 2c246d38..79f3e8fa 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -663,7 +663,7 @@ void BoardStarShowNext(s32 arg0) { var_r26 = &wipeData; if (var_r26->mode == 0) { WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 21); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -727,7 +727,7 @@ void BoardStarShowNext(s32 arg0) { BoardCameraMotionWait(); BoardCameraMoveSet(1); HuPrcSleep(1); - WipeCreate(1, 0, 21); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -758,7 +758,7 @@ void BoardStarShowNext(s32 arg0) { } BoardAudSeqFadeOut(1, 1000); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 21); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -774,7 +774,7 @@ void BoardStarShowNext(s32 arg0) { BoardCameraMotionWait(); BoardCameraMoveSet(1); BoardStatusItemSet(1); - WipeCreate(1, 0, 21); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } diff --git a/src/game/board/start.c b/src/game/board/start.c index 0f0ea6a7..5013d43a 100755 --- a/src/game/board/start.c +++ b/src/game/board/start.c @@ -148,7 +148,7 @@ static void ExecStart(void) { InitCamera(); CreateTapWin(); InitHost(); - WipeCreate(1, 0, 0x15); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -172,7 +172,7 @@ static void ExecStart(void) { if (_CheckFlag(0x1000B)) { BoardTutorialHookExec(4, 0); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x15); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -188,7 +188,7 @@ static void ExecStart(void) { BoardCameraMotionWait(); BoardCameraMoveSet(1); BoardModelVisibilitySet(BoardStarHostMdlGet(), 0); - WipeCreate(1, 0, 0x15); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -197,7 +197,7 @@ static void ExecStart(void) { BoardCameraNearFarSet(100.0f, 13000.0f); if (GWBoardGet() == 7 || GWBoardGet() == 8) { WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x15); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -213,7 +213,7 @@ static void ExecStart(void) { BoardCameraViewSet(2); BoardCameraMotionWait(); BoardCameraMoveSet(1); - WipeCreate(1, 0, 0x15); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } diff --git a/src/game/hsfman.c b/src/game/hsfman.c index 91f52d18..2108aeb2 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1500,7 +1500,7 @@ void Hu3DLLightInfinitytSet(s16 dataIndex, s16 lightIndex) { Hu3DLightInfinitytSet(light); } -inline void Hu3DLightPointSet(LightData *light, u16 arg1, f32 arg8, f32 arg9) { +inline void Hu3DLightPointSet(LightData *light, f32 arg8, f32 arg9, u16 arg1) { light->unk_00 &= 0xFF00; light->unk_00 |= 2; light->unk_04 = arg8; @@ -1508,19 +1508,19 @@ inline void Hu3DLightPointSet(LightData *light, u16 arg1, f32 arg8, f32 arg9) { light->unk_02 = arg1; } -void Hu3DGLightPointSet(s16 arg0, u16 arg1, f32 arg8, f32 arg9) { +void Hu3DGLightPointSet(s16 arg0, f32 arg8, f32 arg9, u16 arg1) { LightData* light = &Hu3DGlobalLight[arg0]; - Hu3DLightPointSet(light, arg1, arg8, arg9); + Hu3DLightPointSet(light, arg8, arg9, arg1); } -void Hu3DLLightPointSet(s16 arg0, s16 arg1, u16 arg2, f32 arg8, f32 arg9) { +void Hu3DLLightPointSet(s16 arg0, s16 arg1, f32 arg8, f32 arg9, u16 arg2) { ModelData* data; LightData* light; data = &Hu3DData[arg0]; light = &Hu3DLocalLight[data->unk_38[arg1]]; - Hu3DLightPointSet(light, arg2, arg8, arg9); + Hu3DLightPointSet(light, arg8, arg9, arg2); } void Hu3DGLightKill(s16 index) { @@ -1755,7 +1755,7 @@ s32 Hu3DModelLightInfoSet(s16 arg0, s16 arg1) { Hu3DGLightSpotSet(sp12, 2, var_r18->light.cutoff); break; case 1: - Hu3DGLightPointSet(sp12, 2, var_r18->data.base.scale.x - var_r18->data.base.rot.z, 1.0f); + Hu3DGLightPointSet(sp12, var_r18->data.base.scale.x - var_r18->data.base.rot.z, 1.0f, 2); Hu3DGLightPosSet(sp12, var_r18->light.pos.x, var_r18->light.pos.y, var_r18->light.pos.z, var_r18->light.target.x, var_r18->light.target.y, var_r18->light.target.z); break; case 2: diff --git a/src/game/saveload.c b/src/game/saveload.c index 1b717efc..a7fe736c 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -152,7 +152,7 @@ s32 SLFileCreate(char *fileName, u32 size, void *addr) { } _SetFlag(FLAG_ID_MAKE(3, 0)); result = HuCardWrite(&curFileInfo, addr, size, 0); - _ClearFlag(FLAG_ID_MAKE(3, 0)); + _ClearFlag(FLAG_ID_MAKE(3, 0)); if (result < 0) { HuWinExAnimOut(window); HuWinExCleanup(window); @@ -552,18 +552,18 @@ s32 SLStatSet(s32 reportF) { } return CARD_RESULT_FATAL_ERROR; } - CARDSetCommentAddress(&stat, 0); - CARDSetIconAddress(&stat, 64); - CARDSetBannerFormat(&stat, CARD_STAT_BANNER_C8); - CARDSetIconFormat(&stat, 0, CARD_STAT_ICON_C8); - CARDSetIconFormat(&stat, 1, CARD_STAT_ICON_C8); - CARDSetIconFormat(&stat, 2, CARD_STAT_ICON_C8); - CARDSetIconFormat(&stat, 3, CARD_STAT_ICON_C8); + CARDSetCommentAddress(&stat, 0); + CARDSetIconAddress(&stat, 64); + CARDSetBannerFormat(&stat, CARD_STAT_BANNER_C8); + CARDSetIconFormat(&stat, 0, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 1, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 2, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 3, CARD_STAT_ICON_C8); CARDSetIconSpeed(&stat, 0, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&stat, 1, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&stat, 2, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&stat, 3, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&stat, 4, CARD_STAT_SPEED_END); + CARDSetIconSpeed(&stat, 1, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 2, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 3, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 4, CARD_STAT_SPEED_END); CARDSetIconAnim(&stat, CARD_STAT_ANIM_LOOP); result = CARDSetStatus(curSlotNo, fileNo, &stat); @@ -706,43 +706,43 @@ s16 SLMessOut(s16 mess) { slot_mess = 0; has_choice = 0; HuWinInit(1); - SLKillSaveWin(); + SLKillSaveWin(); switch (mess) { case 0: save_mess = MAKE_MESSID(16, 2); break; - + case 1: save_mess = MAKE_MESSID(16, 83); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; - + case 2: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 74); break; - + case 3: save_mess = MAKE_MESSID(16, 74); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; - + case 4: save_mess = MAKE_MESSID(16, 74); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; - + case 5: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 4); has_choice = 1; break; - + case 6: save_mess = MAKE_MESSID(16, 54); break; @@ -751,30 +751,30 @@ s16 SLMessOut(s16 mess) { slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 55); break; - + case 8: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 57); break; - + case 9: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 69); break; - + case 10: save_mess = MAKE_MESSID(16, 70); has_choice = 1; break; - + case 11: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); save_mess = MAKE_MESSID(16, 72); break; - + case 12: save_mess = MAKE_MESSID(16, 80); break; From 9374f257721cb3ff25e81b0dd77a6e118b238055 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 10 May 2024 03:29:35 +0200 Subject: [PATCH 18/22] Nearly matched REL/m404Dll and removed an unused variable in REL/present/common.c --- config/GMPE01_00/rels/m404Dll/symbols.txt | 152 +-- src/REL/m404Dll/main.c | 1456 +++++++++++++++++++++ src/REL/present/common.c | 1 - 3 files changed, 1533 insertions(+), 76 deletions(-) create mode 100644 src/REL/m404Dll/main.c diff --git a/config/GMPE01_00/rels/m404Dll/symbols.txt b/config/GMPE01_00/rels/m404Dll/symbols.txt index 3ffbe0e4..70a77577 100644 --- a/config/GMPE01_00/rels/m404Dll/symbols.txt +++ b/config/GMPE01_00/rels/m404Dll/symbols.txt @@ -46,96 +46,98 @@ fn_1_648C = .text:0x0000648C; // type:function size:0x250 fn_1_66DC = .text:0x000066DC; // type:function size:0x5AC _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 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 data:double -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:2byte -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:double -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x20 data:byte -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x1 data:byte -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x1 data:byte -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x248 -lbl_1_data_248 = .data:0x00000248; // type:object size:0x260 -lbl_1_data_4A8 = .data:0x000004A8; // type:object size:0x290 +__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float +__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 scope:local data:double +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:2byte +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x20 scope:local data:byte +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x248 data:float +lbl_1_data_248 = .data:0x00000248; // type:object size:0x260 data:float +lbl_1_data_4A8 = .data:0x000004A8; // type:object size:0x290 data:float lbl_1_data_738 = .data:0x00000738; // type:object size:0x38 data:float lbl_1_data_770 = .data:0x00000770; // type:object size:0xC data:float lbl_1_data_77C = .data:0x0000077C; // type:object size:0xC data:float lbl_1_data_788 = .data:0x00000788; // type:object size:0x4 -lbl_1_data_78C = .data:0x0000078C; // type:object size:0xC -lbl_1_data_798 = .data:0x00000798; // type:object size:0xC -lbl_1_data_7A4 = .data:0x000007A4; // type:object size:0x24 +lbl_1_data_78C = .data:0x0000078C; // type:object size:0xC data:float +lbl_1_data_798 = .data:0x00000798; // type:object size:0xC data:float +lbl_1_data_7A4 = .data:0x000007A4; // type:object size:0x24 scope:local data:string lbl_1_data_7C8 = .data:0x000007C8; // type:object size:0x4 data:4byte jumptable_1_data_7CC = .data:0x000007CC; // type:object size:0x28 scope:local -lbl_1_data_7F4 = .data:0x000007F4; // type:object size:0x1C data:string -lbl_1_data_810 = .data:0x00000810; // type:object size:0xC -lbl_1_data_81C = .data:0x0000081C; // type:object size:0x30 -lbl_1_data_84C = .data:0x0000084C; // type:object size:0x20 +lbl_1_data_7F4 = .data:0x000007F4; // type:object size:0x1C scope:local data:string +lbl_1_data_810 = .data:0x00000810; // type:object size:0xC data:2byte +lbl_1_data_81C = .data:0x0000081C; // type:object size:0x30 data:float +lbl_1_data_84C = .data:0x0000084C; // type:object size:0x20 data:float lbl_1_data_86C = .data:0x0000086C; // type:object size:0x20 lbl_1_data_88C = .data:0x0000088C; // type:object size:0x4 data:4byte lbl_1_data_890 = .data:0x00000890; // type:object size:0x28 lbl_1_data_8B8 = .data:0x000008B8; // type:object size:0x20 -lbl_1_data_8D8 = .data:0x000008D8; // type:object size:0x10 +lbl_1_data_8D8 = .data:0x000008D8; // type:object size:0x10 data:float lbl_1_data_8E8 = .data:0x000008E8; // type:object size:0xC -lbl_1_data_8F4 = .data:0x000008F4; // type:object size:0x8 data:wstring +lbl_1_data_8F4 = .data:0x000008F4; // type:object size:0x8 data:2byte lbl_1_data_8FC = .data:0x000008FC; // type:object size:0x18 -lbl_1_data_914 = .data:0x00000914; // type:object size:0x1C +lbl_1_data_914 = .data:0x00000914; // type:object size:0x1C scope:local data:string lbl_1_data_930 = .data:0x00000930; // type:object size:0x20 lbl_1_data_950 = .data:0x00000950; // type:object size:0x20 -lbl_1_data_970 = .data:0x00000970; // type:object size:0x7 data:string -lbl_1_data_977 = .data:0x00000977; // type:object size:0x7 data:string -lbl_1_data_97E = .data:0x0000097E; // type:object size:0x7 data:string -lbl_1_data_985 = .data:0x00000985; // type:object size:0x7 data:string +lbl_1_data_970 = .data:0x00000970; // type:object size:0x7 scope:local data:string +lbl_1_data_977 = .data:0x00000977; // type:object size:0x7 scope:local data:string +lbl_1_data_97E = .data:0x0000097E; // type:object size:0x7 scope:local data:string +lbl_1_data_985 = .data:0x00000985; // type:object size:0x7 scope:local data:string lbl_1_data_98C = .data:0x0000098C; // type:object size:0x10 -lbl_1_data_99C = .data:0x0000099C; // type:object size:0x10 -lbl_1_data_9AC = .data:0x000009AC; // type:object size:0x30 +lbl_1_data_99C = .data:0x0000099C; // type:object size:0x10 data:float +lbl_1_data_9AC = .data:0x000009AC; // type:object size:0x30 data:4byte lbl_1_data_9DC = .data:0x000009DC; // type:object size:0x18 data:4byte lbl_1_data_9F4 = .data:0x000009F4; // type:object size:0x18 data:4byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte diff --git a/src/REL/m404Dll/main.c b/src/REL/m404Dll/main.c new file mode 100644 index 00000000..14cfc448 --- /dev/null +++ b/src/REL/m404Dll/main.c @@ -0,0 +1,1456 @@ +#include "ext_math.h" +#include "game/chrman.h" +#include "game/frand.h" +#include "game/hsfman.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/sprite.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" +#include "string.h" + +typedef struct UnkM404Struct { + s16 unk_00; + s16 unk_02[6]; + s16 unk0E[10]; +} UnkM404Struct; + +typedef struct UnkM404Struct2 { + float unk_00; + float unk_04; + float unk_08; + float unk_0C; + float unk_10; + float unk_14; + float unk_18; +} UnkM404Struct2; + +typedef struct UnkM404Struct3 { + struct { + u8 unk_00_field0 : 1; + u8 unk_00_field1 : 1; + u8 unk_00_field2 : 1; + }; + s8 unk01; + s16 unk_02; + s16 unk_04; + s8 unk_06; + s8 unk_07; + u16 unk_08; + u16 unk_0A; + s16 unk_0C; + s16 unk_0E; + s16 unk_10; + s16 unk_12; + float unk_14; + s32 unk18[2]; + float unk_20; + float unk_24; + float unk_28; + s32 unk_2C; + s32 unk30[2]; + s16 unk_38; + s16 unk3A; + AnimData *unk_3C; + AnimData *unk_40; + void *unk_44; + s32 unk_48; + AnimData *unk_4C; + AnimData *unk_50; + u16 unk_54; + u16 unk_56; + u16 unk_58; + u16 unk_5A; + u16 unk_5C; + u16 unk_5E; + float unk_60; + float unk_64; + float unk_68; + u16 unk_6C; + float (*unk_70)[2]; + s32 unk_74; + s32 unk78[91]; +} UnkM404Struct3; // size 0x1E4 + +s32 lbl_1_bss_0; +float lbl_1_bss_4; +s16 lbl_1_bss_C; +Vec lbl_1_bss_10; +s32 lbl_1_bss_1C; +s32 lbl_1_bss_20; +s32 lbl_1_bss_24; +s32 lbl_1_bss_28[4]; +s32 lbl_1_bss_38[4]; +s32 lbl_1_bss_48; +omObjData *lbl_1_bss_4C; +omObjData *lbl_1_bss_50; +omObjData *lbl_1_bss_54; +omObjData *lbl_1_bss_58; + +float lbl_1_data_0[][2] = { + { -0.00026f, 0.51953f }, + { 0.02825f, 0.51563f }, + { 0.04108f, 0.5166f }, + { 0.05996f, 0.5166f }, + { 0.07878f, 0.39063f }, + { 0.08437f, 0.35254f }, + { 0.09284f, 0.2998f }, + { 0.10234f, 0.2998f }, + { 0.11283f, 0.2998f }, + { 0.1319f, 0.2959f }, + { 0.1373f, 0.40918f }, + { 0.15072f, 0.38574f }, + { 0.17747f, 0.38183f }, + { 0.19753f, 0.47168f }, + { 0.20098f, 0.74902f }, + { 0.2235f, 0.73438f }, + { 0.26048f, 0.71094f }, + { 0.27695f, 0.27344f }, + { 0.30872f, 0.29883f }, + { 0.32409f, 0.30566f }, + { 0.3291f, 0.56738f }, + { 0.34388f, 0.58594f }, + { 0.36296f, 0.58789f }, + { 0.3653f, 0.33984f }, + { 0.38112f, 0.32227f }, + { 0.38717f, 0.31543f }, + { 0.40221f, 0.4541f }, + { 0.42044f, 0.44433f }, + { 0.4375f, 0.43555f }, + { 0.46302f, 0.13281f }, + { 0.48229f, 0.13965f }, + { 0.50013f, 0.14844f }, + { 0.51406f, 0.14844f }, + { 0.52493f, 0.29394f }, + { 0.53854f, 0.5166f }, + { 0.53105f, 0.86816f }, + { 0.50755f, 0.87207f }, + { 0.48893f, 0.85254f }, + { 0.47923f, 0.64258f }, + { 0.48828f, 0.35156f }, + { 0.49401f, 0.19238f }, + { 0.50228f, 0.16797f }, + { 0.52454f, 0.1709f }, + { 0.54518f, 0.17188f }, + { 0.55547f, 0.1748f }, + { 0.57611f, 0.16992f }, + { 0.5916f, 0.16797f }, + { 0.61471f, 0.56543f }, + { 0.62467f, 0.76367f }, + { 0.65156f, 0.76465f }, + { 0.65742f, 0.75488f }, + { 0.69544f, 0.75488f }, + { 0.69544f, 0.63477f }, + { 0.69538f, 0.33203f }, + { 0.69544f, 0.22949f }, + { 0.7028f, 0.22558f }, + { 0.73079f, 0.2207f }, + { 0.76628f, 0.22558f }, + { 0.78555f, 0.22754f }, + { 0.79388f, 0.72949f }, + { 0.81113f, 0.73047f }, + { 0.83034f, 0.72949f }, + { 0.83789f, 0.33789f }, + { 0.86953f, 0.35449f }, + { 0.88047f, 0.36035f }, + { 0.88242f, 0.60058f }, + { 0.89479f, 0.63672f }, + { 0.93939f, 0.68555f }, + { 0.9252f, 0.52051f }, + { 0.94284f, 0.51758f }, + { 0.96113f, 0.51367f }, + { 0.99303f, 0.50977f }, + { 1.0f, 0.50683f }, +}; +float lbl_1_data_248[][2] = { { -0.00026f, 0.51953f }, { 0.02825f, 0.51563f }, { 0.0541f, 0.78222f }, { 0.07298f, 0.78222f }, { 0.0918f, 0.65625f }, + { 0.0724f, 0.16504f }, { 0.08607f, 0.15918f }, { 0.09928f, 0.15918f }, { 0.11615f, 0.47852f }, { 0.1248f, 0.60156f }, { 0.13379f, 0.73144f }, + { 0.15592f, 0.66602f }, { 0.17044f, 0.66308f }, { 0.18418f, 0.64355f }, { 0.19603f, 0.1748f }, { 0.22279f, 0.1709f }, { 0.26087f, 0.17383f }, + { 0.27507f, 0.16308f }, { 0.30443f, 0.16602f }, { 0.32142f, 0.16992f }, { 0.26738f, 0.70019f }, { 0.27487f, 0.70996f }, { 0.29395f, 0.71191f }, + { 0.35384f, 0.70703f }, { 0.36966f, 0.71289f }, { 0.37565f, 0.71582f }, { 0.37122f, 0.36523f }, { 0.38763f, 0.36621f }, { 0.40117f, 0.36719f }, + { 0.42135f, 0.16406f }, { 0.44062f, 0.1709f }, { 0.45846f, 0.17969f }, { 0.5099f, 0.07813f }, { 0.52077f, 0.22363f }, { 0.53437f, 0.44629f }, + { 0.53262f, 0.90722f }, { 0.50911f, 0.91113f }, { 0.49049f, 0.8916f }, { 0.48496f, 0.76758f }, { 0.48984f, 0.5f }, { 0.49557f, 0.34082f }, + { 0.5127f, 0.40234f }, { 0.53496f, 0.40527f }, { 0.55605f, 0.40625f }, { 0.56322f, 0.20801f }, { 0.58118f, 0.21387f }, { 0.59499f, 0.21875f }, + { 0.60208f, 0.35644f }, { 0.61634f, 0.37305f }, { 0.62865f, 0.37305f }, { 0.63242f, 0.30566f }, { 0.64707f, 0.30957f }, { 0.66439f, 0.31348f }, + { 0.67487f, 0.6084f }, { 0.69551f, 0.6084f }, { 0.69499f, 0.44922f }, { 0.69486f, 0.30078f }, { 0.69492f, 0.19824f }, { 0.70228f, 0.19433f }, + { 0.74681f, 0.18945f }, { 0.78229f, 0.19433f }, { 0.80156f, 0.19629f }, { 0.8194f, 0.76074f }, { 0.83665f, 0.76172f }, { 0.85586f, 0.76074f }, + { 0.85488f, 0.30859f }, { 0.88132f, 0.30469f }, { 0.89225f, 0.31055f }, { 0.89076f, 0.74902f }, { 0.90312f, 0.78516f }, { 0.94772f, 0.83398f }, + { 0.93092f, 0.52832f }, { 0.94857f, 0.52539f }, { 0.96686f, 0.52148f }, { 0.99303f, 0.50977f }, { 1.0f, 0.50683f } }; +float lbl_1_data_4A8[][2] = { { -0.00026f, 0.51953f }, { 0.02825f, 0.51563f }, { 0.0332f, 0.55176f }, { 0.04759f, 0.4375f }, { 0.05775f, 0.2959f }, + { 0.06413f, 0.19629f }, { 0.08991f, 0.19531f }, { 0.10723f, 0.19531f }, { 0.11543f, 0.49707f }, { 0.12305f, 0.65918f }, { 0.13607f, 0.94336f }, + { 0.14779f, 0.68945f }, { 0.15514f, 0.53222f }, { 0.16204f, 0.4043f }, { 0.18034f, 0.49512f }, { 0.1847f, 0.35449f }, { 0.19095f, 0.15625f }, + { 0.20742f, 0.17285f }, { 0.22279f, 0.1709f }, { 0.24108f, 0.16894f }, { 0.24896f, 0.08887f }, { 0.2569f, 0.36328f }, { 0.26159f, 0.53125f }, + { 0.2679f, 0.69922f }, { 0.28079f, 0.80859f }, { 0.29987f, 0.89941f }, { 0.31224f, 0.7334f }, { 0.32246f, 0.55664f }, { 0.33112f, 0.41016f }, + { 0.36022f, 0.43164f }, { 0.37207f, 0.60058f }, { 0.38906f, 0.8457f }, { 0.40573f, 0.64844f }, { 0.42227f, 0.39941f }, { 0.43411f, 0.23926f }, + { 0.46732f, 0.79199f }, { 0.4875f, 0.82813f }, { 0.51387f, 0.83496f }, { 0.52324f, 0.13574f }, { 0.48893f, 0.12988f }, { 0.46237f, 0.16699f }, + { 0.46589f, 0.63086f }, { 0.48184f, 0.72266f }, { 0.49629f, 0.81836f }, { 0.50579f, 0.82422f }, { 0.52806f, 0.82715f }, { 0.54915f, 0.82813f }, + { 0.54974f, 0.19433f }, { 0.56764f, 0.17773f }, { 0.57936f, 0.16699f }, { 0.59199f, 0.16894f }, { 0.60111f, 0.16992f }, { 0.60124f, 0.4668f }, + { 0.60124f, 0.45996f }, { 0.60124f, 0.63183f }, { 0.61302f, 0.62695f }, { 0.6321f, 0.63477f }, { 0.65273f, 0.63477f }, { 0.65254f, 0.55176f }, + { 0.65254f, 0.49121f }, { 0.6526f, 0.39551f }, { 0.69297f, 0.39844f }, { 0.69642f, 0.62402f }, { 0.71595f, 0.61621f }, { 0.73451f, 0.61035f }, + { 0.74297f, 0.22266f }, { 0.77773f, 0.21484f }, { 0.79701f, 0.20898f }, { 0.79167f, 0.79102f }, { 0.80892f, 0.79785f }, { 0.83607f, 0.80762f }, + { 0.8487f, 0.4707f }, { 0.87995f, 0.47168f }, { 0.89089f, 0.47754f }, { 0.88796f, 0.14453f }, { 0.90833f, 0.13379f }, { 0.95078f, 0.18066f }, + { 0.95039f, 0.38183f }, { 0.95169f, 0.50977f }, { 0.96999f, 0.50488f }, { 0.99303f, 0.50977f }, { 1.0f, 0.50683f } }; + +UnkM404Struct2 lbl_1_data_738[] = { { 11000.0f, 450.0f, 0.0f, -87.5f, 323.2f, 42.7f, 0.0f }, { 6175.0f, 100.0f, 0.0f, -87.5f, 323.2f, 0.0f, 0.0f } }; + +Vec lbl_1_data_770 = { 700.0f, 2500.0f, -700.0f }; +Vec lbl_1_data_77C = { 0 }; +GXColor lbl_1_data_788 = { 255, 255, 255, 255 }; +Vec lbl_1_data_78C = { 1500.0f, 3000.0f, -200.0f }; +Vec lbl_1_data_798 = { 0.0f, 1.0f, 0.0f }; + +s32 fn_1_E48(void); +void fn_1_39C(omObjData *object); +void fn_1_400(omObjData *object); +void fn_1_784(omObjData *object); +void fn_1_7E0(omObjData *object); +void fn_1_A9C(omObjData *object); +void fn_1_D00(Process *arg0); +void fn_1_DEC(void); +void fn_1_1160(void); +void fn_1_1344(omObjData *object); +void fn_1_1AFC(omObjData *object); +float fn_1_2EBC(float arg0[], float arg8); +void fn_1_4C7C(omObjData *object); +void fn_1_44A0(omObjData *object); +void fn_1_4F4C(omObjData *object); +void fn_1_5278(omObjData *object); +void fn_1_5598(Process *arg0); +void fn_1_553C(omObjData *object); +void fn_1_55F0(void); +void fn_1_55F4(omObjData *object); +void fn_1_57A0(omObjData *object); +void fn_1_58E4(ModelData *modelData, Mtx arg1); +AnimData *fn_1_5D64(u16 arg0, u16 arg1, s32 arg2); +void fn_1_5E74(AnimData *arg0, u16 arg1, u16 arg2, u16 arg3); +u16 fn_1_607C(AnimData *arg0, u16 arg1, u16 arg2); +s32 fn_1_6248(void *arg0, s32 arg1); +void fn_1_6440(omObjData *object); +void fn_1_648C(s32 arg0, s32 arg1, float arg8); +void fn_1_66DC(omObjData *object); + +void ModuleProlog(void) +{ + CameraData *var_r30; + Process *var_r31; + s16 var_r29; + + var_r30 = Hu3DCamera; + OSReport("******* M404ObjectSetup *********\n"); + var_r31 = omInitObjMan(50, 8192); + omGameSysInit(var_r31); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 10.0f, 20.0f, 25000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + lbl_1_bss_50 = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); + lbl_1_bss_10.x = lbl_1_data_77C.x - lbl_1_data_770.x; + lbl_1_bss_10.y = lbl_1_data_77C.y - lbl_1_data_770.y; + lbl_1_bss_10.z = lbl_1_data_77C.z - lbl_1_data_770.z; + PSVECNormalize(&lbl_1_bss_10, &lbl_1_bss_10); + var_r29 = Hu3DGLightCreateV(&lbl_1_data_770, &lbl_1_bss_10, &lbl_1_data_788); + Hu3DGLightInfinitytSet(var_r29); + Hu3DGLightStaticSet(var_r29, 1); + Hu3DShadowCreate(45.0f, var_r30->near, var_r30->far); + Hu3DShadowTPLvlSet(0.625f); + Hu3DShadowPosSet(&lbl_1_data_78C, &lbl_1_data_798, &lbl_1_data_77C); + HuAudSndGrpSet(29); + lbl_1_bss_1C = ((s32)(frand() & 0xFF) * 3) >> 8; + lbl_1_bss_58 = omAddObjEx(var_r31, 0, 0, 0, -1, fn_1_39C); + lbl_1_bss_54 = omAddObjEx(var_r31, 0xA, 0, 0, -1, fn_1_6440); + lbl_1_bss_4C = omAddObjEx(var_r31, 0xB, 0, 0, -1, fn_1_7E0); + fn_1_D00(var_r31); + fn_1_5598(var_r31); +} + +s32 lbl_1_data_7C8 = 0xFFFFFFFFF; + +void fn_1_37C(s32 arg0) +{ + lbl_1_bss_48 = arg0; +} + +s32 fn_1_38C(void) +{ + return lbl_1_bss_48; +} + +void fn_1_39C(omObjData *object) +{ + fn_1_37C(0); + lbl_1_bss_24 = 60; + WipeCreate(1, 0, 60); + object->func = fn_1_400; +} + +void fn_1_400(omObjData *object) +{ + switch (fn_1_38C()) { + case 0: + if (--lbl_1_bss_24) { + break; + } + fn_1_37C(1); + lbl_1_bss_24 = 180; + break; + case 1: + if (--lbl_1_bss_24) { + break; + } + fn_1_37C(2); + lbl_1_bss_C = MGSeqCreate(3, 0); + break; + case 2: + if (!MGSeqStatGet(lbl_1_bss_C)) { + fn_1_37C(3); + } + if (lbl_1_data_7C8 >= 0) { + break; + } + if (!(MGSeqStatGet(lbl_1_bss_C) & 16)) { + break; + } + lbl_1_data_7C8 = HuAudSeqPlay(69); + break; + case 3: + if (!fn_1_E48()) { + break; + } + fn_1_37C(4); + lbl_1_bss_C = MGSeqCreate(3, 1); + HuAudSeqFadeOut(lbl_1_data_7C8, 100); + break; + case 4: + if (!MGSeqStatGet(lbl_1_bss_C)) { + fn_1_37C(5); + WipeColorSet(255, 255, 255); + WipeCreate(2, 0, 30); + lbl_1_bss_24 = 60; + } + case 5: + if (--lbl_1_bss_24) { + break; + } + fn_1_37C(6); + WipeCreate(1, 0, 60); + break; + case 6: + if (WipeStatGet()) { + break; + } + fn_1_37C(7); + lbl_1_bss_24 = 180; + break; + case 7: + if (--lbl_1_bss_24) { + break; + } + fn_1_37C(9); + fn_1_1160(); + if (lbl_1_bss_38[0] >= 0) { + HuAudSStreamPlay(1); + } else { + HuAudSStreamPlay(4); + } + lbl_1_bss_24 = 210; + break; + case 8: + break; + case 9: + if (--lbl_1_bss_24) { + break; + } + WipeCreate(2, 0, 60); + object->func = fn_1_784; + break; + default: + break; + } + if (omSysExitReq && !WipeStatGet()) { + WipeCreate(2, 0, 60); + object->func = fn_1_784; + } +} + +void fn_1_784(omObjData *object) +{ + if (!WipeStatGet()) { + fn_1_DEC(); + fn_1_55F0(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + OSReport("******* M404Exit *********\n"); + } +} + +u16 lbl_1_data_810[] = { 0, 1, 2, 3, 3, 3 }; + +float lbl_1_data_81C[][2] = { { 0.0f, 0.0f }, { 0.0f, 0.0f }, { -46.0f, -2.0f }, { -8.0f, 2.0f }, { 10.0f, 2.0f }, { 28.0f, 2.0f } }; + +float lbl_1_data_84C[][2] = { { 472.0f, 128.0f }, { 472.0f, 208.0f }, { 472.0f, 288.0f }, { 472.0f, 368.0f } }; + +s32 lbl_1_data_86C[] = { 0x00610000, 0x00610001, 0x00610002, 0x00610003, 0x00610004, 0x00610005, 0x00610006, 0x00610007 }; + +s32 lbl_1_data_88C = 0xFFFFFFFF; + +u32 lbl_1_data_890[][2] + = { { 0x005F0000, 0x00000000 }, { 0x005F0002, 0x00000000 }, { 0x00230022, 0x00000001 }, { 0x005F0017, 0x00000000 }, { 0x005F0018, 0x00000000 } }; + +s32 lbl_1_data_8B8[] = { 0x00230001, 0x00230002, 0x00230003, 0x00230004, 0x00230005, 0x00230006, 0x00230007, 0x00230008 }; + +float lbl_1_data_8D8[] = { 35.0f, 30.000002f, 25.0f, 20.0f }; + +float (*lbl_1_data_8E8[])[2] = { lbl_1_data_0, lbl_1_data_248, lbl_1_data_4A8 }; + +u16 lbl_1_data_8F4[] = { 73, 76, 82, 0 }; + +s32 lbl_1_data_8FC[][2] = { { 0x00230013, 0x00230014 }, { 0x00230015, 0x00230016 }, { 0x00230017, 0x00230018 } }; + +void fn_1_7E0(omObjData *object) +{ + UnkM404Struct *var_r31; + u32 var_r30; + s32 var_r29; + UnkM404Struct *var_r27; + omObjData **var_r26; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM404Struct) * 4, MEMORY_DEFAULT_NUM); + object->data = var_r31; + memset(object->data, 0, 136); + var_r26 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + + for (var_r29 = 0; var_r29 < 4; var_r31++, var_r29++) { + for (var_r27 = var_r26[var_r29]->data, var_r30 = 0; var_r30 < 6; var_r30++) { + switch (lbl_1_data_810[var_r30]) { + case 0: + var_r31->unk_02[var_r30] = espEntry(0x610014, 1, 0); + espPriSet(var_r31->unk_02[var_r30], 256); + break; + case 1: + var_r31->unk_02[var_r30] = espEntry(0x610015, 0, 0); + espPriSet(var_r31->unk_02[var_r30], 257); + espColorSet(var_r31->unk_02[var_r30], 0, 0, 0); + espTPLvlSet(var_r31->unk_02[var_r30], 0.5f); + break; + case 2: + var_r31->unk_02[var_r30] = espEntry(lbl_1_data_86C[var_r27->unk_02[5]]); + espPriSet(var_r31->unk_02[var_r30], 255); + break; + case 3: + var_r31->unk_02[var_r30] = espEntry(0x610033, 1, 0); + espPriSet(var_r31->unk_02[var_r30], 255); + break; + default: + break; + } + espDispOff(var_r31->unk_02[var_r30]); + espDrawNoSet(var_r31->unk_02[var_r30], 0); + espAttrSet(var_r31->unk_02[var_r30], 1); + espPosSet(var_r31->unk_02[var_r30], lbl_1_data_84C[var_r29][0] + lbl_1_data_81C[var_r30][0], + lbl_1_data_84C[var_r29][1] + lbl_1_data_81C[var_r30][1]); + } + } + + HuDataDirClose(DATADIR_MGCONST); + object->func = fn_1_A9C; +} + +void fn_1_A9C(omObjData *object) +{ + s32 var_r31; + UnkM404Struct *var_r30; + s32 var_r29; + UnkM404Struct3 *var_r28; + omObjData **var_r27; + + var_r30 = object->data; + switch (fn_1_38C()) { + case 6: + for (var_r31 = 0; var_r31 < 4; var_r31++) { + for (var_r29 = 0; var_r29 < 6; var_r29++) { + espDispOn(var_r30[var_r31].unk_02[var_r29]); + } + } + break; + case 7: + var_r27 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + for (var_r29 = 0, var_r31 = 0; var_r31 < 4; var_r31++) { + var_r28 = var_r27[var_r31]->data; + var_r30[var_r31].unk_00 = var_r28->unk_58; + if (var_r28->unk_00_field1) { + var_r29++; + } + } + if ((var_r29 >= 4) && (lbl_1_bss_0 == 0)) { + HuAudFXPlay(1325); + lbl_1_bss_0 = 1; + } + if ((lbl_1_bss_0 == 0) && (lbl_1_data_88C < 0)) { + lbl_1_data_88C = HuAudFXPlay(1324); + } + break; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + espBankSet(var_r30[var_r31].unk_02[3], var_r30[var_r31].unk_00 / 100); + espBankSet(var_r30[var_r31].unk_02[4], (var_r30[var_r31].unk_00 / 10) % 10); + espBankSet(var_r30[var_r31].unk_02[5], var_r30[var_r31].unk_00 % 10); + } +} + +void fn_1_CD0(void) +{ + HuMemDirectFree(lbl_1_bss_4C->data); +} + +void fn_1_D00(Process *process) +{ + s32 var_r31; + + lbl_1_bss_38[0] = lbl_1_bss_38[1] = lbl_1_bss_38[2] = lbl_1_bss_38[3] = -1; + lbl_1_bss_28[0] = lbl_1_bss_28[1] = lbl_1_bss_28[2] = lbl_1_bss_28[3] = -1; + lbl_1_bss_20 = 0; + omMakeGroupEx(process, 0, 4); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + omAddObjEx(process, 5, 10, 50, 0, fn_1_1344); + } +} + +void fn_1_DEC(void) +{ + s32 var_r31; + omObjData **var_r30; + + var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + fn_1_553C(var_r30[var_r31]); + } +} + +s32 fn_1_E48(void) +{ + s32 var_r31; + omObjData **var_r30; + UnkM404Struct3 *var_r29; + + var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r29 = var_r30[var_r31]->data; + if (!var_r29->unk_00_field0) { + break; + } + } + if (var_r31 < 4) { + return 0; + } + return 1; +} + +u16 fn_1_ED4(omObjData *object) +{ + UnkM404Struct3 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r31 = object->data; + + for (var_r28 = 0, var_r30 = 0; var_r30 < var_r31->unk_3C->bmp->sizeY; var_r30++) { + for (var_r29 = 0; var_r29 < var_r31->unk_3C->bmp->sizeX; var_r29++) { + if (!fn_1_607C(var_r31->unk_3C, var_r29, var_r30)) { + var_r28++; + } + } + } + return var_r28; +} + +s32 fn_1_F70(omObjData *object, float arg8) +{ + UnkM404Struct3 *var_r31; + s32 var_r30; + s32 var_r29; + u16 var_r28; + u16 var_r27; + s32 var_r26; + u16 var_r25; + u16 var_r24; + + var_r31 = object->data; + var_r26 = var_r31->unk_3C->bmp->sizeX * arg8; + + for (var_r30 = 0; var_r30 < var_r31->unk_3C->bmp->sizeY; var_r30++) { + for (var_r29 = var_r31->unk_5A; var_r29 < var_r26; var_r29++) { + if (!fn_1_607C(var_r31->unk_3C, var_r29, var_r30)) { + for (var_r27 = 0; var_r27 < (var_r31->unk_4C->bmp->sizeY / var_r31->unk_3C->bmp->sizeY); var_r27++) { + for (var_r28 = 0; var_r28 < (var_r31->unk_4C->bmp->sizeX / var_r31->unk_3C->bmp->sizeX); var_r28++) { + var_r25 = ((s32)var_r28) + var_r31->unk_4C->bmp->sizeX * var_r29 / var_r31->unk_3C->bmp->sizeX; + var_r24 = ((s32)var_r27) + var_r31->unk_4C->bmp->sizeY * var_r30 / var_r31->unk_3C->bmp->sizeY; + if (fn_1_607C(var_r31->unk_4C, var_r25, var_r24)) { + var_r31->unk_54++; + break; + } + } + if (var_r28 < var_r31->unk_4C->bmp->sizeX / var_r31->unk_3C->bmp->sizeX) { + break; + } + } + } + } + } + var_r31->unk_5A = var_r26; + return (var_r31->unk_54 * 100) / var_r31->unk_56; +} + +void fn_1_1160(void) +{ + s32 sp10[4]; + u16 sp8[3] = { 28, 18, 29 }; + s32 var_r31; + s32 var_r30; + UnkM404Struct3 *var_r29; + omObjData **var_r28; + s32 var_r27; + s32 var_r26; + UnkM404Struct3 *var_r25; + s16 var_r24; + + var_r26 = 0; + var_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r29 = var_r28[var_r31]->data; + for (var_r27 = 0, var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r31 != var_r30) { + var_r25 = var_r28[var_r30]->data; + if (var_r29->unk_58 < var_r25->unk_58) { + var_r27++; + } + } + } + sp10[var_r31] = var_r27; + if (var_r29->unk_58 > var_r26) { + var_r26 = var_r29->unk_58; + } + } + if (var_r26 > 30) { + for (var_r30 = 0, var_r31 = 0; var_r31 < 4; var_r31++) { + if (!sp10[var_r31]) { + lbl_1_bss_38[var_r30] = var_r31; + lbl_1_bss_28[var_r30] = GWPlayerCfg[lbl_1_bss_38[var_r30]].character; + var_r30++; + } + var_r24 = sp10[var_r31]; + GWPlayerCoinWinSet(var_r31, var_r24); + } + return; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + GWPlayerCoinWinSet(var_r31, 3); + } +} + +void fn_1_1344(omObjData *object) +{ + UnkM404Struct3 *var_r31; + s32 var_r29; + float(*var_r28)[2]; + s32 var_r24; + ModelData *var_r22; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM404Struct3), MEMORY_DEFAULT_NUM); + object->data = var_r31; + memset(var_r31, 0, 484); + var_r31->unk_02 = lbl_1_bss_20++; + var_r31->unk_04 = GWPlayerCfg[var_r31->unk_02].pad_idx; + var_r24 = GWPlayerCfg[var_r31->unk_02].character; + var_r31->unk_0C = var_r24; + var_r31->unk_0E = GWPlayerCfg[var_r31->unk_02].diff; + var_r31->unk_10 = GWPlayerCfg[var_r31->unk_02].group; + object->model[0] = CharModelCreate(var_r24, 2); + Hu3DModelShadowSet(object->model[0]); + object->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_8B8[var_r24], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelHookSet(object->model[0], "test11_tex_we-itemhook-r", object->model[1]); + var_r31->unk_2C = 0; + + for (var_r29 = 0; var_r29 < (u32)5; var_r29++) { + if (!lbl_1_data_890[var_r29][1]) { + object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, lbl_1_data_890[var_r29][0]); + } else { + object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, var_r31->unk_0C + lbl_1_data_890[var_r29][0]); + } + } + Hu3DMotionSet(object->model[0], object->motion[0]); + Hu3DModelAttrSet(object->model[0], 0x40000601); + CharModelVoiceEnableSet(var_r24, object->motion[1], 0); + object->trans.x = -90.0f; + object->trans.y = 0.0f; + object->trans.z = -450.0f + (300.0f * var_r31->unk_02); + object->rot.y = 90.0f; + object->model[2] = Hu3DHookFuncCreate(fn_1_58E4); + Hu3DModelPosSet(object->model[2], 0.0f, object->trans.y, object->trans.z); + var_r22 = &Hu3DData[object->model[2]]; + var_r22->unk_120 = (void *)object; + var_r31->unk_4C = fn_1_5D64(960, 64, 1); + var_r31->unk_48 = 4096; + var_r31->unk_44 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_48, MEMORY_DEFAULT_NUM); + DCInvalidateRange(var_r31->unk_44, var_r31->unk_48); + var_r31->unk_48 = fn_1_6248(var_r31->unk_44, var_r31->unk_48); + var_r31->unk_3C = HuSprAnimRead(HuDataSelHeapReadNum(lbl_1_data_8FC[lbl_1_bss_1C][0], MEMORY_DEFAULT_NUM, HEAP_DATA)); + DCFlushRangeNoSync(var_r31->unk_3C->bmp->data, (var_r31->unk_3C->bmp->pixSize * (var_r31->unk_3C->bmp->sizeX * var_r31->unk_3C->bmp->sizeY)) / 8); + var_r31->unk_54 = 0; + var_r31->unk_56 = fn_1_ED4(object); + var_r31->unk_40 = HuSprAnimRead(HuDataSelHeapReadNum(lbl_1_data_8FC[lbl_1_bss_1C][1], MEMORY_DEFAULT_NUM, HEAP_DATA)); + var_r31->unk_50 = HuSprAnimRead(HuDataSelHeapReadNum(0x230019, MEMORY_DEFAULT_NUM, HEAP_DATA)); + DCFlushRangeNoSync(var_r31->unk_50->bmp->data, (var_r31->unk_50->bmp->pixSize * (var_r31->unk_50->bmp->sizeX * var_r31->unk_50->bmp->sizeY)) / 8); + Hu3DMotionOverlaySet(object->model[0], object->motion[2]); + object->trans.y = 1500.0f; + var_r31->unk_38 = var_r31->unk_02 * 60 / 2; + CharModelDataClose(var_r31->unk_0C); + if (GWPlayerCfg[var_r31->unk_02].iscom == 1) { + var_r28 = lbl_1_data_8E8[lbl_1_bss_1C]; + var_r31->unk_6C = lbl_1_data_8F4[lbl_1_bss_1C]; + var_r31->unk_70 = HuMemDirectMallocNum(HEAP_SYSTEM, (var_r31->unk_6C + 3) * 8, MEMORY_DEFAULT_NUM); + + for (var_r29 = 0; var_r29 < var_r31->unk_6C; var_r29++, var_r28++) { + var_r31->unk_70[var_r29][0] = 3000.0f * var_r28[0][0]; + var_r31->unk_70[var_r29][1] = object->trans.z - (200.0f * (var_r28[0][1] - 0.5f)); + if (var_r29 && var_r29 < (var_r31->unk_6C - 1)) { + var_r31->unk_70[var_r29][0] += lbl_1_data_8D8[var_r31->unk_0E] * (s32)(frand() % 512 - 256) / 256; + var_r31->unk_70[var_r29][1] += lbl_1_data_8D8[var_r31->unk_0E] * (s32)(frand() % 512 - 256) / 256; + } + } + + while (var_r29 < (var_r31->unk_6C + 3)) { + var_r31->unk_70[var_r29][0] = var_r31->unk_70[var_r31->unk_6C - 1][0]; + var_r31->unk_70[var_r29][1] = var_r31->unk_70[var_r31->unk_6C - 1][1]; + var_r29++; + } + var_r31->unk_64 = 0.0f; + var_r31->unk_68 = fn_1_2EBC(var_r31->unk_70[var_r31->unk_5E], 1.0f); + } + var_r31->unk_14 = 90.0f; + var_r31->unk_74 = -1; + object->func = fn_1_1AFC; +} + +void fn_1_1AFC(omObjData *object) +{ + UnkM404Struct3 *var_r31; + s32 var_r29; + s32 var_r28; + + var_r31 = object->data; + var_r29 = lbl_1_bss_48; + if (var_r29 >= 1) { + if (var_r31->unk_00_field2) { + if (var_r31->unk_38 != 0) { + if (--var_r31->unk_38 == 0) { + HuAudFXPlay(1327); + } + } + if (object->trans.y > 0.0f) { + var_r31->unk_24 = var_r31->unk_24 - 1.0000001f; + object->trans.y += var_r31->unk_24; + if (object->trans.y < 0.0f) { + object->trans.y = 0.0f; + omVibrate(var_r31->unk_02, 12, 6, 6); + HuAudFXPlay(1326); + } + } + var_r28 = lbl_1_bss_48; + if (var_r28 != 2) { + return; + } + var_r31->unk_24 = 0.0f; + object->func = fn_1_44A0; + return; + } + if (var_r31->unk_38 == 0) { + var_r31->unk_00_field2 = 1; + var_r31->unk_38 = 30; + return; + } + var_r31->unk_38--; + } +} + +float fn_1_1C80(float arg8, float arg9, float argA, float argB, float argC) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f31 = 1.0f - arg8; + var_f30 = var_f31 * var_f31; + var_f29 = var_f31 * var_f31 * var_f31; + return (arg8 * arg8 * arg8 * argC) + (3.0f * var_f31 * arg8 * arg8 * argB + (var_f29 * arg9 + 3.0f * var_f30 * arg8 * argA)); +} + +float fn_1_1D28(float arg8, float arg9, float argA, float argB, float argC) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f31 = 3.0f * (-arg9 + argC + (3.0f * (argA - argB))); + var_f30 = 2.0f * ((3.0f * (arg9 + argB)) - (6.0f * argA)); + var_f29 = 3.0f * (-arg9 + argA); + return var_f31 * arg8 * arg8 + var_f30 * arg8 + var_f29; +} + +float fn_1_1DF8(float arg0[], float arg8) +{ + float var_f31; + float var_f30; + + var_f31 = fn_1_1D28(arg8, arg0[0], arg0[2], arg0[4], arg0[6]); + var_f30 = fn_1_1D28(arg8, arg0[1], arg0[3], arg0[7], arg0[7]); + + return sqrtf(var_f31 * var_f31 + var_f30 * var_f30); +} + +float fn_1_2184(float arg0[], float arg8) +{ + float sp158[1]; + float var_f31; + float var_f26; + float var_f21; + float var_f20; + float var_f19; + s32 var_r31; + + var_f26 = 0.0f; + var_f19 = 16.0f; + var_f20 = (arg8 - var_f26) / var_f19; + sp158[0] = var_f20 + var_f20; + + var_f21 = fn_1_1DF8(arg0, var_f26) + fn_1_1DF8(arg0, arg8); + + for (var_r31 = 1, var_f31 = var_f26 + var_f20; var_r31 < var_f19; var_r31 += 2, var_f31 += sp158[0]) { + var_f21 += 4.0f * fn_1_1DF8(arg0, var_f31); + } + + for (var_r31 = 2, var_f31 = var_f26 + sp158[0]; var_r31 < var_f19; var_r31 += 2, var_f31 += sp158[0]) { + var_f21 += 2.0f * fn_1_1DF8(arg0, var_f31); + } + return (var_f20 / 3.0f) * var_f21; +} + +float fn_1_2EBC(float arg0[], float arg8) +{ + float spF8; + float var_f31; + float var_f27; + float var_f22; + float var_f23; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r29 = 32; + var_f31 = 0.0f; + spF8 = 0.0f; + + var_f27 = arg8 - var_f31; + var_f22 = var_f27 * (fn_1_1DF8(arg0, var_f31) + fn_1_1DF8(arg0, arg8)) / 2; + + for (var_r30 = 1; var_r30 <= var_r29; var_r30 *= 2) { + for (var_f23 = 0.0f, var_r31 = 1; var_r31 <= var_r30; var_r31 += 1) { + var_f23 += fn_1_1DF8(arg0, var_f31 + var_f27 * (var_r31 - 0.5f)); + } + var_f23 *= var_f27; + spF8 = (var_f22 + (2.0f * var_f23)) / 3.0f; + var_f27 /= 2; + var_f22 = (var_f22 + var_f23) / 2; + } + return spF8; +} + +float fn_1_3A38(float arg0[], float arg8, float arg9) +{ + float sp3C[2]; + float var_f24; + float var_f18; + s32 var_r30; + + sp3C[0] = 0.00001f; + var_r30 = 0; + do { + var_f18 = fn_1_2EBC(arg0, arg8) - arg9; + var_f24 = fn_1_1DF8(arg0, arg8); + if (fabs(var_f24) < sp3C[0]) { + var_f24 = 1.0f; + } + sp3C[1] = arg8; + arg8 -= var_f18 / var_f24; + var_r30++; + } while (arg8 != sp3C[1] && var_r30 < 16); + return arg8; +} + +float fn_1_3E2C(float arg8, float arg9, float argA) // same as in REL/m402Dll +{ + float var_f30; + float var_f31; + + var_f31 = fmod(arg9 - arg8, 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg8 + (argA * var_f31), 360.0); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + return var_f30; +} + +void fn_1_3F30(omObjData *object) +{ + float var_f24; + float var_f23; + + UnkM404Struct3 *var_r31; + float *var_r30; + + var_r31 = object->data; + if (var_r31->unk_5E < (var_r31->unk_6C - 1)) { + if ((3.0f + var_r31->unk_64) >= var_r31->unk_68) { + var_r31->unk_64 = 3.0f - (var_r31->unk_68 - var_r31->unk_64); + var_r31->unk_5E += 3; + var_r31->unk_68 = fn_1_2EBC(var_r31->unk_70[var_r31->unk_5E], 1.0f); + } else { + var_r31->unk_64 += 3.0f; + } + var_r31->unk_60 = fn_1_3A38(var_r31->unk_70[var_r31->unk_5E], var_r31->unk_60, var_r31->unk_64); + var_r30 = var_r31->unk_70[var_r31->unk_5E]; + var_f24 = fn_1_1C80(var_r31->unk_60, var_r30[0], var_r30[2], var_r30[4], var_r30[6]) - 90.0f; + var_f23 = fn_1_1C80(var_r31->unk_60, var_r30[1], var_r30[3], var_r30[5], var_r30[7]); + var_r31->unk_14 = fn_1_3E2C(var_r31->unk_14, atan2d(var_f24 - object->trans.x, -(var_f23 - object->trans.z)), 0.1f); + var_r31->unk_06 = (u8)(20.0 * sind(var_r31->unk_14)); + var_r31->unk_07 = (u8)(20.0 * cosd(var_r31->unk_14)); + } else { + var_r31->unk_06 = 20; + var_r31->unk_07 = 0; + } +} + +void fn_1_445C(s32 arg0, s16 arg1) +{ + UnkMsmStruct_01 sp8; + + sp8.unk00 = 1; + sp8.unk04 = arg1; + msmSeSetParam(arg0, &sp8); +} + +void fn_1_44A0(omObjData *object) +{ + Vec sp8; + float var_f31; + + UnkM404Struct3 *var_r31; + ModelData *var_r29; + s32 var_r28; + s16 var_r27; + s32 var_r26; + s32 var_r25; + + var_r31 = object->data; + var_r28 = -1; + var_r26 = lbl_1_bss_48; + if (var_r26 == 6) { + object->func = fn_1_4C7C; + } + var_r25 = lbl_1_bss_48; + if (var_r25 == 3 && !var_r31->unk_00_field0) { + switch (var_r31->unk_12) { + case 0: + if (GWPlayerCfg[var_r31->unk_02].iscom == 0) { + var_r31->unk_06 = HuPadStkX[var_r31->unk_04]; + var_r31->unk_07 = HuPadStkY[var_r31->unk_04]; + var_r31->unk_08 = HuPadBtn[var_r31->unk_04]; + var_r31->unk_0A = HuPadBtnDown[var_r31->unk_04]; + } else { + var_r31->unk_08 = var_r31->unk_0A = 0; + var_r31->unk_06 = var_r31->unk_07 = 0; + fn_1_3F30(object); + } + if (((var_r31->unk_06 * var_r31->unk_06) + (var_r31->unk_07 * var_r31->unk_07)) > 16.0f) { + var_f31 = atan2d(var_r31->unk_06, -var_r31->unk_07); + var_r31->unk_20 = 3.0f * sind(var_f31); + var_r31->unk_28 = 3.0f * cosd(var_f31); + var_r28 = 1; + if (var_r31->unk_20 > 0.0f) { + CharModelMotionSpeedSet(var_r31->unk_0C, 0.5f); + } else { + CharModelMotionSpeedSet(var_r31->unk_0C, -0.5f); + } + Hu3DMotionOverlaySpeedSet(object->model[0], Hu3DData[object->model[0]].unk_68); + if (var_r31->unk_2C == 0) { + Hu3DModelAttrReset(object->model[0], 0x40000400); + Hu3DMotionOverlayTimeSet(object->model[0], 0.0f); + } + } else { + var_r31->unk_20 = var_r31->unk_28 = 0.0f; + var_r28 = 0; + CharModelMotionSpeedSet(var_r31->unk_0C, 1.0f); + Hu3DMotionOverlayTimeSet(object->model[0], 0.0f); + Hu3DModelAttrSet(object->model[0], 0x40000400); + } + sp8.x = object->trans.x; + sp8.z = object->trans.z; + object->trans.x += var_r31->unk_20; + object->trans.z += var_r31->unk_28; + if (object->trans.x < -90.0f) { + object->trans.x = -90.0f; + } + if (object->trans.x < (Center.x - 500.0f)) { + object->trans.x = Center.x - 500.0f; + } else if (object->trans.x > (550.0f + Center.x)) { + object->trans.x = 550.0f + Center.x; + } + if ((object->trans.x != sp8.x) || (object->trans.z != sp8.z)) { + if (var_r31->unk_74 < 0) { + var_r31->unk_74 = HuAudFXPlay(0x52B); + } + } else if (var_r31->unk_74 >= 0) { + HuAudFXStop(var_r31->unk_74); + var_r31->unk_74 = -1; + } + var_r29 = &Hu3DData[object->model[2]]; + if (object->trans.z < (var_r29->pos.z - 100.0f)) { + object->trans.z = var_r29->pos.z - 100.0f; + } else if (object->trans.z > ((100.0f + var_r29->pos.z) - 1.0f)) { + object->trans.z = (100.0f + var_r29->pos.z) - 1.0f; + } + if ((90.0f + object->trans.x) > 3000.0f) { + object->trans.x = 2910.0f; + var_r31->unk_12++; + var_r31->unk_2C = -1; + var_r28 = 1; + CharModelMotionSpeedSet(var_r31->unk_0C, 1.0f); + Hu3DMotionOverlayReset(object->model[0]); + Hu3DModelAttrSet(object->model[1], 1); + if (var_r31->unk_74 >= 0) { + HuAudFXStop(var_r31->unk_74); + var_r31->unk_74 = -1; + } + } + fn_1_5278(object); + if (var_r31->unk_74 >= 0) { + var_r27 = 64.0f + ((64.0f * (object->trans.x - Center.x)) / 500.0f); + if (var_r27 < 0) { + var_r27 = 0; + } else if (var_r27 > 127) { + var_r27 = 127; + } + HuAudFXPanning(var_r31->unk_74, var_r27); + } + break; + case 1: + var_r28 = 1; + object->trans.x += 4.0000005f; + if (object->trans.x >= 3200.0f) { + var_r31->unk_12++; + var_r31->unk_38 = 0x3C; + } + break; + case 2: + var_r28 = 0; + object->rot.y += 0.1f * -object->rot.y; + if (--var_r31->unk_38 == 0) { + var_r31->unk_00_field0 = 1; + } + break; + } + if (var_r28 >= 0 && var_r28 != var_r31->unk_2C) { + var_r31->unk_2C = var_r28; + CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 5.0f, 0x40000001); + } + } +} + +void fn_1_4C7C(omObjData *object) +{ + UnkM404Struct3 *var_r30; + + var_r30 = object->data; + object->trans.x = 3200.0f; + object->trans.z = -450.0f + (300.0f * var_r30->unk_02); + object->rot.y = 0.0f; + var_r30->unk_2C = -1; + CharModelMotionShiftSet(var_r30->unk_0C, *object->motion, 0.0f, 5.0f, 0x40000001); + var_r30->unk_5A = 0; + var_r30->unk_5C = fn_1_F70(object, 1.0f); + var_r30->unk_5A = 0; + var_r30->unk_54 = 0; + var_r30->unk_74 = -1; + object->func = fn_1_4F4C; +} + +void fn_1_4F4C(omObjData *object) +{ + UnkM404Struct3 *var_r30; + s32 var_r29; + u16 var_r23; + s32 var_r18; + s32 var_r17; + + var_r30 = object->data; + var_r18 = lbl_1_bss_48; + if (var_r18 == 7) { + var_r23 = fn_1_F70(object, (Center.x - lbl_1_data_738[1].unk_04) / (3000.0f - lbl_1_data_738[1].unk_04)); + if (!var_r30->unk_00_field1 && var_r23 == var_r30->unk_5C) { + var_r30->unk_00_field1 = 1; + } + var_r30->unk_58 = var_r23; + } + var_r17 = lbl_1_bss_48; + if (var_r17 == 9 && var_r30->unk_2C < 0) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (var_r30->unk_02 == lbl_1_bss_38[var_r29]) { + break; + } + } + if (var_r29 < 4) { + var_r30->unk_2C = 3; + } else { + var_r30->unk_2C = 4; + } + CharModelMotionShiftSet(var_r30->unk_0C, object->motion[var_r30->unk_2C], 0.0f, 5.0f, 0); + } +} + +void fn_1_5278(omObjData *object) +{ + float var_f31; + UnkM404Struct3 *var_r31; + float var_f30; + ModelData *var_r27; + s32 var_r29; + s32 var_r28; + u16 var_r26; + u16 var_r25; + + var_r31 = object->data; + var_r27 = &Hu3DData[object->model[2]]; + var_f31 = ((90.0f + object->trans.x) - var_r27->pos.x) / 3000.0f; + var_f30 = (object->trans.z - (var_r27->pos.z - 100.0f)) / 200.0f; + + for (var_r29 = 0; var_r29 < var_r31->unk_50->bmp->sizeY; var_r29++) { + for (var_r28 = 0; var_r28 < var_r31->unk_50->bmp->sizeX; var_r28++) { + var_r26 = (var_r28 + (var_f31 * var_r31->unk_4C->bmp->sizeX)) - var_r31->unk_50->bmp->sizeX / 2; + var_r25 = (var_r29 + (var_f30 * var_r31->unk_4C->bmp->sizeY)) - var_r31->unk_50->bmp->sizeY / 2; + if (var_r26 < var_r31->unk_4C->bmp->sizeX && var_r25 < var_r31->unk_4C->bmp->sizeY) { + fn_1_5E74(var_r31->unk_4C, var_r26, var_r25, fn_1_607C(var_r31->unk_50, var_r28, var_r29)); + } + } + } + DCFlushRangeNoSync(var_r31->unk_4C->bmp->data, var_r31->unk_4C->bmp->dataSize); +} + +void fn_1_553C(omObjData *object) +{ + UnkM404Struct3 *var_r30; + + var_r30 = object->data; + if (object->data != NULL) { + HuMemDirectFree(var_r30->unk_44); + HuMemDirectFree(object->data); + object->data = NULL; + } +} + +void fn_1_5598(Process *arg0) +{ + omMakeGroupEx(arg0, 1, 1); + omAddObjEx(arg0, 10, 7, 0, 1, fn_1_55F4); +} + +void fn_1_55F0(void) { } + +s32 lbl_1_data_930[] = { 0x0023000B, 0x0023000C, 0x0023000D, 0x0023000E, 0x0023000F, 0x00230010, 0x00230011, 0x00230012 }; + +s32 lbl_1_data_950[] = { 0x0023001A, 0x0023001B, 0x0023001C, 0x0023001D, 0x0023001E, 0x0023001F, 0x00230020, 0x00230021 }; + +char *lbl_1_data_98C[] = { "kari00", "kari01", "kari02", "kari03" }; + +float lbl_1_data_99C[] = { -450, -150, 150, 450 }; + +s32 lbl_1_data_9AC[][2] = { { 8, 4 }, { 7, 8 }, { 6, 8 }, { 5, 16 }, { 2, 16 }, { 2, 16 } }; + +s32 lbl_1_data_9DC[] = { 8, 8, 8, 4, 4, 4 }; +s32 lbl_1_data_9F4[] = { 8, 8, 8, 4, 4, 4 }; + +void fn_1_55F4(omObjData *object) +{ + s32 var_r30; + + object->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(0x230009, MEMORY_DEFAULT_NUM, HEAP_DATA)); + object->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(0x23000A, MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelAttrSet(object->model[1], 0x40000001); + object->model[2] = Hu3DModelCreate(HuDataSelHeapReadNum(0x230000, MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelShadowMapSet(object->model[2]); + + for (var_r30 = 0; var_r30 < 4; var_r30++) { + object->model[var_r30 + 3] + = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_930[GWPlayerCfg[var_r30].character], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelPosSet(object->model[var_r30 + 3], 0.0f, 0.0f, lbl_1_data_99C[var_r30]); + Hu3DAnimCreate(HuSprAnimRead(HuDataSelHeapReadNum(lbl_1_data_950[GWPlayerCfg[var_r30].character], MEMORY_DEFAULT_NUM, HEAP_DATA)), + object->model[2], lbl_1_data_98C[var_r30]); + } + object->func = fn_1_57A0; +} + +void fn_1_57A0(omObjData *object) { } + +void fn_1_57A4(s32 arg0, GXColor *arg1) +{ + GXColor sp8[8] = { { 227, 67, 67, 255 }, { 68, 67, 227, 255 }, { 241, 158, 220, 255 }, { 67, 228, 68, 255 }, { 138, 60, 180, 255 }, + { 146, 85, 55, 255 }, { 227, 200, 20, 255 }, { 40, 40, 40, 255 } }; + + *arg1 = sp8[arg0]; +} + +void fn_1_58E4(ModelData *modelData, Mtx arg1) +{ + GXTexObj sp3C; + UnkM404Struct3 *var_r31; + omObjData *var_r30; + s32 var_r29; + + var_r30 = (omObjData *)modelData->unk_120; // TODO fix in modelData struct + var_r31 = var_r30->data; + { + GXColor sp18 = { 255, 0, 0, 255 }; + GXColor sp14 = { 255, 255, 255, 192 }; + GXLoadPosMtxImm(arg1, 0); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125); + HuSprTexLoad(var_r31->unk_40, 0, 0, GX_CLAMP, GX_CLAMP, GX_LINEAR); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_DIVIDE_2, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_TEXA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + var_r29 = var_r31->unk_0C; + fn_1_57A4(var_r29, &sp18); + + GXSetChanMatColor(GX_COLOR0A0, sp18); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetBlendMode(GX_DECAL, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetCullMode(GX_CULL_BACK); + GXCallDisplayList(var_r31->unk_44, var_r31->unk_48); + GXInitTexObj(&sp3C, var_r31->unk_4C->bmp->data, var_r31->unk_4C->bmp->sizeX, var_r31->unk_4C->bmp->sizeY, 1, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&sp3C, GX_TEXMAP0); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + GXSetTevColor(GX_TEVREG0, sp14); + GXCallDisplayList(var_r31->unk_44, var_r31->unk_48); + } +} + +AnimData *fn_1_5D64(u16 sizeX, u16 sizeY, s32 arg2) +{ + AnimBmpData *bmp; + AnimData *anim; + + anim = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(AnimBmpData), MEMORY_DEFAULT_NUM); + bmp = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(AnimData), MEMORY_DEFAULT_NUM); + anim->bmp = bmp; + bmp->sizeX = sizeX; + bmp->sizeY = sizeY; + bmp->dataFmt = lbl_1_data_9AC[arg2][0]; + bmp->pixSize = lbl_1_data_9AC[arg2][1]; + bmp->dataSize = (bmp->pixSize * (bmp->sizeX * bmp->sizeY)) / 8; + bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, bmp->dataSize, MEMORY_DEFAULT_NUM); + memset(bmp->data, 0, bmp->dataSize); + DCFlushRangeNoSync(bmp->data, bmp->dataSize); + return anim; +} + +void fn_1_5E74(AnimData *arg0, u16 arg1, u16 arg2, u16 arg3) +{ + u8 *var_r31; + u16 var_r30; + u16 var_r29; + s32 var_r28; + s32 temp_r0_2; + s32 temp_r7; + u8 temp_r0; + + switch (arg0->bmp->pixSize) { + case 4: + var_r30 = lbl_1_data_9DC[0]; // 8 + var_r29 = lbl_1_data_9DC[1]; // 8 + break; + case 8: + var_r30 = lbl_1_data_9DC[2]; // 8 + var_r29 = lbl_1_data_9DC[3]; // 4 + break; + case 16: + var_r30 = lbl_1_data_9DC[4]; // 4 + var_r29 = lbl_1_data_9DC[5]; // 4 + break; + } + + var_r28 = (arg0->bmp->sizeX / var_r30) * ((arg2 / var_r29) << 5); + var_r31 = ((u8 *)arg0->bmp->data) + (var_r28 + ((arg0->bmp->pixSize * ((arg2 % var_r29) * 8)) / 8)); + var_r31 += (arg1 % 8 * arg0->bmp->pixSize) / 8; + var_r31 += (arg1 / var_r30) << 5; + + switch (arg0->bmp->pixSize) { + case 4: + if ((arg1 & 1) == 0) { + *var_r31 &= 0xF; + *var_r31 |= arg3 << 4; + break; + } + *var_r31 &= 0xF0; + *var_r31 |= arg3; + break; + case 8: + *var_r31 |= arg3; + break; + case 16: + *((u16 *)var_r31) = arg3; + break; + } +} + +u16 fn_1_607C(AnimData *anim, u16 arg1, u16 arg2) +{ + u16 var_r31; + u16 var_r30; + u8 *var_r29; + s32 var_r28; + u32 temp_r0_2; + u32 temp_r6; + u8 temp_r0; + u8 temp_r0_3; + + switch (anim->bmp->pixSize) { + case 4: + var_r31 = lbl_1_data_9F4[0]; + var_r30 = lbl_1_data_9F4[1]; + break; + case 8: + var_r31 = lbl_1_data_9F4[2]; + var_r30 = lbl_1_data_9F4[3]; + break; + case 16: + var_r31 = lbl_1_data_9F4[4]; + var_r30 = lbl_1_data_9F4[5]; + break; + } + var_r29 = ((u8 *)anim->bmp->data) + ((arg1 / var_r31) << 5) + (arg1 % 8 * anim->bmp->pixSize) / 8 + + (((anim->bmp->sizeX / var_r31) * ((arg2 / var_r30) << 5)) + ((anim->bmp->pixSize * ((arg2 % var_r30) * 8)) / 8)); + + switch (anim->bmp->pixSize) { + case 4: + if ((arg1 & 1) == 0) { + var_r28 = *var_r29 >> 4; + } else { + var_r28 = *var_r29 & 0xF; + } + return var_r28; + case 8: + return *var_r29; + case 16: + return *((u16 *)var_r29); + } +} + +s32 fn_1_6248(void *arg0, s32 arg1) +{ + s32 var_r31; + + GXBeginDisplayList(arg0, arg1); + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 4); + + GXPosition3f32(0.0f, 1.5f, 100.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXPosition3f32(0.0f, 1.5f, -100.0f); + GXTexCoord2f32(0.0f, 0.0f); + GXPosition3f32(3000.0f, 1.5f, 100.0f); + GXTexCoord2f32(1.0f, 1.0f); + GXPosition3f32(3000.0f, 1.5f, -100.0f); + GXTexCoord2f32(1.0f, 0.0f); + + var_r31 = GXEndDisplayList(); + DCFlushRangeNoSync(arg0, var_r31); + return var_r31; +} + +void fn_1_6440(omObjData *object) +{ + fn_1_648C(0, 0, 0.0f); + object->func = fn_1_66DC; +} + +void fn_1_648C(s32 arg0, s32 arg1, float arg8) +{ + CZoom = lbl_1_data_738[arg0].unk_00 + arg8 * (lbl_1_data_738[arg1].unk_00 - lbl_1_data_738[arg0].unk_00); + Center.x = lbl_1_data_738[arg0].unk_04 + arg8 * (lbl_1_data_738[arg1].unk_04 - lbl_1_data_738[arg0].unk_04); + Center.y = lbl_1_data_738[arg0].unk_08 + arg8 * (lbl_1_data_738[arg1].unk_08 - lbl_1_data_738[arg0].unk_08); + Center.z = lbl_1_data_738[arg0].unk_0C + arg8 * (lbl_1_data_738[arg1].unk_0C - lbl_1_data_738[arg0].unk_0C); + CRot.x = lbl_1_data_738[arg0].unk_10 + arg8 * (lbl_1_data_738[arg1].unk_10 - lbl_1_data_738[arg0].unk_10); + CRot.y = lbl_1_data_738[arg0].unk_14 + arg8 * (lbl_1_data_738[arg1].unk_14 - lbl_1_data_738[arg0].unk_14); + CRot.z = lbl_1_data_738[arg0].unk_18 + arg8 * (lbl_1_data_738[arg1].unk_18 - lbl_1_data_738[arg0].unk_18); +} + +void fn_1_66DC(omObjData *object) +{ + CameraData *var_r31; + + var_r31 = Hu3DCamera; + switch (fn_1_38C()) { + case 1: + fn_1_648C(0, 1, 1.0 - cosd(90.0f * lbl_1_bss_4)); + if (lbl_1_bss_4 < 1.0f) { + lbl_1_bss_4 += 0.007999999f; + if (lbl_1_bss_4 > 1.0f) { + lbl_1_bss_4 = 1.0f; + } + } + break; + case 3: + Center.x += 2.0000002f; + Hu3DShadowData.unk_14.x = 1000.0f + var_r31->pos.x; + Hu3DShadowData.unk_20.x = Hu3DShadowData.unk_14.x - 1500.0f; + break; + case 6: + fn_1_648C(1, 1, 0.0f); + break; + case 7: + if (Center.x < 3000.0f) { + Center.x += 25.0f; + } + default: + break; + } +} diff --git a/src/REL/present/common.c b/src/REL/present/common.c index fa2aff10..c06f944d 100644 --- a/src/REL/present/common.c +++ b/src/REL/present/common.c @@ -175,7 +175,6 @@ void fn_1_4A04(omObjData *object) { float var_f29; float var_f30; - double var_f31; s16 var_r29; UnkPresentStruct5 *var_r31; From 206fb7d931f7d0ce3f2f0afd8e4c20aac60b65a7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 9 May 2024 20:48:12 -0500 Subject: [PATCH 19/22] Figure out most remaining functions of m404dll --- src/REL/m404Dll/main.c | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/REL/m404Dll/main.c b/src/REL/m404Dll/main.c index 14cfc448..f86f6e35 100644 --- a/src/REL/m404Dll/main.c +++ b/src/REL/m404Dll/main.c @@ -668,8 +668,8 @@ void fn_1_1344(omObjData *object) memset(var_r31, 0, 484); var_r31->unk_02 = lbl_1_bss_20++; var_r31->unk_04 = GWPlayerCfg[var_r31->unk_02].pad_idx; - var_r24 = GWPlayerCfg[var_r31->unk_02].character; - var_r31->unk_0C = var_r24; + + var_r31->unk_0C = var_r24 = GWPlayerCfg[var_r31->unk_02].character; var_r31->unk_0E = GWPlayerCfg[var_r31->unk_02].diff; var_r31->unk_10 = GWPlayerCfg[var_r31->unk_02].group; object->model[0] = CharModelCreate(var_r24, 2); @@ -742,12 +742,10 @@ void fn_1_1344(omObjData *object) void fn_1_1AFC(omObjData *object) { UnkM404Struct3 *var_r31; - s32 var_r29; - s32 var_r28; + var_r31 = object->data; - var_r29 = lbl_1_bss_48; - if (var_r29 >= 1) { + if (fn_1_38C() >= 1) { if (var_r31->unk_00_field2) { if (var_r31->unk_38 != 0) { if (--var_r31->unk_38 == 0) { @@ -763,8 +761,7 @@ void fn_1_1AFC(omObjData *object) HuAudFXPlay(1326); } } - var_r28 = lbl_1_bss_48; - if (var_r28 != 2) { + if (fn_1_38C() != 2) { return; } var_r31->unk_24 = 0.0f; @@ -875,23 +872,23 @@ float fn_1_2EBC(float arg0[], float arg8) float fn_1_3A38(float arg0[], float arg8, float arg9) { - float sp3C[2]; + volatile float sp40; + volatile float sp3C; float var_f24; float var_f18; s32 var_r30; - sp3C[0] = 0.00001f; + sp3C = 0.00001f; var_r30 = 0; do { var_f18 = fn_1_2EBC(arg0, arg8) - arg9; - var_f24 = fn_1_1DF8(arg0, arg8); - if (fabs(var_f24) < sp3C[0]) { + if (fabs(var_f24 = fn_1_1DF8(arg0, arg8)) < sp3C) { var_f24 = 1.0f; } - sp3C[1] = arg8; + sp40 = arg8; arg8 -= var_f18 / var_f24; var_r30++; - } while (arg8 != sp3C[1] && var_r30 < 16); + } while (arg8 != sp40 && var_r30 < 16); return arg8; } @@ -962,17 +959,14 @@ void fn_1_44A0(omObjData *object) ModelData *var_r29; s32 var_r28; s16 var_r27; - s32 var_r26; - s32 var_r25; + var_r31 = object->data; var_r28 = -1; - var_r26 = lbl_1_bss_48; - if (var_r26 == 6) { + if (fn_1_38C() == 6) { object->func = fn_1_4C7C; } - var_r25 = lbl_1_bss_48; - if (var_r25 == 3 && !var_r31->unk_00_field0) { + if (fn_1_38C() == 3 && !var_r31->unk_00_field0) { switch (var_r31->unk_12) { case 0: if (GWPlayerCfg[var_r31->unk_02].iscom == 0) { @@ -1103,20 +1097,16 @@ void fn_1_4F4C(omObjData *object) UnkM404Struct3 *var_r30; s32 var_r29; u16 var_r23; - s32 var_r18; - s32 var_r17; var_r30 = object->data; - var_r18 = lbl_1_bss_48; - if (var_r18 == 7) { + if (fn_1_38C() == 7) { var_r23 = fn_1_F70(object, (Center.x - lbl_1_data_738[1].unk_04) / (3000.0f - lbl_1_data_738[1].unk_04)); if (!var_r30->unk_00_field1 && var_r23 == var_r30->unk_5C) { var_r30->unk_00_field1 = 1; } var_r30->unk_58 = var_r23; } - var_r17 = lbl_1_bss_48; - if (var_r17 == 9 && var_r30->unk_2C < 0) { + if (fn_1_38C() == 9 && var_r30->unk_2C < 0) { for (var_r29 = 0; var_r29 < 4; var_r29++) { if (var_r30->unk_02 == lbl_1_bss_38[var_r29]) { break; From ec5f686ffba353f729d04865c633a2a0f8784e9e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 10 May 2024 20:33:37 -0500 Subject: [PATCH 20/22] Change int to s32 --- include/REL/board_executor.h | 4 ++- include/REL/executor.h | 4 ++- include/game/data.h | 4 +-- include/game/gamework.h | 48 ++++++++++++------------- include/game/jmp.h | 4 +-- include/game/object.h | 26 +++++++------- include/game/process.h | 12 +++---- src/REL/board_executor.c | 2 +- src/REL/executor.c | 2 +- src/REL/mstory4Dll/main.c | 2 +- src/game/data.c | 46 ++++++++++++------------ src/game/decode.c | 16 ++++----- src/game/gamework.c | 70 ++++++++++++++++++------------------ src/game/init.c | 2 +- src/game/jmp.c | 4 +-- src/game/objdll.c | 6 ++-- src/game/objmain.c | 32 ++++++++--------- src/game/objsysobj.c | 2 +- src/game/process.c | 35 ++++++++---------- src/game/wipe.c | 26 +++++++------- 20 files changed, 172 insertions(+), 175 deletions(-) diff --git a/include/REL/board_executor.h b/include/REL/board_executor.h index 89450e01..47d3f448 100644 --- a/include/REL/board_executor.h +++ b/include/REL/board_executor.h @@ -5,7 +5,9 @@ extern "C" { #endif -extern int _prolog(); +#include "dolphin/types.h" + +extern s32 _prolog(); extern void _epilog(); typedef void (*VoidFunc)(void); diff --git a/include/REL/executor.h b/include/REL/executor.h index afec2f28..f6ed3f1d 100644 --- a/include/REL/executor.h +++ b/include/REL/executor.h @@ -5,7 +5,9 @@ extern "C" { #endif -extern int _prolog(); +#include "dolphin/types.h" + +extern s32 _prolog(); extern void _epilog(); typedef void (*VoidFunc)(void); diff --git a/include/game/data.h b/include/game/data.h index 889a931c..f41a3816 100644 --- a/include/game/data.h +++ b/include/game/data.h @@ -30,7 +30,7 @@ typedef struct data_read_stat { } DataReadStat; void HuDataInit(void); -int HuDataReadChk(s32 data_num); +s32 HuDataReadChk(s32 data_num); DataReadStat *HuDataGetStatus(void *dir_ptr); void *HuDataGetDirPtr(s32 data_num); DataReadStat *HuDataDirRead(s32 data_num); @@ -52,7 +52,7 @@ void HuDataDirClose(s32 data_id); void HuDataDirCloseNum(s32 num); void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap); -void HuDecodeData(void *src, void *dst, u32 size, int decode_type); +void HuDecodeData(void *src, void *dst, u32 size, s32 decode_type); extern u32 DirDataSize; diff --git a/include/game/gamework.h b/include/game/gamework.h index 12da26f5..a4c41334 100644 --- a/include/game/gamework.h +++ b/include/game/gamework.h @@ -7,30 +7,30 @@ void GWInit(void); void GWGameStatReset(void); s32 GWMessSpeedGet(void); s32 GWMessDelayGet(void); -void GWMGRecordSet(int index, s32 value); -s32 GWMGRecordGet(int index); -void GWCharColorGet(int character, GXColor *color); -void GWBoardPlayCountSet(int board, u8 value); -void GWBoardPlayCountAdd(int board, u8 value); -u8 GWBoardPlayCountGet(int board); -void GWBoardMaxStarsSet(int board, int value); -u16 GWBoardMaxStarsGet(int board); -void GWBoardMaxCoinsSet(int board, int value); -u16 GWBoardMaxCoinsGet(int board); -int GWBoardWinCountInc(int character, int board); -int GWBoardWinCountGet(int character, int board); -void GWBoardWinCountSet(int character, int board, int value); -int GWMGAvailGet(int id); -int GWMGAvailSet(int id); -int GWMGCustomGet(int id); -int GWMGCustomSet(int id); -int GWMGCustomReset(int id); -s16 GWCoinsGet(int player); -void GWCoinsSet(int player, s16 value); -void GWCoinsAdd(int player, s16 amount); -void GWStarsSet(int player, s16 value); -void GWStarsAdd(int player, s16 amount); -s32 GWStarsGet(int player); +void GWMGRecordSet(s32 index, s32 value); +s32 GWMGRecordGet(s32 index); +void GWCharColorGet(s32 character, GXColor *color); +void GWBoardPlayCountSet(s32 board, u8 value); +void GWBoardPlayCountAdd(s32 board, u8 value); +u8 GWBoardPlayCountGet(s32 board); +void GWBoardMaxStarsSet(s32 board, s32 value); +u16 GWBoardMaxStarsGet(s32 board); +void GWBoardMaxCoinsSet(s32 board, s32 value); +u16 GWBoardMaxCoinsGet(s32 board); +s32 GWBoardWinCountInc(s32 character, s32 board); +s32 GWBoardWinCountGet(s32 character, s32 board); +void GWBoardWinCountSet(s32 character, s32 board, s32 value); +s32 GWMGAvailGet(s32 id); +s32 GWMGAvailSet(s32 id); +s32 GWMGCustomGet(s32 id); +s32 GWMGCustomSet(s32 id); +s32 GWMGCustomReset(s32 id); +s16 GWCoinsGet(s32 player); +void GWCoinsSet(s32 player, s16 value); +void GWCoinsAdd(s32 player, s16 amount); +void GWStarsSet(s32 player, s16 value); +void GWStarsAdd(s32 player, s16 amount); +s32 GWStarsGet(s32 player); void GWTotalStarsSet(s16 value); void GWTotalStarsAdd(s16 amount); u16 GWTotalStarsGet(void); diff --git a/include/game/jmp.h b/include/game/jmp.h index 5e2b8434..0aadbc43 100755 --- a/include/game/jmp.h +++ b/include/game/jmp.h @@ -13,7 +13,7 @@ typedef struct jump_buf { double flt_regs[19]; } jmp_buf; -int gcsetjmp(jmp_buf *jump); -int gclongjmp(jmp_buf *jump, int status); +s32 gcsetjmp(jmp_buf *jump); +s32 gclongjmp(jmp_buf *jump, s32 status); #endif diff --git a/include/game/object.h b/include/game/object.h index eab5424d..95061c52 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -32,8 +32,8 @@ typedef void (*omObjFunc)(struct om_obj_data *); typedef struct om_ovl_his_data { OverlayID overlay; - int event; - int stat; + s32 event; + s32 stat; } omOvlHisData; typedef struct om_obj_data { @@ -65,14 +65,14 @@ typedef struct om_dll_data { s32 ret; } omDllData; -void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl); -void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat); -void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat); +void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl); +void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat); +void omOvlGotoEx(OverlayID overlay, s16 arg2, s32 event, s32 stat); void omOvlReturnEx(s16 level, s16 arg2); void omOvlKill(s16 arg); -void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat); +void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat); omOvlHisData *omOvlHisGet(s32 level); -Process *omInitObjMan(s16 max_objs, int prio); +Process *omInitObjMan(s16 max_objs, s32 prio); void omDestroyObjMan(void); omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, omObjFunc func); void omAddMember(Process *objman_process, u16 group, omObjData *object); @@ -93,7 +93,7 @@ OverlayID omCurrentOvlGet(void); void omDLLDBGOut(void); void omDLLInit(FileListEntry *ovl_list); -int omDLLStart(s16 overlay, s16 flag); +s32 omDLLStart(s16 overlay, s16 flag); void omDLLNumEnd(s16 overlay, s16 flag); void omDLLEnd(s16 dllno, s16 flag); omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag); @@ -113,11 +113,11 @@ extern omObjData *omDBGSysKeyObj; extern Process *omwatchproc; extern OverlayID omnextovl; extern OverlayID omcurovl; -extern int omcurdll; -extern int omovlhisidx; -extern int omovlevtno; -extern int omnextovlevtno; -extern int omovlstat; +extern s32 omcurdll; +extern s32 omovlhisidx; +extern s32 omovlevtno; +extern s32 omnextovlevtno; +extern s32 omovlstat; extern char omUPauseFlag; extern s16 omSysExitReq; extern s16 omdispinfo; diff --git a/include/game/process.h b/include/game/process.h index c83b9cf2..3bd6a297 100644 --- a/include/game/process.h +++ b/include/game/process.h @@ -20,7 +20,7 @@ typedef struct process { u16 exec; u16 stat; u16 prio; - int sleep_time; + s32 sleep_time; u32 base_sp; jmp_buf jump; void (*dtor)(void); @@ -35,19 +35,19 @@ void HuPrcChildUnlink(Process *process); Process *HuPrcChildCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size, Process *parent); void HuPrcChildWatch(void); Process *HuPrcCurrentGet(void); -int HuPrcKill(Process *process); +s32 HuPrcKill(Process *process); void HuPrcChildKill(Process *process); -void HuPrcSleep(int time); +void HuPrcSleep(s32 time); void HuPrcVSleep(); void HuPrcWakeup(Process *process); void HuPrcDestructorSet2(Process *process, void (*func)(void)); void HuPrcDestructorSet(void (*func)(void)); -void HuPrcCall(int tick); +void HuPrcCall(s32 tick); void *HuPrcMemAlloc(s32 size); void HuPrcMemFree(void *ptr); void HuPrcSetStat(Process *process, u16 value); void HuPrcResetStat(Process *process, u16 value); -void HuPrcAllPause(int flag); -void HuPrcAllUPause(int flag); +void HuPrcAllPause(s32 flag); +void HuPrcAllUPause(s32 flag); #endif \ No newline at end of file diff --git a/src/REL/board_executor.c b/src/REL/board_executor.c index b906db0e..c884fbb7 100644 --- a/src/REL/board_executor.c +++ b/src/REL/board_executor.c @@ -5,7 +5,7 @@ static void InitBoard(void) { BoardCommonInit(BoardCreate, BoardDestroy); } -int _prolog(void) { +s32 _prolog(void) { const VoidFunc* ctors = _ctors; while (*ctors != 0) { (**ctors)(); diff --git a/src/REL/executor.c b/src/REL/executor.c index 8cc50de0..4acadcff 100644 --- a/src/REL/executor.c +++ b/src/REL/executor.c @@ -1,6 +1,6 @@ #include "REL/executor.h" -int _prolog(void) { +s32 _prolog(void) { const VoidFunc* ctors = _ctors; while (*ctors != 0) { (**ctors)(); diff --git a/src/REL/mstory4Dll/main.c b/src/REL/mstory4Dll/main.c index 4a3f2661..38dc9400 100644 --- a/src/REL/mstory4Dll/main.c +++ b/src/REL/mstory4Dll/main.c @@ -453,7 +453,7 @@ void fn_1_EC(void) } } -int _prolog(void) { +s32 _prolog(void) { const VoidFunc* ctors = _ctors; while (*ctors != 0) { (**ctors)(); diff --git a/src/game/data.c b/src/game/data.c index 3af1b340..e630d7ed 100644 --- a/src/game/data.c +++ b/src/game/data.c @@ -26,7 +26,7 @@ static DataReadStat ATTRIBUTE_ALIGN(32) ReadDataStat[DATA_MAX_READSTAT]; void HuDataInit(void) { - int i = 0; + s32 i = 0; FileListEntry *dir_stat = DataDirStat; DataReadStat *read_stat; while(dir_stat->name) { @@ -45,9 +45,9 @@ void HuDataInit(void) } } -static int HuDataReadStatusGet(void) +static s32 HuDataReadStatusGet(void) { - int i; + s32 i; for(i=0; i>= 16; for(i=0; i> 16; if(DataDirMax <= dir_id) { @@ -135,7 +135,7 @@ DataReadStat *HuDataDirRead(s32 data_num) static DataReadStat *HuDataDirReadNum(s32 data_num, s32 num) { DataReadStat *read_stat; - int status; + s32 status; s32 dir_id; dir_id = data_num >> 16; if(DataDirMax <= dir_id) { @@ -176,7 +176,7 @@ static DataReadStat *HuDataDirReadNum(s32 data_num, s32 num) DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num) { DataReadStat *read_stat = HuDataGetStatus(dir_ptr); - int status; + s32 status; if((status = HuDataReadChk(read_stat->dir_id << 16)) >= 0) { HuDataDirClose(data_num); } @@ -194,7 +194,7 @@ DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num) void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo) { DataReadStat *read_stat; - int i; + s32 i; for(i=0; istartAddr) { break; @@ -211,7 +211,7 @@ void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo) s32 HuDataDirReadAsync(s32 data_num) { DataReadStat *read_stat; - int status; + s32 status; s32 dir_id; dir_id = data_num >> 16; if(DataDirMax <= dir_id) { @@ -244,7 +244,7 @@ s32 HuDataDirReadAsync(s32 data_num) s32 HuDataDirReadNumAsync(s32 data_num, s32 num) { DataReadStat *read_stat; - int status; + s32 status; s32 dir_id; dir_id = data_num >> 16; if(DataDirMax <= dir_id) { @@ -291,7 +291,7 @@ static void GetFileInfo(DataReadStat *read_stat, s32 file_num) void *HuDataRead(s32 data_num) { DataReadStat *read_stat; - int status; + s32 status; void *buf; if(!HuDataDirRead(data_num)) { (void)data_num; @@ -312,7 +312,7 @@ void *HuDataRead(s32 data_num) void *HuDataReadNum(s32 data_num, s32 num) { DataReadStat *read_stat; - int status; + s32 status; void *buf; if(!HuDataDirReadNum(data_num, num)) { return NULL; @@ -332,7 +332,7 @@ void *HuDataReadNum(s32 data_num, s32 num) void *HuDataSelHeapRead(s32 data_num, HeapID heap) { DataReadStat *read_stat; - int status; + s32 status; void *buf; if(!HuDataDirRead(data_num)) { return NULL; @@ -368,7 +368,7 @@ void *HuDataSelHeapRead(s32 data_num, HeapID heap) void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap) { DataReadStat *read_stat; - int status; + s32 status; void *buf; if(!HuDataDirReadNum(data_num, num)) { return NULL; @@ -412,7 +412,7 @@ static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num) char **paths; void **dir_ptrs; void **out_ptrs; - int i, count, total_files; + s32 i, count, total_files; u32 dir_id; for(i=0, count=0; data_ids[i] != -1; i++) { dir_id = data_ids[i] >> 16; @@ -433,7 +433,7 @@ static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num) for(i=0, count=0; data_ids[i] != -1; i++) { dir_id = data_ids[i] >> 16; if(HuDataReadChk(data_ids[i]) < 0) { - int j; + s32 j; for(j=0; dir_ids[j] != -1; j++) { if(dir_ids[j] == dir_id){ break; @@ -481,7 +481,7 @@ static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num) s32 HuDataGetSize(s32 data_num) { DataReadStat *read_stat; - int status; + s32 status; if((status = HuDataReadChk(data_num)) == -1) { return -1; } @@ -499,7 +499,7 @@ void HuDataClose(void *ptr) void HuDataCloseMulti(void **ptrs) { - int i; + s32 i; for(i=0; ptrs[i]; i++) { void *ptr = ptrs[i]; if(ptr) { @@ -514,7 +514,7 @@ void HuDataCloseMulti(void **ptrs) void HuDataDirClose(s32 data_id) { DataReadStat *read_stat; - int i; + s32 i; s32 dir_id = data_id >> 16; for(i=0; isrc++) << 24; size += (*decode->src++) << 16; size += (*decode->src++) << 8; @@ -78,7 +78,7 @@ static void HuDecodeSlide(struct decode_data *decode) num_bits = 32; } if(flag >> 31) { - *decode->dst++ = (int)*decode->src++; + *decode->dst++ = (s32)*decode->src++; decode->size--; } else { u8 *src; @@ -125,7 +125,7 @@ static void HuDecodeFslide(struct decode_data *decode) num_bits = 32; } if(flag >> 31) { - *decode->dst++ = (int)*decode->src++; + *decode->dst++ = (s32)*decode->src++; decode->size--; } else { u8 *src; @@ -155,11 +155,11 @@ static void HuDecodeFslide(struct decode_data *decode) static void HuDecodeRle(struct decode_data *decode) { - int i; + s32 i; while(decode->size) { - int size = *decode->src++; + s32 size = *decode->src++; if(size < 128) { - int fill = *decode->src++; + s32 fill = *decode->src++; for(i=0; idst++ = fill; } @@ -173,7 +173,7 @@ static void HuDecodeRle(struct decode_data *decode) } } -void HuDecodeData(void *src, void *dst, u32 size, int decode_type) +void HuDecodeData(void *src, void *dst, u32 size, s32 decode_type) { struct decode_data decode; struct decode_data *decode_ptr = &decode; diff --git a/src/game/gamework.c b/src/game/gamework.c index e6207992..60ef959b 100644 --- a/src/game/gamework.c +++ b/src/game/gamework.c @@ -147,19 +147,19 @@ s32 GWMessDelayGet(void) return GWSystem.mess_delay; } -void GWMGRecordSet(int index, s32 value) +void GWMGRecordSet(s32 index, s32 value) { if(!_CheckFlag(FLAG_ID_MAKE(1, 12))) { GWGameStat.mg_record[index] = value; } } -s32 GWMGRecordGet(int index) +s32 GWMGRecordGet(s32 index) { return GWGameStat.mg_record[index]; } -void GWCharColorGet(int character, GXColor *color) +void GWCharColorGet(s32 character, GXColor *color) { GXColor char_color[] = { { 227, 67, 67, 255 }, @@ -174,7 +174,7 @@ void GWCharColorGet(int character, GXColor *color) *color = char_color[character]; } -void GWBoardPlayCountSet(int board, u8 value) +void GWBoardPlayCountSet(s32 board, u8 value) { if(value > 99) { value = 99; @@ -182,7 +182,7 @@ void GWBoardPlayCountSet(int board, u8 value) GWGameStat.board_play_count[board] = value; } -void GWBoardPlayCountAdd(int board, u8 value) +void GWBoardPlayCountAdd(s32 board, u8 value) { value += GWGameStat.board_play_count[board]; if(value > 99) { @@ -192,34 +192,34 @@ void GWBoardPlayCountAdd(int board, u8 value) } -u8 GWBoardPlayCountGet(int board) +u8 GWBoardPlayCountGet(s32 board) { return GWGameStat.board_play_count[board]; } -void GWBoardMaxStarsSet(int board, int value) +void GWBoardMaxStarsSet(s32 board, s32 value) { GWGameStat.board_max_stars[board] = value; } -u16 GWBoardMaxStarsGet(int board) +u16 GWBoardMaxStarsGet(s32 board) { return GWGameStat.board_max_stars[board]; } -void GWBoardMaxCoinsSet(int board, int value) +void GWBoardMaxCoinsSet(s32 board, s32 value) { GWGameStat.board_max_coins[board] = value; } -u16 GWBoardMaxCoinsGet(int board) +u16 GWBoardMaxCoinsGet(s32 board) { return GWGameStat.board_max_coins[board]; } -int GWBoardWinCountInc(int character, int board) +s32 GWBoardWinCountInc(s32 character, s32 board) { - int win_count = GWGameStat.board_win_count[board][character]+1; + s32 win_count = GWGameStat.board_win_count[board][character]+1; if(win_count > 99) { win_count = 99; } @@ -227,20 +227,20 @@ int GWBoardWinCountInc(int character, int board) return win_count; } -int GWBoardWinCountGet(int character, int board) +s32 GWBoardWinCountGet(s32 character, s32 board) { return GWGameStat.board_win_count[board][character]; } -void GWBoardWinCountSet(int character, int board, int value) +void GWBoardWinCountSet(s32 character, s32 board, s32 value) { GWGameStat.board_win_count[board][character] = value; } -int GWMGAvailGet(int id) +s32 GWMGAvailGet(s32 id) { - int word; - int bit; + s32 word; + s32 bit; id -= 401; word = id >> 5; bit = id % 32; @@ -251,20 +251,20 @@ int GWMGAvailGet(int id) } } -int GWMGAvailSet(int id) +s32 GWMGAvailSet(s32 id) { - int word; - int bit; + s32 word; + s32 bit; id -= 401; word = id >> 5; bit = id % 32; GWGameStat.mg_avail[word] |= (1 << bit); } -int GWMGCustomGet(int id) +s32 GWMGCustomGet(s32 id) { - int word; - int bit; + s32 word; + s32 bit; id -= 401; word = id >> 5; bit = id % 32; @@ -275,32 +275,32 @@ int GWMGCustomGet(int id) } } -int GWMGCustomSet(int id) +s32 GWMGCustomSet(s32 id) { - int word; - int bit; + s32 word; + s32 bit; id -= 401; word = id >> 5; bit = id % 32; GWGameStat.mg_custom[word] |= (1 << bit); } -int GWMGCustomReset(int id) +s32 GWMGCustomReset(s32 id) { - int word; - int bit; + s32 word; + s32 bit; id -= 401; word = id >> 5; bit = id % 32; GWGameStat.mg_custom[word] &= ~(1 << bit); } -s16 GWCoinsGet(int player) +s16 GWCoinsGet(s32 player) { return GWPlayer[player].coins; } -void GWCoinsSet(int player, s16 value) +void GWCoinsSet(s32 player, s16 value) { if(!_CheckFlag(FLAG_ID_MAKE(1, 12))) { if(value < 0) { @@ -316,12 +316,12 @@ void GWCoinsSet(int player, s16 value) } } -void GWCoinsAdd(int player, s16 amount) +void GWCoinsAdd(s32 player, s16 amount) { GWCoinsSet(player, GWPlayer[player].coins+amount); } -void GWStarsSet(int player, s16 value) +void GWStarsSet(s32 player, s16 value) { if(value < 0) { value = 0; @@ -335,12 +335,12 @@ void GWStarsSet(int player, s16 value) GWPlayer[player].stars = value; } -void GWStarsAdd(int player, s16 amount) +void GWStarsAdd(s32 player, s16 amount) { GWStarsSet(player, GWPlayer[player].stars+amount); } -s32 GWStarsGet(int player) +s32 GWStarsGet(s32 player) { return GWPlayer[player].stars; } diff --git a/src/game/init.c b/src/game/init.c index 06adbaad..f3a4f853 100644 --- a/src/game/init.c +++ b/src/game/init.c @@ -166,7 +166,7 @@ void HuSysBeforeRender() void HuSysDoneRender(s32 retrace_count) { - int retrace_dist; + s32 retrace_dist; if(DemoStatEnable) { GXDrawDone(); DEMOUpdateStats(1); diff --git a/src/game/jmp.c b/src/game/jmp.c index 94ec81b4..8313bd8c 100755 --- a/src/game/jmp.c +++ b/src/game/jmp.c @@ -1,6 +1,6 @@ #include "game/jmp.h" -int gcsetjmp(register jmp_buf *jump) { +s32 gcsetjmp(register jmp_buf *jump) { // clang-format off asm { mflr r5 @@ -36,7 +36,7 @@ int gcsetjmp(register jmp_buf *jump) { } // clang-format off -asm int gclongjmp(register jmp_buf *jump, register int status) { +asm s32 gclongjmp(register jmp_buf *jump, register s32 status) { nofralloc lwz r5, jump->lr lwz r6, jump->cr diff --git a/src/game/objdll.c b/src/game/objdll.c index 067bee54..c1414129 100644 --- a/src/game/objdll.c +++ b/src/game/objdll.c @@ -16,7 +16,7 @@ void omDLLDBGOut(void) void omDLLInit(FileListEntry *ovl_list) { - int i; + s32 i; OSReport("DLL DBG OUT\n"); for(i=0; i= 0 && !flag) { diff --git a/src/game/objmain.c b/src/game/objmain.c index 88ab203a..f802d287 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -34,12 +34,12 @@ omObjData *omDBGSysKeyObj; Process *omwatchproc; OverlayID omnextovl; OverlayID omcurovl; -int omcurdll; -int omovlhisidx; -int omovlevtno; -int omnextovlevtno; -int omovlstat; -static int omnextovlstat; +s32 omcurdll; +s32 omovlhisidx; +s32 omovlevtno; +s32 omnextovlevtno; +s32 omovlstat; +static s32 omnextovlstat; char omUPauseFlag; s16 omSysExitReq; s16 omdispinfo; @@ -52,7 +52,7 @@ OverlayID omprevovl = OVL_INVALID; static void omWatchOverlayProc(void); static void omInsertObj(Process *objman_process, omObjData *object); -void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl) +void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl) { omDLLInit(ovl_list); omwatchproc = HuPrcCreate(omWatchOverlayProc, prio, 8192, 0); @@ -106,7 +106,7 @@ static void omWatchOverlayProc(void) } } -void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat) +void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) { OSReport("objman>Call New Ovl %d(%d)\n", overlay, arg2); if(omovlhisidx >= OM_OVL_HIS_MAX) { @@ -119,7 +119,7 @@ void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat) omOvlGotoEx(overlay, arg2, event, stat); } -void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat) +void omOvlGotoEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) { omprevovl = omcurovl; if(omcurovl >= 0) { @@ -162,7 +162,7 @@ void omOvlKill(s16 arg) omDBGSysKeyObj = NULL; } -void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat) +void omOvlHisChg(s32 level, OverlayID overlay, s32 event, s32 stat) { omOvlHisData *history; if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) { @@ -184,12 +184,12 @@ omOvlHisData *omOvlHisGet(s32 level) return &omovlhis[omovlhisidx-level]; } -Process *omInitObjMan(s16 max_objs, int prio) +Process *omInitObjMan(s16 max_objs, s32 prio) { omObjGroup *group_all; omObjData *obj_all; omObjData *obj; - int i; + s32 i; omObjMan *objman; Process *process; OSReport("objman>InitObjMan start\n"); @@ -245,7 +245,7 @@ void omDestroyObjMan(void) omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, void (*func)(omObjData *)) { - int i; + s32 i; omObjData *object; s16 next_idx; omObjMan *objman = objman_process->user_data; @@ -408,7 +408,7 @@ void omDelMember(Process *objman_process, omObjData *object) void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs) { - int i; + s32 i; omObjMan *objman = objman_process->user_data; omObjGroup *group_ptr = &objman->group[group]; if(group_ptr->obj != NULL) { @@ -521,7 +521,7 @@ static void omDumpObj(Process *objman_process) { omObjMan *objman = objman_process->user_data; omObjData *obj_all = objman->obj; - int i; + s32 i; OSReport("=================== 現在登録されている OBJECT ==================\n"); OSReport("STAT PRI GRPN MEMN PROG (TRA) (ROT) (SCA) mdlcnt mtncnt work[0] work[1] work[2] work[3] *data\n"); for(i=0; imax_objs; i++) { @@ -540,7 +540,7 @@ void omAllPause(BOOL pause) { Process *objman_process = HuPrcCurrentGet(); omObjMan *objman = objman_process->user_data; - int i; + s32 i; if(pause) { for(i=0; imax_objs; i++) { if((objman->obj[i].stat & (OM_STAT_DELETED|OM_STAT_NOPAUSE)) == 0) { diff --git a/src/game/objsysobj.c b/src/game/objsysobj.c index 765fd55b..3e6b56f3 100644 --- a/src/game/objsysobj.c +++ b/src/game/objsysobj.c @@ -95,7 +95,7 @@ void omSystemKeyCheck(omObjData *object) HuAudSeqPauseAll(0); } } else { - int i; + s32 i; s16 pause = 0; if(WipeStatGet() || omCurrentOvlGet() == OVL_INVALID || omSysExitReq) { return; diff --git a/src/game/process.c b/src/game/process.c index 121089b0..b62b74fc 100644 --- a/src/game/process.c +++ b/src/game/process.c @@ -2,7 +2,7 @@ #include "game/memory.h" #include "dolphin/os.h" -#define PROCESS_MEMORY_RETADDR 0xA5A5A5A5 +#define FAKE_RETADDR 0xA5A5A5A5 #define EXEC_NORMAL 0 #define EXEC_SLEEP 1 @@ -15,7 +15,6 @@ static Process *processcur; static u16 processcnt; u32 procfunc; - void HuPrcInit(void) { processcnt = 0; @@ -49,12 +48,9 @@ static void UnlinkProcess(Process **root, Process *process) { if (process->next) { process->next->prev = process->prev; } - if (process->prev) { process->prev->next = process->next; - } - - else { + } else { *root = process->next; } } @@ -75,13 +71,13 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz return NULL; } HuMemHeapInit(heap, alloc_size); - process = HuMemMemoryAlloc(heap, sizeof(Process), PROCESS_MEMORY_RETADDR); + process = HuMemMemoryAlloc(heap, sizeof(Process), FAKE_RETADDR); process->heap = heap; process->exec = EXEC_NORMAL; process->stat = 0; process->prio = prio; process->sleep_time = 0; - process->base_sp = ((u32)HuMemMemoryAlloc(heap, stack_size, PROCESS_MEMORY_RETADDR))+stack_size-8; + process->base_sp = ((u32)HuMemMemoryAlloc(heap, stack_size, FAKE_RETADDR))+stack_size-8; gcsetjmp(&process->jump); process->jump.lr = (u32)func; process->jump.sp = process->base_sp; @@ -144,7 +140,7 @@ Process *HuPrcCurrentGet() return processcur; } -static int SetKillStatusProcess(Process *process) +static s32 SetKillStatusProcess(Process *process) { if(process->exec != EXEC_KILLED) { HuPrcWakeup(process); @@ -155,7 +151,7 @@ static int SetKillStatusProcess(Process *process) } } -int HuPrcKill(Process *process) +s32 HuPrcKill(Process *process) { if(process == NULL) { process = HuPrcCurrentGet(); @@ -196,7 +192,7 @@ void HuPrcEnd() gcTerminateProcess(process); } -void HuPrcSleep(int time) +void HuPrcSleep(s32 time) { Process *process = HuPrcCurrentGet(); if(time != 0 && process->exec != EXEC_KILLED) { @@ -210,10 +206,7 @@ void HuPrcSleep(int time) void HuPrcVSleep() { - Process *process = HuPrcCurrentGet(); - if(!gcsetjmp(&process->jump)) { - gclongjmp(&processjmpbuf, 1); - } + HuPrcSleep(0); } void HuPrcWakeup(Process *process) @@ -232,10 +225,10 @@ void HuPrcDestructorSet(void (*func)(void)) process->dtor = func; } -void HuPrcCall(int tick) +void HuPrcCall(s32 tick) { Process *process; - int ret; + s32 ret; processcur = processtop; ret = gcsetjmp(&processjmpbuf); while(1) { @@ -293,12 +286,12 @@ void HuPrcCall(int tick) void *HuPrcMemAlloc(s32 size) { Process *process = HuPrcCurrentGet(); - return HuMemMemoryAlloc(process->heap, size, PROCESS_MEMORY_RETADDR); + return HuMemMemoryAlloc(process->heap, size, FAKE_RETADDR); } void HuPrcMemFree(void *ptr) { - HuMemMemoryFree(ptr, PROCESS_MEMORY_RETADDR); + HuMemMemoryFree(ptr, FAKE_RETADDR); } void HuPrcSetStat(Process *process, u16 value) @@ -311,7 +304,7 @@ void HuPrcResetStat(Process *process, u16 value) process->stat &= ~value; } -void HuPrcAllPause(int flag) +void HuPrcAllPause(s32 flag) { Process *process = processtop; if(flag) { @@ -333,7 +326,7 @@ void HuPrcAllPause(int flag) } } -void HuPrcAllUPause(int flag) +void HuPrcAllUPause(s32 flag) { Process *process = processtop; if(flag) { diff --git a/src/game/wipe.c b/src/game/wipe.c index 7d4cbea0..f2429aa3 100644 --- a/src/game/wipe.c +++ b/src/game/wipe.c @@ -6,7 +6,7 @@ s16 HuSysVWaitGet(s16 old); -typedef int (*fadeFunc)(void); +typedef s32 (*fadeFunc)(void); WipeState wipeData; BOOL wipeFadeInF; @@ -15,9 +15,9 @@ static void WipeColorFill(GXColor color); static void WipeFrameStill(GXColor color); -static int WipeNormalFade(void); -static int WipeCrossFade(void); -static int WipeDummyFade(void); +static s32 WipeNormalFade(void); +static s32 WipeCrossFade(void); +static s32 WipeDummyFade(void); static fadeFunc fadeInFunc[3] = { WipeNormalFade, WipeCrossFade, WipeDummyFade }; static fadeFunc fadeOutFunc[3] = { WipeNormalFade, WipeCrossFade, WipeDummyFade }; @@ -25,7 +25,7 @@ static fadeFunc fadeOutFunc[3] = { WipeNormalFade, WipeCrossFade, WipeDummyFade void WipeInit(GXRenderModeObj *rmode) { WipeState *wipe; - int i; + s32 i; wipe = &wipeData; wipe->unk00 = 0; wipe->unk04 = 0; @@ -46,7 +46,7 @@ void WipeInit(GXRenderModeObj *rmode) void WipeExecAlways(void) { - int i; + s32 i; WipeState *wipe; wipe = &wipeData; switch(wipe->mode) { @@ -151,12 +151,12 @@ u8 WipeStatGet(void) return wipeData.stat; } -static int WipeDummyFade(void) +static s32 WipeDummyFade(void) { return 0; } -static int WipeNormalFade(void) +static s32 WipeNormalFade(void) { u8 alpha; WipeState *wipe = &wipeData; @@ -192,9 +192,9 @@ static void WipeColorFill(GXColor color) WipeState *wipe; u16 ulx, lrx, uly, lry; wipe = &wipeData; - ulx = (int)wipe->x; + ulx = (s32)wipe->x; lrx = wipe->x+wipe->w; - uly = (int)wipe->y; + uly = (s32)wipe->y; lry = wipe->x+wipe->h+1; MTXOrtho(proj, uly, lry, ulx, lrx, 0, 10); GXSetProjection(proj, GX_ORTHOGRAPHIC); @@ -227,7 +227,7 @@ static void WipeColorFill(GXColor color) GXSetChanMatColor(GX_COLOR0A0, colorN); } -static int WipeCrossFade(void) +static s32 WipeCrossFade(void) { u32 size; u8 alpha; @@ -273,9 +273,9 @@ static void WipeFrameStill(GXColor color) WipeState *wipe; u16 ulx, lrx, uly, lry; wipe = &wipeData; - ulx = (int)wipe->x; + ulx = (s32)wipe->x; lrx = wipe->x+wipe->w; - uly = (int)wipe->y; + uly = (s32)wipe->y; lry = wipe->x+wipe->h+1; MTXOrtho(proj, uly, lry, ulx, lrx, 0, 10); GXSetProjection(proj, GX_ORTHOGRAPHIC); From 2f41ab51e7ff46ec53a65fc10a8e2bc6da24f192 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 10 May 2024 20:41:02 -0500 Subject: [PATCH 21/22] Move int to s32 --- include/game/board/window.h | 4 +- include/game/gamework_data.h | 6 +++ include/game/hsfload.h | 2 +- include/game/minigame_seq.h | 4 +- src/game/board/space.c | 2 +- src/game/board/window.c | 4 +- src/game/hsfload.c | 10 ++-- src/game/minigame_seq.c | 96 ++++++++++++++++++------------------ 8 files changed, 67 insertions(+), 61 deletions(-) diff --git a/include/game/board/window.h b/include/game/board/window.h index bf594796..eb015c5f 100644 --- a/include/game/board/window.h +++ b/include/game/board/window.h @@ -10,7 +10,7 @@ void BoardWinUnusedArraySet(f32*); void BoardWinKillAll(void); void BoardWinDestroy(void); void BoardWinProc(void); -int BoardWinChoiceGet(void); +s32 BoardWinChoiceGet(void); void BoardWinPause(void); void BoardWinCreateChoice(s32 pos, u32 mess, s32 portrait, s32 choice); void BoardWinCreate(s32 pos, u32 mess, s32 portrait); @@ -21,7 +21,7 @@ void BoardWinAttrSet(s32 attr); void BoardWinAttrReset(s32 attr); void BoardWinChoiceDisable(s32 choice); void BoardWinKeyWait(void); -int BoardWinSpeedGet(void); +s32 BoardWinSpeedGet(void); void BoardWinSpeedSet(s32 value); s16 BoardWinChoiceNowGet(void); void BoardWinPriSet(s16 prio); diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 5b3d2a26..18fe16b1 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -186,6 +186,12 @@ static inline void GWRumbleSet(s32 value) } } +static inline s32 GWBonusStarGet(void) +{ + return GWSystem.bonus_star; +} + + static inline s32 GWMGExplainGet(void) { return GWSystem.explain_mg; diff --git a/include/game/hsfload.h b/include/game/hsfload.h index 9db51807..1b67cb21 100644 --- a/include/game/hsfload.h +++ b/include/game/hsfload.h @@ -7,6 +7,6 @@ HsfData *LoadHSF(void *data); void ClusterAdjustObject(HsfData *model, HsfData *src_model); char *SetName(u32 *str_ofs); char *MakeObjectName(char *name); -int CmpObjectName(char *name1, char *name2); +s32 CmpObjectName(char *name1, char *name2); #endif \ No newline at end of file diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h index 4bfd3107..d54895c9 100644 --- a/include/game/minigame_seq.h +++ b/include/game/minigame_seq.h @@ -43,8 +43,8 @@ typedef struct seq_work SeqWork; -typedef int (*SeqUpdateFunc)(SeqWork *work); -typedef int (*SeqInitFunc)(SeqWork *work, va_list params); +typedef s32 (*SeqUpdateFunc)(SeqWork *work); +typedef s32 (*SeqInitFunc)(SeqWork *work, va_list params); typedef struct seq_work { SeqUpdateFunc update; diff --git a/src/game/board/space.c b/src/game/board/space.c index 7d18bc55..8f5db247 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -677,7 +677,7 @@ s32 BoardSpaceBlockExec(s32 player, s32 space) if(space == GWSystem.block_pos) { event_exec = 1; } - if((int)GWSystem.bonus_star == 0 && GWPartyGet() == 1 && !_CheckFlag(FLAG_ID_MAKE(1, 11))) { + if(!GWBonusStarGet() && GWPartyGet() == 1 && !_CheckFlag(FLAG_ID_MAKE(1, 11))) { event_exec = 0; } if(GWBoardGet() == 7 || GWBoardGet() == 8) { diff --git a/src/game/board/window.c b/src/game/board/window.c index 6a5e2e0f..5d037a90 100644 --- a/src/game/board/window.c +++ b/src/game/board/window.c @@ -172,7 +172,7 @@ static void ExecBoardWindow(void) { HuPrcEnd(); } -int BoardWinChoiceGet(void) { +s32 BoardWinChoiceGet(void) { return winChoice; } @@ -292,7 +292,7 @@ void BoardWinKeyWait(void) { winWait = 1; } -int BoardWinSpeedGet(void) { +s32 BoardWinSpeedGet(void) { return winSpeedTbl[GWMessSpeedGet()]; } diff --git a/src/game/hsfload.c b/src/game/hsfload.c index 1fe557d7..d5db2471 100644 --- a/src/game/hsfload.c +++ b/src/game/hsfload.c @@ -981,7 +981,7 @@ static void PaletteLoad(void) char *MakeObjectName(char *name) { static char buf[768]; - int index, num_minus; + s32 index, num_minus; char *temp_name; num_minus = 0; index = 0; @@ -1009,9 +1009,9 @@ char *MakeObjectName(char *name) return buf; } -int CmpObjectName(char *name1, char *name2) +s32 CmpObjectName(char *name1, char *name2) { - int temp = 0; + s32 temp = 0; return strcmp(name1, name2); } @@ -1054,7 +1054,7 @@ static inline s32 FindClusterName(char *name) return -1; } -static inline int FindMotionClusterName(char *name) +static inline s32 FindMotionClusterName(char *name) { s32 i; HsfCluster *cluster; @@ -1085,7 +1085,7 @@ static inline s32 FindAttributeName(char *name) return -1; } -static inline int FindMotionAttributeName(char *name) +static inline s32 FindMotionAttributeName(char *name) { s32 i; HsfAttribute *attribute; diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 6834f870..0e721a52 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -31,30 +31,30 @@ typedef struct seq_info { s32 time_max; } SeqInfo; -static int SeqInitTimer(SeqWork *work, va_list params); -static int SeqUpdateTimer(SeqWork *work); +static s32 SeqInitTimer(SeqWork *work, va_list params); +static s32 SeqUpdateTimer(SeqWork *work); -static int SeqInitType2(SeqWork *work, va_list params); -static int SeqUpdateType2(SeqWork *work); +static s32 SeqInitType2(SeqWork *work, va_list params); +static s32 SeqUpdateType2(SeqWork *work); -static int SeqInitMGBasic(SeqWork *work, va_list params); -static int SeqUpdateMGBasic(SeqWork *work); -static int SeqInitMGCommon(SeqWork *work, va_list params); -static int SeqUpdateMG1vs3(SeqWork *work); -static int SeqUpdateMGBattle(SeqWork *work); -static int SeqUpdateMGStory(SeqWork *work); -static int SeqUpdateMG2vs2(SeqWork *work); -static int SeqUpdateMGBowser(SeqWork *work); +static s32 SeqInitMGBasic(SeqWork *work, va_list params); +static s32 SeqUpdateMGBasic(SeqWork *work); +static s32 SeqInitMGCommon(SeqWork *work, va_list params); +static s32 SeqUpdateMG1vs3(SeqWork *work); +static s32 SeqUpdateMGBattle(SeqWork *work); +static s32 SeqUpdateMGStory(SeqWork *work); +static s32 SeqUpdateMG2vs2(SeqWork *work); +static s32 SeqUpdateMGBowser(SeqWork *work); -static int SeqInitWin(SeqWork *work, va_list params); -static int SeqUpdateWin(SeqWork *work); -static int SeqInitDraw(SeqWork *work, va_list params); -static int SeqUpdateDraw(SeqWork *work); -static int SeqInitRecord(SeqWork *work, va_list params); -static int SeqUpdateRecord(SeqWork *work); +static s32 SeqInitWin(SeqWork *work, va_list params); +static s32 SeqUpdateWin(SeqWork *work); +static s32 SeqInitDraw(SeqWork *work, va_list params); +static s32 SeqUpdateDraw(SeqWork *work); +static s32 SeqInitRecord(SeqWork *work, va_list params); +static s32 SeqUpdateRecord(SeqWork *work); -static int SeqInitFlip(SeqWork *work, va_list params); -static int SeqUpdateFlip(SeqWork *work); +static s32 SeqInitFlip(SeqWork *work, va_list params); +static s32 SeqUpdateFlip(SeqWork *work); OverlayID mgSeqOvlPrev = OVL_INVALID; @@ -118,7 +118,7 @@ static u8 seqDoneF; u8 lbl_801D3D94; static s16 seqSpeed; static s16 seqPauseF; -static s32 seqRecordVal; +static int seqRecordVal; static s32 pauseWaitF; static s32 pauseExitF; static s32 pauseActiveF; @@ -130,7 +130,7 @@ void fn_80036BC8(void); void MGSeqInit(void) { - int i; + s32 i; SeqWork *work; work = &seqWorkData[0]; for(i=8; i!=0; i--, work++) { @@ -204,8 +204,8 @@ static s16 CreateSeq(s16 seq_no, va_list params) { SeqWork *work; SeqInfo *info; - int i; - int temp; + s32 i; + s32 temp; work = seqWorkData; info = &seqInfoTbl[(u8)seq_no]; for(i=0; i<8; i++, work++) { @@ -269,7 +269,7 @@ u8 MGSeqStatGet(s16 id) SeqWork *work; u8 ret = 0; if(id < 0) { - int i; + s32 i; work = seqWorkData; for(i=8; i != 0; i--, work++) { ret |= work->stat; @@ -334,7 +334,7 @@ void MGSeqStub(void) void MGSeqSprKill(SeqWork *work) { - int i; + s32 i; for(i=0; i<16; i++) { if(work->spr_grp[i] >= 0) { HuSprGrpKill(work->spr_grp[i]); @@ -350,7 +350,7 @@ static void *SeqReadFile(s32 file) return HuAR_ARAMtoMRAMFileRead(file, MEMORY_DEFAULT_NUM, HEAP_DATA); } -static int SeqInitTimer(SeqWork *work, va_list params) +static s32 SeqInitTimer(SeqWork *work, va_list params) { AnimData *spr_anim; s16 sprite; @@ -407,7 +407,7 @@ static int SeqInitTimer(SeqWork *work, va_list params) return 1; } -static int SeqUpdateTimer(SeqWork *work) +static s32 SeqUpdateTimer(SeqWork *work) { float scale; float tp_lvl; @@ -563,7 +563,7 @@ static int SeqUpdateTimer(SeqWork *work) } } -static int SeqInitType2(SeqWork *work, va_list params) +static s32 SeqInitType2(SeqWork *work, va_list params) { s16 spr_idx; s16 spr_grp; @@ -662,7 +662,7 @@ static int SeqInitType2(SeqWork *work, va_list params) return 1; } -static int SeqUpdateType2(SeqWork *work) +static s32 SeqUpdateType2(SeqWork *work) { float tp_lvl; s16 spr_grp; @@ -920,7 +920,7 @@ static float ForceDefine480() static void SeqPlayStartFX(void); -static int SeqInitMGBasic(SeqWork *work, va_list params) +static s32 SeqInitMGBasic(SeqWork *work, va_list params) { s16 i; s16 word_grp; @@ -967,7 +967,7 @@ static int SeqInitMGBasic(SeqWork *work, va_list params) return 1; } -static int SeqUpdateMGBasic(SeqWork *work) +static s32 SeqUpdateMGBasic(SeqWork *work) { s16 idx; float scale; @@ -1130,7 +1130,7 @@ static int SeqUpdateMGBasic(SeqWork *work) return 1; } -static int SeqInitMGCommon(SeqWork *work, va_list params) +static s32 SeqInitMGCommon(SeqWork *work, va_list params) { s16 i; float tp_lvl; @@ -1204,7 +1204,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) return 1; } -static int SeqUpdateMGBattle(SeqWork *work) +static s32 SeqUpdateMGBattle(SeqWork *work) { s16 idx; float scale; @@ -1446,7 +1446,7 @@ static int SeqUpdateMGBattle(SeqWork *work) return 1; } -static int SeqUpdateMG1vs3(SeqWork *work) +static s32 SeqUpdateMG1vs3(SeqWork *work) { s16 idx; float scale; @@ -1652,7 +1652,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) return 1; } -static int SeqUpdateMGStory(SeqWork *work) +static s32 SeqUpdateMGStory(SeqWork *work) { s16 idx; float scale; @@ -1859,7 +1859,7 @@ static int SeqUpdateMGStory(SeqWork *work) return 1; } -static int SeqUpdateMG2vs2(SeqWork *work) +static s32 SeqUpdateMG2vs2(SeqWork *work) { s16 idx; float scale; @@ -2036,7 +2036,7 @@ static int SeqUpdateMG2vs2(SeqWork *work) return 1; } -static int SeqInitFlip(SeqWork *work, va_list params) +static s32 SeqInitFlip(SeqWork *work, va_list params) { s16 i; s16 word_grp; @@ -2117,7 +2117,7 @@ static int SeqInitFlip(SeqWork *work, va_list params) return 1; } -static int SeqUpdateFlip(SeqWork *work) +static s32 SeqUpdateFlip(SeqWork *work) { s16 idx; float scale; @@ -2285,7 +2285,7 @@ static int SeqUpdateFlip(SeqWork *work) return 1; } -static int SeqUpdateMGBowser(SeqWork *work) +static s32 SeqUpdateMGBowser(SeqWork *work) { s16 idx; float scale; @@ -2500,7 +2500,7 @@ static int SeqUpdateMGBowser(SeqWork *work) return 1; } -static int SeqInitDraw(SeqWork *work, va_list params) +static s32 SeqInitDraw(SeqWork *work, va_list params) { s16 word_grp; work->state = 2; @@ -2529,7 +2529,7 @@ static int SeqInitDraw(SeqWork *work, va_list params) return 1; } -static int SeqUpdateDraw(SeqWork *work) +static s32 SeqUpdateDraw(SeqWork *work) { s16 idx; float scale; @@ -2700,9 +2700,9 @@ static s16 winnerNameW[8]; #define GET_WIN_KANAF() ((seqLanguage == 0) ? 1 : 0) -static int SeqInitWin(SeqWork *work, va_list params) +static s32 SeqInitWin(SeqWork *work, va_list params) { - s32 win_type = va_arg(params, int); + int win_type = va_arg(params, int); s16 word_idx; s16 word_grp; s32 i; @@ -2731,7 +2731,7 @@ static int SeqInitWin(SeqWork *work, va_list params) num_winners = 0; work->win_scale = 1.0f; for(j=0; j<4; j++) { - s32 winner = va_arg(params, int); + int winner = va_arg(params, int); if(winner < 0) { continue; } @@ -2825,7 +2825,7 @@ static int SeqInitWin(SeqWork *work, va_list params) } -static int SeqUpdateWin(SeqWork *work) +static s32 SeqUpdateWin(SeqWork *work) { s32 idx; float tp_lvl; @@ -2948,7 +2948,7 @@ static int SeqUpdateWin(SeqWork *work) return 1; } -static int SeqInitRecord(SeqWork *work, va_list params) +static s32 SeqInitRecord(SeqWork *work, va_list params) { AnimData *spr_data; s16 spr_grp; @@ -3063,7 +3063,7 @@ static int SeqInitRecord(SeqWork *work, va_list params) return 1; } -static int SeqUpdateRecord(SeqWork *work) +static s32 SeqUpdateRecord(SeqWork *work) { s16 group; if(_CheckFlag(0x1000C)) { From c9e1e93504900239e4c5280150d21462ca1f7238 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 10 May 2024 20:41:59 -0500 Subject: [PATCH 22/22] Fix HuMemInitAll int --- src/game/malloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/malloc.c b/src/game/malloc.c index 4eb3be59..863f8c57 100644 --- a/src/game/malloc.c +++ b/src/game/malloc.c @@ -7,7 +7,7 @@ static void *HeapTbl[HEAP_MAX]; void HuMemInitAll(void) { - int i; + s32 i; void *ptr; u32 free_size; for(i=0; i<4; i++) {