mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-06 01:48:15 -04:00
d-a-obj-swhammer equivalent (#702)
* start d-a-obj-swhammer * mostly match swhammer and name members * rename smoke callback member mColor * name attrs and match createheap * 100% equivalent
This commit is contained in:
+1
-1
@@ -1487,7 +1487,7 @@ config.libs = [
|
||||
ActorRel(NonMatching, "d_a_obj_majyuu_door"),
|
||||
ActorRel(NonMatching, "d_a_obj_stair"),
|
||||
ActorRel(NonMatching, "d_a_obj_swflat"),
|
||||
ActorRel(NonMatching, "d_a_obj_swhammer"),
|
||||
ActorRel(Equivalent, "d_a_obj_swhammer"), # weak func order
|
||||
ActorRel(NonMatching, "d_a_obj_swheavy"),
|
||||
ActorRel(NonMatching, "d_a_obj_swlight"),
|
||||
ActorRel(NonMatching, "d_a_oq"),
|
||||
|
||||
@@ -1,22 +1,32 @@
|
||||
#ifndef D_A_OBJ_SWHAMMER_H
|
||||
#define D_A_OBJ_SWHAMMER_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/d_a_obj.h"
|
||||
#include "d/d_bg_s_movebg_actor.h"
|
||||
#include "c/c_damagereaction.h"
|
||||
|
||||
class J3DNode;
|
||||
|
||||
namespace daObjSwhammer {
|
||||
class Act_c : public fopAc_ac_c {
|
||||
class Act_c : public dBgS_MoveBgActor {
|
||||
public:
|
||||
void is_switch() const {}
|
||||
void off_switch2() const {}
|
||||
void on_switch() const {}
|
||||
void prm_get_swSave() const {}
|
||||
void prm_get_swSave2() const {}
|
||||
enum Prm_e {
|
||||
PRM_SWSAVE_W = 0x08,
|
||||
PRM_SWSAVE_S = 0x08,
|
||||
|
||||
PRM_SWSAVE2_W = 0x08,
|
||||
PRM_SWSAVE2_S = 0,
|
||||
};
|
||||
|
||||
BOOL is_switch() const { return fopAcM_isSwitch(const_cast<Act_c*>(this), prm_get_swSave()); }
|
||||
void off_switch2() const { fopAcM_offSwitch(const_cast<Act_c*>(this), prm_get_swSave2()); }
|
||||
void on_switch() const { fopAcM_onSwitch(const_cast<Act_c*>(this), prm_get_swSave()); }
|
||||
s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
|
||||
s32 prm_get_swSave2() const { return daObj::PrmAbstract(this, PRM_SWSAVE2_W, PRM_SWSAVE2_S); }
|
||||
|
||||
Act_c();
|
||||
void CreateHeap();
|
||||
s32 Create();
|
||||
BOOL CreateHeap();
|
||||
int Create();
|
||||
s32 _create();
|
||||
BOOL Delete();
|
||||
bool _delete();
|
||||
@@ -38,12 +48,44 @@ namespace daObjSwhammer {
|
||||
void mode_lower();
|
||||
void mode_l_u_init();
|
||||
void mode_l_u();
|
||||
void Execute(float(**)[3][4]);
|
||||
BOOL Execute(Mtx**);
|
||||
BOOL Draw();
|
||||
|
||||
virtual ~Act_c() {};
|
||||
|
||||
static int M_damage;
|
||||
static short M_damage_dir;
|
||||
static Mtx M_tmp_mtx;
|
||||
|
||||
static const char M_arcname[7];
|
||||
static const dCcD_SrcCyl M_cyl_src_co;
|
||||
static const dCcD_SrcCyl M_cyl_src_tg;
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x2C8 */ request_of_phase_process_class mPhs;
|
||||
/* 0x2D0 */ J3DModel* mpModel;
|
||||
/* 0x2D4 */ dCcD_Cyl mCylCo;
|
||||
/* 0x404 */ dCcD_Stts mSttsCo;
|
||||
/* 0x440 */ dCcD_Cyl mCylTg;
|
||||
/* 0x570 */ dCcD_Stts mSttsTg;
|
||||
/* 0x5AC */ int mMode;
|
||||
/* 0x5B0 */ short mCrushTimer;
|
||||
/* 0x5B2 */ u8 mCrushState;
|
||||
/* 0x5B4 */ float mScaleYSpeed;
|
||||
/* 0x5B8 */ float mScaleY;
|
||||
/* 0x5BC */ float mAngleZ;
|
||||
/* 0x5C0 */ float mAngleX;
|
||||
/* 0x5C4 */ float mAngleSpeedZ;
|
||||
/* 0x5C8 */ float mAngleSpeedX;
|
||||
/* 0x5CC */ float mTargetHFrac;
|
||||
/* 0x5D0 */ float mCurHFrac;
|
||||
/* 0x5D4 */ float mVSpeed;
|
||||
/* 0x5D8 */ float mTopPos;
|
||||
/* 0x5DC */ dPa_smokeEcallBack mSmokeCb;
|
||||
/* 0x5FC */ bool m5FC;
|
||||
}; /* Size: 0x600 */
|
||||
|
||||
STATIC_ASSERT(sizeof(Act_c) == 0x600);
|
||||
};
|
||||
|
||||
#endif /* D_A_OBJ_SWHAMMER_H */
|
||||
|
||||
@@ -80,11 +80,11 @@ public:
|
||||
|
||||
void offWindOff() {}
|
||||
void onWindOff() {}
|
||||
void setColor(const GXColor&) {}
|
||||
void setColor(const GXColor& color) { mColor = color; }
|
||||
|
||||
/* 0x14 */ s8 field_0x14;
|
||||
/* 0x15 */ u8 field_0x15;
|
||||
/* 0x16 */ GXColor field_0x16;
|
||||
/* 0x16 */ GXColor mColor;
|
||||
/* 0x1A */ u8 field_0x1A[0x1C - 0x1A];
|
||||
/* 0x1C */ dKy_tevstr_c* mTevstr;
|
||||
}; // Size: 0x20
|
||||
|
||||
@@ -4,163 +4,466 @@
|
||||
//
|
||||
|
||||
#include "d/actor/d_a_obj_swhammer.h"
|
||||
#include "d/res/res_mhmrsw.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_player_main.h"
|
||||
|
||||
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
|
||||
#include "weak_data_1811.h" // IWYU pragma: keep
|
||||
|
||||
namespace daObjSwhammer {
|
||||
namespace {
|
||||
struct Attr_c {
|
||||
/* 0x00 */ float mVSpring;
|
||||
/* 0x04 */ float mIntVSpeedDecay;
|
||||
/* 0x08 */ float mExtVSpeedDecay;
|
||||
/* 0x0C */ float mVibMag0Mult;
|
||||
/* 0x10 */ float mVibSpring;
|
||||
/* 0x14 */ float mAngleSpeedDecay;
|
||||
/* 0x18 */ short mCrushDuration;
|
||||
/* 0x1C */ float mUncrushSpeed0;
|
||||
/* 0x20 */ float mUncrushSpring;
|
||||
/* 0x24 */ float mUncrushSpeedDecay;
|
||||
};
|
||||
|
||||
static const Attr_c L_attr = {
|
||||
/* mVSpring */ 0.8f,
|
||||
/* mIntVSpeedDecay */ 0.55f,
|
||||
/* mExtVSpeedDecay */ 0.55f,
|
||||
/* mVibMag0Mult */ 1.0f,
|
||||
/* mVibSpring */ 0.99f,
|
||||
/* mAngleSpeedDecay */ 0.18f,
|
||||
/* mCrushDuration */ 18,
|
||||
/* mUncrushSpeed0 */ 0.0f,
|
||||
/* mUncrushSpring */ 0.8f,
|
||||
/* mUncrushSpeedDecay */ 0.45f
|
||||
};
|
||||
|
||||
inline const Attr_c & attr() { return L_attr; }
|
||||
}
|
||||
}
|
||||
|
||||
int daObjSwhammer::Act_c::M_damage;
|
||||
short daObjSwhammer::Act_c::M_damage_dir;
|
||||
Mtx daObjSwhammer::Act_c::M_tmp_mtx;
|
||||
|
||||
const char daObjSwhammer::Act_c::M_arcname[] = "MhmrSW";
|
||||
const dCcD_SrcCyl daObjSwhammer::Act_c::M_cyl_src_co = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ 0,
|
||||
/* SrcObjTg SPrm */ 0,
|
||||
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
|
||||
/* 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 */ 0,
|
||||
/* SrcGObjCo SPrm */ 0,
|
||||
},
|
||||
// cM3dGCylS
|
||||
{
|
||||
/* Center */ 0.0f, 0.0f, 0.0f,
|
||||
/* Radius */ 100.0f,
|
||||
/* Height */ 112.5f,
|
||||
},
|
||||
};
|
||||
const dCcD_SrcCyl daObjSwhammer::Act_c::M_cyl_src_tg = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
|
||||
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_GrpAll_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_NoConHit_e,
|
||||
/* SrcGObjCo SPrm */ 0,
|
||||
},
|
||||
// cM3dGCylS
|
||||
{
|
||||
/* Center */ 0.0f, 0.0f, 0.0f,
|
||||
/* Radius */ 50.0f,
|
||||
/* Height */ 112.5f,
|
||||
},
|
||||
};
|
||||
const GXColor color = {0xA0, 0xA0, 0x80, 0xFF};
|
||||
|
||||
/* 000000EC-00000260 .text __ct__Q213daObjSwhammer5Act_cFv */
|
||||
daObjSwhammer::Act_c::Act_c() {
|
||||
/* Nonmatching */
|
||||
mSmokeCb.setColor(color);
|
||||
}
|
||||
|
||||
/* 000004B0-0000058C .text CreateHeap__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjSwhammer::Act_c::CreateHeap() {
|
||||
J3DModelData* modelData = static_cast<J3DModelData *>(dComIfG_getObjectRes(M_arcname, MHMRSW_BDL_MHMRSW));
|
||||
JUT_ASSERT(0x18b, modelData != NULL);
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
||||
if (mpModel) {
|
||||
modelData->getJointNodePointer(1)->setCallBack(jnodeCB);
|
||||
mpModel->setUserArea((u32) this);
|
||||
}
|
||||
return mpModel != NULL;
|
||||
}
|
||||
|
||||
/* 0000058C-0000070C .text Create__Q213daObjSwhammer5Act_cFv */
|
||||
s32 daObjSwhammer::Act_c::Create() {
|
||||
/* Nonmatching */
|
||||
int daObjSwhammer::Act_c::Create() {
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
init_mtx();
|
||||
fopAcM_setCullSizeSphere(this, 0.0f, 30.0f, 0.0f, 120.0f);
|
||||
|
||||
mSttsCo.Init(0xFF, 0xFF, this);
|
||||
mCylCo.Set(M_cyl_src_co);
|
||||
mCylCo.SetStts(&mSttsCo);
|
||||
|
||||
mSttsTg.Init(0xFF, 0xFF, this);
|
||||
mCylTg.Set(M_cyl_src_tg);
|
||||
mCylTg.SetStts(&mSttsTg);
|
||||
mCylTg.OnTgNoHitMark();
|
||||
|
||||
mCrushTimer = 0;
|
||||
mCrushState = 0;
|
||||
mScaleYSpeed = 0.0f;
|
||||
mScaleY = 1.0f;
|
||||
mAngleZ = 0.0f;
|
||||
mAngleX = 0.0f;
|
||||
mAngleSpeedZ = 0.0f;
|
||||
mAngleSpeedX = 0.0f;
|
||||
mVSpeed = 0.0f;
|
||||
mTargetHFrac = 0.0f;
|
||||
|
||||
if (is_switch()) {
|
||||
mCurHFrac = 0.0f;
|
||||
mTopPos = -60.0f;
|
||||
mode_lower_init();
|
||||
} else {
|
||||
mCurHFrac = 1.0f;
|
||||
mTopPos = 0.0f;
|
||||
mode_upper_init();
|
||||
}
|
||||
attention_info.distances[fopAc_Attn_TYPE_MISC_e] = 0x2D;
|
||||
attention_info.position.y = current.pos.y + mTopPos + 120.0f;
|
||||
eyePos.y = attention_info.position.y;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 0000070C-000007F8 .text _create__Q213daObjSwhammer5Act_cFv */
|
||||
s32 daObjSwhammer::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetupActor(this, Act_c);
|
||||
|
||||
s32 phase_state = dComIfG_resLoad(&mPhs, M_arcname);
|
||||
if (phase_state == cPhs_COMPLEATE_e) {
|
||||
phase_state = MoveBGCreate(M_arcname, MHMRSW_DZB_MHMRSW, NULL, 0xa80);
|
||||
JUT_ASSERT(0x1e9, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
|
||||
}
|
||||
return phase_state;
|
||||
}
|
||||
|
||||
/* 000007F8-00000828 .text Delete__Q213daObjSwhammer5Act_cFv */
|
||||
BOOL daObjSwhammer::Act_c::Delete() {
|
||||
/* Nonmatching */
|
||||
mSmokeCb.end();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000828-0000087C .text _delete__Q213daObjSwhammer5Act_cFv */
|
||||
bool daObjSwhammer::Act_c::_delete() {
|
||||
/* Nonmatching */
|
||||
int ret = MoveBGDelete();
|
||||
dComIfG_resDelete(&mPhs, M_arcname);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 0000087C-000008E8 .text set_mtx__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 000008E8-00000938 .text init_mtx__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::init_mtx() {
|
||||
/* Nonmatching */
|
||||
mpModel->setBaseScale(scale);
|
||||
set_mtx();
|
||||
cMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx);
|
||||
}
|
||||
|
||||
/* 00000938-00000A58 .text set_damage__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::set_damage() {
|
||||
/* Nonmatching */
|
||||
u8 attackState = daPy_getPlayerActorClass()->getCutType();
|
||||
M_damage = 0;
|
||||
M_damage_dir = 0;
|
||||
if (mCylTg.ChkTgHit()) {
|
||||
cCcD_Obj *hitObj = mCylTg.GetTgHitObj();
|
||||
fopAc_ac_c* hitActor = mCylTg.GetTgHitAc();
|
||||
if (hitObj->ChkAtType(AT_TYPE_SKULL_HAMMER) && fopAcM_GetProfName(hitActor) == PROC_PLAYER) {
|
||||
if (attackState == 0x12 || attackState == 0x13) {
|
||||
M_damage = 1;
|
||||
} else if (attackState == 0x11) {
|
||||
M_damage_dir = cM_atan2s(mCylTg.GetTgRVecP()->x, mCylTg.GetTgRVecP()->z);
|
||||
M_damage = 2;
|
||||
}
|
||||
}
|
||||
daObj::HitSeStart(&eyePos, current.roomNo, &mCylTg, 0x11);
|
||||
daObj::HitEff_hibana(this, &mCylTg);
|
||||
mCylTg.ClrTgHit();
|
||||
}
|
||||
mSttsTg.Move();
|
||||
}
|
||||
|
||||
/* 00000A58-00000ABC .text vib_start__Q213daObjSwhammer5Act_cFsf */
|
||||
void daObjSwhammer::Act_c::vib_start(short, float) {
|
||||
/* Nonmatching */
|
||||
void daObjSwhammer::Act_c::vib_start(short dir, float mag) {
|
||||
mAngleSpeedZ = mag * attr().mVibMag0Mult * cM_scos(dir);
|
||||
mAngleSpeedX = mag * attr().mVibMag0Mult * cM_ssin(dir);
|
||||
}
|
||||
|
||||
/* 00000ABC-00000B34 .text vib_proc__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::vib_proc() {
|
||||
/* Nonmatching */
|
||||
float angleAccelX = -(mAngleX * attr().mVibSpring) - mAngleSpeedX * attr().mAngleSpeedDecay;
|
||||
float angleAccelZ = -(mAngleZ * attr().mVibSpring) - mAngleSpeedZ * attr().mAngleSpeedDecay;
|
||||
|
||||
mAngleSpeedZ += angleAccelZ;
|
||||
mAngleSpeedX += angleAccelX;
|
||||
mAngleZ += mAngleSpeedZ;
|
||||
mAngleX += mAngleSpeedX;
|
||||
}
|
||||
|
||||
/* 00000B34-00000B40 .text crush_start__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::crush_start() {
|
||||
/* Nonmatching */
|
||||
mCrushState = 1;
|
||||
}
|
||||
|
||||
/* 00000B40-00000BF0 .text crush_proc__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::crush_proc() {
|
||||
/* Nonmatching */
|
||||
if (mCrushState == 1) {
|
||||
mScaleY = 0.2f;
|
||||
mCrushState = 2;
|
||||
mCrushTimer = attr().mCrushDuration;
|
||||
return;
|
||||
}
|
||||
if (mCrushState == 2) {
|
||||
if (--mCrushTimer > 0) {
|
||||
return;
|
||||
}
|
||||
mCrushState = 0;
|
||||
mScaleYSpeed = attr().mUncrushSpeed0;
|
||||
return;
|
||||
}
|
||||
mScaleYSpeed += -((mScaleY - 1.0f) * attr().mUncrushSpring) - mScaleYSpeed * attr().mUncrushSpeedDecay;
|
||||
mScaleY += mScaleYSpeed;
|
||||
}
|
||||
|
||||
/* 00000BF0-00000DB8 .text eff_crush__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::eff_crush() {
|
||||
/* Nonmatching */
|
||||
if (mMode == 0) {
|
||||
dComIfGp_particle_set(dPa_name::ID_SCENE_81B7, ¤t.pos);
|
||||
dComIfGp_particle_set(dPa_name::ID_SCENE_81B8, ¤t.pos);
|
||||
}
|
||||
static const cXyz particle_scale(1.5f, 1.5f, 1.0f);
|
||||
JPABaseEmitter* emitter = dComIfGp_particle_setToon(dPa_name::ID_COMMON_2027, ¤t.pos, NULL, NULL, 200, &mSmokeCb, -1, NULL, NULL, &particle_scale);
|
||||
if (emitter) {
|
||||
emitter->setRate(30.0f);
|
||||
emitter->setMaxFrame(1);
|
||||
emitter->setLifeTime(45);
|
||||
emitter->setAwayFromCenterSpeed(0.0f);
|
||||
emitter->setAwayFromAxisSpeed(38.0f);
|
||||
static const JGeometry::TVec3<f32> vec(0.0f, 15.0f, 0.0f);
|
||||
emitter->setEmitterTranslation(vec);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000DB8-00000E74 .text calc_top_pos__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::calc_top_pos() {
|
||||
/* Nonmatching */
|
||||
float diff = mCurHFrac - mTargetHFrac;
|
||||
float decay = mCurHFrac > 0.0f && mCurHFrac < 1.0f
|
||||
? attr().mIntVSpeedDecay
|
||||
: attr().mExtVSpeedDecay;
|
||||
|
||||
mVSpeed -= diff * attr().mVSpring;
|
||||
mVSpeed -= mVSpeed * decay;
|
||||
mCurHFrac += mVSpeed;
|
||||
mCurHFrac = cLib_maxLimit(mCurHFrac, 1.0f);
|
||||
mTopPos = (1.0f - mCurHFrac) * -60.0f;
|
||||
}
|
||||
|
||||
/* 00000E74-00000F94 .text jnodeCB__Q213daObjSwhammer5Act_cFP7J3DNodei */
|
||||
BOOL daObjSwhammer::Act_c::jnodeCB(J3DNode*, int) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjSwhammer::Act_c::jnodeCB(J3DNode* node, int calcTiming) {
|
||||
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
||||
J3DModel* model = (J3DModel*) j3dSys.getModel();
|
||||
daObjSwhammer::Act_c *i_this = (daObjSwhammer::Act_c*) model->getUserArea();
|
||||
J3DJoint* joint = (J3DJoint*) node;
|
||||
s32 jntNo = joint->getJntNo();
|
||||
|
||||
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
||||
mDoMtx_stack_c::transM(0.0f, (1.0f - i_this->mScaleY) * 20.0f, 0.0f);
|
||||
mDoMtx_stack_c::scaleM(1.0f, i_this->mScaleY, 1.0f);
|
||||
mDoMtx_stack_c::transM(0.0f, i_this->mTopPos, 0.0f);
|
||||
|
||||
cXyz tmp(i_this->mAngleX, 1.0f, i_this->mAngleZ);
|
||||
Quaternion quat;
|
||||
daObj::quat_rotBaseY2(&quat, tmp);
|
||||
mDoMtx_stack_c::transM(0.0f, -20.0f, 0.0f);
|
||||
mDoMtx_stack_c::quatM(&quat);
|
||||
mDoMtx_stack_c::transM(0.0f, 20.0f, 0.0f);
|
||||
|
||||
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||||
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000F94-00001000 .text mode_upper_init__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_upper_init() {
|
||||
/* Nonmatching */
|
||||
mCylTg.SetH(112.5f);
|
||||
mCylCo.SetH(112.5f);
|
||||
mTargetHFrac = 1.0f;
|
||||
m5FC = false;
|
||||
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_MISC_e);
|
||||
mMode = 0;
|
||||
}
|
||||
|
||||
/* 00001000-000010F4 .text mode_upper__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_upper() {
|
||||
/* Nonmatching */
|
||||
if (M_damage == 1) {
|
||||
m5FC = true;
|
||||
mode_u_l_init();
|
||||
} else if (is_switch()) {
|
||||
mode_u_l_init();
|
||||
} else if (M_damage == 2) {
|
||||
vib_start(M_damage_dir, 1.0f);
|
||||
fopAcM_seStart(this, JA_SE_OBJ_HAMMER_SW_SWING, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000010F4-0000117C .text mode_u_l_init__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_u_l_init() {
|
||||
/* Nonmatching */
|
||||
fopAcM_seStart(this, JA_SE_OBJ_HAMMER_SW_ON, 0);
|
||||
mTargetHFrac = 0.0f;
|
||||
mMode = 1;
|
||||
}
|
||||
|
||||
/* 0000117C-0000121C .text mode_u_l__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_u_l() {
|
||||
/* Nonmatching */
|
||||
if (mCurHFrac <= 0.0f) {
|
||||
on_switch();
|
||||
if (m5FC) {
|
||||
off_switch2();
|
||||
}
|
||||
mode_lower_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 0000121C-0000128C .text mode_lower_init__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_lower_init() {
|
||||
/* Nonmatching */
|
||||
mCylTg.SetH(52.5f);
|
||||
mCylCo.SetH(52.5f);
|
||||
mTargetHFrac = 0.0f;
|
||||
m5FC = false;
|
||||
cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_MISC_e);
|
||||
mMode = 2;
|
||||
}
|
||||
|
||||
/* 0000128C-00001330 .text mode_lower__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_lower() {
|
||||
/* Nonmatching */
|
||||
if (!is_switch()) {
|
||||
fopAcM_seStart(this, JA_SE_OBJ_HAMMER_SW_OFF, 0);
|
||||
mode_l_u_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001330-00001348 .text mode_l_u_init__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_l_u_init() {
|
||||
/* Nonmatching */
|
||||
mTargetHFrac = 1.0f;
|
||||
mMode = 3;
|
||||
}
|
||||
|
||||
/* 00001348-00001380 .text mode_l_u__Q213daObjSwhammer5Act_cFv */
|
||||
void daObjSwhammer::Act_c::mode_l_u() {
|
||||
/* Nonmatching */
|
||||
if (mCurHFrac >= 1.0f) {
|
||||
mode_upper_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001380-00001504 .text Execute__Q213daObjSwhammer5Act_cFPPA3_A4_f */
|
||||
void daObjSwhammer::Act_c::Execute(float(**)[3][4]) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjSwhammer::Act_c::Execute(Mtx** mtx) {
|
||||
set_damage();
|
||||
if (M_damage == 1) {
|
||||
crush_start();
|
||||
eff_crush();
|
||||
}
|
||||
typedef void (daObjSwhammer::Act_c::*procFunc)();
|
||||
static procFunc mode_proc[] = {
|
||||
&daObjSwhammer::Act_c::mode_upper,
|
||||
&daObjSwhammer::Act_c::mode_u_l,
|
||||
&daObjSwhammer::Act_c::mode_lower,
|
||||
&daObjSwhammer::Act_c::mode_l_u,
|
||||
};
|
||||
(this->*mode_proc[mMode])();
|
||||
calc_top_pos();
|
||||
vib_proc();
|
||||
crush_proc();
|
||||
set_mtx();
|
||||
*mtx = &M_tmp_mtx;
|
||||
mCylTg.SetC(current.pos);
|
||||
mCylCo.SetC(current.pos);
|
||||
dComIfG_Ccsp()->Set(&mCylTg);
|
||||
dComIfG_Ccsp()->Set(&mCylCo);
|
||||
attention_info.position.y = current.pos.y + mTopPos + 120.0f;
|
||||
eyePos.y = attention_info.position.y;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00001504-00001564 .text Draw__Q213daObjSwhammer5Act_cFv */
|
||||
BOOL daObjSwhammer::Act_c::Draw() {
|
||||
/* Nonmatching */
|
||||
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
namespace daObjSwhammer {
|
||||
namespace {
|
||||
/* 00001564-00001584 .text Mthd_Create__Q213daObjSwhammer30@unnamed@d_a_obj_swhammer_cpp@FPv */
|
||||
void Mthd_Create(void*) {
|
||||
/* Nonmatching */
|
||||
s32 Mthd_Create(void* i_this) {
|
||||
return static_cast<daObjSwhammer::Act_c*>(i_this)->_create();
|
||||
}
|
||||
|
||||
/* 00001584-000015A8 .text Mthd_Delete__Q213daObjSwhammer30@unnamed@d_a_obj_swhammer_cpp@FPv */
|
||||
void Mthd_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL Mthd_Delete(void* i_this) {
|
||||
return static_cast<daObjSwhammer::Act_c*>(i_this)->_delete();
|
||||
}
|
||||
|
||||
/* 000015A8-000015C8 .text Mthd_Execute__Q213daObjSwhammer30@unnamed@d_a_obj_swhammer_cpp@FPv */
|
||||
void Mthd_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
int Mthd_Execute(void* i_this) {
|
||||
return static_cast<daObjSwhammer::Act_c*>(i_this)->MoveBGExecute();
|
||||
}
|
||||
|
||||
/* 000015C8-000015F4 .text Mthd_Draw__Q213daObjSwhammer30@unnamed@d_a_obj_swhammer_cpp@FPv */
|
||||
void Mthd_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
void Mthd_Draw(void* i_this) {
|
||||
static_cast<daObjSwhammer::Act_c*>(i_this)->Draw();
|
||||
}
|
||||
|
||||
/* 000015F4-00001620 .text Mthd_IsDelete__Q213daObjSwhammer30@unnamed@d_a_obj_swhammer_cpp@FPv */
|
||||
void Mthd_IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL Mthd_IsDelete(void* i_this) {
|
||||
return static_cast<daObjSwhammer::Act_c*>(i_this)->IsDelete();
|
||||
}
|
||||
|
||||
static actor_method_class Mthd_Table = {
|
||||
|
||||
@@ -280,7 +280,7 @@ void dPa_followEcallBack::end() {
|
||||
dPa_smokeEcallBack::dPa_smokeEcallBack(u8 param_1) {
|
||||
/* Nonmatching */
|
||||
GXColor local_18 = {0xa0, 0xa0, 0x80, 0xff};
|
||||
field_0x16 = local_18;
|
||||
mColor = local_18;
|
||||
mRateOff = param_1;
|
||||
field_0x12 = 0;
|
||||
mTevstr = NULL;
|
||||
@@ -292,7 +292,7 @@ dPa_smokeEcallBack::dPa_smokeEcallBack(u8 param_1) {
|
||||
dPa_smokeEcallBack::dPa_smokeEcallBack(u8 param_1, u8 param_2, u8 param_3, u8 param_4) {
|
||||
/* Nonmatching */
|
||||
GXColor local_28 = {0xa0, 0xa0, 0x80, 0xff};
|
||||
field_0x16 = local_28;
|
||||
mColor = local_28;
|
||||
mRateOff = param_1;
|
||||
field_0x12 = param_2;
|
||||
field_0x13 = param_4;
|
||||
@@ -305,7 +305,7 @@ dPa_smokeEcallBack::dPa_smokeEcallBack(u8 param_1, u8 param_2, u8 param_3, u8 pa
|
||||
|
||||
/* 8007B558-8007B5E8 .text __ct__18dPa_smokeEcallBackFRC8_GXColorP12dKy_tevstr_cUc */
|
||||
dPa_smokeEcallBack::dPa_smokeEcallBack(const GXColor& param_1, dKy_tevstr_c* param_2, u8 param_3) {
|
||||
field_0x16 = param_1;
|
||||
mColor = param_1;
|
||||
mTevstr = param_2;
|
||||
mRateOff = param_3;
|
||||
field_0x12 = 0;
|
||||
@@ -389,7 +389,7 @@ void smokeEcallBack(JPABaseEmitter* emtr, dKy_tevstr_c* tevStr, s8, GXColor colo
|
||||
|
||||
/* 8007BB44-8007BB80 .text draw__18dPa_smokeEcallBackFP14JPABaseEmitter */
|
||||
void dPa_smokeEcallBack::draw(JPABaseEmitter* emtr) {
|
||||
smokeEcallBack(emtr, mTevstr, field_0x14, field_0x16);
|
||||
smokeEcallBack(emtr, mTevstr, field_0x14, mColor);
|
||||
}
|
||||
|
||||
/* 8007BB80-8007BBD8 .text end__18dPa_smokeEcallBackFv */
|
||||
|
||||
Reference in New Issue
Block a user