mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-31 15:57:37 -04:00
d_a_obj_canon Equivalent (#802)
* d_a_obj_canon Equivalent * Cleanup - Use g_regHIO macros - Use resource enum
This commit is contained in:
+1
-1
@@ -1503,7 +1503,7 @@ config.libs = [
|
||||
ActorRel(NonMatching, "d_a_obj_balancelift"),
|
||||
ActorRel(Equivalent, "d_a_obj_barrier", extra_cflags=['-pragma "nosyminline on"']), # weak func order
|
||||
ActorRel(NonMatching, "d_a_obj_bemos"),
|
||||
ActorRel(NonMatching, "d_a_obj_canon"),
|
||||
ActorRel(NonMatching, "d_a_obj_canon", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(NonMatching, "d_a_obj_eff"),
|
||||
ActorRel(NonMatching, "d_a_obj_magmarock"),
|
||||
ActorRel(NonMatching, "d_a_obj_majyuu_door"),
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
#ifndef D_A_OBJ_CANON_H
|
||||
#define D_A_OBJ_CANON_H
|
||||
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/d_npc.h"
|
||||
#include "d/d_particle.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "m_Do/m_Do_hostIO.h"
|
||||
|
||||
class J3DNode;
|
||||
class dCcD_SrcSph;
|
||||
@@ -9,15 +13,16 @@ class dCcD_SrcSph;
|
||||
class daObj_Canon_c : public fopAc_ac_c {
|
||||
public:
|
||||
enum Proc_e {
|
||||
|
||||
PROC_INIT = 0,
|
||||
PROC_EXEC = 1
|
||||
};
|
||||
|
||||
void modeProcInit(int) {}
|
||||
void modeProcInit(int newMode) { modeProc(PROC_INIT, newMode); }
|
||||
|
||||
void _nodeControl(J3DNode*, J3DModel*);
|
||||
void _createHeap();
|
||||
void setEffect(unsigned short);
|
||||
void checkTgHit();
|
||||
BOOL _createHeap();
|
||||
void setEffect(u16);
|
||||
bool checkTgHit();
|
||||
void attackCannon();
|
||||
void lockonCannon();
|
||||
void setAttention();
|
||||
@@ -38,22 +43,74 @@ public:
|
||||
void debugDraw();
|
||||
bool _draw();
|
||||
void createInit();
|
||||
void getArg();
|
||||
u8 getArg();
|
||||
cPhs_State _create();
|
||||
bool _delete();
|
||||
|
||||
static const u32 m_heapsize;
|
||||
static const char m_arc_name[];
|
||||
static const dCcD_SrcSph m_sph_src;
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x290 */ s32 mCurMode;
|
||||
/* 0x294 */ u8 field_0x294;
|
||||
/* 0x295 */ u8 field_0x295;
|
||||
/* 0x296 */ u8 field_0x296;
|
||||
/* 0x297 */ u8 field_0x297;
|
||||
/* 0x298 */ dNpc_PathRun_c field_0x298;
|
||||
/* 0x2A0 */ u8 field_0x2A0[0x2B0 - 0x2A0];
|
||||
/* 0x2B0 */ dPath* field_0x2B0;
|
||||
/* 0x2B0 */ u8 field_0x2B4[0x2B8 - 0x2B4];
|
||||
/* 0x2B8 */ request_of_phase_process_class mPhs;
|
||||
/* 0x2C0 */ J3DModel* mpModel;
|
||||
/* 0x2C4 */ s16 field_0x2C4;
|
||||
/* 0x2C6 */ s16 field_0x2C6;
|
||||
/* 0x2C8 */ s16 field_0x2C8;
|
||||
/* 0x2CA */ s16 field_0x2CA;
|
||||
/* 0x2CC */ cXyz field_0x2CC;
|
||||
/* 0x2D8 */ dCcD_Sph mSph;
|
||||
/* 0x420 */ dCcD_Stts mStts;
|
||||
/* 0x444 */ int field_0x440;
|
||||
/* 0x444 */ int field_0x444;
|
||||
/* 0x448 */ u8 field_0x448[0x450 - 0x448];
|
||||
/* 0x450 */ cXyz field_0x450;
|
||||
/* 0x45C */ cXyz field_0x45C;
|
||||
/* 0x468 */ s16 field_0x468;
|
||||
/* 0x46A */ s16 field_0x46A;
|
||||
/* 0x46C */ f32 field_0x46C;
|
||||
/* 0x470 */ dPa_followEcallBack field_0x470;
|
||||
/* 0x484 */ int field_0x484;
|
||||
/* 0x488 */ s32 field_0x488;
|
||||
}; // Size: 0x48C
|
||||
|
||||
class daObj_Canon_HIO_c {
|
||||
class daObj_Canon_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daObj_Canon_HIO_c();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x04 */ bool debug_draw;
|
||||
/* 0x05 */ u8 field_0x05;
|
||||
/* 0x08 */ f32 field_0x08;
|
||||
/* 0x0C */ f32 field_0x0C;
|
||||
/* 0x10 */ f32 field_0x10;
|
||||
/* 0x14 */ f32 field_0x14;
|
||||
/* 0x18 */ f32 field_0x18;
|
||||
/* 0x1C */ f32 field_0x1C;
|
||||
/* 0x20 */ f32 field_0x20;
|
||||
/* 0x24 */ f32 field_0x24;
|
||||
/* 0x28 */ s16 field_0x28;
|
||||
/* 0x2C */ f32 field_0x2C;
|
||||
/* 0x30 */ s16 field_0x30;
|
||||
/* 0x32 */ s16 field_0x32;
|
||||
/* 0x34 */ s16 field_0x34;
|
||||
/* 0x36 */ s16 field_0x36;
|
||||
/* 0x38 */ s16 field_0x38;
|
||||
/* 0x3A */ s16 field_0x3A;
|
||||
/* 0x3C */ s16 field_0x3C;
|
||||
/* 0x3E */ s16 field_0x3E;
|
||||
/* 0x40 */ f32 field_0x40;
|
||||
/* 0x44 */ f32 field_0x44;
|
||||
/* 0x48 */ s16 field_0x48;
|
||||
}; // Size: 0x4C
|
||||
|
||||
#endif /* D_A_OBJ_CANON_H */
|
||||
|
||||
+431
-38
@@ -4,10 +4,27 @@
|
||||
*/
|
||||
|
||||
#include "d/actor/d_a_obj_canon.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DModel.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DNode.h"
|
||||
#include "JSystem/J3DGraphBase/J3DSys.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_ship.h"
|
||||
#include "d/d_cc_uty.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_path.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_priority.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/actor/d_a_bomb.h"
|
||||
#include "d/d_s_play.h"
|
||||
#include "d/res/res_wallbom.h"
|
||||
|
||||
#include "weak_data_1811.h" // IWYU pragma: keep
|
||||
|
||||
daObj_Canon_HIO_c l_HIO;
|
||||
|
||||
const u32 daObj_Canon_c::m_heapsize = 0x8C0;
|
||||
const char daObj_Canon_c::m_arc_name[] = "WallBom";
|
||||
const dCcD_SrcSph daObj_Canon_c::m_sph_src = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
@@ -40,152 +57,528 @@ const dCcD_SrcSph daObj_Canon_c::m_sph_src = {
|
||||
|
||||
/* 000000EC-000001A0 .text __ct__17daObj_Canon_HIO_cFv */
|
||||
daObj_Canon_HIO_c::daObj_Canon_HIO_c() {
|
||||
/* Nonmatching */
|
||||
debug_draw = false;
|
||||
field_0x05 = 0;
|
||||
field_0x08 = 150.0f;
|
||||
field_0x14 = 0.0f;
|
||||
field_0x18 = 180.0f;
|
||||
field_0x1C = 0.0f;
|
||||
field_0x20 = 90.0f;
|
||||
field_0x24 = -1.1f;
|
||||
field_0x28 = 0x16;
|
||||
field_0x2C = 5000.0f;
|
||||
field_0x30 = 0x3000;
|
||||
field_0x32 = 0x2328;
|
||||
field_0x34 = -0x2328;
|
||||
field_0x36 = 0x2328;
|
||||
field_0x38 = -0x2328;
|
||||
field_0x3A = 0x2800;
|
||||
field_0x3C = 0x1E;
|
||||
field_0x3E = 0x1E;
|
||||
field_0x40 = 2000.0f;
|
||||
field_0x44 = 0.2f;
|
||||
field_0x48 = 0;
|
||||
}
|
||||
|
||||
/* 000001E8-00000234 .text nodeControl_CB__FP7J3DNodei */
|
||||
static BOOL nodeControl_CB(J3DNode*, int) {
|
||||
/* Nonmatching */
|
||||
static BOOL nodeControl_CB(J3DNode* node, int calcTiming) {
|
||||
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
||||
J3DModel* model = j3dSys.getModel();
|
||||
daObj_Canon_c* i_this = reinterpret_cast<daObj_Canon_c*>(model->getUserArea());
|
||||
if (i_this) {
|
||||
i_this->_nodeControl(node, model);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000234-000003D8 .text _nodeControl__13daObj_Canon_cFP7J3DNodeP8J3DModel */
|
||||
void daObj_Canon_c::_nodeControl(J3DNode*, J3DModel*) {
|
||||
/* Nonmatching */
|
||||
void daObj_Canon_c::_nodeControl(J3DNode* node, J3DModel* model) {
|
||||
J3DJoint* joint = (J3DJoint*)node;
|
||||
s32 jntNo = joint->getJntNo();
|
||||
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
||||
csXyz temp(0, 0, 0);
|
||||
if(REG12_S(1)) {
|
||||
temp.set(REG12_S(2), REG12_S(3), REG12_S(4));
|
||||
}
|
||||
else {
|
||||
temp.x = -field_0x2CA;
|
||||
temp.z = -field_0x2C6;
|
||||
}
|
||||
mDoMtx_stack_c::ZXYrotM(temp);
|
||||
field_0x468 += REG12_S(2) + 0x1830;
|
||||
mDoMtx_stack_c::XrotM(field_0x46A * (REG12_S(5) + 5) * cM_ssin(field_0x468));
|
||||
cXyz temp2;
|
||||
temp2.x = REG12_F(3);
|
||||
temp2.y = -field_0x46C;
|
||||
temp2.z = REG12_F(5);
|
||||
mDoMtx_stack_c::transM(temp2);
|
||||
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||||
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 000003D8-000003F8 .text createHeap_CB__FP10fopAc_ac_c */
|
||||
static BOOL createHeap_CB(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
static BOOL createHeap_CB(fopAc_ac_c* i_this) {
|
||||
return static_cast<daObj_Canon_c*>(i_this)->_createHeap();
|
||||
}
|
||||
|
||||
/* 000003F8-000004CC .text _createHeap__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::_createHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daObj_Canon_c::_createHeap() {
|
||||
J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectRes(m_arc_name, WALLBOM_BDL_WALLBOM);
|
||||
JUT_ASSERT(0x115, modelData != 0);
|
||||
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
||||
if(mpModel == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mpModel->setUserArea((u32)this);
|
||||
modelData->getJointNodePointer(3)->setCallBack(nodeControl_CB);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000004CC-000005AC .text setEffect__13daObj_Canon_cFUs */
|
||||
void daObj_Canon_c::setEffect(unsigned short) {
|
||||
/* Nonmatching */
|
||||
void daObj_Canon_c::setEffect(u16 param_1) {
|
||||
GXColor* prmColor = NULL, *envColor = NULL;
|
||||
if(param_1 == dPa_name::ID_SCENE_82E4) {
|
||||
prmColor = &tevStr.mColorK0;
|
||||
envColor = &tevStr.mColorK0;
|
||||
}
|
||||
|
||||
if(param_1 == dPa_name::ID_COMMON_03E1) {
|
||||
dComIfGp_particle_set(param_1, ¤t.pos, &shape_angle, &scale, 0xFF, &field_0x470, -1, prmColor, envColor);
|
||||
field_0x484 = 0xE6;
|
||||
}
|
||||
else {
|
||||
dComIfGp_particle_set(param_1, ¤t.pos, &shape_angle, &scale, 0xFF, NULL, -1, prmColor, envColor);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000005AC-0000082C .text checkTgHit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::checkTgHit() {
|
||||
/* Nonmatching */
|
||||
bool daObj_Canon_c::checkTgHit() {
|
||||
mStts.Move();
|
||||
if(l_HIO.field_0x05) {
|
||||
health = 0;
|
||||
modeProcInit(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
if(cLib_calcTimer(&field_0x440) == 0) {
|
||||
CcAtInfo atInfo;
|
||||
atInfo.pParticlePos = NULL;
|
||||
cCcD_Obj* tg = mSph.GetTgHitObj();
|
||||
cXyz hitPos = *mSph.GetTgHitPosP();
|
||||
atInfo.mpObj = mSph.GetTgHitObj();
|
||||
if (tg == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hit = true;
|
||||
switch(tg->GetAtType()) {
|
||||
case AT_TYPE_BOMB:
|
||||
health -= 2;
|
||||
break;
|
||||
case AT_TYPE_BOOMERANG:
|
||||
field_0x46A = 0x190;
|
||||
fopAcM_seStart(this, JA_SE_LK_W_WEP_HIT, 0x20);
|
||||
health -= 1;
|
||||
break;
|
||||
default:
|
||||
hit = false;
|
||||
}
|
||||
|
||||
if(hit) {
|
||||
field_0x440 = 5;
|
||||
dComIfGp_particle_set(dPa_name::ID_COMMON_0010, &hitPos);
|
||||
|
||||
if(health <= 0) {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
cXyz particleScale(2.0f, 2.0f, 2.0f);
|
||||
dComIfGp_particle_set(dPa_name::ID_COMMON_BIG_HIT, &hitPos, &player->shape_angle, &particleScale);
|
||||
fopAcM_seStart(this, JA_SE_LK_LAST_HIT, 0);
|
||||
modeProcInit(2);
|
||||
}
|
||||
else {
|
||||
modeProcInit(0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 0000082C-00000990 .text attackCannon__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::attackCannon() {
|
||||
/* Nonmatching */
|
||||
csXyz angle;
|
||||
angle.set(shape_angle.x - field_0x2CA, shape_angle.y + field_0x2C6, shape_angle.z);
|
||||
daBomb_c* bomb = (daBomb_c*)fopAcM_fastCreate(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_4, true, true), &field_0x450, tevStr.mRoomNo, &angle);
|
||||
bomb->setNoGravityTime(l_HIO.field_0x28);
|
||||
bomb->speedF = l_HIO.field_0x20 * cM_scos(angle.x);
|
||||
bomb->speed.y = -(l_HIO.field_0x20 * cM_ssin(angle.x));
|
||||
bomb->gravity = l_HIO.field_0x24;
|
||||
|
||||
field_0x46A = 0xC8;
|
||||
|
||||
mDoAud_seStart(JA_SE_LK_SHIP_CANNON_FIRE, &field_0x450);
|
||||
}
|
||||
|
||||
/* 00000990-00000B4C .text lockonCannon__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::lockonCannon() {
|
||||
/* Nonmatching */
|
||||
f32 temp2 = (current.pos - field_0x2CC).absXZ();
|
||||
|
||||
field_0x2C4 = cLib_targetAngleY(¤t.pos, &field_0x2CC) - shape_angle.y;
|
||||
s16 temp3 = 0;
|
||||
if(temp2 > l_HIO.field_0x2C) {
|
||||
temp2 -= l_HIO.field_0x2C;
|
||||
temp3 = temp2;
|
||||
if(temp3 > l_HIO.field_0x30) {
|
||||
temp3 = l_HIO.field_0x30;
|
||||
}
|
||||
}
|
||||
field_0x2C8 = temp3 + cLib_targetAngleX(¤t.pos, &field_0x2CC);
|
||||
field_0x2C8 = cLib_minMaxLimit(field_0x2C8, l_HIO.field_0x34, l_HIO.field_0x32);
|
||||
field_0x2C4 = cLib_minMaxLimit(field_0x2C4, l_HIO.field_0x38, l_HIO.field_0x36);
|
||||
}
|
||||
|
||||
/* 00000B4C-00000BA8 .text setAttention__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::setAttention() {
|
||||
/* Nonmatching */
|
||||
attention_info.position = field_0x45C;
|
||||
attention_info.position.y += l_HIO.field_0x0C;
|
||||
eyePos = field_0x45C;
|
||||
eyePos.y += l_HIO.field_0x10;
|
||||
}
|
||||
|
||||
/* 00000BA8-00000C2C .text setCollision__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::setCollision() {
|
||||
/* Nonmatching */
|
||||
mSph.SetR((80.0f + REG12_F(0)) * scale.x);
|
||||
mSph.SetC(field_0x45C);
|
||||
|
||||
if(mCurMode != 2 && mCurMode != 3) {
|
||||
dComIfG_Ccsp()->Set(&mSph);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000C2C-00000CB4 .text setMtx__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::setMtx() {
|
||||
/* Nonmatching */
|
||||
mpModel->setBaseScale(scale);
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 00000CB4-00000CC8 .text modeWaitInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeWaitInit() {
|
||||
/* Nonmatching */
|
||||
field_0x444 = l_HIO.field_0x3E;
|
||||
}
|
||||
|
||||
/* 00000CC8-00001064 .text modeWait__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeWait() {
|
||||
/* Nonmatching */
|
||||
if(!checkTgHit()) {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
|
||||
if(dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK1000000_e)) {
|
||||
field_0x444 = l_HIO.field_0x3E * 10;
|
||||
field_0x488 = 0;
|
||||
}
|
||||
|
||||
daShip_c* ship = dComIfGp_getShipActor();
|
||||
if(ship && ship->checkShootCannon()) {
|
||||
field_0x488++;
|
||||
}
|
||||
|
||||
if(cLib_calcTimer(&field_0x444) == 0) {
|
||||
if(field_0x298.chkInside(&player->current.pos)) {
|
||||
s16 temp = l_HIO.field_0x08;
|
||||
|
||||
f32 abs = (current.pos - field_0x2CC).absXZ();
|
||||
if(abs > l_HIO.field_0x40) {
|
||||
temp = temp + (abs - l_HIO.field_0x40) * l_HIO.field_0x44;
|
||||
}
|
||||
|
||||
field_0x2CC = daPy_getPlayerActorClass()->current.pos;
|
||||
|
||||
if(field_0x298.chkInside(&field_0x2CC)) {
|
||||
if(dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK1000000_e | daPyStts0_SWIM_e)) {
|
||||
field_0x488 = 0;
|
||||
temp += 3000.0f;
|
||||
}
|
||||
else if(abs > l_HIO.field_0x40 && field_0x488 < 6) {
|
||||
temp += 200.0f * (6 - field_0x488);
|
||||
}
|
||||
|
||||
s16 temp2 = fopAcM_searchActorAngleY(this, daPy_getPlayerActorClass());
|
||||
|
||||
field_0x2CC.x -= temp * cM_ssin(temp2);
|
||||
field_0x2CC.z -= temp * cM_scos(temp2);
|
||||
|
||||
field_0x444 = l_HIO.field_0x3E;
|
||||
|
||||
modeProcInit(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
field_0x2C8 = 0;
|
||||
field_0x2C4 = 0;
|
||||
field_0x444 = l_HIO.field_0x3E;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001064-00001078 .text modeAttackInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeAttackInit() {
|
||||
/* Nonmatching */
|
||||
field_0x444 = l_HIO.field_0x3C;
|
||||
}
|
||||
|
||||
/* 00001078-000010DC .text modeAttack__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeAttack() {
|
||||
/* Nonmatching */
|
||||
if(!checkTgHit()) {
|
||||
lockonCannon();
|
||||
|
||||
if(cLib_calcTimer(&field_0x444) == 0) {
|
||||
attackCannon();
|
||||
modeProcInit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 000010DC-00001174 .text modeDeleteInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeDeleteInit() {
|
||||
/* Nonmatching */
|
||||
field_0x46A = 0;
|
||||
|
||||
if(field_0x295 != 0xFF) {
|
||||
dComIfGs_onSwitch(field_0x295, fopAcM_GetRoomNo(this));
|
||||
}
|
||||
|
||||
setEffect(dPa_name::ID_SCENE_82E4);
|
||||
setEffect(dPa_name::ID_SCENE_82E5);
|
||||
setEffect(dPa_name::ID_SCENE_82E6);
|
||||
setEffect(dPa_name::ID_COMMON_03E1);
|
||||
|
||||
fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e | 0x1F);
|
||||
}
|
||||
|
||||
/* 00001174-00001178 .text modeDelete__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeDelete() {
|
||||
/* Nonmatching */
|
||||
return;
|
||||
}
|
||||
|
||||
/* 00001178-00001194 .text modeSwWaitInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeSwWaitInit() {
|
||||
/* Nonmatching */
|
||||
field_0x46C = 120.0f;
|
||||
fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e | 0x1F);
|
||||
}
|
||||
|
||||
/* 00001194-000011F4 .text modeSwWait__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeSwWait() {
|
||||
/* Nonmatching */
|
||||
if(field_0x296 != 0xFF) {
|
||||
if(dComIfGs_isSwitch(field_0x296, fopAcM_GetRoomNo(this))) {
|
||||
modeProcInit(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 000011F4-0000121C .text modeAppearInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeAppearInit() {
|
||||
/* Nonmatching */
|
||||
field_0x46A = 0x258;
|
||||
field_0x46C = 120.0f;
|
||||
fopAcM_SetStatusMap(this, 0x15);
|
||||
}
|
||||
|
||||
/* 0000121C-00001290 .text modeAppear__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::modeAppear() {
|
||||
/* Nonmatching */
|
||||
cLib_addCalc2(&field_0x46C, 0.0f, 0.1f, 1.0f);
|
||||
if(field_0x46C < 2.0f) {
|
||||
field_0x46C = 0.0f;
|
||||
modeProcInit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001290-00001410 .text modeProc__13daObj_Canon_cFQ213daObj_Canon_c6Proc_ei */
|
||||
void daObj_Canon_c::modeProc(daObj_Canon_c::Proc_e, int) {
|
||||
/* Nonmatching */
|
||||
void daObj_Canon_c::modeProc(daObj_Canon_c::Proc_e proc, int newMode) {
|
||||
typedef void(daObj_Canon_c::*mode_func_t)(void);
|
||||
struct mode_entry_t {
|
||||
mode_func_t init;
|
||||
mode_func_t run;
|
||||
const char* name;
|
||||
};
|
||||
|
||||
static mode_entry_t mode_tbl[] = {
|
||||
{
|
||||
&daObj_Canon_c::modeWaitInit,
|
||||
&daObj_Canon_c::modeWait,
|
||||
"WAIT",
|
||||
},
|
||||
{
|
||||
&daObj_Canon_c::modeAttackInit,
|
||||
&daObj_Canon_c::modeAttack,
|
||||
"ATTACK",
|
||||
},
|
||||
{
|
||||
&daObj_Canon_c::modeDeleteInit,
|
||||
&daObj_Canon_c::modeDelete,
|
||||
"DELETE",
|
||||
},
|
||||
{
|
||||
&daObj_Canon_c::modeSwWaitInit,
|
||||
&daObj_Canon_c::modeSwWait,
|
||||
"SW_WAIT",
|
||||
},
|
||||
{
|
||||
&daObj_Canon_c::modeAppearInit,
|
||||
&daObj_Canon_c::modeAppear,
|
||||
"APPEAR",
|
||||
},
|
||||
};
|
||||
|
||||
if(proc == PROC_INIT) {
|
||||
mCurMode = newMode;
|
||||
(this->*mode_tbl[mCurMode].init)();
|
||||
}
|
||||
else if(proc == PROC_EXEC) {
|
||||
(this->*mode_tbl[mCurMode].run)();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001410-000015AC .text _execute__13daObj_Canon_cFv */
|
||||
bool daObj_Canon_c::_execute() {
|
||||
/* Nonmatching */
|
||||
cLib_addCalcAngleS2(&field_0x46A, 0, 0xA, 0xA);
|
||||
cLib_addCalcAngleS2(&field_0x2CA, field_0x2C8, 0x6, 0x300);
|
||||
cLib_addCalcAngleS2(&field_0x2C6, field_0x2C4, 0x6, 0x300);
|
||||
|
||||
setAttention();
|
||||
setCollision();
|
||||
|
||||
modeProc(PROC_EXEC, 5);
|
||||
|
||||
mpModel->calc();
|
||||
Vec temp = {0.0f, 0.0f, 0.0f};
|
||||
temp.x = l_HIO.field_0x14;
|
||||
temp.y = l_HIO.field_0x18 * scale.x;
|
||||
temp.z = l_HIO.field_0x1C;
|
||||
mDoMtx_multVec(mpModel->getAnmMtx(3), &temp, &field_0x450);
|
||||
Vec temp2 = {0.0f, 0.0f, 0.0f};
|
||||
temp2.x = REG12_F(0);
|
||||
temp2.y = (REG12_F(1) + 60.0f) * scale.x;
|
||||
temp2.z = REG12_F(2);
|
||||
mDoMtx_multVec(mpModel->getAnmMtx(3), &temp2, &field_0x45C);
|
||||
|
||||
if(field_0x470.getEmitter()) {
|
||||
if(cLib_calcTimer(&field_0x484) == 0) {
|
||||
field_0x470.end();
|
||||
}
|
||||
}
|
||||
|
||||
setMtx();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 000015AC-000015B0 .text debugDraw__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::debugDraw() {
|
||||
/* Nonmatching */
|
||||
GXColor col = {0xFF, 0x00, 0x00, 0x80};
|
||||
GXColor col2 = {0xFF, 0x00, 0x00, 0x80};
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* 000015B0-00001688 .text _draw__13daObj_Canon_cFv */
|
||||
bool daObj_Canon_c::_draw() {
|
||||
/* Nonmatching */
|
||||
if(l_HIO.debug_draw) {
|
||||
debugDraw();
|
||||
}
|
||||
|
||||
if(mCurMode == 2 || mCurMode == 3) {
|
||||
mpModel->getModelData()->getJointNodePointer(3)->getMesh()->getShape()->hide();
|
||||
}
|
||||
else {
|
||||
mpModel->getModelData()->getJointNodePointer(3)->getMesh()->getShape()->show();
|
||||
}
|
||||
|
||||
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
||||
mDoExt_modelEntryDL(mpModel);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00001688-00001804 .text createInit__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::createInit() {
|
||||
/* Nonmatching */
|
||||
if(field_0x295 != 0xFF && dComIfGs_isSwitch(field_0x295, fopAcM_GetRoomNo(this))) {
|
||||
modeProcInit(2);
|
||||
}
|
||||
else if(field_0x296 != 0xFF && !dComIfGs_isSwitch(field_0x296, fopAcM_GetRoomNo(this))) {
|
||||
modeProcInit(3);
|
||||
}
|
||||
else {
|
||||
modeProcInit(0);
|
||||
}
|
||||
|
||||
max_health = 2;
|
||||
health = max_health;
|
||||
|
||||
field_0x2B0 = dPath_GetRoomPath(field_0x294, fopAcM_GetRoomNo(this));
|
||||
field_0x298.setInfDrct(field_0x2B0);
|
||||
|
||||
setMtx();
|
||||
|
||||
mpModel->calc();
|
||||
|
||||
f32 temp = scale.x;
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, -100.0f * temp, -100.0f * temp, -10.0f * temp, 100.0f * temp, 100.0f * temp, 150.0f * temp);
|
||||
fopAcM_setCullSizeFar(this, 10.0f);
|
||||
|
||||
mStts.Init(0xFF, 0xFF, this);
|
||||
mSph.Set(m_sph_src);
|
||||
mSph.SetStts(&mStts);
|
||||
}
|
||||
|
||||
/* 00001804-00001880 .text getArg__13daObj_Canon_cFv */
|
||||
void daObj_Canon_c::getArg() {
|
||||
/* Nonmatching */
|
||||
u8 daObj_Canon_c::getArg() {
|
||||
u32 param = fopAcM_GetParam(this);
|
||||
field_0x297 = fopAcM_GetParamBit(param, 0, 0xFF);
|
||||
field_0x296 = fopAcM_GetParamBit(param, 8, 0xFF);
|
||||
field_0x294 = fopAcM_GetParamBit(param, 16, 0xFF);
|
||||
field_0x295 = fopAcM_GetParamBit(param, 24, 0xFF);
|
||||
if(field_0x297 != 0xFF) {
|
||||
scale.set(1.0 + field_0x297 * 0.1, 1.0 + field_0x297 * 0.1, 1.0 + field_0x297 * 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00001880-000019D8 .text _create__13daObj_Canon_cFv */
|
||||
cPhs_State daObj_Canon_c::_create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetupActor(this, daObj_Canon_c);
|
||||
|
||||
int result = dComIfG_resLoad(&mPhs, m_arc_name);
|
||||
if(result == cPhs_COMPLEATE_e) {
|
||||
getArg();
|
||||
|
||||
if(field_0x294 == 0xFF) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
if(!fopAcM_entrySolidHeap(this, createHeap_CB, 0x8C0)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
createInit();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* 00001BEC-00001C50 .text _delete__13daObj_Canon_cFv */
|
||||
bool daObj_Canon_c::_delete() {
|
||||
/* Nonmatching */
|
||||
dComIfG_resDelete(&mPhs, m_arc_name);
|
||||
field_0x470.end();
|
||||
mDoAud_seDeleteObject(&field_0x450);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00001C50-00001C70 .text daObj_CanonCreate__FPv */
|
||||
|
||||
Reference in New Issue
Block a user