Fix optionDll inconsistencies

This commit is contained in:
kabiskac 2024-08-04 18:41:54 +02:00
parent 3a7cde9f33
commit f2de6f7466
4 changed files with 29 additions and 43 deletions

View file

@ -9,7 +9,7 @@ typedef struct {
/* 0x00 */ Process *process; /* 0x00 */ Process *process;
/* 0x04 */ s16 window; /* 0x04 */ s16 window;
/* 0x08 */ s32 id; /* 0x08 */ s32 id;
/* 0x0C */ s32 visible; /* 0x0C */ BOOL visible;
/* 0x10 */ BOOL messWaitSignal; /* 0x10 */ BOOL messWaitSignal;
/* 0x14 */ BOOL choiceSignal; /* 0x14 */ BOOL choiceSignal;
/* 0x18 */ u32 messToBeSet; /* 0x18 */ u32 messToBeSet;

View file

@ -17,8 +17,8 @@ typedef struct {
/* 0x2C */ Vec posPrev; /* 0x2C */ Vec posPrev;
/* 0x38 */ Vec targetPrev; /* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC]; /* 0x44 */ char unk44[0xC];
/* 0x50 */ float prevZoom; /* 0x50 */ float zoomPrev;
/* 0x54 */ float prevRot; /* 0x54 */ float rotPrev;
/* 0x58 */ Vec posTarget; /* 0x58 */ Vec posTarget;
/* 0x64 */ Vec posFocus; /* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC]; /* 0x70 */ char unk70[0xC];
@ -34,8 +34,6 @@ typedef struct {
static void ExecCameraObj(omObjData *object); static void ExecCameraObj(omObjData *object);
static void ExecCamera(omObjData *object); static void ExecCamera(omObjData *object);
static void fn_1_12E4(omObjData *object);
static void PrintDebugInfo(omObjData *object);
omObjData *optionCamera; omObjData *optionCamera;
@ -45,11 +43,8 @@ static s32 pad_04_00000018_data = -1;
omObjData *OptionCameraCreate(void) omObjData *OptionCameraCreate(void)
{ {
omObjData *object; omObjData *object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
CameraWork *work; CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->pos.x = 0.0f; work->pos.x = 0.0f;
work->pos.y = 0.0f; work->pos.y = 0.0f;
@ -110,33 +105,26 @@ void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32
work->zoomTarget = zoom; work->zoomTarget = zoom;
work->rotTarget = rot; work->rotTarget = rot;
work->targetPrev.y = work->target.y; work->targetPrev.y = work->target.y;
work->prevZoom = work->zoom; work->zoomPrev = work->zoom;
work->prevRot = work->rot; work->rotPrev = work->rot;
work->timeRot = 0.0f; work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration; work->rotSpeed = 1.0f / duration;
} }
// GetZoom
float OptionCameraZoomGet(omObjData *object) float OptionCameraZoomGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float zoom; float zoom = work->zoom;
zoom = work->zoom;
return zoom; return zoom;
} }
// GetRot
float OptionCameraRotGet(omObjData *object) float OptionCameraRotGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float rot; float rot = work->rot;
rot = work->rot;
return rot; return rot;
} }
// Getpos
void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *temp_r31 = object->data; CameraWork *temp_r31 = object->data;
@ -146,7 +134,6 @@ void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
*z = temp_r31->pos.z; *z = temp_r31->pos.z;
} }
// Gettarget
void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
@ -156,7 +143,6 @@ void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
*z = work->target.z; *z = work->target.z;
} }
// CameraDone
s32 OptionCameraDoneCheck(omObjData *object) s32 OptionCameraDoneCheck(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
@ -205,8 +191,8 @@ static void ExecCamera(omObjData *object)
if (work->timeRot < 1.0f) { if (work->timeRot < 1.0f) {
weight = sind(90.0f * work->timeRot); weight = sind(90.0f * work->timeRot);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom); work->zoom = work->zoomPrev + weight * (work->zoomTarget - work->zoomPrev);
work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot); work->rot = work->rotPrev + weight * (work->rotTarget - work->rotPrev);
if ((work->timeRot += work->rotSpeed) >= 1.0f) { if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->target.y = work->posFocus.y; work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget; work->zoom = work->zoomTarget;
@ -223,8 +209,7 @@ static void ExecCamera(omObjData *object)
work->rot += 360.0f; work->rot += 360.0f;
} }
Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, 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);
work->target.y, work->target.z);
} }
static void CameraExecDebug(omObjData *object) static void CameraExecDebug(omObjData *object)

