* Fix REL includes till mgmodedll * hsfload fixes * update aurora, fixups * Minor tweaks * update aurora * Mess byteswapping and comment out 3D render code
902 lines
25 KiB
C
902 lines
25 KiB
C
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/gamework.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/memory.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
#include "game/wipe.h"
|
|
#include "string.h"
|
|
|
|
#include "REL/m421Dll.h"
|
|
|
|
#ifndef __MWERKS__
|
|
#include "game/frand.h"
|
|
#endif
|
|
|
|
typedef struct M421DllWork {
|
|
u32 unk_00;
|
|
s32 unk_04;
|
|
s32 unk_08;
|
|
u32 unk_0C;
|
|
s32 unk_10;
|
|
u32 unk_14;
|
|
u32 unk_18;
|
|
u32 unk_1C;
|
|
u32 unk_20;
|
|
u32 unk24;
|
|
u32 unk_28;
|
|
u32 unk_2C;
|
|
s32 unk_30[4];
|
|
s32 unk_40[4];
|
|
s32 unk_50[4];
|
|
u32 unk_60;
|
|
u32 unk_64;
|
|
u32 unk_68;
|
|
u32 unk_6C;
|
|
s32 unk_70;
|
|
} M421DllWork; /* size = 0x74 */
|
|
|
|
void fn_1_10EC(omObjData *object);
|
|
void fn_1_142C(omObjData *object);
|
|
void fn_1_1850(omObjData *object);
|
|
void fn_1_1C90(omObjData *object);
|
|
omObjFunc fn_1_213C(Process *process, omObjData *object);
|
|
void fn_1_21AC(omObjData *object);
|
|
omObjFunc fn_1_2A28(Process *process, omObjData *object);
|
|
void fn_1_2BB8(omObjData *object);
|
|
void fn_1_3020(Process *process);
|
|
void fn_1_30D0(omObjData *object);
|
|
void fn_1_3334(omObjData *object);
|
|
void fn_1_335C(omObjData *object);
|
|
void fn_1_38FC(ModelData *model, Mtx mtx);
|
|
void fn_1_3B50(u32 arg0);
|
|
M421DllCameraStruct *fn_1_3B78(s32 arg0);
|
|
M421DllCameraStruct *fn_1_3CB0(u32 arg0);
|
|
float fn_1_4478(float arg8, float arg9, float argA);
|
|
void fn_1_4A0(omObjData *object);
|
|
void fn_1_784(omObjData *object);
|
|
void fn_1_8B8(omObjData *object);
|
|
void fn_1_CBC(omObjData *object);
|
|
|
|
Vec lbl_1_data_0 = { 100.0f, 800.0f, -100.0f };
|
|
Vec lbl_1_data_C = { 0.3f, -0.8f, 0.3f };
|
|
Vec lbl_1_data_18 = { 10.0f, 45.0f, 3500.0f };
|
|
GXColor lbl_1_data_24 = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
Vec lbl_1_data_28 = { 50.0f, 150000.0f, 50.0f };
|
|
Vec lbl_1_data_34 = { 0.0f, 1.0f, 0.0f };
|
|
Vec lbl_1_data_40 = { 0.0f, 0.0f, 0.0f };
|
|
Vec lbl_1_data_4C[3] = {
|
|
{ 0.0f, 200.0f, -50.0f },
|
|
{ 0.0f, 200.0f, -50.0f },
|
|
{ 0.0f, 200.0f, -50.0f },
|
|
};
|
|
Vec lbl_1_data_70[3] = {
|
|
{ -37.5f, 0.0f, 1500.0f },
|
|
{ -37.5f, 0.0f, 1500.0f },
|
|
{ -37.5f, 0.0f, 2300.0f },
|
|
};
|
|
s32 lbl_1_data_94[3] = { 0xF0, 0x1E, 0 };
|
|
GXColor lbl_1_data_A0 = { 0, 0, 0, 0 };
|
|
|
|
Process *lbl_1_bss_28;
|
|
omObjData *lbl_1_bss_24;
|
|
omObjData *lbl_1_bss_20;
|
|
// M421DllCameraStruct
|
|
omObjData *lbl_1_bss_1C;
|
|
s16 lbl_1_bss_18;
|
|
s16 lbl_1_bss_12[3];
|
|
s16 lbl_1_bss_10;
|
|
s16 lbl_1_bss_E;
|
|
s16 lbl_1_bss_C;
|
|
s32 lbl_1_bss_8;
|
|
s32 lbl_1_bss_4;
|
|
s32 lbl_1_bss_0;
|
|
|
|
void ObjectSetup(void)
|
|
{
|
|
Mtx sp2C;
|
|
Vec sp20 = { 0.0f, 0.0f, 0.0f };
|
|
Vec sp14 = { 0.0f, 0.0f, -1.0f };
|
|
Vec sp8;
|
|
Process *process;
|
|
LightData *lightData;
|
|
|
|
lbl_1_bss_8 = 0;
|
|
HuAudSndGrpSet(0x2E);
|
|
HuAudFXListnerSetEX(&sp20, &sp14, 11200.0f, 4166.6665f, 0.0f, 300.0f, 0.0f);
|
|
lbl_1_bss_4 = lbl_1_bss_0 = -1;
|
|
lbl_1_bss_18 = -1;
|
|
lbl_1_data_28.x = 200.0f;
|
|
lbl_1_data_28.y = 1200.0f;
|
|
lbl_1_data_28.z = 160.0f;
|
|
lbl_1_data_34.x = 0.0f;
|
|
lbl_1_data_34.y = 1.0f;
|
|
lbl_1_data_34.z = 0.0f;
|
|
lbl_1_data_40.x = 0.0f;
|
|
lbl_1_data_40.y = 0.0f;
|
|
lbl_1_data_40.z = 0.0f;
|
|
Hu3DShadowCreate(22.0f, 20.0f, 25000.0f);
|
|
Hu3DShadowTPLvlSet(0.625f);
|
|
Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40);
|
|
lbl_1_bss_12[0] = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24);
|
|
Hu3DGLightInfinitytSet(lbl_1_bss_12[0]);
|
|
lightData = &Hu3DGlobalLight[lbl_1_bss_12[0]];
|
|
lightData->unk_00 |= 0x8000;
|
|
lbl_1_data_18.x = 1.0f;
|
|
lbl_1_data_18.y = 0.0f;
|
|
lbl_1_data_18.z = 4200.0f;
|
|
sp8.x = sp8.z = 0.0f;
|
|
sp8.y = lbl_1_data_18.z;
|
|
mtxRot(sp2C, lbl_1_data_18.x, lbl_1_data_18.y, 0.0f);
|
|
MTXMultVec(sp2C, &sp8, &lbl_1_data_28);
|
|
Hu3DGLightPosAimSetV(lbl_1_bss_12[0], &lbl_1_data_28, &lbl_1_data_40);
|
|
Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40);
|
|
lbl_1_bss_10 = lbl_1_bss_E = lbl_1_bss_C = -1;
|
|
process = omInitObjMan(0x32, 0x2000);
|
|
lbl_1_bss_28 = process;
|
|
omGameSysInit(process);
|
|
fn_1_3020(process);
|
|
lbl_1_bss_24 = omAddObjEx(process, 0xA, 0, 0, -1, fn_1_4A0);
|
|
fn_1_B15C(process);
|
|
fn_1_4648(process);
|
|
}
|
|
|
|
void fn_1_4A0(omObjData *object)
|
|
{
|
|
M421DllWork *work;
|
|
|
|
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M421DllWork), MEMORY_DEFAULT_NUM);
|
|
work = object->data;
|
|
memset(work, 0, sizeof(M421DllWork));
|
|
work->unk_00 = 0;
|
|
work->unk_04 = 0;
|
|
work->unk_0C = 0;
|
|
work->unk_10 = 0;
|
|
work->unk_14 = 0;
|
|
work->unk_18 = 0;
|
|
work->unk_28 = 0;
|
|
work->unk_2C = 0;
|
|
work->unk_08 = 0;
|
|
work->unk_64 = 2;
|
|
work->unk_50[0] = work->unk_50[1] = work->unk_50[2] = work->unk_50[3] = -1;
|
|
work->unk_68 = 0;
|
|
work->unk_70 = 0;
|
|
object->func = fn_1_8B8;
|
|
}
|
|
|
|
void fn_1_578(omObjData *object)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
M421DllCameraStruct *var_r31;
|
|
|
|
M421DllWork *work = object->data;
|
|
work->unk_04++;
|
|
work->unk_10++;
|
|
work->unk_18++;
|
|
work->unk_2C++;
|
|
if ((omSysExitReq != 0) && (work->unk_00 != 5)) {
|
|
work->unk_00 = 4;
|
|
fn_1_784(object);
|
|
}
|
|
var_r31 = fn_1_3B78(1);
|
|
sp8.x = -(sind(var_r31->unk_28.y) * cosd(var_r31->unk_28.x));
|
|
sp8.y = -(-sind(var_r31->unk_28.x));
|
|
sp8.z = -(cosd(var_r31->unk_28.y) * cosd(var_r31->unk_28.x));
|
|
sp14.x = var_r31->unk_1C.x - (sp8.x * var_r31->unk_34);
|
|
sp14.y = var_r31->unk_1C.y - (sp8.y * var_r31->unk_34);
|
|
sp14.z = var_r31->unk_1C.z - (sp8.z * var_r31->unk_34);
|
|
HuAudFXListnerUpdate(&sp14, &sp8);
|
|
}
|
|
|
|
void fn_1_784(omObjData *object)
|
|
{
|
|
M421DllWork *work = object->data;
|
|
|
|
if (work->unk_08 == 0) {
|
|
switch (work->unk_00) {
|
|
case 0:
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x3C);
|
|
work->unk_00 = 1;
|
|
work->unk_10 = 0;
|
|
object->func = fn_1_213C(lbl_1_bss_28, object);
|
|
break;
|
|
case 1:
|
|
work->unk_00 = 2;
|
|
work->unk_18 = 0;
|
|
object->func = fn_1_142C;
|
|
break;
|
|
case 2:
|
|
work->unk_00 = 3;
|
|
work->unk_2C = 0;
|
|
object->func = fn_1_2A28(lbl_1_bss_28, object);
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
work->unk_08 = 1;
|
|
work->unk_00 = 5;
|
|
object->func = fn_1_CBC;
|
|
break;
|
|
case 5:
|
|
default:
|
|
work->unk_00 = 5;
|
|
object->func = fn_1_10EC;
|
|
}
|
|
work->unk_04 = 0;
|
|
}
|
|
}
|
|
|
|
void fn_1_8B8(omObjData *object)
|
|
{
|
|
fn_1_578(object);
|
|
fn_1_784(object);
|
|
}
|
|
|
|
void fn_1_CBC(omObjData *object)
|
|
{
|
|
M421DllWork *work = object->data;
|
|
fn_1_578(object);
|
|
if (WipeStatGet() == 0) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x3C);
|
|
work->unk_08 = 0;
|
|
fn_1_784(object);
|
|
}
|
|
}
|
|
|
|
void fn_1_10EC(omObjData *object)
|
|
{
|
|
fn_1_578(object);
|
|
if (WipeStatGet() == 0) {
|
|
fn_1_48B0();
|
|
fn_1_B1BC();
|
|
MGSeqKillAll();
|
|
HuAudFadeOut(1);
|
|
omOvlReturnEx(1, 1);
|
|
}
|
|
}
|
|
|
|
void fn_1_142C(omObjData *object)
|
|
{
|
|
M421DllWork *work = object->data;
|
|
fn_1_578(object);
|
|
switch (work->unk_14) {
|
|
case 0:
|
|
work->unk_1C = 0x2D;
|
|
work->unk_20 = 0x3C;
|
|
lbl_1_bss_10 = MGSeqCreate(3, 0);
|
|
MGSeqPosSet(lbl_1_bss_10, 320.0f, 240.0f);
|
|
lbl_1_bss_18 = -1;
|
|
work->unk_14 = 1;
|
|
work->unk_18 = 0;
|
|
break;
|
|
case 1:
|
|
if ((lbl_1_bss_4 < 0) && ((MGSeqStatGet(lbl_1_bss_10) & 0x10) != 0)) {
|
|
lbl_1_bss_4 = HuAudSeqPlay(0x48);
|
|
}
|
|
if (MGSeqStatGet(lbl_1_bss_10) == 0 && (work->unk_08 == 0)) {
|
|
work->unk_14 = 2;
|
|
work->unk_18 = 0;
|
|
object->func = fn_1_1850;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void fn_1_1850(omObjData *object)
|
|
{
|
|
M421DllWork *work = object->data;
|
|
s32 var_r26 = 0;
|
|
fn_1_578(object);
|
|
if (--work->unk_20 == 0) {
|
|
work->unk_20 = 0x3C;
|
|
work->unk_1C--;
|
|
if ((work->unk_1C == 0) && (work->unk_64 == 2)) {
|
|
work->unk_64 = 1;
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
if (lbl_1_bss_18 < 0) {
|
|
lbl_1_bss_18 = MGSeqCreate(1, work->unk_1C, -1, -1);
|
|
}
|
|
MGSeqParamSet(lbl_1_bss_18, 1, work->unk_1C);
|
|
if (work->unk_64 != 2) {
|
|
var_r26 = 1;
|
|
}
|
|
if (var_r26 != 0) {
|
|
lbl_1_bss_E = MGSeqCreate(3, 1);
|
|
MGSeqPosSet(lbl_1_bss_E, 320.0f, 240.0f);
|
|
HuAudSeqFadeOut(lbl_1_bss_4, 0x64);
|
|
work->unk_14 = 3;
|
|
work->unk_18 = 0;
|
|
if (work->unk_08 == 0) {
|
|
object->func = fn_1_1C90;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_1C90(omObjData *object)
|
|
{
|
|
M421DllWork *work = object->data;
|
|
s32 var_r25 = 0;
|
|
if (lbl_1_bss_18 >= 0) {
|
|
MGSeqParamSet(lbl_1_bss_18, 2, -1);
|
|
lbl_1_bss_18 = -1;
|
|
}
|
|
fn_1_578(object);
|
|
if (work->unk_14 == 3) {
|
|
var_r25 = 1;
|
|
if ((MGSeqStatGet(lbl_1_bss_E) == 0) && (work->unk_68 == 0x1111) && (var_r25 != 0)) {
|
|
work->unk_14 = 4;
|
|
work->unk_18 = 0;
|
|
}
|
|
}
|
|
else {
|
|
work->unk_14 = 5;
|
|
work->unk_18 = 0;
|
|
fn_1_784(object);
|
|
}
|
|
}
|
|
|
|
omObjFunc fn_1_213C(Process *process, omObjData *object)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
|
|
object->work[0] = object->work[1] = 0;
|
|
fn_1_3B50(1);
|
|
var_r31 = fn_1_3CB0(0);
|
|
var_r31->unk_84 = 1.0f;
|
|
var_r31->unk_94 = 0;
|
|
return fn_1_21AC;
|
|
}
|
|
|
|
void fn_1_21AC(omObjData *object)
|
|
{
|
|
Vec sp20;
|
|
float var_f31;
|
|
M421DllCameraStruct *var_r30;
|
|
M421DllWork *work;
|
|
|
|
work = object->data;
|
|
fn_1_578(object);
|
|
work->unk_0C = 1;
|
|
object->work[0]++;
|
|
var_f31 = (float)object->work[0] / lbl_1_data_94[object->work[1]];
|
|
VECSubtract(&lbl_1_data_4C[object->work[1] + 1], &lbl_1_data_4C[object->work[1]], &sp20);
|
|
VECScale(&sp20, &sp20, var_f31);
|
|
VECAdd(&lbl_1_data_4C[object->work[1]], &sp20, &sp20);
|
|
Center.x = sp20.x;
|
|
Center.y = sp20.y;
|
|
Center.z = sp20.z;
|
|
VECSubtract(&lbl_1_data_70[object->work[1] + 1], &lbl_1_data_70[object->work[1]], &sp20);
|
|
VECScale(&sp20, &sp20, var_f31);
|
|
VECAdd(&lbl_1_data_70[object->work[1]], &sp20, &sp20);
|
|
CRot.x = sp20.x;
|
|
CRot.y = sp20.y;
|
|
CRot.z = 0.0f;
|
|
CZoom = sp20.z;
|
|
var_r30 = fn_1_3CB0(0);
|
|
var_r30->unk_1C = Center;
|
|
var_r30->unk_28 = CRot;
|
|
var_r30->unk_34 = CZoom;
|
|
var_r30->unk_94++;
|
|
if (var_r30->unk_94 > 180.0f) {
|
|
var_r30->unk_84 -= 0.025000002f;
|
|
if (var_r30->unk_84 < 0.0f) {
|
|
var_r30->unk_84 = 0.0f;
|
|
}
|
|
var_r30->unk_1C.x += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
|
|
var_r30->unk_1C.y += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
|
|
var_r30->unk_1C.z += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
|
|
}
|
|
if (var_f31 >= 1.0f) {
|
|
object->work[0] = 0;
|
|
object->work[1]++;
|
|
if (lbl_1_data_94[object->work[1]] == 0) {
|
|
work->unk_0C = 2;
|
|
fn_1_784(object);
|
|
}
|
|
}
|
|
}
|
|
|
|
omObjFunc fn_1_2A28(Process *process, omObjData *object)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r30;
|
|
M421DllWork *var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r29 = object->data;
|
|
var_r28 = 1;
|
|
var_r31 = fn_1_3CB0(0);
|
|
if (var_r29->unk_64 == 1) {
|
|
var_r28 = 0;
|
|
}
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
var_r29->unk_50[var_r30] = -1;
|
|
if ((var_r29->unk_40[var_r30] == 0) == var_r28) {
|
|
var_r29->unk_50[var_r30] = var_r29->unk_30[var_r30];
|
|
}
|
|
}
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
if (var_r29->unk_50[var_r30] >= 0) {
|
|
GWPlayerCoinWinAdd(var_r30, 10);
|
|
}
|
|
}
|
|
var_r31->unk_54 = 0.0f;
|
|
var_r31->unk_58 = 150.0f;
|
|
var_r31->unk_5C = 0.0f;
|
|
var_r31->unk_60 = -30.0f;
|
|
var_r31->unk_64 = 0.0f;
|
|
var_r31->unk_68 = 1000.0f;
|
|
var_r31->unk_84 = 0.0f;
|
|
return fn_1_2BB8;
|
|
}
|
|
|
|
void fn_1_2BB8(omObjData *var_r29)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
M421DllWork *var_r28;
|
|
|
|
var_r28 = var_r29->data;
|
|
var_r31 = fn_1_3CB0(0);
|
|
fn_1_578(var_r29);
|
|
var_r31->unk_84 += 0.0016666668f;
|
|
if (var_r31->unk_84 > 0.1f) {
|
|
var_r31->unk_84 = 0.1f;
|
|
}
|
|
var_r31->unk_1C.y += var_r31->unk_84 * (var_r31->unk_58 - var_r31->unk_1C.y);
|
|
var_r31->unk_1C.z += var_r31->unk_84 * (var_r31->unk_5C - var_r31->unk_1C.z);
|
|
var_r31->unk_28.x = fn_1_4478(var_r31->unk_28.x, var_r31->unk_60, var_r31->unk_84);
|
|
var_r31->unk_34 += var_r31->unk_84 * (var_r31->unk_68 - var_r31->unk_34);
|
|
if (var_r28->unk_6C == 0x1111) {
|
|
var_r28->unk_28 = 1;
|
|
if (lbl_1_bss_0 < 0) {
|
|
lbl_1_bss_0 = HuAudSStreamPlay(1);
|
|
}
|
|
if (lbl_1_bss_C < 0) {
|
|
lbl_1_bss_C = MGSeqCreate(5, 3, var_r28->unk_50[0], var_r28->unk_50[1], var_r28->unk_50[2], var_r28->unk_50[3]);
|
|
return;
|
|
}
|
|
if ((MGSeqStatGet(lbl_1_bss_C) == 0) && (var_r28->unk_2C >= 210.0f)) {
|
|
var_r28->unk_28 = 2;
|
|
fn_1_784(var_r29);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_3020(Process *process)
|
|
{
|
|
Hu3DCameraCreate(0x1F);
|
|
lbl_1_bss_20 = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutViewMulti);
|
|
lbl_1_bss_20->work[0] = 5;
|
|
lbl_1_bss_1C = omAddObjEx(process, 0xC, 1, 0, -1, fn_1_30D0);
|
|
lbl_1_bss_1C->work[0] = 0;
|
|
}
|
|
|
|
void fn_1_30D0(omObjData *object)
|
|
{
|
|
UnkM421DllStruct sp1C[5] = {
|
|
{ 320.0f, 240.0f, 640.0f, 480.0f },
|
|
{ 160.0f, 120.0f, 320.0f, 240.0f },
|
|
{ 160.0f, 360.0f, 320.0f, 240.0f },
|
|
{ 480.0f, 120.0f, 320.0f, 240.0f },
|
|
{ 480.0f, 360.0f, 320.0f, 240.0f },
|
|
};
|
|
s32 sp8[5] = { 1, 2, 4, 8, 16 };
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r29;
|
|
M421DllCameraStruct *var_r28;
|
|
|
|
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M421DllCameraStruct), MEMORY_DEFAULT_NUM);
|
|
var_r28 = object->data;
|
|
memset(var_r28, 0, 10 * sizeof(M421DllCameraStruct));
|
|
object->model[0] = Hu3DHookFuncCreate(fn_1_38FC);
|
|
Hu3DModelLayerSet(object->model[0], 0);
|
|
Hu3DModelCameraSet(object->model[0], 0x1E);
|
|
for (var_r31 = var_r28, var_r29 = 0; var_r29 < 5; var_r29++, var_r31++) {
|
|
var_r31->unk_00 = 1;
|
|
var_r31->unk_04 = var_r29 * 0x64;
|
|
var_r31->unk_10 = 41.5f;
|
|
var_r31->unk_14 = 100.0f;
|
|
var_r31->unk_18 = 5500.0f;
|
|
var_r31->unk_1C.x = 0.0f;
|
|
var_r31->unk_1C.y = 0.0f;
|
|
var_r31->unk_1C.z = 0.0f;
|
|
var_r31->unk_28.x = -15.0f;
|
|
var_r31->unk_28.y = 0.0f;
|
|
var_r31->unk_28.z = 0.0f;
|
|
var_r31->unk_34 = 1000.0f;
|
|
var_r31->unk_40 = 1.0f;
|
|
var_r31->unk_44.unk_00 = sp1C[var_r29].unk_00;
|
|
var_r31->unk_44.unk_04 = sp1C[var_r29].unk_04;
|
|
var_r31->unk_44.unk_08 = sp1C[var_r29].unk_08;
|
|
var_r31->unk_44.unk_0C = sp1C[var_r29].unk_0C;
|
|
var_r31->unk_3C = var_r31->unk_0C = sp8[var_r29];
|
|
var_r31->unk_08 = var_r29;
|
|
var_r31->unk_38 = var_r29;
|
|
}
|
|
object->work[1] = 0;
|
|
object->work[0]++;
|
|
fn_1_335C(object);
|
|
object->func = fn_1_3334;
|
|
}
|
|
|
|
void fn_1_3334(omObjData *object)
|
|
{
|
|
fn_1_335C(object);
|
|
}
|
|
|
|
void fn_1_335C(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
M421DllCameraStruct *var_r27;
|
|
u32 var_r26;
|
|
u32 var_r25;
|
|
s32 var_r24;
|
|
u32 var_r23;
|
|
u32 var_r22;
|
|
u32 var_r21;
|
|
|
|
var_r27 = object->data;
|
|
{
|
|
s32 sp40[4] = { 2, 4, 8, 16 };
|
|
u32 sp30[4];
|
|
s32 sp20[4];
|
|
float sp10[4];
|
|
float sp8[2];
|
|
var_r24 = 0;
|
|
var_r26 = 0;
|
|
memcpy(&var_r27[5], var_r27, 5 * sizeof(M421DllCameraStruct));
|
|
switch (object->work[1]) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
var_r26 |= 1;
|
|
break;
|
|
case 2:
|
|
var_r26 |= 1;
|
|
case 3:
|
|
var_r24 = 1;
|
|
case 4:
|
|
var_r26 |= 0x1E;
|
|
break;
|
|
}
|
|
if (var_r24 != 0) {
|
|
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
else {
|
|
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
sp30[var_r30] = var_r27[var_r30 + 6].unk_04;
|
|
sp20[var_r30] = var_r30;
|
|
}
|
|
for (var_r30 = 0; var_r30 < 3; var_r30++) {
|
|
for (var_r29 = var_r30 + 1; var_r29 < 4; var_r29++) {
|
|
if ((var_r30 != var_r29) && (sp30[var_r30] > sp30[var_r29])) {
|
|
var_r25 = sp30[var_r30];
|
|
sp30[var_r30] = sp30[var_r29];
|
|
sp30[var_r29] = var_r25;
|
|
var_r25 = sp20[var_r30];
|
|
sp20[var_r30] = sp20[var_r29];
|
|
sp20[var_r29] = var_r25;
|
|
}
|
|
}
|
|
}
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
var_r27[sp20[var_r30] + 6].unk_3C = sp40[var_r30];
|
|
var_r27[sp20[var_r30] + 6].unk_38 = var_r30 + 1;
|
|
}
|
|
|
|
for (var_r31 = &var_r27[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) {
|
|
if ((var_r31->unk_00 == 0) || ((var_r26 & var_r31->unk_0C) == 0)) {
|
|
Hu3DCamera[var_r31->unk_38].fov = -1.0f;
|
|
}
|
|
else {
|
|
var_f31 = 1.2f * ((var_r31->unk_44.unk_08 / 640.0f) / (var_r31->unk_44.unk_0C / 480.0f));
|
|
sp10[2] = var_r31->unk_44.unk_08 * var_r31->unk_40;
|
|
sp10[3] = var_r31->unk_44.unk_0C * var_r31->unk_40;
|
|
Hu3DCameraPerspectiveSet(var_r31->unk_3C, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18, var_f31);
|
|
Hu3DCameraViewportSet(var_r31->unk_3C, var_r31->unk_44.unk_00 - (0.5f * sp10[2]), var_r31->unk_44.unk_04 - (0.5f * sp10[3]), sp10[2],
|
|
sp10[3], 0.0f, 1.0f);
|
|
sp10[0] = var_r31->unk_44.unk_00 - (0.5f * sp10[2]);
|
|
sp10[1] = var_r31->unk_44.unk_04 - (0.5f * sp10[3]);
|
|
sp8[0] = var_r31->unk_44.unk_00 + (0.5f * sp10[2]);
|
|
sp8[1] = var_r31->unk_44.unk_04 + (0.5f * sp10[3]);
|
|
if (sp10[0] < 0.0f) {
|
|
sp10[0] = 0.0f;
|
|
}
|
|
if (sp10[1] < 0.0f) {
|
|
sp10[1] = 0.0f;
|
|
}
|
|
if (sp8[0] > 640.0f) {
|
|
sp8[0] = 640.0f;
|
|
}
|
|
if (sp8[1] > 480.0f) {
|
|
sp8[1] = 480.0f;
|
|
}
|
|
sp8[0] -= sp10[0];
|
|
sp8[1] -= sp10[1];
|
|
var_r21 = sp8[1];
|
|
var_r22 = sp8[0];
|
|
var_r23 = sp10[1];
|
|
Hu3DCameraScissorSet(var_r31->unk_3C, sp10[0], var_r23, var_r22, var_r21);
|
|
var_r29 = var_r31->unk_38;
|
|
CenterM[var_r29].x = var_r31->unk_1C.x;
|
|
CenterM[var_r29].y = var_r31->unk_1C.y;
|
|
CenterM[var_r29].z = var_r31->unk_1C.z;
|
|
CRotM[var_r29].x = var_r31->unk_28.x;
|
|
CRotM[var_r29].y = var_r31->unk_28.y;
|
|
CRotM[var_r29].z = var_r31->unk_28.z;
|
|
CZoomM[var_r29] = var_r31->unk_34;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_38FC(ModelData *model, Mtx mtx)
|
|
{
|
|
Mtx spC;
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
MTXIdentity(spC);
|
|
GXLoadPosMtxImm(spC, 0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevColor(GX_TEVREG0, lbl_1_data_A0);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
|
|
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_ZERO, GX_CA_ZERO, GX_CA_KONST);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
|
|
GXSetZMode(GX_TRUE, GX_ALWAYS, GX_TRUE);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
var_f31 = 4125.0f;
|
|
var_f30 = 2750.0f;
|
|
var_f29 = 5494.5f;
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3f32(-var_f31, var_f30, -var_f29);
|
|
GXPosition3f32(var_f31, var_f30, -var_f29);
|
|
GXPosition3f32(var_f31, -var_f30, -var_f29);
|
|
GXPosition3f32(-var_f31, -var_f30, -var_f29);
|
|
}
|
|
|
|
void fn_1_3B50(u32 arg0)
|
|
{
|
|
lbl_1_bss_1C->work[1] = arg0;
|
|
}
|
|
|
|
u32 fn_1_3B64(void)
|
|
{
|
|
return lbl_1_bss_1C->work[1];
|
|
}
|
|
|
|
M421DllCameraStruct *fn_1_3B78(s32 arg0)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r30;
|
|
M421DllCameraStruct *var_r29;
|
|
|
|
var_r29 = lbl_1_bss_1C->data;
|
|
for (var_r31 = var_r29, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) {
|
|
if ((var_r31->unk_0C & arg0) != 0) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r30 >= 5) {
|
|
OSReport("M421:Camera Flag Error!!\n");
|
|
return NULL;
|
|
}
|
|
return var_r31;
|
|
}
|
|
|
|
M421DllCameraStruct *fn_1_3C14(s32 arg0)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r30;
|
|
M421DllCameraStruct *var_r29;
|
|
|
|
var_r29 = lbl_1_bss_1C->data;
|
|
for (var_r31 = &var_r29[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) {
|
|
if ((var_r31->unk_0C & arg0) != 0) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r30 >= 5) {
|
|
OSReport("M421:Camera Flag Error!!\n");
|
|
return NULL;
|
|
}
|
|
return var_r31;
|
|
}
|
|
|
|
M421DllCameraStruct *fn_1_3CB0(u32 arg0)
|
|
{
|
|
M421DllCameraStruct *var_r31 = lbl_1_bss_1C->data;
|
|
if (arg0 >= 5) {
|
|
OSReport("M421:Camera No. Error!!\n");
|
|
return NULL;
|
|
}
|
|
return &var_r31[arg0];
|
|
}
|
|
|
|
M421DllCameraStruct *fn_1_3D18(u32 arg0)
|
|
{
|
|
M421DllCameraStruct *var_r31 = lbl_1_bss_1C->data;
|
|
if (arg0 >= 5) {
|
|
OSReport("M421:Camera No. Error!!\n");
|
|
return NULL;
|
|
}
|
|
return &var_r31[arg0 + 5];
|
|
}
|
|
|
|
void fn_1_3D84(s32 arg0, s32 arg1)
|
|
{
|
|
M421DllCameraStruct *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
M421DllCameraStruct *var_r28;
|
|
M421DllCameraStruct *var_r27;
|
|
|
|
var_r29 = 0;
|
|
if (arg0 >= 0) {
|
|
var_r27 = lbl_1_bss_1C->data;
|
|
var_r28 = &var_r27[5];
|
|
for (var_r31 = var_r28, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) {
|
|
if ((var_r31->unk_0C & arg1) != 0) {
|
|
var_r29 |= var_r31->unk_3C;
|
|
}
|
|
}
|
|
Hu3DModelCameraSet(arg0, var_r29);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_3E1C(void)
|
|
{
|
|
return ((M421DllWork *)lbl_1_bss_24->data)->unk_00;
|
|
}
|
|
|
|
u32 fn_1_3E34(void)
|
|
{
|
|
return ((M421DllWork *)lbl_1_bss_24->data)->unk_0C;
|
|
}
|
|
|
|
u32 fn_1_3E4C(void)
|
|
{
|
|
return ((M421DllWork *)lbl_1_bss_24->data)->unk_14;
|
|
}
|
|
|
|
u32 fn_1_3E64(void)
|
|
{
|
|
return ((M421DllWork *)lbl_1_bss_24->data)->unk_28;
|
|
}
|
|
|
|
s32 fn_1_3E7C(s32 arg0)
|
|
{
|
|
M421DllWork *work = lbl_1_bss_24->data;
|
|
|
|
if (work->unk_64 != 2) {
|
|
return 0;
|
|
}
|
|
work->unk_60 |= (1 << ((arg0 & 3) * 4));
|
|
if (((work->unk_60 & 0x1110) == 0x1110) && (work->unk_64 == 2)) {
|
|
work->unk_64 = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
s32 fn_1_3EF8(s32 arg0)
|
|
{
|
|
M421DllWork *work = lbl_1_bss_24->data;
|
|
return work->unk_50[arg0];
|
|
}
|
|
|
|
void fn_1_3F28(s32 arg0, s32 arg1, s32 arg2)
|
|
{
|
|
M421DllWork *work = lbl_1_bss_24->data;
|
|
arg0 &= 3;
|
|
work->unk_40[arg0] = arg1;
|
|
work->unk_30[arg0] = arg2;
|
|
}
|
|
|
|
void fn_1_3F68(s32 arg0)
|
|
{
|
|
((M421DllWork *)lbl_1_bss_24->data)->unk_68 |= (1 << ((arg0 & 7) * 4));
|
|
}
|
|
|
|
void fn_1_3F98(s32 arg0)
|
|
{
|
|
((M421DllWork *)lbl_1_bss_24->data)->unk_6C |= (1 << ((arg0 & 3) * 4));
|
|
}
|
|
|
|
void fn_1_3FC8(s32 arg0)
|
|
{
|
|
((M421DllWork *)lbl_1_bss_24->data)->unk_70 |= (1 << ((arg0 & 3) * 4));
|
|
}
|
|
|
|
s32 fn_1_3FF8(void)
|
|
{
|
|
return MGSeqStatGet(lbl_1_bss_E) == 0;
|
|
}
|
|
|
|
void fn_1_4030(Vec *sp8, Vec *var_r31)
|
|
{
|
|
Vec sp10;
|
|
|
|
VECSubtract(var_r31, sp8, &sp10);
|
|
Center = *var_r31;
|
|
CRot.x = atan2d(sp10.y, sqrtf((sp10.x * sp10.x) + (sp10.z * sp10.z)));
|
|
CRot.y = atan2d(-sp10.x, -sp10.z);
|
|
CRot.z = 0.0f;
|
|
CZoom = VECMag(&sp10);
|
|
}
|
|
|
|
void fn_1_4238(float arg8, float arg9, float argA, float argB, float argC, float argD)
|
|
{
|
|
Vec sp3C;
|
|
Vec sp30;
|
|
Vec sp24;
|
|
|
|
sp3C.x = arg8;
|
|
sp3C.y = arg9;
|
|
sp3C.z = argA;
|
|
sp30.x = argB;
|
|
sp30.y = argC;
|
|
sp30.z = argD;
|
|
VECSubtract(&sp30, &sp3C, &sp24);
|
|
Center = sp30;
|
|
CRot.x = atan2d(sp24.y, sqrtf((sp24.x * sp24.x) + (sp24.z * sp24.z)));
|
|
CRot.y = atan2d(-sp24.x, -sp24.z);
|
|
CRot.z = 0.0f;
|
|
CZoom = VECMag(&sp24);
|
|
}
|
|
|
|
float fn_1_4478(float arg8, float arg9, float argA)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
var_f30 = fmod(arg9 - arg8, 360.0);
|
|
var_f31 = var_f30;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
var_f29 = fmod(arg8 + (argA * var_f31), 360.0);
|
|
var_f31 = var_f29;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
return var_f31;
|
|
}
|
|
|
|
float fn_1_4594(float arg8, float arg9)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
var_f30 = fmod(arg9 - arg8, 360.0);
|
|
var_f31 = var_f30;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
return var_f31;
|
|
}
|