mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-30 17:05:33 -04:00
1964 lines
71 KiB
C++
1964 lines
71 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_obj_movebox.cpp
|
|
//
|
|
|
|
#include "d/d_a_obj.h"
|
|
#include "d/d_bg_s_movebg_actor.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_path.h"
|
|
#include "d/d_procname.h"
|
|
#include "JSystem/JKernel/JKRHeap.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "dolphin/types.h"
|
|
#include "d/d_bg_s_gnd_chk.h"
|
|
#include "d/d_bg_s_wtr_chk.h"
|
|
#include "d/d_bg_s_lin_chk.h"
|
|
|
|
enum ECUBE_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
ECUBE_BDL_ECUBE=0x4,
|
|
|
|
/* DZB */
|
|
ECUBE_DZB_ECUBE=0x7,
|
|
};
|
|
|
|
enum HBOX2_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
HBOX2_BDL_HBOX2=0x4,
|
|
|
|
/* DZB */
|
|
HBOX2_DZB_HBOX2=0x7,
|
|
};
|
|
|
|
enum HJUMP_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
HJUMP_BDL_HBOX1=0x4,
|
|
HJUMP_BDL_HJUMP1=0x5,
|
|
HJUMP_BDL_HJUMP2=0x6,
|
|
|
|
/* DZB */
|
|
HJUMP_DZB_HBOX1=0x9,
|
|
HJUMP_DZB_HJUMP1A=0xA,
|
|
HJUMP_DZB_HJUMP1B=0xB,
|
|
HJUMP_DZB_HJUMP2=0xC,
|
|
};
|
|
|
|
enum KKIBA_00_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
KKIBA_00_BDL_KKIBA_00=0x4,
|
|
|
|
/* DZB */
|
|
KKIBA_00_DZB_KKIBA_00=0x7,
|
|
};
|
|
|
|
enum MMIRROR_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BCK */
|
|
MMIRROR_BCK_MSUSW=0x6,
|
|
|
|
/* BDLM */
|
|
MMIRROR_BDL_MMRR=0x9,
|
|
MMIRROR_BDL_MSUSW=0xA,
|
|
MMIRROR_BDL_YSSMR00=0xB,
|
|
|
|
/* BTK */
|
|
MMIRROR_BTK_MMRR=0xE,
|
|
MMIRROR_BTK_MSUSW=0xF,
|
|
MMIRROR_BTK_YSSMR00=0x10,
|
|
|
|
/* DZB */
|
|
MMIRROR_DZB_MMRR=0x13,
|
|
MMIRROR_DZB_MSUSW=0x14,
|
|
};
|
|
|
|
enum MPWRB_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
MPWRB_BDL_MPWRB=0x4,
|
|
|
|
/* DZB */
|
|
MPWRB_DZB_MPWRB=0x7,
|
|
};
|
|
|
|
enum OSIBLK_RES_FILE_ID { // IDs and indexes are synced
|
|
/* BDL */
|
|
OSIBLK_BDL_OBM_OSIHIKIBLK1=0x4,
|
|
OSIBLK_BDL_OBM_OSIHIKIBLK2=0x5,
|
|
|
|
/* DZB */
|
|
OSIBLK_DZB_OBM_OSIHIKIBLK1=0x8,
|
|
OSIBLK_DZB_OBM_OSIHIKIBLK2=0x9,
|
|
};
|
|
|
|
namespace daObjMovebox {
|
|
struct Act_c;
|
|
|
|
struct Type_Attr {
|
|
/* 0x00 */ s16 m00;
|
|
/* 0x02 */ s16 m02;
|
|
/* 0x04 */ s16 m04;
|
|
/* 0x06 */ s16 m06;
|
|
/* 0x08 */ s16 m08;
|
|
/* 0x0A */ s16 m0A;
|
|
/* 0x0C */ f32 m0C;
|
|
/* 0x10 */ f32 m10;
|
|
/* 0x14 */ f32 m14;
|
|
/* 0x18 */ f32 m18;
|
|
/* 0x1C */ f32 m1C;
|
|
/* 0x20 */ f32 m20;
|
|
/* 0x24 */ f32 m24;
|
|
/* 0x28 */ f32 m28;
|
|
/* 0x2C */ f32 m2C;
|
|
/* 0x30 */ f32 m30;
|
|
/* 0x34 */ f32 m34;
|
|
/* 0x38 */ s16 m38;
|
|
/* 0x3C */ f32 m3C;
|
|
/* 0x40 */ f32 m40;
|
|
/* 0x44 */ f32 m44;
|
|
/* 0x48 */ f32 m48;
|
|
/* 0x4C */ f32 m4C;
|
|
/* 0x50 */ f32 m50;
|
|
/* 0x54 */ f32 m54;
|
|
/* 0x58 */ int mModelFileIndex;
|
|
/* 0x5C */ int mDZBFileIndex;
|
|
/* 0x60 */ int mDZBHeapSize;
|
|
/* 0x64 */ f32 m64;
|
|
/* 0x68 */ f32 m68;
|
|
/* 0x6C */ f32 m6C;
|
|
/* 0x70 */ f32 m70;
|
|
/* 0x74 */ f32 m74;
|
|
/* 0x78 */ u32 mMoveSE;
|
|
/* 0x7C */ u32 mCantMoveSE;
|
|
/* 0x80 */ u32 mNormalFallSE;
|
|
/* 0x84 */ u32 mWaterFallSE;
|
|
/* 0x88 */ u32 mMagmaFallSE;
|
|
/* 0x8C */ s16 mCullMinX;
|
|
/* 0x8E */ s16 mCullMinY;
|
|
/* 0x90 */ s16 mCullMinZ;
|
|
/* 0x92 */ s16 mCullMaxX;
|
|
/* 0x94 */ s16 mCullMaxY;
|
|
/* 0x96 */ s16 mCullMaxZ;
|
|
/* 0x98 */ bool mbUseBGTevType;
|
|
/* 0x99 */ bool mbCastsShadow;
|
|
/* 0x9A */ bool m9A;
|
|
}; // Size: 0x9C
|
|
|
|
struct BgcSrc_c {
|
|
/* 0x00 */ f32 m00; // z
|
|
/* 0x04 */ f32 m04; // x
|
|
/* 0x08 */ f32 m08; // z
|
|
/* 0x0C */ f32 m0C; // x
|
|
};
|
|
|
|
struct Bgc_c {
|
|
public:
|
|
enum State_e {
|
|
BgcState_UNK01 = 0x01,
|
|
BgcState_UNK02 = 0x02,
|
|
BgcState_UNK04 = 0x04,
|
|
BgcState_UNK08 = 0x08,
|
|
BgcState_UNK10 = 0x10,
|
|
BgcState_UNK20 = 0x20,
|
|
};
|
|
|
|
Bgc_c();
|
|
~Bgc_c();
|
|
void gnd_pos(const Act_c*, const BgcSrc_c*, int, f32);
|
|
void wrt_pos(const cXyz&);
|
|
void wall_pos(const Act_c*, const BgcSrc_c*, int, s16, f32);
|
|
void proc_vertical(Act_c*);
|
|
bool chk_wall_pre(const Act_c*, const BgcSrc_c*, int, s16);
|
|
bool chk_wall_touch(const Act_c*, const BgcSrc_c*, s16);
|
|
bool chk_wall_touch2(const Act_c*, const BgcSrc_c*, int, s16);
|
|
|
|
public:
|
|
/* 0x000 */ f32 m000[23];
|
|
/* 0x05C */ int m05C;
|
|
/* 0x060 */ f32 m060;
|
|
/* 0x064 */ cXyz m064[23];
|
|
/* 0x178 */ int m178;
|
|
/* 0x17C */ f32 m17C;
|
|
/* 0x180 */ State_e mStateFlags;
|
|
|
|
static dBgS_ObjGndChk M_gnd_work[23];
|
|
static dBgS_WtrChk M_wrt_work;
|
|
static dBgS_ObjLinChk M_wall_work[23];
|
|
static const BgcSrc_c M_lin5[5];
|
|
static const BgcSrc_c M_lin20[23];
|
|
}; // Size: 0x184
|
|
|
|
class EffSmokeCB : public dPa_smokeEcallBack {
|
|
public:
|
|
EffSmokeCB() {}
|
|
virtual ~EffSmokeCB() {}
|
|
|
|
public:
|
|
/* 0x20 */ u8 field_0x20[0x34 - 0x20];
|
|
}; // Size: 0x34
|
|
|
|
struct Act_c : public dBgS_MoveBgActor {
|
|
public:
|
|
enum Type {
|
|
TYPE_BREAKABLE_WOODEN_CRATE = 0x0, // Actor names: Kkiba or DKkiba
|
|
TYPE_BLACK_BOX = 0x1, // Actor names: osiBLK0 or DBLK0
|
|
TYPE_BLACK_BOX_WITH_STATUE = 0x2, // Actor names: osiBLK1 or DBLK1
|
|
TYPE_BIG_BLACK_BOX = 0x3, // Actor names: MpwrB
|
|
TYPE_WOODEN_CRATE = 0x4, // Actor names: (N/A)
|
|
TYPE_GOLDEN_CRATE = 0x5, // Actor names: Hbox2
|
|
TYPE_METAL_BOX = 0x6, // Actor names: Hbox1
|
|
TYPE_METAL_BOX_WITH_SPRING = 0x7, // Actor names: Hjump1
|
|
TYPE_WOODEN_CRATE_2 = 0x8, // Actor names: Hseki2
|
|
TYPE_WOODEN_CRATE_3 = 0x9, // Actor names: Hseki7
|
|
TYPE_MIRROR = 0xA, // Actor names: Mmrr
|
|
TYPE_BLACK_BOX_2 = 0xB, // Actor names: MkieBB
|
|
TYPE_MOSSY_BLACK_BOX = 0xC, // Actor names: Ecube
|
|
};
|
|
|
|
enum Mode {
|
|
MODE_WAIT = 0x0,
|
|
MODE_WALK = 0x1,
|
|
MODE_AFLOAT = 0x2,
|
|
};
|
|
|
|
enum Prm_e {
|
|
PRM_TYPE_W = 0x04,
|
|
PRM_TYPE_S = 0x18,
|
|
|
|
PRM_SWSAVE_W = 0x01,
|
|
PRM_SWSAVE_S = 0x1E,
|
|
|
|
PRM_SWSAVE1_W = 0x08,
|
|
PRM_SWSAVE1_S = 0x08,
|
|
|
|
PRM_ITEMNO_W = 0x06,
|
|
PRM_ITEMNO_S = 0x00,
|
|
|
|
PRM_ITEMSAVE_W = 0x07,
|
|
PRM_ITEMSAVE_S = 0x10,
|
|
|
|
PRM_BUOY_W = 0x01,
|
|
PRM_BUOY_S = 0x1F,
|
|
};
|
|
|
|
typedef void (Act_c::*ModeFunc)();
|
|
|
|
inline s32 Mthd_Create();
|
|
inline BOOL Mthd_Delete();
|
|
|
|
s32 prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); }
|
|
s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
|
|
s32 prm_get_swSave1() const;
|
|
s32 prmZ_get_swSave2() const { return mType == TYPE_BLACK_BOX_2 ? 0xFF : (u8)(mPrmZ >> 8); }
|
|
s32 prmZ_get_swSave2_MkieB() const { return mType == TYPE_BLACK_BOX_2 ? (u8)(mPrmZ >> 8) : 0xFF; }
|
|
s32 prmZ_get_pathId() const { return mType == TYPE_BLACK_BOX_2 ? 0xFF : (mPrmZ & 0x00FF) >> 0; }
|
|
s32 prmX_get_evId() const { return (mPrmX & 0x00FF) >> 0; }
|
|
s32 prm_get_itemNo() const { return daObj::PrmAbstract(this, PRM_ITEMNO_W, PRM_ITEMNO_S); }
|
|
s32 prm_get_itemSave() const { return daObj::PrmAbstract(this, PRM_ITEMSAVE_W, PRM_ITEMSAVE_S); }
|
|
s32 prm_get_buoy() const { return daObj::PrmAbstract(this, PRM_BUOY_W, PRM_BUOY_S); }
|
|
s32 prm_get_dmy() const; // Unused?
|
|
|
|
BOOL is_switch1() const { return fopAcM_isSwitch((Act_c*)this, prm_get_swSave1()); };
|
|
BOOL is_switch2() const { return fopAcM_isSwitch((Act_c*)this, prmZ_get_swSave2()); };
|
|
void on_switch1() const { fopAcM_onSwitch((Act_c*)this, prm_get_swSave1()); };
|
|
void on_switch2() const { fopAcM_onSwitch((Act_c*)this, prmZ_get_swSave2()); };
|
|
void off_switch1() const { fopAcM_offSwitch((Act_c*)this, prm_get_swSave1()); };
|
|
void off_switch2() const { fopAcM_offSwitch((Act_c*)this, prmZ_get_swSave2()); };
|
|
|
|
void mode_proc_call() {
|
|
static ModeFunc mode_proc[] = {
|
|
&mode_wait,
|
|
&mode_walk,
|
|
&mode_afl,
|
|
};
|
|
(this->*mode_proc[mMode])();
|
|
}
|
|
|
|
void prmZ_init();
|
|
void prmX_init();
|
|
const Type_Attr* attr() const; // TODO weak?
|
|
inline const Type_Attr* i_attr() const { return &M_attr[mType]; } // TODO weak?
|
|
void set_mtx();
|
|
void init_mtx();
|
|
void path_init();
|
|
void path_save();
|
|
int CreateHeap();
|
|
static void RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*);
|
|
static fopAc_ac_c* PPCallBack(fopAc_ac_c*, fopAc_ac_c*, s16, dBgW::PushPullLabel);
|
|
int Create();
|
|
void afl_sway();
|
|
void check_to_walk();
|
|
void clr_moment_cnt();
|
|
bool chk_appear() const;
|
|
void eff_set_slip_smoke_pos();
|
|
void eff_smoke_slip_start();
|
|
void eff_smoke_slip_end();
|
|
void eff_smoke_slip_remove();
|
|
void mode_wait_init();
|
|
void mode_wait();
|
|
void mode_walk_init();
|
|
void mode_walk();
|
|
void mode_afl_init();
|
|
void mode_afl();
|
|
void make_item();
|
|
void eff_break();
|
|
void sound_break();
|
|
void sound_slip();
|
|
void sound_limit();
|
|
void sound_land();
|
|
void vib_land();
|
|
void eff_land_smoke();
|
|
int Execute(Mtx**);
|
|
int Draw();
|
|
int Delete();
|
|
|
|
public:
|
|
/* 0x2C8 */ request_of_phase_process_class mPhs;
|
|
/* 0x2D0 */ Mtx mMtx;
|
|
/* 0x300 */ J3DModel* mpModel;
|
|
/* 0x304 */ int mMode;
|
|
/* 0x308 */ dCcD_Stts mStts;
|
|
/* 0x344 */ dCcD_Cyl mCyl;
|
|
/* 0x474 */ Bgc_c mBgc;
|
|
/* 0x5F8 */ s32 mType;
|
|
/* 0x5FC */ u16 mPrmZ;
|
|
/* 0x5FE */ u16 mPrmX;
|
|
/* 0x600 */ dPath* mpPath;
|
|
/* 0x604 */ s16 m604;
|
|
/* 0x606 */ u8 m606[0x608 - 0x606];
|
|
/* 0x608 */ f32 m608;
|
|
/* 0x60C */ f32 m60C;
|
|
/* 0x610 */ f32 m610;
|
|
/* 0x614 */ f32 m614;
|
|
/* 0x618 */ f32 m618;
|
|
/* 0x61C */ f32 m61C;
|
|
/* 0x620 */ f32 m620;
|
|
/* 0x624 */ f32 m624;
|
|
/* 0x628 */ int m628;
|
|
/* 0x62C */ int m62C;
|
|
/* 0x630 */ f32 m630;
|
|
/* 0x634 */ int m634;
|
|
/* 0x638 */ u32 mPPLabel;
|
|
/* 0x63C */ s16 mMomentCnt[4];
|
|
/* 0x644 */ s16 m644;
|
|
/* 0x646 */ s16 m646;
|
|
/* 0x648 */ s16 m648;
|
|
/* 0x64A */ bool m64A;
|
|
/* 0x64B */ s8 mReverb;
|
|
/* 0x64C */ bool mbShouldAppear;
|
|
/* 0x64D */ bool mbPrmZInitialized;
|
|
/* 0x64E */ bool mbPrmXInitialized;
|
|
/* 0x64F */ bool m64F;
|
|
/* 0x650 */ EffSmokeCB mSmokeCbs[2];
|
|
/* 0x6B8 */ u32 mChildProcId;
|
|
/* 0x6BC */ int m6BC;
|
|
|
|
static const char* const M_arcname[13];
|
|
static const dCcD_SrcCyl M_cyl_src;
|
|
static const Type_Attr M_attr[13];
|
|
};
|
|
|
|
STATIC_ASSERT(sizeof(Act_c) == 0x6C0);
|
|
|
|
u8 dummy1[0x4C];
|
|
|
|
dBgS_ObjGndChk Bgc_c::M_gnd_work[23];
|
|
dBgS_WtrChk Bgc_c::M_wrt_work;
|
|
dBgS_ObjLinChk Bgc_c::M_wall_work[23];
|
|
|
|
const BgcSrc_c Bgc_c::M_lin5[5] = {
|
|
// TODO
|
|
{0.0f, 0.0f, 0.0f, 0.0f},
|
|
{-0.5f, -0.5f, 1.0f, 1.0f},
|
|
{0.5f, -0.5f, -1.0f, 1.0f},
|
|
{0.5f, 0.5f, -1.0f, -1.0f},
|
|
{-0.5f, 0.5f, 1.0f, -1.0f},
|
|
};
|
|
|
|
const BgcSrc_c Bgc_c::M_lin20[23] = {
|
|
// TODO
|
|
{0.0f, 0.0f, 0.0f, 0.0f},
|
|
{-0.25f, -0.25f, 0.0f, 0.0f},
|
|
{-0.5f, -0.5f, 1.0f, 1.0f},
|
|
{0.0f, -0.5f, -1.0f, 1.0f},
|
|
{0.0f, 0.0f, -1.0f, -1.0f},
|
|
{-0.5f, 0.0f, 1.0f, -1.0f},
|
|
{0.25f, -0.25f, 0.0f, 0.0f},
|
|
{0.0f, -0.5f, 1.0f, 1.0f},
|
|
{0.5f, -0.5f, -1.0f, 1.0f},
|
|
{0.5f, 0.0f, -1.0f, -1.0f},
|
|
{0.0f, 0.0f, 1.0f, -1.0f},
|
|
{0.25f, 0.25f, 0.0f, 0.0f},
|
|
{0.0f, 0.0f, 1.0f, 1.0f},
|
|
{0.5f, 0.0f, -1.0f, 1.0f},
|
|
{0.5f, 0.5f, -1.0f, -1.0f},
|
|
{0.0f, 0.5f, 1.0f, -1.0f},
|
|
{-0.25f, 0.25f, 0.0f, 0.0f},
|
|
{-0.5f, 0.0f, 1.0f, 1.0f},
|
|
{0.0f, 0.0f, -1.0f, 1.0f},
|
|
{0.0f, 0.5f, -1.0f, -1.0f},
|
|
{-0.5f, 0.5f, 1.0f, -1.0f},
|
|
{-0.75f, 0.25f, 0.0f, 0.0f},
|
|
{-0.75f, -0.25f, 0.0f, 0.0f},
|
|
};
|
|
|
|
s32 Act_c::Mthd_Create() {
|
|
fopAcM_SetupActor(this, Act_c);
|
|
|
|
s32 phase_state;
|
|
mType = prm_get_type();
|
|
phase_state = cPhs_ERROR_e;
|
|
prmX_init();
|
|
prmZ_init();
|
|
|
|
mbShouldAppear = chk_appear();
|
|
if (mbShouldAppear) {
|
|
phase_state = dComIfG_resLoad(&mPhs, M_arcname[mType]);
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
u32 heapSize = i_attr()->mDZBHeapSize;
|
|
path_init();
|
|
phase_state = MoveBGCreate(M_arcname[mType], i_attr()->mDZBFileIndex, dBgS_MoveBGProc_Trans, heapSize);
|
|
JUT_ASSERT(1998, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
|
|
}
|
|
}
|
|
|
|
return phase_state;
|
|
}
|
|
|
|
BOOL Act_c::Mthd_Delete() {
|
|
s32 result = MoveBGDelete();
|
|
if (mbShouldAppear) {
|
|
dComIfG_resDelete(&mPhs, M_arcname[mType]);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/* 000000EC-000001B0 .text __ct__Q212daObjMovebox5Bgc_cFv */
|
|
Bgc_c::Bgc_c() {
|
|
for (int i = 0; i < ARRAY_SIZE(m000); i++) {
|
|
m000[i] = 0.0f;
|
|
m064[i] = cXyz::Zero;
|
|
}
|
|
m05C = -1;
|
|
m178 = -1;
|
|
m17C = FLOAT_MAX;
|
|
m060 = 0.0f;
|
|
mStateFlags = (State_e)0;
|
|
}
|
|
|
|
/* 000001F0-000003A4 .text gnd_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cif */
|
|
void Bgc_c::gnd_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int param_3, f32 param_4) {
|
|
f32 tempz;
|
|
f32 temp3 = -1000000000.0f;
|
|
|
|
mDoMtx_stack_c::transS(movebox->current.pos);
|
|
mDoMtx_stack_c::YrotM(movebox->orig.angle.y);
|
|
m05C = -1;
|
|
|
|
for (int i = 0; i < param_3; i++, bgcSrc++) {
|
|
tempz = bgcSrc->m08 + bgcSrc->m00 * movebox->attr()->m70;
|
|
f32 tempy = param_4;
|
|
f32 tempx = bgcSrc->m0C + bgcSrc->m04 * movebox->attr()->m70;
|
|
cXyz temp_14(tempx, tempy, tempz);
|
|
cXyz temp_08;
|
|
mDoMtx_stack_c::multVec(&temp_14, &temp_08);
|
|
M_gnd_work[i].SetPos(&temp_08);
|
|
M_gnd_work[i].SetActorPid(movebox->mBase.mBsPcId);
|
|
m000[i] = dComIfG_Bgsp()->GroundCross(&M_gnd_work[i]);
|
|
if (m000[i] > temp3) {
|
|
fopAc_ac_c* temp = dComIfG_Bgsp()->GetActorPointer(M_gnd_work[i].GetBgIndex());
|
|
if (!(temp && fopAcM_GetName(temp) == PROC_Obj_Movebox && ((Act_c*)temp)->mMode == Act_c::MODE_AFLOAT)) {
|
|
temp3 = m000[i];
|
|
m05C = i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000003A4-00000474 .text wrt_pos__Q212daObjMovebox5Bgc_cFRC4cXyz */
|
|
void Bgc_c::wrt_pos(const cXyz& pos) {
|
|
cXyz groundPos(pos);
|
|
f32 roofY = pos.y + 400.0f;
|
|
groundPos.y -= 100.0f;
|
|
M_wrt_work.Set(groundPos, roofY);
|
|
if (dComIfG_Bgsp()->SplGrpChk(&M_wrt_work)) {
|
|
m060 = M_wrt_work.GetHeight();
|
|
cLib_onBit(mStateFlags, BgcState_UNK08);
|
|
if (m060 > pos.y) {
|
|
cLib_onBit(mStateFlags, BgcState_UNK10);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000474-00000748 .text wall_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cisf */
|
|
void Bgc_c::wall_pos(const Act_c* movebox, const BgcSrc_c* bgcSrc, int param_3, s16 param_4, f32 param_5) {
|
|
s16 angle;
|
|
cXyz temp_44;
|
|
cXyz temp_38;
|
|
cXyz temp_2c;
|
|
cXyz temp_20;
|
|
|
|
angle = movebox->orig.angle.y + param_4;
|
|
m178 = -1;
|
|
m17C = FLOAT_MAX;
|
|
mDoMtx_stack_c::YrotS((s16)angle);
|
|
mDoMtx_stack_c::XrotM(0x4000);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseY, &temp_20);
|
|
temp_20 *= param_5 + movebox->attr()->m70 * 0.5f;
|
|
|
|
for (int i = 0; i < param_3; i++, bgcSrc++) {
|
|
mDoMtx_stack_c::XrotS(0x4000);
|
|
cXyz temp_14(bgcSrc->m0C, 0.0f, bgcSrc->m08);
|
|
mDoMtx_stack_c::multVec(&temp_14, &temp_2c);
|
|
mDoMtx_stack_c::YrotS((s16)angle);
|
|
mDoMtx_stack_c::transM(temp_2c);
|
|
mDoMtx_stack_c::scaleM(movebox->attr()->m70, movebox->attr()->m64, movebox->attr()->m70);
|
|
mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f);
|
|
mDoMtx_stack_c::XrotM(0x4000);
|
|
temp_14.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
|
|
mDoMtx_stack_c::multVec(&temp_14, &temp_44);
|
|
temp_44 += movebox->current.pos;
|
|
temp_38 = temp_44 + temp_20;
|
|
M_wall_work[i].Set(&temp_44, &temp_38, (fopAc_ac_c*)movebox);
|
|
M_wall_work[i].SetActorPid(movebox->mBase.mBsPcId);
|
|
if (dComIfG_Bgsp()->LineCross(&M_wall_work[i])) {
|
|
m064[i] = M_wall_work[i].i_GetCross();
|
|
f32 dist = temp_44.abs2(m064[i]);
|
|
if (dist < m17C) {
|
|
m17C = dist;
|
|
m178 = i;
|
|
}
|
|
} else {
|
|
m064[i] = cXyz::Zero;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000748-000008E8 .text proc_vertical__Q212daObjMovebox5Bgc_cFPQ212daObjMovebox5Act_c */
|
|
void Bgc_c::proc_vertical(Act_c* movebox) {
|
|
State_e prevStateFlags = mStateFlags;
|
|
mStateFlags = (State_e)0;
|
|
|
|
gnd_pos(movebox, movebox->attr()->m9A ? &M_lin20[0] : &M_lin5[0], movebox->attr()->m9A ? 0x15 : 0x5, 100.0f);
|
|
|
|
if (m05C >= 0) {
|
|
if (m000[m05C] > movebox->current.pos.y) {
|
|
movebox->current.pos.y = m000[m05C];
|
|
cLib_onBit(mStateFlags, BgcState_UNK01);
|
|
movebox->speed.y = 0.0f;
|
|
}
|
|
}
|
|
|
|
wrt_pos(movebox->current.pos);
|
|
|
|
if (cLib_checkBit(mStateFlags, BgcState_UNK08) && m060 > movebox->current.pos.y) {
|
|
cLib_onBit(mStateFlags, BgcState_UNK10);
|
|
}
|
|
if (!cLib_checkBit(mStateFlags, BgcState_UNK01) && cLib_checkBit(prevStateFlags, BgcState_UNK01)) {
|
|
cLib_onBit(mStateFlags, BgcState_UNK02);
|
|
movebox->speed.y = movebox->attr()->m20;
|
|
}
|
|
if (cLib_checkBit(mStateFlags, BgcState_UNK01) && !cLib_checkBit(prevStateFlags, BgcState_UNK01)) {
|
|
cLib_onBit(mStateFlags, BgcState_UNK04);
|
|
}
|
|
if (cLib_checkBit(mStateFlags, BgcState_UNK10) && !cLib_checkBit(prevStateFlags, BgcState_UNK10)) {
|
|
cLib_onBit(mStateFlags, BgcState_UNK20);
|
|
}
|
|
if (cLib_checkBit(mStateFlags, BgcState_UNK01) && m05C >= 0) {
|
|
dComIfG_Bgsp()->RideCallBack(M_gnd_work[m05C], movebox);
|
|
}
|
|
}
|
|
|
|
/* 000008E8-00000928 .text chk_wall_pre__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
|
|
bool Bgc_c::chk_wall_pre(const Act_c* movebox, const BgcSrc_c* bgcSrc, int param_3, s16 param_4) {
|
|
wall_pos(movebox, bgcSrc, param_3, param_4, 74.0f);
|
|
return m178 >= 0;
|
|
}
|
|
|
|
/* 00000928-00000CCC .text chk_wall_touch__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cs */
|
|
bool Bgc_c::chk_wall_touch(const Act_c* movebox, const BgcSrc_c* bgcSrc, s16 param_3) {
|
|
static dBgS_ObjLinChk touch_work;
|
|
cXyz startPos;
|
|
cXyz endPos;
|
|
cXyz offset;
|
|
cXyz temp_20;
|
|
cXyz direction;
|
|
|
|
s16 angle = movebox->orig.angle.y + param_3;
|
|
mDoMtx_stack_c::YrotS((s16)angle);
|
|
mDoMtx_stack_c::XrotM(0x4000);
|
|
offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseY, &direction);
|
|
direction *= 10.0f + movebox->attr()->m70 * 0.5f;
|
|
|
|
mDoMtx_stack_c::XrotM(0x4000);
|
|
offset.set(bgcSrc->m0C, 0.0f, bgcSrc->m08);
|
|
mDoMtx_stack_c::multVec(&offset, &temp_20);
|
|
mDoMtx_stack_c::YrotS((s16)angle);
|
|
mDoMtx_stack_c::transM(temp_20);
|
|
mDoMtx_stack_c::scaleM(movebox->attr()->m70, movebox->attr()->m64, movebox->attr()->m70);
|
|
mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f);
|
|
mDoMtx_stack_c::XrotM(0x4000);
|
|
offset.set(bgcSrc->m04, 0.0f, bgcSrc->m00);
|
|
mDoMtx_stack_c::multVec(&offset, &startPos);
|
|
startPos += movebox->current.pos;
|
|
endPos = startPos + direction;
|
|
|
|
touch_work.SetActorPid(movebox->mBase.mBsPcId);
|
|
touch_work.Set(&startPos, &endPos, (Act_c*)movebox);
|
|
return dComIfG_Bgsp()->LineCross(&touch_work);
|
|
}
|
|
|
|
/* 00001258-000012E0 .text chk_wall_touch2__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */
|
|
bool Bgc_c::chk_wall_touch2(const Act_c* movebox, const BgcSrc_c* bgcSrc, int param_3, s16 param_4) {
|
|
bool touch = false;
|
|
for (int i = 0; i < param_3; i++) {
|
|
if (chk_wall_touch(movebox, &bgcSrc[i], param_4)) {
|
|
touch = true;
|
|
break;
|
|
}
|
|
}
|
|
return touch;
|
|
}
|
|
|
|
const char* const Act_c::M_arcname[13] = {
|
|
"Kkiba_00",
|
|
"Osiblk",
|
|
"Osiblk",
|
|
"MpwrB",
|
|
"Kkiba_00",
|
|
"Hbox2",
|
|
"Hjump",
|
|
"Hjump",
|
|
"Kkiba_00",
|
|
"Kkiba_00",
|
|
"Mmirror",
|
|
"Osiblk",
|
|
"Ecube",
|
|
};
|
|
|
|
const dCcD_SrcCyl Act_c::M_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_BOMB,
|
|
/* SrcObjTg SPrm */ 0x09,
|
|
/* SrcObjCo SPrm */ 0x79,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt GFlag */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg GFlag */ 0,
|
|
/* SrcGObjCo GFlag */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 75.0f,
|
|
/* Height */ 150.0f,
|
|
},
|
|
};
|
|
|
|
const Type_Attr Act_c::M_attr[13] = {
|
|
// TYPE_BREAKABLE_WOODEN_CRATE
|
|
// Arcname: Kkiba_00
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ KKIBA_00_BDL_KKIBA_00,
|
|
/* mDZBFileIndex */ KKIBA_00_DZB_KKIBA_00,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_BLACK_BOX
|
|
// Arcname: Osiblk
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ OSIBLK_BDL_OBM_OSIHIKIBLK1,
|
|
/* mDZBFileIndex */ OSIBLK_DZB_OBM_OSIHIKIBLK1,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
|
|
},
|
|
// TYPE_BLACK_BOX_WITH_STATUE
|
|
// Arcname: Osiblk
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ OSIBLK_BDL_OBM_OSIHIKIBLK2,
|
|
/* mDZBFileIndex */ OSIBLK_DZB_OBM_OSIHIKIBLK2,
|
|
/* mDZBHeapSize */ 0x1560,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 300.0f,
|
|
/* m6C */ 1.0f/300.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 295,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_BIG_BLACK_BOX
|
|
// Arcname: MpwrB
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 170.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 3.6f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ MPWRB_BDL_MPWRB,
|
|
/* mDZBFileIndex */ MPWRB_DZB_MPWRB,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 300.0f,
|
|
/* m68 */ 300.0f,
|
|
/* m6C */ 1.0f/300.0f,
|
|
/* m70 */ 300.0f,
|
|
/* m74 */ 1.0f/300.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -180,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -180,
|
|
/* mCullMaxX */ 180,
|
|
/* mCullMaxY */ 301,
|
|
/* mCullMaxZ */ 180,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ true,
|
|
},
|
|
// TYPE_WOODEN_CRATE
|
|
// Arcname: Kkiba_00
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ KKIBA_00_BDL_KKIBA_00,
|
|
/* mDZBFileIndex */ KKIBA_00_DZB_KKIBA_00,
|
|
/* mDZBHeapSize */ 0x1620,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_GOLDEN_CRATE
|
|
// Arcname: Hbox2
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ HBOX2_BDL_HBOX2,
|
|
/* mDZBFileIndex */ HBOX2_DZB_HBOX2,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_METAL_BOX
|
|
// Arcname: Hjump
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ HJUMP_BDL_HBOX1,
|
|
/* mDZBFileIndex */ HJUMP_DZB_HBOX1,
|
|
/* mDZBHeapSize */ 0x7E0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_METAL_BOX_WITH_SPRING
|
|
// Arcname: Hjump
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ -1,
|
|
/* mDZBFileIndex */ HJUMP_DZB_HJUMP1A,
|
|
/* mDZBHeapSize */ 0x320,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 300.0f,
|
|
/* m6C */ 1.0f/300.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 200,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_WOODEN_CRATE_2
|
|
// Arcname: Kkiba_00
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ KKIBA_00_BDL_KKIBA_00,
|
|
/* mDZBFileIndex */ KKIBA_00_DZB_KKIBA_00,
|
|
/* mDZBHeapSize */ 0x1620,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_WOODEN_CRATE_3
|
|
// Arcname: Kkiba_00
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -3.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 3.9f,
|
|
/* m2C */ -0.39f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ KKIBA_00_BDL_KKIBA_00,
|
|
/* mDZBFileIndex */ KKIBA_00_DZB_KKIBA_00,
|
|
/* mDZBHeapSize */ 0x1620,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_WBLOCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_WBLOCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_WBOX_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_M,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_M,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_MIRROR
|
|
// Arcname: Mmirror
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 170.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ -1,
|
|
/* mDZBFileIndex */ MMIRROR_DZB_MMRR,
|
|
/* mDZBHeapSize */ 0xD40,
|
|
/* m64 */ 300.0f,
|
|
/* m68 */ 450.0f,
|
|
/* m6C */ 1.0f/450.0f,
|
|
/* m70 */ 300.0f,
|
|
/* m74 */ 1.0f/300.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -150,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -150,
|
|
/* mCullMaxX */ 150,
|
|
/* mCullMaxY */ 681,
|
|
/* mCullMaxZ */ 150,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ true,
|
|
},
|
|
// TYPE_BLACK_BOX_2
|
|
// Arcname: Osiblk
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ OSIBLK_BDL_OBM_OSIHIKIBLK1,
|
|
/* mDZBFileIndex */ OSIBLK_DZB_OBM_OSIHIKIBLK1,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 350.0f,
|
|
/* m6C */ 1.0f/350.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ false,
|
|
/* mbCastsShadow */ false,
|
|
/* m9A */ false,
|
|
},
|
|
// TYPE_MOSSY_BLACK_BOX
|
|
// Arcname: Ecube
|
|
{
|
|
/* m00 */ 4,
|
|
/* m02 */ 4,
|
|
/* m04 */ 20,
|
|
/* m06 */ 4,
|
|
/* m08 */ 4,
|
|
/* m0A */ 20,
|
|
/* m0C */ 75.0f,
|
|
/* m10 */ 90.0f,
|
|
/* m14 */ -5.0f,
|
|
/* m18 */ 0.005f,
|
|
/* m1C */ 0.001f,
|
|
/* m20 */ 0.0f,
|
|
/* m24 */ 1.8f,
|
|
/* m28 */ 4.5f,
|
|
/* m2C */ -0.5f,
|
|
/* m30 */ -0.2f,
|
|
/* m34 */ 0.02f,
|
|
/* m38 */ 1000,
|
|
/* m3C */ 0.04f,
|
|
/* m40 */ 0.013f,
|
|
/* m44 */ 0.15f,
|
|
/* m48 */ 0.1f,
|
|
/* m4C */ 0.1f,
|
|
/* m50 */ 0.06f,
|
|
/* m54 */ 0.075f,
|
|
/* mModelFileIndex */ ECUBE_BDL_ECUBE,
|
|
/* mDZBFileIndex */ ECUBE_DZB_ECUBE,
|
|
/* mDZBHeapSize */ 0x8A0,
|
|
/* m64 */ 150.0f,
|
|
/* m68 */ 150.0f,
|
|
/* m6C */ 1.0f/150.0f,
|
|
/* m70 */ 150.0f,
|
|
/* m74 */ 1.0f/150.0f,
|
|
/* mMoveSE */ JA_SE_LK_MOVE_ROCK,
|
|
/* mCantMoveSE */ JA_SE_LK_MOVE_ROCK_LIMIT,
|
|
/* mNormalFallSE */ JA_SE_OBJ_BLOCK_FALL_NORMAL,
|
|
/* mWaterFallSE */ JA_SE_OBJ_FALL_WATER_L,
|
|
/* mMagmaFallSE */ JA_SE_OBJ_FALL_MAGMA_L,
|
|
/* mCullMinX */ -90,
|
|
/* mCullMinY */ -1,
|
|
/* mCullMinZ */ -90,
|
|
/* mCullMaxX */ 90,
|
|
/* mCullMaxY */ 151,
|
|
/* mCullMaxZ */ 90,
|
|
/* mbUseBGTevType */ true,
|
|
/* mbCastsShadow */ true,
|
|
/* m9A */ false,
|
|
},
|
|
};
|
|
|
|
/* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */
|
|
s32 Act_c::prm_get_swSave1() const {
|
|
return daObj::PrmAbstract(this, PRM_SWSAVE1_W, PRM_SWSAVE1_S);
|
|
}
|
|
|
|
/* 00001308-00001380 .text prmZ_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::prmZ_init() {
|
|
if (mbPrmZInitialized) {
|
|
return;
|
|
}
|
|
mbPrmZInitialized = true;
|
|
|
|
s32 switchEnablesSpawn = prm_get_swSave();
|
|
if (switchEnablesSpawn) {
|
|
// The appearing/disappearing type of box does not take pathId or swSave2 params.
|
|
mPrmZ = 0xFFFF;
|
|
} else {
|
|
mPrmZ = orig.angle.z;
|
|
}
|
|
|
|
orig.angle.z = 0;
|
|
current.angle.z = 0;
|
|
shape_angle.z = 0;
|
|
}
|
|
|
|
/* 00001380-000013B0 .text prmX_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::prmX_init() {
|
|
if (!mbPrmXInitialized) {
|
|
mPrmX = orig.angle.x;
|
|
mbPrmXInitialized = true;
|
|
}
|
|
|
|
orig.angle.x = 0;
|
|
current.angle.x = 0;
|
|
shape_angle.x = 0;
|
|
}
|
|
|
|
/* 000013B0-000013C8 .text attr__Q212daObjMovebox5Act_cCFv */
|
|
const Type_Attr* Act_c::attr() const {
|
|
return &M_attr[mType];
|
|
}
|
|
|
|
/* 000013C8-00001674 .text set_mtx__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::set_mtx() {
|
|
/* Nonmatching */
|
|
cXyz temp_40;
|
|
Quaternion temp_30;
|
|
Mtx temp4;
|
|
Vec temp5;
|
|
|
|
bool isFloating = mMode == MODE_AFLOAT;
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
if (isFloating) {
|
|
temp_40.set(m614, 1.0f, m618);
|
|
mDoMtx_stack_c::transM(0.0f, m624, 0.0f);
|
|
daObj::quat_rotBaseY(&temp_30, temp_40);
|
|
mDoMtx_stack_c::quatM(&temp_30);
|
|
}
|
|
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
if (isFloating) {
|
|
mDoMtx_stack_c::transM(0.0f, -m624, 0.0f);
|
|
}
|
|
|
|
if (mpModel) {
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
MTXCopy(mDoMtx_stack_c::get(), mMtx);
|
|
|
|
fopAc_ac_c* buoy;
|
|
if (mChildProcId != -1 && fopAcM_SearchByID(mChildProcId, &buoy)) {
|
|
if (mType == TYPE_METAL_BOX_WITH_SPRING) {
|
|
if (buoy->current.pos.abs2(current.pos) < 0.0001f) {
|
|
buoy->current.pos = current.pos;
|
|
// TODO: child actor members
|
|
}
|
|
} else if (mType == TYPE_MIRROR) {
|
|
if (buoy->current.pos.abs2(current.pos) < 0.0001f) {
|
|
buoy->current.pos = current.pos;
|
|
// TODO: child actor members
|
|
}
|
|
} else if (mType == TYPE_BLACK_BOX_2) {
|
|
cXyz temp_24(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
if (buoy->current.pos.abs2(temp_24) < 0.0001f) {
|
|
buoy->current.pos = current.pos;
|
|
// TODO: child actor members
|
|
}
|
|
} else {
|
|
cXyz temp_18(0.0f, i_attr()->m68 - 5.0f, 0.0f);
|
|
cXyz temp_0C;
|
|
mDoMtx_stack_c::multVecSR(&temp_18, &temp_0C);
|
|
mDoMtx_stack_c::now[0][3] += temp_0C.x;
|
|
mDoMtx_stack_c::now[1][3] += temp_0C.y;
|
|
mDoMtx_stack_c::now[2][3] += temp_0C.z;
|
|
mDoMtx_stack_c::copy(temp4);
|
|
// TODO: child actor members
|
|
}
|
|
} else {
|
|
mChildProcId = -1;
|
|
}
|
|
}
|
|
|
|
/* 00001674-000016B8 .text init_mtx__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::init_mtx() {
|
|
if (mpModel) {
|
|
mpModel->mBaseScale = mScale;
|
|
}
|
|
set_mtx();
|
|
}
|
|
|
|
/* 000016B8-00001830 .text path_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::path_init() {
|
|
// Load the position the box was last left pushed to based on the path and switch(es).
|
|
s32 pathId = prmZ_get_pathId();
|
|
s32 swSave1 = prm_get_swSave1();
|
|
if (pathId != 0xFF && swSave1 != 0xFF) {
|
|
s32 swSave2 = prmZ_get_swSave2();
|
|
|
|
bool isMoved1 = is_switch1();
|
|
u32 isMoved2 = false;
|
|
if (0xFF == swSave2) { // Literal must be on the left hand side for a match
|
|
isMoved2 = false;
|
|
} else {
|
|
isMoved2 = is_switch2();
|
|
isMoved2 = !!isMoved2;
|
|
}
|
|
isMoved2 = !!isMoved2;
|
|
|
|
s32 pntIdx = 0;
|
|
if (isMoved1 != false) {
|
|
pntIdx = 1;
|
|
}
|
|
if (isMoved2) {
|
|
pntIdx += 2;
|
|
}
|
|
|
|
mpPath = dPath_GetRoomPath(pathId, orig.roomNo);
|
|
dPath__Point* pnt = dPath_GetPnt(mpPath, pntIdx);
|
|
orig.pos = pnt->mPos;
|
|
current.pos = pnt->mPos;
|
|
}
|
|
}
|
|
|
|
/* 00001830-00001A10 .text path_save__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::path_save() {
|
|
// Determine how far along the path the box has been pushed and save the position to the switch(es).
|
|
// Supports up to 4 possible path points.
|
|
s32 pathId = prmZ_get_pathId();
|
|
s32 swSave1 = prm_get_swSave1();
|
|
if (pathId != 0xFF && swSave1 != 0xFF) {
|
|
s32 swSave2 = prmZ_get_swSave2();
|
|
|
|
s32 numPnts;
|
|
if (0xFF == swSave2) { // Literal must be on the left hand side for a match
|
|
numPnts = 2;
|
|
} else {
|
|
numPnts = 4;
|
|
}
|
|
if (numPnts > mpPath->m_num) {
|
|
numPnts = mpPath->m_num;
|
|
}
|
|
|
|
s32 pntIdx;
|
|
for (pntIdx = 0; pntIdx < numPnts; pntIdx++) {
|
|
cXyz pntPos = dPath_GetPnt(mpPath, pntIdx)->mPos;
|
|
if (current.pos.abs2(pntPos) < 9.0f) {
|
|
break;
|
|
}
|
|
}
|
|
if (pntIdx >= numPnts) {
|
|
return;
|
|
}
|
|
|
|
// Store the low bit of the 2-bit index in swSave1.
|
|
if (pntIdx & 1) {
|
|
on_switch1();
|
|
} else {
|
|
off_switch1();
|
|
}
|
|
|
|
if (swSave2 != 0xFF) {
|
|
// Store the high bit of the 2-bit index in swSave2.
|
|
if (pntIdx & 2) {
|
|
on_switch2();
|
|
} else {
|
|
off_switch2();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001A10-00001B00 .text CreateHeap__Q212daObjMovebox5Act_cFv */
|
|
int Act_c::CreateHeap() {
|
|
BOOL success = TRUE;
|
|
if (i_attr()->mModelFileIndex >= 0) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname[mType], i_attr()->mModelFileIndex);
|
|
JUT_ASSERT(1722, modelData != 0);
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
|
success = (mpModel != 0);
|
|
} else {
|
|
mpModel = NULL;
|
|
}
|
|
return success;
|
|
}
|
|
|
|
/* 00001B00-00001C64 .text RideCallBack__Q212daObjMovebox5Act_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
|
|
void Act_c::RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */
|
|
fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 rot, dBgW::PushPullLabel pp_label) {
|
|
Act_c* i_this = (Act_c*)actor;
|
|
|
|
cLib_checkBit(pp_label, static_cast<dBgW::PushPullLabel>(dBgW::PP_UNK1_e | dBgW::PP_UNK2_e));
|
|
dBgW::PushPullLabel orig_pp_label = pp_label;
|
|
pp_label = static_cast<dBgW::PushPullLabel>(pp_label & (dBgW::PP_UNK1_e | dBgW::PP_UNK2_e));
|
|
if (pp_label) {
|
|
bool unk;
|
|
if (!i_this->i_attr()->m9A) {
|
|
unk = true;
|
|
} else {
|
|
unk = orig_pp_label & dBgW::PP_UNK8_e;
|
|
}
|
|
if (unk) {
|
|
s16 angle = (s16)(pp_label & dBgW::PP_UNK2_e ? rot - 0x8000 : rot) - actor->orig.angle.y;
|
|
int pp_field = dBgW::PP_UNK1_e | dBgW::PP_UNK2_e;
|
|
JUT_ASSERT(1813, pp_label != pp_field);
|
|
|
|
i_this->mPPLabel = orig_pp_label;
|
|
|
|
int whichSide;
|
|
if (angle >= -0x2000 && angle < 0x2000) {
|
|
whichSide = 0;
|
|
} else if (angle >= 0x2000 && angle < 0x6000) {
|
|
whichSide = 1;
|
|
} else if (angle >= 0x6000 || angle < -0x6000) {
|
|
whichSide = 2;
|
|
} else {
|
|
whichSide = 3;
|
|
}
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (i == whichSide) {
|
|
i_this->mMomentCnt[i] += 1;
|
|
} else {
|
|
i_this->mMomentCnt[i] = 0;
|
|
}
|
|
}
|
|
|
|
i_this->m64A = true;
|
|
}
|
|
}
|
|
|
|
return actor;
|
|
}
|
|
|
|
/* 00001DD4-00002214 .text Create__Q212daObjMovebox5Act_cFv */
|
|
int Act_c::Create() {
|
|
/* Nonmatching */
|
|
m604 = 0;
|
|
m608 = 0.0f;
|
|
m60C = 0.0f;
|
|
m610 = 0.0f;
|
|
m614 = 0.0f;
|
|
m618 = 0.0f;
|
|
m61C = 0.0f;
|
|
m620 = 0.0f;
|
|
m624 = i_attr()->m68 * 0.5f;
|
|
m628 = 0;
|
|
m62C = 0;
|
|
m630 = 0.0f;
|
|
m634 = -1;
|
|
mPPLabel = 0;
|
|
clr_moment_cnt();
|
|
m644 = 0;
|
|
m646 = 0;
|
|
m648 = 0x14;
|
|
m64A = false;
|
|
|
|
mpBgW->SetRideCallback(RideCallBack);
|
|
mpBgW->SetPushPullCallback(PPCallBack);
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
mCyl.Set(M_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
mCyl.SetTgVec(*(cXyz*)&cXyz::Zero); // TODO: this doesn't seem right, but it does match
|
|
mCyl.OnTgNoHitMark();
|
|
mCyl.OffCoSetBit();
|
|
|
|
fopAcM_SetMtx(this, mMtx);
|
|
fopAcM_setCullSizeBox(this,
|
|
i_attr()->mCullMinX, i_attr()->mCullMinY, i_attr()->mCullMinZ,
|
|
i_attr()->mCullMaxX, i_attr()->mCullMaxY, i_attr()->mCullMaxZ
|
|
);
|
|
|
|
speedF = 0.0f;
|
|
mGravity = i_attr()->m14;
|
|
fopAcM_posMoveF(this, NULL);
|
|
mBgc.proc_vertical(this);
|
|
cLib_offBit(mBgc.mStateFlags, static_cast<Bgc_c::State_e>(Bgc_c::BgcState_UNK02 | Bgc_c::BgcState_UNK04 | Bgc_c::BgcState_UNK20));
|
|
|
|
m64F = true;
|
|
mReverb = dComIfGp_getReverb(fopAcM_GetHomeRoomNo(this));
|
|
|
|
mChildProcId = -1;
|
|
if (prm_get_buoy() == 0) {
|
|
cXyz buoyPos(current.pos.x, current.pos.y + i_attr()->m68 - 5.0f, current.pos.z);
|
|
mChildProcId = fopAcM_createChild(
|
|
PROC_Obj_Buoyflag, fpcM_GetID(this),
|
|
0, &buoyPos,
|
|
fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL
|
|
);
|
|
} else if (mType == TYPE_METAL_BOX_WITH_SPRING) {
|
|
mChildProcId = fopAcM_createChild(
|
|
PROC_Obj_Jump, fpcM_GetID(this),
|
|
1, ¤t.pos,
|
|
fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL
|
|
);
|
|
} else if (mType == TYPE_MIRROR) {
|
|
mChildProcId = fopAcM_createChild(
|
|
PROC_Obj_Mmrr, fpcM_GetID(this),
|
|
0, ¤t.pos,
|
|
fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL
|
|
);
|
|
} else if (mType == TYPE_BLACK_BOX_2) {
|
|
cXyz mkiePos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
u32 mkieParams = prmZ_get_swSave2_MkieB() << 0x10;
|
|
mkieParams |= prmX_get_evId() | 0x3000;
|
|
mChildProcId = fopAcM_createChild(
|
|
PROC_Obj_Mkie, fpcM_GetID(this),
|
|
mkieParams, &mkiePos,
|
|
fopAcM_GetRoomNo(this), &shape_angle, NULL, -1, NULL
|
|
);
|
|
}
|
|
|
|
init_mtx();
|
|
m6BC = 0;
|
|
mode_wait_init();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::afl_sway() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 000024D4-00002668 .text check_to_walk__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::check_to_walk() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00002668-0000268C .text clr_moment_cnt__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::clr_moment_cnt() {
|
|
for (int i = 0; i < 4; i++) {
|
|
mMomentCnt[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 0000268C-00002768 .text chk_appear__Q212daObjMovebox5Act_cCFv */
|
|
bool Act_c::chk_appear() const {
|
|
// Boxes that do not have a path to save their position instead use swSave1 to enable or disable spawning.
|
|
s32 pathId = prmZ_get_pathId();
|
|
int sw = prm_get_swSave1();
|
|
if (pathId != 0xFF || sw == 0xFF) {
|
|
return TRUE;
|
|
}
|
|
|
|
bool switchIsSet = is_switch1();
|
|
bool switchEnablesSpawn = prm_get_swSave();
|
|
bool shouldAppear = false;
|
|
if ((!switchIsSet && !switchEnablesSpawn) || (switchIsSet && switchEnablesSpawn)) {
|
|
shouldAppear = true;
|
|
}
|
|
return shouldAppear;
|
|
}
|
|
|
|
/* 00002768-0000290C .text eff_set_slip_smoke_pos__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_set_slip_smoke_pos() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000290C-00002A14 .text eff_smoke_slip_start__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_smoke_slip_start() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00002A14-00002A74 .text eff_smoke_slip_end__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_smoke_slip_end() {
|
|
for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
|
|
mSmokeCbs[i].end();
|
|
}
|
|
}
|
|
|
|
/* 00002A74-00002AD4 .text eff_smoke_slip_remove__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_smoke_slip_remove() {
|
|
for (int i = 0; i < (int)ARRAY_SIZE(mSmokeCbs); i++) {
|
|
mSmokeCbs[i].end();
|
|
}
|
|
}
|
|
|
|
/* 00002AD4-00002B48 .text mode_wait_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_wait_init() {
|
|
speedF = 0.0f;
|
|
mGravity = i_attr()->m14;
|
|
mpBgW->SetCrrFunc(dBgS_MoveBGProc_Trans);
|
|
clr_moment_cnt();
|
|
m634 = -1;
|
|
mMode = MODE_WAIT;
|
|
}
|
|
|
|
/* 00002B48-00002D84 .text mode_wait__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_wait() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00002D84-00002DA4 .text mode_walk_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_walk_init() {
|
|
speedF = 0.0f;
|
|
m64F = false;
|
|
mMode = MODE_WALK;
|
|
}
|
|
|
|
/* 00002DA4-000031AC .text mode_walk__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_walk() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 000031AC-000031D4 .text mode_afl_init__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_afl_init() {
|
|
speedF = 0.0f;
|
|
mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
|
|
mMode = MODE_AFLOAT;
|
|
}
|
|
|
|
/* 000031D4-000033D8 .text mode_afl__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::mode_afl() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 000033D8-00003450 .text make_item__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::make_item() {
|
|
s32 itemTableNo = prm_get_itemNo();
|
|
s32 itemBitNo = prm_get_itemSave();
|
|
fopAcM_createItemFromTable(¤t.pos, itemTableNo, itemBitNo, fopAcM_GetHomeRoomNo(this), 0, ¤t.angle, 7, NULL);
|
|
}
|
|
|
|
/* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_break() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00003570-00003808 .text sound_break__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::sound_break() {
|
|
/* Nonmatching */
|
|
cXyz centerPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
|
dBgS_ObjGndChk gndChk;
|
|
gndChk.SetPos(¢erPos);
|
|
gndChk.SetActorPid(mBase.mBsPcId);
|
|
dComIfG_Bgsp()->GroundCross(&gndChk);
|
|
s32 bgIndex = gndChk.GetBgIndex();
|
|
s32 mtrlSndId = 0;
|
|
if (bgIndex >= 0 && bgIndex < 0x100) {
|
|
mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
|
|
}
|
|
fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_WODCRL, mtrlSndId);
|
|
}
|
|
|
|
/* 00003AE0-00003BA4 .text sound_slip__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::sound_slip() {
|
|
/* Nonmatching */
|
|
s32 mtrlSndId = 0;
|
|
if (mBgc.m05C >= 0) {
|
|
dBgS_ObjGndChk& gndChk = Bgc_c::M_gnd_work[mBgc.m05C];
|
|
if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
|
|
mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
|
|
}
|
|
}
|
|
|
|
mDoAud_seStart(i_attr()->mMoveSE, &mEyePos, mtrlSndId, mReverb);
|
|
}
|
|
|
|
/* 00003BA4-00003C68 .text sound_limit__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::sound_limit() {
|
|
/* Nonmatching */
|
|
s32 mtrlSndId = 0;
|
|
if (mBgc.m05C >= 0) {
|
|
dBgS_ObjLinChk& linChk = Bgc_c::M_wall_work[mBgc.m05C];
|
|
if (linChk.GetBgIndex() >= 0 && linChk.GetBgIndex() < 0x100) {
|
|
mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(linChk);
|
|
}
|
|
}
|
|
|
|
mDoAud_seStart(i_attr()->mCantMoveSE, &mEyePos, mtrlSndId, mReverb);
|
|
}
|
|
|
|
/* 00003C68-00003D2C .text sound_land__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::sound_land() {
|
|
/* Nonmatching */
|
|
s32 mtrlSndId = 0;
|
|
if (mBgc.m05C >= 0) {
|
|
dBgS_ObjGndChk& gndChk = Bgc_c::M_gnd_work[mBgc.m05C];
|
|
if (gndChk.GetBgIndex() >= 0 && gndChk.GetBgIndex() < 0x100) {
|
|
mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(gndChk);
|
|
}
|
|
}
|
|
|
|
mDoAud_seStart(i_attr()->mNormalFallSE, &mEyePos, mtrlSndId, mReverb);
|
|
}
|
|
|
|
/* 00003D2C-00003D80 .text vib_land__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::vib_land() {
|
|
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
/* 00003D80-00003E04 .text eff_land_smoke__Q212daObjMovebox5Act_cFv */
|
|
void Act_c::eff_land_smoke() {
|
|
cXyz smokeScale;
|
|
smokeScale.setall(i_attr()->m24);
|
|
smokeScale *= 5.0f/3.0f;
|
|
fopAcM_create(PROC_Obj_Eff, 0x3, ¤t.pos, -1, NULL, &smokeScale, 0xFF, NULL);
|
|
}
|
|
|
|
/* 00003E04-000040D0 .text Execute__Q212daObjMovebox5Act_cFPPA3_A4_f */
|
|
BOOL Act_c::Execute(Mtx**) {
|
|
/* Nonmatching */
|
|
mCyl.ChkTgHit();
|
|
make_item();
|
|
eff_break();
|
|
sound_break();
|
|
fopAcM_delete(this);
|
|
fopAcM_seStart(this, JA_SE_LK_SW_HIT_S, 0x35);
|
|
mode_afl_init();
|
|
mode_afl_init();
|
|
mode_wait_init();
|
|
mode_proc_call();
|
|
sound_land();
|
|
vib_land();
|
|
eff_land_smoke();
|
|
set_mtx();
|
|
}
|
|
|
|
/* 000040D0-00004254 .text Draw__Q212daObjMovebox5Act_cFv */
|
|
BOOL Act_c::Draw() {
|
|
if (mpModel) {
|
|
int tevType = !i_attr()->mbUseBGTevType ? TEV_TYPE_ACTOR : TEV_TYPE_BG0;
|
|
g_env_light.settingTevStruct(tevType, ¤t.pos, &mTevStr);
|
|
g_env_light.setLightTevColorType(mpModel, &mTevStr);
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
dComIfGd_setList();
|
|
}
|
|
|
|
if (!i_attr()->mbCastsShadow && mBgc.m05C >= 0) {
|
|
int temp = mBgc.m05C;
|
|
f32 groundH = mBgc.m000[temp];
|
|
cM3dGPla* triPla = dComIfG_Bgsp()->i_GetTriPla(Bgc_c::M_gnd_work[temp]);
|
|
if (triPla && groundH != -1000000000.0f) {
|
|
dComIfGd_setSimpleShadow(¤t.pos, groundH, i_attr()->m10, &triPla->mNormal, shape_angle.y, 1.0f, NULL);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004254-000042A0 .text Delete__Q212daObjMovebox5Act_cFv */
|
|
BOOL Act_c::Delete() {
|
|
eff_smoke_slip_remove();
|
|
if (mpBgW) {
|
|
mpBgW->mpRideCb = NULL;
|
|
mpBgW->mpPushPullCb = NULL;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
namespace {
|
|
/* 000042A0-000044E0 .text Mthd_Create__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
|
|
s32 Mthd_Create(void* i_this) {
|
|
return ((Act_c*)i_this)->Mthd_Create();
|
|
}
|
|
|
|
/* 000044E0-00004544 .text Mthd_Delete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
|
|
BOOL Mthd_Delete(void* i_this) {
|
|
return ((Act_c*)i_this)->Mthd_Delete();
|
|
}
|
|
|
|
/* 00004544-00004564 .text Mthd_Execute__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
|
|
BOOL Mthd_Execute(void* i_this) {
|
|
return ((Act_c*)i_this)->MoveBGExecute();
|
|
}
|
|
|
|
/* 00004564-00004590 .text Mthd_Draw__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
|
|
BOOL Mthd_Draw(void* i_this) {
|
|
return ((Act_c*)i_this)->Draw();
|
|
}
|
|
|
|
/* 00004590-000045BC .text Mthd_IsDelete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */
|
|
BOOL Mthd_IsDelete(void* i_this) {
|
|
return ((Act_c*)i_this)->IsDelete();
|
|
}
|
|
|
|
static actor_method_class Mthd_Table = {
|
|
(process_method_func)Mthd_Create,
|
|
(process_method_func)Mthd_Delete,
|
|
(process_method_func)Mthd_Execute,
|
|
(process_method_func)Mthd_IsDelete,
|
|
(process_method_func)Mthd_Draw,
|
|
};
|
|
}
|
|
}
|
|
|
|
actor_process_profile_definition g_profile_Obj_Movebox = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 3,
|
|
/* ListPrio */ fpcLy_CURRENT_e,
|
|
/* ProcName */ PROC_Obj_Movebox,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.mBase,
|
|
/* Size */ sizeof(daObjMovebox::Act_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ 0x0015,
|
|
/* Actor SubMtd */ &daObjMovebox::Mthd_Table,
|
|
/* Status */ 0x04 | fopAcStts_SHOWMAP_e | fopAcStts_CULL_e | fopAcStts_FREEZE_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|