mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
d_a_obj_ajav - matching (#911)
* initial work on d_a_obj_ajav * matched Act_c::_create and Part_c::init_data * initialized cXyz arrays * 44% matching in .text * more work on d_a_obj_ajav * 73% matching in .text * 83% matching in .text * 99% of .text matching * 100% .data matching * fakematch _execute and link d_a_obj_ajav * demo matching * initial code cleanup * named all fields in Act_c and some Part_c fields * more documentation * make a fakematch slightly less fake * fix _execute for demo * named more fields in Part_c * named most fields and parameters * finishing touches * update d_a_obj_ajav .cpp and .h * Commit review suggestions
This commit is contained in:
+1
-1
@@ -1681,7 +1681,7 @@ config.libs = [
|
||||
ActorRel(NonMatching, "d_a_obj_YLzou"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_Yboil"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_adnno"),
|
||||
ActorRel(NonMatching, "d_a_obj_ajav"),
|
||||
ActorRel(Matching, "d_a_obj_ajav"),
|
||||
ActorRel(NonMatching, "d_a_obj_apzl"),
|
||||
ActorRel(NonMatching, "d_a_obj_ashut"),
|
||||
ActorRel(NonMatching, "d_a_obj_auzu"),
|
||||
|
||||
@@ -1,60 +1,97 @@
|
||||
#ifndef D_A_OBJ_AJAV_H
|
||||
#define D_A_OBJ_AJAV_H
|
||||
|
||||
#include "d/d_bg_w.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
|
||||
namespace daObjAjav {
|
||||
static void daObjAjav_make_splash(cXyz, float);
|
||||
static void check_angle(short*, short);
|
||||
static void daObjAjav_limit_angle(short*, short);
|
||||
static void daObjAjav_get_rot_speed(cXyz, cXyz, short);
|
||||
static void daObjAjav_make_splash(cXyz, f32);
|
||||
static BOOL check_angle(s16*, s16);
|
||||
static void daObjAjav_limit_angle(s16*, s16);
|
||||
static csXyz daObjAjav_get_rot_speed(cXyz, cXyz, s16);
|
||||
|
||||
class Act_c;
|
||||
|
||||
class Part_c {
|
||||
public:
|
||||
void checkExeProc(void (daObjAjav::Part_c::*)(daObjAjav::Act_c*)) {}
|
||||
void draw(daObjAjav::Act_c*) {}
|
||||
void execute(daObjAjav::Act_c*) {}
|
||||
void setDrawProc(void (daObjAjav::Part_c::*)(daObjAjav::Act_c*)) {}
|
||||
void setExeProc(void (daObjAjav::Part_c::*)(daObjAjav::Act_c*)) {}
|
||||
void set_se_pos(cXyz) {}
|
||||
typedef void(Part_c::*daObjAjavPartCallback)(daObjAjav::Act_c*);
|
||||
public:
|
||||
bool checkExeProc(daObjAjavPartCallback i_proc) { return mExeProc == i_proc; }
|
||||
void draw(daObjAjav::Act_c* i_actor) { (this->*mDrawProc)(i_actor); }
|
||||
void execute(daObjAjav::Act_c* i_actor) { (this->*mExeProc)(i_actor); }
|
||||
void setDrawProc(daObjAjavPartCallback i_drawProc) { mDrawProc = i_drawProc; }
|
||||
void setExeProc(daObjAjavPartCallback i_exeProc) { mExeProc = i_exeProc; }
|
||||
inline void set_se_pos(cXyz i_pos); // weak but not inlined
|
||||
|
||||
void make_hamon(cXyz, float);
|
||||
void make_hamon(cXyz, f32);
|
||||
void no_proc(daObjAjav::Act_c*);
|
||||
void init_data(cXyz, cXyz, dKy_tevstr_c*, cXyz*);
|
||||
void set_mdl_area(const char*, int, unsigned long);
|
||||
BOOL set_mdl_area(const char*, int, u32);
|
||||
void init_mtx(cXyz, csXyz, cXyz);
|
||||
void set_flaw_mtx(cXyz, csXyz);
|
||||
void set_fall_mtx(cXyz, csXyz);
|
||||
void fall_init(cXyz, csXyz, short, unsigned short);
|
||||
void fall_init(cXyz, csXyz, s16, u16);
|
||||
void fall_0(daObjAjav::Act_c*);
|
||||
void fall_1(daObjAjav::Act_c*);
|
||||
void flaw(daObjAjav::Act_c*);
|
||||
void draw_normal(daObjAjav::Act_c*);
|
||||
void draw_flashing(daObjAjav::Act_c*);
|
||||
void draw_flashing_shy(daObjAjav::Act_c*);
|
||||
void draw_flashing_normal(daObjAjav::Act_c*);
|
||||
void draw_shy(daObjAjav::Act_c*);
|
||||
void make_fall_rock(int);
|
||||
};
|
||||
|
||||
void make_fall_rock(BOOL);
|
||||
public:
|
||||
/* 0x00 */ cXyz mCenterPos;
|
||||
/* 0x0C */ cXyz mCenterToOriginTrans;
|
||||
/* 0x18 */ cXyz mRockDisplacement;
|
||||
/* 0x24 */ cXyz mRockDisplacementRate;
|
||||
/* 0x30 */ cXyz mFlawPos;
|
||||
/* 0x3C */ csXyz mAccumulatedRotation;
|
||||
/* 0x42 */ csXyz mRotationSpeed;
|
||||
/* 0x48 */ cXyz mSePos;
|
||||
/* 0x54 */ u16 mTimerTrigger;
|
||||
/* 0x56 */ u16 mTimer; // also used as a vertical velocity in fall_1
|
||||
/* 0x58 */ s16 mAngleLimit;
|
||||
/* 0x5A */ bool mbHasSplashed;
|
||||
/* 0x5B */ u8 mB8[0x6C - 0x5B];
|
||||
/* 0x6C */ cXyz mRockParticlePos;
|
||||
/* 0x78 */ J3DModel* mpModel;
|
||||
/* 0x7C */ dKy_tevstr_c* mpTevStr;
|
||||
/* 0x80 */ daObjAjavPartCallback mExeProc;
|
||||
/* 0x8C */ daObjAjavPartCallback mDrawProc;
|
||||
}; // Size: 0x98
|
||||
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
void check_ev() {}
|
||||
void check_sw() {}
|
||||
void on_sw() {}
|
||||
enum {
|
||||
STATUS_MAX = 4
|
||||
};
|
||||
public:
|
||||
BOOL check_ev() { return dComIfGs_isEventBit(dSv_event_flag_c::ENDLESS_NIGHT); }
|
||||
BOOL check_sw(int sw_no) { return dComIfGs_isSwitch(sw_no, fopAcM_GetHomeRoomNo(this)); }
|
||||
void on_sw(int sw_no) { dComIfGs_onSwitch(sw_no, fopAcM_GetHomeRoomNo(this)); }
|
||||
|
||||
void solidHeapCB(fopAc_ac_c*);
|
||||
void create_heap();
|
||||
// Fake inline method to match _execute, this isn't in the debug maps but is needed
|
||||
// in the call to set_hamon.
|
||||
// The stone is 6 fragments arranged in a 3x2 (row x col) grid, so
|
||||
// this gets the starting index of the n'th row.
|
||||
int get_rock_row() { return M_status << 1; }
|
||||
|
||||
static BOOL solidHeapCB(fopAc_ac_c*);
|
||||
BOOL create_heap();
|
||||
cPhs_State _create();
|
||||
bool _delete();
|
||||
void init_mtx();
|
||||
void set_tex();
|
||||
void set_co_offset();
|
||||
void check_all_wait();
|
||||
void check_end();
|
||||
BOOL check_all_wait();
|
||||
BOOL check_end();
|
||||
void to_broken();
|
||||
void damage_part();
|
||||
BOOL damage_part();
|
||||
void make_shot_rock();
|
||||
void make_hamon2(cXyz, float);
|
||||
void set_hamon(float);
|
||||
@@ -62,8 +99,30 @@ namespace daObjAjav {
|
||||
bool _draw();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
static const char M_arcname[];
|
||||
public:
|
||||
/* 0x290 */ u32 mSwNo;
|
||||
/* 0x294 */ request_of_phase_process_class mPhs;
|
||||
/* 0x29C */ dCcD_Stts mSphStts;
|
||||
/* 0x2D8 */ dCcD_Sph mSph;
|
||||
/* 0x404 */ cXyz mSphCoOffset;
|
||||
/* 0x410 */ dCcD_Stts mCylStts;
|
||||
/* 0x44C */ dCcD_Cyl mCyl;
|
||||
/* 0x57C */ dCcD_Stts mHintCylStts[2];
|
||||
/* 0x5F4 */ dCcD_Cyl mHintCyls[2];
|
||||
/* 0x854 */ Mtx mMtx;
|
||||
/* 0x884 */ u8 m884[0x890 - 0x884];
|
||||
/* 0x890 */ Part_c mRockParts[6];
|
||||
/* 0xC20 */ s16 mEventIdx;
|
||||
/* 0xC22 */ u8 M_status;
|
||||
/* 0xC23 */ bool mbResLoaded;
|
||||
/* 0xC24 */ u8 mActionIdx;
|
||||
/* 0xC25 */ u8 mC25[0xC26 - 0xC25];
|
||||
/* 0xC26 */ u16 mCutsceneEndDelay;
|
||||
/* 0xC28 */ u8 mHintCylHits;
|
||||
/* 0xC29 */ u8 mC29[0xC2C - 0xC29];
|
||||
/* 0xC2C */ dBgW* mpBgW;
|
||||
}; // Size: 0xC30
|
||||
};
|
||||
|
||||
#endif /* D_A_OBJ_AJAV_H */
|
||||
|
||||
+739
-59
@@ -7,185 +7,865 @@
|
||||
#include "d/actor/d_a_obj_ajav.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_priority.h"
|
||||
#include "d/res/res_ajav.h"
|
||||
|
||||
static cXyz l_daObjAjav_co_offset[3] = {
|
||||
cXyz(0.0f, 2550.0f, 200.0f),
|
||||
cXyz(250.0f, 1270.0f, 200.0f),
|
||||
cXyz(-290.0f, 740.0f, 200.0f)
|
||||
};
|
||||
|
||||
static cXyz l_daObjAjav_offset[6] = {
|
||||
cXyz(0.0f, 3000.0f, 0.0f),
|
||||
cXyz(500.0f, 2400.0f, 0.0f),
|
||||
cXyz(-300.0f, 1900.0f, 0.0f),
|
||||
cXyz(500.0f, 1400.0f, 0.0f),
|
||||
cXyz(-550.0f, 650.0f, 0.0f),
|
||||
cXyz(250.0f, 400.0f, 0.0f)
|
||||
};
|
||||
|
||||
static cXyz l_daObjAjav_cyl_offset[6] = {
|
||||
cXyz(33.0f, 2541.0f, 220.0f),
|
||||
cXyz(465.0f, 2083.0f, 220.0f),
|
||||
cXyz(-137.7f, 1297.0f, 220.0f),
|
||||
cXyz(530.0f, 511.0f, 220.0f),
|
||||
cXyz(-124.5f, 118.0f, 220.0f),
|
||||
cXyz(530.0f, 118.0f, 220.0f)
|
||||
};
|
||||
|
||||
static cXyz l_daObjAjav_rock_pos_table[6] = {
|
||||
cXyz(-170.0f, 3087.0f, 222.0f),
|
||||
cXyz(563.0f, 2384.0f, 222.0f),
|
||||
cXyz(-371.0f, 1880.0f, 222.0f),
|
||||
cXyz(615.0f, 1391.0f, 222.0f),
|
||||
cXyz(-494.0f, 748.0f, 222.0f),
|
||||
cXyz(249.0f, 535.0f, 222.0f)
|
||||
};
|
||||
|
||||
static dCcD_SrcSph l_daObjAjav_sph_data = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ AT_TYPE_BOMB,
|
||||
/* SrcObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_NoConHit_e | dCcG_TgSPrm_NoHitMark_e | dCcG_TgSPrm_ShieldFrontRange_e,
|
||||
/* SrcObjCo SPrm */ 0,
|
||||
/* SrcGObjAt Se */ 0,
|
||||
/* SrcGObjAt HitMark */ 0,
|
||||
/* SrcGObjAt Spl */ 0,
|
||||
/* SrcGObjAt Mtrl */ 0,
|
||||
/* SrcGObjAt SPrm */ 0,
|
||||
/* SrcGObjTg Se */ 0,
|
||||
/* SrcGObjTg HitMark */ 0,
|
||||
/* SrcGObjTg Spl */ 0,
|
||||
/* SrcGObjTg Mtrl */ 0,
|
||||
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
||||
/* SrcGObjCo SPrm */ 0,
|
||||
},
|
||||
// cM3dGSphS
|
||||
{{
|
||||
/* Center */ {0.0f, 0.0f, 0.0f},
|
||||
/* Radius */ 280.0f,
|
||||
}},
|
||||
};
|
||||
|
||||
static dCcD_SrcCyl l_daObjAjav_cyl_data = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ AT_TYPE_BOMB,
|
||||
/* SrcObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_ShieldFrontRange_e,
|
||||
/* SrcObjCo SPrm */ 0,
|
||||
/* SrcGObjAt Se */ 0,
|
||||
/* SrcGObjAt HitMark */ 0,
|
||||
/* SrcGObjAt Spl */ 0,
|
||||
/* SrcGObjAt Mtrl */ 0,
|
||||
/* SrcGObjAt SPrm */ 0,
|
||||
/* SrcGObjTg Se */ 0,
|
||||
/* SrcGObjTg HitMark */ 0,
|
||||
/* SrcGObjTg Spl */ 0,
|
||||
/* SrcGObjTg Mtrl */ 0,
|
||||
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e | dCcG_TgSPrm_NoConHit_e,
|
||||
/* SrcGObjCo SPrm */ 0
|
||||
},
|
||||
// cM3dGCylS
|
||||
{{
|
||||
/* Center */ {0.0f, -40.0f, 0.0f},
|
||||
/* Radius */ 780.0f,
|
||||
/* Height */ 3300.0f,
|
||||
}},
|
||||
};
|
||||
|
||||
static dCcD_SrcCyl l_daObjAjav_hint_cyl_data = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ AT_TYPE_BOMB,
|
||||
/* SrcObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_ShieldFrontRange_e,
|
||||
/* SrcObjCo SPrm */ 0,
|
||||
/* SrcGObjAt Se */ 0,
|
||||
/* SrcGObjAt HitMark */ 0,
|
||||
/* SrcGObjAt Spl */ 0,
|
||||
/* SrcGObjAt Mtrl */ 0,
|
||||
/* SrcGObjAt SPrm */ 0,
|
||||
/* SrcGObjTg Se */ 0,
|
||||
/* SrcGObjTg HitMark */ 0,
|
||||
/* SrcGObjTg Spl */ 0,
|
||||
/* SrcGObjTg Mtrl */ 0,
|
||||
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e | dCcG_TgSPrm_NoConHit_e,
|
||||
/* SrcGObjCo SPrm */ 0
|
||||
},
|
||||
// cM3dGCylS
|
||||
{{
|
||||
/* Center */ {0.0f, -40.0f, 0.0f},
|
||||
/* Radius */ 780.0f,
|
||||
/* Height */ 3300.0f,
|
||||
}},
|
||||
};
|
||||
|
||||
static f32 l_daObjAjav_hint_cyl_h_talbe[] = {3300.0f, 2360.0f, 1050.0f};
|
||||
|
||||
static f32 l_daObjAjav_cyl_r[6] = {
|
||||
629.0f, 294.8f, 491.0f,
|
||||
216.0f, 563.0f, 85.3f
|
||||
};
|
||||
|
||||
static f32 l_daObjAjav_cyl_h[6] = {
|
||||
773.0f, 458.5f, 1100.5f,
|
||||
1401.9f, 1133.0f, 451.9
|
||||
};
|
||||
|
||||
static const s32 l_daObjAjav_idx_table[6] = {
|
||||
4, 5 ,6 ,7, 8, 9
|
||||
};
|
||||
|
||||
static const char* const l_daObjAjav_ev_name[] = {
|
||||
"ajav_destroy0",
|
||||
"ajav_destroy1",
|
||||
"ajav_uzu"
|
||||
};
|
||||
|
||||
/* 000000EC-00000170 .text daObjAjav_make_splash__9daObjAjavF4cXyzf */
|
||||
void daObjAjav::daObjAjav_make_splash(cXyz, float) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::daObjAjav_make_splash(cXyz i_splashPos, f32 i_scale) {
|
||||
cXyz scale;
|
||||
|
||||
i_scale /= 2000.0f;
|
||||
i_scale = 4.0f + i_scale;
|
||||
|
||||
scale.x = i_scale;
|
||||
scale.y = 4.0f;
|
||||
scale.z = scale.x;
|
||||
dComIfGp_particle_set(dPa_name::ID_COMMON_003C, &i_splashPos, NULL, &scale);
|
||||
}
|
||||
|
||||
/* 000001AC-00000268 .text make_hamon__Q29daObjAjav6Part_cF4cXyzf */
|
||||
void daObjAjav::Part_c::make_hamon(cXyz, float) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::make_hamon(cXyz i_hamonPos, f32 i_scale) {
|
||||
cXyz scale;
|
||||
|
||||
i_scale /= 2000.0f;
|
||||
scale.x = 2.0f + i_scale;
|
||||
scale.y = scale.x;
|
||||
scale.z = scale.x;
|
||||
|
||||
i_hamonPos.y += 10.0f;
|
||||
|
||||
f32 water_height;
|
||||
if (fopAcM_getWaterY(&i_hamonPos, &water_height) == TRUE) {
|
||||
i_hamonPos.y = water_height;
|
||||
}
|
||||
|
||||
dComIfGp_particle_set(dPa_name::ID_COMMON_003F, &i_hamonPos, NULL, &scale);
|
||||
}
|
||||
|
||||
/* 00000268-0000026C .text no_proc__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::no_proc(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
return;
|
||||
}
|
||||
|
||||
/* 0000026C-000003A8 .text init_data__Q29daObjAjav6Part_cF4cXyz4cXyzP12dKy_tevstr_cP4cXyz */
|
||||
void daObjAjav::Part_c::init_data(cXyz, cXyz, dKy_tevstr_c*, cXyz*) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::init_data(cXyz i_actorPos, cXyz i_rockOffset, dKy_tevstr_c* i_tevStr, cXyz* i_rockPos) {
|
||||
mCenterPos = i_rockOffset;
|
||||
mCenterToOriginTrans = cXyz::Zero - mCenterPos;
|
||||
mAccumulatedRotation = csXyz::Zero;
|
||||
mRockDisplacement = cXyz::Zero;
|
||||
mRockDisplacementRate = cXyz::Zero;
|
||||
mpTevStr = i_tevStr;
|
||||
mRockParticlePos = *i_rockPos + i_actorPos;
|
||||
mExeProc = &Part_c::no_proc;
|
||||
mDrawProc = &Part_c::draw_normal;
|
||||
}
|
||||
|
||||
/* 000003A8-00000464 .text set_mdl_area__Q29daObjAjav6Part_cFPCciUl */
|
||||
void daObjAjav::Part_c::set_mdl_area(const char*, int, unsigned long) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Part_c::set_mdl_area(const char* i_arcName, int i_index, u32 i_differedDlistFlag) {
|
||||
J3DModelData* mdl_data;
|
||||
BOOL res = FALSE;
|
||||
mdl_data = (J3DModelData*) dComIfG_getObjectRes(i_arcName, i_index);
|
||||
JUT_ASSERT(600, mdl_data != NULL);
|
||||
|
||||
if (mdl_data != NULL) {
|
||||
mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, i_differedDlistFlag);
|
||||
res = TRUE;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* 00000464-0000050C .text init_mtx__Q29daObjAjav6Part_cF4cXyz5csXyz4cXyz */
|
||||
void daObjAjav::Part_c::init_mtx(cXyz, csXyz, cXyz) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::init_mtx(cXyz i_pos, csXyz i_angle, cXyz i_scale) {
|
||||
mpModel->setBaseScale(i_scale);
|
||||
mDoMtx_stack_c::transS(i_pos);
|
||||
mDoMtx_stack_c::ZXYrotM(i_angle);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mpModel->calc();
|
||||
}
|
||||
|
||||
/* 0000050C-000005A8 .text set_flaw_mtx__Q29daObjAjav6Part_cF4cXyz5csXyz */
|
||||
void daObjAjav::Part_c::set_flaw_mtx(cXyz, csXyz) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::set_flaw_mtx(cXyz i_pos, csXyz i_angle) {
|
||||
mDoMtx_stack_c::transS(i_pos);
|
||||
mDoMtx_stack_c::ZXYrotM(i_angle);
|
||||
mDoMtx_stack_c::transM(mRockDisplacement);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mpModel->calc();
|
||||
}
|
||||
|
||||
/* 000005A8-0000067C .text set_fall_mtx__Q29daObjAjav6Part_cF4cXyz5csXyz */
|
||||
void daObjAjav::Part_c::set_fall_mtx(cXyz, csXyz) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::set_fall_mtx(cXyz i_pos, csXyz i_angle) {
|
||||
mDoMtx_stack_c::transS(i_pos);
|
||||
mDoMtx_stack_c::ZXYrotM(i_angle);
|
||||
mDoMtx_stack_c::transM(mRockDisplacement);
|
||||
mDoMtx_stack_c::transM(mCenterPos);
|
||||
mDoMtx_stack_c::ZXYrotM(mAccumulatedRotation);
|
||||
mDoMtx_stack_c::transM(mCenterToOriginTrans);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mpModel->calc();
|
||||
}
|
||||
|
||||
/* 0000067C-000006E4 .text fall_init__Q29daObjAjav6Part_cF4cXyz5csXyzsUs */
|
||||
void daObjAjav::Part_c::fall_init(cXyz, csXyz, short, unsigned short) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::fall_init(cXyz i_initDispRate, csXyz i_initRotSpeed, s16 i_angleLimit, u16 i_timerTrigger) {
|
||||
mRockDisplacementRate = i_initDispRate;
|
||||
mRotationSpeed = i_initRotSpeed;
|
||||
|
||||
mAngleLimit = i_angleLimit;
|
||||
mTimerTrigger = i_timerTrigger;
|
||||
mTimer = 0;
|
||||
|
||||
mbHasSplashed = 0;
|
||||
setExeProc(&Part_c::fall_0);
|
||||
}
|
||||
|
||||
/* 000006E4-0000076C .text check_angle__9daObjAjavFPss */
|
||||
void daObjAjav::check_angle(short*, short) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::check_angle(s16* i_anglePtr, s16 i_angleLimit) {
|
||||
BOOL rt = FALSE;
|
||||
if (abs(*i_anglePtr) >= i_angleLimit) {
|
||||
s16 temp = abs(*i_anglePtr) - i_angleLimit;
|
||||
if (*i_anglePtr > 0) {
|
||||
*i_anglePtr = i_angleLimit - temp;
|
||||
} else {
|
||||
*i_anglePtr = -(i_angleLimit - temp);
|
||||
}
|
||||
rt = TRUE;
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
/* 0000076C-0000095C .text fall_0__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::fall_0(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::fall_0(daObjAjav::Act_c* i_actor) {
|
||||
cXyz temp(0.0f, -10.0f, 0.0f);
|
||||
|
||||
mAccumulatedRotation += mRotationSpeed;
|
||||
|
||||
if (check_angle(&mAccumulatedRotation.x, mAngleLimit)) {
|
||||
mRotationSpeed.x *= -1;
|
||||
}
|
||||
|
||||
if (check_angle(&mAccumulatedRotation.y, mAngleLimit)) {
|
||||
mRotationSpeed.y *= -1;
|
||||
}
|
||||
|
||||
mRockDisplacement += mRockDisplacementRate;
|
||||
|
||||
mRockDisplacementRate.z *= 0.8f + (0.2f * cM_rnd());
|
||||
mTimer++;
|
||||
if (mTimer == mTimerTrigger) {
|
||||
temp = mRockDisplacementRate * 0.4f;
|
||||
temp.y = 5.0f;
|
||||
mRockDisplacementRate = temp;
|
||||
|
||||
setExeProc(&Part_c::fall_1);
|
||||
|
||||
mTimer = 0;
|
||||
|
||||
mRotationSpeed = csXyz(mRotationSpeed * 0.3f);
|
||||
mRotationSpeed.z = static_cast<int>(cM_rnd() * -2.0f) * s16(cM_rnd() * 511.0f);
|
||||
}
|
||||
set_fall_mtx(i_actor->current.pos, i_actor->shape_angle);
|
||||
}
|
||||
|
||||
/* 0000095C-00000B8C .text fall_1__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::fall_1(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::fall_1(daObjAjav::Act_c* i_actor) {
|
||||
mRockDisplacement += mRockDisplacementRate;
|
||||
mRockDisplacement.y -= mTimer * 2.0f;
|
||||
mAccumulatedRotation += mRotationSpeed;
|
||||
|
||||
mTimer++;
|
||||
|
||||
if (!mbHasSplashed) {
|
||||
if (mRockDisplacement.y <= (mCenterToOriginTrans.y - 100.0f)) {
|
||||
cXyz splash_pos = (i_actor->current.pos + mRockDisplacement) + mCenterPos;
|
||||
splash_pos.y = 0.0f;
|
||||
daObjAjav_make_splash(splash_pos, mCenterPos.y);
|
||||
mbHasSplashed = true;
|
||||
make_hamon(splash_pos, mCenterPos.y);
|
||||
mSePos = splash_pos;
|
||||
mDoAud_seStart(JA_SE_OBJ_JB_STONE_FALL, &mSePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_actor)));
|
||||
}
|
||||
}
|
||||
|
||||
if (mRockDisplacement.y <= (mCenterToOriginTrans.y - 1000.0f)) {
|
||||
setExeProc(&Part_c::no_proc);
|
||||
setDrawProc(&Part_c::no_proc);
|
||||
}
|
||||
set_fall_mtx(i_actor->current.pos, i_actor->shape_angle);
|
||||
}
|
||||
|
||||
/* 00000B8C-00000C28 .text flaw__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::flaw(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::flaw(daObjAjav::Act_c* i_actor) {
|
||||
mRockDisplacement += mFlawPos;
|
||||
set_flaw_mtx(i_actor->current.pos, i_actor->shape_angle);
|
||||
mExeProc = &Part_c::no_proc;
|
||||
}
|
||||
|
||||
/* 00000C28-00000C6C .text draw_normal__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::draw_normal(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
g_env_light.setLightTevColorType(mpModel, mpTevStr);
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
}
|
||||
|
||||
/* 00000C6C-00000EA8 .text draw_flashing__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::draw_flashing(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
u8 r, g, b;
|
||||
if (mpTevStr) {
|
||||
g_env_light.setLightTevColorType(mpModel, mpTevStr);
|
||||
J3DMaterial* mesh = mpModel->getModelData()->getJointNodePointer(0)->getMesh();
|
||||
if (mesh) {
|
||||
s16 theta = (s16)(((f32)mTimer / mTimerTrigger) * 20479.0f) + 0x3000;
|
||||
f32 abs_sin_theta = std::abs(JMASSin(theta));
|
||||
|
||||
r = mesh->getTevKColor(1)->mColor.r;
|
||||
g = mesh->getTevKColor(1)->mColor.g;
|
||||
b = mesh->getTevKColor(1)->mColor.b;
|
||||
|
||||
mesh->getTevKColor(1)->mColor.r = abs_sin_theta * 85.0f;
|
||||
mesh->getTevKColor(1)->mColor.g = abs_sin_theta * 11.0f;
|
||||
mesh->getTevKColor(1)->mColor.b = abs_sin_theta * 9.0f;
|
||||
}
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
if (mesh) {
|
||||
mesh->getTevKColor(1)->mColor.r = r;
|
||||
mesh->getTevKColor(1)->mColor.g = g;
|
||||
mesh->getTevKColor(1)->mColor.b = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Unused member function
|
||||
void daObjAjav::Part_c::draw_flashing_shy(daObjAjav::Act_c*) {
|
||||
(void)&daObjAjav::Part_c::draw_shy;
|
||||
}
|
||||
|
||||
/* 00000EA8-00000F10 .text draw_flashing_normal__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::draw_flashing_normal(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::draw_flashing_normal(daObjAjav::Act_c* i_actor) {
|
||||
draw_flashing(i_actor);
|
||||
mTimer++;
|
||||
if (mTimer == mTimerTrigger) {
|
||||
setDrawProc(&Part_c::draw_normal);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000F10-00001090 .text draw_shy__Q29daObjAjav6Part_cFPQ29daObjAjav5Act_c */
|
||||
void daObjAjav::Part_c::draw_shy(daObjAjav::Act_c*) {
|
||||
/* Nonmatching */
|
||||
u8 r, g, b;
|
||||
if (mpTevStr) {
|
||||
g_env_light.setLightTevColorType(mpModel, mpTevStr);
|
||||
J3DMaterial* mesh = mpModel->getModelData()->getJointNodePointer(0)->getMesh();
|
||||
if (mesh) {
|
||||
r = mesh->getTevKColor(1)->mColor.r;
|
||||
g = mesh->getTevKColor(1)->mColor.g;
|
||||
b = mesh->getTevKColor(1)->mColor.b;
|
||||
|
||||
mesh->getTevKColor(1)->mColor.r = 0x55;
|
||||
mesh->getTevKColor(1)->mColor.g = 0x0B;
|
||||
mesh->getTevKColor(1)->mColor.b = 0x09;
|
||||
}
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
if (mesh) {
|
||||
mesh->getTevKColor(1)->mColor.r = r;
|
||||
mesh->getTevKColor(1)->mColor.g = g;
|
||||
mesh->getTevKColor(1)->mColor.b = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001090-00001168 .text make_fall_rock__Q29daObjAjav6Part_cFi */
|
||||
void daObjAjav::Part_c::make_fall_rock(int) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Part_c::make_fall_rock(BOOL i_increasedRate) {
|
||||
JPABaseEmitter* particle_emitter = dComIfGp_particle_set(dPa_name::ID_SCENE_8427, &mRockParticlePos);
|
||||
if (particle_emitter && mpTevStr) {
|
||||
if (i_increasedRate != FALSE) {
|
||||
particle_emitter->setRate(20.0f);
|
||||
}
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, &mRockParticlePos, mpTevStr);
|
||||
particle_emitter->setGlobalPrmColor(mpTevStr->mColorK0.r, mpTevStr->mColorK0.g, mpTevStr->mColorK0.b);
|
||||
}
|
||||
}
|
||||
|
||||
const char daObjAjav::Act_c::M_arcname[] = "Ajav";
|
||||
|
||||
/* 00001168-00001188 .text solidHeapCB__Q29daObjAjav5Act_cFP10fopAc_ac_c */
|
||||
void daObjAjav::Act_c::solidHeapCB(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Act_c::solidHeapCB(fopAc_ac_c* i_this) {
|
||||
return ((daObjAjav::Act_c*)i_this)->create_heap();
|
||||
}
|
||||
|
||||
/* 00001188-00001288 .text create_heap__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::create_heap() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Act_c::create_heap() {
|
||||
int i;
|
||||
BOOL res = mRockParts[0].set_mdl_area(M_arcname, l_daObjAjav_idx_table[0], 0x11000002);
|
||||
|
||||
if (res != FALSE) {
|
||||
for (i = 1; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
res = mRockParts[i].set_mdl_area(M_arcname, l_daObjAjav_idx_table[i], 0x15021202);
|
||||
if (res == FALSE) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (res != FALSE) {
|
||||
cBgD_t* cbgd_res = (cBgD_t*)dComIfG_getObjectRes(M_arcname, AJAV_DZB_AJAV);
|
||||
mpBgW = dBgW_NewSet(cbgd_res, cBgW::MOVE_BG_e, &mMtx);
|
||||
if (mpBgW == NULL) {
|
||||
res = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* 00001288-0000166C .text _create__Q29daObjAjav5Act_cFv */
|
||||
cPhs_State daObjAjav::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
cPhs_State rt = cPhs_ERROR_e;
|
||||
|
||||
fopAcM_SetupActor(this, daObjAjav::Act_c);
|
||||
|
||||
mSwNo = fopAcM_GetParam(this) & 0xFF;
|
||||
mbResLoaded = false;
|
||||
if (check_ev() && !check_sw(mSwNo)) {
|
||||
rt = dComIfG_resLoad(&mPhs, M_arcname);
|
||||
if (rt == cPhs_COMPLEATE_e) {
|
||||
if (fopAcM_entrySolidHeap(this, Act_c::solidHeapCB, 0)) {
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mRockParts[i].init_data(current.pos, l_daObjAjav_offset[i], &tevStr, &l_daObjAjav_rock_pos_table[i]);
|
||||
}
|
||||
|
||||
init_mtx();
|
||||
MTXCopy(mRockParts[5].mpModel->getBaseTRMtx(), mMtx);
|
||||
set_tex();
|
||||
|
||||
mSphStts.Init(0, 0xFF, this);
|
||||
mSph.SetStts(&mSphStts);
|
||||
mSph.Set(l_daObjAjav_sph_data);
|
||||
|
||||
mCylStts.Init(0, 0xFF, this);
|
||||
mCyl.SetStts(&mCylStts);
|
||||
mCyl.Set(l_daObjAjav_cyl_data);
|
||||
mCyl.SetC(current.pos);
|
||||
|
||||
for (i = 0; i < ARRAY_SSIZE(mHintCylStts); i++) {
|
||||
mHintCylStts[i].Init(0, 0xFF, this);
|
||||
mHintCyls[i].SetStts(&mHintCylStts[i]);
|
||||
mHintCyls[i].Set(l_daObjAjav_hint_cyl_data);
|
||||
}
|
||||
|
||||
set_co_offset();
|
||||
dComIfG_Bgsp()->Regist(mpBgW, this);
|
||||
|
||||
mbResLoaded = true;
|
||||
mActionIdx = 0;
|
||||
mHintCylHits = 0;
|
||||
} else {
|
||||
rt = cPhs_ERROR_e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rt;
|
||||
}
|
||||
|
||||
/* 00001B3C-00001C08 .text _delete__Q29daObjAjav5Act_cFv */
|
||||
bool daObjAjav::Act_c::_delete() {
|
||||
/* Nonmatching */
|
||||
if (DEMO_SELECT(true, heap != NULL) && mpBgW != NULL) {
|
||||
if (mpBgW->ChkUsed()) {
|
||||
dComIfG_Bgsp()->Release(mpBgW);
|
||||
#if VERSION > VERSION_DEMO
|
||||
mpBgW = NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (DEMO_SELECT(mbResLoaded == 1, true)) {
|
||||
dComIfG_resDelete(&mPhs, M_arcname);
|
||||
}
|
||||
|
||||
for (int i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mDoAud_seDeleteObject(&mRockParts[i].mSePos);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00001C08-00001CA8 .text init_mtx__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::init_mtx() {
|
||||
/* Nonmatching */
|
||||
for (int i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mRockParts[i].init_mtx(current.pos, shape_angle, scale);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001CA8-00001CE4 .text set_tex__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::set_tex() {
|
||||
/* Nonmatching */
|
||||
J3DModelData* model_data = mRockParts[0].mpModel->getModelData();
|
||||
J3DTexture* model_texture = model_data->getTexture();
|
||||
JUTNameTab* name_table = model_data->getTextureName();
|
||||
|
||||
for (int i = 1; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
J3DModelData* model_data_i = mRockParts[i].mpModel->getModelData();
|
||||
model_data_i->setTexture(model_texture);
|
||||
model_data_i->setTextureName(name_table);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001CE4-00001E3C .text set_co_offset__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::set_co_offset() {
|
||||
/* Nonmatching */
|
||||
s32 i, j;
|
||||
JUT_ASSERT(DEMO_SELECT(1173, 1172), (M_status >= 0) && (M_status < STATUS_MAX - 1));
|
||||
mSphCoOffset = l_daObjAjav_co_offset[M_status];
|
||||
mSph.SetC(current.pos + mSphCoOffset);
|
||||
mCyl.SetH(l_daObjAjav_hint_cyl_h_talbe[M_status]);
|
||||
|
||||
for (i = get_rock_row(), j = 0; j < ARRAY_SSIZE(mHintCyls); i++, j++) {
|
||||
mHintCyls[j].SetC(current.pos + l_daObjAjav_cyl_offset[i]);
|
||||
mHintCyls[j].SetR(l_daObjAjav_cyl_r[i]);
|
||||
mHintCyls[j].SetH(l_daObjAjav_cyl_h[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001E3C-00001EA0 .text daObjAjav_limit_angle__9daObjAjavFPss */
|
||||
void daObjAjav::daObjAjav_limit_angle(short*, short) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::daObjAjav_limit_angle(s16* i_anglePtr, s16 i_angleLimit) {
|
||||
if (abs(*i_anglePtr) > i_angleLimit) {
|
||||
if (*i_anglePtr > 0) {
|
||||
*i_anglePtr = i_angleLimit;
|
||||
} else {
|
||||
*i_anglePtr = -i_angleLimit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001EA0-00001F54 .text daObjAjav_get_rot_speed__9daObjAjavF4cXyz4cXyzs */
|
||||
void daObjAjav::daObjAjav_get_rot_speed(cXyz, cXyz, short) {
|
||||
/* Nonmatching */
|
||||
csXyz daObjAjav::daObjAjav_get_rot_speed(cXyz i_param1, cXyz i_param2, s16 i_angleLimit) {
|
||||
cXyz diff = i_param1 - i_param2;
|
||||
|
||||
csXyz o_rot_speed = csXyz::Zero;
|
||||
o_rot_speed.x = diff.y;
|
||||
o_rot_speed.y = diff.x;
|
||||
|
||||
daObjAjav_limit_angle(&o_rot_speed.x, i_angleLimit);
|
||||
daObjAjav_limit_angle(&o_rot_speed.y, i_angleLimit);
|
||||
|
||||
return o_rot_speed;
|
||||
}
|
||||
|
||||
/* 00001F54-00001FE4 .text check_all_wait__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::check_all_wait() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Act_c::check_all_wait() {
|
||||
int i;
|
||||
BOOL res = TRUE;
|
||||
for (i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
if (!mRockParts[i].checkExeProc(&Part_c::no_proc)) {
|
||||
res = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* 00001FE4-0000201C .text check_end__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::check_end() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Act_c::check_end() {
|
||||
BOOL rt = FALSE;
|
||||
if (M_status == (STATUS_MAX - 1)) {
|
||||
rt = check_all_wait();
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
/* 0000201C-000020B0 .text to_broken__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::to_broken() {
|
||||
/* Nonmatching */
|
||||
mEventIdx = dComIfGp_evmng_getEventIdx(l_daObjAjav_ev_name[M_status]);
|
||||
mActionIdx = 1;
|
||||
if (!eventInfo.checkCommandDemoAccrpt()) {
|
||||
fopAcM_orderOtherEventId(this, mEventIdx);
|
||||
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000020B0-00002124 .text damage_part__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::damage_part() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjAjav::Act_c::damage_part() {
|
||||
BOOL rt = FALSE;
|
||||
if (M_status < STATUS_MAX - 1 && mSph.ChkTgHit()) {
|
||||
to_broken();
|
||||
mSph.ClrTgHit();
|
||||
rt = TRUE;
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
/* 00002124-000021EC .text make_shot_rock__Q29daObjAjav5Act_cFv */
|
||||
void daObjAjav::Act_c::make_shot_rock() {
|
||||
/* Nonmatching */
|
||||
cXyz sph_center = mSph.GetC();
|
||||
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_SCENE_8426, &sph_center);
|
||||
if (emitter) {
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, &sph_center, &tevStr);
|
||||
emitter->setGlobalPrmColor(
|
||||
tevStr.mColorK0.r,
|
||||
tevStr.mColorK0.g,
|
||||
tevStr.mColorK0.b
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000021EC-000022F0 .text make_hamon2__Q29daObjAjav5Act_cF4cXyzf */
|
||||
void daObjAjav::Act_c::make_hamon2(cXyz, float) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Act_c::make_hamon2(cXyz i_hamonPos, f32 i_scale) {
|
||||
cXyz scale;
|
||||
|
||||
i_scale /= 3000.0f;
|
||||
scale.x = 1.0f + i_scale;
|
||||
scale.y = scale.x;
|
||||
scale.z = scale.x;
|
||||
|
||||
i_hamonPos.y += 10.0f;
|
||||
|
||||
f32 water_height;
|
||||
if (fopAcM_getWaterY(&i_hamonPos, &water_height) == TRUE) {
|
||||
i_hamonPos.y = water_height;
|
||||
}
|
||||
|
||||
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_SCENE_8454, &i_hamonPos, NULL, &scale);
|
||||
|
||||
if (emitter) {
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG1, ¤t.pos, &tevStr);
|
||||
emitter->setGlobalPrmColor(
|
||||
tevStr.mColorC0.r,
|
||||
tevStr.mColorC0.g,
|
||||
tevStr.mColorC0.b
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000022F0-000024A4 .text set_hamon__Q29daObjAjav5Act_cFf */
|
||||
void daObjAjav::Act_c::set_hamon(float) {
|
||||
/* Nonmatching */
|
||||
void daObjAjav::Act_c::set_hamon(f32 i_scale) {
|
||||
cXyz current_pos;
|
||||
cXyz base_z;
|
||||
cXyz base_x;
|
||||
cXyz temp_base_x;
|
||||
|
||||
mDoMtx_stack_c::YrotS(current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &base_z);
|
||||
base_z *= 1300.0f;
|
||||
|
||||
mDoMtx_stack_c::YrotS(current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&cXyz::BaseX, &base_x);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
current_pos = current.pos;
|
||||
|
||||
temp_base_x = base_x;
|
||||
temp_base_x *= (i * -2.0f + 1.0f) * 400.0f;
|
||||
|
||||
current_pos += base_z;
|
||||
current_pos += temp_base_x;
|
||||
|
||||
make_hamon2(current_pos, i_scale);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000024A4-00002CF4 .text _execute__Q29daObjAjav5Act_cFv */
|
||||
bool daObjAjav::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
static cXyz flaw_pos[] = {
|
||||
cXyz(0.0f, 0.0f, 0.0f),
|
||||
cXyz(0.0f, 0.0f, 0.0f),
|
||||
cXyz(0.0f, 40.0f, 0.0f),
|
||||
cXyz(30.0f, 30.0f, 0.0f),
|
||||
cXyz(-20.0f, 0.0f, 0.0f),
|
||||
cXyz(20.0f, 0.0f, 0.0f)
|
||||
};
|
||||
|
||||
cXyz init_disp_rate(12.0f, -10.0f, 55.0f);
|
||||
bool stone_broken = false;
|
||||
|
||||
// this bool is checked for falsehood once, set to true and then never read from again
|
||||
bool useless_bool = false;
|
||||
|
||||
csXyz rotation_speed;
|
||||
int i, cond;
|
||||
|
||||
for (i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mRockParts[i].set_se_pos(current.pos);
|
||||
}
|
||||
|
||||
switch (mActionIdx) {
|
||||
case 0:
|
||||
if (!damage_part()) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
mHintCylStts[i].Move();
|
||||
if (mHintCyls[i].ChkTgHit()) {
|
||||
if (!useless_bool) {
|
||||
mHintCylHits++;
|
||||
if (mHintCylHits >= STATUS_MAX - 1) {
|
||||
to_broken();
|
||||
mHintCylHits = 0;
|
||||
stone_broken = true;
|
||||
}
|
||||
useless_bool = true;
|
||||
}
|
||||
mHintCyls[i].ClrTgHit();
|
||||
}
|
||||
}
|
||||
if (stone_broken != true) {
|
||||
mCylStts.Move();
|
||||
if (mCyl.ChkTgHit()) {
|
||||
cond = get_rock_row();
|
||||
for (int j = get_rock_row(); j < (cond + 2); j++) {
|
||||
mRockParts[j].make_fall_rock(TRUE);
|
||||
mRockParts[j].mTimer = 0;
|
||||
mRockParts[j].mTimerTrigger = 30;
|
||||
mRockParts[j].setDrawProc(&Part_c::draw_flashing_normal);
|
||||
}
|
||||
mCyl.ClrTgHit();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||||
cond = get_rock_row();
|
||||
for (i = get_rock_row(); i < (cond + 2); i++) {
|
||||
init_disp_rate.x = 12.0f;
|
||||
if ((i & 1) == 0) {
|
||||
init_disp_rate.x *= -1.0f;
|
||||
}
|
||||
rotation_speed = daObjAjav_get_rot_speed(mSphCoOffset, mRockParts[i].mCenterPos, 0x1FF);
|
||||
mRockParts[i].fall_init(init_disp_rate, rotation_speed, 0x1FF, (s16)(cM_rnd() * 9.0f) + 7);
|
||||
mDoAud_seStart(JA_SE_OBJ_JB_STONE_BRK, &mRockParts[i].mSePos,0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
|
||||
mRockParts[i].setDrawProc(&Part_c::draw_normal);
|
||||
mRockParts[i].make_fall_rock(FALSE);
|
||||
}
|
||||
|
||||
make_shot_rock();
|
||||
|
||||
int row = get_rock_row();
|
||||
set_hamon(mRockParts[row].mRockDisplacement.y);
|
||||
|
||||
M_status++;
|
||||
if (M_status < STATUS_MAX - 1) {
|
||||
cond = get_rock_row();
|
||||
for (i = get_rock_row(); i < (cond + 2); i++) {
|
||||
mRockParts[i].mFlawPos = flaw_pos[i];
|
||||
mRockParts[i].setExeProc(&Part_c::flaw);
|
||||
}
|
||||
set_co_offset();
|
||||
mActionIdx = 2;
|
||||
} else {
|
||||
mActionIdx = 3;
|
||||
mCutsceneEndDelay = 60;
|
||||
}
|
||||
} else {
|
||||
fopAcM_orderOtherEventId(this, mEventIdx);
|
||||
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (dComIfGp_evmng_endCheck(mEventIdx)) {
|
||||
dComIfGp_event_reset();
|
||||
if (M_status < STATUS_MAX - 1) {
|
||||
mActionIdx = 0;
|
||||
} else {
|
||||
mActionIdx = 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (check_end()) {
|
||||
if (mCutsceneEndDelay == 0) {
|
||||
dComIfGp_evmng_cutEnd(dComIfGp_evmng_getMyStaffId("Ajav"));
|
||||
if (DEMO_SELECT(true, heap != NULL) && mpBgW != NULL) {
|
||||
if (mpBgW->ChkUsed()) {
|
||||
dComIfG_Bgsp()->Release(mpBgW);
|
||||
#if VERSION > VERSION_DEMO
|
||||
mpBgW = NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
on_sw(mSwNo);
|
||||
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
|
||||
mDoAud_subBgmStop();
|
||||
mActionIdx = 2;
|
||||
M_status++;
|
||||
} else {
|
||||
mCutsceneEndDelay--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
default:
|
||||
mActionIdx = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (M_status < STATUS_MAX - 1) {
|
||||
dComIfG_Ccsp()->Set(&mSph);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
for (i = 0; i < 2; i++) {
|
||||
dComIfG_Ccsp()->Set(&mHintCyls[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mRockParts[i].execute(this);
|
||||
}
|
||||
|
||||
if (mpBgW && mpBgW->ChkUsed()) {
|
||||
mpBgW->Move();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00002CF4-00002D50 .text set_se_pos__Q29daObjAjav6Part_cF4cXyz */
|
||||
void daObjAjav::Part_c::set_se_pos(cXyz i_pos) {
|
||||
mSePos = i_pos + mCenterPos;
|
||||
mSePos += mRockDisplacement;
|
||||
}
|
||||
|
||||
/* 00002D50-00002DCC .text _draw__Q29daObjAjav5Act_cFv */
|
||||
bool daObjAjav::Act_c::_draw() {
|
||||
/* Nonmatching */
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
||||
for (int i = 0; i < ARRAY_SSIZE(mRockParts); i++) {
|
||||
mRockParts[i].draw(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace daObjAjav {
|
||||
|
||||
Reference in New Issue
Block a user