mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-15 14:11:39 -04:00
Iceeff, Lighteff 100%
Checksum fails for both still
This commit is contained in:
+2
-2
@@ -1329,8 +1329,8 @@ config.libs = [
|
||||
ActorRel(Matching, "d_a_am", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(Matching, "d_a_am2", extra_cflags=["-sym off"]),
|
||||
ActorRel(NonMatching, "d_a_amiprop"),
|
||||
ActorRel(NonMatching, "d_a_arrow_iceeff"),
|
||||
ActorRel(NonMatching, "d_a_arrow_lighteff"),
|
||||
ActorRel(NonMatching, "d_a_arrow_iceeff", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(NonMatching, "d_a_arrow_lighteff", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(NonMatching, "d_a_beam"),
|
||||
ActorRel(NonMatching, "d_a_boko"),
|
||||
ActorRel(NonMatching, "d_a_canon"),
|
||||
|
||||
@@ -2,20 +2,32 @@
|
||||
#define D_A_ARROW_ICEEFF_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "m_Do/m_Do_ext.h"
|
||||
|
||||
class daArrow_Iceeff_c : public fopAc_ac_c {
|
||||
public:
|
||||
inline s32 _create();
|
||||
inline BOOL _delete();
|
||||
inline BOOL _draw();
|
||||
inline BOOL _execute();
|
||||
inline bool _delete();
|
||||
inline bool _draw();
|
||||
inline bool _execute();
|
||||
|
||||
void CreateHeap();
|
||||
BOOL CreateHeap();
|
||||
void CreateInit();
|
||||
void set_mtx();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
u32 field_0x290;
|
||||
u32 field_0x294;
|
||||
J3DModel* field_0x298[30];
|
||||
J3DModel* mpModel;
|
||||
Mtx field_0x314[30];
|
||||
cXyz field_0x8B4[30];
|
||||
J3DAnmTextureSRTKey* field_0xA1C;
|
||||
mDoExt_bckAnm mBck;
|
||||
s32 field_0xA30;
|
||||
f32 field_0xA34;
|
||||
s32 field_0xA38;
|
||||
u8 field_0xA3C;
|
||||
}; // Size: 0xA40
|
||||
|
||||
#endif /* D_A_ARROW_ICEEFF_H */
|
||||
|
||||
@@ -2,24 +2,46 @@
|
||||
#define D_A_ARROW_LIGHTEFF_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "m_Do/m_Do_ext.h"
|
||||
#include "d/d_particle.h"
|
||||
#include "d/d_kankyo.h"
|
||||
|
||||
class JPABaseEmitter;
|
||||
|
||||
class daArrow_Lighteff_c : public fopAc_ac_c {
|
||||
public:
|
||||
inline s32 _create();
|
||||
inline BOOL _delete();
|
||||
inline BOOL _draw();
|
||||
inline BOOL _execute();
|
||||
void brk_play() {}
|
||||
inline bool _delete();
|
||||
inline bool _draw();
|
||||
inline bool _execute();
|
||||
void brk_play() {} // based on position in the debug map this would play the btk so not sure what this is really doing
|
||||
|
||||
void setTopPos();
|
||||
void setPointLight();
|
||||
void delete_particle();
|
||||
void CreateHeap();
|
||||
BOOL CreateHeap();
|
||||
void CreateInit();
|
||||
void set_mtx();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
u32 field_0x290;
|
||||
u32 field_0x294;
|
||||
J3DModel* field_0x298;
|
||||
cXyz field_0x29C;
|
||||
cXyz field_0x2A8;
|
||||
mDoExt_brkAnm mBrk;
|
||||
mDoExt_btkAnm mBtk;
|
||||
f32 field_0x2E0;
|
||||
s32 field_0x2E4;
|
||||
u8 field_0x2E8;
|
||||
u8 field_0x2E9;
|
||||
u8 field_0x2EA;
|
||||
u32 field_0x2EC;
|
||||
u32 field_0x2F0;
|
||||
dPa_followEcallBack field_0x2F4;
|
||||
dPa_followEcallBack field_0x308;
|
||||
LIGHT_INFLUENCE field_0x31C;
|
||||
f32 field_0x33C;
|
||||
};
|
||||
|
||||
#endif /* D_A_ARROW_LIGHTEFF_H */
|
||||
|
||||
@@ -4,55 +4,317 @@
|
||||
//
|
||||
|
||||
#include "d/actor/d_a_arrow_iceeff.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "m_Do/m_Do_mtx.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/actor/d_a_player_main.h"
|
||||
#include "d/actor/d_a_arrow.h"
|
||||
|
||||
/* 000000EC-0000010C .text CheckCreateHeap__FP10fopAc_ac_c */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daArrow_Iceeff_c*>(i_this)->CreateHeap();
|
||||
}
|
||||
|
||||
/* 0000010C-00000324 .text CreateHeap__16daArrow_Iceeff_cFv */
|
||||
void daArrow_Iceeff_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daArrow_Iceeff_c::CreateHeap() {
|
||||
if(field_0xA38 == 0) {
|
||||
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", 0x40));
|
||||
JUT_ASSERT(87, modelData != 0);
|
||||
for(int i = 0; i < 30; i++) {
|
||||
field_0x298[i] = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
if(field_0x298[i] == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", 0x41));
|
||||
JUT_ASSERT(98, modelData != 0);
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
if(mpModel == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
J3DAnmTransform* bck = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Link", 0xD));
|
||||
JUT_ASSERT(107, bck != 0);
|
||||
if(!mBck.init(modelData, bck, true, 0, 1.0f, 0, -1, false)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000324-000005E4 .text CreateInit__16daArrow_Iceeff_cFv */
|
||||
void daArrow_Iceeff_c::CreateInit() {
|
||||
/* Nonmatching */
|
||||
if(field_0xA38 == 0) {
|
||||
for(int i = 0; i < 30; i++) {
|
||||
fopAcM_SetMtx(this, field_0x298[i]->getBaseTRMtx());
|
||||
|
||||
field_0x8B4[i].setall(cM_rndF(4.5f) + 6.2999997f);
|
||||
|
||||
f32 temp = 180.0f * i / 30.0f;
|
||||
s16 angle = cM_rndF(65536.0f);
|
||||
mDoMtx_ZrotS(mDoMtx_stack_c::get(), cM_rndF(65536.0f));
|
||||
mDoMtx_XrotM(mDoMtx_stack_c::get(), cM_rndF(65536.0f));
|
||||
mDoMtx_YrotM(mDoMtx_stack_c::get(), cM_rndF(65536.0f));
|
||||
mDoMtx_stack_c::transM(temp * cM_ssin(angle), temp * cM_scos(angle), 0.0f);
|
||||
mDoMtx_stack_c::ZrotM(current.angle.z);
|
||||
mDoMtx_stack_c::XrotM(current.angle.x);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
MTXCopy(mDoMtx_stack_c::get(), field_0x314[i]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
current.angle.y = cM_rndF(65536.0f);
|
||||
}
|
||||
|
||||
fopAcM_setCullSizeBox(this, -100.0f, -100.0f, -100.0f, 100.0f, 100.0f, 100.0f);
|
||||
mCullSizeFar = 1.0f;
|
||||
set_mtx();
|
||||
field_0xA30 = 0;
|
||||
field_0xA34 = 0.0f;
|
||||
if(field_0xA38 == 0) {
|
||||
field_0xA1C = daPy_getPlayerLinkActorClass()->mpGicer00Btk;
|
||||
}
|
||||
else {
|
||||
field_0xA1C = daPy_getPlayerLinkActorClass()->mpGicer01Btk;
|
||||
}
|
||||
|
||||
field_0xA1C->setFrame(field_0xA34);
|
||||
field_0xA3C = 1;
|
||||
}
|
||||
|
||||
/* 000005E4-0000073C .text set_mtx__16daArrow_Iceeff_cFv */
|
||||
void daArrow_Iceeff_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
if(field_0xA38 == 0) {
|
||||
for(int i = 0; i < 30; i++) {
|
||||
field_0x298[i]->setBaseScale(field_0x8B4[i]);
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, 0);
|
||||
mDoMtx_stack_c::concat(field_0x314[i]);
|
||||
field_0x298[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
}
|
||||
else {
|
||||
mScale.setall(1.0f);
|
||||
mpModel->setBaseScale(mScale);
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
}
|
||||
|
||||
s32 daArrow_Iceeff_c::_create() {
|
||||
fopAcM_SetupActor(this, daArrow_Iceeff_c);
|
||||
|
||||
void* arrow = fopAcM_SearchByID(mParentPcId);
|
||||
if(arrow == 0) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
else {
|
||||
if(fopAcM_GetParam(arrow) == 4) {
|
||||
field_0xA38 = 1;
|
||||
}
|
||||
else {
|
||||
field_0xA38 = 0;
|
||||
}
|
||||
|
||||
if(!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xD5E0)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
CreateInit();
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
}
|
||||
|
||||
/* 0000073C-00000854 .text daArrow_Iceeff_Create__FPv */
|
||||
static s32 daArrow_Iceeff_Create(void*) {
|
||||
/* Nonmatching */
|
||||
static s32 daArrow_Iceeff_Create(void* i_this) {
|
||||
return static_cast<daArrow_Iceeff_c*>(i_this)->_create();
|
||||
}
|
||||
|
||||
bool daArrow_Iceeff_c::_delete() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000938-00000940 .text daArrow_Iceeff_Delete__FPv */
|
||||
static BOOL daArrow_Iceeff_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Iceeff_Delete(void* i_this) {
|
||||
return static_cast<daArrow_Iceeff_c*>(i_this)->_delete();
|
||||
}
|
||||
|
||||
bool daArrow_Iceeff_c::_draw() {
|
||||
s32 temp = field_0xA30;
|
||||
if(30 < temp) {
|
||||
temp = 30;
|
||||
}
|
||||
|
||||
field_0xA1C->setFrame(field_0xA34);
|
||||
dComIfGd_setListP1();
|
||||
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &mTevStr);
|
||||
if(field_0xA38 == 0) {
|
||||
for(int i = 0; i < temp; i++) {
|
||||
g_env_light.setLightTevColorType(field_0x298[i], &mTevStr);
|
||||
|
||||
if(field_0xA3C == 1) {
|
||||
mDoExt_modelUpdateDL(field_0x298[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_env_light.setLightTevColorType(mpModel, &mTevStr);
|
||||
J3DModelData* mdl_data = mpModel->getModelData();
|
||||
mBck.entry(mdl_data, mBck.getFrame());
|
||||
if(field_0xA3C == 1) {
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
}
|
||||
|
||||
mBck.remove(mpModel->getModelData());
|
||||
}
|
||||
|
||||
dComIfGd_setList();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000940-00000A98 .text daArrow_Iceeff_Draw__FPv */
|
||||
static BOOL daArrow_Iceeff_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Iceeff_Draw(void* i_this) {
|
||||
return static_cast<daArrow_Iceeff_c*>(i_this)->_draw();
|
||||
}
|
||||
|
||||
/* 00000A98-00000ABC .text daArrow_Iceeff_Execute__FPv */
|
||||
static BOOL daArrow_Iceeff_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Iceeff_Execute(void* i_this) {
|
||||
return static_cast<daArrow_Iceeff_c*>(i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 00000ABC-00001050 .text _execute__16daArrow_Iceeff_cFv */
|
||||
BOOL daArrow_Iceeff_c::_execute() {
|
||||
/* Nonmatching */
|
||||
bool daArrow_Iceeff_c::_execute() {
|
||||
static cXyz ripple_scale(1.0f, 1.0f, 1.0f);
|
||||
|
||||
daArrow_c* arrow = static_cast<daArrow_c*>(fopAcM_SearchByID(mParentPcId));
|
||||
if(field_0xA38 == 0) {
|
||||
if(arrow == 0) {
|
||||
dComIfGp_particle_setP1(0x55, ¤t.pos, ¤t.angle, 0);
|
||||
fopAcM_delete(this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
current.pos = arrow->field_0x6a8;
|
||||
current.angle = arrow->shape_angle;
|
||||
if(field_0xA30 == 0) {
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE, 0);
|
||||
}
|
||||
|
||||
if(field_0xA30 >= 30) {
|
||||
field_0xA34 += 1.0f;
|
||||
if(field_0xA34 >= field_0xA1C->getFrameMax()) {
|
||||
field_0xA34 = field_0xA1C->getFrameMax();
|
||||
}
|
||||
}
|
||||
|
||||
if(field_0xA30 < 0x3C) {
|
||||
field_0xA30++;
|
||||
}
|
||||
else {
|
||||
dComIfGp_particle_setP1(0x55, ¤t.pos, ¤t.angle, 0);
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE_BREAK, 0);
|
||||
fopAcM_delete(arrow);
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
}
|
||||
else {
|
||||
mBck.play();
|
||||
f32 waterY;
|
||||
fopAcM_getWaterY(¤t.pos, &waterY);
|
||||
current.pos.y = waterY;
|
||||
if(field_0xA30 == 0) {
|
||||
csXyz angle;
|
||||
angle.set(-0x4000, 0, 0);
|
||||
|
||||
JPABaseEmitter* ptcl = dComIfGp_particle_setP1(0x29E, ¤t.pos, &angle, 0);
|
||||
if(ptcl) {
|
||||
JGeometry::TVec3<f32> scale(0.5f, 0.5f, 0.5f);
|
||||
ptcl->setGlobalScale(scale);
|
||||
ptcl->setRate(50.0f);
|
||||
ptcl->setGlobalAlpha(0x80);
|
||||
}
|
||||
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE, 0);
|
||||
}
|
||||
|
||||
field_0xA34 += 1.0f;
|
||||
if(field_0xA34 >= field_0xA1C->getFrameMax()) {
|
||||
field_0xA34 = field_0xA1C->getFrameMax();
|
||||
}
|
||||
|
||||
if(field_0xA30 < 300) {
|
||||
field_0xA30++;
|
||||
}
|
||||
else {
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
|
||||
if(field_0xA30 == 0x23) {
|
||||
JPABaseEmitter* ptcl = dComIfGp_particle_setSingleRipple(0x3D, ¤t.pos, 0, &ripple_scale);
|
||||
if(ptcl) {
|
||||
JGeometry::TVec3<f32> scale(0.67f, 0.67f, 1.0f);
|
||||
ptcl->setGlobalParticleScale(scale);
|
||||
}
|
||||
}
|
||||
else if(field_0xA30 == 0x28) {
|
||||
JPABaseEmitter* ptcl = dComIfGp_particle_setP1(0x55, ¤t.pos, 0, 0);
|
||||
if(ptcl) {
|
||||
ptcl->setAwayFromCenterSpeed(25.0f);
|
||||
ptcl->setAwayFromAxisSpeed(5.0f);
|
||||
ptcl->setDirectionalSpeed(5.0f);
|
||||
JGeometry::TVec3<f32> scale1(0.5f, 1.0f, 0.5f);
|
||||
ptcl->setEmitterScale(scale1);
|
||||
JGeometry::TVec3<f32> scale2(0.33f, 0.33f, 1.0f);
|
||||
ptcl->setGlobalParticleScale(scale2);
|
||||
}
|
||||
|
||||
dComIfGp_particle_setSingleRipple(0x3F, ¤t.pos, 0, &ripple_scale);
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE_BREAK, 0);
|
||||
|
||||
field_0xA3C = 0;
|
||||
}
|
||||
}
|
||||
|
||||
set_mtx();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00001050-00001058 .text daArrow_Iceeff_IsDelete__FPv */
|
||||
static BOOL daArrow_Iceeff_IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
return true;
|
||||
}
|
||||
|
||||
static actor_method_class daArrow_IceeffMethodTable = {
|
||||
(process_method_func)daArrow_Iceeff_Create,
|
||||
(process_method_func)daArrow_Iceeff_Delete,
|
||||
(process_method_func)daArrow_Iceeff_Draw,
|
||||
(process_method_func)daArrow_Iceeff_IsDelete,
|
||||
(process_method_func)daArrow_Iceeff_Draw,
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_ARROW_ICEEFF = {
|
||||
fpcLy_CURRENT_e,
|
||||
9,
|
||||
fpcPi_CURRENT_e,
|
||||
PROC_ARROW_ICEEFF,
|
||||
&g_fpcLf_Method.mBase,
|
||||
sizeof(daArrow_Iceeff_c),
|
||||
0,
|
||||
0,
|
||||
&g_fopAc_Method.base,
|
||||
0x01C0,
|
||||
&daArrow_IceeffMethodTable,
|
||||
fopAcStts_UNK40000_e | fopAcStts_UNK4000_e,
|
||||
fopAc_ACTOR_e,
|
||||
fopAc_CULLBOX_CUSTOM_e,
|
||||
};
|
||||
|
||||
@@ -4,70 +4,420 @@
|
||||
//
|
||||
|
||||
#include "d/actor/d_a_arrow_lighteff.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "d/actor/d_a_player_main.h"
|
||||
#include "d/actor/d_a_arrow.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "m_Do/m_Do_mtx.h"
|
||||
#include "m_Do/m_Do_graphic.h"
|
||||
#include "SSystem/SComponent/c_lib.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
|
||||
/* 00000078-00000108 .text setTopPos__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::setTopPos() {
|
||||
/* Nonmatching */
|
||||
daArrow_c* arrow = static_cast<daArrow_c*>(fopAcM_SearchByID(mParentPcId));
|
||||
if(arrow) {
|
||||
mDoMtx_stack_c::copy(arrow->field_0x6b4);
|
||||
mDoMtx_stack_c::transM(0.0f, 0.0f, 62.0f);
|
||||
mDoMtx_stack_c::multVecZero(&field_0x29C);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000108-00000230 .text setPointLight__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::setPointLight() {
|
||||
/* Nonmatching */
|
||||
static const s16 light_color[][3] = {
|
||||
{0x0000, 0x0000, 0x0000},
|
||||
{0x0258, 0x0190, 0x0078},
|
||||
{0x0078, 0x0190, 0x0258},
|
||||
{0x0258, 0x0258, 0x00C8},
|
||||
};
|
||||
|
||||
if(field_0x2EC == 0 || field_0x2EC == 1) {
|
||||
if(field_0x2E8 == 0) {
|
||||
field_0x33C = 0.0f;
|
||||
}
|
||||
else {
|
||||
cLib_addCalc2(&field_0x33C, cM_rndF(0.2f) + 1.0f, 0.5f, 0.05f);
|
||||
}
|
||||
}
|
||||
else {
|
||||
field_0x33C = 0.0f;
|
||||
}
|
||||
|
||||
field_0x31C.mPos = field_0x29C;
|
||||
field_0x31C.mColor.r = light_color[field_0x2E8][0];
|
||||
field_0x31C.mColor.g = light_color[field_0x2E8][1];
|
||||
field_0x31C.mColor.b = light_color[field_0x2E8][2];
|
||||
field_0x31C.mPower = (s16)(field_0x33C * 150.0f);
|
||||
field_0x31C.mFluctuation = 250.0f;
|
||||
}
|
||||
|
||||
/* 00000230-000002C0 .text delete_particle__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::delete_particle() {
|
||||
/* Nonmatching */
|
||||
if(field_0x2F4.getEmitter()) {
|
||||
if(field_0x2E8 == 3) {
|
||||
field_0x2F4.getEmitter()->setGlobalAlpha(0);
|
||||
}
|
||||
|
||||
field_0x2F4.end();
|
||||
}
|
||||
if(field_0x308.getEmitter()) {
|
||||
if(field_0x2E8 == 3) {
|
||||
field_0x308.getEmitter()->setGlobalAlpha(0);
|
||||
}
|
||||
|
||||
field_0x308.end();
|
||||
}
|
||||
}
|
||||
|
||||
/* 000002C0-000002E0 .text CheckCreateHeap__FP10fopAc_ac_c */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daArrow_Lighteff_c*>(i_this)->CreateHeap();
|
||||
}
|
||||
|
||||
/* 000002E0-00000624 .text CreateHeap__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daArrow_Lighteff_c::CreateHeap() {
|
||||
field_0x2E8 = fopAcM_GetParam(this);
|
||||
|
||||
J3DModelData* modelData;
|
||||
if(field_0x2E8 == 1) {
|
||||
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", 0x32));
|
||||
}
|
||||
else if(field_0x2E8 == 2) {
|
||||
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", 0x33));
|
||||
}
|
||||
else {
|
||||
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", 0x34));
|
||||
}
|
||||
|
||||
JUT_ASSERT(187, modelData != 0);
|
||||
|
||||
field_0x298 = mDoExt_J3DModel__create(modelData, 0x80000, 0x3F441422);
|
||||
if(field_0x298 == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
J3DAnmTextureSRTKey* btk;
|
||||
J3DAnmTevRegKey* brk;
|
||||
if(field_0x2E8 == 1) {
|
||||
btk = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes("Link", 0x5E));
|
||||
brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes("Link", 0x52));
|
||||
}
|
||||
else if(field_0x2E8 == 2) {
|
||||
btk = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes("Link", 0x5F));
|
||||
brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes("Link", 0x53));
|
||||
}
|
||||
else {
|
||||
btk = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes("Link", 0x60));
|
||||
brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes("Link", 0x54));
|
||||
}
|
||||
|
||||
JUT_ASSERT(216, btk != 0);
|
||||
JUT_ASSERT(217, brk != 0);
|
||||
|
||||
if(!mBtk.init(modelData, btk, true, 2, 1.0f, 0, -1, false, 0)) {
|
||||
return false;
|
||||
}
|
||||
if(!mBrk.init(modelData, brk, true, 0, 1.0f, 0, -1, false, 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
field_0x2E0 = 0.0f;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000624-00000880 .text CreateInit__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::CreateInit() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetMtx(this, field_0x298->getBaseTRMtx());
|
||||
|
||||
field_0x2A8.setall(1.0f);
|
||||
|
||||
fopAcM_setCullSizeBox(this, -100.0f, -100.0f, -100.0f, 100.0f, 100.0f, 100.0f);
|
||||
mCullSizeFar = 1.0f;
|
||||
|
||||
set_mtx();
|
||||
|
||||
field_0x2E4 = 0;
|
||||
field_0x2F0 = 0;
|
||||
field_0x2EC = 0;
|
||||
|
||||
setTopPos();
|
||||
|
||||
if(field_0x2E8 == 1) {
|
||||
if(field_0x2F4.getEmitter() == 0) {
|
||||
dComIfGp_particle_setP1(0x299, &field_0x29C, ¤t.angle, 0, 0xFF, &field_0x2F4);
|
||||
}
|
||||
}
|
||||
else if(field_0x2E8 == 2) {
|
||||
if(field_0x2F4.getEmitter() == 0) {
|
||||
dComIfGp_particle_setP1(0x29C, &field_0x29C, ¤t.angle, 0, 0xFF, &field_0x2F4);
|
||||
}
|
||||
if(field_0x308.getEmitter() == 0) {
|
||||
dComIfGp_particle_setP1(0x29D, &field_0x29C, ¤t.angle, 0, 0xFF, &field_0x308);
|
||||
}
|
||||
}
|
||||
else if(field_0x2E8 == 3) {
|
||||
if(field_0x2F4.getEmitter() == 0) {
|
||||
dComIfGp_particle_setP1(0x29F, &field_0x29C, ¤t.angle, 0, 0xFF, &field_0x2F4);
|
||||
}
|
||||
if(field_0x308.getEmitter() == 0) {
|
||||
dComIfGp_particle_setP1(0x2A0, &field_0x29C, ¤t.angle, 0, 0xFF, &field_0x308);
|
||||
}
|
||||
}
|
||||
|
||||
field_0x2E9 = 1;
|
||||
dKy_plight_set(&field_0x31C);
|
||||
}
|
||||
|
||||
/* 00000880-00000980 .text set_mtx__18daArrow_Lighteff_cFv */
|
||||
void daArrow_Lighteff_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
field_0x298->setBaseScale(field_0x2A8);
|
||||
|
||||
daArrow_c* arrow = static_cast<daArrow_c*>(fopAcM_SearchByID(mParentPcId));
|
||||
if(arrow) {
|
||||
mDoMtx_stack_c::copy(arrow->field_0x6b4);
|
||||
mDoMtx_stack_c::transM(0.0f, 0.0f, 62.0f);
|
||||
field_0x298->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
else {
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, 0);
|
||||
mDoMtx_stack_c::transM(0.0f, 0.0f, 62.0f);
|
||||
field_0x298->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
}
|
||||
|
||||
s32 daArrow_Lighteff_c::_create() {
|
||||
fopAcM_SetupActor(this, daArrow_Lighteff_c);
|
||||
|
||||
field_0x2EA = 0;
|
||||
if(!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0x2660)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
CreateInit();
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
/* 00000980-00000A70 .text daArrow_Lighteff_Create__FPv */
|
||||
static s32 daArrow_Lighteff_Create(void*) {
|
||||
/* Nonmatching */
|
||||
static s32 daArrow_Lighteff_Create(void* i_this) {
|
||||
return static_cast<daArrow_Lighteff_c*>(i_this)->_create();
|
||||
}
|
||||
|
||||
bool daArrow_Lighteff_c::_delete() {
|
||||
delete_particle();
|
||||
|
||||
if(field_0x2EA == 1) {
|
||||
daPy_py_c* link = daPy_getPlayerActorClass();
|
||||
|
||||
daArrow_c* arrow = static_cast<daArrow_c*>(fopAcM_SearchByID(mParentPcId));
|
||||
if(arrow) {
|
||||
if(!arrow->isSetByZelda()) {
|
||||
link->offUseArrowEffect();
|
||||
}
|
||||
}
|
||||
else {
|
||||
link->offUseArrowEffect();
|
||||
}
|
||||
}
|
||||
|
||||
dKy_plight_cut(&field_0x31C);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000B70-00000C10 .text daArrow_Lighteff_Delete__FPv */
|
||||
static BOOL daArrow_Lighteff_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Lighteff_Delete(void* i_this) {
|
||||
return static_cast<daArrow_Lighteff_c*>(i_this)->_delete();
|
||||
}
|
||||
|
||||
bool daArrow_Lighteff_c::_draw() {
|
||||
if(field_0x2E9 == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
J3DModelData* modelData = field_0x298->getModelData();
|
||||
if(mDoGph_gInf_c::isMonotone()) {
|
||||
dComIfGd_setListP1();
|
||||
}
|
||||
else {
|
||||
dComIfGd_setListMaskOff();
|
||||
}
|
||||
|
||||
mBtk.entry(modelData, mBtk.getFrame());
|
||||
mBrk.entry(modelData, mBrk.getFrame());
|
||||
mDoExt_modelUpdateDL(field_0x298);
|
||||
mBrk.remove(modelData);
|
||||
mBtk.remove(modelData);
|
||||
|
||||
dComIfGd_setList();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00000C10-00000D20 .text daArrow_Lighteff_Draw__FPv */
|
||||
static BOOL daArrow_Lighteff_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Lighteff_Draw(void* i_this) {
|
||||
return static_cast<daArrow_Lighteff_c*>(i_this)->_draw();
|
||||
}
|
||||
|
||||
/* 00000D20-00000D44 .text daArrow_Lighteff_Execute__FPv */
|
||||
static BOOL daArrow_Lighteff_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daArrow_Lighteff_Execute(void* i_this) {
|
||||
return static_cast<daArrow_Lighteff_c*>(i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 00000D44-000011A4 .text _execute__18daArrow_Lighteff_cFv */
|
||||
BOOL daArrow_Lighteff_c::_execute() {
|
||||
/* Nonmatching */
|
||||
bool daArrow_Lighteff_c::_execute() {
|
||||
field_0x2F0 = field_0x2EC;
|
||||
|
||||
mBtk.play();
|
||||
|
||||
s32 cam = dComIfGp_getPlayerCameraID(0);
|
||||
if(!dComIfGp_checkCameraAttentionStatus(cam, 0x20)) {
|
||||
if(field_0x2E0 < mBrk.getEndFrame()) {
|
||||
field_0x2E0 += 1.0f;
|
||||
if(field_0x2E0 > mBrk.getEndFrame()) {
|
||||
field_0x2E0 = mBrk.getEndFrame();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(field_0x2E0 > 5.0f) {
|
||||
field_0x2E0 -= 1.0f;
|
||||
if(field_0x2E0 < 5.0f) {
|
||||
field_0x2E0 = 5.0f;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(field_0x2E0 < 5.0f) {
|
||||
field_0x2E0 += 1.0f;
|
||||
if(field_0x2E0 > 5.0f) {
|
||||
field_0x2E0 = 5.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mBrk.setFrame(field_0x2E0);
|
||||
|
||||
daPy_py_c* link = daPy_getPlayerActorClass();
|
||||
daArrow_c* arrow = static_cast<daArrow_c*>(fopAcM_SearchByID(mParentPcId));
|
||||
if(arrow) {
|
||||
field_0x2EC = fopAcM_GetParam(arrow);
|
||||
if(arrow->field_0x6e4 == 1) {
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
else {
|
||||
if(field_0x2EC != 0) {
|
||||
if(field_0x2EC == 1) {
|
||||
if(field_0x2F0 != 1) {
|
||||
if(!arrow->isSetByZelda()) {
|
||||
link->onUseArrowEffect();
|
||||
}
|
||||
|
||||
field_0x2EA = 1;
|
||||
field_0x2A8.z = 1.0f;
|
||||
}
|
||||
else {
|
||||
field_0x2A8.z += 1.0;
|
||||
if(field_0x2A8.z >= 20.0f) {
|
||||
field_0x2A8.z = 20.0f;
|
||||
}
|
||||
|
||||
field_0x2A8.x -= 0.025;
|
||||
if(field_0x2A8.x <= 0.5f) {
|
||||
field_0x2A8.x = 0.5f;
|
||||
}
|
||||
|
||||
field_0x2A8.y = field_0x2A8.x;
|
||||
}
|
||||
}
|
||||
else if(field_0x2EC == 3) {
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
else {
|
||||
field_0x2E9 = 0;
|
||||
delete_particle();
|
||||
field_0x2E4++;
|
||||
if(0x3C <= field_0x2E4) {
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
current.pos = arrow->current.pos;
|
||||
current.angle = arrow->field_0x6e6;
|
||||
setTopPos();
|
||||
setPointLight();
|
||||
}
|
||||
else {
|
||||
fopAcM_delete(this);
|
||||
}
|
||||
|
||||
cam = dComIfGp_getPlayerCameraID(0);
|
||||
if(field_0x2E8 == 1) {
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_FIRE_ARROW_AMB, 0);
|
||||
if(!dComIfGp_checkCameraAttentionStatus(cam, 0x20)) {
|
||||
dComIfGp_particle_setSimple(0x4004, &field_0x29C, 0xFF, g_whiteColor, g_whiteColor, 0);
|
||||
}
|
||||
}
|
||||
else if(field_0x2E8 == 2) {
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_ICE_ARROW_AMB, 0);
|
||||
if(dComIfGp_checkCameraAttentionStatus(cam, 0x20)) {
|
||||
if(field_0x2F4.getEmitter()) {
|
||||
field_0x2F4.getEmitter()->setGlobalAlpha(0x64);
|
||||
}
|
||||
if(field_0x308.getEmitter()) {
|
||||
field_0x308.getEmitter()->setGlobalAlpha(0x64);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(field_0x2F4.getEmitter()) {
|
||||
field_0x2F4.getEmitter()->setGlobalAlpha(0xFF);
|
||||
}
|
||||
if(field_0x308.getEmitter()) {
|
||||
field_0x308.getEmitter()->setGlobalAlpha(0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARROW_AMB, 0);
|
||||
}
|
||||
|
||||
set_mtx();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 000011A4-000011AC .text daArrow_Lighteff_IsDelete__FPv */
|
||||
static BOOL daArrow_Lighteff_IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
return true;
|
||||
}
|
||||
|
||||
static actor_method_class daArrow_LighteffMethodTable = {
|
||||
(process_method_func)daArrow_Lighteff_Create,
|
||||
(process_method_func)daArrow_Lighteff_Delete,
|
||||
(process_method_func)daArrow_Lighteff_Draw,
|
||||
(process_method_func)daArrow_Lighteff_IsDelete,
|
||||
(process_method_func)daArrow_Lighteff_Draw,
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_ARROW_LIGHTEFF = {
|
||||
fpcLy_CURRENT_e,
|
||||
9,
|
||||
fpcPi_CURRENT_e,
|
||||
PROC_ARROW_LIGHTEFF,
|
||||
&g_fpcLf_Method.mBase,
|
||||
sizeof(daArrow_Lighteff_c),
|
||||
0,
|
||||
0,
|
||||
&g_fopAc_Method.base,
|
||||
0x01C1,
|
||||
&daArrow_LighteffMethodTable,
|
||||
fopAcStts_UNK40000_e | fopAcStts_UNK4000_e,
|
||||
fopAc_ACTOR_e,
|
||||
fopAc_CULLBOX_CUSTOM_e,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user