d_a_obj_bemos (#975)

* d_a_obj_bemos

* Improve d_particle for demo
This commit is contained in:
Maide
2026-05-07 17:42:48 +01:00
committed by GitHub
parent bcbbb282c1
commit 47c08e9f8a
8 changed files with 1503 additions and 148 deletions
+3
View File
@@ -19,3 +19,6 @@ SortIncludes: false
IncludeCategories:
- Regex: '"d/dolzel(_rel)?\.h"'
Priority: -1000
IndentCaseBlocks: true
IndentCaseLabels: true
NamespaceIndentation: All
+1 -1
View File
@@ -1535,7 +1535,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_aygr"),
ActorRel(NonMatching, "d_a_obj_balancelift"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_barrier"),
ActorRel(NonMatching, "d_a_obj_bemos"),
ActorRel(Matching, "d_a_obj_bemos"),
ActorRel(Matching, "d_a_obj_canon"),
ActorRel(Matching, "d_a_obj_eff"),
ActorRel(NonMatching, "d_a_obj_magmarock"),
+14 -17
View File
@@ -55,29 +55,26 @@ struct TVec3 {
template <>
struct TVec3<s16> : public SVec {
// s16 x, y, z;
TVec3& operator=(const TVec3& b) {
set(b.x, b.y, b.z);
return *this;
}
TVec3() {}
TVec3(const SVec& b) { set(b); }
TVec3(const s16 x, const s16 y, const s16 z) { set(x, y, z); }
void set(const SVec& vec) {
x = vec.x;
y = vec.y;
z = vec.z;
}
template<typename s16>
void set(s16 x_, s16 y_, s16 z_) {
x = x_;
y = y_;
z = z_;
x = (s16)x_;
y = (s16)y_;
z = (s16)z_;
}
TVec3(const int x, const int y, const int z) { set(x, y, z); }
void set(int x_, int y_, int z_) {
x = x_;
y = y_;
z = z_;
TVec3<s16>& operator=(const TVec3<s16>& b) {
set(b.x, b.y, b.z);
return *this;
}
};
+4 -1
View File
@@ -34,7 +34,10 @@ public:
void onSmokeParticle() { m5F9 = true; }
void setDefaultProc(Func func) { m55C = func; }
void setEmitterOffset(float) {}
void setPosAngle(cXyz&, csXyz&) {}
void setPosAngle(cXyz& pos, csXyz& angle) {
current.pos = pos;
current.angle = angle;
}
void setSearchProc(Func func) { m550 = func; }
void set_mtx();
+2 -2
View File
@@ -44,7 +44,6 @@ public:
cXyz& getAttentionBasePos() { return field_0x754; }
s16 getBackbone_x() { return mJntCtrl.getBackbone_x(); }
s16 getBackbone_y() { return mJntCtrl.getBackbone_y(); }
s8 getCattleRoomNo() { return m_cattleRoomNo; }
cXyz& getEyePos() { return field_0x748; }
f32 getGroundY() { return mAcch.GetGroundH(); }
s16 getHead_x() { return mJntCtrl.getHead_x(); }
@@ -70,10 +69,11 @@ public:
// Note: The 0x10 bit is used in the final release, but not in the demo debug maps, so its official name is unknown.
void offPlayerRoom(int idx) { m_playerRoom[idx] = false; }
void onPlayerRoom(int idx) { m_playerRoom[idx] = true; }
void setCattleRoomNo(s8 roomNo) { m_cattleRoomNo = roomNo; }
static bool isPlayerRoom(int idx) { return m_playerRoom[idx]; }
static bool isPlayerRoom_Goat() { return isPlayerRoom(1) == true; }
static s8 getCattleRoomNo() { return m_cattleRoomNo; }
static void setCattleRoomNo(s8 roomNo) { m_cattleRoomNo = roomNo; }
cPhs_State create();
BOOL createHeap();
+125 -38
View File
@@ -2,61 +2,148 @@
#define D_A_OBJ_BEMOS_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_gnd_chk.h"
#include "m_Do/m_Do_hostIO.h"
class JPABaseEmitter;
class daBeam_c;
class daBemos_c : public fopAc_ac_c {
typedef BOOL (daBemos_c::*EyeProc)();
public:
inline cPhs_State _create();
inline bool _delete();
inline bool _draw();
inline bool _execute();
void checkEyeProc(int (daBemos_c::*)()) {}
void setEyeProc(int (daBemos_c::*)()) {}
bool checkEyeProc(EyeProc proc) {
return m290 == proc;
}
void setEyeProc(EyeProc proc) {
m290 = proc;
}
void set_mtx();
void CreateHeap1();
void CreateHeap2();
void CreateHeap3();
void CreateHeap();
void CreateInit1();
void CreateInit2();
void CreateInit3();
void CreateInit();
void blue_range_check(int, csXyz*);
void red_range_check(int, csXyz*);
void yellow_range_check(int, csXyz*);
void blue_eye_wait_init();
void blue_eye_wait();
void blue_eye_charge_init();
void blue_eye_charge();
void blue_eye_search_init();
void blue_eye_search();
void red_eye_wait_init();
void red_eye_wait();
void red_eye_charge_init();
void red_eye_charge();
void red_eye_search_init();
void red_eye_search();
void eye_break_init();
void eye_break();
void eye_dummy();
void yellow_eye_wait_init();
void yellow_eye_wait();
void yellow_eye_search_init();
void yellow_eye_search();
BOOL CreateHeap1();
BOOL CreateHeap2();
BOOL CreateHeap3();
BOOL CreateHeap();
BOOL CreateInit1();
BOOL CreateInit2();
BOOL CreateInit3();
cPhs_State CreateInit();
BOOL blue_range_check(int, csXyz*);
BOOL red_range_check(int, csXyz*);
BOOL yellow_range_check(int, csXyz*);
BOOL blue_eye_wait_init();
BOOL blue_eye_wait();
BOOL blue_eye_charge_init();
BOOL blue_eye_charge();
BOOL blue_eye_search_init();
BOOL blue_eye_search();
BOOL red_eye_wait_init();
BOOL red_eye_wait();
BOOL red_eye_charge_init();
BOOL red_eye_charge();
BOOL red_eye_search_init();
BOOL red_eye_search();
BOOL eye_break_init();
BOOL eye_break();
BOOL eye_dummy();
BOOL yellow_eye_wait_init();
BOOL yellow_eye_wait();
BOOL yellow_eye_search_init();
BOOL yellow_eye_search();
void event_move();
void guard_proc();
void getBeamActor();
daBeam_c* getBeamActor();
static const char m_arcname[];
public:
/* Place member variables here */
};
/* 0x290 */ EyeProc m290;
/* 0x29C */ csXyz m29C;
/* 0x2A2 */ u8 m2A2[0x2A4 - 0x2A2];
/* 0x2A4 */ cXyz m2A4;
/* 0x2B0 */ request_of_phase_process_class mPhase;
/* 0x2B8 */ J3DModel* m2B8;
/* 0x2BC */ J3DModel* m2BC;
/* 0x2C0 */ J3DModel* m2C0;
/* 0x2C4 */ u8 m2C4[0x2C8 - 0x2C4];
/* 0x2C8 */ mDoExt_brkAnm mBrkAnm1;
/* 0x2E0 */ J3DAnmTevRegKey* m_sch_brk;
/* 0x2E4 */ mDoExt_brkAnm mBrkAnm2;
/* 0x2FC */ JPABaseEmitter* m2FC;
/* 0x300 */ JPABaseEmitter* m300;
/* 0x304 */ JPABaseEmitter* m304;
/* 0x308 */ JPABaseEmitter* m308;
/* 0x30C */ JPABaseEmitter* m30C;
/* 0x310 */ u8 m310;
/* 0x311 */ u8 m311[0x314 - 0x311];
/* 0x314 */ cXyz m314;
/* 0x320 */ f32 m320;
/* 0x324 */ u8 m324[0x354 - 0x324];
/* 0x354 */ cXyz m354;
/* 0x360 */ cXyz m360;
/* 0x36C */ cXyz m36C;
/* 0x378 */ dCcD_Stts mSttsCyl;
/* 0x3B4 */ dCcD_Cyl mCyl;
/* 0x4E4 */ dCcD_Stts mSttsSph;
/* 0x520 */ dCcD_Sph mSph;
/* 0x64C */ dBgS_ObjGndChk mGndChk;
/* 0x6A0 */ f32 m6A0;
/* 0x6A4 */ s32 m6A4;
/* 0x6A8 */ s32 m6A8;
/* 0x6AC */ s16 m6AC;
/* 0x6AE */ s16 m6AE;
/* 0x6B0 */ s16 m6B0;
/* 0x6B2 */ s16 m6B2;
/* 0x6B4 */ u8 m6B4[0x6B6 - 0x6B4];
/* 0x6B6 */ s16 m6B6;
/* 0x6B8 */ u8 m6B8;
/* 0x6B9 */ u8 m6B9;
/* 0x6BA */ u8 m6BA;
/* 0x6BB */ u8 m6BB;
/* 0x6BC */ u8 m6BC;
/* 0x6BD */ u8 m6BD;
/* 0x6BE */ u8 m6BE[0x6BF - 0x6BE];
/* 0x6BF */ u8 m6BF;
/* 0x6C0 */ u8 m6C0;
/* 0x6C1 */ u8 m6C1[0x6C4 - 0x6C1];
}; // Size: 0x6C4
class daBemos_HIO_c {
class daBemos_HIO_c : public JORReflexible {
public:
daBemos_HIO_c();
virtual ~daBemos_HIO_c() {}
public:
/* Place member variables here */
};
/* 0x04 */ s8 mNo;
/* 0x05 */ u8 m05[0x08 - 0x05];
/* 0x08 */ f32 m08;
/* 0x0C */ f32 m0C;
/* 0x10 */ f32 m10;
/* 0x14 */ f32 m14;
/* 0x18 */ f32 m18;
/* 0x1C */ s16 m1C;
/* 0x1E */ s16 m1E;
/* 0x20 */ f32 m20;
/* 0x24 */ f32 m24;
/* 0x28 */ s16 m28;
/* 0x2A */ s16 m2A;
/* 0x2C */ f32 m2C;
/* 0x30 */ f32 m30;
/* 0x34 */ f32 m34;
/* 0x38 */ f32 m38;
/* 0x3C */ f32 m3C;
/* 0x40 */ s16 m40;
/* 0x42 */ s16 m42;
/* 0x44 */ f32 m44;
/* 0x48 */ f32 m48;
/* 0x4C */ u8 m4C;
/* 0x4D */ u8 m4D[0x50 - 0x4D];
}; // Size: 0x50
#endif /* D_A_OBJ_BEMOS_H */
File diff suppressed because it is too large Load Diff
+19 -10
View File
@@ -259,8 +259,10 @@ dPa_followEcallBack::dPa_followEcallBack(u8 param_1, u8 param_2) {
void dPa_followEcallBack::execute(JPABaseEmitter* emtr) {
if (field_0x12 == 0 && !(mFlag & 2)) {
emtr->setGlobalTranslation(mPos->x, mPos->y, mPos->z);
if (mAngle != NULL)
emtr->setGlobalRotation(JGeometry::TVec3<s16>(mAngle->x, mAngle->y, mAngle->z));
if (mAngle != NULL) {
JGeometry::TVec3<s16> tmp(mAngle->x, mAngle->y, mAngle->z);
emtr->setGlobalRotation(tmp);
}
}
if (emtr->isEnableDeleteEmitter()) {
@@ -748,21 +750,26 @@ void dPa_control_c::draw(JPADrawInfo* param_1, u8 param_2) {
/* 8007D1DC-8007D378 .text set__13dPa_control_cFUcUsPC4cXyzPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyz */
JPABaseEmitter* dPa_control_c::set(u8 groupID, u16 userID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* prm, const GXColor* env, const cXyz* globalScale) {
JPABaseEmitter* emtr = mEmitterMng->createSimpleEmitterID(JGeometry::TVec3<f32>(pos->x, pos->y, pos->z), userID, groupID, getRM_ID(userID), NULL, NULL);
JGeometry::TVec3<f32> tmp(pos->x, pos->y, pos->z);
JPABaseEmitter* emtr = mEmitterMng->createSimpleEmitterID(tmp, userID, groupID, getRM_ID(userID), NULL, NULL);
if (emtr == NULL)
return NULL;
if (angle != NULL)
emtr->setGlobalRotation(*(JGeometry::TVec3<s16>*)angle);
if (angle != NULL) {
JGeometry::TVec3<s16> tmp2(angle->x, angle->y, angle->z);
emtr->setGlobalRotation(tmp2);
}
if (scale != NULL)
emtr->setGlobalScale(*scale);
if (scale != NULL) {
JGeometry::TVec3<f32> tmp2(scale->x, scale->y, scale->z);
emtr->setGlobalScale(tmp2);
}
emtr->mGlobalPrmColor.a = alpha;
if (pCallBack != NULL) {
emtr->setEmitterCallBackPtr(pCallBack);
pCallBack->setup(emtr, pos, angle, setupInfo);
} else if (!!(userID & 0x4000)) {
} else if (userID & 0x4000) {
emtr->setEmitterCallBackPtr(&mKagero);
}
@@ -770,8 +777,10 @@ JPABaseEmitter* dPa_control_c::set(u8 groupID, u16 userID, const cXyz* pos, cons
emtr->setGlobalPrmColor(prm->r, prm->g, prm->b);
if (env != NULL)
emtr->setGlobalEnvColor(env->r, env->g, env->b);
if (globalScale != NULL)
emtr->setGlobalParticleScale(*globalScale);
if (globalScale != NULL) {
JGeometry::TVec3<f32> tmp2(globalScale->x, globalScale->y, globalScale->z);
emtr->setGlobalParticleScale(tmp2);
}
return emtr;
}