daPy_lk_c::procBottleOpen

This commit is contained in:
LagoLunatic
2025-06-14 17:00:59 -04:00
parent 3bd775e04d
commit b465138e9c
6 changed files with 175 additions and 7 deletions
+1 -1
View File
@@ -145,7 +145,7 @@ public:
void Set(const cCcD_SrcCpsAttr& pSrc) {
cM3dGCps::Set(pSrc.mCps);
}
void Set(const cXyz& pStart, const cXyz& pEnd, float radius) {
void Set(const cXyz& pStart, const cXyz& pEnd, f32 radius) {
cM3dGCps::Set(pStart, pEnd, radius);
}
+2
View File
@@ -18,6 +18,8 @@ public:
void setup(JPABaseEmitter* emitter, const cXyz*, const csXyz*, s8) { mpEmitter = emitter; }
JPABaseEmitter* getEmitter() { return mpEmitter; }
MtxP getMtx() { return mpMtx; }
void setMatrix(MtxP mtx) { mpMtx = mtx; }
/* 0x04 */ JPABaseEmitter* mpEmitter;
/* 0x08 */ MtxP mpMtx;
+1
View File
@@ -105,6 +105,7 @@ enum dCcG_At_Spl {
/* 0x1 */ dCcG_At_Spl_UNK1 = 1,
/* 0x2 */ dCcG_At_Spl_UNK2 = 2,
/* 0x3 */ dCcG_At_Spl_UNK3 = 3,
/* 0x4 */ dCcG_At_Spl_UNK4 = 4,
/* 0x5 */ dCcG_At_Spl_UNK5 = 5,
/* 0x6 */ dCcG_At_Spl_UNK6 = 6,
/* 0x7 */ dCcG_At_Spl_UNK7 = 7,
+2 -2
View File
@@ -68,14 +68,14 @@ void daPy_mtxFollowEcallBack_c::end() {
/* 80102BF8-80102C84 .text makeEmitter__25daPy_mtxFollowEcallBack_cFUsPA4_fPC4cXyzPC4cXyz */
JPABaseEmitter* daPy_mtxFollowEcallBack_c::makeEmitter(u16 particleID, MtxP mtx, const cXyz* pos, const cXyz* scale) {
end();
mpMtx = mtx;
setMatrix(mtx);
return dComIfGp_particle_setP1(particleID, pos, NULL, scale, 0xFF, this);
}
/* 80102C84-80102D14 .text makeEmitterColor__25daPy_mtxFollowEcallBack_cFUsPA4_fPC4cXyzPC8_GXColorPC8_GXColor */
JPABaseEmitter* daPy_mtxFollowEcallBack_c::makeEmitterColor(u16 particleID, MtxP mtx, const cXyz* pos, const GXColor* prmColor, const GXColor* envColor) {
end();
mpMtx = mtx;
setMatrix(mtx);
return dComIfGp_particle_setP1(particleID, pos, NULL, NULL, 0xFF, this, -1, prmColor, envColor);
}
+168 -3
View File
@@ -15,6 +15,7 @@
#include "d/d_camera.h"
#include "d/d_procname.h"
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
#include "f_op/f_op_kankyo_mng.h"
/* 80151E40-80151E60 .text changeBottleDrinkFace__9daPy_lk_cFi */
int daPy_lk_c::changeBottleDrinkFace(int param_0) {
@@ -247,9 +248,173 @@ BOOL daPy_lk_c::procBottleOpen_init(u16 param_0) {
/* 801527CC-80152ED0 .text procBottleOpen__9daPy_lk_cFv */
BOOL daPy_lk_c::procBottleOpen() {
/* Nonmatching */
static const Vec splash_scale = {0.3f, 0.3f, 0.3f};
static const Vec ripple_scale = {0.5f, 0.5f, 0.5f};
J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e];
setShipRidePosUseItem();
if (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_BINOPENPRE) {
if (frameCtrl.getRate() < 0.01f) {
if (mEquipItem == dItem_FAIRY_BOTTLE_e) {
setSingleMoveAnime(
ANM_BINOPENB,
1.0f,
daPy_HIO_bottle_c0::m.field_0x50,
daPy_HIO_bottle_c0::m.field_0xA,
daPy_HIO_bottle_c0::m.field_0x54
);
} else {
setSingleMoveAnime(
ANM_BINOPENA,
1.0f,
daPy_HIO_bottle_c0::m.field_0x44,
daPy_HIO_bottle_c0::m.field_0x8,
daPy_HIO_bottle_c0::m.field_0x48
);
}
} else if (frameCtrl.checkPass(32.0f)) {
m355E = 0;
mRightHandIdx = 8;
}
} else {
if (m32E4.getEmitter() && m34D4 == 0 && m32E4.getEmitter()->getParticleList() && m32E4.getEmitter()->getParticleList()->getLast()) {
JGeometry::TVec3<f32> temp;
m32E4.getEmitter()->getParticleList()->getLast()->getObject()->getGlobalPosition(temp);
cXyz sp64(temp.x, temp.y + 100.0f, temp.z);
BOOL r27 = FALSE;
mGndChk.SetPos(&sp64);
f32 f31 = dComIfG_Bgsp()->GroundCross(&mGndChk);
mLavaGndChk.SetPos(&sp64);
f32 f29 = dComIfG_Bgsp()->GroundCross(&mGndChk); // Bug? They might have meant to use mLavaGndChk here
f32 f1;
f32 water_y;
if (fopAcM_getWaterY(&sp64, &water_y)) {
if (water_y > f31) {
if (water_y > f29) {
f1 = water_y;
r27 = TRUE;
} else {
f1 = f29;
}
} else {
if (f31 > f29) {
f1 = f31;
} else {
f1 = f29;
}
}
} else {
if (f31 > f29) {
f1 = f31;
} else {
f1 = f29;
}
}
cXyz sp58;
cXyz sp4C;
cXyz sp40;
cXyz sp34;
if (f1 > temp.y + 15.0f) {
m34D4 = 1;
sp64.y = f1;
m34D4 = 1;
static const Vec splash_scale = {0.3f, 0.3f, 0.3f};
JPABaseEmitter* emitter = dComIfGp_particle_setP1(
dPa_name::ID_COMMON_0040, &sp64,
NULL, (cXyz*)&splash_scale, 0xFF, NULL, -1,
&tevStr.mColorK0, &tevStr.mColorK0
);
if (emitter) {
emitter->setRate(8.0f);
emitter->setMaxFrame(20);
}
static const Vec ripple_scale = {0.5f, 0.5f, 0.5f};
if (r27) {
dComIfGp_particle_setSingleRipple(dPa_name::ID_COMMON_003F, &sp64, NULL, (cXyz*)&ripple_scale);
} else {
m370C = sp64;
m34D0 = 1;
}
sp58.set(sp64.x, sp64.y, sp64.z);
sp4C.set(sp64.x, sp64.y + 5.0f, sp64.z);
mAtCps[1].SetStartEnd(sp58, sp64);
sp34.set(0.0f, 0.0f, 0.0f);
mAtCps[1].SetAtVec(sp34);
mAtCps[1].SetR(50.0f);
} else {
sp64.y = temp.y;
}
mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x08), &sp58);
sp40 = sp64 - sp58;
mAtCps[0].SetStartEnd(sp58, sp64);
mAtCps[0].SetAtVec(sp40);
m34D6 = 1;
}
if (frameCtrl.getRate() < 0.01f) {
mActorKeepRope.clearData();
if (mDemo.getDemoType() == 5) {
dCam_getBody()->EndEventCamera(fopAcM_GetID(this));
dComIfGp_event_reset();
endDemoMode();
} else {
dComIfGp_evmng_cutEnd(mStaffIdx);
}
} else if (m34D8 == 0) {
if (
(mEquipItem == dItem_WATER_BOTTLE_e || mEquipItem == dItem_FOREST_WATER_e) &&
(frameCtrl.checkPass(9.0f))
) {
seStartOnlyReverb(JA_SE_LK_SPRINKLE_WATER);
m32E4.makeEmitterColor(dPa_name::ID_COMMON_0279, mpCLModel->getAnmMtx(0x08), &current.pos, &tevStr.mColorK0, &tevStr.mColorK0);
dCcG_At_Spl spl;
if (mEquipItem == dItem_WATER_BOTTLE_e) {
spl = dCcG_At_Spl_UNK0;
} else {
spl = dCcG_At_Spl_UNK4;
onNoResetFlg1(daPyFlg1_FOREST_WATER_USE);
m3554 = 3;
}
setAtParam(AT_TYPE_WATER, 0, spl, 0, dCcG_AtHitMark_None_e, 0, 5.0f);
} else if (
(mEquipItem == dItem_FAIRY_BOTTLE_e && frameCtrl.getFrame() >= daPy_HIO_bottle_c0::m.field_0x58) ||
(mEquipItem != dItem_FAIRY_BOTTLE_e && mEquipItem != dItem_FOREST_WATER_e && frameCtrl.getFrame() >= daPy_HIO_bottle_c0::m.field_0x4C)
) {
mpBottleContentsModel = NULL;
m34D8 = 1;
if (mDemo.getDemoType() == 5) {
dComIfGs_setEquipBottleItemEmpty(mReadyItemBtn);
} else if (dComIfGp_event_getTalkXYBtn() == dTalkBtn_X_e) {
dComIfGs_setEquipBottleItemEmpty(dItemBtn_X_e);
} else if (dComIfGp_event_getTalkXYBtn() == dTalkBtn_Y_e) {
dComIfGs_setEquipBottleItemEmpty(dItemBtn_Y_e);
} else { // dTalkBtn_Z_e
dComIfGs_setEquipBottleItemEmpty(dItemBtn_Z_e);
}
if (mEquipItem == dItem_FAIRY_BOTTLE_e) {
onModeFlg(ModeFlg_08000000);
mActorKeepRope.setData(makeFairy(&mLeftHandPos, 2));
} else if (mEquipItem == dItem_FIREFLY_BOTTLE_e) {
fopAcM_create(PROC_NH, 1, &mLeftHandPos, fopAcM_GetRoomNo(this), &shape_angle);
}
}
} else if (frameCtrl.getFrame() > 40.0f) {
m32E4.end();
}
}
if (m34D0 > 0) {
m34D0--;
if (m34D0 == 0) {
cXyz sp28(
m370C.x + cM_rndFX(45.0f),
m370C.y,
m370C.z + cM_rndFX(45.0f)
);
fopKyM_create(PROC_WATER_MARK, 1, &sp28);
m34D0 = 3;
}
}
return TRUE;
}
/* 80152ED0-80153064 .text procBottleSwing_init__9daPy_lk_cFi */
+1 -1
View File
@@ -1236,7 +1236,7 @@ void daPy_lk_c::endFlameDamageEmitter() {
if (current.pos.y < m35D0 - 10.0f) {
for (int i = 0; i < (s32)ARRAY_SIZE(mDmEcallBack); i++) {
cXyz pos;
mDoMtx_multVecZero(mDmEcallBack[i].mpMtx, &pos);
mDoMtx_multVecZero(mDmEcallBack[i].getMtx(), &pos);
pos.y = m35D0;
dComIfGp_particle_set(dPa_name::ID_COMMON_035A, &pos);