start m443Dll

This commit is contained in:
CreateSource 2024-10-29 21:28:20 -04:00
parent daa833827f
commit 513f0af5e1
5 changed files with 219 additions and 4 deletions

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
# IDE folders
.idea/
.vs/
.vscode/
# Caches
__pycache__

10
.vscode/settings.json vendored
View file

@ -13,8 +13,14 @@
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.associations": {
"*.csv": "plaintext",
"*.s": "plaintext",
"*.json": "jsonc",
"*.c": "c",
"*.inc": "c",
".clangd": "yaml"
".clangd": "yaml",
"m443dll.h": "c",
"object.h": "c"
},
"search.useIgnoreFiles": false,
"search.exclude": {
@ -27,7 +33,5 @@
"report.json": true,
"compile_commands.json": true,
},
// Disable C/C++ IntelliSense, use clangd instead
"C_Cpp.intelliSenseEngine": "disabled",
"cmake.ignoreCMakeListsMissing": true,
}

View file

@ -292,7 +292,8 @@ lbl_1_data_208 = .data:0x00000208; // type:object size:0x4 data:byte
lbl_1_data_20C = .data:0x0000020C; // type:object size:0x1A scope:local data:string
lbl_1_data_226 = .data:0x00000226; // type:object size:0x19 scope:local data:string
lbl_1_data_240 = .data:0x00000240; // type:object size:0x14
lbl_1_data_264 = .data:0x00000258; // type:object size:0x20
lbl_1_data_258 = .data:0x00000258; // type:object size:0xB scope:local data:string
lbl_1_data_264 = .data:0x00000264; // type:object size:0x20
lbl_1_data_284 = .data:0x00000284; // type:object size:0x40
lbl_1_data_2C4 = .data:0x000002C4; // type:object size:0x10
lbl_1_data_2D4 = .data:0x000002D4; // type:object size:0x50

View file

@ -29,6 +29,54 @@ typedef struct M443DllCameraStruct {
u32 unk_A0;
} M443DllCameraStruct; /* size = 0xA4 */
typedef struct M443DllWorkStruct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
char unk10[0xC];
s32 unk1C;
s32 unk20;
s32 unk24;
char unk28[0xC];
s16 unk34;
char unk3A[0x12];
f32 unk48;
f32 unk4C;
f32 unk50;
f32 unk54;
f32 unk58;
f32 unk5C;
s32 unk60;
char unk64[0x4];
s32 unk68;
char unk6C[0x14];
s32 unk80;
char unk84[0x4];
f32 unk88;
char unk8C[0x4];
f32 unk90;
char unk94[0x4];
f32 unk98;
f32 unk9C;
f32 unkA0;
f32 unkA4;
s32 unkA8;
s32 unkAC;
s32 unkB0;
s32 unkB4;
s32 unkB8;
f32 unkBC;
f32 unkC0;
Vec unkC4;
Vec unkD0;
Vec unkDC;
Vec unkE8;
char unkF4[0xC];
M443DllCameraStruct* unk100;
M443DllCameraStruct* unk104;
} M443DllWorkStruct; /* size = 0x134 */
void fn_1_3FE8(u32 arg0);
u32 fn_1_3FFC(void);
M443DllCameraStruct *fn_1_40AC(s32 arg0);

View file

