* d_a_beam

* PR
This commit is contained in:
Maide
2025-08-23 04:11:14 +01:00
committed by GitHub
parent cd4ae74b8c
commit cae7597086
9 changed files with 628 additions and 56 deletions
+1 -1
View File
@@ -1483,7 +1483,7 @@ config.libs = [
ActorRel(Matching, "d_a_amiprop"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_arrow_iceeff"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_arrow_lighteff"),
ActorRel(NonMatching, "d_a_beam"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_beam"),
ActorRel(NonMatching, "d_a_boko"),
ActorRel(NonMatching, "d_a_canon"),
ActorRel(NonMatching, "d_a_cc"),
+7
View File
@@ -42,8 +42,10 @@ struct TVec3 {
TVec3() {}
template<T>
TVec3(const T x, const T y, const T z) { set(x, y, z); }
template <T>
void set(T x_, T y_, T z_) {
x = x_;
y = y_;
@@ -82,12 +84,16 @@ struct TVec3<s16> : public SVec {
template <>
struct TVec3<f32> : public Vec {
TVec3() {}
template<typename f32>
TVec3(const f32 x, const f32 y, const f32 z) { set(x, y, z); }
TVec3(const Vec& b) { set(b); }
operator Vec*() { return (Vec*)&x; }
operator const Vec*() const { return (Vec*)&x; }
template<typename f32>
void set(const TVec3<f32>& other) {
x = other.x;
y = other.y;
@@ -100,6 +106,7 @@ struct TVec3<f32> : public Vec {
z = vec.z;
}
template<typename f32>
void set(f32 x_, f32 y_, f32 z_) {
x = x_;
y = y_;
+71 -20
View File
@@ -2,46 +2,97 @@
#define D_A_BEAM_H
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "d/d_cc_d.h"
#include "d/d_bg_s_lin_chk.h"
#include "m_Do/m_Do_hostIO.h"
#include "d/d_com_inf_game.h"
class JPABaseEmitter;
class daHot_Floor_c;
class daBeam_c : public fopAc_ac_c {
typedef void (daBeam_c::*Func)();
public:
inline cPhs_State _create();
inline bool _delete();
inline bool _draw();
void beamCheck() {}
void beamOff() {}
void beamOn() {}
void checkHFloorParticle() {}
void checkSmokeParticle() {}
void offHFloorParticle() {}
void offSmokeParticle() {}
void onHFloorParticle() {}
void onSmokeParticle() {}
void setDefaultProc(void (daBeam_c::*)()) {}
bool beamCheck() { return m690 != NULL; }
void beamOff() {
m690->becomeInvalidEmitter();
m690 = NULL;
}
void beamOn() {
m690 = dComIfGp_particle_set(dPa_name::ID_SCENE_8121, &current.pos);
}
bool checkHFloorParticle() { return !(s32)m5F8; }
bool checkSmokeParticle() { return !(s32)m5F9; }
void offHFloorParticle() { m5F8 = false; }
void offSmokeParticle() { m5F9 = false; }
void onHFloorParticle() { m5F8 = true; }
void onSmokeParticle() { m5F9 = true; }
void setDefaultProc(Func func) { m55C = func; }
void setEmitterOffset(float) {}
void setPosAngle(cXyz&, csXyz&) {}
void setSearchProc(void (daBeam_c::*)()) {}
void setSearchProc(Func func) { m550 = func; }
void set_mtx();
void CreateHeap();
void CreateInit();
BOOL CreateHeap();
cPhs_State CreateInit();
bool _execute();
void checkRange(csXyz*);
BOOL checkRange(csXyz*);
void move_search();
void fix_search();
void timer_change();
void wait_proc();
public:
/* Place member variables here */
};
static const char M_arcname[];
class daBeam_HIO_c {
public:
/* 0x290 */ dCcD_Stts mStts;
/* 0x2CC */ dCcD_Cps mCps1;
/* 0x404 */ dCcD_Cps mCps2;
/* 0x53C */ u8 m53C;
/* 0x540 */ cXyz m540;
/* 0x54C */ u8 m54C;
/* 0x550 */ Func m550;
/* 0x55C */ Func m55C;
/* 0x568 */ request_of_phase_process_class mPhase;
/* 0x570 */ J3DModel* M_mdl;
/* 0x574 */ J3DAnmTransform* M_bck;
/* 0x578 */ mDoExt_bckAnm mBckAnm;
/* 0x5A8 */ f32 m588;
/* 0x58C */ J3DAnmTevRegKey* M_brk;
/* 0x590 */ mDoExt_brkAnm mBrkAnm;
/* 0x5A8 */ f32 m5A8;
/* 0x5AC */ J3DAnmTextureSRTKey* M_btk;
/* 0x5B0 */ mDoExt_btkAnm mBtkAnm;
/* 0x5C4 */ Mtx m5C4;
/* 0x5F4 */ s16 m5F4;
/* 0x5F6 */ s16 m5F6;
/* 0x5F8 */ bool m5F8;
/* 0x5F9 */ bool m5F9;
/* 0x5FC */ dBgS_ObjLinChk mLinChk;
/* 0x668 */ cXyz m668;
/* 0x674 */ Quaternion m674;
/* 0x684 */ fpc_ProcID m684;
/* 0x688 */ f32 m688;
/* 0x68C */ daHot_Floor_c* m68C;
/* 0x690 */ JPABaseEmitter* m690;
/* 0x694 */ f32 m694;
/* 0x698 */ s32 m698;
}; // size = 0x69C
class daBeam_HIO_c : public JORReflexible {
public:
daBeam_HIO_c();
virtual ~daBeam_HIO_c() {}
public:
/* Place member variables here */
};
/* 0x04 */ s8 mNo;
/* 0x08 */ f32 m08;
/* 0x0C */ s16 m0C;
}; // size = 0x10
#endif /* D_A_BEAM_H */
+5 -1
View File
@@ -17,6 +17,10 @@ public:
inline bool _draw();
inline bool _delete();
inline bool create_heap();
void setAimMtx(MtxP i_mtx) {
mtx_p = i_mtx;
mbSpawnParticle = true;
}
static const char M_arcname[];
@@ -32,7 +36,7 @@ public:
/* 0x2D8 */ JPABaseEmitter * mEmitter2;
/* 0x2DC */ bool mbSpawnParticle;
/* 0x2E0 */ Mtx mtx[5];
/* 0x3D0 */ Mtx * mtx_p;
/* 0x3D0 */ MtxP mtx_p;
/* 0x3D4 */ u32 field_0x3d4;
};
+2
View File
@@ -441,6 +441,8 @@ public:
bool ChkTgShieldFrontRange() { return mGObjTg.ChkSPrm(dCcG_TgSPrm_ShieldFrontRange_e); }
void OnTgShieldFrontRange() { mGObjTg.OnSPrm(dCcG_TgSPrm_ShieldFrontRange_e); }
void OffTgShieldFrontRange() { mGObjTg.OffSPrm(dCcG_TgSPrm_ShieldFrontRange_e); }
void OnAtStopNoConHit() { mGObjAt.OnSPrm(dCcG_AtSPrm_StopNoConHit_e); }
void OffAtStopNoConHit() { mGObjAt.OffSPrm(dCcG_AtSPrm_StopNoConHit_e); }
s16* GetTgShieldFrontRangeYAngle() { return mGObjTg.GetShieldFrontRangeYAngle(); }
bool ChkCoAtLasso() { return mGObjCo.ChkSPrm(dCcG_CoSPrm_AtLasso_e); }
bool ChkCoTgLasso() { return mGObjCo.ChkSPrm(dCcG_CoSPrm_TgLasso_e); }
+17
View File
@@ -54,6 +54,23 @@ enum YLESR00_RES_FILE_ID { // IDs and indexes are synced
YLESR00_BTK_YHTFR00=0x11,
YLESR00_BTK_YLESR00=0x12,
};
enum YLESR00_RES_FILE_INDEX {
/* BCK */
YLESR00_INDEX_BCK_YLESR00=0x6,
/* BMDM */
YLESR00_INDEX_BMD_YHTFR00=0x9,
YLESR00_INDEX_BMD_YLESR00=0xA,
/* BRK */
YLESR00_INDEX_BRK_YHTFR00=0xD,
YLESR00_INDEX_BRK_YLESR00=0xE,
/* BTK */
YLESR00_INDEX_BTK_YHTFR00=0x11,
YLESR00_INDEX_BTK_YLESR00=0x12,
};
#endif
#endif /* RES_YLESR00_H */
+523 -32
View File
@@ -5,9 +5,19 @@
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/actor/d_a_beam.h"
#include "d/actor/d_a_player.h"
#include "d/actor/d_a_hot_floor.h"
#include "d/res/res_ylesr00.h"
#include "d/d_cc_d.h"
#include "d/d_lib.h"
#include "d/d_particle.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_a_obj.h"
#include "d/d_s_play.h"
#include "f_op/f_op_actor_mng.h"
static daBeam_HIO_c l_HIO;
static dCcD_SrcCps cps_src = {
// dCcD_SrcGObjInf
@@ -33,13 +43,16 @@ static dCcD_SrcCps cps_src = {
},
// cM3dGCpsS
{
/* Start */ 0.0f, 0.0f, 0.0f,
/* End */ 0.0f, 0.0f, 0.0f,
/* Start */ 0.0f,
0.0f,
0.0f,
/* End */ 0.0f,
0.0f,
0.0f,
/* Radius */ 50.0f,
},
};
static dCcD_SrcCps cps2_src = {
// dCcD_SrcGObjInf
{
@@ -64,81 +77,522 @@ static dCcD_SrcCps cps2_src = {
},
// cM3dGCpsS
{
/* Start */ 0.0f, 0.0f, 0.0f,
/* End */ 0.0f, 0.0f, 0.0f,
/* Start */ 0.0f,
0.0f,
0.0f,
/* End */ 0.0f,
0.0f,
0.0f,
/* Radius */ 50.0f,
},
};
/* 000000EC-00000118 .text __ct__12daBeam_HIO_cFv */
daBeam_HIO_c::daBeam_HIO_c() {
/* Nonmatching */
mNo = -1;
m08 = 0.0f;
m0C = 0;
}
const char daBeam_c::M_arcname[] = "Ylesr00";
/* 00000118-000003B0 .text set_mtx__8daBeam_cFv */
void daBeam_c::set_mtx() {
/* Nonmatching */
f32 fVar1 = scale.z * 100.0f;
cXyz sp18 = m668 - current.pos;
f32 abs = sp18.abs() / fVar1;
f32 fVar2 = (m588 * (5.0f - m5A8)) / 50.0f + 0.5f;
M_mdl->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z);
mDoMtx_stack_c::scaleM(fVar2, fVar2, abs);
M_mdl->setBaseTRMtx(mDoMtx_stack_c::get());
if (m690 != NULL) {
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z);
mDoMtx_stack_c::transM(0.0f, 0.0f, m694);
m690->setGlobalRTMatrix(mDoMtx_stack_c::get());
JGeometry::TVec3<f32> s(scale.x, scale.x, scale.x);
m690->setGlobalScale(s);
}
if (m68C != NULL) {
mDoMtx_stack_c::transS(m668.x, m668.y, m668.z);
mDoMtx_stack_c::quatM(&m674);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::scaleM(1.0f, 1.0f, m688);
MTXCopy(mDoMtx_stack_c::get(), m5C4);
m68C->setAimMtx(m5C4);
}
}
/* 000003B0-000003D0 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static BOOL CheckCreateHeap(fopAc_ac_c* a_this) {
return ((daBeam_c*)a_this)->CreateHeap();
}
/* 000003D0-00000688 .text CreateHeap__8daBeam_cFv */
void daBeam_c::CreateHeap() {
/* Nonmatching */
BOOL daBeam_c::CreateHeap() {
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(M_arcname, YLESR00_INDEX_BMD_YLESR00));
JUT_ASSERT(304, modelData != NULL);
M_mdl = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
JUT_ASSERT(306, M_mdl != NULL);
M_bck = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(M_arcname, YLESR00_INDEX_BCK_YLESR00));
JUT_ASSERT(310, M_bck != NULL);
M_brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes(M_arcname, YLESR00_INDEX_BRK_YLESR00));
JUT_ASSERT(314, M_brk != NULL);
M_btk = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(M_arcname, YLESR00_INDEX_BTK_YLESR00));
JUT_ASSERT(318, M_brk != NULL);
BOOL tmp1 = mBckAnm.init(modelData, M_bck, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false);
BOOL tmp2 = mBrkAnm.init(modelData, M_brk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, FALSE);
BOOL tmp3 = mBtkAnm.init(modelData, M_btk, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, FALSE);
if (M_mdl == NULL || !tmp1 || !tmp2 || !tmp3) {
return false;
}
return true;
}
/* 00000688-00000864 .text daBeam_AtHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daBeam_AtHitCallback(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* Nonmatching */
void daBeam_AtHitCallback(fopAc_ac_c* arg0, dCcD_GObjInf* arg1, fopAc_ac_c* arg2, dCcD_GObjInf* arg3) {
daBeam_c* i_this = (daBeam_c*)arg0;
if (fopAcM_IsActor(arg2)) {
if (fopAcM_GetName(arg2) == PROC_PLAYER) {
fopAcM_seStartCurrent(arg2, JA_SE_LK_BEAM_HIT, 0);
if (i_this->m54C != 0) {
cXyz sp20(-cM_scos(i_this->current.angle.y), 0.0f, cM_ssin(i_this->current.angle.y));
cXyz sp14 = arg2->current.pos - i_this->current.pos;
if (sp20.inprod(sp14) < 0.0f) {
sp20.x = -sp20.x;
sp20.z = -sp20.z;
}
arg1->SetAtVec(sp20);
arg3->SetTgRVec(sp20);
}
} else if (fopAcM_GetName(arg2) == PROC_AM2) {
arg3->ClrTgHit();
}
if (i_this->parentActorID != fopAcM_GetID(arg2)) {
i_this->m540 = *i_this->mCps1.GetAtHitPosP();
i_this->m53C = true;
}
}
}
/* 00000864-00000A00 .text daBeam_AtHitDummyCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daBeam_AtHitDummyCallback(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* Nonmatching */
void daBeam_AtHitDummyCallback(fopAc_ac_c* arg0, dCcD_GObjInf* arg1, fopAc_ac_c* arg2, dCcD_GObjInf* arg3) {
daBeam_c* i_this = (daBeam_c*)arg0;
if (fopAcM_IsActor(arg2)) {
if (fopAcM_GetName(arg2) == PROC_PLAYER) {
fopAcM_seStartCurrent(arg2, JA_SE_LK_BEAM_HIT, 0);
if (i_this->m54C != 0) {
cXyz sp20(-cM_scos(i_this->current.angle.y), 0.0f, cM_ssin(i_this->current.angle.y));
cXyz sp14 = arg2->current.pos - i_this->current.pos;
if (sp20.inprod(sp14) < 0.0f) {
sp20.x = -sp20.x;
sp20.z = -sp20.z;
}
arg1->SetAtVec(sp20);
arg3->SetTgRVec(sp20);
}
} else if (fopAcM_GetName(arg2) == PROC_AM2) {
arg3->ClrTgHit();
}
}
}
/* 00000A00-00000AA0 .text daBeam_checkHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daBeam_checkHitCallback(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* Nonmatching */
void daBeam_checkHitCallback(fopAc_ac_c* arg0, dCcD_GObjInf* arg1, fopAc_ac_c* arg2, dCcD_GObjInf* arg3) {
if (fopAcM_IsActor(arg2) && arg0->parentActorID != fopAcM_GetID(arg2)) {
if (fopAcM_GetName(arg2) != PROC_PLAYER || arg1->ChkAtShieldHit()) {
daBeam_c* i_this = (daBeam_c*)arg0;
i_this->m540 = *i_this->mCps2.GetAtHitPosP();
i_this->m53C = true;
}
}
}
/* 00000AA0-00000F24 .text CreateInit__8daBeam_cFv */
void daBeam_c::CreateInit() {
/* Nonmatching */
cPhs_State daBeam_c::CreateInit() {
mStts.Init(0xff, 0xff, this);
u8 uVar11 = fopAcM_GetParam(this) >> 0x1e;
mCps1.Set(cps_src);
mCps1.SetStts(&mStts);
cXyz fVar2 = current.pos;
fVar2.x += (scale.z * 100.0f) * cM_scos(current.angle.x) * cM_ssin(current.angle.y);
fVar2.y -= (scale.z * 100.0f) * cM_ssin(current.angle.x);
fVar2.z += (scale.z * 100.0f) * cM_scos(current.angle.x) * cM_scos(current.angle.y);
mCps1.SetStartEnd(current.pos, fVar2);
mCps1.SetR(25.0f);
if (uVar11 == 0) {
mCps1.SetAtHitCallback(daBeam_AtHitCallback);
} else {
mCps1.SetAtHitCallback(daBeam_AtHitDummyCallback);
}
mCps1.OnAtStopNoConHit();
mCps1.OnAtNoHitMark();
mCps2.Set(cps2_src);
mCps2.SetStts(&mStts);
mCps2.SetStartEnd(current.pos, fVar2);
mCps2.SetR(25.0f);
mCps2.OnAtNoTgHitInfSet();
if (uVar11 == 0) {
mCps2.SetAtHitCallback(daBeam_checkHitCallback);
}
m674 = ZeroQuat;
m684 = fpcM_ERROR_PROCESS_ID_e;
m68C = NULL;
set_mtx();
fopAcM_SetMtx(this, M_mdl->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -50.0f, -50.0f, 0.0f, 50.0f, 50.0f, 2000.0f);
if (parentActorID == -1) {
u8 params1 = fopAcM_GetParam(this) & 0xFF;
s8 params2 = (fopAcM_GetParam(this) >> 8) & 0xFF;
params1 = cLib_maxLimit<u8>(params1, 2);
params2 = cLib_minMaxLimit<s8>(params2, -30, 60);
switch (params1) {
case 0:
setSearchProc(&daBeam_c::fix_search);
setDefaultProc(&daBeam_c::fix_search);
break;
case 1:
setSearchProc(&daBeam_c::move_search);
setDefaultProc(&daBeam_c::move_search);
break;
case 2:
actor_status = 0;
m5F6 = params2;
setSearchProc(&daBeam_c::timer_change);
setDefaultProc(&daBeam_c::timer_change);
break;
default:
setSearchProc(&daBeam_c::move_search);
break;
}
scale.set(2.5f, 2.5f, 20.0f);
m694 = REG10_F(10) * 0.001f;
m690 = NULL;
m698 = fopAcM_GetParam(this) >> 0x10 & 0xff;
if (m698 != 0xff && fopAcM_isSwitch(this, m698)) {
setSearchProc(&daBeam_c::wait_proc);
}
m54C = 0;
} else {
m694 = 0.0f;
m690 = NULL;
m54C = fopAcM_GetParam(this) >> 0x18 & 0xf;
u8 smoke = ((fopAcM_GetParam(this) >> 0x1C) & 3);
bool floor = ((fopAcM_GetParam(this) >> 0x1C) & 1);
if (floor) {
offHFloorParticle();
} else {
onHFloorParticle();
}
if (smoke & 2) {
offSmokeParticle();
} else {
onSmokeParticle();
}
}
return cPhs_COMPLEATE_e;
}
/* 00000F24-000015A4 .text _execute__8daBeam_cFv */
bool daBeam_c::_execute() {
/* Nonmatching */
if (m550) {
(this->*m550)();
if (m698 != 0xff) {
if (fopAcM_isSwitch(this, m698)) {
setSearchProc(&daBeam_c::wait_proc);
} else {
setSearchProc(m55C);
}
}
}
mBtkAnm.play();
f32 tmp = scale.z * 100.0f;
cXyz sp64 = current.pos;
sp64.x += tmp * cM_scos(current.angle.x) * cM_ssin(current.angle.y);
sp64.y -= tmp * cM_ssin(current.angle.x);
sp64.z += tmp * cM_scos(current.angle.x) * cM_scos(current.angle.y);
mCps2.SetStartEnd(current.pos, sp64);
mCps2.SetR(25.0f);
dComIfG_Ccsp()->Set(&mCps2);
if (m5F4 == 1) {
f32 fVar15 = scale.z * 100.0f;
if (m53C == 1) {
cXyz sp58 = m540 - current.pos;
fVar15 = sp58.abs();
}
cXyz sp4C = current.pos;
sp4C.x += fVar15 * cM_scos(current.angle.x) * cM_ssin(current.angle.y);
sp4C.y -= fVar15 * cM_ssin(current.angle.x);
sp4C.z += fVar15 * cM_scos(current.angle.x) * cM_scos(current.angle.y);
cXyz sp40 = sp4C - current.pos;
if (!sp40.normalizeRS()) {
sp40 = cXyz::Zero;
}
mCps1.SetStartEnd(current.pos, sp4C);
mCps1.SetR(25.0f);
mCps1.SetAtVec(sp40);
dComIfG_Ccsp()->Set(&mCps1);
}
if (m588 > 0.0f) {
cXyz sp34 = current.pos;
f32 tmp = m588 * 20.0f * scale.z;
sp34.x += tmp * cM_scos(current.angle.x) * cM_ssin(current.angle.y);
sp34.y -= tmp * cM_ssin(current.angle.x);
sp34.z += tmp * cM_scos(current.angle.x) * cM_scos(current.angle.y);
mLinChk.OffBackFlag();
mLinChk.Set(&current.pos, &sp34, this);
if (m53C == 1) {
m668 = m540;
m688 = 1.0f;
m684 = fpcM_ERROR_PROCESS_ID_e;
m68C = NULL;
} else if (dComIfG_Bgsp()->LineCross(&mLinChk)) {
cM3dGPla* pcVar9 = dComIfG_Bgsp()->GetTriPla(mLinChk);
m668 = mLinChk.GetCross();
cXyz sp28(pcVar9->mNormal.x, pcVar9->mNormal.y, pcVar9->mNormal.z);
daObj::quat_rotBaseY2(&m674, sp28);
if (m684 == fpcM_ERROR_PROCESS_ID_e) {
u32 parameters = 0;
if (checkHFloorParticle()) {
parameters |= 1;
}
if (checkSmokeParticle()) {
parameters |= 2;
}
m684 = fopAcM_create(PROC_Hot_Floor, parameters, &m668);
}
m688 = 1.0f;
} else {
m668 = sp34;
m688 = 1.0f;
m684 = fpcM_ERROR_PROCESS_ID_e;
m68C = NULL;
}
if (m684 != fpcM_ERROR_PROCESS_ID_e && m68C == NULL) {
m68C = (daHot_Floor_c*)fopAcM_SearchByID(m684);
}
mDoAud_seStart(JA_SE_OBJ_STATUE_BEAM, &m668, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
} else {
m684 = fpcM_ERROR_PROCESS_ID_e;
m68C = NULL;
}
m53C = 0;
return false;
}
/* 000015A4-000017EC .text checkRange__8daBeam_cFP5csXyz */
void daBeam_c::checkRange(csXyz*) {
/* Nonmatching */
BOOL daBeam_c::checkRange(csXyz* o_arg1) {
cXyz sp54(cM_ssin(home.angle.y), 0.0f, cM_scos(home.angle.y));
cXyz sp48(cM_scos(home.angle.y), 0.0f, -cM_ssin(home.angle.y));
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
cXyz sp3C = player->current.pos;
sp3C.y = player->getGroundY();
cXyz sp30 = sp3C - current.pos;
cXyz sp24(sp48.inprod(sp30), -sp30.y, sp54.inprod(sp30));
if (sp24.z < 500.0f && sp24.z > 0.0f && std::fabsf(sp24.x) < 150.0f && fabs(sp24.y) < 250.0f) {
if (o_arg1 != NULL) {
o_arg1->x = cM_atan2s(sp24.y, sp24.absXZ());
o_arg1->y = cM_atan2s(sp30.x, sp30.z);
}
return TRUE;
}
return FALSE;
}
/* 000017EC-00001A10 .text move_search__8daBeam_cFv */
void daBeam_c::move_search() {
/* Nonmatching */
csXyz sp18;
if (checkRange(&sp18)) {
s16 sVar3 = cLib_addCalcAngleS(&current.angle.x, sp18.x, 2, 0x400, 0);
cLib_addCalcAngleS2(&current.angle.y, sp18.y, 4, 0x400);
if (abs(sVar3) < 0x400 && m5F4 == 0) {
if (!beamCheck()) {
beamOn();
}
if (m5F4 == 0) {
m5A8 = 0.0f;
if (m588 < 5.0f) {
m588 += 1.0f;
} else {
m5A8 = 0.0f;
m588 = 5.0f;
m5F4 = 1;
}
} else {
m5A8 = 0.0f;
m588 = 5.0f;
}
}
} else {
if (m5F4 == 0 || m588 <= 0.4f) {
cLib_addCalcAngleS2(&current.angle.y, home.angle.y, 4, 0x400);
cLib_addCalcAngleS2(&current.angle.x, home.angle.x, 4, 0x400);
}
if (beamCheck()) {
beamOff();
}
if (m5F4 == 1) {
if (m588 < 5.0f) {
m588 += 1.0f;
}
if (m5A8 < 4.0f) {
m5A8 += 1.0f;
} else {
m5A8 = 0.0f;
m588 = 0.0f;
m5F4 = 0;
}
} else {
m588 = 0.0f;
m5A8 = 0.0f;
}
}
}
/* 00001A10-00001A14 .text fix_search__8daBeam_cFv */
void daBeam_c::fix_search() {
/* Nonmatching */
}
/* 00001A14-00001BC0 .text timer_change__8daBeam_cFv */
void daBeam_c::timer_change() {
/* Nonmatching */
m5F6--;
if (m5F6 > 0) {
if (m690 == NULL) {
m690 = dComIfGp_particle_set(dPa_name::ID_SCENE_8121, &current.pos);
}
if (m5F4 == 0) {
m5A8 = 0.0f;
if (m588 < 5.0f) {
m588 += 1.0f;
} else {
m5A8 = 0.0f;
m588 = 5.0f;
m5F4 = 1;
}
} else {
m5A8 = 0.0f;
m588 = 5.0f;
}
} else {
if (m690 != NULL) {
m690->becomeInvalidEmitter();
m690 = NULL;
}
if (m5F4 == 1) {
if (m588 < 5.0f) {
m588 += 1.0f;
}
if (m5A8 < 4.0f) {
m5A8 += 1.0f;
} else {
m5A8 = 0.0f;
m588 = 0.0f;
m5F4 = 0;
}
} else {
m588 = 0.0f;
m5A8 = 0.0f;
}
if (m5F6 < -30) {
m5F6 = 60;
}
}
}
/* 00001BC0-00001C84 .text wait_proc__8daBeam_cFv */
void daBeam_c::wait_proc() {
/* Nonmatching */
if (m690 != NULL) {
m690->becomeInvalidEmitter();
m690 = NULL;
}
if (m5F4 == 1) {
if (m588 < 5.0f) {
m588 += 1.0f;
}
if (m5A8 < 4.0f) {
m5A8 += 1.0f;
} else {
m5A8 = 0.0f;
m588 = 0.0f;
m5F4 = 0;
}
} else {
m588 = 0.0f;
m5A8 = 0.0f;
}
if (m5F4 == 0) {
current.angle = home.angle;
}
}
/* 00001C84-00001CA4 .text daBeamCreate__FPv */
@@ -148,12 +602,35 @@ static cPhs_State daBeamCreate(void* i_this) {
/* 00001CA4-00001D34 .text _create__8daBeam_cFv */
cPhs_State daBeam_c::_create() {
/* Nonmatching */
#if VERSION == VERSION_DEMO
cPhs_State PVar1 = dComIfG_resLoad(&mPhase, M_arcname);
if (PVar1 == cPhs_COMPLEATE_e) {
fopAcM_SetupActor(this, daBeam_c);
#else
fopAcM_SetupActor(this, daBeam_c);
cPhs_State PVar1 = dComIfG_resLoad(&mPhase, M_arcname);
if (PVar1 == cPhs_COMPLEATE_e) {
#endif
if (fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x22A0)) {
return CreateInit();
}
return cPhs_ERROR_e;
}
return PVar1;
}
bool daBeam_c::_delete() {
mDoAud_seDeleteObject(&m668);
dComIfG_resDeleteDemo(&mPhase, M_arcname);
if (m690 != NULL) {
m690->becomeInvalidEmitter();
}
return true;
}
/* 0000291C-0000298C .text daBeamDelete__FPv */
static BOOL daBeamDelete(void*) {
/* Nonmatching */
static BOOL daBeamDelete(void* i_this) {
return ((daBeam_c*)i_this)->_delete();
}
/* 0000298C-000029B0 .text daBeamExecute__FPv */
@@ -161,9 +638,23 @@ static BOOL daBeamExecute(void* i_this) {
return ((daBeam_c*)i_this)->_execute();
}
bool daBeam_c::_draw() {
if (m5F4 == 0) {
return true;
}
set_mtx();
mBtkAnm.entry(M_mdl->getModelData());
mBrkAnm.entry(M_mdl->getModelData(), (s16)m5A8);
mBckAnm.entry(M_mdl->getModelData(), (s16)m588);
mDoExt_modelUpdateDL(M_mdl);
return true;
}
/* 000029B0-00002AA0 .text daBeamDraw__FPv */
static BOOL daBeamDraw(void*) {
/* Nonmatching */
static BOOL daBeamDraw(void* i_this) {
return ((daBeam_c*)i_this)->_draw();
}
/* 00002AA0-00002AA8 .text daBeamIsDelete__FPv */
+1 -1
View File
@@ -31,7 +31,7 @@ void daHot_Floor_c::set_mtx() {
mDoMtx_copy(mtx[i - 1], mtx[i]);
if (mtx_p != NULL) {
cXyz pos = cXyz::Zero;
mDoMtx_stack_c::copy(*mtx_p);
mDoMtx_stack_c::copy(mtx_p);
mDoMtx_stack_c::transM(0.0f, 5.0f, -5.0f);
mDoMtx_copy(mDoMtx_stack_c::get(), mtx[0]);
mDoMtx_stack_c::multVec(&pos, &current.pos);
+1 -1
View File
@@ -20,7 +20,7 @@ void daObj_Demo_Barrel_c::setParticleHahen() {
dComIfGp_particle_set(dPa_name::ID_COMMON_03E5, &current.pos, NULL, NULL, 0xFF, NULL, -1,
&tevStr.mColorK0, &tevStr.mColorK0, NULL);
if (emitter != NULL) {
static JGeometry::TVec3<f32> em_scl(1.0f, 0.8, 1.0f);
static JGeometry::TVec3<f32> em_scl(1.0f, 0.8f, 1.0f);
emitter->setEmitterScale(em_scl);
}
}