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

@ -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;
}