@ -14,3 +14,164 @@
#endif
#include "REL/m443Dll.h"
s32 lbl_1_bss_78[6];
omObjData* lbl_1_bss_90[4];
char* lbl_1_data_264[0x8] = {
"itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r",
"itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r"
};
u32 lbl_1_data_284[8][2] = {
{0x4A0005, 0x4A0006}, {0x4A0007, 0x4A0008},
{0x4A0009, 0x4A000A}, {0x4A000B, 0x4A000C},
{0x4A000D, 0x4A000E}, {0x4A000F, 0x4A0010},
{0x4A0011, 0x4A0012}, {0x4A0013, 0x4A0014},
};
s32 lbl_1_data_2C4[4] = {
0, 0x4A0020, 0x17, 0x72
};
s32 lbl_1_data_324[4] = {
0x727, 0x728, 0x729, 0x72A,
};
s32 lbl_1_data_334[4] = {
0x72B, 0x72C, 0x72D, 0x72E,
};
/////
void fn_1_5680(omObjData* object);
void fn_1_5BD4(omObjData*);
void fn_1_8508(omObjData*);
f32 fn_1_8C8C(s32, f32);
/////
void fn_1_5444(Process* arg0) {
u32 sp18[4];
u32 sp8[4];
omObjData* var_r28;
u32 var_r29;
s16 var_r30;
s16 var_r31;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp18[var_r31] = GWPlayerCfg[var_r31].group;
sp8[var_r31] = var_r31;
}
for (var_r31 = 0; var_r31 < 3; var_r31++) {
for (var_r30 = var_r31 + 1; var_r30 < 4; var_r30++) {
if (sp18[var_r31] > sp18[var_r30]) {
var_r29 = sp18[var_r31];
sp18[var_r31] = sp18[var_r30];
sp18[var_r30] = var_r29;
var_r29 = sp8[var_r31];
sp8[var_r31] = sp8[var_r30];
sp8[var_r30] = var_r29;
}
}
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_78[sp8[var_r31]] = (s16)var_r31;
}
omMakeGroupEx(arg0, 0, 4);
omGetGroupMemberListEx(arg0, 0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
var_r28 = lbl_1_bss_90[var_r31] = omAddObjEx(arg0, 0x28, 5, 4, 0, fn_1_5680);
var_r28->work[0] = var_r31;
}
}
void fn_1_565C(void) {
CharModelKill(-1);
}
void fn_1_5680(omObjData* object) {
f32 spC[4] = {0.25f, 0.5f, 0.75f, 1.0f};
s32 sp8;
f32 temp_f0;
s32 temp_r27;
s32 temp_r3;
s32 var_r29;
u32 temp_r25;
M443DllWorkStruct* temp_r31;
HsfanimStruct01* var_r28;
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x134, MEMORY_DEFAULT_NUM);
temp_r31 = object->data;
memset(temp_r31, 0, 0x134);
object->stat |= 0x100;
temp_r25 = object->work[0];
temp_r27 = GWPlayerCfg[temp_r25].character;
temp_r31->unk0 = temp_r27;
sp8 = temp_r31->unk4 = 0;
temp_r31->unkC = lbl_1_bss_78[object->work[0]];
temp_r31->unk5C = spC[GWPlayerCfg[temp_r25].diff & 3];
temp_r31->unk24 = GWPlayerCfg[object->work[0]].iscom;
object->model[0] = CharModelCreate(temp_r27, 8);
Hu3DModelLayerSet(object->model[0], 4);
object->model[1] = Hu3DModelCreateFile(lbl_1_data_284[temp_r27][0]);
Hu3DModelLayerSet(object->model[1], 4);
Hu3DMotionSpeedSet(object->model[1], 0.0f);
object->model[2] = Hu3DModelCreateFile(lbl_1_data_284[temp_r27][1]);
Hu3DModelLayerSet(object->model[2], 4);
Hu3DMotionSpeedSet(object->model[2], 0.0f);
Hu3DModelAttrSet(object->model[2], 1);
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if (lbl_1_data_2C4[var_r29] < 0x10000) {
object->motion[var_r29] = CharModelMotionCreate(temp_r27, lbl_1_data_2C4[var_r29]);
} else {
object->motion[var_r29] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(temp_r27 + lbl_1_data_2C4[var_r29], 0x10000000, HEAP_DATA));
}
}
CharModelMotionDataClose(temp_r27);
temp_r3 = Hu3DParticleCreate(HuSprAnimReadFile(0x4A001D), 0xC8);
object->model[3] = temp_r3;
Hu3DModelLayerSet(temp_r3, 4);
var_r28 = ((ParticleData*)Hu3DData[temp_r3].unk_120)->unk_48;
for (var_r29 = 0; var_r29 < 0xC8; var_r29++, var_r28++) {
var_r28->unk2C = 0.0f;
var_r28->unk40.a = 0;
var_r28->unk00 = 0;
}
object->trans.x = temp_r31->unkC4.x = temp_r31->unkDC.x = (100.0f * (4.0f * object->work[0])) - 600.0f;
object->trans.y = temp_r31->unkC4.y = temp_r31->unkDC.y = 0.0f;
object->trans.z = temp_r31->unkC4.z = temp_r31->unkDC.z = 0.0f;
temp_r31->unkD0.x = temp_r31->unkD0.y = temp_r31->unkD0.z = 0.0f;
temp_r31->unkE8.x = temp_r31->unkE8.y = temp_r31->unkE8.z = 0.0f;
temp_r31->unk48 = temp_r31->unk4C = 0.0f;
temp_r31->unk50 = 0.0f;
temp_r31->unk54 = 0.02f;
temp_r31->unk58 = 180.0f;
temp_r31->unkC0 = 50.0f;
temp_r31->unkBC = 350.0f;
temp_r31->unk8 = -1;
temp_r31->unk1C = 1;
temp_r31->unk20 = 0;
temp_r31->unk9C = 1.0f;
temp_r31->unk98 = 0.0f;
temp_r31->unkA0 = 0.0f;
temp_r31->unkA4 = 0.0f;
temp_r31->unk88 = 1000.0f;
temp_r31->unk90 = fn_1_8C8C(temp_r31->unk80, temp_r31->unk88);
temp_r31->unkA8 = temp_r31->unkAC = -1;
temp_r31->unkB0 = temp_r31->unkB4 = temp_r31->unkB8 = -1;
temp_r31->unkB4 = HuAudFXPlay(lbl_1_data_334[object->work[0]]);
temp_r31->unk68 = -1;
temp_r31->unk60 = 0;
temp_r31->unk100 = fn_1_4148(object->work[0] + 1);
temp_r31->unk104 = fn_1_41B0(object->work[0] + 1);
temp_r31->unk100->unk_00 = 0;
fn_1_8508(object);
temp_r31->unk34 = 0;
object->func = fn_1_5BD4;
}