Named most things in presentDll

This commit is contained in:
kabiskac 2024-08-04 18:40:58 +02:00
parent a7bde60c97
commit 3a7cde9f33
7 changed files with 1301 additions and 1127 deletions

View file

@ -5,242 +5,235 @@
#include "REL/present.h"
typedef struct UnkPresentCameraStruct {
typedef struct CameraWork {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec target;
/* 0x18 */ Vec up;
/* 0x24 */ float unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ Vec unk_2C;
/* 0x38 */ Vec unk_38;
/* 0x44 */ float unk44;
/* 0x48 */ float unk48;
/* 0x4C */ float unk4C;
/* 0x50 */ float unk_50;
/* 0x54 */ float unk_54;
/* 0x58 */ Vec unk_58;
/* 0x64 */ Vec unk_64;
/* 0x70 */ float unk70;
/* 0x74 */ float unk74;
/* 0x78 */ float unk78;
/* 0x7C */ float unk_7C;
/* 0x80 */ float unk_80;
/* 0x84 */ float unk_84;
/* 0x88 */ float unk_88;
/* 0x8C */ float unk_8C;
/* 0x90 */ float unk_90;
/* 0x94 */ float unk_94;
/* 0x98 */ float unk_98;
} UnkPresentCameraStruct; /* size = 0x9C */
/* 0x24 */ float zoom;
/* 0x28 */ float rot;
/* 0x2C */ Vec posPrev;
/* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC];
/* 0x50 */ float zoomPrev;
/* 0x54 */ float rotPrev;
/* 0x58 */ Vec posTarget;
/* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC];
/* 0x7C */ float zoomTarget;
/* 0x80 */ float rotTarget;
/* 0x84 */ float timeEye;
/* 0x88 */ float eyeSpeed;
/* 0x8C */ float timeTarget;
/* 0x90 */ float targetSpeed;
/* 0x94 */ float timeRot;
/* 0x98 */ float rotSpeed;
} CameraWork; /* size = 0x9C */ // same as in option/camera.c
static void fn_1_C20(omObjData *object);
static void ExecCameraObj(omObjData *object);
static void ExecCamera(omObjData *object);
omObjData *fn_1_6B4(void)
omObjData *PresentCameraCreate(void)
{
omObjData *var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8);
UnkPresentCameraStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM);
var_r30->data = var_r31;
omObjData *object = omAddObjEx(presentObjMan, 1001, 0, 0, 3, ExecCameraObj);
CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM);
object->data = work;
var_r31->pos.x = 0.0f;
var_r31->pos.y = 0.0f;
var_r31->pos.z = 0.0f;
work->pos.x = 0.0f;
work->pos.y = 0.0f;
work->pos.z = 0.0f;
var_r31->target.x = 0.0f;
var_r31->target.y = 0.0f;
var_r31->target.z = 0.0f;
work->target.x = 0.0f;
work->target.y = 0.0f;
work->target.z = 0.0f;
var_r31->up.x = 0.0f;
var_r31->up.y = 1.0f;
var_r31->up.z = 0.0f;
work->up.x = 0.0f;
work->up.y = 1.0f;
work->up.z = 0.0f;
var_r31->unk_24 = 0.0f;
var_r31->unk_28 = 0.0f;
var_r31->unk_8C = 1.0f;
var_r31->unk_84 = 1.0f;
var_r31->unk_94 = 1.0f;
work->zoom = 0.0f;
work->rot = 0.0f;
work->timeTarget = 1.0f;
work->timeEye = 1.0f;
work->timeRot = 1.0f;
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_9A4(var_r30, 0.0f, 0.0f, -600.0f, 1);
fn_1_920(var_r30, 0.0f, 220.0f, 250.0f, 1);
PresentCameraFocusSet(object, 0.0f, 0.0f, -600.0f, 1);
PresentCameraTargetSet(object, 0.0f, 220.0f, 250.0f, 1);
return var_r30;
return object;
}
void fn_1_8F0(omObjData *object)
void PresentCameraKill(omObjData *object)
{
HuMemDirectFree(object->data);
}
void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1)
void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
var_r31->unk_58.x = arg8;
var_r31->unk_58.y = arg9;
var_r31->unk_58.z = argA;
work->posTarget.x = x;
work->posTarget.y = y;
work->posTarget.z = z;
var_r31->unk_2C = var_r31->pos;
var_r31->unk_84 = 0.0f;
var_r31->unk_88 = 1.0f / arg1;
work->posPrev = work->pos;
work->timeEye = 0.0f;
work->eyeSpeed = 1.0f / duration;
}
void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1)
void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
var_r31->unk_64.x = arg8;
var_r31->unk_64.y = arg9;
var_r31->unk_64.z = argA;
work->posFocus.x = x;
work->posFocus.y = y;
work->posFocus.z = z;
var_r31->unk_38 = var_r31->target;
var_r31->unk_8C = 0.0f;
var_r31->unk_90 = 1.0f / arg1;
work->targetPrev = work->target;
work->timeTarget = 0.0f;
work->targetSpeed = 1.0f / duration;
}
static void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA)
void PresentCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
var_r31->unk_64.y = argA;
var_r31->unk_7C = arg8;
var_r31->unk_80 = arg9;
work->posFocus.y = y;
work->zoomTarget = zoom;
work->rotTarget = rot;
var_r31->unk_38.y = var_r31->target.y;
var_r31->unk_50 = var_r31->unk_24;
var_r31->unk_54 = var_r31->unk_28;
var_r31->unk_94 = 0.0f;
var_r31->unk_98 = 1.0f / arg1;
work->targetPrev.y = work->target.y;
work->zoomPrev = work->zoom;
work->rotPrev = work->rot;
work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration;
}
static float fn_1_AAC(omObjData *object)
float PresentCameraZoomGet(omObjData *object)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
float var_f31 = var_r31->unk_24;
float var_f31 = work->zoom;
return var_f31;
}
static float fn_1_ADC(omObjData *object)
float PresentCameraRotGet(omObjData *object)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
float var_f31 = var_r31->unk_28;
float var_f31 = work->rot;
return var_f31;
}
static void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3)
void PresentCameraPosGet(omObjData *object, float *x, float *y, float *z)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
*arg1 = var_r31->pos.x;
*arg2 = var_r31->pos.y;
*arg3 = var_r31->pos.z;
*x = work->pos.x;
*y = work->pos.y;
*z = work->pos.z;
}
static void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3)
void PresentCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
*arg1 = var_r31->target.x;
*arg2 = var_r31->target.y;
*arg3 = var_r31->target.z;
*x = work->target.x;
*y = work->target.y;
*z = work->target.z;
}
s32 fn_1_B6C(omObjData *object)
s32 PresentCameraDoneCheck(omObjData *object)
{
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
s32 var_r30 = 1;
s32 var_r29 = 1;
if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) {
if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) {
var_r29 = 0;
}
if (!var_r29 && !(var_r31->unk_84 < 1.0f)) {
if (!var_r29 && !(work->timeEye < 1.0f)) {
var_r30 = 0;
}
return var_r30;
}
void fn_1_BF8(omObjData *object)
static void ExecCameraObj(omObjData *object)
{
fn_1_C20(object);
ExecCamera(object);
}
static void fn_1_C20(omObjData *object)
static void ExecCamera(omObjData *object)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
CameraWork *work = object->data;
float weight;
float dx;
float dz;
UnkPresentCameraStruct *var_r31 = object->data;
if (work->timeEye < 1.0f) {
weight = sind(90.0f * work->timeEye);
work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
if (var_r31->unk_84 < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_84);
var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x);
var_r31->pos.y = var_r31->unk_2C.y + var_f28 * (var_r31->unk_58.y - var_r31->unk_2C.y);
var_r31->pos.z = var_r31->unk_2C.z + var_f28 * (var_r31->unk_58.z - var_r31->unk_2C.z);
if ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) {
var_r31->pos = var_r31->unk_58;
if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
work->pos = work->posTarget;
}
}
if (var_r31->unk_8C < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_8C);
var_r31->target.x = var_r31->unk_38.x + var_f28 * (var_r31->unk_64.x - var_r31->unk_38.x);
var_r31->target.y = var_r31->unk_38.y + var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y);
var_r31->target.z = var_r31->unk_38.z + var_f28 * (var_r31->unk_64.z - var_r31->unk_38.z);
if (work->timeTarget < 1.0f) {
weight = sind(90.0f * work->timeTarget);
work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) {
var_r31->target = var_r31->unk_64;
if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
work->target = work->posFocus;
}
}
if (var_r31->unk_94 < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_94);
var_r31->target.y = var_r31->unk_38.y + (var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y));
var_r31->unk_24 = var_r31->unk_50 + (var_f28 * (var_r31->unk_7C - var_r31->unk_50));
var_r31->unk_28 = var_r31->unk_54 + (var_f28 * (var_r31->unk_80 - var_r31->unk_54));
if (work->timeRot < 1.0f) {
weight = sind(90.0f * work->timeRot);
work->target.y = work->targetPrev.y + (weight * (work->posFocus.y - work->targetPrev.y));
work->zoom = work->zoomPrev + (weight * (work->zoomTarget - work->zoomPrev));
work->rot = work->rotPrev + (weight * (work->rotTarget - work->rotPrev));
if ((var_r31->unk_94 += var_r31->unk_98) >= 1.0f) {
var_r31->target.y = var_r31->unk_64.y;
var_r31->unk_24 = var_r31->unk_7C;
var_r31->unk_28 = var_r31->unk_80;
if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget;
work->rot = work->rotTarget;
}
var_r31->target.x = var_r31->unk_24 * -sind(var_r31->unk_28);
var_r31->target.z = var_r31->unk_24 * cosd(var_r31->unk_28);
work->target.x = work->zoom * -sind(work->rot);
work->target.z = work->zoom * cosd(work->rot);
}
var_f31 = var_r31->target.x - var_r31->pos.x;
var_f30 = var_r31->target.z - var_r31->pos.z;
dx = work->target.x - work->pos.x;
dz = work->target.z - work->pos.z;
var_r31->unk_24 = sqrtf(var_f31 * var_f31 + var_f30 * var_f30);
var_r31->unk_28 = fmod(-atan2d(var_f31, var_f30), 360.0);
if (var_r31->unk_28 < 0.0f) {
var_r31->unk_28 += 360.0f;
work->zoom = sqrtf(dx * dx + dz * dz);
work->rot = fmod(-atan2d(dx, dz), 360.0);
if (work->rot < 0.0f) {
work->rot += 360.0f;
}
Hu3DCameraPosSet(1, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z, var_r31->up.x, var_r31->up.y, var_r31->up.z, var_r31->target.x,
var_r31->target.y, var_r31->target.z);
Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, work->target.y, work->target.z);
}
static void fn_1_1198(omObjData *object)
static void CameraExecDebug(omObjData *object)
{
if (HuPadBtn[0] & PAD_BUTTON_B) {
UnkPresentCameraStruct *var_r31 = object->data;
CameraWork *work = object->data;
var_r31->target.x = var_r31->target.x + (0.5f * HuPadStkX[0]);
var_r31->target.y = var_r31->target.y + (0.5f * HuPadStkY[0]);
var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]);
var_r31->pos.z = var_r31->pos.z - (0.5f * HuPadTrigR[0]);
var_r31->pos.x = var_r31->pos.x + (0.5f * HuPadSubStkY[0]);
var_r31->pos.y = var_r31->pos.y + (0.5f * HuPadSubStkX[0]);
work->target.x += (0.5f * HuPadStkX[0]);
work->target.y += (0.5f * HuPadStkY[0]);
work->pos.z += (0.5f * HuPadTrigL[0]);
work->pos.z -= (0.5f * HuPadTrigR[0]);
work->pos.x += (0.5f * HuPadSubStkY[0]);
work->pos.y += (0.5f * HuPadSubStkX[0]);
}
}
static void fn_1_1398(omObjData *object)
static void CameraPrintDebug(omObjData *object)
{
UnkPresentCameraStruct *var_r31 = object->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", var_r31->pos.x, var_r31->pos.y, var_r31->pos.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", var_r31->unk_24, var_r31->unk_28);
CameraWork *work = object->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
}

