Merge pull request #33 from abnormalhare/main
Start m401 & hsfman, add interpretasm
This commit is contained in:
commit
60585eba56
10 changed files with 7748 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -10,3 +10,4 @@ orig/*/*
|
|||
!orig/*/.gitkeep
|
||||
/*.txt
|
||||
ctx.c
|
||||
tools/output/*
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ 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();
|
||||
Process *HuPrcCurrentGet();
|
||||
Process *HuPrcCurrentGet(void);
|
||||
int HuPrcKill(Process *process);
|
||||
void HuPrcChildKill(Process *process);
|
||||
void HuPrcSleep(s32 time);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
#include "dolphin/os.h"
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
|
||||
#define M_PI 3.141592653589793
|
||||
|
||||
extern u16 HuPadBtnDown[4];
|
||||
extern u8 HuPadDStk[4];
|
||||
|
||||
|
|
|
|||
533
src/REL/m401Dll/m401Dll.c
Normal file
533
src/REL/m401Dll/m401Dll.c
Normal file
|
|
@ -0,0 +1,533 @@
|
|||
#include "m401Dll.h"
|
||||
|
||||
void M401ObjectSetup(void) {
|
||||
s32 i;
|
||||
unkStructBSS114 *temp_r30;
|
||||
unkStruct18BFC0 *temp_r29;
|
||||
s16* temp_r28;
|
||||
|
||||
OSReport("**** M401ObjectSetup ****\n");
|
||||
HuMemHeapDump(HuMemHeapPtrGet(0), -1);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(2), -1);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(3), -1);
|
||||
lbl_2_bss_1C = omInitObjMan(0x3C, 0x2000);
|
||||
omGameSysInit(lbl_2_bss_1C);
|
||||
lbl_2_bss_A8 = Hu3DGLightCreateV(&lbl_2_data_14, &lbl_2_data_20, &lbl_2_data_2C);
|
||||
Hu3DGLightInfinitytSet(lbl_2_bss_A8);
|
||||
temp_r28 = &lbl_8018C8FC[lbl_2_bss_A8].unk_00;
|
||||
*temp_r28 |= 0x8000;
|
||||
Hu3DCameraCreate(1);
|
||||
temp_r29 = &lbl_8018BFC0;
|
||||
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0, 480.0, 0.0f, 1.0f);
|
||||
lbl_2_bss_114 = omAddObjEx(lbl_2_bss_1C, 0x3E8, 3, 0, -1, &fn_2_BD90);
|
||||
*lbl_2_bss_114->model = 0;
|
||||
lbl_2_bss_110 = omAddObjEx(lbl_2_bss_1C, 0xA, 0, 0, -1, &fn_2_70C);
|
||||
omMakeGroupEx(lbl_2_bss_1C, 0, 4);
|
||||
lbl_2_bss_118[0] = omGetGroupMemberListEx(lbl_2_bss_1C, 0);
|
||||
omMakeGroupEx(lbl_2_bss_1C, 1, 0x1C);
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r30 = omAddObjEx(lbl_2_bss_1C, 0x4B0, 4, 0xA, 0, &fn_2_3B24);
|
||||
temp_r30->unk_4C = i;
|
||||
}
|
||||
lbl_2_bss_12C = 60.0f;
|
||||
lbl_2_bss_128 = 50.0f;
|
||||
lbl_2_bss_124 = 25000.0f;
|
||||
Hu3DShadowCreate(30.0f, 30.0f, 20.0f);
|
||||
Hu3DShadowTPLvlSet(0.35f);
|
||||
lbl_2_data_30.y = (f32) (1500.0f + lbl_2_bss_60.y);
|
||||
lbl_2_data_30.z = (f32) (500.0f + lbl_2_bss_60.z);
|
||||
lbl_2_data_48.y = (f32) lbl_2_bss_60.y;
|
||||
lbl_2_data_48.z = (f32) (500.0f + lbl_2_bss_60.z);
|
||||
Hu3DShadowPosSet(&lbl_2_data_30, &lbl_2_data_3C, &lbl_2_data_48);
|
||||
lbl_2_bss_10C = omAddObjEx(lbl_2_bss_1C, 0x1F4, 0xC, 3, -1, &fn_2_2FA4);
|
||||
lbl_2_bss_108 = omAddObjEx(lbl_2_bss_1C, 0x44C, 1, 1, -1, &fn_2_7CB4);
|
||||
lbl_2_bss_100.unk_00 = omAddObjEx(lbl_2_bss_1C, 0x456, 1, 1, -1, &fn_2_8E74);
|
||||
lbl_2_bss_100.unk_04 = omAddObjEx(lbl_2_bss_1C, 0x456, 1, 1, -1, &fn_2_8E74);
|
||||
lbl_2_bss_FC = omAddObjEx(lbl_2_bss_1C, 0x460, 1, 2, -1, &fn_2_95E4);
|
||||
lbl_2_bss_C8 = omAddObjEx(lbl_2_bss_1C, 0x64, 0, 0, -1, &fn_2_D088);
|
||||
lbl_2_bss_E0 = omAddObjEx(lbl_2_bss_1C, 0x5DC, 0, 0, -1, &fn_2_C1C);
|
||||
fn_2_DBCC(0x5A);
|
||||
lbl_2_bss_F8 = omAddObjEx(lbl_2_bss_1C, 0x1F4, 9, 0, -1, &fn_2_C6DC);
|
||||
fn_2_9D00(lbl_2_bss_1C);
|
||||
fn_2_1041C();
|
||||
fn_2_1079C();
|
||||
lbl_2_bss_F4 = fn_2_14640(lbl_2_bss_1C);
|
||||
lbl_2_bss_50 = 0.0f;
|
||||
lbl_2_bss_54.unk_00 = temp_r29->unk_14;
|
||||
Hu3DReflectNoSet(0);
|
||||
lbl_2_bss_120 = 0;
|
||||
lbl_2_bss_BE = 0;
|
||||
lbl_2_bss_BA = 0;
|
||||
Hu3DFogSet(3000.0f, 10000.0f, 0xAU, 0x3CU, 0xA0U);
|
||||
Hu3DBGColorSet(0xAU, 0x3CU, 0xA0U);
|
||||
lbl_2_bss_88 = 3000.0f;
|
||||
lbl_2_bss_84 = 142000.0f;
|
||||
lbl_2_bss_11C = HuAudFXPlay(0x50A);
|
||||
}
|
||||
|
||||
void fn_2_70C(unkStructBSS114* arg0) {
|
||||
s16 var_r29;
|
||||
unkSubstructBSS114* temp_r30_2;
|
||||
s32 i;
|
||||
|
||||
switch (lbl_2_bss_120) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
if (lbl_2_bss_BE == 1) {
|
||||
lbl_2_bss_120 = 2;
|
||||
lbl_2_bss_C0 = MGSeqCreate(3, 1);
|
||||
HuAudSeqFadeOut(lbl_2_bss_A4, 0x64);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (lbl_2_bss_114 == NULL) {
|
||||
lbl_2_bss_114 = omAddObjEx(HuPrcCurrentGet(), 0x3E8, 0, 0, -1, &fn_2_C130);
|
||||
*lbl_2_bss_114->model = 0;
|
||||
var_r29 = 0;
|
||||
lbl_2_bss_BA = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r30_2 = lbl_2_bss_118[i]->unk_5C;
|
||||
lbl_2_bss_118[i]->unk_14 = &fn_2_48A0;
|
||||
temp_r30_2->unk_00[0] = 5;
|
||||
temp_r30_2->unk_68[0][0] = 0;
|
||||
if (temp_r30_2->unk_68[1][2] > var_r29) {
|
||||
var_r29 = temp_r30_2->unk_68[1][2];
|
||||
}
|
||||
lbl_2_bss_B2[i] = -1;
|
||||
lbl_2_bss_AA[i] = -1;
|
||||
}
|
||||
if ((s16) var_r29 > 0) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r30_2 = lbl_2_bss_118[i]->unk_5C;
|
||||
if (temp_r30_2->unk_68[1][2] == var_r29) {
|
||||
lbl_2_bss_AA[lbl_2_bss_BA] = lbl_8018FC10[i].unk_00;
|
||||
lbl_2_bss_B2[lbl_2_bss_BA++] = i;
|
||||
temp_r30_2->unk_68[0][0] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
OSReport(lbl_2_data_6F, lbl_2_bss_BA);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (lbl_801D3CC2 != 0) {
|
||||
WipeCreate(2, 0, 0x3C);
|
||||
HuAudSeqFadeOut(lbl_2_bss_A4, 0x64);
|
||||
HuAudFXStop(lbl_2_bss_11C);
|
||||
arg0->unk_14 = &fn_2_A10;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_2_A10(void) {
|
||||
s32 i;
|
||||
|
||||
if (WipeStatGet() == 0) {
|
||||
fn_2_10710();
|
||||
for (i = 0; i < 4; i++) {
|
||||
fn_8004D6F4(lbl_2_data_4[lbl_8018FC10[i].unk_00]);
|
||||
}
|
||||
|
||||
HuAudFXListnerKill();
|
||||
omOvlReturnEx(1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void M401SetFogAndBG(void) {
|
||||
Hu3DFogSet(174.0f, 271.0f, 0xA, 0x3C, 0xA0);
|
||||
Hu3DBGColorSet(0xAU, 0x3CU, 0xA0U);
|
||||
}
|
||||
|
||||
void M401SetSpriteDisp(s16 arg0) {
|
||||
s32 j;
|
||||
s32 i;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
|
||||
temp_r31 = lbl_2_bss_E0->unk_5C;
|
||||
if (arg0 != 0) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
espDispOn(temp_r31->unk_00[i]);
|
||||
espDispOn(temp_r31->unk_80[i]);
|
||||
espDispOn(temp_r31->unk_88[i]);
|
||||
for (j = 0; j < 2; j++) {
|
||||
espDispOn(temp_r31->unk_08[i][j]);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
espDispOff(temp_r31->unk_00[i]);
|
||||
espDispOff(temp_r31->unk_80[i]);
|
||||
espDispOff(temp_r31->unk_88[i]);
|
||||
for (j = 0; j < 2; j++) {
|
||||
espDispOff(temp_r31->unk_08[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void fn_2_C1C(unkStructBSS114* arg0) {
|
||||
s16 temp_r0;
|
||||
s32 temp_r0_2;
|
||||
s32 temp_r0_3;
|
||||
s32 temp_r0_4;
|
||||
s32 j;
|
||||
s32 i;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
|
||||
arg0->unk_5C = HuMemDirectMallocNum(0, 0x148, 0x10000000U);
|
||||
temp_r31 = arg0->unk_5C;
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r31->unk_00[i] = espEntry(lbl_2_data_80[lbl_8018FC10[i].unk_00], 2, 0);
|
||||
espDispOff(temp_r31->unk_00[i]);
|
||||
espDrawNoSet(temp_r31->unk_00[i], 0);
|
||||
espPosSet(temp_r31->unk_00[i], (f32) ((i & 1) * 0x1B6 + 0x25), ((i>1)*0x166)+0x3B);
|
||||
temp_r31->unk_80[i] = espEntry(0x20002F, 3, 0);
|
||||
espDispOff(temp_r31->unk_80[i]);
|
||||
espDrawNoSet(temp_r31->unk_80[i], 0);
|
||||
espPosSet(temp_r31->unk_80[i], (f32) (((i & 1) * 0x1B6) + 0x49), (((i>1) * 0x166) + 0x3D));
|
||||
temp_r31->unk_88[i] = espEntry(0x200030, 4, 0);
|
||||
espDispOff(temp_r31->unk_88[i]);
|
||||
espDrawNoSet(temp_r31->unk_88[i], 0);
|
||||
espPosSet(temp_r31->unk_88[i], (f32) (((i & 1) * 0x1B6) + 0x49), (((i>1) * 0x166) + 0x3D));
|
||||
espColorSet(temp_r31->unk_88[i], 0, 0, 0);
|
||||
espTPLvlSet(temp_r31->unk_88[i], 0.5f);
|
||||
for (j = 0; j < 2; j++) {
|
||||
temp_r31->unk_08[i][j] = espEntry(0x20002E, 1, 0);
|
||||
espDispOff(temp_r31->unk_08[i][j]);
|
||||
espDrawNoSet(temp_r31->unk_08[i][j], 0);
|
||||
espPosSet(temp_r31->unk_08[i][j], 0x45 + ((i & 1) * 0x1B6) + (j * 0x14), ((i>1) * 0x166) + 0x3F);
|
||||
espAttrSet(temp_r31->unk_08[i][j], 1);
|
||||
}
|
||||
for (j = 0; j < 3; j++) {
|
||||
temp_r31->unk_50[i][j] = espEntry(0x20002D, 0, 0);
|
||||
espDispOff(temp_r31->unk_50[i][j]);
|
||||
espDrawNoSet(temp_r31->unk_50[i][j], 0);
|
||||
espAttrSet(temp_r31->unk_50[i][j], 1);
|
||||
temp_r31->unk_68[i][j] = espEntry(0x20002D, 0, 0);
|
||||
espDispOff(temp_r31->unk_68[i][j]);
|
||||
espDrawNoSet(temp_r31->unk_68[i][j], 0);
|
||||
espAttrSet(temp_r31->unk_68[i][j], 1);
|
||||
}
|
||||
espBankSet(temp_r31->unk_50[i][0], 0xA);
|
||||
espBankSet(temp_r31->unk_68[i][0], 0xB);
|
||||
temp_r31->unk_90[i] = 1.0f;
|
||||
temp_r31->unk_A0[i] = 1.0f;
|
||||
temp_r31->unk_130[i] = 0;
|
||||
temp_r31->unk_138[i] = 0;
|
||||
}
|
||||
arg0->unk_14 = &fn_2_11D0;
|
||||
}
|
||||
|
||||
void fn_2_11D0(unkStructBSS114* arg0) {
|
||||
unkStructBSS114* sp1C;
|
||||
Vec3f sp18;
|
||||
Vec3f spC;
|
||||
unkSubstructBSS114* sp8;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
s32 i;
|
||||
s32 j;
|
||||
unkStructBSS114* temp_r28;
|
||||
s16 temp;
|
||||
|
||||
temp_r31 = arg0->unk_5C;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
sp8 = lbl_2_bss_118[i]->unk_5C;
|
||||
if (temp_r31->unk_130[i] != 0) {
|
||||
temp_r28 = lbl_2_bss_118[i];
|
||||
sp18.x = temp_r28->unk_18.x;
|
||||
sp18.y = temp_r28->unk_18.y;
|
||||
sp18.z = temp_r28->unk_18.z;
|
||||
fn_2_10240(&sp18, &spC);
|
||||
|
||||
for (j = 0; j < 3; j++) {
|
||||
espPosSet(temp_r31->unk_50[i][j], -20.0f + spC.x + temp_r31->unk_F0[i] + (f32) (j * 0x10), 20.0f + spC.y + temp_r31->unk_100[i]);
|
||||
espTPLvlSet(temp_r31->unk_50[i][j], temp_r31->unk_90[i]);
|
||||
}
|
||||
|
||||
temp_r31->unk_C0[i] -= 0.5f;
|
||||
temp_r31->unk_100[i] -= 1.0f;
|
||||
if (temp_r31->unk_130[i] < 15) {
|
||||
temp_r31->unk_90[i] -= 2.0f / 30.0f;
|
||||
}
|
||||
|
||||
if (--temp_r31->unk_130[i] == 0) {
|
||||
espDispOff(temp_r31->unk_50[i][0]);
|
||||
espDispOff(temp_r31->unk_50[i][1]);
|
||||
}
|
||||
}
|
||||
if (temp_r31->unk_138[i] != 0) {
|
||||
temp_r28 = lbl_2_bss_118[i];
|
||||
sp18.x = temp_r28->unk_18.x;
|
||||
sp18.y = temp_r28->unk_18.y;
|
||||
sp18.z = temp_r28->unk_18.z;
|
||||
fn_2_10240(&sp18, &spC);
|
||||
|
||||
for (j = 0; j < 2; j++) {
|
||||
espPosSet(temp_r31->unk_68[i][j], -20.0f + spC.x + temp_r31->unk_110[i] + (f32) (j * 0x10), -20.0f + spC.y + temp_r31->unk_120[i]);
|
||||
espTPLvlSet(temp_r31->unk_68[i][j], temp_r31->unk_A0[i]);
|
||||
}
|
||||
|
||||
temp_r31->unk_E0[i] += 0.5f;
|
||||
temp_r31->unk_120[i] += 1.0f;
|
||||
if (temp_r31->unk_138[i] < 0xF) {
|
||||
temp_r31->unk_A0[i] -= 2.0f / 30.0f;
|
||||
}
|
||||
|
||||
if (--temp_r31->unk_138[i] == 0) {
|
||||
espDispOff(temp_r31->unk_68[i][0]);
|
||||
espDispOff(temp_r31->unk_68[i][1]);
|
||||
}
|
||||
}
|
||||
fn_2_15C4(i);
|
||||
}
|
||||
}
|
||||
|
||||
void fn_2_15C4(s16 arg0) {
|
||||
s32 temp_r30;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
unkSubstructBSS114* temp_r29;
|
||||
|
||||
temp_r31 = lbl_2_bss_E0->unk_5C;
|
||||
temp_r29 = lbl_2_bss_118[arg0]->unk_5C;
|
||||
temp_r30 = temp_r29->unk_68[1][2];
|
||||
espBankSet(temp_r31->unk_08[arg0][0], temp_r30 / 10);
|
||||
espBankSet(temp_r31->unk_08[arg0][1], temp_r30 % 10);
|
||||
}
|
||||
|
||||
void fn_2_169C(s16 arg0) {
|
||||
s32 i;
|
||||
unkSubstructBSS114* temp_r28;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
|
||||
temp_r31 = lbl_2_bss_E0->unk_5C;
|
||||
temp_r28 = lbl_2_bss_118[arg0]->unk_5C;
|
||||
for (i = 0; i < 2; i++) {
|
||||
espDispOn(temp_r31->unk_50[arg0][i]);
|
||||
}
|
||||
temp_r31->unk_90[arg0] = 1.0f;
|
||||
temp_r31->unk_C0[arg0] = ((arg0 > 1) * 0x18E) + 0x34;
|
||||
temp_r31->unk_B0[arg0] = ((arg0 & 1) * 0x1BA) + 0x29;
|
||||
temp_r31->unk_100[arg0] = 0.0f;
|
||||
temp_r31->unk_F0[arg0] = 0.0f;
|
||||
espBankSet(temp_r31->unk_50[arg0][1], temp_r28->unk_68[2][0]);
|
||||
temp_r31->unk_130[arg0] = 0x2D;
|
||||
}
|
||||
|
||||
void fn_2_1858(s16 arg0, s16 arg1) {
|
||||
s16 temp_r4;
|
||||
s32 temp_r0;
|
||||
s32 var_r28;
|
||||
unkSubstructBSS114* temp_r29;
|
||||
unkSubstructBSS114* temp_r31;
|
||||
|
||||
temp_r31 = lbl_2_bss_E0->unk_5C;
|
||||
temp_r29 = lbl_2_bss_118[arg0]->unk_5C;
|
||||
for (var_r28 = 0; var_r28 < 2; var_r28++) {
|
||||
espDispOn(temp_r31->unk_68[arg0][var_r28]);
|
||||
}
|
||||
temp_r31->unk_A0[arg0] = 1.0f;
|
||||
temp_r31->unk_E0[arg0] = ((arg0 > 1) * 0x18E) + 0x14;
|
||||
temp_r31->unk_D0[arg0] = ((arg0 & 1) * 0x1BA) + 0x29;
|
||||
temp_r31->unk_120[arg0] = 0.0f;
|
||||
temp_r31->unk_110[arg0] = 0.0f;
|
||||
espBankSet(temp_r31->unk_68[arg0][1], arg1);
|
||||
temp_r31->unk_138[arg0] = 0x2D;
|
||||
temp_r31->unk_140[arg0] = arg1;
|
||||
temp_r29->unk_68[1][2] -= arg1;
|
||||
if (temp_r29->unk_68[1][2] < 0) {
|
||||
temp_r29->unk_68[1][2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// void fn_2_1A38(unkStructBSS114* arg0) {
|
||||
// Vec3f sp20;
|
||||
// Vec3f sp14;
|
||||
// Vec3f sp8;
|
||||
// unkStructBSS114 *temp;
|
||||
// unkStructBSS114 *temp2;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124);
|
||||
// temp->unk_04 = 2;
|
||||
|
||||
// sp20.x = -2500.0f;
|
||||
// sp20.y = 150.0f;
|
||||
// sp20.z = -6800.0f;
|
||||
// sp14.x = 50.0f;
|
||||
// sp14.y = 50.0f;
|
||||
// sp14.z = 50.0f;
|
||||
// sp8.x = 1500.0f;
|
||||
// sp8.y = 150.0f;
|
||||
// sp8.z = -4800.0f;
|
||||
// temp2 = fn_2_FC40(0x12, &sp20, &sp14, &sp8);
|
||||
// fn_2_E6BC(temp2->unk_4C, 5.0f, 1.5f, 0.2f, 0.8f, 3.0f);
|
||||
// }
|
||||
|
||||
// void fn_2_1B80(unkStructBSS114* arg0) {
|
||||
// Vec3f sp14;
|
||||
// Vec3f sp8;
|
||||
// unkStructBSS114* temp;
|
||||
// unkStructBSS114* temp2;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[1]);
|
||||
// temp->unk_04 = 2;
|
||||
// sp14.x = -1000.0f;
|
||||
// sp14.y = 0.0f;
|
||||
// sp14.z = -9100.0f;
|
||||
// sp8.x = 150.0f;
|
||||
// sp8.y = 100.0f;
|
||||
// sp8.z = 100.0f;
|
||||
// temp2 = fn_2_FC40(0xE, &sp14, &sp8, &sp14);
|
||||
// omSetRot(temp2, 3.0f, 0.0f, 0.0f);
|
||||
// fn_8002FB30(temp2, 0.0f, 0.0f, 50.0f);
|
||||
// fn_2_E6BC(temp2->unk_4C, 4.5f, 2.5f, 0.08f, 0.9f, 1.0f);
|
||||
// }
|
||||
|
||||
// void fn_2_1CF0(unkStructBSS114* arg0) {
|
||||
// Vec3f sp20;
|
||||
// Vec3f sp14;
|
||||
// Vec3f sp8;
|
||||
// unkStructBSS114 *temp;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[2]);
|
||||
// temp->unk_04 = 2;
|
||||
// sp20.x = 500.0f;
|
||||
// sp20.y = 0.0f;
|
||||
// sp20.z = -24300.0f;
|
||||
// sp14.x = 200.0f;
|
||||
// sp14.y = 100.0f;
|
||||
// sp14.z = 100.0f;
|
||||
// sp8.x = 1000.0f;
|
||||
// sp8.y = 0.0f;
|
||||
// sp8.z = -16300.0f;
|
||||
// fn_2_FC40(0x28, &sp20, &sp14, &sp8);
|
||||
// }
|
||||
|
||||
// void fn_2_1DE8(unkStructBSS114* arg0) {
|
||||
// Vec3f sp2C;
|
||||
// Vec3f sp20;
|
||||
// Vec3f sp14;
|
||||
// Vec3f sp8;
|
||||
// unkStructBSS114 *temp2;
|
||||
// unkStructBSS114 *temp;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[3]);
|
||||
// temp->unk_04 = 2;
|
||||
// sp2C.x = 0.0f;
|
||||
// sp2C.y = -150.0f + 0.003921569f * (300.0f * frand());
|
||||
// sp2C.z = -23000.0f;
|
||||
// fn_2_91AC(lbl_2_bss_100.unk_00, &sp2C);
|
||||
// sp2C.x = 0.0f;
|
||||
// sp2C.y = -150.0f + 0.003921569f * (300.0f * frand());
|
||||
// sp2C.z = -25000.0f;
|
||||
// fn_2_91AC(lbl_2_bss_100.unk_04, &sp2C);
|
||||
// sp2C.x = 5500.0f;
|
||||
// sp2C.y = 0.0f;
|
||||
// sp2C.z = -29800.0f;
|
||||
// sp20.x = 100.0f;
|
||||
// sp20.y = 100.0f;
|
||||
// sp20.z = 100.0f;
|
||||
// sp14.x = -1500.0f;
|
||||
// sp14.y = 0.0f;
|
||||
// sp14.z = -24900.0f;
|
||||
// temp2 = fn_2_FC40(0x14, &sp2C, &sp20, &sp14);
|
||||
// fn_2_E6BC(temp2->unk_4C, 6.0f, 1.5f, 0.2f, 0.8f, 3.5f);
|
||||
// sp8.x = -650.0f;
|
||||
// sp8.y = -360.0f;
|
||||
// sp8.z = -26300.0f;
|
||||
// lbl_2_bss_D0 = fn_2_10A88(&sp8, 3);
|
||||
// lbl_2_bss_90[0] = HuAudFXEmiterPlay(0x50B, &sp8);
|
||||
// }
|
||||
|
||||
// void fn_2_20B0(omObjData* arg0) {
|
||||
// Vec3f sp8;
|
||||
// omObjData* temp;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->model[0], lbl_2_data_124[4]);
|
||||
// temp->unk_04 = 2;
|
||||
// Hu3DModelAttrReset(arg0->unk_40->unk_08[1][0], 1);
|
||||
// sp8.x = 0.0f;
|
||||
// sp8.y = -370.0f;
|
||||
// sp8.z = -43000.0f;
|
||||
// lbl_2_bss_8 = fn_2_10A88(&sp8, 3);
|
||||
// lbl_2_bss_90[1] = HuAudFXEmiterPlay(0x50B, &sp8);
|
||||
// sp8.x = 380.0f;
|
||||
// sp8.y = -440.0f;
|
||||
// sp8.z = -32000.0f;
|
||||
// lbl_2_bss_CC = fn_2_10A88(&sp8, 3);
|
||||
// lbl_2_bss_90[2] = HuAudFXEmiterPlay(0x50B, &sp8);
|
||||
// Hu3DModelAttrReset(arg0->unk_40->unk_00[2], 1);
|
||||
// Hu3DModelAttrSet(arg0->unk_40->unk_00[2], -0x3FFFFFFF);
|
||||
// }
|
||||
|
||||
// void fn_2_21F8(omObjData* arg0) {
|
||||
// Vec3f sp2C;
|
||||
// Vec3f sp20;
|
||||
// Vec3f sp14;
|
||||
// Vec3f sp8;
|
||||
// s32 i;
|
||||
// s32 var_r30_2;
|
||||
// unkStructBSS114* temp;
|
||||
|
||||
// temp = Hu3DModelObjPtrGet(arg0->model[0], *lbl_2_data_124);
|
||||
// temp->unk_04 = 2;
|
||||
|
||||
// Hu3DModelAttrReset(arg0->model[0], 1);
|
||||
// Hu3DModelAttrReset(arg0->model[1], 1);
|
||||
// Hu3DModelAttrSet(arg0->model[0], 0x40000001);
|
||||
// Hu3DModelAttrSet(arg0->model[1], 0x40000001);
|
||||
// Hu3DModelAttrReset(arg0->model[3], 1);
|
||||
// lbl_2_bss_44.x = 0.0f;
|
||||
// lbl_2_bss_44.y = 100.0f;
|
||||
// lbl_2_bss_44.z = 0.0f;
|
||||
// lbl_2_bss_38.x = 0.0f;
|
||||
// lbl_2_bss_38.y = 1000.0f;
|
||||
// lbl_2_bss_38.z = -1500.0f;
|
||||
// lbl_2_bss_2C.x = 0.0f;
|
||||
// lbl_2_bss_2C.y = 1.0f;
|
||||
// lbl_2_bss_2C.z = 0.0f;
|
||||
// Hu3DCameraPosSetV(1, &lbl_2_bss_44, &lbl_2_bss_2C, &lbl_2_bss_38);
|
||||
// Hu3DCameraPerspectiveSet(1, lbl_2_bss_12C, lbl_2_bss_128, lbl_2_bss_124, 1.2f);
|
||||
// lbl_2_bss_54.unk_00 = lbl_2_bss_44;
|
||||
// fn_2_D088(NULL);
|
||||
// sp20 = lbl_2_bss_44;
|
||||
// PSVECSubtract(&lbl_2_bss_38, &lbl_2_bss_44, &sp2C);
|
||||
// PSVECNormalize(&sp2C, &sp2C);
|
||||
// fn_80032D3C(&sp20, &sp2C, lbl_2_bss_88, lbl_2_bss_84, 0x12C, 0x12C, 0x12C);
|
||||
// sp14.x = 300.0f;
|
||||
// sp14.y = -450.0f;
|
||||
// sp14.z = -3100.0f;
|
||||
// lbl_2_bss_D8 = fn_2_10A88(&sp14, 3);
|
||||
// lbl_2_bss_90[0] = HuAudFXEmiterPlay(0x50B, &sp14);
|
||||
// sp14.x = -300.0f;
|
||||
// sp14.y = -340.0f;
|
||||
// sp14.z = -4720.0f;
|
||||
// lbl_2_bss_D4 = fn_2_10A88(&sp14, 3);
|
||||
// lbl_2_bss_90[1] = HuAudFXEmiterPlay(0x50B, &sp14);
|
||||
// Hu3DModelAttrReset(arg0->model[2], 1);
|
||||
// Hu3DModelAttrSet(arg0->model[2], -0x3FFFFFFF);
|
||||
|
||||
// var_r30_2 = 4;
|
||||
// for (i = 0; i < var_r30_2; i++) {
|
||||
// sp8.x = -340.0f + (0.003921569f * (680.0f * frand()));
|
||||
// sp8.y = -250.0f + (0.003921569f * (500.0f * frand()));
|
||||
// sp8.z = ((-1550.0f - (f32) (i * 0x104)) - 40.0f) + (0.003921569f * (80.0f * frand()));
|
||||
// fn_2_10A88(&sp8, 0);
|
||||
// }
|
||||
// }
|
||||
|
||||
void fn_2_33B4(omObjData* arg0) {
|
||||
fn_800210CC(arg0->model[3], 110.0f, 5.0 * fn_800EB910(M_PI * (f64) lbl_2_bss_10 / 180.0), -1500.0);
|
||||
lbl_2_bss_10 += 2.0f;
|
||||
if (lbl_2_bss_10 >= 360.0f) {
|
||||
lbl_2_bss_10 -= 360.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_2_14738(omObjData* arg0) {
|
||||
omSetTra(arg0, lbl_2_bss_6C.x, lbl_2_bss_6C.y, lbl_2_bss_6C.z);
|
||||
if (arg0->work[0] == 1U) {
|
||||
Hu3DModelAttrSet(*arg0->model, 1);
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
}
|
||||
}
|
||||
197
src/REL/m401Dll/m401Dll.h
Normal file
197
src/REL/m401Dll/m401Dll.h
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
#include "common.h"
|
||||
#include "REL/executor.h"
|
||||
#include <dolphin/mtx.h>
|
||||
|
||||
// global data //
|
||||
typedef struct unkStruct18FC10 {
|
||||
s16 unk_00;
|
||||
char unk_02[8];
|
||||
} unkStruct18FC10;
|
||||
typedef struct unkSubstructBSS114 {
|
||||
s16 unk_00[4];
|
||||
s16 unk_08[4][3];
|
||||
char unk_20[0x30];
|
||||
s16 unk_50[4][3];
|
||||
s16 unk_68[4][3];
|
||||
s16 unk_80[4];
|
||||
s16 unk_88[4];
|
||||
f32 unk_90[4];
|
||||
f32 unk_A0[4];
|
||||
char unk_B0[0x10];
|
||||
f32 unk_C0[4];
|
||||
f32 unk_D0[4];
|
||||
f32 unk_E0[4];
|
||||
f32 unk_F0[4];
|
||||
f32 unk_100[4];
|
||||
f32 unk_110[4];
|
||||
f32 unk_120[4];
|
||||
s16 unk_130[4];
|
||||
s16 unk_138[4];
|
||||
s16 unk_140[4];
|
||||
} unkSubstructBSS114;
|
||||
typedef struct unkStructBSS114 {
|
||||
char unk_00[4];
|
||||
s32 unk_04;
|
||||
char unk_08[0xC];
|
||||
void *unk_14;
|
||||
Vec3f unk_18;
|
||||
char unk_24[0x1C];
|
||||
unkSubstructBSS114 *unk_40;
|
||||
char unk_44[0x8];
|
||||
s32 unk_4C;
|
||||
u32 unk_50;
|
||||
char unk_54[0x8];
|
||||
unkSubstructBSS114 *unk_5C;
|
||||
} unkStructBSS114;
|
||||
typedef struct unkStruct18BFC0 {
|
||||
char unk_00[0x14];
|
||||
Vec3f unk_14;
|
||||
} unkStruct18BFC0;
|
||||
typedef struct unkStruct18C8FC {
|
||||
s16 unk_00;
|
||||
char unk_02[0x42];
|
||||
} unkStruct18C8FC;
|
||||
|
||||
extern unkStruct18FC10 lbl_8018FC10[];
|
||||
extern unkStruct18BFC0 lbl_8018BFC0;
|
||||
extern unkStruct18C8FC lbl_8018C8FC[];
|
||||
extern s16 lbl_801D3CC2;
|
||||
|
||||
extern void Hu3DModelAttrSet(s16, s32);
|
||||
extern void Hu3DModelAttrReset(s16, s32);
|
||||
extern omObjData* Hu3DModelObjPtrGet(s16, s32);
|
||||
extern void Hu3DCameraPosSetV(s32, Vec3f*, Vec3f*, Vec3f*);
|
||||
extern s16 Hu3DGLightCreateV(Vec3f*, Vec3f*, s32*);
|
||||
extern void Hu3DGLightInfinitytSet(s16);
|
||||
extern void Hu3DReflectNoSet(s16);
|
||||
extern void Hu3DShadowCreate(f32, f32, f32);
|
||||
extern void Hu3DShadowPosSet(Vec3f*, Vec3f*, Vec3f*);
|
||||
extern void Hu3DShadowTPLvlSet(f32);
|
||||
extern void Hu3DFogSet(f32, f32, u8, u8, u8);
|
||||
extern void omOvlReturnEx(s16, s16);
|
||||
extern omObjData* omAddObjEx(void*, s16, s16, s16, s16, void*);
|
||||
extern void omDelObjEx(s32*, omObjData*);
|
||||
extern void omMakeGroupEx(omObjData*, s16, s16);
|
||||
extern omObjData* omGetGroupMemberListEx(omObjData*, s16);
|
||||
extern void omSetTra(omObjData*, f32, f32, f32);
|
||||
extern void omSetRot(omObjData*, f32, f32, f32);
|
||||
extern void omSetSca(omObjData*, f32, f32, f32);
|
||||
extern u8 frand(void);
|
||||
extern s32 HuAudFXPlay(s32);
|
||||
extern void HuAudFXStop(s32);
|
||||
extern s32 HuAudFXEmiterPlay(s32, Vec3f*);
|
||||
extern void HuAudFXListnerKill(void);
|
||||
extern void HuAudSeqFadeOut(s32, s32);
|
||||
extern s16 MGSeqCreate(s32, ...);
|
||||
extern s16 espEntry(s32, s16, s16);
|
||||
extern void espDispOn(s16);
|
||||
extern void espDispOff(s16);
|
||||
extern void espAttrSet(s16, s16);
|
||||
extern void espPosSet(s16, f32, f32);
|
||||
extern void espTPLvlSet(s16, f32);
|
||||
extern void espColorSet(s16, s8, s8, s8);
|
||||
extern void espBankSet(s16, s16);
|
||||
extern void espDrawNoSet(s16, s16);
|
||||
extern void WipeCreate(s16, s16, s16);
|
||||
extern u8 WipeStatGet(void);
|
||||
extern void omGameSysInit(omObjData*);
|
||||
extern f32 PSVECNormalize(Vec3f*, Vec3f*);
|
||||
|
||||
// local data //
|
||||
typedef struct unkStructBSS54 {
|
||||
Vec3f unk_00;
|
||||
} unkStructBSS54;
|
||||
typedef struct unkStructBSS100 {
|
||||
void *unk_00;
|
||||
void *unk_04;
|
||||
} unkStructBSS100;
|
||||
|
||||
extern f32 lbl_2_data_0 = -7.1875f;
|
||||
extern s16 lbl_2_data_4[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
|
||||
extern Vec3f lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f };
|
||||
extern Vec3f lbl_2_data_20 = { 0.0f, -1.0f, 0.0f };
|
||||
extern s32 lbl_2_data_2C = -1;
|
||||
extern Vec3f lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f };
|
||||
extern Vec3f lbl_2_data_3C = { 0.0f, 1.0f, -1.0f };
|
||||
extern Vec3f lbl_2_data_48 = { 0.0f, 0.0f, 0.0f };
|
||||
extern char lbl_2_data_6F[] = "winnercnt:%d";
|
||||
extern s32 lbl_2_data_80[8] = { 0x610000, 0x610001, 0x610002, 0x610003, 0x610004, 0x610005, 0x610006, 0x610007 };
|
||||
extern s32 lbl_2_data_124[5];
|
||||
|
||||
extern s32 lbl_2_bss_8;
|
||||
extern f32 lbl_2_bss_10;
|
||||
extern unkStruct18FC10* lbl_2_bss_1C;
|
||||
extern Vec3f lbl_2_bss_2C;
|
||||
extern Vec3f lbl_2_bss_38;
|
||||
extern Vec3f lbl_2_bss_44;
|
||||
extern f32 lbl_2_bss_50;
|
||||
extern unkStructBSS54 lbl_2_bss_54;
|
||||
extern Vec3f lbl_2_bss_60;
|
||||
extern Vec3f lbl_2_bss_6C;
|
||||
extern f32 lbl_2_bss_84;
|
||||
extern f32 lbl_2_bss_88;
|
||||
extern s32 lbl_2_bss_90[4];
|
||||
extern s32 lbl_2_bss_A4;
|
||||
extern s16 lbl_2_bss_A8;
|
||||
extern s16 lbl_2_bss_AA[];
|
||||
extern s16 lbl_2_bss_B2[];
|
||||
extern s16 lbl_2_bss_BA;
|
||||
extern s16 lbl_2_bss_BE;
|
||||
extern s16 lbl_2_bss_C0;
|
||||
extern void* lbl_2_bss_C8;
|
||||
extern s32 lbl_2_bss_CC;
|
||||
extern s32 lbl_2_bss_D0;
|
||||
extern s32 lbl_2_bss_D4;
|
||||
extern s32 lbl_2_bss_D8;
|
||||
extern unkStructBSS114* lbl_2_bss_E0;
|
||||
extern s32 lbl_2_bss_F4;
|
||||
extern omObjData* lbl_2_bss_F8;
|
||||
extern omObjData* lbl_2_bss_FC;
|
||||
extern unkStructBSS100 lbl_2_bss_100;
|
||||
extern omObjData* lbl_2_bss_108;
|
||||
extern omObjData* lbl_2_bss_10C;
|
||||
extern omObjData* lbl_2_bss_110;
|
||||
extern omObjData* lbl_2_bss_114;
|
||||
extern unkStructBSS114** lbl_2_bss_118;
|
||||
extern s32 lbl_2_bss_11C;
|
||||
extern s16 lbl_2_bss_120;
|
||||
extern f32 lbl_2_bss_124;
|
||||
extern f32 lbl_2_bss_128;
|
||||
extern f32 lbl_2_bss_12C;
|
||||
|
||||
void M401ObjectSetup(void);
|
||||
void fn_2_70C(unkStructBSS114*);
|
||||
void fn_2_A10(void);
|
||||
void M401SetFogAndBG(void);
|
||||
void M401SetSpriteDisp(s16);
|
||||
void fn_2_C1C(unkStructBSS114*);
|
||||
void fn_2_11D0(unkStructBSS114*);
|
||||
void fn_2_15C4(s16);
|
||||
void fn_2_169C(s16);
|
||||
void fn_2_1858(s16, s16);
|
||||
void fn_2_1A38(unkStructBSS114*);
|
||||
void fn_2_1B80(unkStructBSS114*);
|
||||
void fn_2_1CF0(unkStructBSS114*);
|
||||
void fn_2_1DE8(unkStructBSS114*);
|
||||
void fn_2_20B0(unkStructBSS114*);
|
||||
void fn_2_2FA4(void*);
|
||||
void fn_2_3B24(void*);
|
||||
void fn_2_48A0(void*);
|
||||
void fn_2_7CB4(void*);
|
||||
void fn_2_8E74(void*);
|
||||
void fn_2_95E4(void*);
|
||||
void fn_2_91AC(void*, Vec3f*);
|
||||
void fn_2_9D00(void*);
|
||||
void fn_2_BD90(void*);
|
||||
void fn_2_C6DC(void*);
|
||||
void fn_2_C130(void);
|
||||
void fn_2_D088(void*);
|
||||
void fn_2_DBCC(s16);
|
||||
void fn_2_E6BC(s32, f32, f32, f32, f32, f32);
|
||||
unkStructBSS114* fn_2_FC40(s32, Vec3f*, Vec3f*, Vec3f*);
|
||||
void fn_2_10240(Vec3f*, Vec3f*);
|
||||
void fn_2_1041C(void);
|
||||
s32 fn_2_14640(void*);
|
||||
void fn_2_10710(void);
|
||||
s16 fn_2_1079C(void);
|
||||
s32 fn_2_10A88(Vec3f*, s16);
|
||||
133
src/game/hsfman.c
Normal file
133
src/game/hsfman.c
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
#include "common.h"
|
||||
|
||||
typedef struct ThreeDDataStruct {
|
||||
f32 unk_00;
|
||||
f32 unk_04;
|
||||
f32 unk_08;
|
||||
s16 unk_0C;
|
||||
s16 unk_0E;
|
||||
char unk_10[0x12];
|
||||
u16 unk_22;
|
||||
char unk_24[0x2C];
|
||||
s32 unk_50;
|
||||
s32 unk_54;
|
||||
char unk_58[0xC];
|
||||
f32 unk_64;
|
||||
char unk_68[0xC];
|
||||
f32 unk_74;
|
||||
char unk_78[0x1C];
|
||||
f32 unk_94;
|
||||
char unk_98[0x2C];
|
||||
void*unk_C4;
|
||||
char unk_C8[0x4];
|
||||
f32 unk_CC;
|
||||
f32 unk_D0;
|
||||
f32 unk_D4;
|
||||
f32 unk_D8;
|
||||
f32 unk_DC;
|
||||
f32 unk_E0;
|
||||
f32 unk_E4;
|
||||
f32 unk_E8;
|
||||
f32 unk_EC;
|
||||
f32 unk_F0[4];
|
||||
char unk_100[0x24];
|
||||
} ThreeDDataStruct;
|
||||
typedef struct ThreeDCameraStruct {
|
||||
f32 unk_00;
|
||||
char unk_04[0x54];
|
||||
} ThreeDCameraStruct;
|
||||
typedef struct ThreeDProjectionStruct {
|
||||
char unk_00[0x4];
|
||||
s32 unk_04;
|
||||
char unk_08[0x90];
|
||||
} ThreeDProjectionStruct;
|
||||
typedef struct ThreeDShadowStruct {
|
||||
char unk_00[0x4];
|
||||
s32 unk_04;
|
||||
char unk_08[0x90];
|
||||
} ThreeDShadowStruct;
|
||||
|
||||
void Hu3DAnimInit(void);
|
||||
void Hu3DFogClear(void);
|
||||
void Hu3DLighInit(void);
|
||||
void Hu3DMotionInit(void);
|
||||
void Hu3DParManInit(void);
|
||||
char *HuSprAnimRead(char*);
|
||||
s16 Hu3DCameraExistF;
|
||||
ThreeDDataStruct Hu3DData[0x200];
|
||||
ThreeDCameraStruct Hu3DCamera[0x10];
|
||||
s16 Hu3DPauseF;
|
||||
s16 Hu3DProjectionNum;
|
||||
s16 Hu3DShadowCamBit;
|
||||
s32 Hu3DShadowF;
|
||||
s16 NoSyncF;
|
||||
f32 lbl_801D4AB0;
|
||||
s32 modelKillAllF;
|
||||
char refMapData0[0x1240] = {};
|
||||
char refMapData1[0x1100] = {};
|
||||
char refMapData2[0x2080] = {};
|
||||
char refMapData3[0x2080] = {};
|
||||
char refMapData4[0x2080] = {};
|
||||
char toonMapData[0x880] = {};
|
||||
char toonMapData2[0x1080] = {};
|
||||
char hiliteData[0x480] = {};
|
||||
char hiliteData2[0x480] = {};
|
||||
char hiliteData3[0x480] = {};
|
||||
char hiliteData4[0x480] = {};
|
||||
s16 reflectMapNo;
|
||||
char *toonAnim;
|
||||
s16 layerNum[8];
|
||||
s32 layerHook[8];
|
||||
char *reflectAnim[5];
|
||||
char *hiliteAnim[4];
|
||||
ThreeDProjectionStruct Hu3DProjection[4];
|
||||
ThreeDShadowStruct Hu3DShadowData;
|
||||
GXColor BGColor;
|
||||
|
||||
void Hu3DInit(void) {
|
||||
ThreeDDataStruct* data;
|
||||
ThreeDCameraStruct* camera;
|
||||
s16 i;
|
||||
|
||||
data = Hu3DData;
|
||||
for (i = 0; i < 0x200; i++, data++) {
|
||||
data->unk_C4 = NULL;
|
||||
}
|
||||
camera = Hu3DCamera;
|
||||
for (i = 0; i < 0x10; i++, camera++) {
|
||||
camera->unk_00 = lbl_801D4AB0;
|
||||
}
|
||||
Hu3DMotionInit();
|
||||
Hu3DLighInit();
|
||||
BGColor.r = BGColor.g = BGColor.b = 0;
|
||||
BGColor.a = 0xFF;
|
||||
for (i = 0; i < 8; i++) {
|
||||
layerNum[i] = 0;
|
||||
layerHook[i] = 0;
|
||||
}
|
||||
reflectAnim[0] = HuSprAnimRead(refMapData0);
|
||||
reflectAnim[1] = HuSprAnimRead(refMapData1);
|
||||
reflectAnim[2] = HuSprAnimRead(refMapData2);
|
||||
reflectAnim[3] = HuSprAnimRead(refMapData3);
|
||||
reflectAnim[4] = HuSprAnimRead(refMapData4);
|
||||
reflectMapNo = 0;
|
||||
toonAnim = HuSprAnimRead(toonMapData);
|
||||
hiliteAnim[0] = HuSprAnimRead(hiliteData);
|
||||
hiliteAnim[1] = HuSprAnimRead(hiliteData2);
|
||||
hiliteAnim[2] = HuSprAnimRead(hiliteData3);
|
||||
hiliteAnim[3] = HuSprAnimRead(hiliteData4);
|
||||
Hu3DFogClear();
|
||||
Hu3DAnimInit();
|
||||
Hu3DParManInit();
|
||||
for (i = 0; i < 4; i++) {
|
||||
Hu3DProjection[i].unk_04 = 0;
|
||||
}
|
||||
Hu3DShadowCamBit = 0;
|
||||
Hu3DShadowData.unk_04 = 0;
|
||||
Hu3DShadowF = 0;
|
||||
Hu3DProjectionNum = 0;
|
||||
Hu3DCameraExistF = 0;
|
||||
modelKillAllF = 0;
|
||||
Hu3DPauseF = 0;
|
||||
NoSyncF = 0;
|
||||
}
|
||||
|
|
@ -45,7 +45,6 @@ static void LinkProcess(Process** root, Process* process) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void UnlinkProcess(Process **root, Process *process) {
|
||||
if (process->next) {
|
||||
process->next->prev = process->prev;
|
||||
|
|
@ -354,4 +353,4 @@ void HuPrcAllUPause(int flag)
|
|||
process = process->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
6525
tools/hsfman-output.txt
Normal file
6525
tools/hsfman-output.txt
Normal file
File diff suppressed because it is too large
Load diff
355
tools/interpretasm.py
Normal file
355
tools/interpretasm.py
Normal file
|
|
@ -0,0 +1,355 @@
|
|||
import sys
|
||||
import os
|
||||
|
||||
def rc(s:str)->str: return s.replace(',','')
|
||||
|
||||
def join(*args)->str: return " ".join(args)
|
||||
|
||||
addrstore = {}
|
||||
cmpstore = []
|
||||
isObj = ""
|
||||
def interpret_cmd(line: list, addr: int)->str:
|
||||
global addrstore, cmpstore
|
||||
ret = ""
|
||||
|
||||
## Storing
|
||||
if line[0] == "stwu":
|
||||
ret = join("Stack Size +=", line[2][1:-4])
|
||||
elif line[0] == "stb" or line[0] == "sth" or line[0] == "stw" or line[0] == "stfs" or line[0] == "stfd":
|
||||
if "r1" in line[2]: ret = "Stack"
|
||||
else: ret = line[2][(line[2].index("(")+1):-1]
|
||||
|
||||
ret += join(f"[{line[2][:(line[2].index('('))]}]",
|
||||
"=",
|
||||
rc(line[1])
|
||||
)
|
||||
|
||||
if "b" in line[0]: ret += join("", "(s8/u8)")
|
||||
elif "h" in line[0]: ret += join("", "(s16/u16)")
|
||||
elif "w" in line[0]: ret += join("", "(s32/u32)")
|
||||
elif "fs" in line[0]: ret += join("", "(f32)")
|
||||
elif "fd" in line[0]: ret += join("", "(f64)")
|
||||
elif line[0] == "stbx" or line[0] == "sthx" or line[0] == "stwx" or line[0] == "stfsx":
|
||||
if "r1" in line[2]: ret = "Stack"
|
||||
else: ret = rc(line[2])
|
||||
|
||||
ret += join(f"[{line[3]}]",
|
||||
"=",
|
||||
rc(line[1])
|
||||
)
|
||||
|
||||
if "b" in line[0]: ret += join("", "(s8/u8)")
|
||||
elif "h" in line[0]: ret += join("", "(s16/u16)")
|
||||
elif "w" in line[0]: ret += join("", "(s32/u32)")
|
||||
elif "f" in line[0]: ret += join("", "(f32)")
|
||||
elif line[0] == "psq_st":
|
||||
if "r1" in line[2]: ret = "Stack"
|
||||
else: ret = line[2][(line[2].index("(")+1):-1]
|
||||
|
||||
ret += join(f"[{line[2][:(line[2].index('('))]}]",
|
||||
"=",
|
||||
f"rotate({line[1]} {line[4]})",
|
||||
"(128-bit)"
|
||||
)
|
||||
|
||||
## Moving
|
||||
elif line[0] == "mflr":
|
||||
ret = join(line[1], "set to Link Register ")
|
||||
elif line[0] == "mtlr":
|
||||
ret = join("Link Register set to", line[1])
|
||||
elif line[0] == "mtctr":
|
||||
ret = join("Count Register set to", line[1])
|
||||
elif line[0] == "mr" or line[0] == "fmr":
|
||||
ret = join(rc(line[1]), "=", line[2])
|
||||
|
||||
## Loading
|
||||
elif line[0] == "lbz" or line[0] == "lha" or line[0] == "lhz" or line[0] == "lwz" or line[0] == "lwzu" or line[0] == "lfs" or line[0] == "lfd":
|
||||
ret = join(rc(line[1]), "=")
|
||||
if "r1" in line[2]: ret += join("", "Stack")
|
||||
else: ret += join("", line[2][(line[2].index("(")+1):-1])
|
||||
|
||||
ret += f"[{line[2][:(line[2].index('('))]}]"
|
||||
|
||||
if "b" in line[0]: ret += join("", "(s8/u8)")
|
||||
elif "h" in line[0]: ret += join("", "(s16/u16)")
|
||||
elif "w" in line[0]: ret += join("", "(s32/u32)")
|
||||
elif "fs" in line[0]: ret += join("", "(f32)")
|
||||
elif "fd" in line[0]: ret += join("", "(f64)")
|
||||
elif line[0] == "lbzx" or line[0] == "lhax" or line[0] == "lhzx" or line[0] == "lwzx" or line[0] == "lfsx":
|
||||
ret = join(rc(line[1]), "=")
|
||||
if "r1" in line[2]: ret += join("", "Stack")
|
||||
else: ret += join("", rc(line[2]))
|
||||
|
||||
ret += f"[{line[3]}]"
|
||||
|
||||
if "b" in line[0]: ret += join("", "(s8/u8)")
|
||||
elif "h" in line[0]: ret += join("", "(s16/u16)")
|
||||
elif "w" in line[0]: ret += join("", "(s32/u32)")
|
||||
elif "f" in line[0]: ret += join("", "(f32)")
|
||||
elif line[0] == "psq_l":
|
||||
ret = join(f"+ rotate({line[1]} {line[4]})", "=")
|
||||
if "r1" in line[2]: ret += join("", "Stack")
|
||||
else: ret += join("", rc(line[2]))
|
||||
|
||||
ret += join(f"[{line[2][:(line[2].index('('))]}]",
|
||||
"(128-bit)")
|
||||
elif line[0] == "lis":
|
||||
ret = join("(^u16)", rc(line[1]), "=")
|
||||
if line[2][-3:] == "@ha":
|
||||
ret += join("", "(^u16)", line[2][:-3])
|
||||
else: ret += join("", line[2])
|
||||
elif line[0] == "li":
|
||||
ret = join(rc(line[1]), "=", line[2])
|
||||
|
||||
## Bitwise Operations
|
||||
elif "and" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "&=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "&")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "xor" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "^=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "^")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "or" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "|=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "|")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "neg" in line[0]:
|
||||
ret = join(rc(line[1]), "=", "-"+line[2])
|
||||
elif line[0] == "slw" or line[0] == "slwi" or line[0] == "slawi":
|
||||
ret = join(rc(line[1]), "=", rc(line[2]), "<<", line[3], "(s32/u32)", "(signed)" if line[0] == "slawi" else "")
|
||||
elif line[0] == "srwi" or line[0] == "srawi":
|
||||
ret = join(rc(line[1]), "=", rc(line[2]), ">>", line[3], "(s32/u32)", "(signed)" if line[0] == "srawi" else "")
|
||||
|
||||
## Math
|
||||
elif "add" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "+=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "+")
|
||||
|
||||
if line[3][-2:] == "@l":
|
||||
ret += join("", "(vu16)")
|
||||
ret += join("", line[3][:-2])
|
||||
else: ret += join("", line[3])
|
||||
elif "sub" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "-=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "-")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "mul" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "*=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "*")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "div" in line[0]:
|
||||
ret = rc(line[1])
|
||||
if rc(line[1]) == rc(line[2]):
|
||||
ret += join("", "/=")
|
||||
else:
|
||||
ret += join("", "=", rc(line[2]), "/")
|
||||
|
||||
ret += join("", line[3])
|
||||
elif "sqrt" in line[0]:
|
||||
ret = join(rc(line[1]), f"= sqrt({line[2]})")
|
||||
elif "abs" in line[0]:
|
||||
ret = join(rc(line[1]), f"= abs({line[2]})")
|
||||
|
||||
## Compare And Branch
|
||||
elif "cmp" in line[0] and "w" in line[0]:
|
||||
cmpstore = line
|
||||
cmpstore.append("(s32/u32)")
|
||||
ret = "(cmp)"
|
||||
elif line[0] == "fcmpo":
|
||||
cmpstore = line
|
||||
ret = join("(cmp", rc(line[1])+")")
|
||||
elif "cmp" in line[0] and "f" in line[0]:
|
||||
cmpstore = line
|
||||
cmpstore.pop(1)
|
||||
cmpstore.append("(f32/f64)")
|
||||
ret = "(cmp)"
|
||||
elif line[0] == "cror":
|
||||
cmpsym = ""
|
||||
if line[2] == "gt,": cmpsym += ">"
|
||||
elif line[2] == "lt,": cmpsym += "<"
|
||||
cmpsym += "="
|
||||
|
||||
ret = join(
|
||||
"check", rc(cmpstore[2]),
|
||||
cmpsym, cmpstore[3],
|
||||
)
|
||||
elif line[0] == "beq":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
"==", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "bge":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
">=", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "bne":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
"!=", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "ble":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
"<=", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "blt":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
"<", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "bgt":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join(
|
||||
"if", rc(cmpstore[1]),
|
||||
">", cmpstore[2],
|
||||
": goto", hex(int(line[1][3:], 16)), cmpstore[3]
|
||||
)
|
||||
elif line[0] == "blr":
|
||||
ret = "return"
|
||||
elif line[0] == "bctrl":
|
||||
ret = "Call to Subroutine"
|
||||
elif line[0] == "bctr":
|
||||
ret = "Jump to Subroutine"
|
||||
elif line[0] == "b":
|
||||
addrstore[hex(int(line[1][3:], 16))] = hex(addr)
|
||||
ret = join("goto", hex(int(line[1][3:], 16)))
|
||||
elif line[0] == "bl":
|
||||
ret = join("call", line[1])
|
||||
|
||||
## Misc
|
||||
elif line[0] == "crclr":
|
||||
ret = f"clear({line[1]})"
|
||||
elif line[0] == "crset":
|
||||
ret = f"set({line[1]})"
|
||||
elif line[0] == "extsh":
|
||||
ret = join("(s32)", rc(line[1]), "= (s16)", line[2])
|
||||
elif line[0] == "extsb":
|
||||
ret = join("(s32)", rc(line[1]), "= (s8)", line[2])
|
||||
elif line[0] == "clrlwi":
|
||||
ret = join(rc(line[1]), "=", f"remove({line[2]} {line[3]})")
|
||||
elif line[0] == "rlwinm":
|
||||
ret = join(rc(line[1]), "=", f"rotate({line[2]} {rc(line[3])})", "& (bits", rc(line[4]), "to", line[5]+")")
|
||||
elif line[0] == "frsp":
|
||||
ret = join("(f32)", rc(line[1]), "= (f64)", line[2])
|
||||
elif line[0] == "fctiwz":
|
||||
ret = join("(s32)", rc(line[1]), "= (float)", line[2])
|
||||
elif line[0] == "cntlzw":
|
||||
ret = join(rc(line[1]), f"= num_leading_zeroes({line[2]})")
|
||||
else:
|
||||
print(line, "\n", [],"\n")
|
||||
return "unable to interpret: "+str(line)
|
||||
return ret
|
||||
|
||||
def interpret_obj(line: list)->str:
|
||||
global isObj
|
||||
ret = ""
|
||||
|
||||
if line[0] == "\t.4byte":
|
||||
if isObj == True:
|
||||
ret = "{\n"
|
||||
ret += join("\t(s32)", line[1])
|
||||
elif line[0] == "\t.string":
|
||||
ret = join("\t(char[])", " ".join(line[1:]))
|
||||
elif line[0] == "\t.skip":
|
||||
ret = join("\tsizeof =", line[1])
|
||||
elif line[0] == "\t.double":
|
||||
ret = join("\t(f64)", line[1])
|
||||
elif line[0] == "\t.float":
|
||||
ret = join("\t(f32)", line[1])
|
||||
|
||||
return ret
|
||||
|
||||
def interpret_line(line: list)->str:
|
||||
global addrstore, isObj
|
||||
line = line.split(" ")
|
||||
line[-1] = line[-1].replace("\n","")
|
||||
ret = ""
|
||||
|
||||
if line[0] == ".fn":
|
||||
ret = join(line[2], "function", rc(line[1])+":")
|
||||
elif line[0] == ".endfn":
|
||||
ret = join(line[1], "end\n")
|
||||
elif line[0] == ".obj":
|
||||
ret = rc(line[1])+":"
|
||||
isObj = True
|
||||
elif line[0] == ".endobj" and isObj == True:
|
||||
ret = "}"
|
||||
isObj = False
|
||||
elif ".L" in line[0]:
|
||||
try:
|
||||
ret = join("\n\tfrom", addrstore[hex(int(line[0][3:-1], 16))]+":")
|
||||
except:
|
||||
ret = "\n\tfrom later address:"
|
||||
elif line[0] == "/*":
|
||||
address = int(line[1], 16)
|
||||
line[8] = line[8].replace("*/\t","")
|
||||
ret = join("\t", hex(address), "|",
|
||||
interpret_cmd(line[8:], address)
|
||||
)
|
||||
elif "\t" in line[0]:
|
||||
ret = interpret_obj(line)
|
||||
|
||||
isObj = line[0]
|
||||
print(line, "\n", ret, "\n")
|
||||
return ret
|
||||
|
||||
def interpret_file(file)->None:
|
||||
curdir = os.path.dirname(os.path.abspath(__file__))
|
||||
fs = file.split("/")[-1]
|
||||
|
||||
os.system(f"mkdir {curdir}/output")
|
||||
f = open(file)
|
||||
g = open(f"{curdir}/output/{fs[:(fs.index('.'))]}-output.txt", "w")
|
||||
line = f.readline()
|
||||
while line:
|
||||
ret = interpret_line(line)
|
||||
g.write(ret+"\n" if ret != "" else "")
|
||||
line = f.readline()
|
||||
g.close()
|
||||
f.close()
|
||||
|
||||
try:
|
||||
interpret_file(sys.argv[1])
|
||||
except Exception:
|
||||
if len(sys.argv) == 1:
|
||||
print("interpretasm.py")
|
||||
print("Usage: python3 interpretasm.py [file]")
|
||||
print("Accepts all files that use the generated asm from ninja")
|
||||
else:
|
||||
raise Exception
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue