Almost done

This commit is contained in:
robojumper
2025-09-19 22:25:10 +02:00
parent 4e84190c04
commit 48ae3aead6
5 changed files with 132 additions and 44 deletions
+16 -16
View File
@@ -11309,21 +11309,21 @@ doDelete__9dCsGame_cFv = .text:0x801BF210; // type:function size:0x84
execute__9dCsGame_cFv = .text:0x801BF2A0; // type:function size:0x25C
setPosition__17dCsGameLytBase1_cFRC7mVec2_c = .text:0x801BF500; // type:function size:0x14
draw__9dCsGame_cFv = .text:0x801BF520; // type:function size:0xBC
fn_801BF5E0__9dCsGame_cCFv = .text:0x801BF5E0; // type:function size:0x44
shouldDraw__9dCsGame_cCFv = .text:0x801BF5E0; // type:function size:0x44
isForcedHidden__9dCsGame_cCFv = .text:0x801BF630; // type:function size:0x288
setNextCursorType__9dCsGame_cFQ29dCsGame_c12CursorType_e = .text:0x801BF8C0; // type:function size:0x10
setCursorTypeNoneMaybe__9dCsGame_cFv = .text:0x801BF8D0; // type:function size:0x8
setCursorTypePointer__9dCsGame_cFv = .text:0x801BF8E0; // type:function size:0x18
fn_801BF900 = .text:0x801BF900; // type:function size:0x8
fn_801BF910 = .text:0x801BF910; // type:function size:0x58
noneSet__9dCsGame_cFv = .text:0x801BF8D0; // type:function size:0x8
pointerDefSet__9dCsGame_cFv = .text:0x801BF8E0; // type:function size:0x18
pointerCatSet__9dCsGame_cFv = .text:0x801BF900; // type:function size:0x8
pachinkoSetCharging__9dCsGame_cFbf = .text:0x801BF910; // type:function size:0x58
bowStartDrawOrCharge__9dCsGame_cFff = .text:0x801BF970; // type:function size:0x58
bowAimStart__9dCsGame_cFv = .text:0x801BF9D0; // type:function size:0x38
bowReady__9dCsGame_cFv = .text:0x801BFA10; // type:function size:0x38
fn_801BFA50 = .text:0x801BFA50; // type:function size:0x68
fn_801BFAC0 = .text:0x801BFAC0; // type:function size:0x8
fn_801BFAD0 = .text:0x801BFAD0; // type:function size:0x54
fn_801BFB30 = .text:0x801BFB30; // type:function size:0x3C
fn_801BFB70 = .text:0x801BFB70; // type:function size:0x48
dowsingSetParams__9dCsGame_cFRC4mAngff = .text:0x801BFA50; // type:function size:0x68
dowsingSetUnkWord__9dCsGame_cFi = .text:0x801BFAC0; // type:function size:0x8
vacuumSetNotLocked__9dCsGame_cFf = .text:0x801BFAD0; // type:function size:0x54
vacuumSetLocked__9dCsGame_cFv = .text:0x801BFB30; // type:function size:0x3C
clawshotsSetLocked__9dCsGame_cFb = .text:0x801BFB70; // type:function size:0x48
setCursorTypePlayerCam__9dCsGame_cFv = .text:0x801BFBC0; // type:function size:0x8
getCursorPos__22dCursorInterfaceGame_cFv = .text:0x801BFBD0; // type:function size:0x178
init__17dCsGameLytBase2_cFv = .text:0x801BFD50; // type:function size:0x50
@@ -11364,12 +11364,12 @@ changeState__96sStateMgr_c<Q29dCsGame_c15lytItemCursor_c,20sStateMethodUsr_FI_c,
bowStartDrawOrCharge__Q29dCsGame_c15lytItemCursor_cFff = .text:0x801C0180; // type:function size:0x8
bowAimStart__Q29dCsGame_c15lytItemCursor_cFv = .text:0x801C0190; // type:function size:0x8
bowReady__Q29dCsGame_c15lytItemCursor_cFv = .text:0x801C01A0; // type:function size:0x8
fn_801C01B0 = .text:0x801C01B0; // type:function size:0x8
fn_801C01C0 = .text:0x801C01C0; // type:function size:0x8
fn_801C01D0 = .text:0x801C01D0; // type:function size:0x8
fn_801C01E0 = .text:0x801C01E0; // type:function size:0x8
fn_801C01F0 = .text:0x801C01F0; // type:function size:0x8
fn_801C0200 = .text:0x801C0200; // type:function size:0x8
pachinkoSetCharging__Q29dCsGame_c15lytItemCursor_cFbf = .text:0x801C01B0; // type:function size:0x8
dowsingSetParams__Q29dCsGame_c15lytItemCursor_cFRC4mAngff = .text:0x801C01C0; // type:function size:0x8
dowsingSetUnkWord__Q29dCsGame_c15lytItemCursor_cFi = .text:0x801C01D0; // type:function size:0x8
vacuumSetUnkFloat__Q29dCsGame_c15lytItemCursor_cFf = .text:0x801C01E0; // type:function size:0x8
vacuumSetLocked__Q29dCsGame_c15lytItemCursor_cFb = .text:0x801C01F0; // type:function size:0x8
clawshotsSetLocked__Q29dCsGame_c15lytItemCursor_cFb = .text:0x801C0200; // type:function size:0x8
loadResAcc__Q29dCsGame_c15lytItemCursor_cFv = .text:0x801C0210; // type:function size:0xC
build__Q29dCsGame_c15lytItemCursor_cFv = .text:0x801C0220; // type:function size:0x20
init__Q29dCsGame_c15lytItemCursor_cFv = .text:0x801C0240; // type:function size:0x19C
+17 -4
View File
@@ -130,7 +130,7 @@ public:
return sInstance;
}
bool fn_801BF5E0() const;
bool shouldDraw() const;
/// @brief Item cursor.
class lytItemCursor_c : public dCsGameLytBase2_c {
@@ -196,7 +196,7 @@ public:
void enter();
void execute();
void setParams(const mAng& rot, f32 v1, f32 v2);
void setParams(const mAng &rot, f32 v1, f32 v2);
void setUnkWord(UNKWORD v);
void moveEffectsIn();
@@ -346,6 +346,12 @@ public:
void changeState(const sFStateID_c<lytItemCursor_c> &newState);
void pachinkoSetCharging(bool charging, f32 progress);
void dowsingSetParams(const mAng &rot, f32 v1, f32 v2);
void dowsingSetUnkWord(UNKWORD v);
void vacuumSetUnkFloat(f32 v);
void vacuumSetLocked(bool locked);
void clawshotsSetLocked(bool locked);
void bowStartDrawOrCharge(f32 f1, f32 f2);
void bowAimStart();
void bowReady();
@@ -398,9 +404,16 @@ public:
};
void setNextCursorType(CursorType_e);
void setCursorTypeNoneMaybe();
void setCursorTypePointer();
void noneSet();
void pointerDefSet();
void pointerCatSet();
void pachinkoSetCharging(bool charging, f32 progress);
void dowsingSetParams(const mAng &rot, f32 v1, f32 v2);
void dowsingSetUnkWord(UNKWORD v);
void vacuumSetNotLocked(f32 v);
void vacuumSetLocked();
void clawshotsSetLocked(bool locked);
void bowStartDrawOrCharge(f32 f1, f32 f2);
void bowAimStart();
void bowReady();
+92 -17
View File
@@ -6,6 +6,7 @@
#include "d/d_cursor_hit_check.h"
#include "d/d_gfx.h"
#include "d/d_pad.h"
#include "d/d_pad_nav.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_map.h"
#include "d/snd/d_snd_small_effect_mgr.h"
@@ -20,7 +21,7 @@ SPECIAL_BASE_PROFILE(C_GAME, dCsGame_c, fProfile::C_GAME, 0x2BF, 0x06F9);
struct dCsGame_HIO_c {
dCsGame_HIO_c();
virtual ~dCsGame_HIO_c() {}
virtual ~dCsGame_HIO_c();
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
@@ -45,8 +46,6 @@ struct dCsGame_HIO_c {
static const f32 sFloat2;
};
static dCsGame_HIO_c sHio;
dCsGame_HIO_c::dCsGame_HIO_c() {
field_0x04 = 0.0f;
field_0x08 = 0.0f;
@@ -68,6 +67,9 @@ dCsGame_HIO_c::dCsGame_HIO_c() {
field_0x40 = 5;
}
dCsGame_HIO_c::~dCsGame_HIO_c() {}
static dCsGame_HIO_c sHio;
dCsGame_c *dCsGame_c::sInstance;
STATE_DEFINE(dCsGame_c::lytItemCursor_c, Invisible);
@@ -247,15 +249,39 @@ int dCsGame_c::draw() {
return SUCCEEDED;
}
bool dCsGame_c::fn_801BF5E0() const {
bool dCsGame_c::shouldDraw() const {
return isCursorActive() & !isForcedHidden();
}
bool dCsGame_c::isForcedHidden() const {
// TODO - lots of EventManager inlines
return false;
}
void dCsGame_c::setNextCursorType(CursorType_e cs) {
mNextCursorActive = true;
mNextCursorType = cs;
}
void dCsGame_c::noneSet() {
setNextCursorType(CS_NONE);
}
void dCsGame_c::pointerDefSet() {
if (dPadNav::isPointerVisible()) {
setNextCursorType(CS_POINTER_DEF);
}
}
void dCsGame_c::pointerCatSet() {
setNextCursorType(CS_POINTER_CAT);
}
void dCsGame_c::pachinkoSetCharging(bool charging, f32 progress) {
setNextCursorType(CS_PACHINKO);
mCursor.pachinkoSetCharging(charging, progress);
}
void dCsGame_c::bowStartDrawOrCharge(f32 f1, f32 f2) {
setNextCursorType(CS_BOW);
mCursor.bowStartDrawOrCharge(f1, f2);
@@ -271,6 +297,31 @@ void dCsGame_c::bowReady() {
mCursor.bowReady();
}
void dCsGame_c::dowsingSetParams(const mAng &rot, f32 v1, f32 v2) {
setNextCursorType(CS_DOWSING);
mCursor.dowsingSetParams(rot, v1, v2);
}
void dCsGame_c::dowsingSetUnkWord(UNKWORD v) {
mCursor.dowsingSetUnkWord(v);
}
void dCsGame_c::vacuumSetNotLocked(f32 v) {
setNextCursorType(CS_VACUUM);
mCursor.vacuumSetUnkFloat(v);
mCursor.vacuumSetLocked(false);
}
void dCsGame_c::vacuumSetLocked() {
setNextCursorType(CS_VACUUM);
mCursor.vacuumSetLocked(true);
}
void dCsGame_c::clawshotsSetLocked(bool locked) {
setNextCursorType(CS_HOOKSHOT);
mCursor.clawshotsSetLocked(locked);
}
void dCsGame_c::setCursorTypePlayerCam() {
setNextCursorType(CS_PLAYERCAM);
}
@@ -450,6 +501,30 @@ void dCsGame_c::lytItemCursor_c::changeState(const sFStateID_c<lytItemCursor_c>
mStateMgr.changeState(newState);
}
void dCsGame_c::lytItemCursor_c::pachinkoSetCharging(bool charging, f32 progress) {
mPachinko.setCharging(charging, progress);
}
void dCsGame_c::lytItemCursor_c::dowsingSetParams(const mAng &rot, f32 v1, f32 v2) {
mDowsing.setParams(rot, v1, v2);
}
void dCsGame_c::lytItemCursor_c::dowsingSetUnkWord(UNKWORD v) {
mDowsing.setUnkWord(v);
}
void dCsGame_c::lytItemCursor_c::vacuumSetUnkFloat(f32 v) {
mVacuum.setUnkFloat(v);
}
void dCsGame_c::lytItemCursor_c::vacuumSetLocked(bool locked) {
mVacuum.setLocked(locked);
}
void dCsGame_c::lytItemCursor_c::clawshotsSetLocked(bool locked) {
mCrawShot.setLocked(locked);
}
void dCsGame_c::lytItemCursor_c::bowStartDrawOrCharge(f32 f1, f32 f2) {
mBow.startDrawOrCharge(f1, f2);
}
@@ -551,7 +626,7 @@ bool dCsGame_c::lytItemCursor_c::execute() {
mAnmGroups[MAIN_ANIM_LOOP].setAnimEnable(true);
mStateMgr.executeState();
if (dCsGame_c::GetInstance()->fn_801BF5E0() && mDrawCursorTrailThisFrame) {
if (dCsGame_c::GetInstance()->shouldDraw() && mDrawCursorTrailThisFrame) {
f32 sqDist = mPositionThisFrame.squareDistance(mPositionLastFrame);
if (sqDist > sHio.field_0x34 * sHio.field_0x34 ||
(mEffects.hasEmitters() && sqDist > sHio.field_0x38 * sHio.field_0x38)) {
@@ -652,7 +727,7 @@ void dCsGame_c::lytItemCursor_c::lytDowsingCsr_c::enter() {
mAnm[MAIN_ANIM_DOWSE_LOOP_1].setAnimEnable(true);
}
void dCsGame_c::lytItemCursor_c::lytDowsingCsr_c::setParams(const mAng& rot, f32 v1, f32 v2) {
void dCsGame_c::lytItemCursor_c::lytDowsingCsr_c::setParams(const mAng &rot, f32 v1, f32 v2) {
field_0xC0 = v1;
if (field_0xC0 <= 0.999f) {
mRotZ = rot;
@@ -1282,6 +1357,17 @@ void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::executeState_ToNormal() {
}
void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::finalizeState_ToNormal() {}
void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::enter() {
mAnm[MAIN_ANIM_CURSOR].setFrame(4.0f);
mAnm[MAIN_ANIM_LOCK_LOOP].setAnimEnable(false);
mAnm[MAIN_ANIM_VACUUM_LOCK].setAnimEnable(true);
mAnm[MAIN_ANIM_VACUUM_LOCK].setFrame(0.0f);
mpLyt->animate();
mpLyt->calc();
mAnm[MAIN_ANIM_VACUUM_LOCK].setAnimEnable(false);
mStateMgr.changeState(StateID_Normal);
}
void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::setUnkFloat(f32 f) {
if (f < 0.0f) {
f = 0.0f;
@@ -1295,17 +1381,6 @@ void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::setLocked(bool locked) {
mLocked = locked;
}
void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::enter() {
mAnm[MAIN_ANIM_CURSOR].setFrame(4.0f);
mAnm[MAIN_ANIM_LOCK_LOOP].setAnimEnable(false);
mAnm[MAIN_ANIM_VACUUM_LOCK].setAnimEnable(true);
mAnm[MAIN_ANIM_VACUUM_LOCK].setFrame(0.0f);
mpLyt->animate();
mpLyt->calc();
mAnm[MAIN_ANIM_VACUUM_LOCK].setAnimEnable(false);
mStateMgr.changeState(StateID_Normal);
}
void dCsGame_c::lytItemCursor_c::lytVacuumCsr_c::init() {
mLocked = false;
enter();
+3 -3
View File
@@ -7,8 +7,8 @@
#include "d/d_cs_game.h"
#include "d/d_gfx.h"
#include "d/d_hbm.h"
#include "d/d_pad_nav.h"
#include "d/d_pad_manager.h"
#include "d/d_pad_nav.h"
#include "d/d_reset.h"
#include "d/d_sc_game.h"
#include "d/lyt/d_lyt_control_game.h"
@@ -222,8 +222,8 @@ void beginPad_BR() {
KPADEnableMplsAccRevise(0);
KPADSetMplsAccReviseParam(0, 0.03f, 0.4f);
if ((dCsGame_c::GetInstance() && dCsGame_c::GetInstance()->fn_801BF5E0() && !ex.field_0x22D0) ||
(dAcPy_c::GetLink() &&
if ((dCsGame_c::GetInstance() != nullptr && dCsGame_c::GetInstance()->shouldDraw() && !ex.field_0x22D0) ||
(dAcPy_c::GetLink() != nullptr &&
dAcPy_c::GetLink()->checkActionFlagsCont(0x400 | 0x100 | 0x80 | 0x40 | 0x10 | 0x4 | 0x2 | 0x1) &&
!dAcPy_c::GetLink()->vt_0x1C0() && !dLytMeter_c::GetMain()->getField_0x1377F()) ||
ex.field_0x22CF) {
+4 -4
View File
@@ -600,7 +600,7 @@ void dLytPauseMgr_c::executeState_In() {
mStateMgr.changeState(StateID_GetDemo);
} else {
mStateMgr.changeState(StateID_Wait);
dCsGame_c::GetInstance()->setCursorTypePointer();
dCsGame_c::GetInstance()->pointerDefSet();
}
}
}
@@ -629,7 +629,7 @@ void dLytPauseMgr_c::executeState_Wait() {
dPad::ex_c::getInstance()->centerCursor(mPad::getCurrentCoreID(), true);
}
dCsGame_c::GetInstance()->setCursorTypePointer();
dCsGame_c::GetInstance()->pointerDefSet();
if (dPad::getDownTrig1() ||
(dLytControlGame_c::getInstance()->getCurrentPauseDisp() != dLytPauseMgr_c::DISP_00_INVENTORY &&
@@ -685,7 +685,7 @@ void dLytPauseMgr_c::executeState_Wait() {
if (checkRing()) {
if (mTimer >= 10) {
mTimer = 0;
dCsGame_c::GetInstance()->setCursorTypeNoneMaybe();
dCsGame_c::GetInstance()->noneSet();
mStateMgr.changeState(StateID_Ring);
} else {
mTimer++;
@@ -715,7 +715,7 @@ void dLytPauseMgr_c::initializeState_Change() {
}
void dLytPauseMgr_c::executeState_Change() {
if (!sInstance->getField_0x083E()) {
dCsGame_c::GetInstance()->setCursorTypePointer();
dCsGame_c::GetInstance()->pointerDefSet();
}
if (mMain.isChangingState() == true) {