Merge pull request #498 from abnormalhare/main

match m424Dll/map.c
This commit is contained in:
Liam Coleman 2024-12-31 12:23:10 -06:00 committed by GitHub
commit 6f5d52f0a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 309 additions and 26 deletions

View file

@ -267,7 +267,10 @@ lbl_1_data_E0 = .data:0x000000E0; // type:object size:0xC
lbl_1_data_EC = .data:0x000000EC; // type:object size:0xC
lbl_1_data_F8 = .data:0x000000F8; // type:object size:0xC
lbl_1_data_104 = .data:0x00000104; // type:object size:0x7 data:string
lbl_1_data_10C = .data:0x0000010C; // type:object size:0x44
lbl_1_data_10C = .data:0x0000010C; // type:object size:0x1C
lbl_1_data_128 = .data:0x00000128; // type:object size:0x4 data:byte
lbl_1_data_12C = .data:0x0000012C; // type:object size:0x1C
lbl_1_data_148 = .data:0x00000148; // type:object size:0x8
lbl_1_data_150 = .data:0x00000150; // type:object size:0x2C
lbl_1_data_17C = .data:0x0000017C; // type:object size:0x30
jumptable_1_data_1AC = .data:0x000001AC; // type:object size:0x2C scope:local

View file

@ -1044,7 +1044,7 @@ config.libs = [
"m424Dll", # Blame it on the Crane
objects={
Object(MatchingFor("GMPE01_00"), "REL/m424Dll/main.c"),
Object(NonMatching, "REL/m424Dll/map.c"),
Object(MatchingFor("GMPE01_00"), "REL/m424Dll/map.c"),
Object(NonMatching, "REL/m424Dll/ball.c"),
Object(NonMatching, "REL/m424Dll/claw.c"),
},

View file

@ -1 +1,22 @@
#include "dolphin.h"
#include "game/object.h"
typedef struct _M424DllMainStruct {
Vec rot;
Vec center;
f32 zoom;
} M424DllMainStruct; // sizeof 1C
omObjData* fn_1_1AB8(Process*);
void fn_1_1B8C(void);
f32 fn_1_213C(void);
void fn_1_2720(Process*);
void fn_1_2880(void);
s32 fn_1_8A2C(void);
void fn_1_93F0(Process*);
void fn_1_94A4(void);
s32 fn_1_B804(void);
s32 fn_1_B888(void);
s32 fn_1_B8AC(void);
s32 fn_1_B924(void);

View file

@ -4,17 +4,9 @@
#include "game/audio.h"
#include "game/hsfman.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/wipe.h"
// STRUCT
typedef struct _M424DllMainStruct {
Vec rot;
Vec center;
f32 zoom;
} M424DllMainStruct;
// BSS
Process* lbl_1_bss_4C;
s32 lbl_1_bss_48;
@ -65,17 +57,6 @@ void fn_1_FF0(void);
void fn_1_11EC(omObjData* object);
void fn_1_1204(s32, s32, f32);
f32 fn_1_16C0(f32, f32, f32);
void fn_1_1B8C(void);
void fn_1_1AB8(Process*);
f32 fn_1_213C(void);
void fn_1_2720(Process*);
void fn_1_2880(void);
s32 fn_1_8A2C(void);
void fn_1_93F0(Process*);
void fn_1_94A4(void);
s32 fn_1_B888(void);
s32 fn_1_B8AC(void);
s32 fn_1_B924(void);
/// FUNCTIONS ///
@ -438,8 +419,3 @@ f32 fn_1_16C0(f32 arg0, f32 arg1, f32 arg2) {
temp_f24 = fabs(var_f23 * arg0);
return fn_1_1470(arg2, arg1, temp_f24);
}
// // @todo move to map.c?
// Vec lbl_1_data_E0 = { 0.0f, 3000.0f, 1.0f };
// Vec lbl_1_data_EC = { 0.0f, 1.0f, 0.0f };
// Vec lbl_1_data_F8 = { 0.0f, 0.0f, 0.0f };

283
src/REL/m424Dll/map.c Normal file
View file

@ -0,0 +1,283 @@
#include "REL/m424Dll.h"
#include "math.h"
#include "game/audio.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
// STRUCT
typedef struct _M424DllMapStruct {
f32 unk0;
f32 unk4;
Mtx unk8;
s32 unk38;
f32 unk3C;
s32 unk40;
s32 unk44;
s32 unk48;
s32 unk4C;
s32 unk50;
} M424DllMapStruct; // sizeof 0x54
// BSS
Process* lbl_1_bss_54;
omObjData* lbl_1_bss_50;
// DATA
Vec lbl_1_data_E0 = { 0.0f, 3000.0f, 1.0f };
Vec lbl_1_data_EC = { 0.0f, 1.0f, 0.0f };
Vec lbl_1_data_F8 = { 0.0f, 0.0f, 0.0f };
// PROTO
void fn_1_1BB8(omObjData*);
void fn_1_1E1C(omObjData*);
void fn_1_2130(omObjData*);
void fn_1_2438(f32);
omObjData* fn_1_1AB8(Process* arg0) {
lbl_1_bss_54 = arg0;
lbl_1_bss_50 = omAddObjEx(arg0, 0x7F, 6, 0, -1, fn_1_1BB8);
lbl_1_bss_50->data = NULL;
Hu3DShadowCreate(45.0f, 1000.0f, 250000.0f);
Hu3DShadowTPLvlSet(0.3f);
Hu3DShadowPosSet(&lbl_1_data_E0, &lbl_1_data_EC, &lbl_1_data_F8);
return lbl_1_bss_50;
}
void fn_1_1B8C(void) {
fn_1_2130(lbl_1_bss_50);
}
void fn_1_1BB8(omObjData* arg0) {
M424DllMapStruct* var_r30;
var_r30 = arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x54, 0x10000000);
memset(var_r30, 0, 0x54);
var_r30->unk0 = 0.0f;
var_r30->unk4 = 0.0f;
var_r30->unk38 = -1;
var_r30->unk3C = 0.0f;
var_r30->unk40 = 0;
var_r30->unk44 = -1;
var_r30->unk48 = 0;
var_r30->unk4C = 0;
var_r30->unk50 = -1;
arg0->model[0] = Hu3DModelCreateFile(0x370017);
arg0->model[1] = Hu3DModelCreateFile(0x370018);
arg0->model[2] = Hu3DModelCreateFile(0x370019);
arg0->model[3] = Hu3DModelCreateFile(0x37001A);
arg0->model[4] = Hu3DModelCreateFile(0x37001B);
arg0->model[5] = Hu3DModelCreateFile(0x37001C);
Hu3DModelAttrSet(arg0->model[4], 1);
Hu3DMotionSpeedSet(arg0->model[1], var_r30->unk0);
Hu3DModelAttrSet(arg0->model[1], 0x40000001);
Hu3DMotionSpeedSet(arg0->model[0], 0.15f);
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
Hu3DModelPosSet(arg0->model[2], 847.135f, 0.0f, 424.56f);
Hu3DMotionSpeedSet(arg0->model[4], 2.0f);
Hu3DModelAttrSet(arg0->model[4], 0x40000001);
Hu3DModelShadowMapSet(arg0->model[0]);
Hu3DModelShadowMapSet(arg0->model[1]);
Hu3DModelShadowMapSet(arg0->model[2]);
arg0->func = fn_1_1E1C;
}
void fn_1_1E1C(omObjData* arg0) {
f32 temp_f31;
M424DllMapStruct* temp_r31;
temp_r31 = arg0->data;
if (temp_r31->unk40 > 0) {
fn_1_2438(temp_r31->unk3C);
if ((--temp_r31->unk40 <= 0) && (temp_r31->unk44 != -1)) {
HuAudFXStop(temp_r31->unk44);
temp_r31->unk44 = -1;
}
}
switch (fn_1_FE0()) {
case 0:
temp_r31->unk0 = 0.5f;
break;
case 1:
case 2:
temp_r31->unk0 = 0.0f;
break;
case 3:
case 4:
temp_r31->unk0 += 0.001f;
if (temp_r31->unk0 > 0.04f) {
temp_r31->unk0 = 0.04f;
}
if (temp_r31->unk38 != -1) break;
temp_r31->unk38 = HuAudFXPlay(0x626);
break;
default:
if ((fn_1_B804() == 0) && (fn_1_8A2C() != 0)) {
temp_r31->unk0 *= 0.9f;
if (temp_r31->unk0 < 0.01f) {
temp_r31->unk0 = 0.0f;
}
temp_f31 = temp_r31->unk0 / 0.04f;
if (temp_r31->unk38 != -1) {
HuAudFXVolSet(temp_r31->unk38, (s16) (-8191.0f * (1.0f - temp_f31)));
HuAudFXPitchSet(temp_r31->unk38, (s16) (127.0f * temp_f31));
if (temp_f31 <= 0.0f) {
HuAudFXStop(temp_r31->unk38);
temp_r31->unk38 = -1;
}
}
}
break;
}
if (temp_r31->unk48 != 0) {
if (temp_r31->unk4C != 0) {
temp_r31->unk4C = (temp_r31->unk4C - 1);
} else {
temp_r31->unk48 = (temp_r31->unk48 - 1);
if (temp_r31->unk48 != 0) {
Hu3DModelAttrReset(arg0->model[4], 1);
Hu3DModelAttrSet(arg0->model[5], 1);
} else {
Hu3DModelAttrSet(arg0->model[4], 1);
Hu3DModelAttrReset(arg0->model[5], 1);
if (temp_r31->unk50 != -1) {
HuAudFXStop(temp_r31->unk50);
temp_r31->unk50 = -1;
}
}
}
}
temp_r31->unk4 = (20.0f * temp_r31->unk0);
PSMTXRotRad(temp_r31->unk8, 0x59, MTXDegToRad(temp_r31->unk4));
Hu3DMotionSpeedSet(arg0->model[1], temp_r31->unk0);
}
void fn_1_2130(omObjData* arg0) {
arg0->func = NULL;
}
f32 fn_1_213C(void) {
M424DllMapStruct* var_r31;
if (!lbl_1_bss_50) {
return 0.0f;
}
if (!lbl_1_bss_50->data) {
return 0.0f;
}
var_r31 = lbl_1_bss_50->data;
return var_r31->unk4;
}
void fn_1_21B0(Mtx arg0) {
M424DllMapStruct* var_r31;
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
var_r31 = lbl_1_bss_50->data;
PSMTXCopy(var_r31->unk8, *(Mtx*)&arg0);
}
}
void fn_1_2220(Vec* arg0, Vec* arg1) {
Vec spC;
M424DllMapStruct* temp_r30;
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
temp_r30 = lbl_1_bss_50->data;
if (sqrtf((arg0->x * arg0->x) + (arg0->z * arg0->z)) < 700.0f) {
spC.x = (temp_r30->unk8[0][0] * arg0->x) + (temp_r30->unk8[0][2] * arg0->z);
spC.z = (temp_r30->unk8[2][0] * arg0->x) + (temp_r30->unk8[2][2] * arg0->z);
spC.y = arg0->y;
} else {
spC = *arg0;
}
PSVECSubtract(&spC, arg0, &spC);
*arg1 = spC;
}
}
void fn_1_2438(f32 arg0) {
M424DllMapStruct* spC;
HsfAttribute* var_r31;
ModelData* temp_r30;
HsfData* temp_r29;
s32 var_r28;
HsfBitmap* var_r27;
omObjData* var_r26;
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
var_r26 = lbl_1_bss_50;
spC = lbl_1_bss_50->data;
temp_r30 = &Hu3DData[var_r26->model[2]];
temp_r29 = temp_r30->hsfData;
var_r31 = temp_r30->hsfData->attribute;
for (var_r28 = 0; var_r28 < temp_r29->attributeCnt; var_r28++, var_r31++) {
var_r27 = var_r31->bitmap;
if (strcmp("cr_dk2", var_r27->name) == 0) break;
}
if (var_r28 < temp_r29->attributeCnt) {
var_r31->unk30 += arg0;
}
}
}
void fn_1_252C(f32 arg8, s32 arg0) {
omObjData* sp10;
M424DllMapStruct* temp_r31;
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
sp10 = lbl_1_bss_50;
temp_r31 = lbl_1_bss_50->data;
temp_r31->unk44 = HuAudFXPlay(0x627);
temp_r31->unk3C = arg8;
temp_r31->unk40 = arg0;
}
}
f32 fn_1_25C0(void) {
omObjData* sp8;
M424DllMapStruct* temp_r31;
if (!lbl_1_bss_50) {
return 0.0f;
}
if (!lbl_1_bss_50->data) {
return 0.0f;
}
sp8 = lbl_1_bss_50;
temp_r31 = lbl_1_bss_50->data;
if (temp_r31->unk40 != 0) {
return 250.0f * temp_r31->unk3C;
}
return 0.0f;
}
void fn_1_2670(s32 arg0, s32 arg1) {
omObjData* temp_r30;
M424DllMapStruct* temp_r31;
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
temp_r30 = lbl_1_bss_50;
temp_r31 = lbl_1_bss_50->data;
temp_r31->unk50 = HuAudFXPlay(0x629);
temp_r31->unk48 = arg0;
temp_r31->unk4C = arg1;
Hu3DMotionTimeSet(temp_r30->model[4], 0.0f);
}
}
// UNUSED (guessing types)
M424DllMainStruct lbl_1_data_10C = {
{ 0.0f, 0.0f, 5500.0f },
{ -3950.0f, 0.0f, -0.7f },
0.6f
};
GXColor lbl_1_data_128 = { 0xFF, 0xFF, 0xFF, 0xFF };
M424DllMainStruct lbl_1_data_12C = {
{ 0.0f, 5500.0f, -3950.0f },
{ 0.0f, 1.0f, 0.0f },
0.0f
};
s32 lbl_1_data_148[2] = {0};