mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-09 06:03:22 -04:00
daPy_lk_c::procBottleOpen
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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), ¤t.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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user