View file

@ -22,8 +22,8 @@ typedef struct {
/* 0x48 */ char unk48[0xC]; /* 0x48 */ char unk48[0xC];
/* 0x54 */ float time; /* 0x54 */ float time;
/* 0x58 */ float speed; /* 0x58 */ float speed;
/* 0x5C */ s32 unk5C; /* 0x5C */ s32 unk_5C;
/* 0x60 */ s32 unk60; /* 0x60 */ s32 unk_60;
} GuideWork; // Size 0x64 } GuideWork; // Size 0x64
#define MODE_DISABLED 0 #define MODE_DISABLED 0
@ -70,8 +70,8 @@ omObjData *OptionGuideCreate(void)
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA));
} }
work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC); work->unk_5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC);
work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); work->unk_60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC);
CharModelLayerSetAll(1); CharModelLayerSetAll(1);
Hu3DModelShadowSet(object->model[0]); Hu3DModelShadowSet(object->model[0]);
Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001);
@ -186,9 +186,7 @@ static void ExecGuide(omObjData *object)
static void UpdateGuide(omObjData *object) static void UpdateGuide(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
s16 motion; s16 motion = 0;
motion = 0;
work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z); work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= work->distRemain) { if (0.001f <= work->distRemain) {
if (14.0f <= work->distRemain) { if (14.0f <= work->distRemain) {
@ -219,9 +217,8 @@ static void UpdateGuide(omObjData *object)
static float LerpAngle(float start, float end, float time) static float LerpAngle(float start, float end, float time)
{ {
float angle; float angle;
float delta;
delta = fmod(end - start, 360.0); float delta = fmod(end - start, 360.0);
if (0.0f > delta) { if (0.0f > delta) {
delta += 360.0f; delta += 360.0f;
} }

View file

@ -18,6 +18,12 @@ typedef struct {
/* 0x18 */ GXColor color; /* 0x18 */ GXColor color;
} UnkLightDataStruct; /* size = 0x1C */ // TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 } UnkLightDataStruct; /* size = 0x1C */ // TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3
typedef struct UnkShadowDataStruct {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec up;
/* 0x18 */ Vec target;
} UnkShadowDataStruct; /* size = 0x24 */
static void ExecState(omObjData *object); static void ExecState(omObjData *object);
omObjData *optionState; omObjData *optionState;
@ -28,7 +34,7 @@ static UnkLightDataStruct lightTbl = {
{ 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF },
}; };
static Vec shadowPosTbl[3] = { static UnkShadowDataStruct shadowPosTbl = {
{ 0.0f, 3000.0f, 1.0f }, { 0.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f },
@ -36,12 +42,10 @@ static Vec shadowPosTbl[3] = {
omObjData *OptionStateCreate(void) omObjData *OptionStateCreate(void)
{ {
omObjData *object;
StateWork *work;
LightData *lightData; LightData *lightData;
object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); omObjData *object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
optionCamera = OptionCameraCreate(); optionCamera = OptionCameraCreate();
optionRoom = OptionRoomCreate(); optionRoom = OptionRoomCreate();
@ -52,7 +56,7 @@ omObjData *OptionStateCreate(void)
lightData = &Hu3DGlobalLight[work->light]; lightData = &Hu3DGlobalLight[work->light];
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f); Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]); Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target);
return object; return object;
} }