start fire.c

This commit is contained in:
CreateSource 2025-01-19 12:35:08 -05:00
parent 2590dbb234
commit 61678389cf
3 changed files with 313 additions and 1 deletions

View file

@ -39,7 +39,8 @@
"chrman.h": "c",
"os.h": "c",
"type_traits": "cpp",
"xutility": "cpp"
"xutility": "cpp",
"xtr1common": "c"
},
"search.useIgnoreFiles": false,
"search.exclude": {

View file

@ -1,6 +1,7 @@
#ifndef M438DLL_H
#define M438DLL_H
#include "game/animdata.h"
#include "game/object.h"
typedef struct M438MainWork4 {
@ -16,6 +17,91 @@ typedef struct M438MainWork4 {
char unk40[0xC];
} M438MainWork4; /* size = 0x4C */
typedef struct M438UnkSubStruct {
s32 unk_00;
char unk01[0x20];
u8 unk_24;
float unk_28;
float unk_2C;
} M438UnkSubStruct;
typedef struct M438UnkStruct {
Vec unk_00;
Vec unk_0C;
Vec unk_18;
Vec unk_24;
u8 unk_30;
u8 unk_31;
u8 unk_32;
u8 unk_33;
u8 unk_34;
u32 unk_38;
s16 unk_3C;
void* unk_40;
Vec* unk_44;
GXColor* unk_48;
Vec* unk_4C;
GXColor unk_50;
GXColor unk_54;
M438UnkSubStruct* unk_58;
u8 unk_5C;
char unk5D[0x3];
Vec unk_60;
Vec unk_6C;
s16 unk_78;
s16 unk_7A;
char unk7C[0x1C];
} M438UnkStruct; /* size = 0x98 */
typedef struct M438UnkStruct2 {
s16 unk_00;
s16 unk_02;
u8 unk_04;
u32 unk_08;
Vec unk_0C;
Vec unk_18;
Vec unk_24;
void (*unk_30)(struct M438UnkStruct2*);
s16 unk_34[4];
M438UnkStruct *unk_3C;
char unk40[0x20];
u8 unk_60;
char unk61[0x3];
char unk64[0x18];
s16 unk_7C;
s16 unk_7E;
float unk_80;
float unk_84;
float unk_88;
float unk_8C;
float unk_90;
char unk94[0x28];
} M438UnkStruct2; /* size = 0xBC */
typedef struct M438UnkStruct3 {
AnimData* unk_00;
s16 unk_04;
s16 unk_06;
s32 unk_08;
Vec unk_0C;
Mtx unk_18;
char unk48[0x1C];
} M438UnkStruct3; /* size = 0x64 */
typedef struct M438StructBssDE4 {
Mtx unk_00;
s16 unk_30;
s16 unk_32;
s16 unk_34;
s16 unk_36;
s16 unk_38;
s16 unk_3A;
M438UnkStruct3 *unk_3C;
M438UnkStruct2 *unk_40;
} M438StructBssDE4; /* size = */
extern M438StructBssDE4 lbl_1_bss_DE4;
void fn_1_B4D8(Process *arg0);
void fn_1_B548();
s32 fn_1_DA64(float arg8);

View file

@ -0,0 +1,225 @@
#include "REL/m438Dll.h"
#include "game/hsfdraw.h"
extern u8 texMtxTbl;
typedef struct M438FireStruct {
Vec unk0;
Vec unkC;
Vec unk18;
Vec unk24;
} M438FireStruct;
typedef struct M438FireStruct2 {
GXColor unk0;
GXColor unk4;
GXColor unk8;
GXColor unkC;
} M438FireStruct2;
typedef struct M438FireStruct3 {
HsfVector2f unk0;
HsfVector2f unk8;
HsfVector2f unk10;
HsfVector2f unk18;
} M438FireStruct3;
// PROTO
void fn_1_E790(M438UnkStruct2*);
void fn_1_F538(ModelData*, Mtx);
void fn_1_FD40(M438UnkStruct2*);
void fn_1_E658(s16 arg0, s16 arg1) {
M438UnkStruct2* var_r29;
s32 var_r31;
M438UnkStruct3* var_r30;
lbl_1_bss_DE4.unk_34 = Hu3DHookFuncCreate(fn_1_F538);
Hu3DModelLayerSet(lbl_1_bss_DE4.unk_34, 6);
lbl_1_bss_DE4.unk_30 = arg0;
var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * sizeof(M438UnkStruct2), 0x10000000);
lbl_1_bss_DE4.unk_40 = var_r29;
lbl_1_bss_DE4.unk_32 = arg1;
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438UnkStruct3), 0x10000000);
lbl_1_bss_DE4.unk_3C = var_r30;
for (var_r31 = 0; var_r31 < arg0; var_r31++, var_r29++) {
var_r29->unk_08 = 0;
}
for (var_r31 = 0; var_r31 < arg1; var_r31++, var_r30++) {
var_r30->unk_06 = 0;
var_r30->unk_08 = 0;
}
lbl_1_bss_DE4.unk_36 = lbl_1_bss_DE4.unk_38 = lbl_1_bss_DE4.unk_3A = 0;
}
void fn_1_F538(ModelData* arg0, Mtx arg1) {
Mtx sp38;
Mtx sp8;
M438UnkStruct2* var_r31;
s32 var_r30;
var_r31 = lbl_1_bss_DE4.unk_40;
GXLoadPosMtxImm(arg1, 0);
PSMTXInverse(arg1, sp38);
PSMTXTranspose(sp38, sp8);
GXLoadNrmMtxImm(sp8, 0);
HmfInverseMtxF3X3(Hu3DCameraMtx, lbl_1_bss_DE4.unk_00);
for (var_r30 = 0; var_r30 < lbl_1_bss_DE4.unk_30; var_r30++, var_r31++) {
if ((var_r31->unk_08 != 0) && ((var_r31->unk_08 & 2) != 0) && ((var_r31->unk_08 & 4) == 0)) {
if ((u8)omPauseChk() == 0) {
if (var_r31->unk_30) {
var_r31->unk_30(var_r31);
}
if (var_r31->unk_08 == 0) continue;
fn_1_FD40(var_r31);
if (var_r31->unk_08 == 0) continue;
}
fn_1_E790(var_r31);
}
}
}
M438UnkStruct2* fn_1_F664(s16 arg0) {
return &lbl_1_bss_DE4.unk_40[arg0];
}
M438UnkStruct* fn_1_F680(s16 arg0, s16 arg1) {
return &lbl_1_bss_DE4.unk_40[arg0].unk_3C[arg1];
}
M438UnkStruct3* fn_1_F6AC(s16 arg0) {
return &lbl_1_bss_DE4.unk_3C[arg0];
}
void fn_1_F6C8(M438FireStruct** arg0, s16 arg1, f32 arg8, f32 arg9) {
s32 var_r30;
M438FireStruct* var_r31;
var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct), 0x10000000);
for (var_r30 = 0; var_r30 < arg1; var_r31++, var_r30++) {
var_r31->unk0.x = (-0.5f * arg8);
var_r31->unk0.y = (0.5f * arg9);
var_r31->unk0.z = 0.0f;
var_r31->unkC.x = (0.5f * arg8);
var_r31->unkC.y = (0.5f * arg9);
var_r31->unkC.z = 0.0f;
var_r31->unk18.x = (0.5f * arg8);
var_r31->unk18.y = (-0.5f * arg9);
var_r31->unk18.z = 0.0f;
var_r31->unk24.x = (-0.5f * arg8);
var_r31->unk24.y = (-0.5f * arg9);
var_r31->unk24.z = 0.0f;
}
}
void fn_1_F84C(M438FireStruct** arg0, s16 arg1, Vec* arg2) {
Vec* var_r31;
s32 var_r29;
s32 var_r28;
var_r31 = (Vec*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct), 0x10000000);
for (var_r29 = 0; var_r29 < arg1; var_r29++) {
for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) {
var_r31->x = arg2->x;
var_r31->y = arg2->y;
var_r31->z = arg2->z;
}
}
}
void fn_1_F8EC(M438FireStruct2** arg0, s16 arg1, GXColor* arg2) {
GXColor* var_r31;
s32 var_r29;
s32 var_r28;
var_r31 = (GXColor*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct2), 0x10000000U);
for (var_r29 = 0; var_r29 < arg1; var_r29++) {
for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) {
var_r31->r = arg2->r;
var_r31->g = arg2->g;
var_r31->b = arg2->b;
var_r31->a = arg2->a;
}
}
}
void fn_1_F994(Vec** arg0, s16 arg1, Vec* arg2) {
s32 var_r29;
Vec* var_r31;
var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec), 0x10000000);
for (var_r29 = 0; var_r29 < arg1; var_r31++, arg2++, var_r29++) {
var_r31->x = arg2->x;
var_r31->y = arg2->y;
var_r31->z = arg2->z;
}
}
void fn_1_FA20(M438FireStruct3** arg0, s16 arg1, HsfVector2f* arg2) {
HsfVector2f* var_r31;
s32 var_r29;
s32 var_r28;
var_r31 = (HsfVector2f*)*arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(M438FireStruct3), 0x10000000);
for (var_r29 = 0; var_r29 < arg1; var_r29++) {
for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) {
var_r31->x = arg2->x;
var_r31->y = arg2->y;
}
}
}
void fn_1_FAB8(M438UnkStruct* arg0) {
Vec sp1C[4] = {
{ -50.0f, 50.0f, 0.0f },
{ 50.0f, 50.0f, 0.0f },
{ 50.0f, -50.0f, 0.0f },
{ -50.0f, -50.0f, 0.0f }
};
GXColor spC[4] = {
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF }
};
void* sp8;
s32 var_r31;
s32 var_r29;
void* temp_r28;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
arg0->unk_44[var_r31] = sp1C[var_r31];
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
arg0->unk_48[var_r31] = spC[var_r31];
}
arg0->unk_4C->x = 0.0f;
arg0->unk_4C->y = 0.0f;
arg0->unk_4C->z = 1.0f;
temp_r28 = arg0->unk_40;
sp8 = temp_r28;
GXBeginDisplayList(temp_r28, 0x100);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
GXPosition1x16(var_r31);
GXColor1x16(0);
GXNormal1x16(var_r31);
for (var_r29 = 0; var_r29 < arg0->unk_34; var_r29++) {
GXTexCoord1x16(var_r31);
}
}
arg0->unk_3C = GXEndDisplayList();
}