mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-10 11:13:45 -04:00
d_a_obj_pirateship (#836)
This commit is contained in:
+1
-1
@@ -1420,7 +1420,7 @@ config.libs = [
|
||||
ActorRel(Matching, "d_a_obj_ohatch"),
|
||||
ActorRel(NonMatching, "d_a_obj_otble"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pbco"),
|
||||
ActorRel(NonMatching, "d_a_obj_pirateship"),
|
||||
ActorRel(Equivalent, "d_a_obj_pirateship", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_quake"),
|
||||
ActorRel(NonMatching, "d_a_obj_rcloud"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_roten", extra_cflags=['-pragma "nosyminline on"']),
|
||||
|
||||
@@ -2,17 +2,33 @@
|
||||
#define D_A_OBJ_PIRATESHIP_H
|
||||
|
||||
#include "d/d_bg_s_movebg_actor.h"
|
||||
#include "d/d_bg_s_acch.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/d_bg_s_gnd_chk.h"
|
||||
|
||||
class dPath;
|
||||
class JPABaseEmitter;
|
||||
class daKnob00_c;
|
||||
|
||||
namespace daObjPirateship {
|
||||
f32 getShipOffsetY(s16*, s16*, f32);
|
||||
|
||||
class Act_c : public dBgS_MoveBgActor {
|
||||
struct PirateOffset {
|
||||
/* 0x00 */ char* name;
|
||||
/* 0x04 */ u32 params;
|
||||
/* 0x08 */ Vec pos;
|
||||
/* 0x14 */ SVec angle;
|
||||
/* 0x1A */ u8 m1A;
|
||||
}; // size = 0x1C
|
||||
|
||||
static PirateOffset p_offset[];
|
||||
|
||||
public:
|
||||
inline cPhs_State _create();
|
||||
inline bool _delete();
|
||||
inline bool _draw();
|
||||
inline bool _execute();
|
||||
bool _execute();
|
||||
void getKajiID() {}
|
||||
|
||||
void set_mtx();
|
||||
@@ -27,17 +43,46 @@ namespace daObjPirateship {
|
||||
virtual BOOL Execute(Mtx**);
|
||||
virtual BOOL Draw();
|
||||
virtual BOOL Delete();
|
||||
void demo_move();
|
||||
BOOL demo_move();
|
||||
|
||||
static const char mArcname[];
|
||||
|
||||
public:
|
||||
/* 0x2C8 */ u8 m2C8[0x2CC - 0x2C8];
|
||||
/* 0x2C8 */ u8 m2C8[0x2CA - 0x2C8];
|
||||
/* 0x2CA */ s16 m2CA;
|
||||
/* 0x2CC */ u8 m2CC;
|
||||
/* 0x2CD */ u8 m2CD[0x2CE - 0x2CD];
|
||||
/* 0x2CD */ u8 m2CD;
|
||||
/* 0x2CE */ u8 m2CE;
|
||||
/* 0x2CF */ u8 m2CF[0x2D0 - 0x2CF];
|
||||
/* 0x2D0 */ J3DModel* mpModel;
|
||||
/* 0x2D4 */ u8 m2D4[0x6D4 - 0x2D4];
|
||||
};
|
||||
/* 0x2D0 */ J3DModel* mModel;
|
||||
/* 0x2D4 */ request_of_phase_process_class mPhase;
|
||||
/* 0x2DC */ u8 m2DC[0x2E4 - 0x2DC];
|
||||
/* 0x2E4 */ fopAc_ac_c* m2E4;
|
||||
/* 0x2E8 */ fpc_ProcID m_sail_id;
|
||||
/* 0x2EC */ fopAc_ac_c* m2EC;
|
||||
/* 0x2F0 */ fpc_ProcID m2F0;
|
||||
/* 0x2F4 */ u8 m2F4[0x2F8 - 0x2F4];
|
||||
/* 0x2F8 */ fpc_ProcID m2F8;
|
||||
/* 0x2FC */ fopAc_ac_c* m2FC;
|
||||
/* 0x300 */ fpc_ProcID m300;
|
||||
/* 0x304 */ daKnob00_c* m304;
|
||||
/* 0x308 */ fpc_ProcID m308;
|
||||
/* 0x30C */ cXyz m30C;
|
||||
/* 0x318 */ cXyz m318;
|
||||
/* 0x324 */ u8 m324[0x32E - 0x324];
|
||||
/* 0x32E */ s16 m32E;
|
||||
/* 0x330 */ s16 m330;
|
||||
/* 0x332 */ u8 m332[0x338 - 0x332];
|
||||
/* 0x338 */ dCcD_Stts m338;
|
||||
/* 0x374 */ dCcD_Cyl mCyl;
|
||||
/* 0x4A4 */ s8 m4A4;
|
||||
/* 0x4A8 */ dPath* m4A8;
|
||||
/* 0x4AC */ dPa_trackEcallBack m4AC;
|
||||
/* 0x4FC */ JPABaseEmitter* m4FC;
|
||||
/* 0x500 */ GXColor m500;
|
||||
/* 0x504 */ dBgS_ObjAcch m504;
|
||||
/* 0x6C8 */ cXyz m6C8;
|
||||
}; // size = 0x6D4
|
||||
|
||||
namespace Method {
|
||||
cPhs_State Create(void*);
|
||||
|
||||
@@ -76,7 +76,7 @@ bool daKaji_c::_execute() {
|
||||
cXyz offset(0.0f, 740.0f, -858.0f);
|
||||
offset.y += REG10_F(10);
|
||||
offset.z += REG10_F(11);
|
||||
cMtx_multVec(l_p_ship->mpModel->getBaseTRMtx(), &offset, ¤t.pos);
|
||||
cMtx_multVec(l_p_ship->mModel->getBaseTRMtx(), &offset, ¤t.pos);
|
||||
|
||||
daObjPirateship::Act_c* ship = l_p_ship;
|
||||
shape_angle = ship->shape_angle;
|
||||
|
||||
@@ -4,119 +4,582 @@
|
||||
*/
|
||||
|
||||
#include "d/actor/d_a_obj_pirateship.h"
|
||||
#include "d/actor/d_a_knob00.h"
|
||||
#include "d/res/res_kaizokusen.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_particle.h"
|
||||
#include "d/d_priority.h"
|
||||
#include "d/d_path.h"
|
||||
#include "d/d_lib.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "m_Do/m_Do_hostIO.h"
|
||||
|
||||
class dBgW;
|
||||
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
|
||||
#include "weak_data_1811.h" // IWYU pragma: keep
|
||||
|
||||
class daObjPirateShipHIO_c : public JORReflexible {
|
||||
public:
|
||||
daObjPirateShipHIO_c() {
|
||||
mNo = -1;
|
||||
m08 = 2.0f;
|
||||
m0C = 100.0f;
|
||||
m05 = 0;
|
||||
m06 = 0;
|
||||
m10 = 250;
|
||||
m12 = 500;
|
||||
m14 = 0;
|
||||
m18 = cXyz::Zero;
|
||||
m24 = 4.0f;
|
||||
m28 = -0.02f;
|
||||
m2C = 5.0f;
|
||||
m30 = 300.0f;
|
||||
m34 = 3.0f;
|
||||
m38 = 17.0f;
|
||||
}
|
||||
virtual ~daObjPirateShipHIO_c() {}
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
public:
|
||||
/* 0x04 */ s8 mNo;
|
||||
/* 0x05 */ u8 m05;
|
||||
/* 0x06 */ s16 m06;
|
||||
/* 0x08 */ f32 m08;
|
||||
/* 0x0C */ f32 m0C;
|
||||
/* 0x10 */ s16 m10;
|
||||
/* 0x12 */ s16 m12;
|
||||
/* 0x14 */ s8 m14;
|
||||
/* 0x18 */ cXyz m18;
|
||||
/* 0x24 */ f32 m24;
|
||||
/* 0x28 */ f32 m28;
|
||||
/* 0x2C */ f32 m2C;
|
||||
/* 0x30 */ f32 m30;
|
||||
/* 0x34 */ f32 m34;
|
||||
/* 0x38 */ f32 m38;
|
||||
}; // size = 0x3C
|
||||
|
||||
static daObjPirateShipHIO_c l_HIO;
|
||||
|
||||
namespace daObjPirateship {
|
||||
daObjPirateship::Act_c::PirateOffset daObjPirateship::Act_c::p_offset[] = {
|
||||
{
|
||||
"P2a",
|
||||
0xFFFFFF00,
|
||||
{135.5f, 2200.0f, 198.0f},
|
||||
{0, 0x2900, 0},
|
||||
0,
|
||||
},
|
||||
{
|
||||
"P2c",
|
||||
0xFFFFFF02,
|
||||
{275.0f, 400.0f, 216.0f},
|
||||
{0, 0x4D00, 0},
|
||||
02,
|
||||
},
|
||||
{
|
||||
"P1b",
|
||||
0xF0100000,
|
||||
{-150.0f, 700.0f, 950.0f},
|
||||
{0, 0x4000, 0},
|
||||
01,
|
||||
},
|
||||
{
|
||||
"P1a",
|
||||
0xF0000000,
|
||||
{150.0f, 700.0f, 950.0f},
|
||||
{0, 0xC000, 0},
|
||||
00,
|
||||
},
|
||||
{
|
||||
"Zl1",
|
||||
0xFFFFFF04,
|
||||
{-200.0f, 680.0f, -875.0f},
|
||||
{0, 0, 0},
|
||||
0xFF,
|
||||
},
|
||||
{
|
||||
"P1b",
|
||||
0xF0100002,
|
||||
{163.0f, 700.0f, 822.0f},
|
||||
{0, 0xC000, 0},
|
||||
01,
|
||||
},
|
||||
{
|
||||
"P1a",
|
||||
0xF0000002,
|
||||
{0.0f, 750.0f, -860.0f},
|
||||
{0, 0, 0},
|
||||
00,
|
||||
},
|
||||
{
|
||||
"Zl1",
|
||||
0xFFFFFF03,
|
||||
{125.0f, 2200.0f, 100.0f},
|
||||
{0, 0, 0},
|
||||
0xFF,
|
||||
},
|
||||
{
|
||||
"P2a",
|
||||
0xFFFFFF00,
|
||||
{-200.0f, 680.0f, -875.0f},
|
||||
{0, 0, 0},
|
||||
00,
|
||||
},
|
||||
{
|
||||
"P1b",
|
||||
0xF0100003,
|
||||
{215.0f, 700.0f, 765.0f},
|
||||
{0, 0x3C00, 0},
|
||||
01,
|
||||
},
|
||||
{
|
||||
"P1a",
|
||||
0xF0000003,
|
||||
{275.0f, 740.0f, -1145.0f},
|
||||
{0, 0x1800, 0},
|
||||
00,
|
||||
},
|
||||
};
|
||||
static int create_idx_tbl_1stIsland[] = {0, 1, 2, 3, -1};
|
||||
static int create_idx_tbl_1stIsland_demo[] = {2, -1};
|
||||
static int create_idx_tbl_umikz[] = {0, 1, 4, 5, 6, -1};
|
||||
static int create_idx_tbl_arriveMj[] = {1, 7, 8, 9, 10, -1};
|
||||
static int create_idx_tbl_Yuukaigo[] = {0, 1, 5, -1};
|
||||
} // namespace daObjPirateship
|
||||
|
||||
/* 000000EC-000000FC .text ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
|
||||
void ride_call_back(dBgW*, fopAc_ac_c*, fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
void ride_call_back(dBgW*, fopAc_ac_c*, fopAc_ac_c* arg2) {
|
||||
fopAcM_OffStatus(arg2, fopAcStts_NOCULLEXEC_e);
|
||||
}
|
||||
|
||||
/* 000000FC-00000220 .text path_move_call_back__FP4cXyzP4cXyzP4cXyzPv */
|
||||
void path_move_call_back(cXyz*, cXyz*, cXyz*, void*) {
|
||||
/* Nonmatching */
|
||||
int path_move_call_back(cXyz* arg0, cXyz* arg1, cXyz* arg2, void* v_this) {
|
||||
daObjPirateship::Act_c* i_this = (daObjPirateship::Act_c*)v_this;
|
||||
|
||||
cXyz sp2C(arg1->x, i_this->current.pos.y, arg1->z);
|
||||
cXyz sp20(arg2->x, i_this->current.pos.y, arg2->z);
|
||||
cXyz sp14 = sp20 - sp2C;
|
||||
if (!sp14.normalizeRS()) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
s16 uVar2 = cLib_addCalcAngleS(&i_this->current.angle.y, cM_atan2s(sp14.x, sp14.z), 0x40, 0x40, 8);
|
||||
i_this->shape_angle.y = i_this->current.angle.y;
|
||||
|
||||
f32 tmp = std::fabsf(cM_scos(uVar2)) * (l_HIO.m08 + 5.0f);
|
||||
if (cLib_chasePos(arg0, sp20, tmp)) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const char daObjPirateship::Act_c::mArcname[] = "Kaizokusen";
|
||||
|
||||
/* 0000025C-000003B0 .text set_mtx__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
mModel->setBaseScale(scale);
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);
|
||||
mModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
if (m304 != NULL) {
|
||||
static cXyz offset(0.0f, 400.0f, 475.0f);
|
||||
|
||||
cXyz sp0C;
|
||||
daKnob00_c* knob = m304;
|
||||
mDoMtx_stack_c::copy(mModel->getBaseTRMtx());
|
||||
mDoMtx_stack_c::multVec(&offset, &sp0C);
|
||||
knob->setPosAndAngle(&sp0C, shape_angle.y - -0x8000);
|
||||
} else {
|
||||
m304 = (daKnob00_c*)fopAcM_SearchByID(m308);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000003B0-00000448 .text pirateCreate__Q215daObjPirateship5Act_cFPi */
|
||||
void daObjPirateship::Act_c::pirateCreate(int*) {
|
||||
/* Nonmatching */
|
||||
void daObjPirateship::Act_c::pirateCreate(int* arg1) {
|
||||
m2CD = 1;
|
||||
while (*arg1 != -1) {
|
||||
fopAcM_createChildFromOffset(
|
||||
p_offset[*arg1].name,
|
||||
fopAcM_GetID(this),
|
||||
p_offset[*arg1].params,
|
||||
(cXyz*)&p_offset[*arg1].pos,
|
||||
tevStr.mRoomNo,
|
||||
(csXyz*)&p_offset[*arg1].angle,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
arg1++;
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000448-00000814 .text partsCreate__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::partsCreate() {
|
||||
/* Nonmatching */
|
||||
static u32 dr_prm[] = {0x101000FF, 0x101004FF};
|
||||
|
||||
u8 uVar2 = fopAcM_GetParam(this) >> 0x18;
|
||||
m_sail_id = fopAcM_createChild("Psail", fopAcM_GetID(this), 0, ¤t.pos, tevStr.mRoomNo, ¤t.angle);
|
||||
JUT_ASSERT(DEMO_SELECT(282, 282), (m_sail_id != fpcM_ERROR_PROCESS_ID_e));
|
||||
|
||||
m2F0 = fopAcM_createChild(PROC_PIRATE_FLAG, fopAcM_GetID(this), 0, ¤t.pos, tevStr.mRoomNo, ¤t.angle);
|
||||
|
||||
if (uVar2 != 3) {
|
||||
cXyz sp30 = current.pos;
|
||||
sp30.y += 700.0f;
|
||||
sp30.x += cM_ssin(current.angle.y) * 850.0f;
|
||||
sp30.z += cM_scos(current.angle.y) * 850.0f;
|
||||
m2F8 = fopAcM_createChild(PROC_Obj_Tousekiki, fopAcM_GetID(this), 0, &sp30, tevStr.mRoomNo, ¤t.angle);
|
||||
}
|
||||
|
||||
if (uVar2 != 3) {
|
||||
cXyz sp24 = current.pos;
|
||||
sp24.y += 838.0f;
|
||||
sp24.x += cM_ssin(current.angle.y) * -788.0f;
|
||||
sp24.z += cM_scos(current.angle.y) * -788.0f;
|
||||
|
||||
m300 = fopAcM_createChild(PROC_Kaji, fopAcM_GetID(this), 0, &sp24, tevStr.mRoomNo, ¤t.angle);
|
||||
}
|
||||
|
||||
cXyz sp18 = current.pos;
|
||||
csXyz sp10(0xFFF, current.angle.y - -0x8000, 0);
|
||||
s32 uVar3 = (fopAcM_GetParam(this) >> 8) & 0xff;
|
||||
|
||||
s16 sVar6 = 0;
|
||||
if (dComIfGs_isEventBit(0x520)) {
|
||||
sVar6 = 0x1B18;
|
||||
}
|
||||
sp10.z = sVar6;
|
||||
|
||||
sp18.y += 400.0f;
|
||||
sp18.x += cM_ssin(current.angle.y) * 475.0f;
|
||||
sp18.z += cM_scos(current.angle.y) * 475.0f;
|
||||
|
||||
m308 = fopAcM_createChild(PROC_KNOB00, fopAcM_GetID(this), dr_prm[uVar3], &sp18, tevStr.mRoomNo, &sp10);
|
||||
m304 = NULL;
|
||||
}
|
||||
|
||||
/* 00000814-0000095C .text sound_proc__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::sound_proc() {
|
||||
/* Nonmatching */
|
||||
if (m2CC == 1) {
|
||||
mDoMtx_stack_c::copy(mModel->getBaseTRMtx());
|
||||
if (strcmp(dComIfGp_getStartStageName(), "A_umikz") == 0) {
|
||||
cXyz sp14(0.0f, 800.0f, 2000.0f);
|
||||
mDoMtx_stack_c::multVec(&sp14, &m30C);
|
||||
mDoAud_seStart(JA_SE_OBJ_PIRATE_CRUISE, &m30C);
|
||||
}
|
||||
|
||||
if (m2CE != 0) {
|
||||
cXyz sp08(0.0f, 1500.0f, 300.0f);
|
||||
mDoMtx_stack_c::multVec(&sp08, &m318);
|
||||
mDoAud_seStart(JA_SE_OBJ_PIRATE_SAIL, &m318);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 0000095C-00000A50 .text CreateHeap__Q215daObjPirateship5Act_cFv */
|
||||
BOOL daObjPirateship::Act_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mArcname, KAIZOKUSEN_INDEX_BDL_OBA_KAIZOKU_A);
|
||||
JUT_ASSERT(DEMO_SELECT(374, 374), modelData != NULL);
|
||||
|
||||
mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
|
||||
if (l_HIO.mNo < 0) {
|
||||
l_HIO.mNo = mDoHIO_createChild("海賊船", &l_HIO);
|
||||
}
|
||||
return mModel != NULL;
|
||||
}
|
||||
|
||||
/* 00000A50-00000B9C .text CreateWave__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::CreateWave() {
|
||||
/* Nonmatching */
|
||||
m6C8 = current.pos;
|
||||
if (m4AC.getEmitter() == NULL) {
|
||||
dComIfGp_particle_setShipTail(0x8315, &m6C8, ¤t.angle, NULL, 0, &m4AC);
|
||||
JPABaseEmitter* emitter = m4AC.getEmitter();
|
||||
if (emitter != NULL) {
|
||||
const JGeometry::TVec3<f32> scale = (Vec){20.0f, 20.0f, 20.0f};
|
||||
|
||||
emitter->setGlobalDynamicsScale(scale);
|
||||
emitter->setGlobalParticleScale(scale);
|
||||
}
|
||||
}
|
||||
#if VERSION > VERSION_JPN
|
||||
if (m4FC == NULL)
|
||||
#endif
|
||||
{
|
||||
GXColor sea_color;
|
||||
dKy_get_seacolor(&m500, &sea_color);
|
||||
m4FC = dComIfGp_particle_set(0x833d, ¤t.pos, ¤t.angle, NULL, 0xff, NULL, -1, &m500);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000B9C-00000CEC .text SetWave__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::SetWave() {
|
||||
/* Nonmatching */
|
||||
if (m4AC.getEmitter() != NULL) {
|
||||
const JGeometry::TVec3<f32> scale(l_HIO.m24, l_HIO.m24, l_HIO.m24);
|
||||
m4AC.getEmitter()->setGlobalScale(scale);
|
||||
|
||||
mDoMtx_stack_c::copy(mModel->getBaseTRMtx());
|
||||
mDoMtx_stack_c::multVec(&l_HIO.m18, &m6C8);
|
||||
|
||||
m4AC.setWaterY(m6C8.y);
|
||||
m4AC.setIndirectTexData(l_HIO.m28, l_HIO.m2C);
|
||||
m4AC.setSpeed(l_HIO.m30);
|
||||
m4AC.setWaterFlatY(m504.ChkWaterHit() ? m504.m_wtr.GetHeight() : m6C8.y);
|
||||
m4AC.setLimitSpeed(l_HIO.m34);
|
||||
m4AC.getEmitter()->setDirectionalSpeed(l_HIO.m38);
|
||||
}
|
||||
|
||||
if (m4FC != NULL) {
|
||||
GXColor sea_color;
|
||||
dKy_get_seacolor(&m500, &sea_color);
|
||||
m4FC->setGlobalPrmColor(m500.r, m500.g, m500.b);
|
||||
|
||||
#if VERSION > VERSION_JPN
|
||||
m4FC->setGlobalTranslation(current.pos.x, current.pos.y, current.pos.z);
|
||||
const JGeometry::TVec3<s16> rot(current.angle.x, current.angle.y, current.angle.z);
|
||||
m4FC->setGlobalRotation(rot);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000CEC-00000D38 .text DeleteWave__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::DeleteWave() {
|
||||
/* Nonmatching */
|
||||
if (m4FC != NULL) {
|
||||
m4FC->becomeInvalidEmitter();
|
||||
m4FC = NULL;
|
||||
}
|
||||
m4AC.remove();
|
||||
}
|
||||
|
||||
/* 00000D38-00000DA4 .text Create__Q215daObjPirateship5Act_cFv */
|
||||
BOOL daObjPirateship::Act_c::Create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetMtx(this, mModel->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, -1400.0f, -200.0f, -1800.0f, 1400.0f, 3300.0f, 2200.0f);
|
||||
fopAcM_setCullSizeFar(this, 10.0f);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000DA4-00000DB4 .text Execute__Q215daObjPirateship5Act_cFPPA3_A4_f */
|
||||
BOOL daObjPirateship::Act_c::Execute(Mtx**) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjPirateship::Act_c::Execute(Mtx** mtx) {
|
||||
*mtx = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000DB4-00000E68 .text Draw__Q215daObjPirateship5Act_cFv */
|
||||
BOOL daObjPirateship::Act_c::Draw() {
|
||||
/* Nonmatching */
|
||||
if (!m2CC) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType(mModel, &tevStr);
|
||||
|
||||
dComIfGd_setListBG();
|
||||
mDoExt_modelUpdateDL(mModel);
|
||||
dComIfGd_setList();
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000E68-00000E70 .text Delete__Q215daObjPirateship5Act_cFv */
|
||||
BOOL daObjPirateship::Act_c::Delete() {
|
||||
/* Nonmatching */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000E70-00000EF0 .text demo_move__Q215daObjPirateship5Act_cFv */
|
||||
void daObjPirateship::Act_c::demo_move() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjPirateship::Act_c::demo_move() {
|
||||
dDemo_actor_c* pdVar1 = dComIfGp_demo_getActor(demoActorID);
|
||||
if (pdVar1 == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
dDemo_setDemoData(this, 10, NULL, "Pirates");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000EF0-00000F10 .text Create__Q215daObjPirateship6MethodFPv */
|
||||
cPhs_State daObjPirateship::Method::Create(void*) {
|
||||
/* Nonmatching */
|
||||
cPhs_State daObjPirateship::Method::Create(void* v_this) {
|
||||
return ((daObjPirateship::Act_c*)v_this)->_create();
|
||||
}
|
||||
|
||||
/* 00000F10-000012A4 .text _create__Q215daObjPirateship5Act_cFv */
|
||||
cPhs_State daObjPirateship::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetupActor(this, daObjPirateship::Act_c);
|
||||
|
||||
cPhs_State PVar1 = dComIfG_resLoad(&mPhase, mArcname);
|
||||
if (PVar1 == cPhs_COMPLEATE_e) {
|
||||
s32 dzbFileIndex = KAIZOKUSEN_INDEX_DZB_ROOM1A;
|
||||
if (strcmp(dComIfGp_getStartStageName(), "sea") == 0) {
|
||||
dzbFileIndex = KAIZOKUSEN_INDEX_DZB_ROOM1B;
|
||||
}
|
||||
PVar1 = MoveBGCreate(mArcname, dzbFileIndex, dBgS_MoveBGProc_TypicalRotY, 0x7500);
|
||||
mpBgW->SetRideCallback(ride_call_back);
|
||||
if (fopAcM_GetParam(this) & 0xF) {
|
||||
m2CE = 1;
|
||||
} else {
|
||||
m2CE = 0;
|
||||
}
|
||||
|
||||
partsCreate();
|
||||
u8 uVar3 = (fopAcM_GetParam(this) >> 0x18) & 0xFF;
|
||||
m4FC = NULL;
|
||||
|
||||
switch (uVar3) {
|
||||
case 0:
|
||||
if (dComIfGs_isEventBit(0x310) == 0) {
|
||||
m2CC = 0;
|
||||
m2CD = 0;
|
||||
} else {
|
||||
m2CC = 0;
|
||||
if (dComIfGs_isEventBit(1)) {
|
||||
pirateCreate(create_idx_tbl_1stIsland);
|
||||
m2CD = 1;
|
||||
} else {
|
||||
m2CD = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
pirateCreate(create_idx_tbl_umikz);
|
||||
m2CD = 1;
|
||||
m2CC = 1;
|
||||
CreateWave();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (dComIfGp_getStartStagePoint() == 0x12) {
|
||||
pirateCreate(create_idx_tbl_arriveMj);
|
||||
}
|
||||
m2CD = 1;
|
||||
m2CC = 1;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m2CD = 1;
|
||||
m2CC = 1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
pirateCreate(create_idx_tbl_Yuukaigo);
|
||||
m2CD = 1;
|
||||
m2CC = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
m2CD = 1;
|
||||
m2CC = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
m4A8 = 0;
|
||||
m4A4 = 0;
|
||||
uVar3 = (fopAcM_GetParam(this) >> 0x10) & 0xFF;
|
||||
if (uVar3 != 0xff) {
|
||||
m4A8 = dPath_GetRoomPath(uVar3, fopAcM_GetRoomNo(this));
|
||||
}
|
||||
m32E = 0;
|
||||
m330 = 0x180;
|
||||
set_mtx();
|
||||
_execute();
|
||||
}
|
||||
return PVar1;
|
||||
}
|
||||
|
||||
bool daObjPirateship::Act_c::_delete() {
|
||||
if (l_HIO.mNo >= 0) {
|
||||
mDoHIO_deleteChild(l_HIO.mNo);
|
||||
l_HIO.mNo = -1;
|
||||
}
|
||||
DeleteWave();
|
||||
#if VERSION > VERSION_DEMO
|
||||
mDoAud_seDeleteObject(&m30C);
|
||||
mDoAud_seDeleteObject(&m318);
|
||||
#endif
|
||||
BOOL iVar1 = MoveBGDelete();
|
||||
dComIfG_deleteObjectRes(mArcname);
|
||||
if (iVar1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool daObjPirateship::Act_c::_draw() {
|
||||
return Draw();
|
||||
}
|
||||
|
||||
/* 000012A4-000017E0 .text _execute__Q215daObjPirateship5Act_cFv */
|
||||
bool daObjPirateship::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
dBgS_GndChk gndChk;
|
||||
cXyz sp14(current.pos.x, current.pos.y + 50.0f, current.pos.z);
|
||||
gndChk.SetPos(&sp14);
|
||||
gndChk.OffWall();
|
||||
if (dComIfG_Bgsp()->GroundCross(&gndChk) > -G_CM3D_F_INF) {
|
||||
s32 roomNo = dComIfG_Bgsp()->GetRoomId(gndChk);
|
||||
JUT_ASSERT(VERSION_SELECT(717, 720, 739, 739), 0 <= roomNo && roomNo < 64)
|
||||
fopAcM_SetRoomNo(this, roomNo);
|
||||
}
|
||||
|
||||
if (!demo_move()) {
|
||||
if (l_HIO.m05 == 0 && m4A8 != NULL) {
|
||||
dLib_pathMove(¤t.pos, &m4A4, m4A8, 3.0f, path_move_call_back, (void*)this);
|
||||
if (m32E > 0x4000 || m32E < -0x4000) {
|
||||
cLib_addCalcAngleS2(&m330, l_HIO.m12, 0x10, 0x300);
|
||||
} else {
|
||||
cLib_addCalcAngleS2(&m330, l_HIO.m10, 0x10, 0x300);
|
||||
}
|
||||
m32E += m330;
|
||||
current.pos.y = home.pos.y + (l_HIO.m0C + 10.0f) * cM_ssin(m32E);
|
||||
}
|
||||
m2CA = l_HIO.m06;
|
||||
}
|
||||
|
||||
if (m2CC == 0) {
|
||||
if (dComIfGs_isEventBit(0x310)) {
|
||||
#if VERSION > VERSION_JPN
|
||||
if (!dComIfGs_isEventBit(1)) {
|
||||
CreateWave();
|
||||
}
|
||||
#endif
|
||||
m2CC = 1;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (m2CD == 0 && dComIfGs_isEventBit(1)) {
|
||||
m2CD = 1;
|
||||
pirateCreate(create_idx_tbl_1stIsland_demo);
|
||||
#if VERSION > VERSION_JPN
|
||||
DeleteWave();
|
||||
#endif
|
||||
}
|
||||
|
||||
m2E4 = NULL;
|
||||
m2E4 = fopAcM_SearchByID(m_sail_id);
|
||||
m2EC = NULL;
|
||||
m2EC = fopAcM_SearchByID(m2F0);
|
||||
m2FC = NULL;
|
||||
m2FC = fopAcM_SearchByID(m300);
|
||||
set_mtx();
|
||||
sound_proc();
|
||||
SetWave();
|
||||
return MoveBGExecute() != FALSE;
|
||||
}
|
||||
|
||||
/* 00001E8C-00001F50 .text Delete__Q215daObjPirateship6MethodFPv */
|
||||
BOOL daObjPirateship::Method::Delete(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjPirateship::Method::Delete(void* v_this) {
|
||||
return ((daObjPirateship::Act_c*)v_this)->_delete();
|
||||
}
|
||||
|
||||
/* 00001F50-00001F74 .text Execute__Q215daObjPirateship6MethodFPv */
|
||||
BOOL daObjPirateship::Method::Execute(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjPirateship::Method::Execute(void* v_this) {
|
||||
return ((daObjPirateship::Act_c*)v_this)->_execute();
|
||||
}
|
||||
|
||||
/* 00001F74-00001FAC .text Draw__Q215daObjPirateship6MethodFPv */
|
||||
BOOL daObjPirateship::Method::Draw(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjPirateship::Method::Draw(void* v_this) {
|
||||
return ((daObjPirateship::Act_c*)v_this)->_draw();
|
||||
}
|
||||
|
||||
/* 00001FAC-00001FB4 .text IsDelete__Q215daObjPirateship6MethodFPv */
|
||||
BOOL daObjPirateship::Method::IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
actor_method_class daObjPirateship::Method::Table = {
|
||||
|
||||
@@ -469,7 +469,7 @@ static BOOL daPirate_Flag_Execute(pirate_flag_class* i_this) {
|
||||
|
||||
static cXyz flag_offset(0.0f, 1000.0f, 100.0f);
|
||||
|
||||
cMtx_multVec(l_p_ship->mpModel->getBaseTRMtx(), &flag_offset, &i_this->current.pos);
|
||||
cMtx_multVec(l_p_ship->mModel->getBaseTRMtx(), &flag_offset, &i_this->current.pos);
|
||||
|
||||
i_this->current.angle = l_p_ship->shape_angle;
|
||||
cXyz* windVec = dKyw_get_wind_vec();
|
||||
|
||||
@@ -741,7 +741,7 @@ static void sail_move(sail_class* i_this) {
|
||||
/* 00002094-00002154 .text daSail_Execute__FP10sail_class */
|
||||
static BOOL daSail_Execute(sail_class* i_this) {
|
||||
static cXyz sail_offset(0.0f, 2100.0f, 100.0f);
|
||||
cMtx_multVec(l_p_ship->mpModel->getBaseTRMtx(), &sail_offset, &i_this->current.pos);
|
||||
cMtx_multVec(l_p_ship->mModel->getBaseTRMtx(), &sail_offset, &i_this->current.pos);
|
||||
i_this->current.angle = l_p_ship->shape_angle;
|
||||
sail_move(i_this);
|
||||
return TRUE;
|
||||
|
||||
Reference in New Issue
Block a user