View file

@ -6,228 +6,224 @@
#include "REL/present.h"
typedef struct UnkPresentStruct5 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s16 unk_04;
/* 0x08 */ float x;
/* 0x0C */ float y;
/* 0x10 */ float z;
/* 0x14 */ float unk_14;
/* 0x18 */ s32 unk18[2];
/* 0x20 */ float unk_20;
/* 0x24 */ float unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ float unk_2C;
/* 0x30 */ float unk_30;
/* 0x34 */ float unk_34;
/* 0x38 */ float unk_38;
/* 0x3C */ s32 unk3C[3];
/* 0x48 */ float unk_48;
/* 0x4C */ float unk_4C;
typedef struct GuideWork {
/* 0x00 */ s32 execMode;
/* 0x04 */ s16 motion;
/* 0x08 */ Vec pos;
/* 0x14 */ Vec newPos;
/* 0x20 */ Vec rot;
/* 0x2C */ Vec posDelta;
/* 0x38 */ float distRemain;
/* 0x3C */ char unk3C[0xC];
/* 0x48 */ float time;
/* 0x4C */ float speed;
/* 0x50 */ s32 unk_50;
/* 0x54 */ s32 unk_54;
} UnkPresentStruct5; /* size = 0x58 */
} GuideWork; /* size = 0x58 */
static void fn_1_4620(omObjData *object);
static void fn_1_4880(omObjData *object);
static void fn_1_4A04(omObjData *object);
static float fn_1_4CEC(float arg8, float arg9, float argA);
static void ExecGuideEnter(omObjData *object);
static void ExecGuideLeave(omObjData *object);
static void UpdateGuide(omObjData *object);
static float LerpAngle(float start, float end, float time);
omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 };
static omObjFunc execModeTbl[] = { NULL, ExecGuideEnter, ExecGuideLeave };
static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B };
static const s32 guideMotTbl[] = {
DATA_MAKE_NUM(DATADIR_PRESENT, 137),
DATA_MAKE_NUM(DATADIR_PRESENT, 138),
DATA_MAKE_NUM(DATADIR_PRESENT, 139),
};
omObjData *fn_1_42F4(void)
omObjData *PresentGuideCreate(void)
{
s32 var_r29;
omObjData *var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL);
UnkPresentStruct5 *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM);
var_r31->data = var_r30;
omObjData *object = omAddObjEx(presentObjMan, 1002, 1, 3, 2, NULL);
GuideWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
object->data = work;
var_r30->x = 0.0f;
var_r30->z = 0.0f;
var_r30->y = 0.0f;
var_r30->unk_20 = 0.0f;
var_r30->unk_24 = 0.0f;
var_r30->unk_28 = 0.0f;
var_r30->unk_2C = 0.0f;
var_r30->unk_34 = 0.0f;
var_r30->unk_30 = 0.0f;
var_r31->model[0] = Hu3DModelCreate(HuDataReadNum(0x6E0088, MEMORY_DEFAULT_NUM));
Hu3DModelLayerSet(var_r31->model[0], 1);
work->pos.x = 0.0f;
work->pos.z = 0.0f;
work->pos.y = 0.0f;
work->rot.x = 0.0f;
work->rot.y = 0.0f;
work->rot.z = 0.0f;
work->posDelta.x = 0.0f;
work->posDelta.z = 0.0f;
work->posDelta.y = 0.0f;
object->model[0] = Hu3DModelCreate(HuDataReadNum(DATA_MAKE_NUM(DATADIR_PRESENT, 136), MEMORY_DEFAULT_NUM));
Hu3DModelLayerSet(object->model[0], 1);
for (var_r29 = 0; var_r29 < 3; var_r29++) {
var_r31->motion[var_r29] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_BD8[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA));
object->motion[var_r29] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA));
}
Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[var_r30->unk_04 = 0], 0.0f, 8.0f, 0x40000001);
var_r30->unk_50 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 10);
var_r30->unk_54 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 10);
Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = 0], 0.0f, 8.0f, 0x40000001);
work->unk_50 = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 10);
work->unk_54 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 10);
CharModelLayerSetAll(1);
Hu3DModelShadowSet(var_r31->model[0]);
fn_1_45C0(var_r31, 0);
fn_1_4A04(var_r31);
Hu3DModelAttrSet(var_r31->model[0], 1);
Hu3DModelShadowSet(object->model[0]);
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
UpdateGuide(object);
Hu3DModelAttrSet(object->model[0], 1);
return var_r31;
return object;
}
void fn_1_4534(omObjData *object)
void PresentGuideKill(omObjData *object)
{
s32 var_r31;
void *var_r29 = object->data;
void *work = object->data;
for (var_r31 = 0; var_r31 < 1; var_r31++) {
Hu3DModelKill(object->model[var_r31]);
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(object->model[i]);
}
for (var_r31 = 0; var_r31 < 3; var_r31++) {
Hu3DMotionKill(object->motion[var_r31]);
for (i = 0; i < 3; i++) {
Hu3DMotionKill(object->motion[i]);
}
HuMemDirectFree(var_r29);
HuMemDirectFree(work);
}
void fn_1_45C0(omObjData *object, s32 arg1)
void PresentGuideExecModeSet(omObjData *object, s32 execMode)
{
UnkPresentStruct5 *var_r31 = object->data;
GuideWork *work = object->data;
var_r31->unk_00 = arg1;
object->func = lbl_1_data_1A0[arg1];
work->execMode = execMode;
object->func = execModeTbl[execMode];
object->unk10 = 0;
object->unk10 = 0;
}
s32 fn_1_4604(omObjData *object)
s32 PresentGuideExecModeGet(omObjData *object)
{
UnkPresentStruct5 *var_r31 = object->data;
GuideWork *work = object->data;
return var_r31->unk_00;
return work->execMode;
}
static void fn_1_4620(omObjData *object)
static void ExecGuideEnter(omObjData *object)
{
float var_f31;
UnkPresentStruct5 *var_r31 = object->data;
GuideWork *work = object->data;
switch (object->unk10) {
case 0:
Hu3DModelAttrReset(object->model[0], 1);
var_r31->x = -300.0f;
var_r31->z = -180.0f;
var_r31->unk_48 = 0.0f;
var_r31->unk_4C = 0.025f;
work->pos.x = -300.0f;
work->pos.z = -180.0f;
work->time = 0.0f;
work->speed = 0.025f;
object->unk10 = 1;
case 1:
var_f31 = sind(90.0f * var_r31->unk_48);
var_f31 = sind(90.0f * work->time);
var_f31 *= var_f31;
var_r31->unk_14 = -300.0f + (300.0f * var_f31);
var_r31->unk_2C = var_r31->unk_14 - var_r31->x;
if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) {
work->newPos.x = -300.0f + (300.0f * var_f31);
work->posDelta.x = work->newPos.x - work->pos.x;
if ((work->time += work->speed) < 1.0f) {
break;
}
var_r31->x = 0.0f;
var_r31->unk_48 = 0.0f;
var_r31->unk_4C = 0.05f;
work->pos.x = 0.0f;
work->time = 0.0f;
work->speed = 0.05f;
object->unk10 = 2;
case 2:
var_r31->unk_2C = 0.0f;
var_r31->unk_34 = 0.01f;
if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) {
work->posDelta.x = 0.0f;
work->posDelta.z = 0.01f;
if ((work->time += work->speed) < 1.0f) {
break;
}
var_r31->unk_24 = 0.0f;
var_r31->unk_2C = 0.0f;
var_r31->unk_30 = 0.0f;
var_r31->unk_34 = 0.0f;
work->rot.y = 0.0f;
work->posDelta.x = 0.0f;
work->posDelta.y = 0.0f;
work->posDelta.z = 0.0f;
object->unk10 = 3;
case 3:
fn_1_45C0(object, 0);
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
break;
default:
break;
}
fn_1_4A04(object);
UpdateGuide(object);
}
static void fn_1_4880(omObjData *object)
static void ExecGuideLeave(omObjData *object)
{
float var_f31;
float weight;
UnkPresentStruct5 *var_r30 = object->data;
GuideWork *work = object->data;
switch (object->unk10) {
case 0:
var_r30->unk_48 = 0.0f;
var_r30->unk_4C = 0.025f;
work->time = 0.0f;
work->speed = 0.025f;
Hu3DModelAttrReset(object->model[0], 1);
object->unk10 = 1;
case 1:
var_f31 = sind(90.0f * var_r30->unk_48);
var_f31 *= var_f31;
var_r30->unk_14 = -(300.0f * var_f31);
var_r30->unk_2C = var_r30->unk_14 - var_r30->x;
if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) {
weight = sind(90.0f * work->time);
weight *= weight;
work->newPos.x = -(300.0f * weight);
work->posDelta.x = work->newPos.x - work->pos.x;
if ((work->time += work->speed) < 1.0f) {
break;
}
object->unk10 = 2;
case 2:
Hu3DModelAttrSet(object->model[0], 1);
fn_1_45C0(object, 0);
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
break;
default:
break;
}
fn_1_4A04(object);
UpdateGuide(object);
(void)object;
}
static void fn_1_4A04(omObjData *object)
static void UpdateGuide(omObjData *object)
{
UnkPresentStruct5 *var_r31 = object->data;
s16 var_r29 = 0;
float var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34;
GuideWork *work = object->data;
s16 motion = 0;
var_r31->unk_38 = sqrtf(var_f30);
if (0.001f <= var_r31->unk_38) {
if (12.0f <= var_r31->unk_38) {
var_r31->unk_2C = var_r31->unk_2C / var_r31->unk_38;
var_r31->unk_34 = var_r31->unk_34 / var_r31->unk_38;
var_r31->unk_38 = 12.0f;
var_r31->unk_2C = 12.0f * var_r31->unk_2C;
var_r31->unk_34 = 12.0f * var_r31->unk_34;
work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= work->distRemain) {
if (12.0f <= work->distRemain) {
work->posDelta.x /= work->distRemain;
work->posDelta.z /= work->distRemain;
work->distRemain = 12.0f;
work->posDelta.x = 12.0f * work->posDelta.x;
work->posDelta.z = 12.0f * work->posDelta.z;
}
var_r31->unk_24 = fn_1_4CEC(var_r31->unk_24, atan2d(var_r31->unk_2C, var_r31->unk_34), 0.4f);
work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f);
if (8.0f <= var_r31->unk_38) {
var_r29 = 2;
if (8.0f <= work->distRemain) {
motion = 2;
}
else {
var_r29 = 1;
motion = 1;
}
}
var_r31->x = var_r31->x + var_r31->unk_2C;
var_r31->z = var_r31->z + var_r31->unk_34;
if (var_r31->unk_04 != var_r29) {
Hu3DMotionShiftSet(object->model[0], object->motion[var_r31->unk_04 = var_r29], 0.0f, 8.0f, 0x40000001); // or 0x41000000
work->pos.x += work->posDelta.x;
work->pos.z += work->posDelta.z;
if (work->motion != motion) {
Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = motion], 0.0f, 8.0f, 0x40000001);
}
omSetTra(object, var_r31->x, var_r31->y, var_r31->z);
omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28);
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_4CEC(float arg8, float arg9, float argA)
static float LerpAngle(float start, float end, float time)
{
float var_f30;
float angle;
float var_f31 = fmod(arg9 - arg8, 360.0f);
if (0.0f > var_f31) {
var_f31 += 360.0f;
float delta = fmod(end - start, 360.0f);
if (0.0f > delta) {
delta += 360.0f;
}
if (180.0f < var_f31) {
var_f31 -= 360.0f;
if (180.0f < delta) {
delta -= 360.0f;
}
var_f30 = fmod(arg8 + (var_f31 * argA), 360.0f);
if (0.0f > var_f30) {
var_f30 += 360.0f;
angle = fmod(start + (delta * time), 360.0f);
if (0.0f > angle) {
angle += 360.0f;
}
return var_f30;
return angle;
}

View file

@ -8,158 +8,158 @@
#include "REL/present.h"
typedef struct UnkPresentStruct6 {
/* 0x00 */ s16 unk_00;
/* 0x04 */ float unk_04;
/* 0x08 */ float unk_08;
} UnkPresentStruct6; /* size 0x0C */ // looks like a struct in option/scene.c
typedef struct FaderWork {
/* 0x00 */ s16 id;
/* 0x04 */ float tplvl;
/* 0x08 */ float speed;
} FaderWork; /* size 0x0C */ // same as in option/scene.c
typedef struct UnkPresentStruct6Weird {
/* 0x00 */ s16 unk_00;
/* 0x04 */ float unk_04;
/* 0x08 */ float unk_08;
/* 0x0C */ float unk_0C;
} UnkPresentStruct6Weird; /* size = 0x10 */ // looks like a struct in option/scene.c
typedef struct FaderWork2 {
/* 0x00 */ s16 id;
/* 0x04 */ float tpMultiplier;
/* 0x08 */ float tplvl;
/* 0x0C */ float speed;
} FaderWork2; /* size = 0x10 */
omObjData *lbl_1_bss_18;
omObjData *presentState;
omObjData *lbl_1_bss_14;
omObjData *lbl_1_bss_10;
omObjData *present;
omObjData *lbl_1_bss_C;
omObjData *lbl_1_bss_8;
Process *lbl_1_bss_4;
omObjData *lbl_1_bss_0;
omObjData *presentCamera;
Process *presentObjMan;
static omObjData *scene;
static void fn_1_254(void);
static void fn_1_45C(void);
static void fn_1_5EC(omObjData *object);
static void FadeSprite(void);
static void FadeModel(void);
static void SceneMain(omObjData *object);
void ObjectSetup(void)
{
lbl_1_bss_4 = omInitObjMan(150, 8192);
omGameSysInit(lbl_1_bss_4);
presentObjMan = omInitObjMan(150, 8192);
omGameSysInit(presentObjMan);
HuWinInit(1);
lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC);
lbl_1_bss_0->unk10 = 0;
lbl_1_bss_18 = fn_1_39A8();
scene = omAddObjEx(presentObjMan, 1000, 0, 0, 0, SceneMain);
scene->unk10 = 0;
presentState = PresentStateCreate();
}
void fn_1_144(s16 arg0, s32 arg1, s32 arg2)
void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration)
{
Process *var_r30;
Process *process;
UnkPresentStruct6 *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_08 = 1.0f / arg2;
if (arg1) {
var_r31->unk_08 = var_r31->unk_08;
var_r31->unk_04 = 0.0f;
FaderWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->id = sprite;
work->speed = 1.0f / duration;
if (inF) {
work->speed = work->speed;
work->tplvl = 0.0f;
}
else {
var_r31->unk_08 = -var_r31->unk_08;
var_r31->unk_04 = 1.0f;
work->speed = -work->speed;
work->tplvl = 1.0f;
}
espDispOn(var_r31->unk_00);
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
espDispOn(work->id);
espTPLvlSet(work->id, work->tplvl);
process = HuPrcChildCreate(FadeSprite, 100, 5376, 0, HuPrcCurrentGet());
process->user_data = work;
}
static void fn_1_254(void)
static void FadeSprite(void)
{
UnkPresentStruct6 *var_r31 = HuPrcCurrentGet()->user_data;
FaderWork *work = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08;
if (var_r31->unk_04 > 1.0f) {
var_r31->unk_04 = 1.0f;
work->tplvl = work->tplvl + work->speed;
if (work->tplvl > 1.0f) {
work->tplvl = 1.0f;
break;
}
else if (var_r31->unk_04 < 0.0f) {
var_r31->unk_04 = 0.0f;
else if (work->tplvl < 0.0f) {
work->tplvl = 0.0f;
break;
}
else {
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
espTPLvlSet(work->id, work->tplvl);
HuPrcVSleep();
}
}
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
if (var_r31->unk_08 < 0.0f) {
espDispOff(var_r31->unk_00);
espTPLvlSet(work->id, work->tplvl);
if (work->speed < 0.0f) {
espDispOff(work->id);
}
HuMemDirectFree(work);
HuPrcEnd();
}
void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration)
{
Process *process;
// bug: wrong struct in sizeof
FaderWork2 *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->id = model;
work->speed = 1.0f / duration;
work->tpMultiplier = tpMultiplier;
if (inF) {
work->speed = work->speed;
work->tplvl = 0.0f;
}
else {
work->speed = -work->speed;
work->tplvl = 1.0f;
}
Hu3DModelTPLvlSet(work->id, work->tplvl * work->tpMultiplier);
Hu3DModelAttrReset(work->id, 1);
process = HuPrcChildCreate(FadeModel, 100, 5376, 0, HuPrcCurrentGet());
process->user_data = work;
}
static void FadeModel(void)
{
FaderWork2 *var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->tplvl += var_r31->speed;
if (var_r31->tplvl > 1.0f) {
var_r31->tplvl = 1.0f;
break;
}
else if (var_r31->tplvl < 0.0f) {
var_r31->tplvl = 0.0f;
break;
}
else {
Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier);
HuPrcVSleep();
}
}
Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier);
if (var_r31->speed < 0.0f) {
Hu3DModelAttrSet(var_r31->id, 1);
}
HuMemDirectFree(var_r31);
HuPrcEnd();
}
void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2)
BOOL PresentPadCheck(u16 btn)
{
Process *var_r30;
// TODO correct type? why are only 12 bytes allocated?
UnkPresentStruct6Weird *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_0C = 1.0f / arg2;
var_r31->unk_04 = arg8;
if (arg1) {
var_r31->unk_0C = var_r31->unk_0C;
var_r31->unk_08 = 0.0f;
}
else {
var_r31->unk_0C = -var_r31->unk_0C;
var_r31->unk_08 = 1.0f;
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
Hu3DModelAttrReset(var_r31->unk_00, 1);
var_r30 = HuPrcChildCreate(fn_1_45C, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
}
static void fn_1_45C(void)
{
UnkPresentStruct6Weird *var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C;
if (var_r31->unk_08 > 1.0f) {
var_r31->unk_08 = 1.0f;
break;
}
else if (var_r31->unk_08 < 0.0f) {
var_r31->unk_08 = 0.0f;
break;
}
else {
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
HuPrcVSleep();
}
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
if (var_r31->unk_0C < 0.0f) {
Hu3DModelAttrSet(var_r31->unk_00, 1);
}
HuMemDirectFree(var_r31);
HuPrcEnd();
}
s32 fn_1_550(u16 arg0)
{
u32 var_r31 = HuPadBtnDown[0] & arg0;
u32 var_r31 = HuPadBtnDown[0] & btn;
return var_r31 != 0;
}
s32 fn_1_584(u16 arg0)
BOOL PresentPadDStkRepCheck(u16 dir)
{
u32 var_r31 = HuPadDStkRep[0] & arg0;
u32 var_r31 = HuPadDStkRep[0] & dir;
return var_r31 != 0;
}
s32 fn_1_5B8(u16 arg0)
BOOL PresentPadDStkCheck(u16 dir)
{
u32 var_r31 = HuPadDStk[0] & arg0;
u32 var_r31 = HuPadDStk[0] & dir;
return var_r31 != 0;
}
static void fn_1_5EC(omObjData *object)
static void SceneMain(omObjData *object)
{
switch (object->unk10) {
case 0:
@ -176,7 +176,7 @@ static void fn_1_5EC(omObjData *object)
break;
case 3:
if (!WipeStatGet()) {
fn_1_3B18(lbl_1_bss_18);
PresentStateKill(presentState);
omOvlReturnEx(1, 1);
}
break;

View file

@ -7,69 +7,74 @@
#include "REL/present.h"
typedef struct UnkPresentStruct {
/* 0x00 */ UnkWindowDataStruct *unk_00;
/* 0x04 */ s32 unk_04;
} UnkPresentStruct; /* size = 0x08 */
typedef struct StateWork {
/* 0x00 */ PresentWindow *window;
/* 0x04 */ s32 quitTimer;
} StateWork; /* size = 0x08 */
typedef struct UnkPresentStruct4 {
/* 0x00 */ Vec unk_00;
/* 0x0C */ Vec unk_0C;
/* 0x18 */ Vec unk_18;
} UnkPresentStruct4; /* size = 0x1C */
typedef struct UnkShadowDataStruct {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec up;
/* 0x18 */ Vec target;
} UnkShadowDataStruct; /* size = 0x24 */
omObjData *lbl_1_bss_20;
omObjData *presentGuide;
UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } };
static UnkShadowDataStruct shadowPosTbl = {
{ 0.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
};
static void fn_1_3B8C(omObjData *object);
static void fn_1_3DB8(omObjData *object);
static void fn_1_4190(UnkWindowDataStruct *arg0);
static void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1);
static void fn_1_41E0(void);
static void ExecPresentView(omObjData *object);
static void ExecPresentGet(omObjData *object);
void PresentWinDispOff(PresentWindow *work);
void PresentWinChoiceSet(PresentWindow *work, s32 choice);
static void ExecWindow(void);
omObjData *fn_1_39A8(void)
omObjData *PresentStateCreate(void)
{
omObjData *object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL);
UnkPresentStruct *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM);
object->data = var_r30;
omObjData *object = omAddObjEx(presentObjMan, 1000, 0, 0, 4, NULL);
StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work;
var_r30->unk_04 = 0;
lbl_1_bss_8 = fn_1_6B4();
lbl_1_bss_10 = fn_1_1458();
lbl_1_bss_20 = fn_1_42F4();
var_r30->unk_00 = fn_1_3EA4(0);
work->quitTimer = 0;
presentCamera = PresentCameraCreate();
present = PresentCreate();
presentGuide = PresentGuideCreate();
work->window = PresentWinCreate(0);
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&lbl_1_data_F0.unk_00, &lbl_1_data_F0.unk_0C, &lbl_1_data_F0.unk_18);
Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target);
if (omovlevtno > 0) {
OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n");
object->func = fn_1_3DB8;
object->func = ExecPresentGet;
object->unk10 = 0;
}
else {
OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n");
object->func = fn_1_3B8C;
object->func = ExecPresentView;
object->unk10 = 0;
}
return object;
}
void fn_1_3B18(omObjData *object)
void PresentStateKill(omObjData *object)
{
UnkWindowDataStruct **var_r31 = object->data;
PresentWindow **var_r31 = object->data;
fn_1_8F0(lbl_1_bss_8);
fn_1_1784(lbl_1_bss_10);
fn_1_4534(lbl_1_bss_20);
fn_1_4040(*var_r31);
PresentCameraKill(presentCamera);
PresentKill(present);
PresentGuideKill(presentGuide);
PresentWinKill(*var_r31);
HuMemDirectFree(var_r31);
}
static void fn_1_3B8C(omObjData *object)
static void ExecPresentView(omObjData *object)
{
UnkPresentStruct *var_r30 = object->data;
StateWork *work = object->data;
switch (object->unk10) {
case 0:
@ -81,39 +86,39 @@ static void fn_1_3B8C(omObjData *object)
}
object->unk10 = 2;
case 2:
fn_1_180C(lbl_1_bss_10, 1);
PresentExecModeSet(present, 1);
object->unk10 = 3;
case 3:
if (fn_1_1850(lbl_1_bss_10)) {
if (PresentExecModeGet(present)) {
return;
}
object->unk10 = 4;
case 4:
fn_1_45C0(lbl_1_bss_20, 1);
PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_ENTER);
object->unk10 = 5;
case 5:
if (fn_1_4604(lbl_1_bss_20)) {
if (PresentGuideExecModeGet(presentGuide)) {
return;
}
object->unk10 = 6;
case 6:
HuAudFXPlay(66);
fn_1_4080(var_r30->unk_00);
fn_1_40B0(var_r30->unk_00, 0x320002);
PresentWinAnimIn(work->window);
PresentWinMesSet(work->window, 0x320002);
object->unk10 = 7;
case 7:
if (var_r30->unk_00->unk_20) {
if (work->window->state) {
return;
}
fn_1_41BC(var_r30->unk_00, 1);
PresentWinChoiceSet(work->window, 1);
object->unk10 = 8;
case 8:
if (var_r30->unk_00->unk_20) {
if (work->window->state) {
return;
}
fn_1_4098(var_r30->unk_00);
if (!var_r30->unk_00->choice) {
var_r30->unk_04 = 0;
PresentWinAnimOut(work->window);
if (!work->window->choice) {
work->quitTimer = 0;
object->unk10 = 11;
return;
}
@ -122,23 +127,23 @@ static void fn_1_3B8C(omObjData *object)
return;
}
case 9:
fn_1_45C0(lbl_1_bss_20, 2);
PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_LEAVE);
object->unk10 = 10;
return;
case 10:
if (fn_1_4604(lbl_1_bss_20)) {
if (PresentGuideExecModeGet(presentGuide)) {
return;
}
object->unk10 = 2;
return;
case 11:
object->unk10 = 12;
var_r30->unk_04 = 0;
work->quitTimer = 0;
case 12:
if (var_r30->unk_00->unk_20) {
if (work->window->state) {
return;
}
if (var_r30->unk_04++ >= 60) {
if (work->quitTimer++ >= 60) {
omSysExitReq = 1;
object->func = NULL;
object->unk10 = 0;
@ -148,48 +153,48 @@ static void fn_1_3B8C(omObjData *object)
}
}
static void fn_1_3DB8(omObjData *arg0)
static void ExecPresentGet(omObjData *object)
{
void *sp8 = arg0->data;
void *sp8 = object->data;
switch (arg0->unk10) {
switch (object->unk10) {
case 0:
fn_1_186C(lbl_1_bss_10, omovlevtno - 1);
arg0->unk10 = 1;
PresentSelectedIDSet(present, omovlevtno - 1);
object->unk10 = 1;
case 1:
fn_1_180C(lbl_1_bss_10, 3);
arg0->unk10 = 2;
PresentExecModeSet(present, PRESENT_MODE_GET);
object->unk10 = 2;
case 2:
if (!fn_1_1850(lbl_1_bss_10)) {
arg0->unk10 = 3;
if (PresentExecModeGet(present) == PRESENT_MODE_NONE) {
object->unk10 = 3;
}
else {
break;
}
case 3:
arg0->unk10 = 4;
object->unk10 = 4;
case 4:
omSysExitReq = 1;
arg0->func = NULL;
arg0->unk10 = 0;
object->func = NULL;
object->unk10 = 0;
break;
default:
break;
}
}
UnkWindowDataStruct *fn_1_3EA4(s32 arg0)
PresentWindow *PresentWinCreate(s32 id)
{
UnkWindowDataStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM);
PresentWindow *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(PresentWindow), MEMORY_DEFAULT_NUM);
var_r31->unk18 = 0;
var_r31->unk10 = 0;
var_r31->unk14 = 0;
var_r31->unk_20 = 0;
var_r31->process = HuPrcChildCreate(fn_1_41E0, 1000, 8192, 0, lbl_1_bss_4);
var_r31->messToBeSet = 0;
var_r31->messWaitSignal = 0;
var_r31->choiceSignal = 0;
var_r31->state = 0;
var_r31->process = HuPrcChildCreate(ExecWindow, 1000, 8192, 0, presentObjMan);
var_r31->process->user_data = var_r31;
var_r31->unk08 = arg0;
switch (arg0) {
var_r31->id = id;
switch (id) {
case 0:
var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(var_r31->window, 0.8f);
@ -204,112 +209,112 @@ UnkWindowDataStruct *fn_1_3EA4(s32 arg0)
break;
}
HuWinDrawNoSet(var_r31->window, 63);
fn_1_4190(var_r31);
PresentWinDispOff(var_r31);
HuSprExecLayerSet(63, 2);
return var_r31;
}
void fn_1_4040(UnkWindowDataStruct *windowData)
void PresentWinKill(PresentWindow *work)
{
HuWinExCleanup(windowData->window);
HuPrcKill(windowData->process);
HuMemDirectFree(windowData);
HuWinExCleanup(work->window);
HuPrcKill(work->process);
HuMemDirectFree(work);
}
void fn_1_4080(UnkWindowDataStruct *windowData)
void PresentWinAnimIn(PresentWindow *work)
{
if (!windowData->unk0C) {
windowData->unk_20 = 1;
if (!work->visible) {
work->state = 1;
}
}
void fn_1_4098(UnkWindowDataStruct *windowData)
void PresentWinAnimOut(PresentWindow *work)
{
if (windowData->unk0C) {
windowData->unk_20 = 2;
if (work->visible) {
work->state = 2;
}
}
void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess)
void PresentWinMesSet(PresentWindow *work, u32 mess)
{
if (!windowData->unk_20) {
HuWinMesSet(windowData->window, mess);
if (!work->state) {
HuWinMesSet(work->window, mess);
return;
}
windowData->unk18 = mess;
work->messToBeSet = mess;
}
void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index)
void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index)
{
HuWinInsertMesSet(windowData->window, mess, index);
HuWinInsertMesSet(work->window, mess, index);
}
static void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y)
void PresentWinPosSet(PresentWindow *work, float x, float y)
{
HuWinPosSet(windowData->window, x, y);
HuWinPosSet(work->window, x, y);
}
static void fn_1_4184(UnkWindowDataStruct *windowData)
void PresentWinDispOn(PresentWindow *work)
{
windowData->unk0C = 1;
work->visible = TRUE;
}
static void fn_1_4190(UnkWindowDataStruct *windowData)
void PresentWinDispOff(PresentWindow *work)
{
windowData->unk0C = 0;
work->visible = FALSE;
}
void fn_1_419C(UnkWindowDataStruct *windowData)
void PresentWinMesWait(PresentWindow *work)
{
if (!windowData->unk_20) {
windowData->unk_20 = 3;
if (!work->state) {
work->state = 3;
}
windowData->unk10 = 1;
work->messWaitSignal = 1;
}
static void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1)
void PresentWinChoiceSet(PresentWindow *work, s32 choice)
{
if (!windowData->unk_20) {
windowData->unk_20 = 4;
if (!work->state) {
work->state = 4;
}
windowData->unk14 = 1;
windowData->choice = arg1;
work->choiceSignal = 1;
work->choice = choice;
}
static void fn_1_41E0(void)
static void ExecWindow(void)
{
UnkWindowDataStruct *windowData = HuPrcCurrentGet()->user_data;
PresentWindow *work = HuPrcCurrentGet()->user_data;
while (TRUE) {
switch (windowData->unk_20) {
switch (work->state) {
case 1:
windowData->unk0C = 1;
HuWinExAnimIn(windowData->window);
work->visible = 1;
HuWinExAnimIn(work->window);
break;
case 2:
HuWinExAnimOut(windowData->window);
windowData->unk0C = 0;
HuWinExAnimOut(work->window);
work->visible = 0;
break;
case 3:
winData[windowData->window].active_pad = 1;
HuWinMesWait(windowData->window);
windowData->unk10 = 0;
winData[work->window].active_pad = 1;
HuWinMesWait(work->window);
work->messWaitSignal = 0;
break;
case 4:
windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice);
windowData->unk14 = 0;
work->choice = HuWinChoiceGet(work->window, work->choice);
work->choiceSignal = 0;
break;
}
if (windowData->unk18 != 0) {
HuWinMesSet(windowData->window, windowData->unk18);
windowData->unk18 = 0;
if (work->messToBeSet != 0) {
HuWinMesSet(work->window, work->messToBeSet);
work->messToBeSet = 0;
}
windowData->unk_20 = 0;
if (windowData->unk10 != 0) {
windowData->unk_20 = 3;
work->state = 0;
if (work->messWaitSignal != 0) {
work->state = 3;
}
if (windowData->unk14 != 0) {
windowData->unk_20 = 4;
if (work->choiceSignal != 0) {
work->state = 4;
}
HuPrcVSleep();
}

File diff suppressed because it is too large Load diff