Named most things in REL/option
This commit is contained in:
parent
8b0059eb77
commit
dba3534504
11 changed files with 2725 additions and 2511 deletions
|
|
@ -6,232 +6,248 @@
|
|||
#include "game/process.h"
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "math.h"
|
||||
#include "ext_math.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec unk00;
|
||||
/* 0x0C */ Vec unk0C;
|
||||
/* 0x18 */ float unk18;
|
||||
/* 0x1C */ float unk1C;
|
||||
/* 0x20 */ float unk20;
|
||||
/* 0x24 */ float unk24;
|
||||
/* 0x28 */ float unk28;
|
||||
/* 0x2C */ Vec unk2C;
|
||||
/* 0x38 */ Vec unk38;
|
||||
/* 0x00 */ Vec eyePos;
|
||||
/* 0x0C */ Vec lookingAt;
|
||||
/* 0x18 */ Vec tilt;
|
||||
/* 0x24 */ float zoom;
|
||||
/* 0x28 */ float rot;
|
||||
/* 0x2C */ Vec prevEyePos;
|
||||
/* 0x38 */ Vec prevLookingAt;
|
||||
/* 0x44 */ char unk44[0xC];
|
||||
/* 0x50 */ float unk50;
|
||||
/* 0x54 */ float unk54;
|
||||
/* 0x58 */ Vec unk58;
|
||||
/* 0x64 */ Vec unk64;
|
||||
/* 0x50 */ float prevZoom;
|
||||
/* 0x54 */ float prevRot;
|
||||
/* 0x58 */ Vec eyePosTarget;
|
||||
/* 0x64 */ Vec lookingAtTarget;
|
||||
/* 0x70 */ char unk70[0xC];
|
||||
/* 0x7C */ float unk7C;
|
||||
/* 0x80 */ float unk80;
|
||||
/* 0x84 */ float unk84;
|
||||
/* 0x88 */ float unk88;
|
||||
/* 0x8C */ float unk8C;
|
||||
/* 0x90 */ float unk90;
|
||||
/* 0x94 */ float unk94;
|
||||
/* 0x98 */ float unk98;
|
||||
} UnkCameraDataStruct; // Size 0x9C
|
||||
/* 0x7C */ float zoomTarget;
|
||||
/* 0x80 */ float rotTarget;
|
||||
/* 0x84 */ float eyeVelocity;
|
||||
/* 0x88 */ float eyeSpeed;
|
||||
/* 0x8C */ float lookingAtVelocity;
|
||||
/* 0x90 */ float lookingAtSpeed;
|
||||
/* 0x94 */ float rotVelocity;
|
||||
/* 0x98 */ float rotSpeed;
|
||||
} CameraWork; // Size 0x9C
|
||||
|
||||
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3);
|
||||
static void fn_1_D44(omObjData *arg0);
|
||||
static void fn_1_D6C(omObjData *arg0);
|
||||
static void fn_1_12E4(omObjData *arg0);
|
||||
static void fn_1_14E4(omObjData *arg0);
|
||||
static void fn_1_C58(omObjData *object, float *arg1, float *arg2, float *arg3);
|
||||
static void HandlerWrapper(omObjData *object);
|
||||
static void HandleCamera(omObjData *object);
|
||||
static void fn_1_12E4(omObjData *object);
|
||||
static void PrintDebugInfo(omObjData *object);
|
||||
|
||||
omObjData *lbl_1_bss_10;
|
||||
|
||||
static float pad_04_00000000_data[] = {
|
||||
0.0f, 500.0f, 0.0f,
|
||||
0.0f, -1.0f, 0.0f
|
||||
};
|
||||
static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f };
|
||||
|
||||
static s32 pad_04_00000018_data = -1;
|
||||
|
||||
omObjData *fn_1_7F8(void) {
|
||||
omObjData *var_r30;
|
||||
UnkCameraDataStruct *temp_r31;
|
||||
omObjData *fn_1_7F8(void)
|
||||
{
|
||||
omObjData *object;
|
||||
CameraWork *work;
|
||||
|
||||
var_r30 = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, fn_1_D44);
|
||||
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkCameraDataStruct), MEMORY_DEFAULT_NUM);
|
||||
var_r30->data = temp_r31;
|
||||
temp_r31->unk00.x = 0.0f;
|
||||
temp_r31->unk00.y = 0.0f;
|
||||
temp_r31->unk00.z = 0.0f;
|
||||
temp_r31->unk0C.x = 0.0f;
|
||||
temp_r31->unk0C.y = 0.0f;
|
||||
temp_r31->unk0C.z = 0.0f;
|
||||
temp_r31->unk18 = 0.0f;
|
||||
temp_r31->unk1C = 1.0f;
|
||||
temp_r31->unk20 = 0.0f;
|
||||
temp_r31->unk24 = 0.0f;
|
||||
temp_r31->unk28 = 0.0f;
|
||||
temp_r31->unk8C = 1.0f;
|
||||
temp_r31->unk84 = 1.0f;
|
||||
temp_r31->unk94 = 1.0f;
|
||||
object = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, HandlerWrapper);
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
|
||||
object->data = work;
|
||||
work->eyePos.x = 0.0f;
|
||||
work->eyePos.y = 0.0f;
|
||||
work->eyePos.z = 0.0f;
|
||||
work->lookingAt.x = 0.0f;
|
||||
work->lookingAt.y = 0.0f;
|
||||
work->lookingAt.z = 0.0f;
|
||||
work->tilt.x = 0.0f;
|
||||
work->tilt.y = 1.0f;
|
||||
work->tilt.z = 0.0f;
|
||||
work->zoom = 0.0f;
|
||||
work->rot = 0.0f;
|
||||
work->lookingAtVelocity = 1.0f;
|
||||
work->eyeVelocity = 1.0f;
|
||||
work->rotVelocity = 1.0f;
|
||||
Hu3DCameraCreate(1);
|
||||
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
|
||||
Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f);
|
||||
fn_1_B74(var_r30, 600.0f, 60.0f, 120.0f, 1);
|
||||
fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1);
|
||||
return var_r30;
|
||||
fn_1_B74(object, 600.0f, 60.0f, 120.0f, 1);
|
||||
fn_1_A6C(object, 180.0f, 120.0f, 0.0f, 1);
|
||||
return object;
|
||||
}
|
||||
|
||||
void fn_1_A3C(omObjData *arg0) {
|
||||
HuMemDirectFree(arg0->data);
|
||||
void fn_1_A3C(omObjData *object)
|
||||
{
|
||||
HuMemDirectFree(object->data);
|
||||
}
|
||||
|
||||
void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
|
||||
temp_r31->unk58.x = arg1;
|
||||
temp_r31->unk58.y = arg2;
|
||||
temp_r31->unk58.z = arg3;
|
||||
temp_r31->unk2C = temp_r31->unk00;
|
||||
temp_r31->unk84 = 0.0f;
|
||||
temp_r31->unk88 = 1.0f / arg4;
|
||||
work->eyePosTarget.x = x;
|
||||
work->eyePosTarget.y = y;
|
||||
work->eyePosTarget.z = z;
|
||||
work->prevEyePos = work->eyePos;
|
||||
work->eyeVelocity = 0.0f;
|
||||
work->eyeSpeed = 1.0f / duration;
|
||||
}
|
||||
|
||||
void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
|
||||
temp_r31->unk64.x = arg1;
|
||||
temp_r31->unk64.y = arg2;
|
||||
temp_r31->unk64.z = arg3;
|
||||
temp_r31->unk38 = temp_r31->unk0C;
|
||||
temp_r31->unk8C = 0.0f;
|
||||
temp_r31->unk90 = 1.0f / arg4;
|
||||
work->lookingAtTarget.x = x;
|
||||
work->lookingAtTarget.y = y;
|
||||
work->lookingAtTarget.z = z;
|
||||
work->prevLookingAt = work->lookingAt;
|
||||
work->lookingAtVelocity = 0.0f;
|
||||
work->lookingAtSpeed = 1.0f / duration;
|
||||
}
|
||||
|
||||
void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
|
||||
temp_r31->unk64.y = arg3;
|
||||
temp_r31->unk7C = arg1;
|
||||
temp_r31->unk80 = arg2;
|
||||
temp_r31->unk38.y = temp_r31->unk0C.y;
|
||||
temp_r31->unk50 = temp_r31->unk24;
|
||||
temp_r31->unk54 = temp_r31->unk28;
|
||||
temp_r31->unk94 = 0.0f;
|
||||
temp_r31->unk98 = 1.0f / arg4;
|
||||
work->lookingAtTarget.y = y;
|
||||
work->zoomTarget = zoom;
|
||||
work->rotTarget = rot;
|
||||
work->prevLookingAt.y = work->lookingAt.y;
|
||||
work->prevZoom = work->zoom;
|
||||
work->prevRot = work->rot;
|
||||
work->rotVelocity = 0.0f;
|
||||
work->rotSpeed = 1.0f / duration;
|
||||
}
|
||||
|
||||
float fn_1_BF8(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
float temp_f31;
|
||||
// GetZoom
|
||||
float fn_1_BF8(omObjData *object)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
float zoom;
|
||||
|
||||
temp_f31 = temp_r31->unk24;
|
||||
return temp_f31;
|
||||
zoom = work->zoom;
|
||||
return zoom;
|
||||
}
|
||||
|
||||
float fn_1_C28(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
float temp_f31;
|
||||
// GetRot
|
||||
float fn_1_C28(omObjData *object)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
float rot;
|
||||
|
||||
temp_f31 = temp_r31->unk28;
|
||||
return temp_f31;
|
||||
rot = work->rot;
|
||||
return rot;
|
||||
}
|
||||
|
||||
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
// GetEyePos
|
||||
static void fn_1_C58(omObjData *object, float *eyePosX, float *eyePosY, float *eyePosZ)
|
||||
{
|
||||
CameraWork *temp_r31 = object->data;
|
||||
|
||||
*arg1 = temp_r31->unk00.x;
|
||||
*arg2 = temp_r31->unk00.y;
|
||||
*arg3 = temp_r31->unk00.z;
|
||||
*eyePosX = temp_r31->eyePos.x;
|
||||
*eyePosY = temp_r31->eyePos.y;
|
||||
*eyePosZ = temp_r31->eyePos.z;
|
||||
}
|
||||
|
||||
void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
// GetLookingAt
|
||||
void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
|
||||
*arg1 = temp_r31->unk0C.x;
|
||||
*arg2 = temp_r31->unk0C.y;
|
||||
*arg3 = temp_r31->unk0C.z;
|
||||
*lookingAtX = work->lookingAt.x;
|
||||
*lookingAtY = work->lookingAt.y;
|
||||
*lookingAtZ = work->lookingAt.z;
|
||||
}
|
||||
|
||||
s32 fn_1_CB8(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
// CameraDone
|
||||
s32 fn_1_CB8(omObjData *object)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
s32 var_r30 = 1;
|
||||
s32 var_r29 = 1;
|
||||
|
||||
if (!(temp_r31->unk8C < 1.0f) && !(temp_r31->unk94 < 1.0f)) {
|
||||
if (!(work->lookingAtVelocity < 1.0f) && !(work->rotVelocity < 1.0f)) {
|
||||
var_r29 = 0;
|
||||
}
|
||||
if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) {
|
||||
if (var_r29 == 0 && !(work->eyeVelocity < 1.0f)) {
|
||||
var_r30 = 0;
|
||||
}
|
||||
return var_r30;
|
||||
}
|
||||
|
||||
static void fn_1_D44(omObjData *arg0) {
|
||||
fn_1_D6C(arg0);
|
||||
static void HandlerWrapper(omObjData *object)
|
||||
{
|
||||
HandleCamera(object);
|
||||
}
|
||||
|
||||
static void fn_1_D6C(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
static void HandleCamera(omObjData *object)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
float temp_f28;
|
||||
float temp_f31;
|
||||
float temp_f30;
|
||||
float xDiff;
|
||||
float zDiff;
|
||||
|
||||
if (temp_r31->unk84 < 1.0f) {
|
||||
temp_f28 = sin(90.0f * temp_r31->unk84 * M_PI / 180.0);
|
||||
temp_r31->unk00.x = temp_r31->unk2C.x + temp_f28 * (temp_r31->unk58.x - temp_r31->unk2C.x);
|
||||
temp_r31->unk00.y = temp_r31->unk2C.y + temp_f28 * (temp_r31->unk58.y - temp_r31->unk2C.y);
|
||||
temp_r31->unk00.z = temp_r31->unk2C.z + temp_f28 * (temp_r31->unk58.z - temp_r31->unk2C.z);
|
||||
if ((temp_r31->unk84 += temp_r31->unk88) >= 1.0f) {
|
||||
temp_r31->unk00 = temp_r31->unk58;
|
||||
if (work->eyeVelocity < 1.0f) {
|
||||
temp_f28 = sind(90.0f * work->eyeVelocity);
|
||||
work->eyePos.x = work->prevEyePos.x + temp_f28 * (work->eyePosTarget.x - work->prevEyePos.x);
|
||||
work->eyePos.y = work->prevEyePos.y + temp_f28 * (work->eyePosTarget.y - work->prevEyePos.y);
|
||||
work->eyePos.z = work->prevEyePos.z + temp_f28 * (work->eyePosTarget.z - work->prevEyePos.z);
|
||||
if ((work->eyeVelocity += work->eyeSpeed) >= 1.0f) {
|
||||
work->eyePos = work->eyePosTarget;
|
||||
}
|
||||
}
|
||||
if (temp_r31->unk8C < 1.0f) {
|
||||
temp_f28 = sin(90.0f * temp_r31->unk8C * M_PI / 180.0);
|
||||
temp_r31->unk0C.x = temp_r31->unk38.x + temp_f28 * (temp_r31->unk64.x - temp_r31->unk38.x);
|
||||
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y);
|
||||
temp_r31->unk0C.z = temp_r31->unk38.z + temp_f28 * (temp_r31->unk64.z - temp_r31->unk38.z);
|
||||
if ((temp_r31->unk8C += temp_r31->unk90) >= 1.0f) {
|
||||
temp_r31->unk0C = temp_r31->unk64;
|
||||
if (work->lookingAtVelocity < 1.0f) {
|
||||
temp_f28 = sind(90.0f * work->lookingAtVelocity);
|
||||
work->lookingAt.x = work->prevLookingAt.x + temp_f28 * (work->lookingAtTarget.x - work->prevLookingAt.x);
|
||||
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y);
|
||||
work->lookingAt.z = work->prevLookingAt.z + temp_f28 * (work->lookingAtTarget.z - work->prevLookingAt.z);
|
||||
if ((work->lookingAtVelocity += work->lookingAtSpeed) >= 1.0f) {
|
||||
work->lookingAt = work->lookingAtTarget;
|
||||
}
|
||||
}
|
||||
if (temp_r31->unk94 < 1.0f) {
|
||||
temp_f28 = sin(90.0f * temp_r31->unk94 * M_PI / 180.0);
|
||||
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y);
|
||||
temp_r31->unk24 = temp_r31->unk50 + temp_f28 * (temp_r31->unk7C - temp_r31->unk50);
|
||||
temp_r31->unk28 = temp_r31->unk54 + temp_f28 * (temp_r31->unk80 - temp_r31->unk54);
|
||||
if ((temp_r31->unk94 += temp_r31->unk98) >= 1.0f) {
|
||||
temp_r31->unk0C.y = temp_r31->unk64.y;
|
||||
temp_r31->unk24 = temp_r31->unk7C;
|
||||
temp_r31->unk28 = temp_r31->unk80;
|
||||
if (work->rotVelocity < 1.0f) {
|
||||
temp_f28 = sind(90.0f * work->rotVelocity);
|
||||
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y);
|
||||
work->zoom = work->prevZoom + temp_f28 * (work->zoomTarget - work->prevZoom);
|
||||
work->rot = work->prevRot + temp_f28 * (work->rotTarget - work->prevRot);
|
||||
if ((work->rotVelocity += work->rotSpeed) >= 1.0f) {
|
||||
work->lookingAt.y = work->lookingAtTarget.y;
|
||||
work->zoom = work->zoomTarget;
|
||||
work->rot = work->rotTarget;
|
||||
}
|
||||
temp_r31->unk0C.x = temp_r31->unk24 * -sin(temp_r31->unk28 * M_PI / 180.0);
|
||||
temp_r31->unk0C.z = temp_r31->unk24 * cos(temp_r31->unk28 * M_PI / 180.0);
|
||||
work->lookingAt.x = work->zoom * -sind(work->rot);
|
||||
work->lookingAt.z = work->zoom * cosd(work->rot);
|
||||
}
|
||||
temp_f31 = temp_r31->unk0C.x - temp_r31->unk00.x;
|
||||
temp_f30 = temp_r31->unk0C.z - temp_r31->unk00.z;
|
||||
temp_r31->unk24 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30);
|
||||
temp_r31->unk28 = fmod(-(180.0 * (atan2(temp_f31, temp_f30) / M_PI)), 360.0);
|
||||
if (temp_r31->unk28 < 0.0f) {
|
||||
temp_r31->unk28 += 360.0f;
|
||||
xDiff = work->lookingAt.x - work->eyePos.x;
|
||||
zDiff = work->lookingAt.z - work->eyePos.z;
|
||||
work->zoom = sqrtf(xDiff * xDiff + zDiff * zDiff);
|
||||
work->rot = fmod(-atan2d(xDiff, zDiff), 360.0);
|
||||
if (work->rot < 0.0f) {
|
||||
work->rot += 360.0f;
|
||||
}
|
||||
Hu3DCameraPosSet(1, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z, temp_r31->unk18, temp_r31->unk1C, temp_r31->unk20, temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z);
|
||||
|
||||
Hu3DCameraPosSet(1, work->eyePos.x, work->eyePos.y, work->eyePos.z, work->tilt.x, work->tilt.y, work->tilt.z, work->lookingAt.x,
|
||||
work->lookingAt.y, work->lookingAt.z);
|
||||
}
|
||||
|
||||
static void fn_1_12E4(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31;
|
||||
static void fn_1_12E4(omObjData *object)
|
||||
{
|
||||
CameraWork *work;
|
||||
|
||||
if (HuPadBtn[0] & 0xF) {
|
||||
temp_r31 = arg0->data;
|
||||
temp_r31->unk0C.x += 0.5f * HuPadStkX[0];
|
||||
temp_r31->unk0C.y += 0.5f * HuPadStkY[0];
|
||||
temp_r31->unk00.z += 0.5f * HuPadTrigL[0];
|
||||
temp_r31->unk00.z -= 0.5f * HuPadTrigR[0];
|
||||
temp_r31->unk00.x += 0.5f * HuPadSubStkY[0];
|
||||
temp_r31->unk00.y += 0.5f * HuPadSubStkX[0];
|
||||
work = object->data;
|
||||
work->lookingAt.x += 0.5f * HuPadStkX[0];
|
||||
work->lookingAt.y += 0.5f * HuPadStkY[0];
|
||||
work->eyePos.z += 0.5f * HuPadTrigL[0];
|
||||
work->eyePos.z -= 0.5f * HuPadTrigR[0];
|
||||
work->eyePos.x += 0.5f * HuPadSubStkY[0];
|
||||
work->eyePos.y += 0.5f * HuPadSubStkX[0];
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_14E4(omObjData *arg0) {
|
||||
UnkCameraDataStruct *temp_r31 = arg0->data;
|
||||
static void PrintDebugInfo(omObjData *object)
|
||||
{
|
||||
CameraWork *work = object->data;
|
||||
|
||||
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z);
|
||||
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z);
|
||||
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", temp_r31->unk24, temp_r31->unk28);
|
||||
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->lookingAt.x, work->lookingAt.y, work->lookingAt.z);
|
||||
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->eyePos.x, work->eyePos.y, work->eyePos.z);
|
||||
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,35 +6,34 @@
|
|||
#include "game/memory.h"
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "math.h"
|
||||
#include "ext_math.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 unk00;
|
||||
/* 0x04 */ s16 unk04;
|
||||
/* 0x00 */ s32 mode;
|
||||
/* 0x04 */ s16 motionIdx;
|
||||
/* 0x06 */ char unk06[2];
|
||||
/* 0x08 */ Vec unk08;
|
||||
/* 0x14 */ Vec unk14;
|
||||
/* 0x20 */ float unk20;
|
||||
/* 0x24 */ float unk24;
|
||||
/* 0x28 */ float unk28;
|
||||
/* 0x2C */ float unk2C;
|
||||
/* 0x30 */ float unk30;
|
||||
/* 0x34 */ float unk34;
|
||||
/* 0x38 */ float unk38;
|
||||
/* 0x3C */ float unk3C;
|
||||
/* 0x40 */ float unk40;
|
||||
/* 0x44 */ float unk44;
|
||||
/* 0x08 */ Vec pos;
|
||||
/* 0x14 */ Vec newPos;
|
||||
/* 0x20 */ Vec rot;
|
||||
/* 0x2C */ Vec posChange;
|
||||
/* 0x38 */ float distanceToMove;
|
||||
/* 0x3C */ float unkAngle;
|
||||
/* 0x40 */ float posToMoveTo;
|
||||
/* 0x44 */ float distFromCam;
|
||||
/* 0x48 */ char unk48[0xC];
|
||||
/* 0x54 */ float unk54;
|
||||
/* 0x58 */ float unk58;
|
||||
/* 0x54 */ float velocity;
|
||||
/* 0x58 */ float speed;
|
||||
/* 0x5C */ s32 unk5C;
|
||||
/* 0x60 */ s32 unk60;
|
||||
} UnkGuideDataStruct; // Size 0x64
|
||||
} GuideWork; // Size 0x64
|
||||
|
||||
static void fn_1_24A8(omObjData *arg0, s32 arg1);
|
||||
static s32 fn_1_24EC(omObjData *arg0);
|
||||
static void fn_1_25AC(omObjData *arg0);
|
||||
static void fn_1_2A18(omObjData *arg0);
|
||||
#define MODE_DISABLED 0
|
||||
#define MODE_HANDLE_GUIDE 1
|
||||
|
||||
static void ChangeMode(omObjData *object, s32 mode);
|
||||
static s32 GetMode(omObjData *object);
|
||||
static void HandleGuide(omObjData *object);
|
||||
static void UpdateGuide(omObjData *object);
|
||||
static float fn_1_2D00(float arg0, float arg1, float arg2);
|
||||
|
||||
omObjData *lbl_1_bss_20;
|
||||
|
|
@ -42,176 +41,184 @@ omObjData *lbl_1_bss_20;
|
|||
static const s32 lbl_1_rodata_E0[] = {
|
||||
DATA_MAKE_NUM(DATADIR_OPTION, 16),
|
||||
DATA_MAKE_NUM(DATADIR_OPTION, 17),
|
||||
DATA_MAKE_NUM(DATADIR_OPTION, 18)
|
||||
DATA_MAKE_NUM(DATADIR_OPTION, 18),
|
||||
};
|
||||
|
||||
static omObjFunc lbl_1_data_98[] = {
|
||||
NULL,
|
||||
fn_1_25AC
|
||||
};
|
||||
static omObjFunc modes[] = { NULL, HandleGuide };
|
||||
|
||||
omObjData *fn_1_21F8(void) {
|
||||
omObjData *var_r31;
|
||||
UnkGuideDataStruct *temp_r30;
|
||||
omObjData *fn_1_21F8(void)
|
||||
{
|
||||
omObjData *object;
|
||||
GuideWork *work;
|
||||
s32 i;
|
||||
|
||||
var_r31 = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL);
|
||||
temp_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkGuideDataStruct), MEMORY_DEFAULT_NUM);
|
||||
var_r31->data = temp_r30;
|
||||
temp_r30->unk08.x = -298.59f;
|
||||
temp_r30->unk08.z = 298.21f;
|
||||
temp_r30->unk08.y = 0.0f;
|
||||
temp_r30->unk20 = 0.0f;
|
||||
temp_r30->unk24 = 134.42f;
|
||||
temp_r30->unk28 = 0.0f;
|
||||
temp_r30->unk2C = 0.0f;
|
||||
temp_r30->unk34 = 0.0f;
|
||||
temp_r30->unk30 = 0.0f;
|
||||
var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12));
|
||||
Hu3DModelLayerSet(var_r31->model[0], 1);
|
||||
object = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL);
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
|
||||
object->data = work;
|
||||
work->pos.x = -298.59f;
|
||||
work->pos.z = 298.21f;
|
||||
work->pos.y = 0.0f;
|
||||
|
||||
work->rot.x = 0.0f;
|
||||
work->rot.y = 134.42f;
|
||||
work->rot.z = 0.0f;
|
||||
|
||||
work->posChange.x = 0.0f;
|
||||
work->posChange.z = 0.0f;
|
||||
work->posChange.y = 0.0f;
|
||||
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12));
|
||||
Hu3DModelLayerSet(object->model[0], 1);
|
||||
for (i = 0; i < 3; i++) {
|
||||
var_r31->motion[i] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA));
|
||||
object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA));
|
||||
}
|
||||
temp_r30->unk5C = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 0xC);
|
||||
temp_r30->unk60 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 0xC);
|
||||
work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC);
|
||||
work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC);
|
||||
CharModelLayerSetAll(1);
|
||||
Hu3DModelShadowSet(var_r31->model[0]);
|
||||
Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[0], 0.0f, 8.0f, 0x40000001);
|
||||
fn_1_24A8(var_r31, 0);
|
||||
fn_1_2A18(var_r31);
|
||||
return var_r31;
|
||||
Hu3DModelShadowSet(object->model[0]);
|
||||
Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001);
|
||||
ChangeMode(object, MODE_DISABLED);
|
||||
UpdateGuide(object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void fn_1_241C(omObjData *arg0) {
|
||||
UnkGuideDataStruct *temp_r29 = arg0->data;
|
||||
void fn_1_241C(omObjData *object)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(object->model[i]);
|
||||
}
|
||||
for (i = 0; i < 3; i++) {
|
||||
Hu3DMotionKill(arg0->motion[i]);
|
||||
Hu3DMotionKill(object->motion[i]);
|
||||
}
|
||||
HuMemDirectFree(temp_r29);
|
||||
HuMemDirectFree(work);
|
||||
}
|
||||
|
||||
static void fn_1_24A8(omObjData *arg0, s32 arg1) {
|
||||
UnkGuideDataStruct *temp_r31 = arg0->data;
|
||||
static void ChangeMode(omObjData *object, s32 mode)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
|
||||
temp_r31->unk00 = arg1;
|
||||
arg0->func = lbl_1_data_98[arg1];
|
||||
arg0->unk10 = 0;
|
||||
arg0->unk10 = 0;
|
||||
work->mode = mode;
|
||||
object->func = modes[mode];
|
||||
object->unk10 = 0;
|
||||
object->unk10 = 0;
|
||||
}
|
||||
|
||||
static s32 fn_1_24EC(omObjData *arg0) {
|
||||
UnkGuideDataStruct *temp_r31 = arg0->data;
|
||||
static s32 GetMode(omObjData *object)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
|
||||
return temp_r31->unk00;
|
||||
return work->mode;
|
||||
}
|
||||
|
||||
void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) {
|
||||
UnkGuideDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
|
||||
temp_r31->unk40 = arg1;
|
||||
temp_r31->unk44 = arg2;
|
||||
temp_r31->unk54 = 0.0f;
|
||||
temp_r31->unk58 = 1.0f / arg3;
|
||||
temp_r31->unk04 = 0;
|
||||
fn_1_24A8(arg0, 1);
|
||||
work->posToMoveTo = destPos;
|
||||
work->distFromCam = distFromCam;
|
||||
work->velocity = 0.0f;
|
||||
work->speed = 1.0f / walkDuration;
|
||||
work->motionIdx = 0;
|
||||
ChangeMode(object, MODE_HANDLE_GUIDE);
|
||||
}
|
||||
|
||||
static void fn_1_25AC(omObjData *arg0) {
|
||||
UnkGuideDataStruct *temp_r31 = arg0->data;
|
||||
static void HandleGuide(omObjData *object)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
|
||||
switch (arg0->unk10) {
|
||||
switch (object->unk10) {
|
||||
case 0:
|
||||
temp_r31->unk3C = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0);
|
||||
if (temp_r31->unk3C < 0.0f) {
|
||||
temp_r31->unk3C += 360.0f;
|
||||
work->unkAngle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0);
|
||||
if (work->unkAngle < 0.0f) {
|
||||
work->unkAngle += 360.0f;
|
||||
}
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
var_f30 = sin(90.0f * temp_r31->unk54 * M_PI / 180.0);
|
||||
var_f31 = temp_r31->unk3C + var_f30 * (temp_r31->unk40 - temp_r31->unk3C);
|
||||
temp_r31->unk14.x = temp_r31->unk44 * -sin(var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk14.z = temp_r31->unk44 * cos(var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk14.y = 0.0f;
|
||||
temp_r31->unk2C = temp_r31->unk14.x - temp_r31->unk08.x;
|
||||
temp_r31->unk34 = temp_r31->unk14.z - temp_r31->unk08.z;
|
||||
if (temp_r31->unk54 <= 0.0f) {
|
||||
temp_r31->unk2C = 0.0f;
|
||||
temp_r31->unk34 = 0.0f;
|
||||
temp_r31->unk08 = temp_r31->unk14;
|
||||
var_f30 = sind(90.0f * work->velocity);
|
||||
var_f31 = work->unkAngle + var_f30 * (work->posToMoveTo - work->unkAngle);
|
||||
work->newPos.x = work->distFromCam * -sind(var_f31);
|
||||
work->newPos.z = work->distFromCam * cosd(var_f31);
|
||||
work->newPos.y = 0.0f;
|
||||
work->posChange.x = work->newPos.x - work->pos.x;
|
||||
work->posChange.z = work->newPos.z - work->pos.z;
|
||||
if (work->velocity <= 0.0f) {
|
||||
work->posChange.x = 0.0f;
|
||||
work->posChange.z = 0.0f;
|
||||
work->pos = work->newPos;
|
||||
}
|
||||
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) {
|
||||
if ((work->velocity += work->speed) < 1.0f) {
|
||||
break;
|
||||
}
|
||||
var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0);
|
||||
var_f31 = fmod(-atan2d(work->pos.x, work->pos.z), 360.0);
|
||||
if (var_f31 < 0.0f) {
|
||||
var_f31 += 360.0f;
|
||||
}
|
||||
temp_r31->unk14.x = 422.0 * -sin(var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk14.z = 422.0 * cos(var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk2C = (temp_r31->unk14.x - temp_r31->unk08.x) / 10.0f;
|
||||
temp_r31->unk34 = (temp_r31->unk14.z - temp_r31->unk08.z) / 10.0f;
|
||||
temp_r31->unk58 = 0.1f;
|
||||
temp_r31->unk54 = 0.0f;
|
||||
arg0->unk10 = 2;
|
||||
work->newPos.x = 422.0 * -sind(var_f31);
|
||||
work->newPos.z = 422.0 * cosd(var_f31);
|
||||
work->posChange.x = (work->newPos.x - work->pos.x) / 10.0f;
|
||||
work->posChange.z = (work->newPos.z - work->pos.z) / 10.0f;
|
||||
work->speed = 0.1f;
|
||||
work->velocity = 0.0f;
|
||||
object->unk10 = 2;
|
||||
/* fallthrough */
|
||||
case 2:
|
||||
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) {
|
||||
if ((work->velocity += work->speed) < 1.0f) {
|
||||
break;
|
||||
}
|
||||
arg0->unk10 = 3;
|
||||
object->unk10 = 3;
|
||||
/* fallthrough */
|
||||
case 3:
|
||||
temp_r31->unk08 = temp_r31->unk14;
|
||||
temp_r31->unk2C = 0.0f;
|
||||
temp_r31->unk30 = 0.0f;
|
||||
temp_r31->unk34 = 0.0f;
|
||||
fn_1_2A18(arg0);
|
||||
fn_1_24A8(arg0, 0);
|
||||
work->pos = work->newPos;
|
||||
work->posChange.x = 0.0f;
|
||||
work->posChange.y = 0.0f;
|
||||
work->posChange.z = 0.0f;
|
||||
UpdateGuide(object);
|
||||
ChangeMode(object, MODE_DISABLED);
|
||||
break;
|
||||
}
|
||||
fn_1_2A18(arg0);
|
||||
UpdateGuide(object);
|
||||
}
|
||||
|
||||
static void fn_1_2A18(omObjData *arg0) {
|
||||
UnkGuideDataStruct *temp_r31 = arg0->data;
|
||||
static void UpdateGuide(omObjData *object)
|
||||
{
|
||||
GuideWork *work = object->data;
|
||||
s16 var_r29;
|
||||
|
||||
var_r29 = 0;
|
||||
temp_r31->unk38 = sqrtf(temp_r31->unk2C * temp_r31->unk2C + temp_r31->unk34 * temp_r31->unk34);
|
||||
if (0.001f <= temp_r31->unk38) {
|
||||
if (14.0f <= temp_r31->unk38) {
|
||||
temp_r31->unk2C /= temp_r31->unk38;
|
||||
temp_r31->unk34 /= temp_r31->unk38;
|
||||
temp_r31->unk38 = 14.0f;
|
||||
temp_r31->unk2C = 14.0f * temp_r31->unk2C;
|
||||
temp_r31->unk34 = 14.0f * temp_r31->unk34;
|
||||
work->distanceToMove = sqrtf(work->posChange.x * work->posChange.x + work->posChange.z * work->posChange.z);
|
||||
if (0.001f <= work->distanceToMove) {
|
||||
if (14.0f <= work->distanceToMove) {
|
||||
work->posChange.x /= work->distanceToMove;
|
||||
work->posChange.z /= work->distanceToMove;
|
||||
work->distanceToMove = 14.0f;
|
||||
work->posChange.x = 14.0f * work->posChange.x;
|
||||
work->posChange.z = 14.0f * work->posChange.z;
|
||||
}
|
||||
temp_r31->unk24 = fn_1_2D00(temp_r31->unk24, 180.0 * (atan2(temp_r31->unk2C, temp_r31->unk34) / M_PI), 0.4f);
|
||||
if (8.0f <= temp_r31->unk38) {
|
||||
work->rot.y = fn_1_2D00(work->rot.y, atan2d(work->posChange.x, work->posChange.z), 0.4f);
|
||||
if (8.0f <= work->distanceToMove) {
|
||||
var_r29 = 2;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r29 = 1;
|
||||
}
|
||||
}
|
||||
temp_r31->unk08.x += temp_r31->unk2C;
|
||||
temp_r31->unk08.z += temp_r31->unk34;
|
||||
if (temp_r31->unk04 != var_r29) {
|
||||
Hu3DMotionShiftSet(*arg0->model, arg0->motion[var_r29], 0.0f, 8.0f, 0x40000001);
|
||||
temp_r31->unk04 = var_r29;
|
||||
work->pos.x += work->posChange.x;
|
||||
work->pos.z += work->posChange.z;
|
||||
if (work->motionIdx != var_r29) {
|
||||
Hu3DMotionShiftSet(*object->model, object->motion[var_r29], 0.0f, 8.0f, 0x40000001);
|
||||
work->motionIdx = var_r29;
|
||||
}
|
||||
omSetTra(arg0, temp_r31->unk08.x, temp_r31->unk08.y, temp_r31->unk08.z);
|
||||
omSetRot(arg0, temp_r31->unk20, temp_r31->unk24, temp_r31->unk28);
|
||||
omSetTra(object, work->pos.x, work->pos.y, work->pos.z);
|
||||
omSetRot(object, work->rot.x, work->rot.y, work->rot.z);
|
||||
}
|
||||
|
||||
static float fn_1_2D00(float arg0, float arg1, float arg2) {
|
||||
static float fn_1_2D00(float arg0, float arg1, float arg2)
|
||||
{
|
||||
float var_f30;
|
||||
float var_f31;
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -6,241 +6,256 @@
|
|||
#include "game/window.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ omObjData *unk00;
|
||||
/* 0x04 */ omObjData *unk04;
|
||||
/* 0x08 */ omObjData *unk08;
|
||||
/* 0x0C */ omObjData *unk0C;
|
||||
/* 0x10 */ UnkWindowDataStruct *unk10;
|
||||
/* 0x14 */ UnkWindowDataStruct *unk14;
|
||||
/* 0x18 */ s32 unk18;
|
||||
/* 0x1C */ s32 unk1C;
|
||||
/* 0x00 */ omObjData *background;
|
||||
/* 0x04 */ omObjData *rumbleArrowPair;
|
||||
/* 0x08 */ omObjData *soundArrowPair;
|
||||
/* 0x0C */ omObjData *recordArrowPair;
|
||||
/* 0x10 */ WindowWork *optionDescWindow;
|
||||
/* 0x14 */ WindowWork *btnLegendWindow;
|
||||
/* 0x18 */ s32 selectedOption;
|
||||
/* 0x1C */ s32 mode;
|
||||
/* 0x20 */ s16 unk20;
|
||||
/* 0x22 */ char unk22[6];
|
||||
/* 0x28 */ s32 unk28;
|
||||
} UnkRoomDataStruct; // Size 0x2C
|
||||
/* 0x28 */ BOOL cameraDoneF;
|
||||
} RoomWork; // Size 0x2C
|
||||
|
||||
static void fn_1_1844(omObjData *arg0, s32 arg1);
|
||||
static void fn_1_1A8C(omObjData *arg0);
|
||||
static omObjData *fn_1_2088(void);
|
||||
static void fn_1_2110(omObjData *arg0);
|
||||
static omObjData *fn_1_2144(void);
|
||||
static void fn_1_21C4(omObjData *arg0);
|
||||
#define MODE_DISABLED 0
|
||||
#define MODE_HANDLE_ROOM 1
|
||||
|
||||
#define SEL_CHANGE_LEFT 0
|
||||
#define SEL_CHANGE_RIGHT 1
|
||||
|
||||
static void ChangeSelection(omObjData *object, s32 selChange);
|
||||
static void HandleRoom(omObjData *object);
|
||||
static omObjData *CreateBackground(void);
|
||||
static void KillBackground(omObjData *background);
|
||||
static omObjData *CreateArrowPair(void);
|
||||
static void KillArrowPair(omObjData *arrowPair);
|
||||
|
||||
omObjData *lbl_1_bss_18;
|
||||
|
||||
static omObjFunc lbl_1_data_68[] = {
|
||||
NULL,
|
||||
fn_1_1A8C
|
||||
};
|
||||
static omObjFunc modes[] = { NULL, HandleRoom };
|
||||
|
||||
omObjData *fn_1_15A4(void) {
|
||||
omObjData *var_r30;
|
||||
UnkRoomDataStruct *temp_r31;
|
||||
omObjData *fn_1_15A4(void)
|
||||
{
|
||||
omObjData *object;
|
||||
RoomWork *work;
|
||||
|
||||
var_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
|
||||
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRoomDataStruct), MEMORY_DEFAULT_NUM);
|
||||
var_r30->data = temp_r31;
|
||||
temp_r31->unk18 = 0;
|
||||
temp_r31->unk20 = -1;
|
||||
temp_r31->unk28 = 0;
|
||||
object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM);
|
||||
object->data = work;
|
||||
work->selectedOption = 0;
|
||||
work->unk20 = -1;
|
||||
work->cameraDoneF = 0;
|
||||
fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1);
|
||||
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1);
|
||||
temp_r31->unk00 = fn_1_2088();
|
||||
work->background = CreateBackground();
|
||||
lbl_1_bss_38 = fn_1_4028();
|
||||
lbl_1_bss_40 = fn_1_80E4();
|
||||
lbl_1_bss_30 = fn_1_3158();
|
||||
lbl_1_bss_20 = fn_1_21F8();
|
||||
temp_r31->unk04 = fn_1_2144();
|
||||
temp_r31->unk08 = fn_1_2144();
|
||||
temp_r31->unk0C = fn_1_2144();
|
||||
omSetRot(temp_r31->unk04, 0.0f, 0.0f, 0.0f);
|
||||
omSetRot(temp_r31->unk08, 0.0f, 120.0f, 0.0f);
|
||||
omSetRot(temp_r31->unk0C, 0.0f, 240.0f, 0.0f);
|
||||
temp_r31->unk10 = fn_1_A44C(0);
|
||||
temp_r31->unk14 = fn_1_A44C(1);
|
||||
return var_r30;
|
||||
work->rumbleArrowPair = CreateArrowPair();
|
||||
work->soundArrowPair = CreateArrowPair();
|
||||
work->recordArrowPair = CreateArrowPair();
|
||||
omSetRot(work->rumbleArrowPair, 0.0f, 0.0f, 0.0f);
|
||||
omSetRot(work->soundArrowPair, 0.0f, 120.0f, 0.0f);
|
||||
omSetRot(work->recordArrowPair, 0.0f, 240.0f, 0.0f);
|
||||
work->optionDescWindow = fn_1_A44C(0);
|
||||
work->btnLegendWindow = fn_1_A44C(1);
|
||||
return object;
|
||||
}
|
||||
|
||||
void fn_1_1798(omObjData *arg0) {
|
||||
UnkRoomDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_1798(omObjData *object)
|
||||
{
|
||||
RoomWork *work = object->data;
|
||||
|
||||
fn_1_2110(temp_r31->unk00);
|
||||
KillBackground(work->background);
|
||||
fn_1_42DC(lbl_1_bss_38);
|
||||
fn_1_322C(lbl_1_bss_30);
|
||||
fn_1_825C(lbl_1_bss_40);
|
||||
fn_1_241C(lbl_1_bss_20);
|
||||
fn_1_21C4(temp_r31->unk04);
|
||||
fn_1_21C4(temp_r31->unk08);
|
||||
fn_1_21C4(temp_r31->unk0C);
|
||||
fn_1_A6AC(temp_r31->unk10);
|
||||
fn_1_A6AC(temp_r31->unk14);
|
||||
HuMemDirectFree(temp_r31);
|
||||
KillArrowPair(work->rumbleArrowPair);
|
||||
KillArrowPair(work->soundArrowPair);
|
||||
KillArrowPair(work->recordArrowPair);
|
||||
fn_1_A6AC(work->optionDescWindow);
|
||||
fn_1_A6AC(work->btnLegendWindow);
|
||||
HuMemDirectFree(work);
|
||||
}
|
||||
|
||||
static const float lbl_1_rodata_BC[3] = { 45.0f, 165.0f, 285.0f };
|
||||
static const float guidePosTbl[3] = { 45.0f, 165.0f, 285.0f };
|
||||
|
||||
static void fn_1_1844(omObjData *arg0, s32 arg1) {
|
||||
UnkRoomDataStruct *temp_r31 = arg0->data;
|
||||
static void ChangeSelection(omObjData *object, s32 selChange)
|
||||
{
|
||||
RoomWork *work = object->data;
|
||||
float sp10;
|
||||
float spC;
|
||||
float sp8;
|
||||
float var_f31;
|
||||
float guideDestPos;
|
||||
|
||||
temp_r31->unk18 += (arg1 == 0) ? -1 : 1;
|
||||
if (temp_r31->unk18 < 0) {
|
||||
temp_r31->unk18 = 2;
|
||||
} else if (temp_r31->unk18 >= 3) {
|
||||
temp_r31->unk18 = 0;
|
||||
work->selectedOption += (selChange == SEL_CHANGE_LEFT) ? -1 : 1;
|
||||
if (work->selectedOption < 0) {
|
||||
work->selectedOption = 2;
|
||||
}
|
||||
else if (work->selectedOption >= 3) {
|
||||
work->selectedOption = 0;
|
||||
}
|
||||
fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8);
|
||||
fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (arg1 == 0 ? -120.0f : 120.0f), spC, 0x60);
|
||||
if (temp_r31->unk18 == 2 && arg1 == 0) {
|
||||
var_f31 = lbl_1_rodata_BC[2] - 360.0f;
|
||||
} else if (temp_r31->unk18 == 0 && arg1 == 1) {
|
||||
var_f31 = 360.0f + lbl_1_rodata_BC[0];
|
||||
} else {
|
||||
var_f31 = lbl_1_rodata_BC[temp_r31->unk18];
|
||||
fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (selChange == SEL_CHANGE_LEFT ? -120.0f : 120.0f), spC, 96);
|
||||
if (work->selectedOption == 2 && selChange == SEL_CHANGE_LEFT) {
|
||||
guideDestPos = guidePosTbl[2] - 360.0f;
|
||||
}
|
||||
fn_1_2508(lbl_1_bss_20, var_f31, 430.0f, 0x60);
|
||||
else if (work->selectedOption == 0 && selChange == SEL_CHANGE_RIGHT) {
|
||||
guideDestPos = 360.0f + guidePosTbl[0];
|
||||
}
|
||||
else {
|
||||
guideDestPos = guidePosTbl[work->selectedOption];
|
||||
}
|
||||
fn_1_2508(lbl_1_bss_20, guideDestPos, 430.0f, 96);
|
||||
}
|
||||
|
||||
void fn_1_1A2C(omObjData *arg0, s32 arg1) {
|
||||
UnkRoomDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_1A2C(omObjData *object, s32 mode)
|
||||
{
|
||||
RoomWork *work = object->data;
|
||||
|
||||
temp_r31->unk1C = arg1;
|
||||
arg0->func = lbl_1_data_68[arg1];
|
||||
arg0->unk10 = 0;
|
||||
arg0->unk10 = 0;
|
||||
work->mode = mode;
|
||||
object->func = modes[mode];
|
||||
object->unk10 = 0;
|
||||
object->unk10 = 0;
|
||||
}
|
||||
|
||||
s32 fn_1_1A70(omObjData *arg0) {
|
||||
UnkRoomDataStruct *temp_r31 = arg0->data;
|
||||
s32 fn_1_1A70(omObjData *object)
|
||||
{
|
||||
RoomWork *work = object->data;
|
||||
|
||||
return temp_r31->unk1C;
|
||||
return work->mode;
|
||||
}
|
||||
|
||||
static const s32 lbl_1_rodata_D4[] = {
|
||||
MAKE_MESSID(47, 1),
|
||||
MAKE_MESSID(47, 7),
|
||||
MAKE_MESSID(47, 4)
|
||||
};
|
||||
static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) };
|
||||
|
||||
static void fn_1_1A8C(omObjData *arg0) {
|
||||
UnkRoomDataStruct *temp_r31 = arg0->data;
|
||||
static void HandleRoom(omObjData *object)
|
||||
{
|
||||
RoomWork *work = object->data;
|
||||
|
||||
switch (arg0->unk10) {
|
||||
switch (object->unk10) {
|
||||
case 0:
|
||||
if (temp_r31->unk28 == 0) {
|
||||
if (!work->cameraDoneF) {
|
||||
fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1);
|
||||
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1);
|
||||
temp_r31->unk28 = 1;
|
||||
work->cameraDoneF = TRUE;
|
||||
}
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
if (fn_1_CB8(lbl_1_bss_10) != 0) {
|
||||
break;
|
||||
}
|
||||
fn_1_A6EC(temp_r31->unk10);
|
||||
fn_1_A71C(temp_r31->unk10, lbl_1_rodata_D4[temp_r31->unk18]);
|
||||
fn_1_A6EC(temp_r31->unk14);
|
||||
fn_1_A71C(temp_r31->unk14, MAKE_MESSID(47, 14));
|
||||
arg0->unk10 = 2;
|
||||
fn_1_A6EC(work->optionDescWindow);
|
||||
fn_1_A71C(work->optionDescWindow, optionDescTbl[work->selectedOption]);
|
||||
fn_1_A6EC(work->btnLegendWindow);
|
||||
fn_1_A71C(work->btnLegendWindow, MAKE_MESSID(47, 14));
|
||||
object->unk10 = 2;
|
||||
/* fallthrough */
|
||||
case 2:
|
||||
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
|
||||
if (fn_1_550(0x200) != 0) {
|
||||
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
|
||||
if (fn_1_550(PAD_BUTTON_B)) {
|
||||
HuAudFXPlay(3);
|
||||
arg0->unk10 = 7;
|
||||
} else if (fn_1_584(1) != 0) {
|
||||
fn_1_1844(arg0, 0);
|
||||
fn_1_A704(temp_r31->unk10);
|
||||
fn_1_A704(temp_r31->unk14);
|
||||
object->unk10 = 7;
|
||||
}
|
||||
else if (fn_1_584(1)) {
|
||||
ChangeSelection(object, SEL_CHANGE_LEFT);
|
||||
fn_1_A704(work->optionDescWindow);
|
||||
fn_1_A704(work->btnLegendWindow);
|
||||
HuAudFXPlay(0);
|
||||
arg0->unk10 = 1;
|
||||
} else if (fn_1_584(2) != 0) {
|
||||
fn_1_1844(arg0, 1);
|
||||
fn_1_A704(temp_r31->unk10);
|
||||
fn_1_A704(temp_r31->unk14);
|
||||
object->unk10 = 1;
|
||||
}
|
||||
else if (fn_1_584(2)) {
|
||||
ChangeSelection(object, SEL_CHANGE_RIGHT);
|
||||
fn_1_A704(work->optionDescWindow);
|
||||
fn_1_A704(work->btnLegendWindow);
|
||||
HuAudFXPlay(0);
|
||||
arg0->unk10 = 1;
|
||||
} else if (fn_1_550(0x100) != 0) {
|
||||
fn_1_A704(temp_r31->unk10);
|
||||
fn_1_A704(temp_r31->unk14);
|
||||
object->unk10 = 1;
|
||||
}
|
||||
else if (fn_1_550(PAD_BUTTON_A)) {
|
||||
fn_1_A704(work->optionDescWindow);
|
||||
fn_1_A704(work->btnLegendWindow);
|
||||
HuAudFXPlay(2);
|
||||
arg0->unk10 = 3;
|
||||
object->unk10 = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
|
||||
switch (temp_r31->unk18) {
|
||||
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
|
||||
switch (work->selectedOption) {
|
||||
case 0:
|
||||
fn_1_3290(lbl_1_bss_30, 1);
|
||||
arg0->unk10 = 4;
|
||||
object->unk10 = 4;
|
||||
break;
|
||||
case 1:
|
||||
fn_1_4388(lbl_1_bss_38, 1);
|
||||
arg0->unk10 = 5;
|
||||
object->unk10 = 5;
|
||||
break;
|
||||
case 2:
|
||||
fn_1_82B0(lbl_1_bss_40, 1);
|
||||
arg0->unk10 = 6;
|
||||
object->unk10 = 6;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (fn_1_32D4(lbl_1_bss_30) == 0) {
|
||||
arg0->unk10 = 1;
|
||||
if (fn_1_39D4(lbl_1_bss_30) == 0) {
|
||||
object->unk10 = 1;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (fn_1_43CC(lbl_1_bss_38) == 0) {
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (fn_1_82F4(lbl_1_bss_40) == 0) {
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
fn_1_A704(temp_r31->unk10);
|
||||
fn_1_A704(temp_r31->unk14);
|
||||
arg0->unk10 = 8;
|
||||
fn_1_A704(work->optionDescWindow);
|
||||
fn_1_A704(work->btnLegendWindow);
|
||||
object->unk10 = 8;
|
||||
/* fallthrough */
|
||||
case 8:
|
||||
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
|
||||
fn_1_1A2C(arg0, 0);
|
||||
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
|
||||
fn_1_1A2C(object, MODE_DISABLED);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static omObjData *fn_1_2088(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreateBackground(void)
|
||||
{
|
||||
omObjData *background;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0));
|
||||
Hu3DModelLayerSet(temp_r31->model[0], 0);
|
||||
Hu3DModelShadowMapSet(temp_r31->model[0]);
|
||||
return temp_r31;
|
||||
background = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
background->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0));
|
||||
Hu3DModelLayerSet(background->model[0], 0);
|
||||
Hu3DModelShadowMapSet(background->model[0]);
|
||||
return background;
|
||||
}
|
||||
|
||||
static void fn_1_2110(omObjData *arg0) {
|
||||
Hu3DModelKill(arg0->model[0]);
|
||||
static void KillBackground(omObjData *background)
|
||||
{
|
||||
Hu3DModelKill(background->model[0]);
|
||||
}
|
||||
|
||||
static omObjData *fn_1_2144(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreateArrowPair(void)
|
||||
{
|
||||
omObjData *arrowPair;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
Hu3DModelLayerSet(temp_r31->model[0], 0);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6));
|
||||
return temp_r31;
|
||||
arrowPair = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
Hu3DModelLayerSet(arrowPair->model[0], 0);
|
||||
arrowPair->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6));
|
||||
return arrowPair;
|
||||
}
|
||||
|
||||
static void fn_1_21C4(omObjData *arg0) {
|
||||
Hu3DModelKill(arg0->model[0]);
|
||||
static void KillArrowPair(omObjData *arrow)
|
||||
{
|
||||
Hu3DModelKill(arrow->model[0]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,328 +8,360 @@
|
|||
#include "game/window.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ omObjData *unk00;
|
||||
/* 0x04 */ omObjData *unk04;
|
||||
/* 0x08 */ omObjData *unk08;
|
||||
/* 0x0C */ omObjData *unk0C;
|
||||
/* 0x10 */ omObjData *unk10;
|
||||
/* 0x14 */ UnkWindowDataStruct *unk14[2];
|
||||
/* 0x20 */ s32 unk1C;
|
||||
/* 0x20 */ s32 unk20;
|
||||
/* 0x24 */ s32 unk24;
|
||||
/* 0x28 */ s32 unk28;
|
||||
} UnkRumbleDataStruct; // Size 0x2C
|
||||
/* 0x00 */ omObjData *system;
|
||||
/* 0x04 */ omObjData *pad;
|
||||
/* 0x08 */ omObjData *padFilter;
|
||||
/* 0x0C */ omObjData *hand;
|
||||
/* 0x10 */ omObjData *highlightOn;
|
||||
/* 0x14 */ WindowWork *window[2];
|
||||
/* 0x20 */ s32 mode;
|
||||
/* 0x20 */ BOOL rumbleF;
|
||||
/* 0x24 */ BOOL cameraDoneF;
|
||||
/* 0x28 */ s32 changeTimer;
|
||||
} RumbleWork; // Size 0x2C
|
||||
|
||||
static void fn_1_32F0(omObjData *arg0);
|
||||
static omObjData *fn_1_37AC(void);
|
||||
static void fn_1_3868(omObjData *arg0);
|
||||
static omObjData *fn_1_38BC(void);
|
||||
static void fn_1_398C(omObjData *arg0);
|
||||
static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2);
|
||||
static omObjData *fn_1_3B08(void);
|
||||
static void fn_1_3B8C(omObjData *arg0);
|
||||
static void fn_1_3BE0(omObjData *arg0, s32 arg1);
|
||||
static omObjData *fn_1_3C6C(void);
|
||||
static void fn_1_3D00(omObjData *arg0);
|
||||
static omObjData *fn_1_3F28(void);
|
||||
static void fn_1_3FD4(omObjData *arg0);
|
||||
#define MODE_DISABLED 0
|
||||
#define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this
|
||||
|
||||
static void HandleRumble(omObjData *object);
|
||||
static omObjData *CreateHand(void);
|
||||
static void KillHand(omObjData *hand);
|
||||
static omObjData *CreateSystem(void);
|
||||
static void KillSystem(omObjData *system);
|
||||
static void StartSystemMotion(omObjData *system, s32 rumbleF, BOOL slowF);
|
||||
static omObjData *CreatePad(void);
|
||||
static void KillPad(omObjData *pad);
|
||||
static void ShakePad(omObjData *pad, BOOL on);
|
||||
static omObjData *CreatePadFilter(void);
|
||||
static void KillPadFilter(omObjData *padFilter);
|
||||
static omObjData *CreateHighlightOn(void);
|
||||
static void KillHighlightOn(omObjData *highlightOn);
|
||||
|
||||
omObjData *lbl_1_bss_30;
|
||||
|
||||
static omObjFunc lbl_1_data_108[] = {
|
||||
NULL,
|
||||
fn_1_32F0
|
||||
};
|
||||
static omObjFunc modes[] = { NULL, HandleRumble };
|
||||
|
||||
omObjData *fn_1_3158(void) {
|
||||
omObjData *temp_r30;
|
||||
UnkRumbleDataStruct *temp_r3;
|
||||
omObjData *fn_1_3158(void)
|
||||
{
|
||||
omObjData *object;
|
||||
RumbleWork *work;
|
||||
|
||||
temp_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
|
||||
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRumbleDataStruct), MEMORY_DEFAULT_NUM);
|
||||
temp_r30->data = temp_r3;
|
||||
temp_r3->unk20 = GWGameStat.rumble;
|
||||
temp_r3->unk00 = fn_1_38BC();
|
||||
fn_1_39E0(temp_r3->unk00, temp_r3->unk20, 0);
|
||||
temp_r3->unk04 = fn_1_3B08();
|
||||
fn_1_3BE0(temp_r3->unk04, temp_r3->unk20);
|
||||
temp_r3->unk08 = fn_1_3C6C();
|
||||
temp_r3->unk10 = fn_1_3F28();
|
||||
temp_r3->unk0C = fn_1_37AC();
|
||||
fn_1_3290(temp_r30, 0);
|
||||
return temp_r30;
|
||||
object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM);
|
||||
object->data = work;
|
||||
work->rumbleF = GWGameStat.rumble;
|
||||
work->system = CreateSystem();
|
||||
StartSystemMotion(work->system, work->rumbleF, 0);
|
||||
work->pad = CreatePad();
|
||||
ShakePad(work->pad, work->rumbleF);
|
||||
work->padFilter = CreatePadFilter();
|
||||
work->highlightOn = CreateHighlightOn();
|
||||
work->hand = CreateHand();
|
||||
fn_1_3290(object, MODE_DISABLED);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
void fn_1_322C(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_322C(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
|
||||
fn_1_3868(temp_r31->unk0C);
|
||||
fn_1_398C(temp_r31->unk00);
|
||||
fn_1_3B8C(temp_r31->unk04);
|
||||
fn_1_3FD4(temp_r31->unk10);
|
||||
fn_1_3D00(temp_r31->unk08);
|
||||
HuMemDirectFree(temp_r31);
|
||||
KillHand(work->hand);
|
||||
KillSystem(work->system);
|
||||
KillPad(work->pad);
|
||||
KillHighlightOn(work->highlightOn);
|
||||
KillPadFilter(work->padFilter);
|
||||
HuMemDirectFree(work);
|
||||
}
|
||||
// SetMode
|
||||
void fn_1_3290(omObjData *object, s32 mode)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
|
||||
work->mode = mode;
|
||||
object->func = modes[mode];
|
||||
object->unk10 = 0;
|
||||
object->unk10 = 0;
|
||||
}
|
||||
// GetMode
|
||||
s32 fn_1_39D4(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
|
||||
return work->mode;
|
||||
}
|
||||
|
||||
void fn_1_3290(omObjData *arg0, s32 arg1) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
|
||||
temp_r31->unk1C = arg1;
|
||||
arg0->func = lbl_1_data_108[arg1];
|
||||
arg0->unk10 = 0;
|
||||
arg0->unk10 = 0;
|
||||
}
|
||||
|
||||
s32 fn_1_32D4(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
|
||||
return temp_r31->unk1C;
|
||||
}
|
||||
|
||||
static void fn_1_32F0(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
static void HandleRumble(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
s32 i;
|
||||
|
||||
switch (arg0->unk10) {
|
||||
switch (object->unk10) {
|
||||
case 0:
|
||||
temp_r31->unk14[0] = fn_1_A44C(0);
|
||||
temp_r31->unk14[1] = fn_1_A44C(1);
|
||||
work->window[0] = fn_1_A44C(0);
|
||||
work->window[1] = fn_1_A44C(1);
|
||||
fn_1_AF0(lbl_1_bss_10, -519.62f, 135.0f, 300.0f, 0x28);
|
||||
fn_1_A6C(lbl_1_bss_10, -315.64f, 135.0f, 182.25f, 0x28);
|
||||
fn_1_3D54(arg0);
|
||||
Hu3DModelLayerSet(temp_r31->unk08->model[0], 1);
|
||||
temp_r31->unk24 = 0;
|
||||
arg0->unk10 = 1;
|
||||
fn_1_3D54(object);
|
||||
Hu3DModelLayerSet(work->padFilter->model[0], 1);
|
||||
work->cameraDoneF = FALSE;
|
||||
object->unk10 = 1;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
if (fn_1_CB8(lbl_1_bss_10) != 0) {
|
||||
break;
|
||||
}
|
||||
if (temp_r31->unk24 == 0) {
|
||||
Hu3DModelAttrReset(temp_r31->unk0C->model[0], 1);
|
||||
temp_r31->unk24 = 1;
|
||||
Hu3DModelHookSet(temp_r31->unk00->model[0], "target", temp_r31->unk0C->model[0]);
|
||||
if (!work->cameraDoneF) {
|
||||
Hu3DModelAttrReset(work->hand->model[0], 1);
|
||||
work->cameraDoneF = TRUE;
|
||||
Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]);
|
||||
}
|
||||
fn_1_A6EC(temp_r31->unk14[1]);
|
||||
fn_1_A71C(temp_r31->unk14[1], MAKE_MESSID(47, 15));
|
||||
fn_1_A6EC(temp_r31->unk14[0]);
|
||||
if (temp_r31->unk20 != 0) {
|
||||
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 2));
|
||||
} else {
|
||||
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 3));
|
||||
fn_1_A6EC(work->window[1]);
|
||||
fn_1_A71C(work->window[1], MAKE_MESSID(47, 15));
|
||||
fn_1_A6EC(work->window[0]);
|
||||
if (work->rumbleF) {
|
||||
fn_1_A71C(work->window[0], MAKE_MESSID(47, 2));
|
||||
}
|
||||
arg0->unk10 = 2;
|
||||
else {
|
||||
fn_1_A71C(work->window[0], MAKE_MESSID(47, 3));
|
||||
}
|
||||
object->unk10 = 2;
|
||||
/* fallthrough */
|
||||
case 2:
|
||||
if (temp_r31->unk14[0]->unk20 == 0 && temp_r31->unk14[1]->unk20 == 0) {
|
||||
if (fn_1_550(0x200) != 0) {
|
||||
if (work->window[0]->state == 0 && work->window[1]->state == 0) {
|
||||
if (fn_1_550(PAD_BUTTON_B)) {
|
||||
HuAudFXPlay(3);
|
||||
arg0->unk10 = 4;
|
||||
} else if (fn_1_584(8) != 0 && temp_r31->unk20 == 0) {
|
||||
fn_1_39E0(temp_r31->unk00, 1, 1);
|
||||
temp_r31->unk20 = 1;
|
||||
temp_r31->unk28 = 0;
|
||||
object->unk10 = 4;
|
||||
}
|
||||
else if (fn_1_584(8) && !work->rumbleF) {
|
||||
StartSystemMotion(work->system, 1, TRUE);
|
||||
work->rumbleF = TRUE;
|
||||
work->changeTimer = 0;
|
||||
GWRumbleSet(1);
|
||||
arg0->unk10 = 3;
|
||||
} else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) {
|
||||
fn_1_39E0(temp_r31->unk00, 0, 1);
|
||||
temp_r31->unk20 = 0;
|
||||
temp_r31->unk28 = 0;
|
||||
object->unk10 = 3;
|
||||
}
|
||||
else if (fn_1_584(4) && work->rumbleF) {
|
||||
StartSystemMotion(work->system, 0, TRUE);
|
||||
work->rumbleF = FALSE;
|
||||
work->changeTimer = 0;
|
||||
GWRumbleSet(0);
|
||||
arg0->unk10 = 3;
|
||||
object->unk10 = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (temp_r31->unk28++ >= 60) {
|
||||
if (work->changeTimer++ >= 60) {
|
||||
HuAudFXPlay(0x83C);
|
||||
fn_1_3BE0(temp_r31->unk04, temp_r31->unk20);
|
||||
if (temp_r31->unk20 != 0) {
|
||||
HuPadRumbleSet(0, 0x3C, 0xA, 5);
|
||||
Hu3DMotionTimeSet(temp_r31->unk10->model[0], 0.0f);
|
||||
Hu3DModelAttrReset(temp_r31->unk10->model[0], 1);
|
||||
} else {
|
||||
Hu3DModelAttrSet(temp_r31->unk10->model[0], 1);
|
||||
ShakePad(work->pad, work->rumbleF);
|
||||
if (work->rumbleF) {
|
||||
HuPadRumbleSet(0, 60, 10, 5);
|
||||
Hu3DMotionTimeSet(work->highlightOn->model[0], 0.0f);
|
||||
Hu3DModelAttrReset(work->highlightOn->model[0], 1);
|
||||
}
|
||||
arg0->unk10 = 1;
|
||||
else {
|
||||
Hu3DModelAttrSet(work->highlightOn->model[0], 1);
|
||||
}
|
||||
object->unk10 = 1;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
fn_1_A704(temp_r31->unk14[1]);
|
||||
fn_1_A704(temp_r31->unk14[0]);
|
||||
Hu3DModelAttrSet(temp_r31->unk0C->model[0], 1);
|
||||
fn_1_3E1C(arg0);
|
||||
arg0->unk10 = 5;
|
||||
fn_1_A704(work->window[1]);
|
||||
fn_1_A704(work->window[0]);
|
||||
Hu3DModelAttrSet(work->hand->model[0], 1);
|
||||
fn_1_3E1C(object);
|
||||
object->unk10 = 5;
|
||||
/* fallthrough */
|
||||
case 5:
|
||||
if (temp_r31->unk14[1]->unk20 == 0 && temp_r31->unk14[0]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) {
|
||||
if (work->window[1]->state == 0 && work->window[0]->state == 0 && !fn_1_3ED0(lbl_1_bss_30)) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
fn_1_A6AC(temp_r31->unk14[i]);
|
||||
fn_1_A6AC(work->window[i]);
|
||||
}
|
||||
Hu3DModelHookReset(temp_r31->unk00->model[0]);
|
||||
Hu3DModelHookReset(work->system->model[0]);
|
||||
fn_1_AF0(lbl_1_bss_10, -519.62f, 120.0f, 300.0f, 0x28);
|
||||
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28);
|
||||
fn_1_3290(arg0, 0);
|
||||
fn_1_3290(object, MODE_DISABLED);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static omObjData *fn_1_37AC(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreateHand(void)
|
||||
{
|
||||
omObjData *hand;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15));
|
||||
Hu3DModelLayerSet(temp_r31->model[0], 3);
|
||||
omSetRot(temp_r31, 0.0f, 180.0f, 0.0f);
|
||||
Hu3DModelAttrSet(temp_r31->model[0], 1);
|
||||
return temp_r31;
|
||||
hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15));
|
||||
Hu3DModelLayerSet(hand->model[0], 3);
|
||||
omSetRot(hand, 0.0f, 180.0f, 0.0f);
|
||||
Hu3DModelAttrSet(hand->model[0], 1);
|
||||
return hand;
|
||||
}
|
||||
|
||||
static void fn_1_3868(omObjData *arg0) {
|
||||
static void KillHand(omObjData *hand)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(hand->model[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static omObjData *fn_1_38BC(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreateSystem(void)
|
||||
{
|
||||
omObjData *system;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2));
|
||||
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002);
|
||||
system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2));
|
||||
Hu3DModelAttrSet(system->model[0], 0x40000002);
|
||||
if (GWRumbleGet()) {
|
||||
Hu3DMotionTimeSet(temp_r31->model[0], 60.0f);
|
||||
} else {
|
||||
Hu3DMotionTimeSet(temp_r31->model[0], 0.0f);
|
||||
Hu3DMotionTimeSet(system->model[0], 60.0f);
|
||||
}
|
||||
return temp_r31;
|
||||
else {
|
||||
Hu3DMotionTimeSet(system->model[0], 0.0f);
|
||||
}
|
||||
return system;
|
||||
}
|
||||
|
||||
static void fn_1_398C(omObjData *arg0) {
|
||||
static void KillSystem(omObjData *system)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(system->model[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2) {
|
||||
s16 temp_r31 = arg0->model[0];
|
||||
static void StartSystemMotion(omObjData *system, s32 rumbleF, BOOL slowF)
|
||||
{
|
||||
s16 model = system->model[0];
|
||||
|
||||
Hu3DModelAttrReset(arg0->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
|
||||
if (arg1 != 0) {
|
||||
Hu3DMotionStartEndSet(temp_r31, 60.0f, 120.0f);
|
||||
if (arg2 != 0) {
|
||||
Hu3DMotionTimeSet(temp_r31, 60.0f);
|
||||
} else {
|
||||
Hu3DMotionTimeSet(temp_r31, 119.0f);
|
||||
Hu3DModelAttrReset(system->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(system->model[0], 0x40000001);
|
||||
if (rumbleF) {
|
||||
Hu3DMotionStartEndSet(model, 60.0f, 120.0f);
|
||||
if (slowF) {
|
||||
Hu3DMotionTimeSet(model, 60.0f);
|
||||
}
|
||||
} else {
|
||||
Hu3DMotionStartEndSet(temp_r31, 0.0f, 60.0f);
|
||||
if (arg2 != 0) {
|
||||
Hu3DMotionTimeSet(temp_r31, 0.0f);
|
||||
} else {
|
||||
Hu3DMotionTimeSet(temp_r31, 59.0f);
|
||||
else {
|
||||
Hu3DMotionTimeSet(model, 119.0f);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Hu3DMotionStartEndSet(model, 0.0f, 60.0f);
|
||||
if (slowF) {
|
||||
Hu3DMotionTimeSet(model, 0.0f);
|
||||
}
|
||||
else {
|
||||
Hu3DMotionTimeSet(model, 59.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static omObjData *fn_1_3B08(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreatePad(void)
|
||||
{
|
||||
omObjData *pad;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9));
|
||||
Hu3DModelAttrSet(temp_r31->model[0], 0x40000001);
|
||||
return temp_r31;
|
||||
pad = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9));
|
||||
Hu3DModelAttrSet(pad->model[0], 0x40000001);
|
||||
return pad;
|
||||
}
|
||||
|
||||
static void fn_1_3B8C(omObjData *arg0) {
|
||||
static void KillPad(omObjData *pad)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(pad->model[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_3BE0(omObjData *arg0, s32 arg1) {
|
||||
if (arg1 != 0) {
|
||||
Hu3DModelAttrReset(arg0->model[0], 0x40000002);
|
||||
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
|
||||
} else {
|
||||
Hu3DModelAttrSet(arg0->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
|
||||
static void ShakePad(omObjData *pad, BOOL on)
|
||||
{
|
||||
if (on) {
|
||||
Hu3DModelAttrReset(pad->model[0], 0x40000002);
|
||||
Hu3DModelAttrSet(pad->model[0], 0x40000001);
|
||||
}
|
||||
else {
|
||||
Hu3DModelAttrSet(pad->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(pad->model[0], 0x40000001);
|
||||
}
|
||||
}
|
||||
|
||||
static omObjData *fn_1_3C6C(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreatePadFilter(void)
|
||||
{
|
||||
omObjData *object;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10));
|
||||
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002);
|
||||
Hu3DModelLayerSet(temp_r31->model[0], 2);
|
||||
return temp_r31;
|
||||
object = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10));
|
||||
Hu3DModelAttrSet(object->model[0], 0x40000002);
|
||||
Hu3DModelLayerSet(object->model[0], 2);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void fn_1_3D00(omObjData *arg0) {
|
||||
static void KillPadFilter(omObjData *padFilter)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(padFilter->model[i]);
|
||||
}
|
||||
}
|
||||
// ZoomIn
|
||||
void fn_1_3D54(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
s16 model = work->padFilter->model[0];
|
||||
|
||||
void fn_1_3D54(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
s16 temp_r30 = temp_r31->unk08->model[0];
|
||||
|
||||
Hu3DMotionStartEndSet(temp_r30, 0.0f, 40.0f);
|
||||
Hu3DMotionTimeSet(temp_r30, 0.0f);
|
||||
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001);
|
||||
Hu3DModelLayerSet(temp_r31->unk08->model[0], 2);
|
||||
Hu3DMotionStartEndSet(model, 0.0f, 40.0f);
|
||||
Hu3DMotionTimeSet(model, 0.0f);
|
||||
Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001);
|
||||
Hu3DModelLayerSet(work->padFilter->model[0], 2);
|
||||
HuAudFXPlay(0x83D);
|
||||
}
|
||||
// ZoomOut
|
||||
void fn_1_3E1C(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
s16 model = work->padFilter->model[0];
|
||||
|
||||
void fn_1_3E1C(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
s16 temp_r30 = temp_r31->unk08->model[0];
|
||||
|
||||
Hu3DMotionStartEndSet(temp_r30, 40.0f, 80.0f);
|
||||
Hu3DMotionTimeSet(temp_r30, 40.0f);
|
||||
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001);
|
||||
Hu3DMotionStartEndSet(model, 40.0f, 80.0f);
|
||||
Hu3DMotionTimeSet(model, 40.0f);
|
||||
Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002);
|
||||
Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001);
|
||||
HuAudFXPlay(0x83E);
|
||||
}
|
||||
// GetPadFilterMotionDone
|
||||
BOOL fn_1_3ED0(omObjData *object)
|
||||
{
|
||||
RumbleWork *work = object->data;
|
||||
s16 padFilterModel = work->padFilter->model[0];
|
||||
|
||||
s32 fn_1_3ED0(omObjData *arg0) {
|
||||
UnkRumbleDataStruct *temp_r31 = arg0->data;
|
||||
s16 temp_r30 = temp_r31->unk08->model[0];
|
||||
|
||||
return !Hu3DMotionEndCheck(temp_r30);
|
||||
return !Hu3DMotionEndCheck(padFilterModel);
|
||||
}
|
||||
|
||||
static omObjData *fn_1_3F28(void) {
|
||||
omObjData *temp_r31;
|
||||
static omObjData *CreateHighlightOn(void)
|
||||
{
|
||||
omObjData *highlightOn;
|
||||
|
||||
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11));
|
||||
highlightOn = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
|
||||
highlightOn->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11));
|
||||
if (GWRumbleGet()) {
|
||||
Hu3DModelAttrReset(temp_r31->model[0], 1);
|
||||
} else {
|
||||
Hu3DModelAttrSet(temp_r31->model[0], 1);
|
||||
Hu3DModelAttrReset(highlightOn->model[0], 1);
|
||||
}
|
||||
return temp_r31;
|
||||
else {
|
||||
Hu3DModelAttrSet(highlightOn->model[0], 1);
|
||||
}
|
||||
return highlightOn;
|
||||
}
|
||||
|
||||
static void fn_1_3FD4(omObjData *arg0) {
|
||||
static void KillHighlightOn(omObjData *highlightOn)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
Hu3DModelKill(arg0->model[i]);
|
||||
Hu3DModelKill(highlightOn->model[i]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include "REL/option.h"
|
||||
#include "REL/executor.h"
|
||||
#include "REL/option.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/esprite.h"
|
||||
#include "game/gamework_data.h"
|
||||
|
|
@ -15,160 +15,171 @@
|
|||
#include "rel_sqrt_consts.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 unk00;
|
||||
/* 0x00 */ s16 spr;
|
||||
/* 0x02 */ char unk02[2];
|
||||
/* 0x04 */ float unk04;
|
||||
/* 0x08 */ float unk08;
|
||||
} UnkSceneDataStruct; // Size 0xC
|
||||
/* 0x04 */ float opacity;
|
||||
/* 0x08 */ float opacityChange;
|
||||
} LRButtonWork; // Size 0xC
|
||||
|
||||
static void fn_1_270(void);
|
||||
static void HandleLRBtn(void);
|
||||
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2);
|
||||
static void fn_1_468(void);
|
||||
static void fn_1_5EC(omObjData *arg0);
|
||||
static void fn_1_6E8(void);
|
||||
static void HandleScene(omObjData *arg0);
|
||||
static void KillScene(void);
|
||||
|
||||
Process *lbl_1_bss_8;
|
||||
static omObjData *lbl_1_bss_4;
|
||||
static s32 lbl_1_bss_0;
|
||||
static omObjData *scene;
|
||||
static s32 rumbleF;
|
||||
|
||||
void ModuleProlog(void) {
|
||||
void ModuleProlog(void)
|
||||
{
|
||||
lbl_1_bss_8 = omInitObjMan(0x40, 0x2000);
|
||||
omGameSysInit(lbl_1_bss_8);
|
||||
HuWinInit(1);
|
||||
lbl_1_bss_0 = GWGameStat.rumble;
|
||||
lbl_1_bss_4 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, fn_1_5EC);
|
||||
lbl_1_bss_4->unk10 = 0;
|
||||
rumbleF = GWGameStat.rumble;
|
||||
scene = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, HandleScene);
|
||||
scene->unk10 = 0;
|
||||
lbl_1_bss_28 = fn_1_2E04();
|
||||
}
|
||||
|
||||
void fn_1_160(s16 arg0, s32 arg1, s32 arg2) {
|
||||
UnkSceneDataStruct *temp_r31;
|
||||
Process *temp_r30;
|
||||
void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime)
|
||||
{
|
||||
LRButtonWork *work;
|
||||
Process *process;
|
||||
|
||||
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM);
|
||||
temp_r31->unk00 = arg0;
|
||||
temp_r31->unk08 = 1.0f / arg2;
|
||||
if (arg1 != 0) {
|
||||
temp_r31->unk08 = temp_r31->unk08;
|
||||
temp_r31->unk04 = 0.0f;
|
||||
} else {
|
||||
temp_r31->unk08 = -temp_r31->unk08;
|
||||
temp_r31->unk04 = 1.0f;
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM);
|
||||
work->spr = sprite;
|
||||
work->opacityChange = 1.0f / fadeInTime;
|
||||
if (hiddenF) {
|
||||
work->opacityChange = work->opacityChange;
|
||||
work->opacity = 0.0f;
|
||||
}
|
||||
espDispOn(temp_r31->unk00);
|
||||
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
temp_r30 = HuPrcChildCreate(fn_1_270, 0x3000, 0x1500, 0, HuPrcCurrentGet());
|
||||
temp_r30->user_data = temp_r31;
|
||||
else {
|
||||
work->opacityChange = -work->opacityChange;
|
||||
work->opacity = 1.0f;
|
||||
}
|
||||
espDispOn(work->spr);
|
||||
espTPLvlSet(work->spr, work->opacity);
|
||||
process = HuPrcChildCreate(HandleLRBtn, 0x3000, 0x1500, 0, HuPrcCurrentGet());
|
||||
process->user_data = work;
|
||||
}
|
||||
|
||||
static void fn_1_270(void) {
|
||||
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
|
||||
static void HandleLRBtn(void)
|
||||
{
|
||||
LRButtonWork *work = HuPrcCurrentGet()->user_data;
|
||||
|
||||
while (1) {
|
||||
temp_r31->unk04 += temp_r31->unk08;
|
||||
if (temp_r31->unk04 > 1.0f) {
|
||||
temp_r31->unk04 = 1.0f;
|
||||
while (TRUE) {
|
||||
work->opacity += work->opacityChange;
|
||||
if (work->opacity > 1.0f) {
|
||||
work->opacity = 1.0f;
|
||||
break;
|
||||
}
|
||||
if (temp_r31->unk04 < 0.0f) {
|
||||
temp_r31->unk04 = 0.0f;
|
||||
if (work->opacity < 0.0f) {
|
||||
work->opacity = 0.0f;
|
||||
break;
|
||||
}
|
||||
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
espTPLvlSet(work->spr, work->opacity);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
if (temp_r31->unk04 <= 0.0f) {
|
||||
espDispOff(temp_r31->unk00);
|
||||
espTPLvlSet(work->spr, work->opacity);
|
||||
if (work->opacity <= 0.0f) {
|
||||
espDispOff(work->spr);
|
||||
}
|
||||
HuMemDirectFree(temp_r31);
|
||||
HuMemDirectFree(work);
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) {
|
||||
UnkSceneDataStruct *temp_r31;
|
||||
Process *temp_r30;
|
||||
static void fn_1_354(s16 sprite, s32 arg1, s32 arg2)
|
||||
{
|
||||
LRButtonWork *work;
|
||||
Process *process;
|
||||
|
||||
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM);
|
||||
temp_r31->unk00 = arg0;
|
||||
temp_r31->unk08 = 1.0f / arg2;
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM);
|
||||
work->spr = sprite;
|
||||
work->opacityChange = 1.0f / arg2;
|
||||
if (arg1 != 0) {
|
||||
temp_r31->unk08 = temp_r31->unk08;
|
||||
temp_r31->unk04 = 0.0f;
|
||||
} else {
|
||||
temp_r31->unk08 = -temp_r31->unk08;
|
||||
temp_r31->unk04 = 1.0f;
|
||||
work->opacityChange = work->opacityChange;
|
||||
work->opacity = 0.0f;
|
||||
}
|
||||
Hu3DModelAttrReset(temp_r31->unk00, 1);
|
||||
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
temp_r30 = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet());
|
||||
temp_r30->user_data = temp_r31;
|
||||
else {
|
||||
work->opacityChange = -work->opacityChange;
|
||||
work->opacity = 1.0f;
|
||||
}
|
||||
Hu3DModelAttrReset(work->spr, 1);
|
||||
Hu3DModelTPLvlSet(work->spr, work->opacity);
|
||||
process = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet());
|
||||
process->user_data = work;
|
||||
}
|
||||
|
||||
static void fn_1_468(void) {
|
||||
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
|
||||
static void fn_1_468(void)
|
||||
{
|
||||
LRButtonWork *work = HuPrcCurrentGet()->user_data;
|
||||
|
||||
while (1) {
|
||||
temp_r31->unk04 += temp_r31->unk08;
|
||||
if (temp_r31->unk04 > 1.0f) {
|
||||
temp_r31->unk04 = 1.0f;
|
||||
while (TRUE) {
|
||||
work->opacity += work->opacityChange;
|
||||
if (work->opacity > 1.0f) {
|
||||
work->opacity = 1.0f;
|
||||
break;
|
||||
}
|
||||
if (temp_r31->unk04 < 0.0f) {
|
||||
temp_r31->unk04 = 0.0f;
|
||||
if (work->opacity < 0.0f) {
|
||||
work->opacity = 0.0f;
|
||||
break;
|
||||
}
|
||||
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
Hu3DModelTPLvlSet(work->spr, work->opacity);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
|
||||
if (temp_r31->unk04 <= 0.0f) {
|
||||
Hu3DModelAttrSet(temp_r31->unk00, 1);
|
||||
Hu3DModelTPLvlSet(work->spr, work->opacity);
|
||||
if (work->opacity <= 0.0f) {
|
||||
Hu3DModelAttrSet(work->spr, 1);
|
||||
}
|
||||
HuMemDirectFree(temp_r31);
|
||||
HuMemDirectFree(work);
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
s32 fn_1_550(u16 arg0) {
|
||||
u32 temp_r31 = HuPadBtnDown[0] & arg0;
|
||||
BOOL fn_1_550(u16 btn)
|
||||
{
|
||||
u32 temp_r31 = HuPadBtnDown[0] & btn;
|
||||
|
||||
return (temp_r31 != 0);
|
||||
}
|
||||
|
||||
s32 fn_1_584(u16 arg0) {
|
||||
BOOL fn_1_584(u16 arg0)
|
||||
{
|
||||
u32 temp_r31 = HuPadDStkRep[0] & arg0;
|
||||
|
||||
return (temp_r31 != 0);
|
||||
}
|
||||
|
||||
s32 fn_1_5B8(u16 arg0) {
|
||||
BOOL fn_1_5B8(u16 arg0)
|
||||
{
|
||||
u32 temp_r31 = HuPadDStk[0] & arg0;
|
||||
|
||||
return (temp_r31 != 0);
|
||||
}
|
||||
|
||||
static void fn_1_5EC(omObjData *arg0) {
|
||||
switch (arg0->unk10) {
|
||||
static void HandleScene(omObjData *object)
|
||||
{
|
||||
switch (object->unk10) {
|
||||
case 0:
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
if (omSysExitReq == 0) {
|
||||
if (!omSysExitReq) {
|
||||
break;
|
||||
}
|
||||
arg0->unk10 = 2;
|
||||
object->unk10 = 2;
|
||||
/* fallthrough */
|
||||
case 2:
|
||||
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
||||
HuAudFadeOut(1000);
|
||||
arg0->unk10 = 3;
|
||||
object->unk10 = 3;
|
||||
/* fallthrough */
|
||||
case 3:
|
||||
if (WipeStatGet() == 0) {
|
||||
fn_1_2F4C(lbl_1_bss_28);
|
||||
if (lbl_1_bss_0 != GWGameStat.rumble) {
|
||||
if (rumbleF != GWGameStat.rumble) {
|
||||
omSysExitReq = 0;
|
||||
fn_1_6E8();
|
||||
KillScene();
|
||||
}
|
||||
omOvlReturnEx(1, 1);
|
||||
}
|
||||
|
|
@ -176,7 +187,8 @@ static void fn_1_5EC(omObjData *arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void fn_1_6E8(void) {
|
||||
static void KillScene(void)
|
||||
{
|
||||
s16 temp_r31;
|
||||
|
||||
if (SLSaveFlagGet() == 0) {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -7,118 +7,121 @@
|
|||
#include "dolphin.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ UnkWindowDataStruct *unk00;
|
||||
/* 0x04 */ s32 unk04;
|
||||
/* 0x08 */ s16 unk08;
|
||||
/* 0x0A */ char unk0A[2];
|
||||
} UnkStateDataStruct; // Size 0xC
|
||||
/* 0x00 */ WindowWork *window;
|
||||
/* 0x04 */ s32 quitTimer;
|
||||
/* 0x08 */ s16 light;
|
||||
} StateWork; // Size 0xC
|
||||
|
||||
typedef struct {
|
||||
Vec unk00;
|
||||
Vec unk0C;
|
||||
GXColor unk18;
|
||||
} UnkLightDataStruct; // Size 0x1C
|
||||
Vec src;
|
||||
Vec dest;
|
||||
GXColor color;
|
||||
} UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3
|
||||
|
||||
static void fn_1_2FB0(omObjData *arg0);
|
||||
static void HandleState(omObjData *object);
|
||||
|
||||
omObjData *lbl_1_bss_28;
|
||||
|
||||
static UnkLightDataStruct lbl_1_data_A0 = {
|
||||
{ 0.0f, 300.0f, 0.0f },
|
||||
static UnkLightDataStruct lightTbl = {
|
||||
{ 0.0f, 300.0f, 0.0f },
|
||||
{ 0.0f, -300.0f, -600.0f },
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF }
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF },
|
||||
};
|
||||
|
||||
static Vec lbl_1_data_BC[3] = {
|
||||
static Vec shadowPosTbl[3] = {
|
||||
{ 0.0f, 3000.0f, 1.0f },
|
||||
{ 0.0f, 1.0f, 0.0f },
|
||||
{ 0.0f, 0.0f, 0.0f }
|
||||
{ 0.0f, 1.0f, 0.0f },
|
||||
{ 0.0f, 0.0f, 0.0f },
|
||||
};
|
||||
|
||||
omObjData *fn_1_2E04(void) {
|
||||
omObjData *var_r30;
|
||||
UnkStateDataStruct *temp_r3;
|
||||
LightData *sp8;
|
||||
omObjData *fn_1_2E04(void)
|
||||
{
|
||||
omObjData *object;
|
||||
StateWork *work;
|
||||
LightData *lightData;
|
||||
|
||||
var_r30 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, fn_1_2FB0);
|
||||
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkStateDataStruct), MEMORY_DEFAULT_NUM);
|
||||
var_r30->data = temp_r3;
|
||||
object = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, HandleState);
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
|
||||
object->data = work;
|
||||
lbl_1_bss_10 = fn_1_7F8();
|
||||
lbl_1_bss_18 = fn_1_15A4();
|
||||
temp_r3->unk00 = fn_1_A44C(0);
|
||||
work->window = fn_1_A44C(0);
|
||||
Hu3DLighInit();
|
||||
temp_r3->unk08 = Hu3DGLightCreateV(&lbl_1_data_A0.unk00, &lbl_1_data_A0.unk0C, &lbl_1_data_A0.unk18);
|
||||
Hu3DGLightInfinitytSet(temp_r3->unk08);
|
||||
sp8 = &Hu3DGlobalLight[temp_r3->unk08];
|
||||
work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color);
|
||||
Hu3DGLightInfinitytSet(work->light);
|
||||
lightData = &Hu3DGlobalLight[work->light];
|
||||
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
|
||||
Hu3DShadowTPLvlSet(0.45f);
|
||||
Hu3DShadowPosSet(&lbl_1_data_BC[0], &lbl_1_data_BC[1], &lbl_1_data_BC[2]);
|
||||
return var_r30;
|
||||
Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]);
|
||||
return object;
|
||||
}
|
||||
|
||||
void fn_1_2F4C(omObjData *arg0) {
|
||||
UnkStateDataStruct *temp_r31 = arg0->data;
|
||||
void fn_1_2F4C(omObjData *object)
|
||||
{
|
||||
StateWork *work = object->data;
|
||||
|
||||
fn_1_A3C(lbl_1_bss_10);
|
||||
fn_1_1798(lbl_1_bss_18);
|
||||
fn_1_A6AC(temp_r31->unk00);
|
||||
HuMemDirectFree(temp_r31);
|
||||
fn_1_A6AC(work->window);
|
||||
HuMemDirectFree(work);
|
||||
}
|
||||
|
||||
static void fn_1_2FB0(omObjData *arg0) {
|
||||
UnkStateDataStruct *temp_r31 = arg0->data;
|
||||
static void HandleState(omObjData *object)
|
||||
{
|
||||
StateWork *work = object->data;
|
||||
|
||||
switch (arg0->unk10) {
|
||||
switch (object->unk10) {
|
||||
case 0:
|
||||
arg0->unk10 = 1;
|
||||
object->unk10 = 1;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
WipeCreate(WIPE_MODE_IN, -1, 60);
|
||||
arg0->unk10 = 2;
|
||||
object->unk10 = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (WipeStatGet() != 0 || temp_r31->unk00->unk20 != 0) {
|
||||
if (WipeStatGet() != 0 || work->window->state != 0) {
|
||||
break;
|
||||
}
|
||||
fn_1_1A2C(lbl_1_bss_18, 1);
|
||||
arg0->unk10 = 3;
|
||||
object->unk10 = 3;
|
||||
/* fallthrough */
|
||||
case 3:
|
||||
if (fn_1_1A70(lbl_1_bss_18) != 0) {
|
||||
break;
|
||||
}
|
||||
arg0->unk10 = 4;
|
||||
object->unk10 = 4;
|
||||
/* fallthrough */
|
||||
case 4:
|
||||
fn_1_A6EC(temp_r31->unk00);
|
||||
fn_1_A71C(temp_r31->unk00, MAKE_MESSID(47, 167));
|
||||
arg0->unk10 = 5;
|
||||
fn_1_A6EC(work->window);
|
||||
fn_1_A71C(work->window, MAKE_MESSID(47, 167)); // Would you like to leave?
|
||||
object->unk10 = 5;
|
||||
/* fallthrough */
|
||||
case 5:
|
||||
if (temp_r31->unk00->unk20 != 0) {
|
||||
if (work->window->state != 0) {
|
||||
break;
|
||||
}
|
||||
fn_1_A880(temp_r31->unk00, 1);
|
||||
arg0->unk10 = 6;
|
||||
fn_1_A880(work->window, 1);
|
||||
object->unk10 = 6;
|
||||
/* fallthrough */
|
||||
case 6:
|
||||
if (temp_r31->unk00->unk20 != 0) {
|
||||
if (work->window->state != 0) {
|
||||
break;
|
||||
}
|
||||
fn_1_A704(temp_r31->unk00);
|
||||
if (temp_r31->unk00->unk1C == 0) {
|
||||
temp_r31->unk04 = 0;
|
||||
arg0->unk10 = 7;
|
||||
} else {
|
||||
arg0->unk10 = 2;
|
||||
fn_1_A704(work->window);
|
||||
if (work->window->choice == 0) {
|
||||
work->quitTimer = 0;
|
||||
object->unk10 = 7;
|
||||
}
|
||||
else {
|
||||
object->unk10 = 2;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
arg0->unk10 = 8;
|
||||
temp_r31->unk04 = 0;
|
||||
object->unk10 = 8;
|
||||
work->quitTimer = 0;
|
||||
/* fallthrough */
|
||||
case 8:
|
||||
if (temp_r31->unk00->unk20 == 0 && temp_r31->unk04++ >= 60) {
|
||||
if (work->window->state == 0 && work->quitTimer++ >= 60) {
|
||||
omSysExitReq = 1;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,147 +1,161 @@
|
|||
#include "game/window.h"
|
||||
#include "REL/option.h"
|
||||
#include "game/esprite.h"
|
||||
#include "game/memory.h"
|
||||
#include "game/process.h"
|
||||
#include "game/sprite.h"
|
||||
#include "game/window.h"
|
||||
|
||||
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2);
|
||||
static void fn_1_A860(UnkWindowDataStruct *arg0);
|
||||
static void fn_1_A8A4(void);
|
||||
static void HandleWindow(void);
|
||||
|
||||
UnkWindowDataStruct *fn_1_A44C(s32 arg0) {
|
||||
UnkWindowDataStruct *temp_r31;
|
||||
WindowWork *fn_1_A44C(s32 id)
|
||||
{
|
||||
WindowWork *work;
|
||||
|
||||
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM);
|
||||
temp_r31->unk18 = 0;
|
||||
temp_r31->unk10 = 0;
|
||||
temp_r31->unk14 = 0;
|
||||
temp_r31->unk20 = 0;
|
||||
temp_r31->unk00 = HuPrcChildCreate(fn_1_A8A4, 0x2000, 0x2000, 0, lbl_1_bss_8);
|
||||
temp_r31->unk00->user_data = temp_r31;
|
||||
temp_r31->unk08 = arg0;
|
||||
switch (temp_r31->unk08) {
|
||||
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WindowWork), MEMORY_DEFAULT_NUM);
|
||||
work->messToBeSet = 0;
|
||||
work->messWaitSignal = 0;
|
||||
work->choiceSignal = 0;
|
||||
work->state = 0;
|
||||
work->process = HuPrcChildCreate(HandleWindow, 0x2000, 0x2000, 0, lbl_1_bss_8);
|
||||
work->process->user_data = work;
|
||||
work->id = id;
|
||||
switch (work->id) {
|
||||
case 0:
|
||||
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
|
||||
HuWinBGTPLvlSet(temp_r31->unk04, 0.8f);
|
||||
HuWinMesSpeedSet(temp_r31->unk04, 0);
|
||||
HuWinMesPalSet(temp_r31->unk04, 7, 0, 0, 0);
|
||||
work->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
|
||||
HuWinBGTPLvlSet(work->window, 0.8f);
|
||||
HuWinMesSpeedSet(work->window, 0);
|
||||
HuWinMesPalSet(work->window, 7, 0, 0, 0);
|
||||
break;
|
||||
case 1:
|
||||
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0);
|
||||
HuWinAttrSet(temp_r31->unk04, 0x800);
|
||||
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
|
||||
HuWinMesSpeedSet(temp_r31->unk04, 0);
|
||||
work->window = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0);
|
||||
HuWinAttrSet(work->window, 0x800);
|
||||
HuWinBGTPLvlSet(work->window, 0.0f);
|
||||
HuWinMesSpeedSet(work->window, 0);
|
||||
break;
|
||||
case 2:
|
||||
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0);
|
||||
HuWinAttrSet(temp_r31->unk04, 0x800);
|
||||
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
|
||||
HuWinMesSpeedSet(temp_r31->unk04, 0);
|
||||
work->window = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0);
|
||||
HuWinAttrSet(work->window, 0x800);
|
||||
HuWinBGTPLvlSet(work->window, 0.0f);
|
||||
HuWinMesSpeedSet(work->window, 0);
|
||||
break;
|
||||
case 3:
|
||||
temp_r31->unk04 = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0);
|
||||
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
|
||||
HuWinMesSpeedSet(temp_r31->unk04, 0);
|
||||
work->window = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0);
|
||||
HuWinBGTPLvlSet(work->window, 0.0f);
|
||||
HuWinMesSpeedSet(work->window, 0);
|
||||
break;
|
||||
}
|
||||
HuWinDrawNoSet(temp_r31->unk04, 0x3F);
|
||||
fn_1_A828(temp_r31);
|
||||
HuWinDrawNoSet(work->window, 0x3F);
|
||||
fn_1_A828(work);
|
||||
HuSprExecLayerSet(0x3F, 2);
|
||||
return temp_r31;
|
||||
return work;
|
||||
}
|
||||
|
||||
void fn_1_A6AC(UnkWindowDataStruct *arg0) {
|
||||
HuWinExCleanup(arg0->unk04);
|
||||
HuPrcKill(arg0->unk00);
|
||||
HuMemDirectFree(arg0);
|
||||
void fn_1_A6AC(WindowWork *work)
|
||||
{
|
||||
HuWinExCleanup(work->window);
|
||||
HuPrcKill(work->process);
|
||||
HuMemDirectFree(work);
|
||||
}
|
||||
|
||||
void fn_1_A6EC(UnkWindowDataStruct *arg0) {
|
||||
if (arg0->unk0C == 0) {
|
||||
arg0->unk20 = 1;
|
||||
void fn_1_A6EC(WindowWork *work)
|
||||
{
|
||||
if (!work->visible) {
|
||||
work->state = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_A704(UnkWindowDataStruct *arg0) {
|
||||
if (arg0->unk0C != 0) {
|
||||
arg0->unk20 = 2;
|
||||
void fn_1_A704(WindowWork *work)
|
||||
{
|
||||
if (work->visible) {
|
||||
work->state = 2;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1) {
|
||||
if (arg0->unk20 == 0) {
|
||||
HuWinMesSet(arg0->unk04, arg1);
|
||||
} else {
|
||||
arg0->unk18 = arg1;
|
||||
void fn_1_A71C(WindowWork *work, s32 mess)
|
||||
{
|
||||
if (work->state == 0) {
|
||||
HuWinMesSet(work->window, mess);
|
||||
}
|
||||
else {
|
||||
work->messToBeSet = mess;
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2) {
|
||||
HuWinInsertMesSet(arg0->unk04, arg1, arg2);
|
||||
static void fn_1_A770(WindowWork *work, s32 mess, s16 index)
|
||||
{
|
||||
HuWinInsertMesSet(work->window, mess, index);
|
||||
}
|
||||
|
||||
void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2) {
|
||||
HuWinPosSet(arg0->unk04, arg1, arg2);
|
||||
// SetWindowPosition
|
||||
void fn_1_A7B0(WindowWork *work, float x, float y)
|
||||
{
|
||||
HuWinPosSet(work->window, x, y);
|
||||
}
|
||||
|
||||
void fn_1_A7F0(UnkWindowDataStruct *arg0) {
|
||||
HuWinDispOn(arg0->unk04);
|
||||
arg0->unk0C = 1;
|
||||
// DisplayWindow
|
||||
void fn_1_A7F0(WindowWork *work)
|
||||
{
|
||||
HuWinDispOn(work->window);
|
||||
work->visible = TRUE;
|
||||
}
|
||||
|
||||
void fn_1_A828(UnkWindowDataStruct *arg0) {
|
||||
HuWinDispOff(arg0->unk04);
|
||||
arg0->unk0C = 0;
|
||||
// HideWindow
|
||||
void fn_1_A828(WindowWork *work)
|
||||
{
|
||||
HuWinDispOff(work->window);
|
||||
work->visible = FALSE;
|
||||
}
|
||||
|
||||
static void fn_1_A860(UnkWindowDataStruct *arg0) {
|
||||
if (arg0->unk20 == 0) {
|
||||
arg0->unk20 = 3;
|
||||
static void fn_1_A860(WindowWork *work)
|
||||
{
|
||||
if (work->state == 0) {
|
||||
work->state = 3;
|
||||
}
|
||||
arg0->unk10 = 1;
|
||||
work->messWaitSignal = TRUE;
|
||||
}
|
||||
|
||||
void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1) {
|
||||
if (arg0->unk20 == 0) {
|
||||
arg0->unk20 = 4;
|
||||
void fn_1_A880(WindowWork *work, s32 choice)
|
||||
{
|
||||
if (work->state == 0) {
|
||||
work->state = 4;
|
||||
}
|
||||
arg0->unk14 = 1;
|
||||
arg0->unk1C = arg1;
|
||||
work->choiceSignal = TRUE;
|
||||
work->choice = choice;
|
||||
}
|
||||
|
||||
static void fn_1_A8A4(void) {
|
||||
UnkWindowDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
|
||||
static void HandleWindow(void)
|
||||
{
|
||||
WindowWork *work = HuPrcCurrentGet()->user_data;
|
||||
|
||||
while (1) {
|
||||
switch (temp_r31->unk20) {
|
||||
while (TRUE) {
|
||||
switch (work->state) {
|
||||
case 1:
|
||||
fn_1_A7F0(temp_r31);
|
||||
HuWinExAnimIn(temp_r31->unk04);
|
||||
fn_1_A7F0(work);
|
||||
HuWinExAnimIn(work->window);
|
||||
break;
|
||||
case 2:
|
||||
HuWinExAnimOut(temp_r31->unk04);
|
||||
fn_1_A828(temp_r31);
|
||||
HuWinExAnimOut(work->window);
|
||||
fn_1_A828(work);
|
||||
break;
|
||||
case 3:
|
||||
HuWinMesWait(temp_r31->unk04);
|
||||
temp_r31->unk10 = 0;
|
||||
HuWinMesWait(work->window);
|
||||
work->messWaitSignal = FALSE;
|
||||
break;
|
||||
case 4:
|
||||
temp_r31->unk1C = HuWinChoiceGet(temp_r31->unk04, temp_r31->unk1C);
|
||||
temp_r31->unk14 = 0;
|
||||
work->choice = HuWinChoiceGet(work->window, work->choice);
|
||||
work->choiceSignal = FALSE;
|
||||
break;
|
||||
}
|
||||
if (temp_r31->unk18 != 0) {
|
||||
HuWinMesSet(temp_r31->unk04, temp_r31->unk18);
|
||||
temp_r31->unk18 = 0;
|
||||
if (work->messToBeSet != 0) {
|
||||
HuWinMesSet(work->window, work->messToBeSet);
|
||||
work->messToBeSet = 0;
|
||||
}
|
||||
temp_r31->unk20 = 0;
|
||||
if (temp_r31->unk10 != 0) {
|
||||
temp_r31->unk20 = 3;
|
||||
work->state = 0;
|
||||
if (work->messWaitSignal) {
|
||||
work->state = 3;
|
||||
}
|
||||
if (temp_r31->unk14 != 0) {
|
||||
temp_r31->unk20 = 4;
|
||||
if (work->choiceSignal) {
|
||||
work->state = 4;
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue