mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-17 20:43:07 -04:00
d_a_tag_* TUs mostly matching for debug (#3054)
* d_a_tag_event debug almost matching * d_a_tag_msg debug almost matching * d_a_tag_attention almost matching * d_a_tag_chkpoint debug almost matching (weak func order) * d_a_tag_evt debug almost matching (extra weak fns) * d_a_tag_evtarea debug almost matching (weak func order) * d_a_tag_evtmsg debug almost matching (weak func order) * d_a_tag_mist debug almost matching (weak func order) * d_a_tag_howl debug almost matching (weak func order) * d_a_tag_lantern debug almost matching (weak func order) * d_a_tag_push debug almost matching (weak func order) * d_a_tag_telop debug almost matching (weak func order) * d_a_tag_CstaSw debug almost matching (weak func order) * d_a_tag_ajnot debug almost matching (weak func order) * d_a_tag_attack_item debug almost matching (weak func order) * d_a_tag_gstart debug almost matching (weak func order) * d_a_tag_hinit debug almost matching (debug weak func order) * d_a_tag_hjump debug almost matching (weak func order) * d_a_tag_hstop debug almost matching (weak func order) * d_a_tag_lv2prchk debug almost matching (weak func order) * d_a_tag_magne debug almost matching (weak func order) * d_a_tag_mhint debug almost matching (weak func order) * d_a_tag_mstop debug almost matching (weak func order) * d_a_tag_spring debug almost matching (weak func order) * d_a_tag_statue_evt debug almost matching (weak func order) * d_a_tag_arena debug almost matching (weak func order) * d_a_tag_Lv6Gate debug almost matching (weak func order) * d_a_tag_Lv7Gate debug almost matching (weak func order) * d_a_tag_Lv8Gate debug almost matching (.data + weak func order) * d_a_tag_TWgate debug almost matching (weak func order) * d_a_tag_lv6CstaSw debug almost matching (weak func order) * d_a_tag_assistance debug almost matching (weak func order) * d_a_tag_bottle_item debug almost matching (weak func order) * d_a_tag_chgrestart debug almost matching (weak func order) * d_a_tag_csw debug almost matching (weak func order) * d_a_tag_escape debug almost matching (weak func order) * d_a_tag_firewall debug almost matching (weak func order) * d_a_tag_gra debug almost matching (weak func order) * d_a_tag_guard debug almost matching (weak func order) * d_a_tag_instruction debug almost matching (weak func order) * d_a_tag_kago_fall debug almost matching (weak func order) * d_a_tag_lightball debug almost matching (weak func order) * d_a_tag_lv5soup debug almost matching (weak func order) * d_a_tag_mmsg debug almost matching (weak func order) * d_a_tag_mwait debug almost matching (weak func order) * d_a_tag_myna2 debug almost matching (weak func order) * d_a_tag_myna_light debug almost matching (weak func order) * d_a_tag_pachi debug almost matching (weak func order) * d_a_tag_poFire debug almost matching (weak func order) * d_a_tag_qs debug almost matching (small mismatch in search) * d_a_tag_ret_room debug almost matching (weak func order) * d_a_tag_river_back debug almost matching (weak func order) * d_a_tag_rmbit_sw debug almost matching (weak func order) * d_a_tag_schedule debug almost matching (weak func order) * d_a_tag_setBall debug almost matching (weak func order) * d_a_tag_setrestart debug almost matching (weak func order) * d_a_tag_shop_item debug almost matching (weak func order) * d_a_tag_smk_emt debug almost matching (weak func order) * d_a_tag_spinner debug almost matching (weak func order) * d_a_tag_sspath debug almost matching (weak func order) * d_a_tag_ss_drink debug almost matching (weak func order) * d_a_tag_stream debug almost matching (weak func order) * d_a_tag_theB_hint debug almost matching (weak func order) * d_a_tag_watchge debug almost matching (weak func order) * d_a_tag_waterfall debug almost matching (weak func order) * d_a_tag_allmato debug almost matching (weak func order) * d_a_tag_camera debug almost matching (extra weak fns) * d_a_tag_wara_howl debug almost matching (RTTI mismatch?) * d_a_tag_yami debug almost matching (weak func order) * Fix Shield regressions related to d_a_tag_* debug work
This commit is contained in:
@@ -5275,7 +5275,7 @@ void daAlink_c::setIceSlipSpeed() {
|
||||
|
||||
void daAlink_c::setPolygonSpeed() {
|
||||
offNoResetFlg3(daPy_FLG3(FLG3_UNK_1000 | FLG3_UNK_2000));
|
||||
if ((!checkEventRun() || checkNoResetFlg0(daPy_FLG0(FLG0_UNK_10000 | FLG0_UNK_4000))) && !checkMagneBootsOn()) {
|
||||
if ((!checkEventRun() || checkNoResetFlg0(daPy_FLG0(FLG0_DEMO_STREAM_ACCEPT | FLG0_UNK_4000))) && !checkMagneBootsOn()) {
|
||||
cM3dGPla tripla;
|
||||
if (checkNoResetFlg3(FLG3_MIDNA_TALK_POLY_SPEED)) {
|
||||
offNoResetFlg3(FLG3_MIDNA_TALK_POLY_SPEED);
|
||||
@@ -13097,7 +13097,7 @@ void daAlink_c::posMove() {
|
||||
current.pos.x += mWindSpeed.x;
|
||||
current.pos.z += mWindSpeed.z;
|
||||
}
|
||||
} else if (checkNoResetFlg0(daPy_FLG0(FLG0_UNK_10000 | FLG0_UNK_4000))) {
|
||||
} else if (checkNoResetFlg0(daPy_FLG0(FLG0_DEMO_STREAM_ACCEPT | FLG0_UNK_4000))) {
|
||||
current.pos += field_0x3594;
|
||||
}
|
||||
} else if (checkOctaIealSpecialCollect()) {
|
||||
|
||||
@@ -888,7 +888,7 @@ void daAlink_c::resetSpecialEvent() {
|
||||
void daAlink_c::endDemoMode() {
|
||||
BOOL flyAtnWait = checkFlyAtnWait();
|
||||
endHighModel();
|
||||
offNoResetFlg0(daPy_FLG0(FLG0_UNK_10000 | FLG0_UNK_400));
|
||||
offNoResetFlg0(daPy_FLG0(FLG0_DEMO_STREAM_ACCEPT | FLG0_UNK_400));
|
||||
field_0x06f4 = NULL;
|
||||
|
||||
if (field_0x06f8 != NULL) {
|
||||
|
||||
@@ -6,12 +6,23 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_CstaSw.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
daTagCstaSw_HIO_c l_HIO;
|
||||
|
||||
daTagCstaSw_HIO_c::daTagCstaSw_HIO_c() {
|
||||
unk_0x4 = 0;
|
||||
show_range = 0;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
void daTagCstaSw_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Show range"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagCstaSw_c::setBaseMtx() {
|
||||
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);
|
||||
@@ -21,12 +32,20 @@ int daTagCstaSw_c::create() {
|
||||
fopAcM_ct(this, daTagCstaSw_c);
|
||||
mSwitch = getSw();
|
||||
setBaseMtx();
|
||||
|
||||
#if DEBUG
|
||||
// "Stone statue SW tag"
|
||||
l_HIO.entryHIO("石像SWタグ");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
fopAc_ac_c* daTagCstaSw_c::searchSekizoAct(void* i_actor, void*) {
|
||||
if (i_actor && fopAcM_IsActor(i_actor) && fopAcM_GetProfName(i_actor) == PROC_CSTAF) {
|
||||
return (fopAc_ac_c*)i_actor;
|
||||
fopAc_ac_c* daTagCstaSw_c::searchSekizoAct(void* i_actor, void* param_1) {
|
||||
fopAc_ac_c* actor2 = (fopAc_ac_c*)param_1;
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor && fopAcM_IsActor(actor) && fopAcM_GetProfName(actor) == PROC_CSTAF) {
|
||||
return actor;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -40,7 +59,8 @@ bool daTagCstaSw_c::areaCheck() {
|
||||
}
|
||||
|
||||
cXyz vec_to_actor = current.pos - sekizo_p->current.pos;
|
||||
if (vec_to_actor.absXZ() <= scale.x * 100.0f) {
|
||||
f32 dist_to_actor = vec_to_actor.absXZ();
|
||||
if (dist_to_actor <= scale.x * 100.0f) {
|
||||
in_area = true;
|
||||
}
|
||||
|
||||
@@ -48,7 +68,8 @@ bool daTagCstaSw_c::areaCheck() {
|
||||
}
|
||||
|
||||
int daTagCstaSw_c::Execute() {
|
||||
if (areaCheck() == 1) {
|
||||
bool checkResult = areaCheck();
|
||||
if (checkResult == 1) {
|
||||
if (!fopAcM_isSwitch(this, mSwitch)) {
|
||||
fopAcM_onSwitch(this, mSwitch);
|
||||
}
|
||||
@@ -61,10 +82,23 @@ int daTagCstaSw_c::Execute() {
|
||||
}
|
||||
|
||||
int daTagCstaSw_c::Draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
g_env_light.settingTevStruct(16, ¤t.pos, &tevStr);
|
||||
|
||||
GXColor color = (GXColor){0, 0, 0xff, 0x80};
|
||||
dDbVw_drawCylinderXlu(current.pos, scale.x * 100.0f, scale.y * 100.0f, color, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagCstaSw_c::Delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -77,17 +111,16 @@ static int daTagCstaSw_Execute(daTagCstaSw_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagCstaSw_Delete(daTagCstaSw_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->Delete();
|
||||
}
|
||||
|
||||
static int daTagCstaSw_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagCstaSw_c*>(i_this)->create();
|
||||
daTagCstaSw_c* cstaSw = static_cast<daTagCstaSw_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return cstaSw->create();
|
||||
}
|
||||
|
||||
daTagCstaSw_HIO_c::~daTagCstaSw_HIO_c() {}
|
||||
|
||||
static daTagCstaSw_HIO_c l_HIO;
|
||||
|
||||
static actor_method_class l_daTagCstaSw_Method = {
|
||||
(process_method_func)daTagCstaSw_Create, (process_method_func)daTagCstaSw_Delete,
|
||||
(process_method_func)daTagCstaSw_Execute, (process_method_func)NULL,
|
||||
|
||||
@@ -10,29 +10,32 @@
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
static int createSolidHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLv6Gate_c*>(i_this)->createHeap();
|
||||
}
|
||||
|
||||
static f32 const l_minRelative[] = {-700.0f, -300.0f, -2000.0f};
|
||||
|
||||
static f32 const l_maxRelative[] = {700.0f, 0.0f, 1000.0f};
|
||||
|
||||
static char* l_arcName = "Lv6Gate";
|
||||
|
||||
int daTagLv6Gate_c::createHeap() {
|
||||
static int createSolidHeap(fopAc_ac_c* i_this) {
|
||||
daTagLv6Gate_c* gate = static_cast<daTagLv6Gate_c*>(i_this);
|
||||
return gate->createHeap();
|
||||
}
|
||||
|
||||
inline int daTagLv6Gate_c::createHeap() {
|
||||
J3DAnmTextureSRTKey* btk;
|
||||
|
||||
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 15);
|
||||
mpModel[0] = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000284);
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 15);
|
||||
JUT_ASSERT(92, modelData != NULL);
|
||||
mpModel[0] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
|
||||
if (mpModel[0] == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 19);
|
||||
JUT_ASSERT(100, btk != NULL);
|
||||
mpBtk[0] = new mDoExt_btkAnm();
|
||||
if (mpBtk[0] == NULL ||
|
||||
!mpBtk[0]->init(model_data, btk, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1))
|
||||
!mpBtk[0]->init(modelData, btk, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -42,15 +45,17 @@ int daTagLv6Gate_c::createHeap() {
|
||||
}
|
||||
|
||||
btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 20);
|
||||
JUT_ASSERT(108, btk != NULL);
|
||||
mpBtk[1] = new mDoExt_btkAnm();
|
||||
if (mpBtk[1] == NULL ||
|
||||
!mpBtk[1]->init(model_data, btk, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1))
|
||||
!mpBtk[1]->init(modelData, btk, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 16);
|
||||
mpModel[1] = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084);
|
||||
modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 16);
|
||||
JUT_ASSERT(115, modelData != NULL);
|
||||
mpModel[1] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
||||
if (mpModel[1] == NULL) {
|
||||
return 0;
|
||||
}
|
||||
@@ -68,7 +73,9 @@ int daTagLv6Gate_c::createHeap() {
|
||||
}
|
||||
|
||||
static int daTagLv6Gate_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLv6Gate_c*>(i_this)->create();
|
||||
daTagLv6Gate_c* gate = static_cast<daTagLv6Gate_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return gate->create();
|
||||
}
|
||||
|
||||
void daTagLv6Gate_c::initBaseMtx() {
|
||||
@@ -76,13 +83,13 @@ void daTagLv6Gate_c::initBaseMtx() {
|
||||
|
||||
mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f);
|
||||
mDoMtx_stack_c::YrotM(0);
|
||||
MTXCopy(mDoMtx_stack_c::get(), field_0x6f8[0]);
|
||||
cMtx_copy(mDoMtx_stack_c::get(), field_0x6f8[0]);
|
||||
mpModel[0]->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mBgW[0].Move();
|
||||
|
||||
mDoMtx_stack_c::transS(0.0f, 2887.0f, -8330.0f);
|
||||
mDoMtx_stack_c::YrotM(0);
|
||||
MTXCopy(mDoMtx_stack_c::get(), field_0x6f8[1]);
|
||||
cMtx_copy(mDoMtx_stack_c::get(), field_0x6f8[1]);
|
||||
mpModel[1]->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mBgW[1].Move();
|
||||
}
|
||||
@@ -159,27 +166,25 @@ inline int daTagLv6Gate_c::execute() {
|
||||
actor1 = NULL;
|
||||
fopAcM_SearchByID(parentActorID, &actor1);
|
||||
|
||||
if (actor1 == NULL) {
|
||||
break;
|
||||
if (actor1 != NULL) {
|
||||
fopAcM_GetOldPosition_p(actor1)->set(pos);
|
||||
fopAcM_GetPosition_p(actor1)->set(pos);
|
||||
|
||||
#if PLATFORM_GCN
|
||||
actor2 = NULL;
|
||||
fopAcM_SearchByName(PROC_NPC_TKC, &actor2);
|
||||
|
||||
if (actor2 == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
*fopAcM_GetOldPosition_p(actor2) = pos;
|
||||
*fopAcM_GetPosition_p(actor2) = pos;
|
||||
#endif
|
||||
}
|
||||
|
||||
fopAcM_GetOldPosition_p(actor1)->set(pos);
|
||||
fopAcM_GetPosition_p(actor1)->set(pos);
|
||||
|
||||
#if VERSION != VERSION_SHIELD_DEBUG
|
||||
|
||||
actor2 = NULL;
|
||||
fopAcM_SearchByName(PROC_NPC_TKC, &actor2);
|
||||
|
||||
if (actor2 == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
*fopAcM_GetOldPosition_p(actor2) = pos;
|
||||
*fopAcM_GetPosition_p(actor2) = pos;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case '0005':
|
||||
break;
|
||||
case '0006':
|
||||
fopAcM_onSwitch(this, getSwitchNo2());
|
||||
mpBtk[0]->setFrame(mpBtk[0]->getEndFrame());
|
||||
@@ -189,7 +194,9 @@ inline int daTagLv6Gate_c::execute() {
|
||||
fopAcM_delete(parentActorID);
|
||||
break;
|
||||
default:
|
||||
int unused; // debug: force extra b instruction at end of case
|
||||
JUT_ASSERT(332, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,8 +340,8 @@ int daTagLv6Gate_c::draw() {
|
||||
}
|
||||
|
||||
for (u16 i = 0; i < 2; i++) {
|
||||
J3DModelData* model_data = mpModel[1]->getModelData();
|
||||
model_data->getMaterialNodePointer(i)->getTevKColor(3)->a = field_0x760[i];
|
||||
J3DMaterial* material = mpModel[1]->getModelData()->getMaterialNodePointer(i);
|
||||
material->getTevKColor(3)->a = field_0x760[i];
|
||||
}
|
||||
|
||||
g_env_light.setLightTevColorType_MAJI(mpModel[1], &tevStr);
|
||||
@@ -360,6 +367,7 @@ daTagLv6Gate_c::~daTagLv6Gate_c() {
|
||||
}
|
||||
|
||||
static int daTagLv6Gate_Delete(daTagLv6Gate_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagLv6Gate_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -18,14 +18,16 @@ int daTagLv7Gate_c::createHeap() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 11);
|
||||
mpModel = mDoExt_J3DModel__create(model_data, 0, 0x11000084);
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 11);
|
||||
JUT_ASSERT(92, modelData != NULL);
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11000084);
|
||||
|
||||
if (mpModel == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7);
|
||||
JUT_ASSERT(100, bck != NULL);
|
||||
|
||||
mpBck = new mDoExt_bckAnm();
|
||||
|
||||
@@ -37,11 +39,14 @@ int daTagLv7Gate_c::createHeap() {
|
||||
}
|
||||
|
||||
static int createSolidHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLv7Gate_c*>(i_this)->createHeap();
|
||||
daTagLv7Gate_c* gate = static_cast<daTagLv7Gate_c*>(i_this);
|
||||
return gate->createHeap();
|
||||
}
|
||||
|
||||
static int daTagLv7Gate_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLv7Gate_c*>(i_this)->create();
|
||||
daTagLv7Gate_c* gate = static_cast<daTagLv7Gate_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return gate->create();
|
||||
}
|
||||
|
||||
int daTagLv7Gate_c::create() {
|
||||
@@ -66,48 +71,46 @@ int daTagLv7Gate_c::create() {
|
||||
return phase;
|
||||
}
|
||||
|
||||
void daTagLv7Gate_c::setPath(u8 i_path_ID) {
|
||||
int daTagLv7Gate_c::setPath(int i_path_ID) {
|
||||
mRoomPath = dPath_GetRoomPath(i_path_ID, fopAcM_GetRoomNo(this));
|
||||
if (mRoomPath != NULL) {
|
||||
dPnt* pnt = dPath_GetPnt(mRoomPath, 0);
|
||||
cXyz pos1 = pnt->m_position;
|
||||
|
||||
pnt = dPath_GetPnt(mRoomPath, 1);
|
||||
cXyz pos2 = pnt->m_position;
|
||||
|
||||
mPos1 = pos1;
|
||||
|
||||
// Fake match?
|
||||
s16 angle_y = cLib_targetAngleY(&pos1, &pos2);
|
||||
// s16 angle_x = cLib_targetAngleX(&pos1, &pos2);
|
||||
|
||||
// field_0x594.set(-angle_x, angle_y, 0);
|
||||
field_0x594.x = -cLib_targetAngleX(&pos1, &pos2);
|
||||
// field_0x594.x = -angle_x;
|
||||
field_0x594.y = angle_y;
|
||||
field_0x594.z = 0;
|
||||
|
||||
mDistance = sqrtf(PSVECSquareDistance((Vec*)&mPos1, (Vec*)&pos2));
|
||||
field_0x5a0 = 1;
|
||||
mPos2 = pos2;
|
||||
if (mRoomPath == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
cXyz pos1 = dPath_GetPnt(mRoomPath, 0)->m_position;
|
||||
cXyz pos2 = dPath_GetPnt(mRoomPath, 1)->m_position;
|
||||
|
||||
mPos1.set(pos1);
|
||||
|
||||
field_0x594.set(-cLib_targetAngleX(&pos1, &pos2), cLib_targetAngleY(&pos1, &pos2), 0);
|
||||
|
||||
mDistance = mPos1.abs(pos2);
|
||||
field_0x5a0 = 1;
|
||||
mPos2.set(pos2);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void daTagLv7Gate_c::initBaseMtx() {
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
if (mpModel != NULL) {
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
setBaseMtx();
|
||||
}
|
||||
}
|
||||
|
||||
void daTagLv7Gate_c::setBaseMtx() {
|
||||
if (mpModel) {
|
||||
cXyz local_34(0.0f, 0.0f, speedF);
|
||||
|
||||
mDoMtx_stack_c::transS(mPos1);
|
||||
mDoMtx_stack_c::ZXYrotM((csXyz&)field_0x594);
|
||||
mDoMtx_stack_c::multVec(&local_34, (Vec*)&mPos1);
|
||||
MTXCopy(mDoMtx_stack_c::get(), mpModel->mBaseTransformMtx);
|
||||
|
||||
attention_info.position = mPos1;
|
||||
if (mpModel == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
cXyz local_34(0.0f, 0.0f, speedF);
|
||||
|
||||
mDoMtx_stack_c::transS(mPos1);
|
||||
mDoMtx_stack_c::ZXYrotM(field_0x594);
|
||||
mDoMtx_stack_c::multVec(&local_34, &mPos1);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
|
||||
attention_info.position = mPos1;
|
||||
}
|
||||
|
||||
void daTagLv7Gate_c::create_init() {
|
||||
@@ -119,14 +122,11 @@ void daTagLv7Gate_c::create_init() {
|
||||
field_0x5b0 = false;
|
||||
field_0x5b1 = false;
|
||||
|
||||
setPath(getPathID() & 0xFF);
|
||||
setPath(getPathID());
|
||||
|
||||
attention_info.position = mPos1;
|
||||
|
||||
if (mpModel) {
|
||||
initBaseMtx();
|
||||
setBaseMtx();
|
||||
}
|
||||
initBaseMtx();
|
||||
|
||||
// City in the Sky clear
|
||||
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[268])) {
|
||||
@@ -149,13 +149,9 @@ void daTagLv7Gate_c::create_init() {
|
||||
|
||||
fopAcM_create(PROC_NPC_TKS, 7, &pos, fopAcM_GetRoomNo(this), &local_54, NULL, -1);
|
||||
|
||||
pos.x = 2603.315f;
|
||||
pos.y = -200.0f;
|
||||
pos.z = 5485.9224f;
|
||||
pos.set(2603.315f, -200.0f, 5485.9224f);
|
||||
|
||||
local_54.x = 0.0f;
|
||||
local_54.y = -0x4000;
|
||||
local_54.z = 0.0f;
|
||||
local_54.set(0, -0x4000, 0);
|
||||
|
||||
fopAcM_create(PROC_NPC_TKJ, 0, &pos, fopAcM_GetRoomNo(this), &local_54, NULL, -1);
|
||||
}
|
||||
@@ -163,6 +159,7 @@ void daTagLv7Gate_c::create_init() {
|
||||
eventInfo.setArchiveName(l_arcName);
|
||||
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
|
||||
mEvtId = dComIfGp_getEventManager().getEventIdx(this, mEvName, -1);
|
||||
JUT_ASSERT(204, mEvtId != -1);
|
||||
fopAcM_orderOtherEventId(this, mEvtId, -1, -1, 2, 1);
|
||||
}
|
||||
|
||||
@@ -187,7 +184,7 @@ void daTagLv7Gate_c::flyAnime() {
|
||||
|
||||
if (bck_anm == bck_anm_3) {
|
||||
if (field_0x5ac < 150) {
|
||||
field_0x5ac += 1;
|
||||
field_0x5ac += (u16)1;
|
||||
if (field_0x5ac >= 150) {
|
||||
bck = bck_anm_4;
|
||||
attribute = J3DFrameCtrl::EMode_NONE;
|
||||
@@ -199,10 +196,7 @@ void daTagLv7Gate_c::flyAnime() {
|
||||
attribute = J3DFrameCtrl::EMode_NONE;
|
||||
}
|
||||
} else {
|
||||
// } else if (mpBck->isStop()) {
|
||||
// Fake match?
|
||||
mDoExt_bckAnm* tmp = mpBck;
|
||||
if (tmp->isStop()) {
|
||||
if (mpBck->isStop()) {
|
||||
if (bck_anm == bck_anm_2) {
|
||||
bck = bck_anm_3;
|
||||
attribute = J3DFrameCtrl::EMode_LOOP;
|
||||
@@ -287,46 +281,39 @@ int daTagLv7Gate_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool daTagLv7Gate_c::checkPoint(f32 i_speed) {
|
||||
bool daTagLv7Gate_c::checkPoint(cXyz& i_point, f32 i_speed) {
|
||||
dPnt* pnt = dPath_GetPnt(mRoomPath, field_0x5a0);
|
||||
mDistance -= i_speed;
|
||||
if (sqrtf(PSVECSquareDistance((Vec*)&mPos1, (Vec*)&pnt->m_position)) < i_speed ||
|
||||
if (i_point.abs(pnt->m_position) < i_speed ||
|
||||
mDistance < 0.0f) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool daTagLv7Gate_c::setNextPoint() {
|
||||
bool bVar1;
|
||||
dPath_GetPnt(mRoomPath, field_0x5a0);
|
||||
dPnt* unusedPnt = dPath_GetPnt(mRoomPath, field_0x5a0);
|
||||
dPnt* pnt;
|
||||
field_0x5a0 += 1;
|
||||
if (field_0x5a0 >= mRoomPath->m_num) {
|
||||
field_0x5a0 = mRoomPath->m_num - 1;
|
||||
mDistance = 0;
|
||||
bVar1 = true;
|
||||
return true;
|
||||
} else {
|
||||
dPnt* pnt = dPath_GetPnt(mRoomPath, field_0x5a0);
|
||||
|
||||
cXyz pos1(mPos1.x, 0.0f, mPos1.z);
|
||||
|
||||
cXyz pos2(pnt->m_position.x, 0.0f, pnt->m_position.z);
|
||||
|
||||
mDistance = sqrtf(PSVECSquareDistance((Vec*)&pos1, (Vec*)&pos2));
|
||||
mPos2 = pnt->m_position;
|
||||
bVar1 = false;
|
||||
pnt = dPath_GetPnt(mRoomPath, field_0x5a0);
|
||||
mDistance = mPos1.absXZ(pnt->m_position);
|
||||
mPos2.set(pnt->m_position);
|
||||
return false;
|
||||
}
|
||||
if (bVar1) {
|
||||
field_0x5b1 = false;
|
||||
speedF = 0;
|
||||
}
|
||||
return bVar1;
|
||||
}
|
||||
|
||||
void daTagLv7Gate_c::calcFly() {
|
||||
f32 speed = speedF;
|
||||
if (checkPoint(speed)) {
|
||||
setNextPoint();
|
||||
if (checkPoint(mPos1, speedF)) {
|
||||
if (setNextPoint()) {
|
||||
field_0x5b1 = false;
|
||||
speedF = 0.0f;
|
||||
}
|
||||
}
|
||||
s16 angle_x = -cLib_targetAngleX(&mPos1, &mPos2);
|
||||
s16 angle_y = cLib_targetAngleY(&mPos1, &mPos2);
|
||||
@@ -361,6 +348,7 @@ daTagLv7Gate_c::~daTagLv7Gate_c() {
|
||||
}
|
||||
|
||||
static int daTagLv7Gate_Delete(daTagLv7Gate_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagLv7Gate_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
static char* l_arcName = "Lv8Gate";
|
||||
|
||||
static int createSolidHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLv8Gate_c*>(i_this)->createHeap();
|
||||
daTagLv8Gate_c* gate = static_cast<daTagLv8Gate_c*>(i_this);
|
||||
return gate->createHeap();
|
||||
}
|
||||
|
||||
daTagLv8Gate_c::~daTagLv8Gate_c() {
|
||||
@@ -43,21 +44,20 @@ inline int daTagLv8Gate_c::create() {
|
||||
fopAcM_ct(this, daTagLv8Gate_c);
|
||||
|
||||
cPhs__Step step;
|
||||
/* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */
|
||||
/* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */
|
||||
if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) {
|
||||
step = cPhs_ERROR_e;
|
||||
return cPhs_ERROR_e;
|
||||
} else {
|
||||
step = (cPhs__Step)dComIfG_resLoad(&mPhaseReq, l_arcName);
|
||||
if (step == cPhs_COMPLEATE_e) {
|
||||
if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x1600)) {
|
||||
step = cPhs_ERROR_e;
|
||||
return cPhs_ERROR_e;
|
||||
} else {
|
||||
create_init();
|
||||
}
|
||||
}
|
||||
return step;
|
||||
}
|
||||
|
||||
return step;
|
||||
}
|
||||
|
||||
inline int daTagLv8Gate_c::draw() {
|
||||
@@ -81,18 +81,24 @@ inline int daTagLv8Gate_c::draw() {
|
||||
dComIfGd_setList();
|
||||
|
||||
if (mpBck != NULL) {
|
||||
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
|
||||
mpBck->remove(mpModel->getModelData());
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// this function and ::execute seem to be inline, but somehow both this function's .data and .rodata
|
||||
// are supposed to be placed before ::execute's (.data order is reversed for inline functions but
|
||||
// .rodata order is not)
|
||||
// retail function order also suggests that this function comes first
|
||||
int daTagLv8Gate_c::createHeap() {
|
||||
if (strcmp(dComIfGp_getStartStageName(), "D_MN08") == 0) {
|
||||
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 8);
|
||||
mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084);
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 8);
|
||||
JUT_ASSERT(275, modelData != NULL);
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
||||
|
||||
J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 5);
|
||||
JUT_ASSERT(283, bck != NULL);
|
||||
mpBck = new mDoExt_bckAnm();
|
||||
if (mpBck == NULL ||
|
||||
!mpBck->init(bck, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false))
|
||||
@@ -105,15 +111,16 @@ int daTagLv8Gate_c::createHeap() {
|
||||
}
|
||||
|
||||
static int daTagLv8Gate_Create(fopAc_ac_c* i_this) {
|
||||
daTagLv8Gate_c* a_this = static_cast<daTagLv8Gate_c*>(i_this);
|
||||
return a_this->create();
|
||||
daTagLv8Gate_c* gate = static_cast<daTagLv8Gate_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return gate->create();
|
||||
}
|
||||
|
||||
static int daTagLv8Gate_Execute(daTagLv8Gate_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
inline int daTagLv8Gate_c::execute() {
|
||||
int daTagLv8Gate_c::execute() {
|
||||
if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) {
|
||||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||||
s32 cut_index = eventManager.getMyStaffId(l_arcName, NULL, 0);
|
||||
@@ -132,8 +139,8 @@ inline int daTagLv8Gate_c::execute() {
|
||||
if (mirror_table != NULL) {
|
||||
static_cast<daObjMirrorTable_c*>(mirror_table)->setEffect();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case '0002':
|
||||
dStage_changeScene(getSceneNo(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
|
||||
break;
|
||||
@@ -215,6 +222,7 @@ static int daTagLv8Gate_IsDelete(daTagLv8Gate_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagLv8Gate_Delete(daTagLv8Gate_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagLv8Gate_c();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+276
-143
@@ -4,12 +4,13 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_TWgate.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_tag_TWgate.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_msg_object.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
|
||||
struct daTagTWGate_zevParam {
|
||||
/* 0x00 */ char* mArcName;
|
||||
@@ -23,13 +24,11 @@ struct daTagTWGate_zevParam {
|
||||
/* 0x1B */ s8 mLayer;
|
||||
};
|
||||
|
||||
void daTagTWGate_c::initWait() {
|
||||
mEventID = -1;
|
||||
}
|
||||
daTagTWGate_Attr_c const daTagTWGate_c::mAttr = {};
|
||||
|
||||
u8 const daTagTWGate_c::mAttr[1] = {
|
||||
0x00,
|
||||
};
|
||||
#if DEBUG
|
||||
daTagTWGate_Hio_c daTagTWGate_c::mHio;
|
||||
#endif
|
||||
|
||||
static daTagTWGate_zevParam const l_zevParamTbl[4] = {
|
||||
{
|
||||
@@ -80,7 +79,7 @@ static daTagTWGate_zevParam const l_zevParamTbl[4] = {
|
||||
|
||||
static const char* l_myName = "Gate";
|
||||
|
||||
actionFunc daTagTWGate_c::ActionTable[13][2] = {
|
||||
const actionFunc daTagTWGate_c::ActionTable[][2] = {
|
||||
{&daTagTWGate_c::initWait, &daTagTWGate_c::executeWait},
|
||||
{&daTagTWGate_c::initDemoFilone1, &daTagTWGate_c::executeDemoFilone1},
|
||||
{&daTagTWGate_c::initDemoFilone2, &daTagTWGate_c::executeDemoFilone2},
|
||||
@@ -96,59 +95,117 @@ actionFunc daTagTWGate_c::ActionTable[13][2] = {
|
||||
{&daTagTWGate_c::initDemoHyral3, &daTagTWGate_c::executeDemoHyral3},
|
||||
};
|
||||
|
||||
void daTagTWGate_c::executeWait() {
|
||||
f32 radius = pow(scale.x * 100.0f, 2.0f);
|
||||
f32 distance = fopAcM_searchActorDistanceXZ2(this, (fopAc_ac_c*)dComIfGp_getPlayer(0));
|
||||
#if DEBUG
|
||||
daTagTWGate_Hio_c::daTagTWGate_Hio_c() {
|
||||
field_0x8 = 0;
|
||||
default_set();
|
||||
}
|
||||
|
||||
if (distance < radius) {
|
||||
void daTagTWGate_Hio_c::ct() {
|
||||
if (field_0x8++ == 0) {
|
||||
// "Twilight Gate tag"
|
||||
entryHIO("トワイライトゲートタグ");
|
||||
}
|
||||
}
|
||||
|
||||
void daTagTWGate_Hio_c::dt() {
|
||||
if (--field_0x8 == 0) {
|
||||
removeHIO();
|
||||
}
|
||||
}
|
||||
|
||||
void daTagTWGate_Hio_c::default_set() {
|
||||
attr = daTagTWGate_c::mAttr;
|
||||
}
|
||||
|
||||
void daTagTWGate_Hio_c::genMessage(JORMContext* ctx) {
|
||||
// "Twilight Gate tag parameter settings"
|
||||
ctx->genLabel("§ トワイライトゲートタグ パラメータ設定 §\n", 0);
|
||||
// "Draw range"
|
||||
ctx->genCheckBox("範囲描画", &attr.show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
inline daTagTWGate_c::~daTagTWGate_c() {
|
||||
dComIfG_resDelete(&mPhaseZevArc, l_zevParamTbl[mType].mArcName);
|
||||
|
||||
if (mPhaseMdRes.id != cPhs_INIT_e) {
|
||||
dComIfG_resDelete(&mPhaseMdRes, "TWGate_Md");
|
||||
}
|
||||
|
||||
if (mPhasePyRes.id != cPhs_INIT_e) {
|
||||
dComIfG_resDelete(&mPhasePyRes, mIsWolf ? "TWGate_Wf" : "TWGate_Lk");
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
mHio.dt();
|
||||
#endif
|
||||
}
|
||||
|
||||
void daTagTWGate_c::initWait() {
|
||||
mEventID = -1;
|
||||
}
|
||||
|
||||
void daTagTWGate_c::setAction(Mode_e i_action) {
|
||||
JUT_ASSERT(233, i_action < MODE_MAX_e);
|
||||
int oldActionID = mActionID;
|
||||
mActionID = i_action;
|
||||
mAction = ActionTable[mActionID];
|
||||
callInit();
|
||||
}
|
||||
|
||||
void daTagTWGate_c::callInit() {
|
||||
JUT_ASSERT(289, mAction != NULL);
|
||||
(this->*(*mAction))();
|
||||
}
|
||||
|
||||
void daTagTWGate_c::callExecute() {
|
||||
JUT_ASSERT(302, mAction != NULL);
|
||||
(this->*mAction[1])();
|
||||
Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_DARK_GATE, ¤t.pos,
|
||||
0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
}
|
||||
|
||||
void daTagTWGate_c::executeWait() {
|
||||
f32 radius = std::pow(scale.x * 100.0f, 2.0f);
|
||||
|
||||
if (fopAcM_searchPlayerDistanceXZ2(this) < radius) {
|
||||
if (field_0x5de == 0) {
|
||||
field_0x5de = 1;
|
||||
|
||||
switch (mType) {
|
||||
case TYPE_FILONE:
|
||||
if (fopAcM_isSwitch(this, getSwitch())) {
|
||||
mActionID = ACT_DEMO_FILONE_2;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_FILONE_2);
|
||||
} else {
|
||||
mActionID = ACT_DEMO_FILONE_1;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_FILONE_1);
|
||||
}
|
||||
break;
|
||||
case TYPE_ORDIN:
|
||||
if (fopAcM_isSwitch(this, getSwitch())) {
|
||||
mActionID = ACT_DEMO_ORDIN_2;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_ORDIN_2);
|
||||
} else {
|
||||
mActionID = ACT_DEMO_ORDIN_1;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_ORDIN_1);
|
||||
}
|
||||
break;
|
||||
case TYPE_RANAIL:
|
||||
if (fopAcM_isSwitch(this, getSwitch())) {
|
||||
mActionID = ACT_DEMO_RANAIL_2;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_RANAIL_2);
|
||||
} else {
|
||||
mActionID = ACT_DEMO_RANAIL_1;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_RANAIL_1);
|
||||
}
|
||||
break;
|
||||
case TYPE_HYRAL:
|
||||
if (fopAcM_isSwitch(this, getSwitch())) {
|
||||
mActionID = ACT_DEMO_HYRAL_2;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_HYRAL_2);
|
||||
} else {
|
||||
mActionID = ACT_DEMO_HYRAL_1;
|
||||
mAction = &ActionTable[mActionID][0];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_HYRAL_1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// "Twilight Gate demo tag argument 0 error Type=%d
|
||||
OS_REPORT("\nトワイライトゲートデモタグ 引数0エラー Type=%d\n\n", mType);
|
||||
JUT_ASSERT(344, FALSE);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -166,34 +223,36 @@ void daTagTWGate_c::executeDemoFilone1() {
|
||||
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
|
||||
int staffId = event_manager.getMyStaffId(l_myName, NULL, 0);
|
||||
|
||||
int* cutName;
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)event_manager.getMyNowCutName(staffId);
|
||||
cutName = (int*)event_manager.getMyNowCutName(staffId);
|
||||
|
||||
if (event_manager.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case 0x30303031:
|
||||
dComIfGp_getEvent()->setSkipProc(this, dEv_noFinishSkipProc, 0);
|
||||
dComIfGp_getEvent()->startCheckSkipEdge(this);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(395, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
switch (*cutName) {
|
||||
case 0x30303031:
|
||||
if (dComIfGp_getEvent()->chkFlag2(8)) {
|
||||
if (dComIfGp_getEvent()->checkSkipEdge()) {
|
||||
dComIfGp_getEvent()->onSkipFade();
|
||||
mActionID = ACT_DEMO_FILONE_2;
|
||||
mAction = ActionTable[mActionID];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_FILONE_2);
|
||||
}
|
||||
event_manager.cutEnd(staffId);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(407, FALSE);
|
||||
}
|
||||
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
event_manager.endCheck(mEventID))
|
||||
{
|
||||
mActionID = ACT_DEMO_FILONE_2;
|
||||
mAction = ActionTable[mActionID];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_DEMO_FILONE_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -213,12 +272,13 @@ void daTagTWGate_c::initDemoFilone2() {
|
||||
}
|
||||
|
||||
void daTagTWGate_c::executeDemoFilone2() {
|
||||
s32 staffId = dComIfGp_evmng_getMyStaffId(l_myName, NULL, 0);
|
||||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||||
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
|
||||
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)dComIfGp_getEventManager().getMyNowCutName(staffId);
|
||||
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
|
||||
|
||||
if (dComIfGp_evmng_getIsAddvance(staffId)) {
|
||||
if (eventManager.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case '0002':
|
||||
initTalk(0xBC1, NULL);
|
||||
@@ -226,40 +286,43 @@ void daTagTWGate_c::executeDemoFilone2() {
|
||||
case '0001':
|
||||
case '0003':
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(480, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
case '0003':
|
||||
dComIfGp_evmng_cutEnd(staffId);
|
||||
eventManager.cutEnd(staffId);
|
||||
break;
|
||||
case '0002':
|
||||
if (talkProc(NULL, 1, NULL)) {
|
||||
if (mMsgFlow.getChoiceNo() == 0) {
|
||||
mActionID = ACT_DEMO_FILONE_3;
|
||||
mAction = ActionTable[mActionID];
|
||||
(this->**mAction)();
|
||||
int choiceNo = mMsgFlow.getChoiceNo();
|
||||
// "Two-way branch %s" / "Yes" / "No"
|
||||
OS_REPORT("二択分岐 %s\n", choiceNo == 0 ? "はい" : "いいえ");
|
||||
if (choiceNo == 0) {
|
||||
setAction(ACT_DEMO_FILONE_3);
|
||||
}
|
||||
dComIfGp_evmng_cutEnd(staffId);
|
||||
eventManager.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(497, FALSE);
|
||||
}
|
||||
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
dComIfGp_evmng_endCheck(mEventID)) {
|
||||
dComIfGp_getEvent()->reset();
|
||||
eventManager.endCheck(mEventID)) {
|
||||
dComIfGp_event_reset();
|
||||
field_0x5e0 = 0;
|
||||
mActionID = ACT_WAIT;
|
||||
mAction = ActionTable[mActionID];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_WAIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void daTagTWGate_c::initDemoFilone3() {
|
||||
field_0x5de = 1;
|
||||
mIsWolf = (dComIfGp_getLinkPlayer()->mNoResetFlg1 >> 25) & 1; // checking if wolf?
|
||||
mIsWolf = daPy_py_c::checkNowWolf() ? TRUE : FALSE;
|
||||
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
|
||||
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
|
||||
mEventID =
|
||||
@@ -269,17 +332,18 @@ void daTagTWGate_c::initDemoFilone3() {
|
||||
}
|
||||
|
||||
void daTagTWGate_c::executeDemoFilone3() {
|
||||
s32 staffId = dComIfGp_evmng_getMyStaffId(l_myName, NULL, 0);
|
||||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||||
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
|
||||
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)dComIfGp_getEventManager().getMyNowCutName(staffId);
|
||||
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
|
||||
|
||||
if (dComIfGp_evmng_getIsAddvance(staffId)) {
|
||||
if (eventManager.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case 0x30303031:
|
||||
break;
|
||||
case 0x30303032:
|
||||
dComIfGp_getEvent()->setSkipProc(this, dEv_noFinishSkipProc, 0);
|
||||
dComIfGp_getEvent()->startCheckSkipEdge(this);
|
||||
field_0x5e1 = 0;
|
||||
break;
|
||||
case 0x30303033:
|
||||
@@ -287,50 +351,46 @@ void daTagTWGate_c::executeDemoFilone3() {
|
||||
mpMorf->setPlaySpeed(1.0f);
|
||||
field_0x5e0 = 1;
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(560, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
switch (*cutName) {
|
||||
case 0x30303031: {
|
||||
case 0x30303031:
|
||||
int modelSts = downloadModels();
|
||||
if (modelSts == 1) {
|
||||
dComIfGp_evmng_cutEnd(staffId);
|
||||
eventManager.cutEnd(staffId);
|
||||
} else if (modelSts == -1) {
|
||||
dComIfGp_setNextStage(l_zevParamTbl[mType].mStage, l_zevParamTbl[mType].mPoint,
|
||||
l_zevParamTbl[mType].mRoomNo, l_zevParamTbl[mType].mLayer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0x30303032: {
|
||||
if (dComIfGp_getEvent()->chkFlag2(8)) {
|
||||
case 0x30303032:
|
||||
if (dComIfGp_getEvent()->checkSkipEdge()) {
|
||||
dComIfGp_getEvent()->onSkipFade();
|
||||
dComIfGp_setNextStage(l_zevParamTbl[mType].mStage, l_zevParamTbl[mType].mPoint,
|
||||
l_zevParamTbl[mType].mRoomNo, l_zevParamTbl[mType].mLayer);
|
||||
}
|
||||
|
||||
u8 old_5e1 = field_0x5e1;
|
||||
field_0x5e1++;
|
||||
|
||||
if (old_5e1 == 43) {
|
||||
if (field_0x5e1++ == 43) {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
csXyz sxyz(0, player->shape_angle.y + 0x8000, 0);
|
||||
cXyz pos;
|
||||
csXyz sxyz(0, fopAcM_GetShapeAngle_p(player)->y + 0x8000, 0);
|
||||
|
||||
mDoMtx_stack_c::transS(player->current.pos);
|
||||
mDoMtx_stack_c::transS(fopAcM_GetPosition(player));
|
||||
mDoMtx_stack_c::YrotM(sxyz.y);
|
||||
mDoMtx_stack_c::transM(0.0f, 240.0f, -710.0f);
|
||||
|
||||
cXyz pos;
|
||||
pos.x = mDoMtx_stack_c::get()[0][3];
|
||||
pos.y = mDoMtx_stack_c::get()[1][3];
|
||||
pos.z = mDoMtx_stack_c::get()[2][3];
|
||||
mDoMtx_stack_c::multVecZero(&pos);
|
||||
dComIfGp_particle_set(0x86C5, &pos, &sxyz, NULL);
|
||||
mDoAud_seStart(Z2SE_OBJ_DARK_GATE_RIPPLE, &pos, 0, 0);
|
||||
dComIfGp_evmng_cutEnd(staffId);
|
||||
Z2GetAudioMgr()->seStart(Z2SE_OBJ_DARK_GATE_RIPPLE, &pos,
|
||||
0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
eventManager.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0x30303033:
|
||||
if (dComIfGp_getEvent()->chkFlag2(8)) {
|
||||
if (dComIfGp_getEvent()->checkSkipEdge()) {
|
||||
dComIfGp_getEvent()->onSkipFade();
|
||||
dComIfGp_setNextStage(l_zevParamTbl[mType].mStage,
|
||||
l_zevParamTbl[mType].mPoint,
|
||||
@@ -339,18 +399,19 @@ void daTagTWGate_c::executeDemoFilone3() {
|
||||
}
|
||||
|
||||
if (mpMorf->isStop()) {
|
||||
dComIfGp_evmng_cutEnd(staffId);
|
||||
eventManager.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(621, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
dComIfGp_evmng_endCheck(mEventID)) {
|
||||
dComIfGp_getEvent()->reset();
|
||||
eventManager.endCheck(mEventID)) {
|
||||
dComIfGp_event_reset();
|
||||
field_0x5e0 = 0;
|
||||
mActionID = ACT_WAIT;
|
||||
mAction = ActionTable[mActionID];
|
||||
(this->**mAction)();
|
||||
setAction(ACT_WAIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -364,13 +425,16 @@ void daTagTWGate_c::initDemoOrdin1() {
|
||||
void daTagTWGate_c::executeDemoOrdin1() {
|
||||
dEvent_manager_c& evtMng = dComIfGp_getEventManager();
|
||||
int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
|
||||
int* cutName;
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
if (evtMng.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
dComIfGp_getEvent()->startCheckSkipEdge(this);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(674, FALSE);
|
||||
}
|
||||
}
|
||||
switch (*cutName) {
|
||||
@@ -381,6 +445,9 @@ void daTagTWGate_c::executeDemoOrdin1() {
|
||||
}
|
||||
evtMng.cutEnd(staffId);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(686, FALSE);
|
||||
break;
|
||||
}
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
|
||||
setAction(ACT_DEMO_ORDIN_2);
|
||||
@@ -417,23 +484,30 @@ void daTagTWGate_c::executeDemoOrdin2() {
|
||||
break;
|
||||
case '0003':
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(749, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
int choiceNo;
|
||||
switch(*cutName) {
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
case '0003':
|
||||
evtMng.cutEnd(staffId);
|
||||
break;
|
||||
case '0002':
|
||||
if (talkProc(NULL, 1, NULL)) {
|
||||
choiceNo = mMsgFlow.getChoiceNo();
|
||||
int choiceNo = mMsgFlow.getChoiceNo();
|
||||
// "Two-way branch %s" / "Yes" / "No"
|
||||
OS_REPORT("二択分岐 %s\n", choiceNo == 0 ? "はい" : "いいえ");
|
||||
if (choiceNo == 0) {
|
||||
setAction(ACT_DEMO_ORDIN_3);
|
||||
}
|
||||
evtMng.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(766, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
@@ -447,7 +521,7 @@ void daTagTWGate_c::executeDemoOrdin2() {
|
||||
|
||||
void daTagTWGate_c::initDemoOrdin3() {
|
||||
field_0x5de = 1;
|
||||
mIsWolf = (dComIfGp_getLinkPlayer()->mNoResetFlg1 >> 25) & 1; // checking if wolf?
|
||||
mIsWolf = daPy_py_c::checkNowWolf() ? TRUE : FALSE;
|
||||
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
|
||||
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
|
||||
mEventID =
|
||||
@@ -477,7 +551,7 @@ void daTagTWGate_c::executeDemoOrdin3() {
|
||||
field_0x5e0 = 1;
|
||||
break;
|
||||
default:
|
||||
JUT_PANIC(829, "0");
|
||||
JUT_ASSERT(829, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -527,7 +601,7 @@ void daTagTWGate_c::executeDemoOrdin3() {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_PANIC(890, "0");
|
||||
JUT_ASSERT(890, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -547,13 +621,17 @@ void daTagTWGate_c::initDemoRanail1() {
|
||||
void daTagTWGate_c::executeDemoRanail1() {
|
||||
dEvent_manager_c& evtMng = dComIfGp_getEventManager();
|
||||
int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
|
||||
int* cutName;
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
if (evtMng.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
dComIfGp_getEvent()->startCheckSkipEdge(this);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(943, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (*cutName) {
|
||||
@@ -564,6 +642,9 @@ void daTagTWGate_c::executeDemoRanail1() {
|
||||
}
|
||||
evtMng.cutEnd(staffId);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(955, FALSE);
|
||||
break;
|
||||
}
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
|
||||
setAction(ACT_DEMO_RANAIL_2);
|
||||
@@ -600,23 +681,30 @@ void daTagTWGate_c::executeDemoRanail2() {
|
||||
break;
|
||||
case '0003':
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1018, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
int choiceNo;
|
||||
switch(*cutName) {
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
case '0003':
|
||||
evtMng.cutEnd(staffId);
|
||||
break;
|
||||
case '0002':
|
||||
if (talkProc(NULL, 1, NULL)) {
|
||||
choiceNo = mMsgFlow.getChoiceNo();
|
||||
int choiceNo = mMsgFlow.getChoiceNo();
|
||||
// "Two-way branch" / "Yes" / "No"
|
||||
OS_REPORT("二択分岐 %s\n", choiceNo == 0 ? "はい" : "いいえ");
|
||||
if (choiceNo == 0) {
|
||||
setAction(ACT_DEMO_RANAIL_3);
|
||||
}
|
||||
evtMng.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1035, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
@@ -630,7 +718,7 @@ void daTagTWGate_c::executeDemoRanail2() {
|
||||
|
||||
void daTagTWGate_c::initDemoRanail3() {
|
||||
field_0x5de = 1;
|
||||
mIsWolf = (dComIfGp_getLinkPlayer()->mNoResetFlg1 >> 25) & 1; // checking if wolf?
|
||||
mIsWolf = daPy_py_c::checkNowWolf() ? TRUE : FALSE;
|
||||
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
|
||||
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
|
||||
mEventID =
|
||||
@@ -662,7 +750,7 @@ void daTagTWGate_c::executeDemoRanail3() {
|
||||
field_0x5e0 = 1;
|
||||
break;
|
||||
default:
|
||||
JUT_PANIC(1099, "0");
|
||||
JUT_ASSERT(1099, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -711,7 +799,7 @@ void daTagTWGate_c::executeDemoRanail3() {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_PANIC(1160, "0");
|
||||
JUT_ASSERT(1160, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -731,13 +819,16 @@ void daTagTWGate_c::initDemoHyral1() {
|
||||
void daTagTWGate_c::executeDemoHyral1() {
|
||||
dEvent_manager_c& evtMng = dComIfGp_getEventManager();
|
||||
int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
|
||||
int* cutName;
|
||||
if (staffId != -1) {
|
||||
int* cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
cutName = (int*)evtMng.getMyNowCutName(staffId);
|
||||
if (evtMng.getIsAddvance(staffId)) {
|
||||
switch (*cutName) {
|
||||
case '0001':
|
||||
dComIfGp_getEvent()->startCheckSkipEdge(this);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1213, FALSE);
|
||||
}
|
||||
}
|
||||
switch (*cutName) {
|
||||
@@ -748,6 +839,9 @@ void daTagTWGate_c::executeDemoHyral1() {
|
||||
}
|
||||
evtMng.cutEnd(staffId);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1225, FALSE);
|
||||
break;
|
||||
}
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
|
||||
setAction(ACT_DEMO_HYRAL_2);
|
||||
@@ -783,23 +877,28 @@ void daTagTWGate_c::executeDemoHyral2() {
|
||||
case '0002':
|
||||
initTalk(0xbc1, NULL);
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1288, FALSE);
|
||||
}
|
||||
}
|
||||
int choiceNo;
|
||||
switch(*piVar3) {
|
||||
switch (*piVar3) {
|
||||
case '0001':
|
||||
case '0003':
|
||||
eventMgr.cutEnd(staffId);
|
||||
break;
|
||||
case '0002':
|
||||
if (talkProc(NULL, 1, NULL)) {
|
||||
choiceNo = mMsgFlow.getChoiceNo();
|
||||
int choiceNo = mMsgFlow.getChoiceNo();
|
||||
OS_REPORT("二択分岐 %s\n", choiceNo == 0 ? "はい" : "いいえ");
|
||||
if (choiceNo == 0) {
|
||||
setAction(ACT_DEMO_HYRAL_3);
|
||||
}
|
||||
eventMgr.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1305, FALSE);
|
||||
break;
|
||||
}
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
eventMgr.endCheck(mEventID))
|
||||
@@ -812,7 +911,7 @@ void daTagTWGate_c::executeDemoHyral2() {
|
||||
|
||||
void daTagTWGate_c::initDemoHyral3() {
|
||||
field_0x5de = 1;
|
||||
mIsWolf = (dComIfGp_getLinkPlayer()->mNoResetFlg1 >> 25) & 1; // checking if wolf?
|
||||
mIsWolf = daPy_py_c::checkNowWolf() ? TRUE : FALSE;
|
||||
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
|
||||
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
|
||||
mEventID =
|
||||
@@ -841,6 +940,8 @@ void daTagTWGate_c::executeDemoHyral3() {
|
||||
mpMorf->setPlaySpeed(1.0f);
|
||||
field_0x5e0 = 1;
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1368, FALSE);
|
||||
}
|
||||
}
|
||||
switch(*piVar3) {
|
||||
@@ -883,6 +984,9 @@ void daTagTWGate_c::executeDemoHyral3() {
|
||||
eventMgr.cutEnd(staffId);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(1417, FALSE);
|
||||
break;
|
||||
}
|
||||
if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
|
||||
eventMgr.endCheck(mEventID))
|
||||
@@ -894,17 +998,15 @@ void daTagTWGate_c::executeDemoHyral3() {
|
||||
}
|
||||
|
||||
void daTagTWGate_c::initBaseMtx() {
|
||||
cullMtx = mpMorf->getModel()->getBaseTRMtx();
|
||||
fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0);
|
||||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||||
fopAc_ac_c* player = daPy_getPlayerActorClass();
|
||||
|
||||
shape_angle.y = player->shape_angle.y + 0x8000;
|
||||
mDoMtx_stack_c::transS(player->current.pos);
|
||||
shape_angle.y = fopAcM_GetShapeAngle_p(player)->y + 0x8000;
|
||||
mDoMtx_stack_c::transS(fopAcM_GetPosition(player));
|
||||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||||
mDoMtx_stack_c::transM(0.0f, 250.0f, -840.0f);
|
||||
|
||||
current.pos.x = mDoMtx_stack_c::get()[0][3];
|
||||
current.pos.y = mDoMtx_stack_c::get()[1][3];
|
||||
current.pos.z = mDoMtx_stack_c::get()[2][3];
|
||||
mDoMtx_stack_c::multVecZero(¤t.pos);
|
||||
|
||||
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
@@ -917,14 +1019,18 @@ int daTagTWGate_c::downloadModels() {
|
||||
}
|
||||
|
||||
if (phase_state == cPhs_COMPLEATE_e) {
|
||||
if (fopAcM_entrySolidHeap(this, createHeapCallBack, 0x3140)) {
|
||||
return 1;
|
||||
} else {
|
||||
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x3140)) {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return phase_state == cPhs_ERROR_e ? -1 : 0;
|
||||
if (phase_state == cPhs_ERROR_e) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void daTagTWGate_c::initTalk(int param_0, fopAc_ac_c** param_1) {
|
||||
@@ -957,13 +1063,17 @@ bool daTagTWGate_c::talkProc(int* param_1, int param_2, fopAc_ac_c** param_3) {
|
||||
}
|
||||
|
||||
int daTagTWGate_c::createHeapCallBack(fopAc_ac_c* i_actor) {
|
||||
return ((daTagTWGate_c*)i_actor)->CreateHeap();
|
||||
daTagTWGate_c* gate = static_cast<daTagTWGate_c*>(i_actor);
|
||||
return gate->CreateHeap();
|
||||
}
|
||||
|
||||
int daTagTWGate_c::CreateHeap() {
|
||||
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("TWGate_Md", 7));
|
||||
J3DModelData* mdlData_p = NULL;
|
||||
int var_r27 = 0;
|
||||
mdlData_p = static_cast<J3DModelData*>(dComIfG_getObjectRes("TWGate_Md", 7));
|
||||
JUT_ASSERT(1685, NULL != mdlData_p);
|
||||
mpMorf =
|
||||
new mDoExt_McaMorfSO(modelData, NULL, NULL,
|
||||
new mDoExt_McaMorfSO(mdlData_p, NULL, NULL,
|
||||
static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("TWGate_Md", 4)),
|
||||
0, 0.0f, 0, -1, NULL, 0, 0x11000084);
|
||||
|
||||
@@ -986,7 +1096,7 @@ int daTagTWGate_c::create() {
|
||||
|
||||
int phase_state;
|
||||
if (dComIfGs_isDarkClearLV(l_zevParamTbl[mType].mLv)) {
|
||||
phase_state = cPhs_ERROR_e;
|
||||
return cPhs_ERROR_e;
|
||||
} else {
|
||||
phase_state = dComIfG_resLoad(&mPhaseZevArc, l_zevParamTbl[mType].mArcName);
|
||||
if (phase_state == cPhs_COMPLEATE_e) {
|
||||
@@ -997,36 +1107,59 @@ int daTagTWGate_c::create() {
|
||||
return phase_state;
|
||||
}
|
||||
|
||||
static int daTagTWGate_Create(fopAc_ac_c* i_actor) {
|
||||
return ((daTagTWGate_c*)i_actor)->create();
|
||||
}
|
||||
|
||||
inline daTagTWGate_c::~daTagTWGate_c() {
|
||||
dComIfG_resDelete(&mPhaseZevArc, l_zevParamTbl[mType].mArcName);
|
||||
|
||||
if (mPhaseMdRes.id != cPhs_INIT_e) {
|
||||
dComIfG_resDelete(&mPhaseMdRes, "TWGate_Md");
|
||||
int daTagTWGate_c::draw() {
|
||||
if (field_0x5e0 != 0) {
|
||||
mpMorf->entryDL();
|
||||
}
|
||||
|
||||
if (mPhasePyRes.id != cPhs_INIT_e) {
|
||||
dComIfG_resDelete(&mPhasePyRes, mIsWolf ? "TWGate_Wf" : "TWGate_Lk");
|
||||
#if DEBUG
|
||||
if (attr().show_range) {
|
||||
dDbVw_drawCylinderOpa(current.pos, scale.x * 100.0f, scale.y * 100.0f, (GXColor){0xff, 0xff, 0xff, 0xff}, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int daTagTWGate_Delete(daTagTWGate_c* i_gate) {
|
||||
i_gate->~daTagTWGate_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagTWGate_Execute(daTagTWGate_c* i_gate) {
|
||||
return i_gate->execute();
|
||||
void daTagTWGate_c::create_init() {
|
||||
#if DEBUG
|
||||
mHio.ct();
|
||||
#endif
|
||||
field_0x5e0 = 0;
|
||||
setAction(ACT_WAIT);
|
||||
}
|
||||
|
||||
static int daTagTWGate_Draw(daTagTWGate_c* i_gate) {
|
||||
return i_gate->draw();
|
||||
static int daTagTWGate_Create(fopAc_ac_c* i_this) {
|
||||
daTagTWGate_c* gate = static_cast<daTagTWGate_c*>(i_this);
|
||||
fopAcM_RegisterCreateID(i_this, "Tag_TWGate");
|
||||
return gate->create();
|
||||
}
|
||||
|
||||
static int daTagTWGate_IsDelete(daTagTWGate_c*) {
|
||||
static int daTagTWGate_Delete(daTagTWGate_c* i_this) {
|
||||
fopAcM_RegisterDeleteID(i_this, "Tag_TWGate");
|
||||
i_this->~daTagTWGate_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagTWGate_c::execute() {
|
||||
callExecute();
|
||||
|
||||
if (field_0x5e0 != 0) {
|
||||
mpMorf->play(0, 0);
|
||||
mpMorf->modelCalc();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagTWGate_Execute(daTagTWGate_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagTWGate_Draw(daTagTWGate_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagTWGate_IsDelete(daTagTWGate_c* i_this) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,12 +15,15 @@ int daTagAJnot_c::create() {
|
||||
}
|
||||
|
||||
static int daTagAJnot_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagAJnot_c*>(i_this)->create();
|
||||
daTagAJnot_c* ajNot = static_cast<daTagAJnot_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return ajNot->create();
|
||||
}
|
||||
|
||||
daTagAJnot_c::~daTagAJnot_c() {}
|
||||
|
||||
static int daTagAJnot_Delete(daTagAJnot_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagAJnot_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
#include "d/actor/d_a_tag_allmato.h"
|
||||
#include "d/actor/d_a_npc4.h"
|
||||
#include "d/actor/d_a_obj_itamato.h"
|
||||
#include "d/actor/d_a_obj_boumato.h"
|
||||
#include "d/actor/d_a_obj_itamato.h"
|
||||
#include "d/actor/d_a_arrow.h"
|
||||
#include "f_op/f_op_camera_mng.h"
|
||||
|
||||
@@ -268,10 +268,14 @@ static fopAc_ac_c* l_findActorPtrs[100];
|
||||
static u32 l_findCount;
|
||||
|
||||
void* daTag_AllMato_c::srchBouMato(void* i_actor, void* i_data) {
|
||||
if (l_findCount < 100 && i_actor != NULL && i_actor != i_data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(i_actor)) && fopAcM_GetName(i_actor) == PROC_OBJ_BOUMATO) {
|
||||
l_findActorPtrs[l_findCount] = (fopAc_ac_c*)i_actor;
|
||||
l_findCount++;
|
||||
void* data = i_data;
|
||||
if (l_findCount < 100) {
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor != NULL && actor != data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(i_actor) == PROC_OBJ_BOUMATO) {
|
||||
l_findActorPtrs[l_findCount] = actor;
|
||||
l_findCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,10 +283,14 @@ void* daTag_AllMato_c::srchBouMato(void* i_actor, void* i_data) {
|
||||
}
|
||||
|
||||
void* daTag_AllMato_c::srchItaMato(void* i_actor, void* i_data) {
|
||||
if (l_findCount < 100 && i_actor != NULL && i_actor != i_data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(i_actor)) && fopAcM_GetName(i_actor) == PROC_OBJ_ITAMATO) {
|
||||
l_findActorPtrs[l_findCount] = (fopAc_ac_c*)i_actor;
|
||||
l_findCount++;
|
||||
void* data = i_data;
|
||||
if (l_findCount < 100) {
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor != NULL && actor != data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(i_actor) == PROC_OBJ_ITAMATO) {
|
||||
l_findActorPtrs[l_findCount] = actor;
|
||||
l_findCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,10 +298,14 @@ void* daTag_AllMato_c::srchItaMato(void* i_actor, void* i_data) {
|
||||
}
|
||||
|
||||
void* daTag_AllMato_c::srchTaro(void* i_actor, void* i_data) {
|
||||
if (l_findCount < 100 && i_actor != NULL && i_actor != i_data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(i_actor)) && fopAcM_GetName(i_actor) == PROC_NPC_TARO) {
|
||||
l_findActorPtrs[l_findCount] = (fopAc_ac_c*)i_actor;
|
||||
l_findCount++;
|
||||
void* data = i_data;
|
||||
if (l_findCount < 100) {
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor != NULL && actor != data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(i_actor) == PROC_NPC_TARO) {
|
||||
l_findActorPtrs[l_findCount] = actor;
|
||||
l_findCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,10 +313,14 @@ void* daTag_AllMato_c::srchTaro(void* i_actor, void* i_data) {
|
||||
}
|
||||
|
||||
void* daTag_AllMato_c::srchArrow(void* i_actor, void* i_data) {
|
||||
if (l_findCount < 100 && i_actor != NULL && i_actor != i_data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(i_actor)) && fopAcM_GetName(i_actor) == PROC_ARROW) {
|
||||
l_findActorPtrs[l_findCount] = (fopAc_ac_c*)i_actor;
|
||||
l_findCount++;
|
||||
void* data = i_data;
|
||||
if (l_findCount < 100) {
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor != NULL && actor != data) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(i_actor) == PROC_ARROW) {
|
||||
l_findActorPtrs[l_findCount] = actor;
|
||||
l_findCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -436,11 +452,12 @@ fopAc_ac_c* daTag_AllMato_c::getTaroActorP() {
|
||||
fopAc_ac_c* boumato_actor_p = NULL;
|
||||
fopAc_ac_c* itamato_actor_p = NULL;
|
||||
|
||||
int sp14 = 0;
|
||||
for (int i = 0; i < 499; i++) {
|
||||
for (int j = 0; j < mBouMatoActorNum; j++) {
|
||||
boumato_actor_p = mBouMatoActorMngr[j].getActorP();
|
||||
if (boumato_actor_p != NULL) {
|
||||
int sp14 = ((daObj_BouMato_c*)boumato_actor_p)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp94.abs() + arrow_p->getArrowOutLength());
|
||||
sp14 = ((daObj_BouMato_c*)boumato_actor_p)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp94.abs() + arrow_p->getArrowOutLength());
|
||||
if (sp14 != 0) {
|
||||
mBrkMatoActorMngr.entry(mBouMatoActorMngr[j].getActorP());
|
||||
return sp14;
|
||||
@@ -451,7 +468,7 @@ fopAc_ac_c* daTag_AllMato_c::getTaroActorP() {
|
||||
for (int j = 0; j < mItaMatoActorNum; j++) {
|
||||
itamato_actor_p = mItaMatoActorMngr[j].getActorP();
|
||||
if (itamato_actor_p != NULL) {
|
||||
int sp14 = ((daObj_ItaMato_c*)itamato_actor_p)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp94.abs() + arrow_p->getArrowOutLength());
|
||||
sp14 = ((daObj_ItaMato_c*)itamato_actor_p)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp94.abs() + arrow_p->getArrowOutLength());
|
||||
if (sp14 != 0) {
|
||||
mBrkMatoActorMngr.entry(mItaMatoActorMngr[j].getActorP());
|
||||
return sp14;
|
||||
@@ -466,7 +483,7 @@ fopAc_ac_c* daTag_AllMato_c::getTaroActorP() {
|
||||
}
|
||||
|
||||
int daTag_AllMato_c::checkCrsMato2() {
|
||||
fopAc_ac_c* sp28;
|
||||
fopAc_ac_c* sp28 = NULL;
|
||||
getArrowActorP();
|
||||
|
||||
for (int i = 0; i < (int)l_findCount; i++) {
|
||||
@@ -499,13 +516,13 @@ int daTag_AllMato_c::checkCrsMato2() {
|
||||
}
|
||||
|
||||
fopAc_ac_c* sp18 = NULL;
|
||||
fopAc_ac_c* sp14 = NULL;
|
||||
int sp14 = NULL;
|
||||
|
||||
for (int i = 0; i < 499; i++) {
|
||||
for (int j = 0; j < mBouMatoActorNum; j++) {
|
||||
sp18 = mBouMatoActorMngr[j].getActorP();
|
||||
if (sp18 != NULL) {
|
||||
int sp14 = ((daObj_BouMato_c*)sp18)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp80.abs() + arrow_p->getArrowOutLength());
|
||||
sp14 = ((daObj_BouMato_c*)sp18)->checkCrs(arrow_p, field_0x590[i], field_0x590[i + 1], sp80.abs() + arrow_p->getArrowOutLength());
|
||||
if (sp14 != 0) {
|
||||
mBrkMatoActorMngr.entry(mBouMatoActorMngr[j].getActorP());
|
||||
return sp14;
|
||||
@@ -520,10 +537,11 @@ int daTag_AllMato_c::checkCrsMato2() {
|
||||
}
|
||||
|
||||
int daTag_AllMato_c::checkBrkMato() {
|
||||
daObj_ItaMato_c* actor_p = NULL;
|
||||
int rt = 0;
|
||||
|
||||
for (int i = 0; i < mItaMatoActorNum; i++) {
|
||||
daObj_ItaMato_c* actor_p = (daObj_ItaMato_c*)mItaMatoActorMngr[i].getActorP();
|
||||
actor_p = (daObj_ItaMato_c*)mItaMatoActorMngr[i].getActorP();
|
||||
rt = actor_p->checkBrk();
|
||||
if (rt != 0) {
|
||||
mBrkMatoActorMngr.entry(mItaMatoActorMngr[i].getActorP());
|
||||
|
||||
@@ -9,10 +9,12 @@
|
||||
|
||||
static int daTagArena_Create(fopAc_ac_c* i_this) {
|
||||
daTagArena_c* arena_tag = (daTagArena_c*)i_this;
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return arena_tag->create();
|
||||
}
|
||||
|
||||
static int daTagArena_Delete(daTagArena_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagArena_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -7,8 +7,27 @@
|
||||
|
||||
#include "d/actor/d_a_tag_assistance.h"
|
||||
|
||||
void daTagAssist_c::create_init() {
|
||||
attention_info.flags = 0;
|
||||
field_0x570 = -1;
|
||||
}
|
||||
|
||||
int daTagAssist_c::create() {
|
||||
fopAcM_ct(this, daTagAssist_c);
|
||||
create_init();
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daTagAssist_c::execute() {
|
||||
if (fopAcM_searchPlayerDistanceXZ(this) < scale.x * 100.0f) {
|
||||
// empty block
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagAssist_Create(fopAc_ac_c* i_this) {
|
||||
daTagAssist_c* tag_assist = (daTagAssist_c*)i_this;
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return tag_assist->create();
|
||||
}
|
||||
|
||||
@@ -21,6 +40,7 @@ static int daTagAssist_IsDelete(daTagAssist_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagAssist_Delete(daTagAssist_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagAssist_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,24 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_attack_item.h"
|
||||
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
|
||||
void daTagAtkItem_c::setBaseMtx() {
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
}
|
||||
class daTagAtkItem_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagAtkItem_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
f32 field_0x8;
|
||||
u8 show_range;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagAtkItem_HIO_c l_HIO;
|
||||
#endif
|
||||
|
||||
static dCcD_SrcCyl l_cyl_src = {
|
||||
{
|
||||
@@ -17,14 +28,28 @@ static dCcD_SrcCyl l_cyl_src = {
|
||||
{0x0}, // mGObjCo
|
||||
}, // mObjInf
|
||||
{
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
50.0f, // mRadius
|
||||
100.0f // mHeight
|
||||
} // mCyl
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
50.0f, // mRadius
|
||||
100.0f // mHeight
|
||||
} // mCyl
|
||||
}
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
void daTagAtkItem_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Attack reaction item"
|
||||
ctx->genLabel("攻撃反応アイテム", 0);
|
||||
// "Show range"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagAtkItem_c::setBaseMtx() {
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
}
|
||||
|
||||
int daTagAtkItem_c::Create() {
|
||||
mCcStts.Init(0, 0xFF, this);
|
||||
mCyl.Set(l_cyl_src);
|
||||
@@ -36,6 +61,11 @@ int daTagAtkItem_c::Create() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
daTagAtkItem_HIO_c::daTagAtkItem_HIO_c() {
|
||||
field_0x8 = 0.0f;
|
||||
show_range = 0;
|
||||
}
|
||||
|
||||
int daTagAtkItem_c::create() {
|
||||
fopAcM_ct(this, daTagAtkItem_c);
|
||||
|
||||
@@ -44,6 +74,11 @@ int daTagAtkItem_c::create() {
|
||||
}
|
||||
|
||||
OS_REPORT("攻撃反応アイテム:<%x>\n", fopAcM_GetParam(this));
|
||||
|
||||
#if DEBUG
|
||||
l_HIO.entryHIO("攻撃反応アイテム");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
@@ -108,12 +143,7 @@ BOOL daTagAtkItem_c::checkHit() {
|
||||
void daTagAtkItem_c::createItem() {
|
||||
csXyz angle(0, 0, 0);
|
||||
|
||||
int create_num;
|
||||
if (getNum() == 0xFF) {
|
||||
create_num = 1;
|
||||
} else {
|
||||
create_num = getNum();
|
||||
}
|
||||
int create_num = getNum() == 0xFF ? 1 : getNum();
|
||||
|
||||
int item_bit = getItemBit();
|
||||
for (int i = 0; i < create_num; i++) {
|
||||
@@ -128,19 +158,40 @@ void daTagAtkItem_c::createItem() {
|
||||
}
|
||||
}
|
||||
|
||||
int daTagAtkItem_c::_delete() {
|
||||
int daTagAtkItem_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
GXColor color = (GXColor){0, 0, 0xff, 0x80};
|
||||
dDbVw_drawCylinderXlu(current.pos, scale.x * 50.0f, scale.y * 100.0f, color, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagAtkItem_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagAtkItem_Draw(daTagAtkItem_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagAtkItem_Execute(daTagAtkItem_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagAtkItem_Delete(daTagAtkItem_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagAtkItem_Create(daTagAtkItem_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
@@ -149,7 +200,11 @@ static actor_method_class l_daTagAtkItem_Method = {
|
||||
(process_method_func)daTagAtkItem_Delete,
|
||||
(process_method_func)daTagAtkItem_Execute,
|
||||
(process_method_func)NULL,
|
||||
#if DEBUG
|
||||
(process_method_func)daTagAtkItem_Draw,
|
||||
#else
|
||||
(process_method_func)NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_Tag_AttackItem = {
|
||||
|
||||
@@ -6,12 +6,98 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_attention.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
|
||||
static const u8 l_dist_tbl[] = { 0x23, 0x24 };
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
|
||||
#if DEBUG
|
||||
daAttp_HIO_c l_HIO;
|
||||
|
||||
void daAttp_HIO_c::genMessage(JORMContext* ctx) {
|
||||
static const char* l_type_name[37] = {
|
||||
"注目なし - ダミー", // No focus - dummy
|
||||
"注目だけ - 標準", // Focus only - standard
|
||||
"会話 - 標準", // Conversation - standard
|
||||
"戦闘 - 標準", // Combat - standard
|
||||
"戦闘B - 標準", // Combat B - standard
|
||||
"会話B - 標準", // Conversation B - standard
|
||||
"持上げ - 標準", // Lifting - standard
|
||||
"持上げ - タル", // Lifting - barrel
|
||||
"持上げ - 壷大", // Lifting - large jar
|
||||
"持上げ - 水壷", // Lifting - water jar
|
||||
"持上げ - 椅子", // Lifting - chair
|
||||
"持上げ - 小石", // Lifting - pebble
|
||||
"持上げ - 岩", // Lifting - rock
|
||||
"馬", // Horse
|
||||
"ドア、宝箱", // Door, treasure chest
|
||||
"持上げボコの棒", // Lifting stick
|
||||
"敵氷", // Enemy ice
|
||||
"引き連れられ石像", // Dragged stone statue
|
||||
"引き連れられ石像", // Dragged stone statue
|
||||
"ジャガ-", // Jaguar
|
||||
"接近会話", // Close-range conversation
|
||||
"長距離戦闘", // Long-range combat
|
||||
"短距離戦闘", // Short-range combat
|
||||
"予備戦闘", // Reserve combat
|
||||
"予備戦闘", // Reserve combat
|
||||
"予備戦闘", // Reserve combat
|
||||
"床レバー用", // Floor lever
|
||||
"狼鎖", // Wolf chain
|
||||
"NPCナビィ - ハイラル城、呼びかけデモ用(会話)", // NPC Navii - Hyrule Castle, demo call (conversation)
|
||||
"NPCナビィ - ハイラル城、呼びかけデモ用(注目)", // NPC Navii - Hyrule Castle, demo call (focus)
|
||||
"狼掘る", // Wolf digging
|
||||
"カヌー", // Canoe
|
||||
"覗きタグ", // Peek tag
|
||||
"馬戦闘", // Horse combat
|
||||
"注目点 通常長さ", // Focus point - normal length
|
||||
"注目点 長注目版", // Focus point - long focus
|
||||
"調整用カスタム", // Adjustment custom
|
||||
};
|
||||
static const u8 l_type[37] = {
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16,
|
||||
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
|
||||
33, 34, 35, 36, 37,
|
||||
};
|
||||
static const int num = 37;
|
||||
|
||||
// "Focus point"
|
||||
ctx->genLabel("注目点", 0, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
// "Type switching ON"
|
||||
ctx->genCheckBox("タイプ切り替えON", &enable_type_switching, 1, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
|
||||
// "Type specification"
|
||||
ctx->startComboBox("タイプ指定", &type_spec, 0, NULL, -1, -1, 0x100, 0x1a);
|
||||
for (int i = 0; i < num; i++) {
|
||||
ctx->genComboBoxItem(l_type_name[i], l_type[i]);
|
||||
}
|
||||
ctx->endComboBox();
|
||||
|
||||
// "Distance display ON"
|
||||
ctx->genCheckBox("距離表示ON", &enable_distance_display, 1, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
|
||||
// "For adjustment"
|
||||
ctx->genLabel("調整用", 0, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
ctx->genSlider("on", &dist_max, 0.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
ctx->genSlider("off", &dist_max_release, 0.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
ctx->genSlider("angle adjust", &dist_adjust, 0.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
ctx->genSlider("hi", &upper_y, -10000.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
ctx->genSlider("low", &lower_y, -10000.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
}
|
||||
#endif
|
||||
|
||||
int daAttp_c::Create() {
|
||||
attention_info.distances[fopAc_attn_LOCK_e] = l_dist_tbl[daAttp_prm::getArg4(this)];
|
||||
static const u8 l_dist_tbl[] = { 35, 36 };
|
||||
|
||||
u8 arg4 = daAttp_prm::getArg4(this);
|
||||
attention_info.distances[fopAc_attn_LOCK_e] = l_dist_tbl[arg4];
|
||||
|
||||
#if DEBUG
|
||||
field_0x598 = l_dist_tbl[arg4];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||||
cMtx_copy(mDoMtx_stack_c::get(), field_0x568);
|
||||
fopAcM_SetMtx(this, field_0x568);
|
||||
#endif
|
||||
|
||||
execute();
|
||||
return 1;
|
||||
@@ -20,10 +106,31 @@ int daAttp_c::Create() {
|
||||
int daAttp_c::create() {
|
||||
fopAcM_ct(this, daAttp_c);
|
||||
Create();
|
||||
|
||||
#if DEBUG
|
||||
// "Key points"
|
||||
l_HIO.entryHIO("注目点");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daAttp_c::execute() {
|
||||
#if DEBUG
|
||||
if (l_HIO.enable_type_switching) {
|
||||
attention_info.distances[fopAc_attn_LOCK_e] = l_HIO.type_spec;
|
||||
} else {
|
||||
attention_info.distances[fopAc_attn_LOCK_e] = field_0x598;
|
||||
}
|
||||
|
||||
dist_entry& distTable = dAttention_c::getDistTable(37);
|
||||
distTable.mDistMax = l_HIO.dist_max;
|
||||
distTable.mDistMaxRelease = l_HIO.dist_max_release;
|
||||
distTable.mDistanceAdjust = l_HIO.dist_adjust;
|
||||
distTable.mUpperY = l_HIO.upper_y;
|
||||
distTable.mLowerY = l_HIO.lower_y;
|
||||
#endif
|
||||
|
||||
bool bVar1 = true;
|
||||
fopAc_ac_c& link = *daPy_getPlayerActorClass();
|
||||
|
||||
@@ -58,6 +165,7 @@ int daAttp_c::execute() {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(432, FALSE);
|
||||
break;
|
||||
case 7:
|
||||
break;
|
||||
@@ -80,6 +188,8 @@ int daAttp_c::execute() {
|
||||
case 3:
|
||||
bVar1 = false;
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(461, FALSE);
|
||||
}
|
||||
} else {
|
||||
switch (daAttp_prm::getArg0(this)) {
|
||||
@@ -97,6 +207,9 @@ int daAttp_c::execute() {
|
||||
break;
|
||||
case 3:
|
||||
bVar1 = false;
|
||||
break;
|
||||
default:
|
||||
JUT_ASSERT(485, FALSE);
|
||||
}
|
||||
|
||||
if (daAttp_prm::getSw2(this) != 0xff) {
|
||||
@@ -120,13 +233,36 @@ int daAttp_c::execute() {
|
||||
}
|
||||
|
||||
int daAttp_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.enable_distance_display) {
|
||||
GXColor color1 = {0xff, 0, 0, 0x80};
|
||||
GXColor color2 = {0, 0, 0xff, 0x80};
|
||||
cXyz sp10(current.pos);
|
||||
sp10.y += 5.0f;
|
||||
dist_entry& distTable =
|
||||
dAttention_c::getDistTable(attention_info.distances[fopAc_attn_LOCK_e]);
|
||||
|
||||
dDbVw_drawCircleXlu(current.pos, distTable.mDistMax, color2, 1, 12);
|
||||
dDbVw_drawCircleXlu(current.pos, distTable.mDistMaxRelease, color1, 1, 12);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daAttp_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
daAttp_HIO_c::daAttp_HIO_c() {
|
||||
type_spec = 0;
|
||||
dist_max = dist_max_release = dist_adjust = upper_y = lower_y = 0.0f;
|
||||
}
|
||||
|
||||
static int daAttp_Draw(daAttp_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
@@ -137,11 +273,14 @@ static int daAttp_Execute(daAttp_c* i_this) {
|
||||
}
|
||||
|
||||
static int daAttp_Delete(daAttp_c* i_this) {
|
||||
fpc_ProcID id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daAttp_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daAttp_c*>(i_this)->create();
|
||||
daAttp_c* attp = static_cast<daAttp_c*>(i_this);
|
||||
fpc_ProcID id = fopAcM_GetID(i_this);
|
||||
return attp->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daAttp_Method = {
|
||||
|
||||
@@ -5,34 +5,32 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_tag_bottle_item.h"
|
||||
#include "d/d_item.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
s32 daTag_BottleItem_c::create() {
|
||||
s32 ret;
|
||||
|
||||
int daTag_BottleItem_c::create() {
|
||||
fopAcM_ct(this, daTag_BottleItem_c);
|
||||
setTypeFromParam();
|
||||
|
||||
if (!isBottleItem(mBottleItemType)) {
|
||||
ret = cPhs_ERROR_e;
|
||||
} else {
|
||||
initialize();
|
||||
ret = cPhs_COMPLEATE_e;
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
return ret;
|
||||
initialize();
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
|
||||
s32 daTag_BottleItem_c::Delete() {
|
||||
int daTag_BottleItem_c::Delete() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 daTag_BottleItem_c::Execute() {
|
||||
if (chkEvent()) {
|
||||
int daTag_BottleItem_c::Execute() {
|
||||
int eventResult = chkEvent();
|
||||
if (eventResult) {
|
||||
if (mProcessFunc) {
|
||||
(this->*mProcessFunc)(0);
|
||||
}
|
||||
@@ -43,7 +41,7 @@ s32 daTag_BottleItem_c::Execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 daTag_BottleItem_c::Draw() {
|
||||
int daTag_BottleItem_c::Draw() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -72,26 +70,26 @@ int daTag_BottleItem_c::checkProcess(ProcessFunc i_processFunc) {
|
||||
}
|
||||
|
||||
int daTag_BottleItem_c::setProcess(ProcessFunc i_processFunc) {
|
||||
int uVar3 = 0;
|
||||
int retval = 0;
|
||||
|
||||
if (checkProcess(i_processFunc)) {
|
||||
return 0;
|
||||
return retval;
|
||||
} else {
|
||||
mEventType = 2;
|
||||
|
||||
if (mProcessFunc) {
|
||||
uVar3 = (this->*mProcessFunc)(0);
|
||||
retval = (this->*mProcessFunc)(0);
|
||||
}
|
||||
|
||||
mEventType = 0;
|
||||
mProcessFunc = i_processFunc;
|
||||
|
||||
if (mProcessFunc) {
|
||||
uVar3 = (this->*mProcessFunc)(0);
|
||||
retval = (this->*mProcessFunc)(0);
|
||||
}
|
||||
mEventType = 1;
|
||||
}
|
||||
return uVar3;
|
||||
return retval;
|
||||
}
|
||||
|
||||
void daTag_BottleItem_c::setAttnPos() {
|
||||
@@ -99,8 +97,8 @@ void daTag_BottleItem_c::setAttnPos() {
|
||||
eyePos = current.pos;
|
||||
}
|
||||
|
||||
s32 daTag_BottleItem_c::chkEvent() {
|
||||
s32 uVar2 = 1;
|
||||
int daTag_BottleItem_c::chkEvent() {
|
||||
int uVar2 = 1;
|
||||
|
||||
if (!dComIfGp_getEvent()->isOrderOK()) {
|
||||
uVar2 = 0;
|
||||
@@ -112,7 +110,7 @@ s32 daTag_BottleItem_c::chkEvent() {
|
||||
return uVar2;
|
||||
}
|
||||
|
||||
s32 daTag_BottleItem_c::orderEvent() {
|
||||
int daTag_BottleItem_c::orderEvent() {
|
||||
makeSoup();
|
||||
|
||||
if (!daPy_py_c::checkNowWolf() && mBottleItemType != fpcNm_ITEM_EMPTY_BOTTLE) {
|
||||
@@ -150,8 +148,9 @@ int daTag_BottleItem_c::wait(void* param_0) {
|
||||
if (eventInfo.checkCommandCatch() == 0){
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
cXyz pos = attention_info.position - player->attention_info.position;
|
||||
|
||||
dComIfGp_att_CatchRequest(this,mBottleItemType,140.0f,pos.y+100.0f,pos.y-100.0f,0x2000,1);
|
||||
|
||||
dComIfGp_att_CatchRequest(this, mBottleItemType, 140.0f + YREG_F(4), pos.y + 100.0f,
|
||||
pos.y - 100.0f, 0x2000 + YREG_S(5), 1);
|
||||
eventInfo.onCondition(dEvtCnd_40_e);
|
||||
}
|
||||
case 2:
|
||||
@@ -162,23 +161,23 @@ int daTag_BottleItem_c::wait(void* param_0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static s32 daTag_BottleItem_Create(void* i_this) {
|
||||
static int daTag_BottleItem_Create(void* i_this) {
|
||||
return static_cast<daTag_BottleItem_c*>(i_this)->create();
|
||||
}
|
||||
|
||||
static s32 daTag_BottleItem_Delete(void* i_this) {
|
||||
static int daTag_BottleItem_Delete(void* i_this) {
|
||||
return static_cast<daTag_BottleItem_c*>(i_this)->Delete();
|
||||
}
|
||||
|
||||
static s32 daTag_BottleItem_Execute(void* i_this) {
|
||||
static int daTag_BottleItem_Execute(void* i_this) {
|
||||
return static_cast<daTag_BottleItem_c*>(i_this)->Execute();
|
||||
}
|
||||
|
||||
static s32 daTag_BottleItem_Draw(void* i_this) {
|
||||
static int daTag_BottleItem_Draw(void* i_this) {
|
||||
return static_cast<daTag_BottleItem_c*>(i_this)->Draw();
|
||||
}
|
||||
|
||||
static s32 daTag_BottleItem_IsDelete(void* i_this) {
|
||||
static int daTag_BottleItem_IsDelete(void* i_this) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_camera.h"
|
||||
#include <cmath>
|
||||
#include "d/actor/d_a_alink.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_horse.h"
|
||||
#include "d/actor/d_a_tag_camera.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
namespace {
|
||||
bool always_true() {
|
||||
@@ -107,19 +109,19 @@ u8 daTag_Cam_c::getSwType() {
|
||||
}
|
||||
|
||||
u8 daTag_Cam_c::getPrio() {
|
||||
return (fopAcM_GetParam(this) >> 4) & 0xF;
|
||||
return (fopAcM_GetParam(this) & 0xF0) >> 4;
|
||||
}
|
||||
|
||||
u8 daTag_Cam_c::getSwBit() {
|
||||
return (fopAcM_GetParam(this) >> 8) & 0xFF;
|
||||
return (fopAcM_GetParam(this) & 0xFF00) >> 8;
|
||||
}
|
||||
|
||||
u8 daTag_Cam_c::getCondition() {
|
||||
return (fopAcM_GetParam(this) >> 0x10) & 0xFF;
|
||||
return (fopAcM_GetParam(this) & 0xFF0000) >> 16;
|
||||
}
|
||||
|
||||
u8 daTag_Cam_c::getCameraId() {
|
||||
return (fopAcM_GetParam(this) >> 0x18) & 0xFF;
|
||||
return (fopAcM_GetParam(this) & 0xFF000000) >> 24;
|
||||
}
|
||||
|
||||
u8 daTag_Cam_c::getRailID() {
|
||||
@@ -184,8 +186,10 @@ int daTag_Cam_c::create() {
|
||||
is_player_hugging_eal,
|
||||
};
|
||||
|
||||
int var_r27 = 22;
|
||||
|
||||
u8 func_index = getCondition();
|
||||
if ((int)func_index > 22) {
|
||||
if ((int)func_index > var_r27) {
|
||||
func_index = 3;
|
||||
}
|
||||
|
||||
@@ -251,7 +255,11 @@ int daTag_Cam_c::execute() {
|
||||
bool set_camera = mCheckFunc();
|
||||
|
||||
if (condition == 0xFF) {
|
||||
#if PLATFORM_SHIELD
|
||||
priority |= (u16)0x8000;
|
||||
#else
|
||||
priority |= 0x8000;
|
||||
#endif
|
||||
} else if (condition == 0xFA) {
|
||||
if (dCam_getBody()->CheckFlag(0x8000000)) {
|
||||
set_camera = true;
|
||||
@@ -269,6 +277,28 @@ int daTag_Cam_c::execute() {
|
||||
}
|
||||
|
||||
static int daTag_Cam_Draw(daTag_Cam_c* i_this) {
|
||||
#if DEBUG
|
||||
return i_this->draw();
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
int daTag_Cam_c::draw() {
|
||||
#if DEBUG
|
||||
if (g_envHIO.mOther.mDisplayTransparentCyl != 0) {
|
||||
if (getAreaType() == 0) {
|
||||
cXyz sp3C = (mBoundsHi - mBoundsLo) * 0.5f;
|
||||
cXyz sp30 = mBoundsLo + sp3C;
|
||||
csXyz sp10(0, 0, 0);
|
||||
dDbVw_drawCubeXlu(sp30, sp3C, sp10, (GXColor){0xc0, 0xff, 0x78, 0xa0});
|
||||
} else {
|
||||
cXyz cStack_3c = current.pos;
|
||||
dDbVw_drawCylinderXlu(cStack_3c, scale.x, scale.y, (GXColor){0xc0, 0xff, 0x78, 0xa0},
|
||||
1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -282,13 +312,16 @@ static int daTag_Cam_IsDelete(daTag_Cam_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTag_Cam_Delete(daTag_Cam_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTag_Cam_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTag_Cam_Create(fopAc_ac_c* i_this) {
|
||||
daTag_Cam_c* a_this = (daTag_Cam_c*)i_this;
|
||||
return a_this->create();
|
||||
daTag_Cam_c* cam = (daTag_Cam_c*)i_this;
|
||||
int id = fopAcM_GetID(i_this);
|
||||
int result = cam->create();
|
||||
return result;
|
||||
}
|
||||
|
||||
static actor_method_class l_daTag_Cam_Method = {
|
||||
|
||||
@@ -6,9 +6,35 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_chgrestart.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
s32 daTagChgRestart_c::Create() {
|
||||
class daTagChgRestart_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagChgRestart_HIO_c();
|
||||
|
||||
void genMessage(JORMContext* ctx);
|
||||
|
||||
u8 show_range;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagChgRestart_HIO_c l_HIO;
|
||||
|
||||
daTagChgRestart_HIO_c::daTagChgRestart_HIO_c() {
|
||||
show_range = FALSE;
|
||||
}
|
||||
|
||||
void daTagChgRestart_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Room return position change tag"
|
||||
ctx->genLabel("部屋戻し位置変更タグ", 0);
|
||||
// "Display range"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
int daTagChgRestart_c::Create() {
|
||||
mVertices[0].x = -100.0f * scale.x;
|
||||
mVertices[0].z = -100.0f * scale.z;
|
||||
|
||||
@@ -21,25 +47,27 @@ s32 daTagChgRestart_c::Create() {
|
||||
mVertices[3].x = -100.0f * scale.x;
|
||||
mVertices[3].z = 100.0f * scale.z;
|
||||
|
||||
mVertices[3].y = 0.0f;
|
||||
mVertices[2].y = 0.0f;
|
||||
mVertices[1].y = 0.0f;
|
||||
mVertices[0].y = 0.0f;
|
||||
mVertices[0].y = mVertices[1].y = mVertices[2].y = mVertices[3].y = 0.0f;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 daTagChgRestart_c::create() {
|
||||
int daTagChgRestart_c::create() {
|
||||
fopAcM_ct(this, daTagChgRestart_c);
|
||||
|
||||
if (!Create()) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
// "Room return position change tag"
|
||||
l_HIO.entryHIO("部屋戻し位置変更タグ");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
s32 daTagChgRestart_c::execute() {
|
||||
int daTagChgRestart_c::execute() {
|
||||
if (fopAcM_isSwitch(this, daTagChgRestart_prm::getSwNo(this))) {
|
||||
return 1;
|
||||
}
|
||||
@@ -59,11 +87,13 @@ s32 daTagChgRestart_c::execute() {
|
||||
|
||||
u8 playerNo = daTagChgRestart_prm::getPlayerNo(this);
|
||||
if (playerNo != 0xFF) {
|
||||
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this));
|
||||
int roomNo = fopAcM_GetRoomNo(this);
|
||||
dStage_roomDt_c* roomDt = dComIfGp_roomControl_getStatusRoomDt(roomNo);
|
||||
stage_actor_class* player_data = roomDt->getPlayer();
|
||||
|
||||
stage_actor_data_class* entry_p = player_data->m_entries;
|
||||
for (int i = 0; i < player_data->num; i++) {
|
||||
int i = 0;
|
||||
for (i = 0; i < player_data->num; i++) {
|
||||
if ((entry_p->base.angle.z & 0xFF) == playerNo) {
|
||||
break;
|
||||
}
|
||||
@@ -71,6 +101,11 @@ s32 daTagChgRestart_c::execute() {
|
||||
entry_p++;
|
||||
}
|
||||
|
||||
if (i == player_data->num) {
|
||||
OS_REPORT_ERROR("部屋戻し位置変更の為のプレイヤー番号が不正です!<%d>\n", i);
|
||||
JUT_ASSERT(317, FALSE);
|
||||
}
|
||||
|
||||
restart_pos = entry_p->base.position;
|
||||
restart_angle = entry_p->base.angle.y;
|
||||
}
|
||||
@@ -82,26 +117,74 @@ s32 daTagChgRestart_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 daTagChgRestart_c::_delete() {
|
||||
int daTagChgRestart_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
GXColor color = {0, 0, 0x80, 0x80};
|
||||
cXyz sp10[8];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
|
||||
sp10[0] = mVertices[0];
|
||||
sp10[1] = mVertices[1];
|
||||
sp10[2] = mVertices[3];
|
||||
sp10[3] = mVertices[2];
|
||||
sp10[4] = mVertices[0];
|
||||
sp10[5] = mVertices[1];
|
||||
sp10[6] = mVertices[3];
|
||||
sp10[7] = mVertices[2];
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mDoMtx_stack_c::multVec(&sp10[i], &sp10[i]);
|
||||
}
|
||||
for (int i = 0; i < 4; i++) {
|
||||
sp10[i].y += 1000.0f;
|
||||
}
|
||||
|
||||
dDbVw_drawCube8pXlu(sp10, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static s32 daTagChgRestart_Execute(daTagChgRestart_c* i_this) {
|
||||
int daTagChgRestart_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagChgRestart_Execute(daTagChgRestart_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static s32 daTagChgRestart_Delete(daTagChgRestart_c* i_this) {
|
||||
static int daTagChgRestart_Delete(daTagChgRestart_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static s32 daTagChgRestart_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagChgRestart_c*>(i_this)->create();
|
||||
static int daTagChgRestart_Create(fopAc_ac_c* i_this) {
|
||||
daTagChgRestart_c* chgRestart = static_cast<daTagChgRestart_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return chgRestart->create();
|
||||
}
|
||||
|
||||
static int daTagChgRestart_Draw(daTagChgRestart_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagChgRestart_Method = {
|
||||
(process_method_func)daTagChgRestart_Create,
|
||||
(process_method_func)daTagChgRestart_Delete,
|
||||
(process_method_func)daTagChgRestart_Execute,
|
||||
NULL,
|
||||
#if DEBUG
|
||||
(process_method_func)daTagChgRestart_Draw,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_Tag_ChgRestart = {
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
|
||||
#include "d/actor/d_a_tag_chkpoint.h"
|
||||
#include <cmath>
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
int daTag_Chk_c::execute() {
|
||||
if (fopAcM_GetRoomNo(this) != dComIfGp_roomControl_getStayNo()) {
|
||||
@@ -32,10 +35,10 @@ int daTag_Chk_c::execute() {
|
||||
var_r27 = 2;
|
||||
}
|
||||
|
||||
u8 swbit2 = getSwBit2();
|
||||
if (swbit2 == 0xFF) {
|
||||
swbit = getSwBit2();
|
||||
if (swbit == 0xFF) {
|
||||
var_r26 = 0;
|
||||
} else if (dComIfGs_isSwitch(swbit2, fopAcM_GetRoomNo(this))) {
|
||||
} else if (dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this))) {
|
||||
var_r26 = 1;
|
||||
} else {
|
||||
var_r26 = 2;
|
||||
@@ -44,20 +47,22 @@ int daTag_Chk_c::execute() {
|
||||
bool set_attention = false;
|
||||
|
||||
if (sp64[var_r27][var_r26] != 0) {
|
||||
cXyz& player_pos = dComIfGp_getLinkPlayer()->current.pos;
|
||||
daPy_py_c* player = dComIfGp_getLinkPlayer();
|
||||
|
||||
if (getAreaType() == 0) {
|
||||
if (mVtxA.x <= player_pos.x && player_pos.x <= mVtxB.x && mVtxA.y <= player_pos.y &&
|
||||
player_pos.y <= mVtxB.y && mVtxA.z <= player_pos.z && player_pos.z <= mVtxB.z)
|
||||
if (mVtxA.x <= player->current.pos.x && player->current.pos.x <= mVtxB.x &&
|
||||
mVtxA.y <= player->current.pos.y && player->current.pos.y <= mVtxB.y &&
|
||||
mVtxA.z <= player->current.pos.z && player->current.pos.z <= mVtxB.z)
|
||||
{
|
||||
set_attention = true;
|
||||
}
|
||||
} else {
|
||||
f32 x_dist = current.pos.x - player_pos.x;
|
||||
f32 z_dist = current.pos.z - player_pos.z;
|
||||
f32 x_dist = current.pos.x - player->current.pos.x;
|
||||
f32 z_dist = current.pos.z - player->current.pos.z;
|
||||
|
||||
if (std::sqrt(x_dist * x_dist + z_dist * z_dist) < scale.x && mVtxA.y <= player_pos.y &&
|
||||
player_pos.y <= mVtxB.y)
|
||||
f32 var_f29 = std::sqrt(x_dist * x_dist + z_dist * z_dist);
|
||||
if (var_f29 < scale.x && mVtxA.y <= player->current.pos.y &&
|
||||
player->current.pos.y <= mVtxB.y)
|
||||
{
|
||||
set_attention = true;
|
||||
}
|
||||
@@ -75,6 +80,30 @@ int daTag_Chk_c::execute() {
|
||||
}
|
||||
|
||||
static int daTag_Chk_Draw(daTag_Chk_c* i_this) {
|
||||
#if DEBUG
|
||||
return i_this->draw();
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
int daTag_Chk_c::draw() {
|
||||
#if DEBUG
|
||||
if (g_envHIO.mOther.mDisplayTransparentCyl) {
|
||||
if (getAreaType() == 0) {
|
||||
cXyz sp40 = (mVtxB - mVtxA) * 0.5f;
|
||||
cXyz sp34 = mVtxA + sp40;
|
||||
csXyz sp14(0,0,0);
|
||||
dDbVw_drawCubeXlu(sp34, sp40, sp14,(GXColor){0xc0, 0x78, 0xff, 0xa0});
|
||||
} else {
|
||||
cXyz sp28 = current.pos;
|
||||
dDbVw_drawCylinderXlu(sp28, scale.x, scale.y, (GXColor){0xc0, 0x78, 0xff, 0xa0}, 1);
|
||||
}
|
||||
}
|
||||
if (g_envHIO.mOther.mDisplayTransparentCyl) {
|
||||
dDbVw_drawSphereXlu(attention_info.position, 20.0f, (GXColor){0xc0, 0x78, 0xff, 0xc0}, 1);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -88,12 +117,16 @@ static int daTag_Chk_IsDelete(daTag_Chk_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTag_Chk_Delete(daTag_Chk_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTag_Chk_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTag_Chk_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTag_Chk_c*>(i_this)->create();
|
||||
daTag_Chk_c* chk = static_cast<daTag_Chk_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
int result = chk->create();
|
||||
return result;
|
||||
}
|
||||
|
||||
static actor_method_class l_daTag_Chk_Method = {
|
||||
|
||||
+100
-60
@@ -10,10 +10,36 @@
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_bg_w.h"
|
||||
|
||||
class daTagCsw_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagCsw_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
f32 field_0x8;
|
||||
};
|
||||
|
||||
static const char* l_arcName = "Lv6Warp";
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static int const l_bmd_idx[2] = {5, 6};
|
||||
|
||||
static int const l_brk_idx[2] = {9, 10};
|
||||
|
||||
static int const l_dbz_idx[2] = {13, 14};
|
||||
|
||||
#if DEBUG
|
||||
static daTagCsw_HIO_c l_HIO;
|
||||
|
||||
daTagCsw_HIO_c::daTagCsw_HIO_c() {
|
||||
field_0x8 = 5.0f;
|
||||
}
|
||||
|
||||
void daTagCsw_HIO_c::genMessage(JORMContext* ctx) {
|
||||
ctx->genLabel("石像ワープ", 0);
|
||||
ctx->genSlider("上昇速度", &field_0x8, 0.0f, 30.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
static dCcD_SrcCyl l_cyl_src = {
|
||||
{
|
||||
{0x0, {{0x0, 0x0, 0x0}, {0xffffffff, 0x0}, 0x19}}, // mObj
|
||||
@@ -22,17 +48,14 @@ static dCcD_SrcCyl l_cyl_src = {
|
||||
{0x0}, // mGObjCo
|
||||
}, // mObjInf
|
||||
{
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
300.0f, // mRadius
|
||||
600.0f // mHeight
|
||||
} // mCyl
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
300.0f, // mRadius
|
||||
600.0f // mHeight
|
||||
} // mCyl
|
||||
} // mCylAttr
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static dCcD_SrcCyl l_tg_src = {
|
||||
{
|
||||
{0x0, {{0x0, 0x0, 0x0}, {0x400000, 0x11}, 0x0}}, // mObj
|
||||
@@ -41,29 +64,16 @@ static dCcD_SrcCyl l_tg_src = {
|
||||
{0x0}, // mGObjCo
|
||||
}, // mObjInf
|
||||
{
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
300.0f, // mRadius
|
||||
600.0f // mHeight
|
||||
} // mCyl
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||||
300.0f, // mRadius
|
||||
600.0f // mHeight
|
||||
} // mCyl
|
||||
} // mCylAttr
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
daTagCsw_c::~daTagCsw_c() {}
|
||||
|
||||
static u8 const l_bmd_idx[8] = {
|
||||
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06,
|
||||
};
|
||||
|
||||
static u8 const l_brk_idx[8] = {
|
||||
0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0A,
|
||||
};
|
||||
|
||||
static u8 const l_dbz_idx[8] = {
|
||||
0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0E,
|
||||
};
|
||||
|
||||
void daTagCsw_c::setMtx() {
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
@@ -164,14 +174,13 @@ static int daTagCsw_c_createHeap(fopAc_ac_c* i_this) {
|
||||
|
||||
int daTagCsw_c::chkInsideStatueStart() {
|
||||
bool rv = false;
|
||||
bool var_r29;
|
||||
if (fopAcM_isSwitch(this, getSw())) {
|
||||
bool bVar1 = true;
|
||||
if (getSw() != 10) {
|
||||
if (fopAcM_isSwitch(this, getSw() + 1)) {
|
||||
bVar1 = false;
|
||||
}
|
||||
var_r29 = true;
|
||||
if (getSw() != 10 && fopAcM_isSwitch(this, getSw() + 1)) {
|
||||
var_r29 = false;
|
||||
}
|
||||
if (bVar1) {
|
||||
if (var_r29) {
|
||||
rv = true;
|
||||
}
|
||||
}
|
||||
@@ -180,6 +189,14 @@ int daTagCsw_c::chkInsideStatueStart() {
|
||||
|
||||
int daTagCsw_c::create() {
|
||||
fopAcM_ct(this, daTagCsw_c);
|
||||
|
||||
if (getSw() < 0 || getSw() > 10) {
|
||||
// "Stone statue warp tag: Switch bit is out of range:
|
||||
// Please use a save bit within the range (%d~%d)"
|
||||
OS_REPORT_ERROR("石像ワープタグ:スイッチビットが範囲外:%dセーブビット(%d~%d)でお願いします。\n",
|
||||
getSw(), 0, 10);
|
||||
}
|
||||
|
||||
field_0x570 = getType();
|
||||
int rv = dComIfG_resLoad(this, l_arcName);
|
||||
if (rv == cPhs_COMPLEATE_e) {
|
||||
@@ -191,7 +208,11 @@ int daTagCsw_c::create() {
|
||||
field_0x624 = 500.0f;
|
||||
} else if (chkInsideStatueStart()) {
|
||||
field_0x624 = 0.0f;
|
||||
#if DEBUG
|
||||
field_0x628 = l_HIO.field_0x8;
|
||||
#else
|
||||
field_0x628 = 5.0f;
|
||||
#endif
|
||||
if (getSw2() != 0xff) {
|
||||
fopAcM_onSwitch(this, getSw2());
|
||||
}
|
||||
@@ -225,24 +246,27 @@ int daTagCsw_c::create() {
|
||||
return rv;
|
||||
}
|
||||
|
||||
static void* searchTagCswOut(void* param_1, void* param_2) {
|
||||
if (param_1 != NULL && fopAcM_IsActor(param_1) && fopAcM_GetProfName(param_1) == PROC_TAG_CSW &&
|
||||
static_cast<daTagCsw_c*>(param_1)->getType() == 1)
|
||||
{
|
||||
if (static_cast<daTagCsw_c*>(param_1)->getSw() ==
|
||||
static_cast<daTagCsw_c*>(param_2)->getSw())
|
||||
{
|
||||
return param_1;
|
||||
static void* searchTagCswOut(void* param_0, void* param_1) {
|
||||
UNUSED(param_1);
|
||||
if (param_0 != NULL && fopAcM_IsActor(param_0) && fopAcM_GetProfName(param_0) == PROC_TAG_CSW) {
|
||||
daTagCsw_c* csw1 = static_cast<daTagCsw_c*>(param_0);
|
||||
daTagCsw_c* csw2 = static_cast<daTagCsw_c*>(param_1);
|
||||
if (csw1->getType() == 1) {
|
||||
if (csw1->getSw() == csw2->getSw()) {
|
||||
return param_0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void* searchCStatue(void* param_1, void* param_2) {
|
||||
if (param_1 != NULL && fopAcM_IsActor(param_1) && fopAcM_GetProfName(param_1) == PROC_CSTATUE &&
|
||||
static_cast<daCstatue_c*>(param_1)->checkNormalType())
|
||||
{
|
||||
return param_1;
|
||||
static void* searchCStatue(void* param_0, void* param_1) {
|
||||
UNUSED(param_1);
|
||||
if (param_0 != NULL && fopAcM_IsActor(param_0) && fopAcM_GetProfName(param_0) == PROC_CSTATUE) {
|
||||
daCstatue_c* cstatue = static_cast<daCstatue_c*>(param_0);
|
||||
if (cstatue->checkNormalType()) {
|
||||
return param_0;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -283,11 +307,14 @@ void daTagCsw_c::offLight() {
|
||||
int daTagCsw_c::execute() {
|
||||
bool bVar3 = false;
|
||||
daCstatue_c* statue = (daCstatue_c*)fopAcM_Search(searchCStatue, this);
|
||||
if (statue != NULL && statue->current.pos.absXZ(current.pos) < 75.0f &&
|
||||
statue->current.pos.y > current.pos.y - 30.0f &&
|
||||
statue->current.pos.y < current.pos.y + 200.0f)
|
||||
{
|
||||
bVar3 = true;
|
||||
if (statue != NULL) {
|
||||
f32 dist = statue->current.pos.absXZ(current.pos);
|
||||
if (dist < 75.0f &&
|
||||
statue->current.pos.y > current.pos.y - 30.0f &&
|
||||
statue->current.pos.y < current.pos.y + 200.0f)
|
||||
{
|
||||
bVar3 = true;
|
||||
}
|
||||
}
|
||||
if (field_0x570 == 0) {
|
||||
if (bVar3) {
|
||||
@@ -302,7 +329,11 @@ int daTagCsw_c::execute() {
|
||||
if (cM3d_IsZero(field_0x628) && getSw2() != 0xff) {
|
||||
fopAcM_onSwitch(this, getSw2());
|
||||
}
|
||||
#if DEBUG
|
||||
field_0x628 = -l_HIO.field_0x8;
|
||||
#else
|
||||
field_0x628 = -5.0f;
|
||||
#endif
|
||||
if (!field_0x588->ChkUsed()) {
|
||||
dComIfG_Bgsp().Regist(field_0x588, this);
|
||||
field_0x5ec = 0;
|
||||
@@ -342,14 +373,14 @@ int daTagCsw_c::execute() {
|
||||
}
|
||||
}
|
||||
if (field_0x570 == 0 && getSw() == 6 && field_0x8e2 != 0) {
|
||||
s16 angleDiff = (current.angle.y - statue->current.angle.y);
|
||||
s16 sVar4 = angleDiff / field_0x8e2;
|
||||
if (sVar4 > 0x800) {
|
||||
statue->current.angle.y += 0x800;
|
||||
} else if (sVar4 < -0x800) {
|
||||
statue->current.angle.y -= 0x800;
|
||||
s16 sp0A = current.angle.y - statue->current.angle.y;
|
||||
sp0A /= field_0x8e2;
|
||||
if (sp0A > 0x800) {
|
||||
statue->current.angle.y += (s16)0x800;
|
||||
} else if (sp0A < -0x800) {
|
||||
statue->current.angle.y -= (s16)0x800;
|
||||
} else {
|
||||
statue->current.angle.y += sVar4;
|
||||
statue->current.angle.y += sp0A;
|
||||
}
|
||||
statue->shape_angle.y = statue->current.angle.y;
|
||||
onLight();
|
||||
@@ -357,7 +388,11 @@ int daTagCsw_c::execute() {
|
||||
}
|
||||
if (!bVar3 && field_0x624 == 0.0f) {
|
||||
if (fopAcM_isSwitch(this, getSw())) {
|
||||
#if DEBUG
|
||||
field_0x628 = l_HIO.field_0x8;
|
||||
#else
|
||||
field_0x628 = 5.0f;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -365,7 +400,11 @@ int daTagCsw_c::execute() {
|
||||
if (getSw2() != 0xff) {
|
||||
fopAcM_onSwitch(this, getSw2());
|
||||
}
|
||||
#if DEBUG
|
||||
field_0x628 = l_HIO.field_0x8;
|
||||
#else
|
||||
field_0x628 = 5.0f;
|
||||
#endif
|
||||
onLight();
|
||||
}
|
||||
else if (field_0x624 == 500.0f) {
|
||||
@@ -498,7 +537,8 @@ static int daTagCsw_Delete(daTagCsw_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagCsw_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagCsw_c*>(i_this)->create();
|
||||
daTagCsw_c* csw = static_cast<daTagCsw_c*>(i_this);
|
||||
return csw->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagCsw_Method = {
|
||||
|
||||
@@ -8,12 +8,19 @@
|
||||
#include "d/actor/d_a_tag_escape.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
static int daTagEscape_Create(fopAc_ac_c* i_this) {
|
||||
fopAcM_ct(i_this, daTagEscape_c);
|
||||
int daTagEscape_c::create() {
|
||||
fopAcM_ct(this, daTagEscape_c);
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
static int daTagEscape_Create(fopAc_ac_c* i_this) {
|
||||
daTagEscape_c* escape = static_cast<daTagEscape_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return escape->create();
|
||||
}
|
||||
|
||||
static int daTagEscape_Delete(daTagEscape_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagEscape_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_horse.h"
|
||||
#include "d/actor/d_a_tag_event.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_horse.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
static fopAc_ac_c* daTag_getBk(u32 param_0) {
|
||||
return fopAcM_searchFromName("Bk", 0xF, param_0);
|
||||
}
|
||||
|
||||
u8 daTag_Event_c::getEventNo() {
|
||||
return fopAcM_GetParam(this) >> 0x18;
|
||||
return (fopAcM_GetParam(this) & 0xff000000) >> 24;
|
||||
}
|
||||
|
||||
u8 daTag_Event_c::getSwbit() {
|
||||
return fopAcM_GetParam(this) >> 0x8;
|
||||
return (fopAcM_GetParam(this) & 0xff00) >> 8;
|
||||
}
|
||||
|
||||
u8 daTag_Event_c::getSwbit2() {
|
||||
return fopAcM_GetParam(this) >> 0x10;
|
||||
return (fopAcM_GetParam(this) & 0xff0000) >> 16;
|
||||
}
|
||||
|
||||
u8 daTag_Event_c::getType() {
|
||||
@@ -103,10 +105,8 @@ int daTag_Event_c::create() {
|
||||
setActio(ACTION_WAIT);
|
||||
}
|
||||
|
||||
shape_angle.z = 0;
|
||||
shape_angle.x = 0;
|
||||
current.angle.z = 0;
|
||||
current.angle.x = 0;
|
||||
shape_angle.x = shape_angle.z = 0;
|
||||
current.angle.x = current.angle.z = 0;
|
||||
|
||||
scale.x *= 100.0f;
|
||||
scale.y *= 100.0f;
|
||||
@@ -131,8 +131,9 @@ int daTag_Event_c::actionNext() {
|
||||
mEventIdx = mMapEventIdx;
|
||||
mMapEventIdx = -1;
|
||||
|
||||
int roomNo = fopAcM_GetRoomNo(this);
|
||||
dStage_MapEvent_dt_c* event_data =
|
||||
dEvt_control_c::searchMapEventData(mMapToolId, fopAcM_GetRoomNo(this));
|
||||
dEvt_control_c::searchMapEventData(mMapToolId, roomNo);
|
||||
if (event_data != NULL) {
|
||||
mMapToolId = event_data->field_0x5;
|
||||
mMapEventIdx = dComIfGp_getEventManager().getEventIdx(this, mMapToolId);
|
||||
@@ -231,6 +232,10 @@ int daTag_Event_c::actionHunt() {
|
||||
if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this))) {
|
||||
setActio(ACTION_WAIT);
|
||||
} else if (arrivalTerms() && checkArea()) {
|
||||
#if DEBUG
|
||||
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, getEventNo());
|
||||
#endif
|
||||
|
||||
setActio(ACTION_READY);
|
||||
fopAcM_orderOtherEventId(this, mEventIdx, getEventNo(), 0xFFFF, 0, 1);
|
||||
}
|
||||
@@ -299,6 +304,36 @@ int daTag_Event_c::execute() {
|
||||
}
|
||||
|
||||
int daTag_Event_c::draw() {
|
||||
#if DEBUG
|
||||
static GXColor color = {0x00, 0x00, 0xFF, 0xFF};
|
||||
|
||||
if (g_envHIO.mOther.mDisplayTransparentCyl != 0) {
|
||||
if (getAreaType() == 0x8000) {
|
||||
cXyz sp30[8];
|
||||
cXyz sp20(current.pos.x - scale.x * 0.5f,
|
||||
current.pos.y,
|
||||
current.pos.z - scale.z * 0.5f);
|
||||
cXyz sp14(current.pos.x + scale.x * 0.5f,
|
||||
current.pos.y + scale.y,
|
||||
current.pos.z + scale.z * 0.5f);
|
||||
sp30[0].set(sp20.x, sp20.y, sp20.z);
|
||||
sp30[1].set(sp20.x, sp20.y, sp14.z);
|
||||
sp30[2].set(sp14.x, sp20.y, sp14.z);
|
||||
sp30[3].set(sp14.x, sp20.y, sp20.z);
|
||||
sp30[4].set(sp20.x, sp14.y, sp20.z);
|
||||
sp30[5].set(sp20.x, sp14.y, sp14.z);
|
||||
sp30[6].set(sp14.x, sp14.y, sp14.z);
|
||||
sp30[7].set(sp14.x, sp14.y, sp20.z);
|
||||
dDbVw_drawCube8pXlu(sp30, color);
|
||||
} else {
|
||||
cXyz sp08(current.pos);
|
||||
sp08.y -= scale.y;
|
||||
dDbVw_drawCylinderXlu(
|
||||
sp08, scale.x, scale.y * 2.0f,
|
||||
color, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -316,12 +351,16 @@ static int daTag_Event_IsDelete(daTag_Event_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTag_Event_Delete(daTag_Event_c* i_this) {
|
||||
u32 actorId = fopAcM_GetID(i_this);
|
||||
i_this->~daTag_Event_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTag_Event_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTag_Event_c*>(i_this)->create();
|
||||
daTag_Event_c* event = static_cast<daTag_Event_c*>(i_this);
|
||||
u32 actorId = fopAcM_GetID(i_this);
|
||||
int result = event->create();
|
||||
return result;
|
||||
}
|
||||
|
||||
static actor_method_class l_daTag_Event_Method = {
|
||||
|
||||
+27
-17
@@ -38,14 +38,20 @@ int daTag_Evt_c::destroy() {
|
||||
}
|
||||
|
||||
int daTag_Evt_c::execute() {
|
||||
cXyz sp14;
|
||||
int var_r29 = 0;
|
||||
BOOL bVar = true;
|
||||
u16 eventId;
|
||||
int iVar1;
|
||||
int actIdx;
|
||||
|
||||
eyePos.set(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
||||
attention_info.position = eyePos;
|
||||
fopAcM_SetRoomNo(this, dComIfGp_roomControl_getStayNo());
|
||||
if (field_0x5E4 == 0 || field_0x5E4 == 1) {
|
||||
if (dComIfGp_event_runCheck()) {
|
||||
bVar = false;
|
||||
int iVar1 = dComIfGp_evmng_getMyStaffId(field_0x568, 0, 0);
|
||||
iVar1 = dComIfGp_evmng_getMyStaffId(field_0x568, 0, 0);
|
||||
if (!eventInfo.checkCommandTalk()) {
|
||||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||||
if (dComIfGp_getEventManager().endCheck(field_0x572)) {
|
||||
@@ -55,20 +61,20 @@ int daTag_Evt_c::execute() {
|
||||
bVar = true;
|
||||
} else {
|
||||
if (iVar1 != -1) {
|
||||
int actIdx = dComIfGp_getEventManager().getMyActIdx(
|
||||
actIdx = dComIfGp_getEventManager().getMyActIdx(
|
||||
iVar1, mEvtCutList, 3, 0, 0);
|
||||
int iVar2 = 0;
|
||||
var_r29 = 0;
|
||||
switch (actIdx) {
|
||||
case 0:
|
||||
iVar2 = doEvtCutWait(iVar1);
|
||||
var_r29 = doEvtCutWait(iVar1);
|
||||
break;
|
||||
case 1:
|
||||
iVar2 = doEvtCutTalk(iVar1);
|
||||
var_r29 = doEvtCutTalk(iVar1);
|
||||
break;
|
||||
case 2:
|
||||
iVar2 = doEvtCutNext(iVar1);
|
||||
var_r29 = doEvtCutNext(iVar1);
|
||||
}
|
||||
if (iVar2 != 0) {
|
||||
if (var_r29 != 0) {
|
||||
dComIfGp_getEventManager().cutEnd(iVar1);
|
||||
}
|
||||
}
|
||||
@@ -77,7 +83,7 @@ int daTag_Evt_c::execute() {
|
||||
} else if (field_0x5DC != 0) {
|
||||
if (mMsgFlow.doFlow(this, NULL, 0) != 0) {
|
||||
dComIfGp_event_reset();
|
||||
u16 eventId = mMsgFlow.getEventId(NULL);
|
||||
eventId = mMsgFlow.getEventId(NULL);
|
||||
if (eventId != 0) {
|
||||
daNpcMsg_setEvtNum(eventId);
|
||||
field_0x570 = 1;
|
||||
@@ -92,8 +98,8 @@ int daTag_Evt_c::execute() {
|
||||
}
|
||||
}
|
||||
if (!isDelete() && cLib_calcTimer(&field_0x5D0) == 0) {
|
||||
cXyz var1 = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
if (var1.absXZ() < scale.x && -scale.y < var1.y && var1.y < scale.y) {
|
||||
sp14 = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
if (sp14.absXZ() < scale.x && -scale.y < sp14.y && sp14.y < scale.y) {
|
||||
field_0x570 = 1;
|
||||
}
|
||||
}
|
||||
@@ -113,16 +119,16 @@ int daTag_Evt_c::draw() {
|
||||
|
||||
int daTag_Evt_c::getParam() {
|
||||
field_0x5E0 = fopAcM_GetParam(this) & 0xFFF;
|
||||
field_0x5E2 = (fopAcM_GetParam(this) >> 0xC) & 0xFFF;
|
||||
field_0x5E2 = (fopAcM_GetParam(this) & 0xFFF000) >> 12;
|
||||
if ((fopAcM_GetParam(this) & 0xF000000) != 0xF000000) {
|
||||
field_0x5D8 = (fopAcM_GetParam(this) & 0xF000000) >> 0x18;
|
||||
field_0x5D8 = (fopAcM_GetParam(this) & 0xF000000) >> 24;
|
||||
} else {
|
||||
field_0x5D8 = -1;
|
||||
}
|
||||
|
||||
field_0x5E4 = fopAcM_GetParam(this) >> 0x1E;
|
||||
field_0x5E4 = (fopAcM_GetParam(this) & 0xC0000000) >> 30;
|
||||
field_0x5DD = home.angle.x;
|
||||
field_0x5DE = (u16)home.angle.x >> 8;
|
||||
field_0x5DE = (home.angle.x & 0xFF00) >> 8;
|
||||
field_0x5D4 = home.angle.z & 0xFF;
|
||||
if ((home.angle.z & 0xFF00) != 0xFF00) {
|
||||
field_0x5D0 = ((home.angle.z & 0xFF00) >> 8) * 0x1E;
|
||||
@@ -175,16 +181,19 @@ int daTag_Evt_c::isDelete() {
|
||||
}
|
||||
|
||||
int daTag_Evt_c::doEvtCutWait(int param_0) {
|
||||
int* pTimer = NULL;
|
||||
if (dComIfGp_getEventManager().getIsAddvance(param_0)) {
|
||||
int* pTimer = dComIfGp_evmng_getMyIntegerP(param_0, "timer");
|
||||
mTimer = (pTimer == NULL ? 0 : *pTimer);
|
||||
pTimer = dComIfGp_evmng_getMyIntegerP(param_0, "timer");
|
||||
mTimer = pTimer == NULL ? 0 : *pTimer;
|
||||
}
|
||||
return cLib_calcTimer(&mTimer) == 0;
|
||||
}
|
||||
|
||||
int daTag_Evt_c::doEvtCutTalk(int param_0) {
|
||||
int* pTimer = NULL;
|
||||
if (dComIfGp_getEventManager().getIsAddvance(param_0)) {
|
||||
mMsgFlow.init(this, *dComIfGp_evmng_getMyIntegerP(param_0, "flowNodeNo"), 0, NULL);
|
||||
pTimer = dComIfGp_evmng_getMyIntegerP(param_0, "flowNodeNo");
|
||||
mMsgFlow.init(this, *pTimer, 0, NULL);
|
||||
return 0;
|
||||
} else {
|
||||
return mMsgFlow.doFlow(this, NULL, 0);
|
||||
@@ -192,6 +201,7 @@ int daTag_Evt_c::doEvtCutTalk(int param_0) {
|
||||
}
|
||||
|
||||
int daTag_Evt_c::doEvtCutNext(int param_0) {
|
||||
int* pTimer = NULL;
|
||||
if (dComIfGp_getEventManager().getIsAddvance(param_0)) {
|
||||
if ((field_0x5E4 == 0 || field_0x5E4 == 1) && field_0x5DE != 0xFF) {
|
||||
dComIfGs_onSwitch(field_0x5DE, fopAcM_GetRoomNo(this));
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#include "d/d_procname.h"
|
||||
|
||||
cPhs__Step daTag_EvtArea_c::create() {
|
||||
int var_r28 = 0;
|
||||
|
||||
fopAcM_ct(this, daTag_EvtArea_c);
|
||||
|
||||
switch (getType()) {
|
||||
@@ -149,20 +151,19 @@ BOOL daTag_EvtArea_c::isDelete() {
|
||||
}
|
||||
|
||||
BOOL daTag_EvtArea_c::chkPointInArea(cXyz i_point, cXyz i_addSize) {
|
||||
cXyz area_vtx[4];
|
||||
cXyz size, center, player_to_home, point_to_current;
|
||||
|
||||
if (field_0x56c == 0) {
|
||||
if ((getOnEvtBit() != -1 && daNpcT_chkEvtBit(getOnEvtBit())) ||
|
||||
(getBitSW() != 0xff && dComIfGs_isSwitch(getBitSW(), fopAcM_GetRoomNo(this))) ||
|
||||
(getOnEvtBit() == -1 && getBitSW() == 0xFF))
|
||||
{
|
||||
size = scale + i_addSize;
|
||||
cXyz size = scale + i_addSize;
|
||||
cXyz center;
|
||||
|
||||
if (getType() == 15 || getType() == 16) {
|
||||
player_to_home = daPy_getPlayerActorClass()->current.pos;
|
||||
cXyz area_vtx[4];
|
||||
cXyz player_to_home = daPy_getPlayerActorClass()->current.pos;
|
||||
player_to_home -= home.pos;
|
||||
mDoMtx_YrotS(mDoMtx_stack_c::now, -current.angle.y);
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&player_to_home, &player_to_home);
|
||||
|
||||
// bottom left
|
||||
@@ -184,7 +185,7 @@ BOOL daTag_EvtArea_c::chkPointInArea(cXyz i_point, cXyz i_addSize) {
|
||||
if (area_vtx[0].x < player_to_home.x && area_vtx[0].z < player_to_home.z &&
|
||||
area_vtx[2].x > player_to_home.x && area_vtx[2].z > player_to_home.z)
|
||||
{
|
||||
point_to_current = i_point - current.pos;
|
||||
cXyz point_to_current = i_point - current.pos;
|
||||
if (0 <= (int)point_to_current.y && (int)point_to_current.y < (int)size.y) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
enum evt_cut_e {
|
||||
EVT_CUT_NONE_e,
|
||||
EVT_CUT_TALK_e,
|
||||
EVT_CUT_WAIT_e,
|
||||
NUM_EVT_CUTS_e,
|
||||
};
|
||||
|
||||
char* daTag_EvtMsg_c::mEvtCutNameList[] = {"", "TALK", "WAIT"};
|
||||
|
||||
EvtCutFunc daTag_EvtMsg_c::mEvtCutList[] = {
|
||||
@@ -21,6 +28,8 @@ EvtCutFunc daTag_EvtMsg_c::mEvtCutList[] = {
|
||||
static char* l_myName = "EvtMsg";
|
||||
|
||||
int daTag_EvtMsg_c::create() {
|
||||
int var_r28 = 0;
|
||||
|
||||
fopAcM_ct(this, daTag_EvtMsg_c);
|
||||
|
||||
scale.x *= 100.0f;
|
||||
@@ -67,6 +76,10 @@ int daTag_EvtMsg_c::Execute() {
|
||||
staff_id = evt_mng.getMyStaffId(l_myName, this, -1);
|
||||
if (staff_id != -1) {
|
||||
int evtCutNo = evt_mng.getMyActIdx(staff_id, mEvtCutNameList, 3, 0, 0);
|
||||
|
||||
JUT_ASSERT(165, (0 <= evtCutNo) && (evtCutNo < NUM_EVT_CUTS_e));
|
||||
JUT_ASSERT(166, NULL != mEvtCutList[evtCutNo]);
|
||||
|
||||
if ((this->*mEvtCutList[evtCutNo])(staff_id) != 0) {
|
||||
evt_mng.cutEnd(staff_id);
|
||||
}
|
||||
@@ -82,18 +95,18 @@ int daTag_EvtMsg_c::Execute() {
|
||||
}
|
||||
} else if (isDelete()) {
|
||||
fopAcM_delete(this);
|
||||
} else if (mFlowID != -1) {
|
||||
if (chkPointInArea(daPy_getPlayerActorClass()->current.pos)) {
|
||||
} else {
|
||||
if (mFlowID != -1 && chkPointInArea(daPy_getPlayerActorClass()->current.pos)) {
|
||||
if (getProcType() == 0) {
|
||||
s16 var_r0 = (s16)(fopAcM_searchPlayerAngleY(this) + 0x7FFF);
|
||||
var_r0 = var_r0 - daPy_getPlayerActorClass()->current.angle.y;
|
||||
s16 var_r28 = (s16)(fopAcM_searchPlayerAngleY(this) + 0x7FFF);
|
||||
var_r28 = var_r28 - daPy_getPlayerActorClass()->current.angle.y;
|
||||
|
||||
if (var_r0 < 0) {
|
||||
var_r0 = -var_r0;
|
||||
if (var_r28 < 0) {
|
||||
var_r28 = -var_r28;
|
||||
}
|
||||
|
||||
if (var_r0 <= 0x1000) {
|
||||
mEventID = evt_mng.getEventIdx(this, "DEFAULT_EVT_TALK", 0xFF);
|
||||
if (var_r28 <= 0x1000) {
|
||||
mEventID = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_EVT_TALK", 0xFF);
|
||||
fopAcM_orderOtherEventId(this, mEventID, 0xFF, 0xFFFF, 0, 1);
|
||||
}
|
||||
} else {
|
||||
@@ -117,20 +130,12 @@ int daTag_EvtMsg_c::Draw() {
|
||||
|
||||
u32 daTag_EvtMsg_c::getOnEvtBit() {
|
||||
u32 bit = fopAcM_GetParam(this) & 0xFFF;
|
||||
if (bit != 0xFFF) {
|
||||
return bit;
|
||||
}
|
||||
|
||||
return -1;
|
||||
return bit == 0xFFF ? -1 : bit;
|
||||
}
|
||||
|
||||
u32 daTag_EvtMsg_c::getOffEvtBit() {
|
||||
u32 bit = (fopAcM_GetParam(this) >> 0xC) & 0xFFF;
|
||||
if (bit != 0xFFF) {
|
||||
return bit;
|
||||
}
|
||||
|
||||
return -1;
|
||||
u32 bit = (fopAcM_GetParam(this) & 0xFFF000) >> 12;
|
||||
return bit == 0xFFF ? -1 : bit;
|
||||
}
|
||||
|
||||
u8 daTag_EvtMsg_c::getOnSwBit() {
|
||||
@@ -138,7 +143,7 @@ u8 daTag_EvtMsg_c::getOnSwBit() {
|
||||
}
|
||||
|
||||
u8 daTag_EvtMsg_c::getOffSwBit() {
|
||||
return (home.angle.x >> 8) & 0xFF;
|
||||
return (home.angle.x & 0xFF00) >> 8;
|
||||
}
|
||||
|
||||
u8 daTag_EvtMsg_c::getProcType() {
|
||||
@@ -175,7 +180,8 @@ BOOL daTag_EvtMsg_c::chkPointInArea(cXyz param_0) {
|
||||
}
|
||||
|
||||
BOOL daTag_EvtMsg_c::ECut_talk(int i_staffID) {
|
||||
if (dComIfGp_getEventManager().getIsAddvance(i_staffID)) {
|
||||
dEvent_manager_c& eventMgr = dComIfGp_getEventManager();
|
||||
if (eventMgr.getIsAddvance(i_staffID)) {
|
||||
mMsgFlow.init(this, mFlowID, 0, NULL);
|
||||
}
|
||||
|
||||
@@ -188,9 +194,10 @@ BOOL daTag_EvtMsg_c::ECut_talk(int i_staffID) {
|
||||
|
||||
BOOL daTag_EvtMsg_c::ECut_wait(int i_staffID) {
|
||||
dEvent_manager_c& evt_mng = dComIfGp_getEventManager();
|
||||
int* data_p = NULL;
|
||||
int timer = 0;
|
||||
|
||||
int* data_p = dComIfGp_evmng_getMyIntegerP(i_staffID, "timer");
|
||||
data_p = dComIfGp_evmng_getMyIntegerP(i_staffID, "timer");
|
||||
if (data_p != NULL) {
|
||||
timer = *data_p;
|
||||
}
|
||||
|
||||
@@ -5,12 +5,13 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_firewall.h"
|
||||
#include <cmath>
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_tag_firewall.h"
|
||||
#include "d/d_bomb.h"
|
||||
#include "d/d_camera.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
struct Tag_FWall_n {
|
||||
static dCcD_SrcSph cc_sph_src;
|
||||
@@ -42,6 +43,7 @@ static u8 fire_num;
|
||||
int daTag_FWall_c::execute() {
|
||||
cXyz cam_eye = dCam_getBody()->Eye();
|
||||
cXyz pos;
|
||||
u8 target_alpha = 0xff;
|
||||
|
||||
if (mSetGameoverEff) {
|
||||
pos.set(0.0f, 0.0f, 0.0f);
|
||||
@@ -108,8 +110,9 @@ int daTag_FWall_c::execute() {
|
||||
mCcSphs[i].OnAtSetBit();
|
||||
|
||||
pos = mWallPos[i];
|
||||
pos.y += nREG_F(17);
|
||||
mCcSphs[i].SetC(pos);
|
||||
mCcSphs[i].SetR(90.0f);
|
||||
mCcSphs[i].SetR(90.0f + nREG_F(16));
|
||||
dComIfG_Ccsp()->Set(&mCcSphs[i]);
|
||||
}
|
||||
|
||||
@@ -120,8 +123,7 @@ int daTag_FWall_c::execute() {
|
||||
if (emitter != NULL) {
|
||||
pos = cam_eye - mWallPos[i];
|
||||
|
||||
u8 target_alpha;
|
||||
if (pos.absXZ() < 250.0f && std::abs(pos.y) < 250.0f) {
|
||||
if (pos.absXZ() < 250.0f + nREG_F(18) && std::abs(pos.y) < 250.0f + nREG_F(19)) {
|
||||
target_alpha = 0;
|
||||
} else {
|
||||
target_alpha = 0xFF;
|
||||
@@ -163,23 +165,26 @@ static int daTag_FWall_IsDelete(daTag_FWall_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTag_FWall_Delete(daTag_FWall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTag_FWall_c::create() {
|
||||
fopAcM_ct(this, daTag_FWall_c);
|
||||
|
||||
OS_REPORT("Tag_FWall PARAM %x %d \n", fopAcM_GetParam(this), fire_num);
|
||||
|
||||
if (fire_num == 0) {
|
||||
field_0x568 = 0xFF;
|
||||
fire_leader = this;
|
||||
mCcStts.Init(0xFF, 0, this);
|
||||
}
|
||||
|
||||
fire_leader->mWallTimer[fire_num] = (fopAcM_GetParam(this) >> 8) & 0xFFFF;
|
||||
fire_leader->mWallTimer[fire_num] = (fopAcM_GetParam(this) & 0xFFFF00) >> 8;
|
||||
fire_leader->mExplodeTime[fire_num] = current.angle.x & 0xFFFF;
|
||||
fire_leader->field_0x65c[fire_num] = fopAcM_GetParam(this);
|
||||
|
||||
u8 temp_r0 = fopAcM_GetParam(this) >> 0x18;
|
||||
u8 temp_r0 = (fopAcM_GetParam(this) & 0xFF000000) >> 24;
|
||||
if (temp_r0 == 0xFF) {
|
||||
temp_r0 = 0;
|
||||
}
|
||||
@@ -194,12 +199,12 @@ int daTag_FWall_c::create() {
|
||||
fire_leader->mWallMode[fire_num] = 1;
|
||||
}
|
||||
|
||||
if (++fire_num > 1) {
|
||||
fire_num++;
|
||||
if (fire_num > 1) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
shape_angle.x = 0;
|
||||
current.angle.x = 0;
|
||||
current.angle.x = shape_angle.x = 0;
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,10 +9,12 @@
|
||||
|
||||
static int daTagGra_Create(fopAc_ac_c* i_this) {
|
||||
daTagGra_c* gra_tag = (daTagGra_c*)i_this;
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return gra_tag->create();
|
||||
}
|
||||
|
||||
static int daTagGra_Delete(daTagGra_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagGra_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -14,30 +14,33 @@ int daTagGstart_c::create() {
|
||||
fopAcM_ct(this, daTagGstart_c);
|
||||
|
||||
mSwNo = fopAcM_GetParam(this);
|
||||
mSwNo2 = fopAcM_GetParam(this) >> 8;
|
||||
field_0x56a = fopAcM_GetParam(this) >> 0x10;
|
||||
mSwNo2 = (fopAcM_GetParam(this) >> 8) & 0xFF;
|
||||
field_0x56a = (fopAcM_GetParam(this) >> 0x10) & 0xFF;
|
||||
mType = (fopAcM_GetParam(this) >> 0x18) & 0xF;
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
static int daTagGstart_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagGstart_c*>(i_this)->create();
|
||||
daTagGstart_c* gStart = static_cast<daTagGstart_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return gStart->create();
|
||||
}
|
||||
|
||||
daTagGstart_c::~daTagGstart_c() {}
|
||||
|
||||
static int daTagGstart_Delete(daTagGstart_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagGstart_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagGstart_c::execute() {
|
||||
if ((mSwNo == 0xFF || dComIfGs_isSwitch(mSwNo, fopAcM_GetHomeRoomNo(this))) &&
|
||||
(mSwNo2 == 0xFF || !dComIfGs_isSwitch(mSwNo2, fopAcM_GetHomeRoomNo(this))))
|
||||
if ((mSwNo == 0xFF || fopAcM_isSwitch(this, mSwNo)) &&
|
||||
(mSwNo2 == 0xFF || !fopAcM_isSwitch(this, mSwNo2)))
|
||||
{
|
||||
if (mType != 0 || dComIfGp_getLinkPlayer()->checkWolf()) {
|
||||
dComIfGp_getLinkPlayer()->onSceneChangeDead(field_0x56a, fopAcM_GetRoomNo(this));
|
||||
if (mType != 0 || daPy_py_c::checkNowWolf()) {
|
||||
daPy_getLinkPlayerActorClass()->onSceneChangeDead(field_0x56a, fopAcM_GetRoomNo(this));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,8 @@ int daTagGuard_c::getAppearPoint(Vec* i_appearPnt) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
*i_appearPnt = dPath_GetPnt(mPath, mPath->m_num - 1)->m_position;
|
||||
dPnt* pnt = dPath_GetPnt(mPath, mPath->m_num - 1);
|
||||
*i_appearPnt = pnt->m_position;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -21,8 +22,9 @@ void daTagGuard_c::createGuard(u32 i_parameters) {
|
||||
cXyz pos = current.pos;
|
||||
|
||||
if (getPathID() != 0xFF) {
|
||||
pos = dPath_GetPnt(mPath, 0)->m_position;
|
||||
i_parameters |= (getPathID() << 0x10);
|
||||
dPnt* pnt = dPath_GetPnt(mPath, 0);
|
||||
pos.set(pnt->m_position);
|
||||
i_parameters |= getPathID() << 0x10;
|
||||
}
|
||||
|
||||
fopAcM_createChild(PROC_NPC_GUARD, fopAcM_GetID(this), i_parameters, &pos,
|
||||
@@ -38,20 +40,31 @@ int daTagGuard_c::create() {
|
||||
void daTagGuard_c::create_init() {
|
||||
mPath = dPath_GetRoomPath(getPathID(), fopAcM_GetHomeRoomNo(this));
|
||||
|
||||
JUT_ASSERT(135, mPath != NULL);
|
||||
|
||||
dPnt* pnt1 = dPath_GetPnt(mPath, 0);
|
||||
dPnt* pnt2 = dPath_GetPnt(mPath, 1);
|
||||
|
||||
#if DEBUG
|
||||
current.pos.set(pnt1->m_position);
|
||||
#else
|
||||
//TODO: fakematch, using ::set causes a misplaced mr on GCN versions
|
||||
current.pos.x = pnt1->m_position.x;
|
||||
current.pos.y = pnt1->m_position.y;
|
||||
current.pos.z = pnt1->m_position.z;
|
||||
#endif
|
||||
|
||||
current.angle.y = cLib_targetAngleY(&pnt1->m_position, &pnt2->m_position);
|
||||
}
|
||||
|
||||
static int daTagGuard_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagGuard_c*>(i_this)->create();
|
||||
daTagGuard_c* guard = static_cast<daTagGuard_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return guard->create();
|
||||
}
|
||||
|
||||
static int daTagGuard_Delete(daTagGuard_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagGuard_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -25,12 +25,15 @@ int daTagHinit_c::create() {
|
||||
}
|
||||
|
||||
static int daTagHinit_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagHinit_c*>(i_this)->create();
|
||||
daTagHinit_c* hInit = static_cast<daTagHinit_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return hInit->create();
|
||||
}
|
||||
|
||||
daTagHinit_c::~daTagHinit_c() {}
|
||||
|
||||
static int daTagHinit_Delete(daTagHinit_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagHinit_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,27 @@
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_horse.h"
|
||||
|
||||
class daTagHjump_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagHjump_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
f32 depth;
|
||||
f32 height;
|
||||
};
|
||||
|
||||
static char const l_arcName[] = "Hfence";
|
||||
|
||||
#if DEBUG
|
||||
daTagHjump_HIO_c l_HIO;
|
||||
|
||||
void daTagHjump_HIO_c::genMessage(JORMContext* ctx) {
|
||||
ctx->genSlider("高さ", &height, 0.0f, 500.0f);
|
||||
ctx->genSlider("奥行き", &depth, 0.0f, 1000.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
int daTagHjump_c::CreateHeap() {
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4);
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
||||
@@ -43,7 +62,7 @@ int daTagHjump_c::create() {
|
||||
|
||||
if (phase == cPhs_COMPLEATE_e) {
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
tevStr.room_no = fopAcM_GetRoomNo(this);
|
||||
tevStr.room_no = (int)fopAcM_GetRoomNo(this);
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||||
@@ -61,6 +80,11 @@ int daTagHjump_c::create() {
|
||||
fopAcM_SetMin(this, -scale.x, 0.0f, -50.0f);
|
||||
fopAcM_SetMax(this, scale.x, 200.0f, 50.0f);
|
||||
|
||||
#if DEBUG
|
||||
// "Horse jumping fence"
|
||||
l_HIO.entryHIO("馬ジャンプ柵");
|
||||
#endif
|
||||
|
||||
field_0x5ae = 0x2000;
|
||||
fopAcM_setCullSizeFar(this, 5.0f);
|
||||
field_0x5ad = 4;
|
||||
@@ -85,23 +109,41 @@ int daTagHjump_c::create() {
|
||||
return phase;
|
||||
}
|
||||
|
||||
daTagHjump_HIO_c::daTagHjump_HIO_c() {
|
||||
height = 350.0f;
|
||||
depth = 400.0f;
|
||||
}
|
||||
|
||||
static int daTagHjump_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagHjump_c*>(i_this)->create();
|
||||
daTagHjump_c* hJump = static_cast<daTagHjump_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return hJump->create();
|
||||
}
|
||||
|
||||
daTagHjump_c::~daTagHjump_c() {
|
||||
if (mType != TYPE_TRIGGER_e) {
|
||||
dComIfG_resDelete(&mPhase, l_arcName);
|
||||
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static int daTagHjump_Delete(daTagHjump_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->MoveBGDelete();
|
||||
i_this->~daTagHjump_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagHjump_c::execute() {
|
||||
#if DEBUG
|
||||
if (mType != 0) {
|
||||
scale.y = l_HIO.height;
|
||||
scale.z = l_HIO.depth;
|
||||
}
|
||||
#endif
|
||||
daHorse_c* horse_p = dComIfGp_getHorseActor();
|
||||
|
||||
if (horse_p != NULL &&
|
||||
|
||||
@@ -36,14 +36,16 @@ int daTag_Howl_c::draw() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 daTag_Howl_c::isAreaCheck() {
|
||||
bool daTag_Howl_c::isAreaCheck() {
|
||||
cXyz vec_to_player;
|
||||
|
||||
if (getSwitchBit() != 0xFF) {
|
||||
if (dComIfGs_isSaveSwitch(getSwitchBit())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
cXyz vec_to_player = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
vec_to_player = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
if (daPy_py_c::checkNowWolf()) {
|
||||
if (vec_to_player.absXZ() < scale.x && -scale.y < vec_to_player.y &&
|
||||
vec_to_player.y < scale.y)
|
||||
@@ -57,7 +59,7 @@ u8 daTag_Howl_c::isAreaCheck() {
|
||||
|
||||
int daTag_Howl_c::getParam() {
|
||||
mCurveID = fopAcM_GetParam(this) & 0xF;
|
||||
field_0x569 = fopAcM_GetParam(this) >> 0x1E;
|
||||
field_0x569 = (fopAcM_GetParam(this) & 0xC0000000) >> 30;
|
||||
scale.x *= 100.0f;
|
||||
scale.y *= 100.0f;
|
||||
scale.z *= 100.0f;
|
||||
@@ -65,7 +67,8 @@ int daTag_Howl_c::getParam() {
|
||||
}
|
||||
|
||||
u8 daTag_Howl_c::getSwitchBit() {
|
||||
return (fopAcM_GetParam(this) >> 4) & 0xFF;
|
||||
u8 param = (fopAcM_GetParam(this) & 0xFF0) >> 4;
|
||||
return param;
|
||||
}
|
||||
|
||||
static int daTag_Howl_Create(void* i_this) {
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_horse.h"
|
||||
#include "d/actor/d_a_tag_hstop.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_meter2_info.h"
|
||||
#include "d/d_s_play.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "d/actor/d_a_horse.h"
|
||||
|
||||
int daTagHstop_c::create() {
|
||||
fopAcM_ct(this, daTagHstop_c);
|
||||
@@ -42,16 +44,16 @@ int daTagHstop_c::create() {
|
||||
|
||||
if (mPrm1 == 2) {
|
||||
if (daPy_py_c::checkRoomRestartStart()) {
|
||||
if (!dComIfGs_isSwitch(0x8A, fopAcM_GetHomeRoomNo(this))) {
|
||||
dComIfGs_onSwitch(0x8A, fopAcM_GetHomeRoomNo(this));
|
||||
} else if (!dComIfGs_isSwitch(0x8B, fopAcM_GetHomeRoomNo(this))) {
|
||||
dComIfGs_onSwitch(0x8B, fopAcM_GetHomeRoomNo(this));
|
||||
} else if (!dComIfGs_isSwitch(0x8C, fopAcM_GetHomeRoomNo(this))) {
|
||||
dComIfGs_onSwitch(0x8C, fopAcM_GetHomeRoomNo(this));
|
||||
if (!fopAcM_isSwitch(this, 0x8A)) {
|
||||
fopAcM_onSwitch(this, 0x8A);
|
||||
} else if (!fopAcM_isSwitch(this, 0x8B)) {
|
||||
fopAcM_onSwitch(this, 0x8B);
|
||||
} else if (!fopAcM_isSwitch(this, 0x8C)) {
|
||||
fopAcM_onSwitch(this, 0x8C);
|
||||
}
|
||||
}
|
||||
|
||||
if (dComIfGs_isSwitch(0x8C, fopAcM_GetHomeRoomNo(this))) {
|
||||
if (fopAcM_isSwitch(this, 0x8C)) {
|
||||
field_0x574 = 0;
|
||||
} else {
|
||||
field_0x574 = 1200;
|
||||
@@ -64,7 +66,9 @@ int daTagHstop_c::create() {
|
||||
}
|
||||
|
||||
static int daTagHstop_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagHstop_c*>(i_this)->create();
|
||||
daTagHstop_c* hStop = static_cast<daTagHstop_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return hStop->create();
|
||||
}
|
||||
|
||||
daTagHstop_c::~daTagHstop_c() {
|
||||
@@ -82,14 +86,15 @@ daTagHstop_c::~daTagHstop_c() {
|
||||
}
|
||||
|
||||
static int daTagHstop_Delete(daTagHstop_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
static_cast<daTagHstop_c*>(i_this)->~daTagHstop_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
void daTagHstop_c::setActive() {
|
||||
if (mPrm0 == 0xFF || mPrm1 == 2 ||
|
||||
(mPrm1 == 0 && dComIfGs_isSwitch(mPrm0, fopAcM_GetHomeRoomNo(this))) ||
|
||||
(mPrm1 == 1 && !dComIfGs_isSwitch(mPrm0, fopAcM_GetHomeRoomNo(this))))
|
||||
(mPrm1 == 0 && fopAcM_isSwitch(this, mPrm0)) ||
|
||||
(mPrm1 == 1 && !fopAcM_isSwitch(this, mPrm0)))
|
||||
{
|
||||
mActive = true;
|
||||
} else {
|
||||
@@ -105,19 +110,18 @@ int daTagHstop_c::execute() {
|
||||
m_msgFlow.init(this, (u16)shape_angle.z, 0, NULL);
|
||||
field_0x573 = 3;
|
||||
} else if (m_msgFlow.doFlow(this, NULL, 0)) {
|
||||
dComIfGp_getEvent()->reset();
|
||||
dComIfGp_event_reset();
|
||||
field_0x573 = 0;
|
||||
|
||||
s16 arrow_num = dComIfGp_getItemMaxArrowNumCount();
|
||||
dComIfGp_setItemArrowNumCount(arrow_num);
|
||||
dComIfGs_onSwitch(0x8D, fopAcM_GetHomeRoomNo(this));
|
||||
dComIfGp_setItemArrowNumCount(dComIfGp_getItemMaxArrowNumCount());
|
||||
fopAcM_onSwitch(this, 0x8D);
|
||||
}
|
||||
} else {
|
||||
if (field_0x574 != 0) {
|
||||
if (dComIfGs_isSwitch(0x8F, fopAcM_GetHomeRoomNo(this))) {
|
||||
if (fopAcM_isSwitch(this, 0x8F)) {
|
||||
field_0x574 = 0;
|
||||
} else if (dComIfGp_getLinkPlayer()->checkSingleBoarBattleSecondBowReady()) {
|
||||
dComIfGs_onSwitch(0x8F, fopAcM_GetHomeRoomNo(this));
|
||||
} else if (daPy_getLinkPlayerActorClass()->checkSingleBoarBattleSecondBowReady()) {
|
||||
fopAcM_onSwitch(this, 0x8F);
|
||||
field_0x574 = 0;
|
||||
} else {
|
||||
field_0x574--;
|
||||
@@ -127,35 +131,35 @@ int daTagHstop_c::execute() {
|
||||
setActive();
|
||||
|
||||
if (field_0x573) {
|
||||
daHorse_c* horse_p = dComIfGp_getHorseActor();
|
||||
daHorse_c* horse_p = (daHorse_c*)dComIfGp_getHorseActor();
|
||||
|
||||
if (mPrm1 != 2 || dComIfGs_getArrowNum() != 0 || horse_p == NULL) {
|
||||
field_0x573 = 0;
|
||||
} else if (field_0x573 == 1) {
|
||||
if (dComIfGp_getHorseActor()->checkTurnStand() &&
|
||||
!dComIfGp_getHorseActor()->checkTurnStandCamera())
|
||||
if (horse_p->checkTurnStand() &&
|
||||
!horse_p->checkTurnStandCamera())
|
||||
{
|
||||
field_0x573 = 2;
|
||||
}
|
||||
} else if (field_0x573 == 2 && !dComIfGp_getHorseActor()->checkTurnStand()) {
|
||||
} else if (field_0x573 == 2 && !horse_p->checkTurnStand()) {
|
||||
fopAcM_orderSpeakEvent(this, 0, 0);
|
||||
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
||||
}
|
||||
} else if (mPrm1 == 2 && !dComIfGp_event_runCheck()) {
|
||||
if (dComIfGs_getArrowNum() == 0 && !dComIfGs_isSwitch(0x8D, fopAcM_GetHomeRoomNo(this)))
|
||||
if (dComIfGs_getArrowNum() == 0 && !fopAcM_isSwitch(this, 0x8D))
|
||||
{
|
||||
dComIfGs_onSwitch(0x8D, fopAcM_GetHomeRoomNo(this));
|
||||
fopAcM_onSwitch(this, 0x8D);
|
||||
dMeter2Info_setFloatingFlow(43, 90, true);
|
||||
|
||||
if (!dComIfGs_isSwitch(0x8F, fopAcM_GetHomeRoomNo(this))) {
|
||||
if (!fopAcM_isSwitch(this, 0x8F)) {
|
||||
field_0x574 = 1200;
|
||||
dComIfGs_offSwitch(0x8A, fopAcM_GetHomeRoomNo(this));
|
||||
dComIfGs_offSwitch(0x8B, fopAcM_GetHomeRoomNo(this));
|
||||
dComIfGs_offSwitch(0x8C, fopAcM_GetHomeRoomNo(this));
|
||||
fopAcM_offSwitch(this, 0x8A);
|
||||
fopAcM_offSwitch(this, 0x8B);
|
||||
fopAcM_offSwitch(this, 0x8C);
|
||||
}
|
||||
} else if (field_0x574 == 0 && !dComIfGs_isSwitch(0x8F, fopAcM_GetHomeRoomNo(this))) {
|
||||
dComIfGs_onSwitch(0x8F, fopAcM_GetHomeRoomNo(this));
|
||||
dComIfGs_onSwitch(0x8E, fopAcM_GetHomeRoomNo(this));
|
||||
} else if (field_0x574 == 0 && !fopAcM_isSwitch(this, 0x8F)) {
|
||||
fopAcM_onSwitch(this, 0x8F);
|
||||
fopAcM_onSwitch(this, 0x8E);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -167,7 +171,31 @@ static int daTagHstop_Execute(daTagHstop_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagHstop_Draw(daTagHstop_c*) {
|
||||
static int daTagHstop_Draw(daTagHstop_c* i_this) {
|
||||
#if DEBUG
|
||||
if (UREG_S(9) != 0) {
|
||||
cXyz sp08[8];
|
||||
sp08[0].set(-i_this->scale.x, i_this->scale.y, -i_this->scale.z);
|
||||
sp08[1].set(i_this->scale.x, sp08[0].y, sp08[0].z);
|
||||
sp08[2].set(sp08[0].x, sp08[0].y, i_this->scale.z);
|
||||
sp08[3].set(sp08[1].x, sp08[0].y, sp08[2].z);
|
||||
sp08[4].set(sp08[0].x, 0.0f, sp08[0].z);
|
||||
sp08[5].set(sp08[1].x, 0.0f, sp08[1].z);
|
||||
sp08[6].set(sp08[2].x, 0.0f, sp08[2].z);
|
||||
sp08[7].set(sp08[3].x, 0.0f, sp08[3].z);
|
||||
|
||||
mDoMtx_stack_c::transS(i_this->current.pos);
|
||||
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mDoMtx_stack_c::multVec(&sp08[i], &sp08[i]);
|
||||
}
|
||||
|
||||
static GXColor color = {0xff, 0, 0xff, 0x80};
|
||||
dDbVw_drawCube8pXlu(sp08, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,11 +9,13 @@
|
||||
#include "d/d_procname.h"
|
||||
|
||||
static int daTagInst_Create(fopAc_ac_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
fopAcM_ct(i_this, daTagInst_c);
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
static int daTagInst_Delete(daTagInst_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagInst_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_camera.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_msg_object.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_s_play.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "m_Do/m_Do_graphic.h"
|
||||
|
||||
@@ -28,7 +29,7 @@ int daTagKagoFall_c::create() {
|
||||
mExitID = 2;
|
||||
mStartPoint = 0;
|
||||
|
||||
mDoMtx_trans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||||
mDoMtx_inverse(mDoMtx_stack_c::get(), mMtx);
|
||||
|
||||
@@ -84,7 +85,7 @@ void daTagKagoFall_c::actionWaitRiver() {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
mNoCarryTimer = 150;
|
||||
mNoCarryTimer = 150 + nREG_S(5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +100,7 @@ void daTagKagoFall_c::actionWaitRiver() {
|
||||
mRestartPos = dCam_getBody()->Eye();
|
||||
mActionState = 1;
|
||||
mTimer = 30;
|
||||
player->onNoResetFlg0(daPy_py_c::FLG0_UNK_10000);
|
||||
player->onDemoStreamAccept();
|
||||
mRiverTimer = 60;
|
||||
}
|
||||
}
|
||||
@@ -111,7 +112,7 @@ void daTagKagoFall_c::actionWaitRiver() {
|
||||
}
|
||||
|
||||
if (mRiverTimer == 0) {
|
||||
Z2GetAudioMgr()->seStart(Z2SE_FORCE_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
mDoAud_seStart(Z2SE_FORCE_BACK, NULL, 0, 0);
|
||||
mDoGph_gInf_c::fadeOut(0.05f, static_cast<JUtility::TColor&>(g_blackColor));
|
||||
mRiverTimer = 20;
|
||||
mActionState = 2;
|
||||
@@ -122,7 +123,7 @@ void daTagKagoFall_c::actionWaitRiver() {
|
||||
|
||||
case 2:
|
||||
if (mRiverTimer == 0) {
|
||||
daPy_getPlayerActorClass()->offNoResetFlg0(daPy_py_c::FLG0_UNK_10000);
|
||||
daPy_getPlayerActorClass()->offDemoStreamAccept();
|
||||
mActionState = 3;
|
||||
mTimer = 40;
|
||||
}
|
||||
@@ -136,25 +137,21 @@ void daTagKagoFall_c::actionWaitRiver() {
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: {
|
||||
daPy_getPlayerActorClass()->offNoResetFlg0(daPy_py_c::FLG0_UNK_10000);
|
||||
case 4:
|
||||
daPy_getPlayerActorClass()->offDemoStreamAccept();
|
||||
|
||||
int msg = mMsgFlow.doFlow(this, NULL, 0);
|
||||
if (msg != 0) {
|
||||
if (mMsgFlow.doFlow(this, NULL, 0) != 0) {
|
||||
if (dMsgObject_getSelectCursorPos() != 0) {
|
||||
dStage_changeScene(mExitID, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
|
||||
} else {
|
||||
int room = dStage_roomControl_c::mStayNo;
|
||||
dComIfGp_setNextStage("F_SP112", mStartPoint, room, dComIfG_play_c::getLayerNo(0),
|
||||
0.0f, 10, 1, 0, 0, 1, 0);
|
||||
dComIfGp_setNextStage("F_SP112", mStartPoint, dComIfGp_roomControl_getStayNo(),
|
||||
dComIfG_play_c::getLayerNo(0), 0.0f, 10, 1, 0, 0, 1, 0);
|
||||
}
|
||||
mActionState = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 5:
|
||||
// Maybe contained some stripped out debug code?
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -179,7 +176,7 @@ void daTagKagoFall_c::actionWaitFall() {
|
||||
mActionState = 1;
|
||||
}
|
||||
} else {
|
||||
mNoCarryTimer = 150;
|
||||
mNoCarryTimer = 150 + nREG_S(5);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -188,9 +185,8 @@ void daTagKagoFall_c::actionWaitFall() {
|
||||
if (dComIfGs_getLife() == 0) {
|
||||
player->onSceneChangeAreaJump(mExitID, -1, NULL);
|
||||
|
||||
if (player->checkNoResetFlg2(daPy_py_c::FLG2_SCENE_CHANGE_START) && !mPlayedSceneChangeSfx)
|
||||
{
|
||||
Z2GetAudioMgr()->seStart(Z2SE_FORCE_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
if (player->checkSceneChangeAreaStart() && !mPlayedSceneChangeSfx) {
|
||||
mDoAud_seStart(Z2SE_FORCE_BACK, NULL, 0, 0);
|
||||
player->voiceStart(Z2SE_WL_V_FALL_TO_RESTART);
|
||||
mPlayedSceneChangeSfx = true;
|
||||
}
|
||||
@@ -202,7 +198,7 @@ void daTagKagoFall_c::actionWaitFall() {
|
||||
mDoGph_gInf_c::fadeOut(0.05f, static_cast<JUtility::TColor&>(g_blackColor));
|
||||
mTimer = 60;
|
||||
mActionState = 2;
|
||||
Z2GetAudioMgr()->seStart(Z2SE_FORCE_BACK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
mDoAud_seStart(Z2SE_FORCE_BACK, NULL, 0, 0);
|
||||
player->voiceStart(Z2SE_WL_V_FALL_TO_RESTART);
|
||||
}
|
||||
break;
|
||||
@@ -236,14 +232,12 @@ void daTagKagoFall_c::actionWaitFall() {
|
||||
|
||||
case 3: {
|
||||
player->setPlayerPosAndAngle(&mRestartPos, 0, 0);
|
||||
int msg = mMsgFlow.doFlow(this, NULL, 0);
|
||||
if (msg != 0) {
|
||||
if (mMsgFlow.doFlow(this, NULL, 0) != 0) {
|
||||
if (dMsgObject_getSelectCursorPos() != 0) {
|
||||
dStage_changeScene(mExitID, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
|
||||
} else {
|
||||
int room = dStage_roomControl_c::mStayNo;
|
||||
dComIfGp_setNextStage("F_SP112", mStartPoint, room, dComIfG_play_c::getLayerNo(0),
|
||||
0.0f, 10, 1, 0, 0, 1, 0);
|
||||
dComIfGp_setNextStage("F_SP112", mStartPoint, dComIfGp_roomControl_getStayNo(),
|
||||
dComIfG_play_c::getLayerNo(0), 0.0f, 10, 1, 0, 0, 1, 0);
|
||||
}
|
||||
mActionState = 10;
|
||||
}
|
||||
@@ -265,10 +259,12 @@ static int daTagKagoFall_Execute(daTagKagoFall_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagKagoFall_Delete(daTagKagoFall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagKagoFall_Create(daTagKagoFall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,21 +6,46 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_lantern.h"
|
||||
|
||||
#include "JSystem/JHostIO/JORFile.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
static TAG_LANTERN_HIO_CLASS l_HIO;
|
||||
|
||||
daTag_Lantern_HIOParam const daTag_Lantern_Param_c::m = {0};
|
||||
|
||||
#if DEBUG
|
||||
daTag_Lantern_HIO_c::daTag_Lantern_HIO_c() {
|
||||
m = daTag_Lantern_Param_c::m;
|
||||
}
|
||||
|
||||
void daTag_Lantern_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
|
||||
// NONMATCHING
|
||||
JORReflexible::listenPropertyEvent(event);
|
||||
JORFile file;
|
||||
switch ((int)event->id) {
|
||||
case 0x40000002:
|
||||
if (file.open(JORFile::EFlags_WRITE | JORFile::EFlags_UNK_0x4, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) {
|
||||
char sp138[0x7d0];
|
||||
memset(sp138, 0, sizeof(sp138));
|
||||
int msgLen = 0;
|
||||
sprintf(sp138 + msgLen, "%d, \t// デバグ情報ON\n", m.enable_debug_info);
|
||||
msgLen = strlen(sp138);
|
||||
file.writeData(sp138, msgLen);
|
||||
file.close();
|
||||
OS_REPORT("write append success!::%6d\n", msgLen);
|
||||
} else {
|
||||
OS_REPORT("write append failure!\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void daTag_Lantern_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// NONMATCHING
|
||||
// "Debug information ON"
|
||||
ctx->genCheckBox("デバグ情報ON ", &m.enable_debug_info, 1);
|
||||
// "Export file"
|
||||
ctx->genButton("ファイル書き出し", 0x40000002, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -39,6 +64,7 @@ int daTag_Lantern_c::create() {
|
||||
}
|
||||
|
||||
int daTag_Lantern_c::Delete() {
|
||||
fopAcM_RegisterDeleteID(this, "TAG_LANTERN");
|
||||
this->~daTag_Lantern_c();
|
||||
return 1;
|
||||
}
|
||||
@@ -80,12 +106,25 @@ int daTag_Lantern_c::Execute() {
|
||||
}
|
||||
|
||||
int daTag_Lantern_c::Draw() {
|
||||
#if DEBUG
|
||||
if (mpHIO->m.enable_debug_info) {
|
||||
dDbVw_drawCylinderXlu(current.pos, scale.x, scale.y,
|
||||
(GXColor){0x80, 0x80, 0x80, 0x80}, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void daTag_Lantern_c::initialize() {
|
||||
fopAcM_setCullSizeBox(this, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
|
||||
#if DEBUG
|
||||
mpHIO = &l_HIO;
|
||||
// "Lantern check tag"
|
||||
mpHIO->entryHIO("カンテラチェックタグ");
|
||||
#endif
|
||||
|
||||
if (home.angle.z != 0xFFFF) {
|
||||
mFlowIndex = home.angle.z;
|
||||
} else {
|
||||
|
||||
@@ -17,7 +17,7 @@ void daTagLightBall_c::setBaseMtx() {
|
||||
|
||||
int daTagLightBall_c::Create() {
|
||||
initBaseMtx();
|
||||
u8 swbit = getSwBit();
|
||||
u8 swbit = getSwbit();
|
||||
if (fopAcM_GetRoomNo(this) == 7) {
|
||||
if (!fopAcM_isSwitch(this, 70)) {
|
||||
fopAcM_offSwitch(this, swbit);
|
||||
@@ -56,7 +56,7 @@ int daTagLightBall_c::create() {
|
||||
}
|
||||
|
||||
int daTagLightBall_c::execute() {
|
||||
u8 swbit = getSwBit();
|
||||
u8 swbit = getSwbit();
|
||||
if (swbit != 0xFF) {
|
||||
if (getType() == 15) {
|
||||
if (field_0x57c && !fopAcM_isSwitch(this, swbit)) {
|
||||
@@ -102,11 +102,14 @@ static int daTagLightBall_Execute(daTagLightBall_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagLightBall_Delete(daTagLightBall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagLightBall_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagLightBall_c*>(i_this)->create();
|
||||
daTagLightBall_c* lightBall = static_cast<daTagLightBall_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return lightBall->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagLightBall_Method = {
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
int daTagLv2PrChk_c::Create() {
|
||||
mSwbit2 = getSwbit2();
|
||||
if (mSwbit2 == 0xFF) {
|
||||
// "Boomerang puzzle monitoring tag: switch 2 is not specified"
|
||||
OS_REPORT("\x1b[43;30mブーメランネタ監視タグ:スイッチ2の指定がありません\n\x1b[m");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,6 +23,9 @@ int daTagLv2PrChk_c::Create() {
|
||||
mAction = ACTION_CHECK_e;
|
||||
}
|
||||
|
||||
// "Boomerang puzzle monitoring tag: switch 1 <%d> switch 2 <%d>"
|
||||
OS_REPORT("ブーメランネタ監視タグ:スイッチ1<%d>スイッチ2<%d>\n", getSwbit(), getSwbit2());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -120,6 +125,8 @@ void daTagLv2PrChk_c::actionCheck() {
|
||||
case MODE_PUZZLE_CLEAR:
|
||||
fopAcM_onSwitch(this, getSwbit());
|
||||
mAction = ACTION_END_e;
|
||||
// "Boomerang puzzle monitoring tag: SW<%d> was turned on"
|
||||
OS_REPORT("ブーメランネタ監視タグ:SW<%d>オンしました\n", getSwbit());
|
||||
break;
|
||||
case MODE_CHECK_RESET:
|
||||
if (!switch_1 && !switch_2 && !switch_3 && !switch_4) {
|
||||
@@ -151,6 +158,8 @@ void daTagLv2PrChk_c::actionEnd() {}
|
||||
|
||||
void daTagLv2PrChk_c::seStartWrong() {
|
||||
Z2GetAudioMgr()->seStart(Z2SE_SYS_RESULT_WRONG, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||||
// "♪ Wrong answer!!!!"
|
||||
OS_REPORT("♪ハズレ!!!!\n");
|
||||
}
|
||||
|
||||
int daTagLv2PrChk_c::_delete() {
|
||||
@@ -162,10 +171,12 @@ static int daTagLv2PrChk_Execute(daTagLv2PrChk_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagLv2PrChk_Delete(daTagLv2PrChk_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagLv2PrChk_Create(daTagLv2PrChk_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ int daTag_Lv5Soup_c::Draw() {
|
||||
}
|
||||
|
||||
bool daTag_Lv5Soup_c::isAreaCheck() {
|
||||
cXyz dist = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
cXyz dist;
|
||||
dist = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
f32 boundX = scale.x * 100.0f;
|
||||
f32 boundY = scale.y * 100.0f;
|
||||
|
||||
|
||||
@@ -6,12 +6,23 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_lv6CstaSw.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
static daLv6CstaSw_HIO_c l_HIO;
|
||||
|
||||
daLv6CstaSw_HIO_c::daLv6CstaSw_HIO_c() {
|
||||
unk_0x4 = 0;
|
||||
show_range = 0;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
void daLv6CstaSw_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Display range"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daLv6CstaSw_c::setBaseMtx() {
|
||||
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);
|
||||
@@ -21,12 +32,19 @@ int daLv6CstaSw_c::create() {
|
||||
fopAcM_ct(this, daLv6CstaSw_c);
|
||||
mSwitch = getSw();
|
||||
setBaseMtx();
|
||||
|
||||
#if DEBUG
|
||||
l_HIO.entryHIO("石像SWタグ");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
fopAc_ac_c* daLv6CstaSw_c::searchSekizoAct(void* i_actor, void*) {
|
||||
if (i_actor != NULL && fopAcM_IsActor(i_actor) && fopAcM_GetProfName(i_actor) == PROC_CSTATUE) {
|
||||
return (fopAc_ac_c*)i_actor;
|
||||
fopAc_ac_c* daLv6CstaSw_c::searchSekizoAct(void* i_actor, void* param_1) {
|
||||
fopAc_ac_c* actor2 = (fopAc_ac_c*)param_1;
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)i_actor;
|
||||
if (actor != NULL && fopAcM_IsActor(actor) && fopAcM_GetProfName(actor) == PROC_CSTATUE) {
|
||||
return actor;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -41,7 +59,8 @@ bool daLv6CstaSw_c::areaCheck() {
|
||||
}
|
||||
|
||||
cXyz vec_to_actor = current.pos - sekizo_p->current.pos;
|
||||
if (vec_to_actor.absXZ() <= scale.x * 100.0f) {
|
||||
f32 dist_to_actor = vec_to_actor.absXZ();
|
||||
if (dist_to_actor <= scale.x * 100.0f) {
|
||||
in_area = true;
|
||||
}
|
||||
|
||||
@@ -49,7 +68,8 @@ bool daLv6CstaSw_c::areaCheck() {
|
||||
}
|
||||
|
||||
int daLv6CstaSw_c::Execute() {
|
||||
if (areaCheck() == true) {
|
||||
bool result = areaCheck();
|
||||
if (result == true) {
|
||||
if (!fopAcM_isSwitch(this, mSwitch)) {
|
||||
fopAcM_onSwitch(this, mSwitch);
|
||||
}
|
||||
@@ -63,10 +83,22 @@ int daLv6CstaSw_c::Execute() {
|
||||
}
|
||||
|
||||
int daLv6CstaSw_c::Draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
g_env_light.settingTevStruct(16, ¤t.pos, &tevStr);
|
||||
GXColor color = (GXColor){0, 0, 0xff, 0x80};
|
||||
dDbVw_drawCylinderXlu(current.pos, scale.x * 100.0f, scale.y * 100.0f, color, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daLv6CstaSw_c::Delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -79,17 +111,16 @@ static int daLv6CstaSw_Execute(daLv6CstaSw_c* i_this) {
|
||||
}
|
||||
|
||||
static int daLv6CstaSw_Delete(daLv6CstaSw_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->Delete();
|
||||
}
|
||||
|
||||
static int daLv6CstaSw_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daLv6CstaSw_c*>(i_this)->create();
|
||||
daLv6CstaSw_c* cStaSw = static_cast<daLv6CstaSw_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return cStaSw->create();
|
||||
}
|
||||
|
||||
daLv6CstaSw_HIO_c::~daLv6CstaSw_HIO_c() {}
|
||||
|
||||
static daLv6CstaSw_HIO_c l_HIO;
|
||||
|
||||
static actor_method_class l_daLv6CstaSw_Method = {
|
||||
(process_method_func)daLv6CstaSw_Create, (process_method_func)daLv6CstaSw_Delete,
|
||||
(process_method_func)daLv6CstaSw_Execute, (process_method_func)NULL,
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
int daTagMagne_c::Create() {
|
||||
if (mTagMagne != NULL) {
|
||||
// "Multiple magnet cord(?) management tags are placed!"
|
||||
OS_REPORT_ERROR("マグネコード管理タグが複数置かれています!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24,7 +26,7 @@ int daTagMagne_c::Create() {
|
||||
int daTagMagne_c::create() {
|
||||
fopAcM_ct(this, daTagMagne_c);
|
||||
|
||||
if (mTagMagne != NULL && mTagMagne->current.roomNo != current.roomNo) {
|
||||
if (mTagMagne != NULL && fopAcM_GetRoomNo(mTagMagne) != fopAcM_GetRoomNo(this)) {
|
||||
return cPhs_INIT_e;
|
||||
}
|
||||
|
||||
@@ -32,6 +34,8 @@ int daTagMagne_c::create() {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
OS_REPORT("TAG MAGNE PARAM=%x\n", fopAcM_GetParam(this));
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
@@ -41,11 +45,14 @@ int daTagMagne_c::_delete() {
|
||||
}
|
||||
|
||||
static void daTagMagne_Delete(daTagMagne_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->_delete();
|
||||
}
|
||||
|
||||
static void daTagMagne_Create(fopAc_ac_c* i_this) {
|
||||
((daTagMagne_c*)i_this)->create();
|
||||
daTagMagne_c* magne = static_cast<daTagMagne_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
magne->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagMagne_Method = {
|
||||
|
||||
@@ -64,12 +64,15 @@ int daTagMhint_c::create() {
|
||||
}
|
||||
|
||||
static int daTagMhint_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMhint_c*>(i_this)->create();
|
||||
daTagMhint_c* mhint = static_cast<daTagMhint_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return mhint->create();
|
||||
}
|
||||
|
||||
daTagMhint_c::~daTagMhint_c() {}
|
||||
|
||||
static int daTagMhint_Delete(daTagMhint_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagMhint_c();
|
||||
return 1;
|
||||
}
|
||||
@@ -132,13 +135,14 @@ int daTagMhint_c::execute() {
|
||||
} else if (eventInfo.checkCommandTalk()) {
|
||||
if (!midna_p->checkShadowModeTalkWait()) {
|
||||
if (field_0x56e == 0) {
|
||||
mMsgFlow.init(this, shape_angle.z & 0xFFFF, 0, NULL);
|
||||
mMsgFlow.init(this, (u16)shape_angle.z, 0, NULL);
|
||||
field_0x56e = 1;
|
||||
mDoAud_seStart(Z2SE_NAVI_TALK_START, NULL, 0, 0);
|
||||
field_0x571 = 0;
|
||||
} else if (mMsgFlow.doFlow(this, NULL, 0)) {
|
||||
int sp28;
|
||||
if (mMsgFlow.getEventId(&sp28) == 7) {
|
||||
u16 eventId = mMsgFlow.getEventId(&sp28);
|
||||
if (eventId == 7) {
|
||||
dMeter2Info_setPauseStatus(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,14 +7,37 @@
|
||||
|
||||
#include "d/actor/d_a_tag_mist.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
void daTagMist_c::offSw() {
|
||||
u8 sw_no_num;
|
||||
u8 top_sw_no;
|
||||
class daTagMist_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagMist_HIO_c();
|
||||
|
||||
top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
sw_no_num = daTagMist_prm::getSwNoNum(this);
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
u8 show_range;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagMist_HIO_c l_HIO;
|
||||
|
||||
daTagMist_HIO_c::daTagMist_HIO_c() {
|
||||
show_range = 0;
|
||||
}
|
||||
|
||||
void daTagMist_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Fog range tag"
|
||||
ctx->genLabel("霧の範囲タグ", 0);
|
||||
// "Show range"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagMist_c::offSw() {
|
||||
u8 top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
u8 my_sw_no = daTagMist_prm::getMySwNo(this);
|
||||
u8 sw_no_num = daTagMist_prm::getSwNoNum(this);
|
||||
|
||||
for (int i = 0; i < sw_no_num; i++) {
|
||||
fopAcM_offSwitch(this, top_sw_no + i);
|
||||
@@ -22,11 +45,8 @@ void daTagMist_c::offSw() {
|
||||
}
|
||||
|
||||
void daTagMist_c::onMySw() {
|
||||
u32 my_sw_no;
|
||||
u32 top_sw_no;
|
||||
|
||||
top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
my_sw_no = daTagMist_prm::getMySwNo(this);
|
||||
u8 top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
u8 my_sw_no = daTagMist_prm::getMySwNo(this);
|
||||
|
||||
if (my_sw_no != 0xFF) {
|
||||
fopAcM_onSwitch(this, top_sw_no + my_sw_no);
|
||||
@@ -34,11 +54,8 @@ void daTagMist_c::onMySw() {
|
||||
}
|
||||
|
||||
BOOL daTagMist_c::isMySw() {
|
||||
u32 my_sw_no;
|
||||
u32 top_sw_no;
|
||||
|
||||
top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
my_sw_no = daTagMist_prm::getMySwNo(this);
|
||||
u8 top_sw_no = daTagMist_prm::getTopSwNo(this);
|
||||
u8 my_sw_no = daTagMist_prm::getMySwNo(this);
|
||||
|
||||
if (my_sw_no != 0xFF && fopAcM_isSwitch(this, top_sw_no + my_sw_no)) {
|
||||
return TRUE;
|
||||
@@ -60,10 +77,7 @@ int daTagMist_c::Create() {
|
||||
mVertices[3].x = scale.x * -50.0f;
|
||||
mVertices[3].z = scale.z * 50.0f;
|
||||
|
||||
mVertices[3].y = 0.0f;
|
||||
mVertices[2].y = 0.0f;
|
||||
mVertices[1].y = 0.0f;
|
||||
mVertices[0].y = 0.0f;
|
||||
mVertices[0].y = mVertices[1].y = mVertices[2].y = mVertices[3].y = 0.0f;
|
||||
|
||||
if (isMySw()) {
|
||||
setPlayerNo(daTagMist_prm::getExitNo(this));
|
||||
@@ -82,23 +96,26 @@ int daTagMist_c::create() {
|
||||
field_0x5a2 = home.angle.x;
|
||||
field_0x5a4 = home.angle.z;
|
||||
|
||||
home.angle.z = 0;
|
||||
home.angle.x = 0;
|
||||
current.angle.z = 0;
|
||||
current.angle.x = 0;
|
||||
shape_angle.z = 0;
|
||||
shape_angle.x = 0;
|
||||
home.angle.x = home.angle.z = 0;
|
||||
current.angle.x = current.angle.z = 0;
|
||||
shape_angle.x = shape_angle.z = 0;
|
||||
}
|
||||
|
||||
if (!Create()) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
// "Fog range tag"
|
||||
l_HIO.entryHIO("霧の範囲タグ");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daTagMist_c::execute() {
|
||||
if (fopAcM_isSwitch(this, daTagMist_prm::getSwNo2(this))) {
|
||||
u8 sw_no_2 = daTagMist_prm::getSwNo2(this);
|
||||
if (fopAcM_isSwitch(this, sw_no_2)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -109,33 +126,76 @@ int daTagMist_c::execute() {
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&player_dist, &player_dist);
|
||||
|
||||
u8 player_inside = (mVertices[0].x < player_dist.x && mVertices[0].z < player_dist.z) &&
|
||||
(mVertices[2].x > player_dist.x && mVertices[2].z > player_dist.z);
|
||||
u8 player_inside = mVertices[0].x < player_dist.x && mVertices[0].z < player_dist.z &&
|
||||
mVertices[2].x > player_dist.x && mVertices[2].z > player_dist.z;
|
||||
|
||||
if (player_inside && !mPlayerTouched) {
|
||||
offSw();
|
||||
onMySw();
|
||||
mPlayerNo = daTagMist_prm::getExitNo(this);
|
||||
setPlayerNo(daTagMist_prm::getExitNo(this));
|
||||
}
|
||||
|
||||
mPlayerTouched = player_inside;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagMist_c::_delete() {
|
||||
int daTagMist_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
GXColor color = {0, 0, 0x80, 0x80};
|
||||
cXyz sp10[8];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
|
||||
sp10[0] = mVertices[0];
|
||||
sp10[1] = mVertices[1];
|
||||
sp10[2] = mVertices[3];
|
||||
sp10[3] = mVertices[2];
|
||||
sp10[4] = mVertices[0];
|
||||
sp10[5] = mVertices[1];
|
||||
sp10[6] = mVertices[3];
|
||||
sp10[7] = mVertices[2];
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mDoMtx_stack_c::multVec(&sp10[i], &sp10[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
sp10[i].y += 1000.0f;
|
||||
}
|
||||
|
||||
dDbVw_drawCube8pXlu(sp10, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagMist_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagMist_Draw(daTagMist_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagMist_Execute(daTagMist_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagMist_Delete(daTagMist_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagMist_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMist_c*>(i_this)->create();
|
||||
daTagMist_c* mist = static_cast<daTagMist_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return mist->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagMist_Method = {
|
||||
@@ -143,7 +203,11 @@ static actor_method_class l_daTagMist_Method = {
|
||||
(process_method_func)daTagMist_Delete,
|
||||
(process_method_func)daTagMist_Execute,
|
||||
(process_method_func)NULL,
|
||||
#if DEBUG
|
||||
(process_method_func)daTagMist_Draw,
|
||||
#else
|
||||
(process_method_func)NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_Tag_Mist = {
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
int daTagMmsg_c::create() {
|
||||
fopAcM_ct(this, daTagMmsg_c);
|
||||
|
||||
field_0x570 = fpcM_GetParam(this) & 0x3FF;
|
||||
field_0x572 = (fpcM_GetParam(this) >> 10) & 0x3FF;
|
||||
field_0x56b = (fpcM_GetParam(this) >> 29) & 1;
|
||||
field_0x570 = fopAcM_GetParam(this) & 0x3FF;
|
||||
field_0x572 = (fopAcM_GetParam(this) >> 10) & 0x3FF;
|
||||
field_0x56b = (fopAcM_GetParam(this) >> 29) & 0x1;
|
||||
field_0x568 = shape_angle.x;
|
||||
field_0x569 = (shape_angle.x >> 8) & 0xFF;
|
||||
|
||||
if ((fpcM_GetParam(this) >> 30) & 1) {
|
||||
if ((fopAcM_GetParam(this) >> 30) & 0x1) {
|
||||
scale.x *= 10.0f;
|
||||
scale.y *= 10.0f;
|
||||
}
|
||||
@@ -24,10 +24,9 @@ int daTagMmsg_c::create() {
|
||||
mAttention = shape_angle.y;
|
||||
|
||||
if (!checkNoAttention()) {
|
||||
s32 roomNo = fopAcM_GetRoomNo(this);
|
||||
stage_arrow_data_class* arrowData =
|
||||
&dComIfGp_getRoomArrow(roomNo)
|
||||
->m_entries[dComIfGp_getRoomCamera(roomNo)->m_entries[mAttention].m_arrow_idx];
|
||||
&dComIfGp_getRoomArrow(fopAcM_GetRoomNo(this))
|
||||
->m_entries[dComIfGp_getRoomCamera(fopAcM_GetRoomNo(this))->m_entries[mAttention].m_arrow_idx];
|
||||
eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ);
|
||||
attention_info.position = eyePos;
|
||||
}
|
||||
@@ -37,18 +36,22 @@ int daTagMmsg_c::create() {
|
||||
}
|
||||
|
||||
static int daTagMmsg_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMmsg_c*>(i_this)->create();
|
||||
daTagMmsg_c* mmsg = static_cast<daTagMmsg_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return mmsg->create();
|
||||
}
|
||||
|
||||
daTagMmsg_c::~daTagMmsg_c() {}
|
||||
|
||||
static int daTagMmsg_Delete(daTagMmsg_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagMmsg_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagMmsg_c::execute() {
|
||||
if (daPy_py_c::getMidnaActor() == NULL) {
|
||||
daMidna_c* midna = daPy_py_c::getMidnaActor();
|
||||
if (midna == NULL) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -57,13 +60,13 @@ int daTagMmsg_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (field_0x569 != 0xFF && dComIfGs_isSwitch(field_0x569, fopAcM_GetHomeRoomNo(this))) {
|
||||
if (field_0x569 != 0xFF && fopAcM_isSwitch(this, field_0x569)) {
|
||||
fopAcM_delete(this);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mUseFlg && !dComIfGp_event_runCheck() && field_0x56b && field_0x569 != 0xFF) {
|
||||
dComIfGs_onSwitch(field_0x569, fopAcM_GetHomeRoomNo(this));
|
||||
fopAcM_onSwitch(this, field_0x569);
|
||||
fopAcM_delete(this);
|
||||
return 1;
|
||||
}
|
||||
@@ -73,7 +76,7 @@ int daTagMmsg_c::execute() {
|
||||
(fopAcM_searchPlayerDistanceXZ2(this) < field_0x574) &&
|
||||
(field_0x570 == 0x3FF ||
|
||||
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[field_0x570])) &&
|
||||
(field_0x568 == 0xFF || dComIfGs_isSwitch(field_0x568, fopAcM_GetHomeRoomNo(this))))
|
||||
(field_0x568 == 0xFF || fopAcM_isSwitch(this, field_0x568)))
|
||||
{
|
||||
player->setMidnaMsgNum(this, shape_angle.z);
|
||||
}
|
||||
|
||||
+52
-15
@@ -5,12 +5,14 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_msg.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_tag_msg.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
|
||||
static int createHeapCallBack(fopAc_ac_c* i_this) {
|
||||
return ((daTag_Msg_c*)i_this)->createHeap();
|
||||
daTag_Msg_c* msg = (daTag_Msg_c*)i_this;
|
||||
return msg->createHeap();
|
||||
}
|
||||
|
||||
static char* l_resName = "TagMsg";
|
||||
@@ -20,8 +22,20 @@ static char* l_evtNameTBL[2] = {
|
||||
"SPEAK",
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTag_Msg_HIO_c::daTag_Msg_HIO_c() {
|
||||
m = daTag_Msg_Param_c::m;
|
||||
}
|
||||
#endif
|
||||
|
||||
daTag_Msg_c::~daTag_Msg_c() {
|
||||
dComIfG_resDelete(&mPhase, getResName());
|
||||
|
||||
#if DEBUG
|
||||
if (mpHIO != NULL) {
|
||||
mDoHIO_deleteChild(mpHIO->mChild);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int daTag_Msg_c::create() {
|
||||
@@ -38,14 +52,18 @@ int daTag_Msg_c::create() {
|
||||
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x10)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
mpHIO->mChild = mDoHIO_createChild("メッセ-ジタグ", mpHIO);
|
||||
#endif
|
||||
}
|
||||
|
||||
return phase_state;
|
||||
}
|
||||
|
||||
int daTag_Msg_c::createHeap() {
|
||||
mParam = new daTag_Msg_Param_c();
|
||||
if (mParam == NULL) {
|
||||
mpHIO = new TAG_MSG_HIO_CLASS();
|
||||
if (mpHIO == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -53,6 +71,7 @@ int daTag_Msg_c::createHeap() {
|
||||
}
|
||||
|
||||
int daTag_Msg_c::destroy() {
|
||||
int id = fopAcM_GetID(this);
|
||||
this->~daTag_Msg_c();
|
||||
return 1;
|
||||
}
|
||||
@@ -128,6 +147,14 @@ int daTag_Msg_c::execute() {
|
||||
}
|
||||
|
||||
int daTag_Msg_c::draw() {
|
||||
#if DEBUG
|
||||
if (mpHIO->m.mDebugAdjustON) {
|
||||
cXyz sp0C(current.pos);
|
||||
sp0C.y -= scale.y;
|
||||
dDbVw_drawCylinderXlu(sp0C, scale.x, 2.0f * scale.y, (GXColor){0x80, 0x80, 0x80, 0x80}, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -159,15 +186,15 @@ BOOL daTag_Msg_c::otherCheck() {
|
||||
|
||||
if (field_0x5dd) {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
s16 var_r28 = fopAcM_searchActorAngleY(this, daPy_getPlayerActorClass()) + 0x7FFF;
|
||||
s16 angle_to_player = var_r28 - daPy_getPlayerActorClass()->current.angle.y;
|
||||
if (angle_to_player < 0) {
|
||||
angle_to_player = -angle_to_player;
|
||||
}
|
||||
|
||||
s16 var_r28 = fopAcM_searchActorAngleY(this, daPy_getPlayerActorClass()) + 0x7FFF;
|
||||
s16 angle_to_player = var_r28 - daPy_getPlayerActorClass()->current.angle.y;
|
||||
if (angle_to_player < 0) {
|
||||
angle_to_player = -angle_to_player;
|
||||
return angle_to_player <= 0x1000;
|
||||
}
|
||||
|
||||
return angle_to_player <= 0x1000;
|
||||
}
|
||||
|
||||
char* daTag_Msg_c::getResName() {
|
||||
@@ -176,14 +203,15 @@ char* daTag_Msg_c::getResName() {
|
||||
|
||||
void daTag_Msg_c::getParam() {
|
||||
mOnSwitch = home.angle.x & 0xFF;
|
||||
mOffSwitch = (home.angle.x >> 8) & 0xFF;
|
||||
mOffSwitch = (home.angle.x & 0xFF00) >> 8;
|
||||
mOnSaveLabel = fopAcM_GetParam(this) & 0xFFF;
|
||||
mOffSaveLabel = (fopAcM_GetParam(this) >> 0xC) & 0xFFF;
|
||||
mOffSaveLabel = (fopAcM_GetParam(this) & 0xFFF000) >> 12;
|
||||
field_0x5dc = (fopAcM_GetParam(this) & 0x1000000) != 0;
|
||||
field_0x5dd = (fopAcM_GetParam(this) & 0x2000000) != 0;
|
||||
|
||||
if ((home.angle.z & 0xFFFF) != 0) {
|
||||
mFlowID = home.angle.z & 0xFFFF;
|
||||
u16 var_r30 = (u16)home.angle.z;
|
||||
if (var_r30 != 0) {
|
||||
mFlowID = var_r30;
|
||||
} else {
|
||||
mFlowID = -1;
|
||||
}
|
||||
@@ -227,6 +255,15 @@ static int daTag_Msg_IsDelete(void* i_this) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
daTag_Msg_HIO_c::~daTag_Msg_HIO_c() {
|
||||
}
|
||||
|
||||
void daTag_Msg_HIO_c::genMessage(JORMContext* ctx) {
|
||||
ctx->genCheckBox("デバグ描画ON ", &m.mDebugAdjustON, 1, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
}
|
||||
#endif
|
||||
|
||||
void dummyString() {
|
||||
DEAD_STRING("Timer");
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
int daTagMstop_c::create() {
|
||||
fopAcM_ct(this, daTagMstop_c);
|
||||
|
||||
field_0x56b = fopAcM_GetParam(this) >> 16;
|
||||
field_0x56b = (fopAcM_GetParam(this) >> 16) & 0xFF;
|
||||
field_0x56a = (fopAcM_GetParam(this) >> 24) & 0xF;
|
||||
|
||||
if (field_0x56a == 1 || field_0x56a == 2) {
|
||||
@@ -40,23 +40,17 @@ int daTagMstop_c::create() {
|
||||
field_0x572 = 0xFFFF;
|
||||
}
|
||||
|
||||
f32 tmp = scale.x;
|
||||
tmp *= 10000.0f * scale.x;
|
||||
|
||||
field_0x5c0 = tmp;
|
||||
field_0x5c0 = scale.x * (scale.x * 10000.0f);
|
||||
field_0x5c4 = current.pos.y + scale.y * 100.0f;
|
||||
|
||||
u16 param = fopAcM_GetParam(this);
|
||||
csXyz pos_angle;
|
||||
|
||||
daNpcF_getPlayerInfoFromPlayerList(fopAcM_GetParam(this) & 0xFFFF, fopAcM_GetRoomNo(this),
|
||||
field_0x5c8, pos_angle);
|
||||
|
||||
u8 idx = field_0x56b;
|
||||
daNpcF_getPlayerInfoFromPlayerList(param, fopAcM_GetRoomNo(this), field_0x5c8, pos_angle);
|
||||
|
||||
if (!checkNoAttention()) {
|
||||
s32 room = fopAcM_GetRoomNo(this);
|
||||
stage_arrow_data_class* arrowData = &dComIfGp_getRoomArrow(room)
|
||||
->m_entries[dComIfGp_getRoomCamera(room)->m_entries[idx].m_arrow_idx];
|
||||
stage_arrow_data_class* arrowData = &dComIfGp_getRoomArrow(fopAcM_GetRoomNo(this))->
|
||||
m_entries[dComIfGp_getRoomCamera(fopAcM_GetRoomNo(this))->
|
||||
m_entries[field_0x56b].m_arrow_idx];
|
||||
|
||||
eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ);
|
||||
attention_info.position = eyePos;
|
||||
@@ -67,12 +61,15 @@ int daTagMstop_c::create() {
|
||||
}
|
||||
|
||||
static int daTagMstop_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMstop_c*>(i_this)->create();
|
||||
daTagMstop_c* mstop = static_cast<daTagMstop_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return mstop->create();
|
||||
}
|
||||
|
||||
daTagMstop_c::~daTagMstop_c() {}
|
||||
|
||||
static int daTagMstop_Delete(daTagMstop_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagMstop_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
int daTagMwait_c::create() {
|
||||
fopAcM_ct(this, daTagMwait_c);
|
||||
|
||||
mEnterSw = fopAcM_GetParam(this) >> 8;
|
||||
mEnterSw = (fopAcM_GetParam(this) >> 8) & 0xFF;
|
||||
|
||||
if (fopAcM_isSwitch(this, mEnterSw)) {
|
||||
return cPhs_ERROR_e;
|
||||
@@ -39,12 +39,12 @@ int daTagMwait_c::create() {
|
||||
|
||||
scale *= 100.0f;
|
||||
|
||||
u32 wait_y_offset = (fopAcM_GetParam(this) >> 0x18) & 0xFF;
|
||||
if (wait_y_offset == 0 || wait_y_offset == 0xFF) {
|
||||
wait_y_offset = 0;
|
||||
prm = (fopAcM_GetParam(this) >> 0x18) & 0xFF; // wait Y offset
|
||||
if (prm == 0 || prm == 0xFF) {
|
||||
prm = 0;
|
||||
}
|
||||
|
||||
mWaitPosition.set(current.pos.x, current.pos.y + (wait_y_offset * 10.0f), current.pos.z);
|
||||
mWaitPosition.set(current.pos.x, current.pos.y + (prm * 10.0f), current.pos.z);
|
||||
attention_info.position.set(mWaitPosition.x, mWaitPosition.y + 220.0f, mWaitPosition.z);
|
||||
eyePos.set(mWaitPosition.x, mWaitPosition.y + 150.0f, mWaitPosition.z);
|
||||
|
||||
@@ -54,12 +54,15 @@ int daTagMwait_c::create() {
|
||||
}
|
||||
|
||||
static int daTagMwait_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMwait_c*>(i_this)->create();
|
||||
daTagMwait_c* mWait = static_cast<daTagMwait_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return mWait->create();
|
||||
}
|
||||
|
||||
daTagMwait_c::~daTagMwait_c() {}
|
||||
|
||||
static int daTagMwait_Delete(daTagMwait_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagMwait_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_tag_myna2.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
@@ -17,27 +18,25 @@ s32 daTagMyna2_c::create() {
|
||||
}
|
||||
|
||||
s32 daTagMyna2_c::execute() {
|
||||
if (!dComIfGp_event_runCheck()) {
|
||||
if (!dComIfGs_isSwitch(mSwitchNo,fopAcM_GetRoomNo(this))) {
|
||||
if ((dComIfGp_getPlayer(0)->current.pos - current.pos).absXZ() < getExtent()) {
|
||||
s16 angle_y = (s16)fopAcM_searchPlayerAngleY(this);
|
||||
csXyz actor_angle(0x1e,angle_y,0);
|
||||
cXyz actor_pos = current.pos;
|
||||
actor_pos.y += 1000.0f;
|
||||
if (!dComIfGp_event_runCheck() &&
|
||||
!dComIfGs_isSwitch(mSwitchNo,fopAcM_GetRoomNo(this)) &&
|
||||
(daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() < getExtent()) {
|
||||
csXyz actor_angle(30, (s16)fopAcM_searchPlayerAngleY(this), 0);
|
||||
cXyz actor_pos = current.pos;
|
||||
actor_pos.y += 1000.0f;
|
||||
|
||||
if (fopAcM_gc_c::gndCheck(&actor_pos) != 0) {
|
||||
actor_pos.y = fopAcM_gc_c::getGroundY();
|
||||
} else {
|
||||
actor_pos = current.pos;
|
||||
}
|
||||
if (fopAcM_gc_c::gndCheck(&actor_pos) != 0) {
|
||||
actor_pos.y = fopAcM_gc_c::getGroundY();
|
||||
} else {
|
||||
actor_pos = current.pos;
|
||||
}
|
||||
|
||||
if (mTimer == 0) {
|
||||
s32 actor_create = fopAcM_create(PROC_MYNA2, (mSwitchNo << 8 | 0xffff0001), &actor_pos, fopAcM_GetRoomNo(this), &actor_angle, 0, 0xffffffff);
|
||||
|
||||
if (actor_create != 0xFFFFFFFF) {
|
||||
dComIfGs_onSwitch(mSwitchNo,fopAcM_GetRoomNo(this));
|
||||
}
|
||||
}
|
||||
u32 var_r29 = 0xffff0001;
|
||||
if (mTimer == 0) {
|
||||
if (fopAcM_create(PROC_MYNA2, var_r29 | mSwitchNo << 8, &actor_pos,
|
||||
fopAcM_GetRoomNo(this), &actor_angle, 0, -1)
|
||||
!= fpcM_ERROR_PROCESS_ID_e) {
|
||||
dComIfGs_onSwitch(mSwitchNo,fopAcM_GetRoomNo(this));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,7 +51,9 @@ s32 daTagMyna2_c::execute() {
|
||||
}
|
||||
|
||||
static s32 daTagMyna2_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagMyna2_c*>(i_this)->create();
|
||||
daTagMyna2_c* myna2 = static_cast<daTagMyna2_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return myna2->create();
|
||||
}
|
||||
|
||||
static s32 daTagMyna2_Execute(daTagMyna2_c* i_this) {
|
||||
@@ -60,6 +61,7 @@ static s32 daTagMyna2_Execute(daTagMyna2_c* i_this) {
|
||||
}
|
||||
|
||||
static s32 daTagMyna2_Delete(daTagMyna2_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagMyna2_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -25,18 +25,15 @@ int daTag_MynaLight_c::Delete() {
|
||||
}
|
||||
|
||||
int daTag_MynaLight_c::Execute() {
|
||||
u8 uVar1 = (int)(dComIfGs_getTime() * 0.06666667f) & 0xFF;
|
||||
u8 turn_on_time = getTurnOnTime() & 0xFF;
|
||||
u8 turn_off_time = getTurnOffTime() & 0xFF;
|
||||
|
||||
if (turn_off_time > turn_on_time) {
|
||||
if (uVar1 >= (getTurnOnTime() & 0xFF) && uVar1 < (getTurnOffTime() & 0xFF)) {
|
||||
u8 var_r30 = (int)(dComIfGs_getTime() * 0.06666667f);
|
||||
if (getTurnOffTime() > getTurnOnTime()) {
|
||||
if (var_r30 >= getTurnOnTime() && var_r30 < getTurnOffTime()) {
|
||||
field_0x578 = true;
|
||||
} else {
|
||||
field_0x578 = false;
|
||||
}
|
||||
} else {
|
||||
if (uVar1 >= (getTurnOffTime() & 0xFF) && uVar1 < (getTurnOnTime() & 0xFF)) {
|
||||
if (var_r30 >= getTurnOffTime() && var_r30 < getTurnOnTime()) {
|
||||
field_0x578 = false;
|
||||
} else {
|
||||
field_0x578 = true;
|
||||
@@ -45,10 +42,10 @@ int daTag_MynaLight_c::Execute() {
|
||||
|
||||
if (mTurnOnFlag) {
|
||||
if (dComIfGp_roomControl_getStayNo() != 0) {
|
||||
mDoAud_seStartLevel(Z2SE_OBJ_MYNA_LIGHT_BURNING, (Vec*)¤t.pos, 0,
|
||||
dComIfGp_getReverb(dComIfGp_roomControl_getStayNo()));
|
||||
mDoAud_seStartLevel(Z2SE_OBJ_MYNA_LIGHT_BURNING, ¤t.pos, 0,
|
||||
dComIfGp_getReverb(dComIfGp_roomControl_getStayNo()));
|
||||
} else {
|
||||
mDoAud_seStartLevel(Z2SE_OBJ_MYNA_LIGHT_BURNING, (Vec*)¤t.pos, 0, 0);
|
||||
mDoAud_seStartLevel(Z2SE_OBJ_MYNA_LIGHT_BURNING, ¤t.pos, 0, 0);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
@@ -110,12 +107,14 @@ bool daTag_MynaLight_c::setTurnOnOffChange() {
|
||||
return mTurnOnFlag;
|
||||
}
|
||||
|
||||
u32 daTag_MynaLight_c::getTurnOnTime() {
|
||||
return fopAcM_GetParamBit(this, 0, 5);
|
||||
u8 daTag_MynaLight_c::getTurnOnTime() {
|
||||
u8 param = fopAcM_GetParam(this) & 0x1F;
|
||||
return param;
|
||||
}
|
||||
|
||||
u32 daTag_MynaLight_c::getTurnOffTime() {
|
||||
return fopAcM_GetParamBit(this, 5, 5);
|
||||
u8 daTag_MynaLight_c::getTurnOffTime() {
|
||||
u8 param = (fopAcM_GetParam(this) & 0x3E0) >> 5;
|
||||
return param;
|
||||
}
|
||||
|
||||
void daTag_MynaLight_c::initialize() {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "d/actor/d_a_tag_pachi.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
daTagPati_c::~daTagPati_c() {}
|
||||
|
||||
@@ -24,6 +25,7 @@ static dCcD_SrcCyl const l_sph_src = {
|
||||
|
||||
int daTagPati_c::create() {
|
||||
fopAcM_ct(this, daTagPati_c);
|
||||
OS_REPORT("-------------- TAG YAMI CREATE!!\n");
|
||||
field_0x6E0 = get_prm();
|
||||
mStts.Init(0xFF, 0xFF, this);
|
||||
mCyl.Set(l_sph_src);
|
||||
@@ -39,25 +41,41 @@ int daTagPati_c::Execute() {
|
||||
}
|
||||
|
||||
void daTagPati_c::col_set() {
|
||||
mCyl.SetR(1350.f);
|
||||
f32 var_f31 = 1350.f;
|
||||
if (field_0x6E0 == 0 || field_0x6E0 == 1) {
|
||||
var_f31 += tREG_F(18);
|
||||
} else if (field_0x6E0 == 2 || field_0x6E0 == 3) {
|
||||
var_f31 += tREG_F(19);
|
||||
}
|
||||
mCyl.SetR(var_f31);
|
||||
mCyl.SetH(300000.0f);
|
||||
mCyl.SetC(home.pos);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
}
|
||||
|
||||
u32 daTagPati_c::chk_CoHit() {
|
||||
return mCyl.ChkCoHit() ? 1 : 0;
|
||||
if (mCyl.ChkCoHit()) {
|
||||
OS_REPORT("----mtype = %d\n", field_0x6E0);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int daTagPati_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagPati_c*>(i_this)->create();
|
||||
daTagPati_c* pati = static_cast<daTagPati_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return pati->create();
|
||||
}
|
||||
|
||||
static int daTagPati_Execute(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagPati_c*>(i_this)->Execute();
|
||||
daTagPati_c* pati = static_cast<daTagPati_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return pati->Execute();
|
||||
}
|
||||
|
||||
static int daTagPati_Delete(daTagPati_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagPati_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,12 @@ daTagPoFire_HIO_c::daTagPoFire_HIO_c() {
|
||||
unk_0x4 = 0x14;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
void daTagPoFire_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// empty function
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagPoFire_c::setBaseMtx() {
|
||||
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);
|
||||
@@ -48,11 +54,14 @@ static int daTagPoFire_Execute(daTagPoFire_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagPoFire_Delete(daTagPoFire_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->Delete();
|
||||
}
|
||||
|
||||
static int daTagPoFire_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagPoFire_c*>(i_this)->create();
|
||||
daTagPoFire_c* poFire = static_cast<daTagPoFire_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return poFire->create();
|
||||
}
|
||||
|
||||
daTagPoFire_HIO_c::~daTagPoFire_HIO_c() {}
|
||||
|
||||
@@ -5,52 +5,60 @@
|
||||
#include "d/d_procname.h"
|
||||
|
||||
void* daTag_Push_c::srchActor(void* param_0, void* param_1) {
|
||||
daTag_Push_c* push = (daTag_Push_c*)param_0;
|
||||
BOOL bVar1 = false;
|
||||
if (param_0 != NULL && fopAcM_IsActor(param_0)) {
|
||||
if (push != NULL && fopAcM_IsActor(push)) {
|
||||
if (fopAcM_IsExecuting(fopAcM_GetID(param_0))) {
|
||||
switch (((daTag_Push_c*)param_1)->getId()) {
|
||||
int id = ((daTag_Push_c*)param_1)->getId();
|
||||
switch (id) {
|
||||
case 1:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_TARO;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_TARO;
|
||||
break;
|
||||
case 2:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_JAGAR;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_JAGAR;
|
||||
break;
|
||||
case 3:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_LEN;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_LEN;
|
||||
break;
|
||||
case 4:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_TARO;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_TARO;
|
||||
break;
|
||||
case 5:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_MARO;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_MARO;
|
||||
break;
|
||||
case 6:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_BESU;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_BESU;
|
||||
break;
|
||||
case 7:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_BOU;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_BOU;
|
||||
break;
|
||||
case 8:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_GRS;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_GRS;
|
||||
break;
|
||||
case 9:
|
||||
bVar1 = fopAcM_GetName(param_0) == PROC_NPC_GRO;
|
||||
bVar1 = fopAcM_GetName(push) == PROC_NPC_GRO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!bVar1) {
|
||||
param_0 = NULL;
|
||||
push = NULL;
|
||||
}
|
||||
return param_0;
|
||||
return push;
|
||||
}
|
||||
|
||||
int daTag_Push_c::create() {
|
||||
int var_r29 = 0;
|
||||
fopAcM_ct(this, daTag_Push_c);
|
||||
scale.x *= 100.0f;
|
||||
scale.y *= 100.0f;
|
||||
scale.z = scale.x;
|
||||
|
||||
OS_REPORT("\t(%s:%d) PlayerNo:%d, BitSW:%02x, BitSW2:%02x, flowNo:%d<%08x>\n",
|
||||
fopAcM_getProcNameString(this), getId(), getPlayerListNo(), getBitSW(), getBitSW2(),
|
||||
getFlowNodeNo(), fopAcM_GetParam(this));
|
||||
|
||||
if (isDelete()) {
|
||||
return cPhs_ERROR_e;
|
||||
} else {
|
||||
|
||||
+232
-59
@@ -4,14 +4,134 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_qs.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
#include "d/actor/d_a_obj_carry.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/actor/d_a_tag_qs.h"
|
||||
#include "d/d_a_item_static.h"
|
||||
#include "d/d_save.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_save.h"
|
||||
|
||||
class daObjTagQs_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daObjTagQs_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
/* 0x08 */ f32 powerOutsideRadius;
|
||||
/* 0x0C */ f32 safeArea;
|
||||
/* 0x10 */ f32 powerInsideRadius;
|
||||
/* 0x14 */ f32 powerCenter;
|
||||
/* 0x18 */ f32 sinkholePowerOutsideRadius;
|
||||
/* 0x1C */ f32 sinkholeSafeArea;
|
||||
/* 0x20 */ f32 sinkholePowerInsideRadius;
|
||||
/* 0x24 */ f32 sinkholePowerCenter;
|
||||
/* 0x28 */ s16 startMorfFrame;
|
||||
/* 0x2A */ s16 stopMorfFrame;
|
||||
/* 0x2C */ f32 centralSinkSpeed;
|
||||
/* 0x30 */ u16 flags;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daObjTagQs_HIO_c l_HIO;
|
||||
#endif
|
||||
|
||||
#define TAG_QS_DEF_POWER_OUTSIDE_RADIUS 4.0f
|
||||
#define TAG_QS_DEF_SAFE_AREA 0.8f
|
||||
#define TAG_QS_DEF_POWER_INSIDE_RADIUS 6.0f
|
||||
#define TAG_QS_DEF_POWER_CENTER 12.0f
|
||||
#define TAG_QS_DEF_SINKHOLE_POWER_OUTSIDE_RADIUS 5.0f
|
||||
#define TAG_QS_DEF_SINKHOLE_SAFE_AREA 0.5f
|
||||
#define TAG_QS_DEF_SINKHOLE_POWER_INSIDE_RADIUS 10.0f
|
||||
#define TAG_QS_DEF_SINKHOLE_POWER_CENTER 20.0f
|
||||
#define TAG_QS_DEF_START_MORF_FRAME 30
|
||||
#define TAG_QS_DEF_STOP_MORF_FRAME 30
|
||||
#define TAG_QS_DEF_CENTRAL_SINK_SPEED 0.5f
|
||||
#define TAG_QS_DEF_FLAGS 0
|
||||
|
||||
#if DEBUG
|
||||
#define TAG_QS_POWER_OUTSIDE_RADIUS l_HIO.powerOutsideRadius
|
||||
#define TAG_QS_SAFE_AREA l_HIO.safeArea
|
||||
#define TAG_QS_POWER_INSIDE_RADIUS l_HIO.powerInsideRadius
|
||||
#define TAG_QS_POWER_CENTER l_HIO.powerCenter
|
||||
#define TAG_QS_SINKHOLE_POWER_OUTSIDE_RADIUS l_HIO.sinkholePowerOutsideRadius
|
||||
#define TAG_QS_SINKHOLE_SAFE_AREA l_HIO.sinkholeSafeArea
|
||||
#define TAG_QS_SINKHOLE_POWER_INSIDE_RADIUS l_HIO.sinkholePowerInsideRadius
|
||||
#define TAG_QS_SINKHOLE_POWER_CENTER l_HIO.sinkholePowerCenter
|
||||
#define TAG_QS_START_MORF_FRAME l_HIO.startMorfFrame
|
||||
#define TAG_QS_STOP_MORF_FRAME l_HIO.stopMorfFrame
|
||||
#define TAG_QS_CENTRAL_SINK_SPEED l_HIO.centralSinkSpeed
|
||||
#define TAG_QS_FLAGS l_HIO.flags
|
||||
#else
|
||||
#define TAG_QS_POWER_OUTSIDE_RADIUS TAG_QS_DEF_POWER_OUTSIDE_RADIUS
|
||||
#define TAG_QS_SAFE_AREA TAG_QS_DEF_SAFE_AREA
|
||||
#define TAG_QS_POWER_INSIDE_RADIUS TAG_QS_DEF_POWER_INSIDE_RADIUS
|
||||
#define TAG_QS_POWER_CENTER TAG_QS_DEF_POWER_CENTER
|
||||
#define TAG_QS_SINKHOLE_POWER_OUTSIDE_RADIUS TAG_QS_DEF_SINKHOLE_POWER_OUTSIDE_RADIUS
|
||||
#define TAG_QS_SINKHOLE_SAFE_AREA TAG_QS_DEF_SINKHOLE_SAFE_AREA
|
||||
#define TAG_QS_SINKHOLE_POWER_INSIDE_RADIUS TAG_QS_DEF_SINKHOLE_POWER_INSIDE_RADIUS
|
||||
#define TAG_QS_SINKHOLE_POWER_CENTER TAG_QS_DEF_SINKHOLE_POWER_CENTER
|
||||
#define TAG_QS_START_MORF_FRAME TAG_QS_DEF_START_MORF_FRAME
|
||||
#define TAG_QS_STOP_MORF_FRAME TAG_QS_DEF_STOP_MORF_FRAME
|
||||
#define TAG_QS_CENTRAL_SINK_SPEED TAG_QS_DEF_CENTRAL_SINK_SPEED
|
||||
#define TAG_QS_FLAGS TAG_QS_DEF_FLAGS
|
||||
#endif
|
||||
|
||||
#if DEBUG
|
||||
daObjTagQs_HIO_c::daObjTagQs_HIO_c() {
|
||||
powerOutsideRadius = TAG_QS_DEF_POWER_OUTSIDE_RADIUS;
|
||||
safeArea = TAG_QS_DEF_SAFE_AREA;
|
||||
powerInsideRadius = TAG_QS_DEF_POWER_INSIDE_RADIUS;
|
||||
powerCenter = TAG_QS_DEF_POWER_CENTER;
|
||||
sinkholePowerOutsideRadius = TAG_QS_DEF_SINKHOLE_POWER_OUTSIDE_RADIUS;
|
||||
sinkholeSafeArea = TAG_QS_DEF_SINKHOLE_SAFE_AREA;
|
||||
sinkholePowerInsideRadius = TAG_QS_DEF_SINKHOLE_POWER_INSIDE_RADIUS;
|
||||
sinkholePowerCenter = TAG_QS_DEF_SINKHOLE_POWER_CENTER;
|
||||
startMorfFrame = TAG_QS_DEF_START_MORF_FRAME;
|
||||
stopMorfFrame = TAG_QS_DEF_STOP_MORF_FRAME;
|
||||
flags = TAG_QS_DEF_FLAGS;
|
||||
centralSinkSpeed = TAG_QS_DEF_CENTRAL_SINK_SPEED;
|
||||
}
|
||||
|
||||
void daObjTagQs_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Quicksand"
|
||||
ctx->genLabel("流砂", 0);
|
||||
// "Power (outside safety radius)"
|
||||
ctx->genSlider("パワー(安全半径外)", &powerOutsideRadius, 0.0f, 100.0f);
|
||||
// "Safety radius adjust"
|
||||
ctx->genSlider("安全半径変更", &safeArea, 0.0f, 1.0f);
|
||||
// "Power (inside safety radius)"
|
||||
ctx->genSlider("パワー(安全半径)", &powerInsideRadius, 0.0f, 100.0f);
|
||||
// "Power (center)"
|
||||
ctx->genSlider("パワー(中心)", &powerCenter, 0.0f, 100.0f);
|
||||
|
||||
// "Quicksand (10x)" (sinkhole?)
|
||||
ctx->genLabel("流砂(10倍)", 0);
|
||||
// "Power (outside safety radius)"
|
||||
ctx->genSlider("パワー(安全半径外)", &sinkholePowerOutsideRadius, 0.0f, 100.0f);
|
||||
// "Safety radius adjust"
|
||||
ctx->genSlider("安全半径変更", &sinkholeSafeArea, 0.0f, 1.0f);
|
||||
// "Power (inside safety radius)"
|
||||
ctx->genSlider("パワー(安全半径)", &sinkholePowerInsideRadius, 0.0f, 100.0f);
|
||||
// "Power (center)"
|
||||
ctx->genSlider("パワー(中心)", &sinkholePowerCenter, 0.0f, 100.0f);
|
||||
|
||||
// "Others"
|
||||
ctx->genLabel("その他", 0);
|
||||
// "Start interpolation frame"
|
||||
ctx->genSlider("スタート補間フレーム", &startMorfFrame, 0, 120);
|
||||
// "Stop interpolation frame"
|
||||
ctx->genSlider("ストップ補間フレーム", &stopMorfFrame, 0, 120);
|
||||
// "Draw"
|
||||
ctx->genCheckBox("描画", &flags, 0x1);
|
||||
// "Stop"
|
||||
ctx->genCheckBox("停止", &flags, 0x2);
|
||||
// "Central sink speed"
|
||||
ctx->genSlider("中心沈み速度", ¢ralSinkSpeed, 0.0f, 10.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
static dCcD_SrcCyl l_cc_cyl_src = {
|
||||
{
|
||||
@@ -33,6 +153,12 @@ daTagQs_c::~daTagQs_c() {}
|
||||
|
||||
int daTagQs_c::create() {
|
||||
fopAcM_ct(this, daTagQs_c);
|
||||
|
||||
#if DEBUG
|
||||
// "Quicksand"
|
||||
l_HIO.entryHIO("流砂");
|
||||
#endif
|
||||
|
||||
f32 typeScale;
|
||||
if (getType() == 0) {
|
||||
typeScale = 1.0f;
|
||||
@@ -50,137 +176,170 @@ int daTagQs_c::create() {
|
||||
}
|
||||
|
||||
f32 daTagQs_c::getPower() {
|
||||
return getType() == 0 ? 4.0f : 5.0f;
|
||||
if (getType() == 0) {
|
||||
return TAG_QS_POWER_OUTSIDE_RADIUS;
|
||||
} else {
|
||||
return TAG_QS_SINKHOLE_POWER_OUTSIDE_RADIUS;
|
||||
}
|
||||
}
|
||||
|
||||
f32 daTagQs_c::getSafeArea() {
|
||||
return getType() == 0 ? 0.8f : 0.5f;
|
||||
if (getType() == 0) {
|
||||
return TAG_QS_SAFE_AREA;
|
||||
} else {
|
||||
return TAG_QS_SINKHOLE_SAFE_AREA;
|
||||
}
|
||||
}
|
||||
|
||||
f32 daTagQs_c::getPower80() {
|
||||
return getType() == 0 ? 6.0f : 10.0f;
|
||||
if (getType() == 0) {
|
||||
return TAG_QS_POWER_INSIDE_RADIUS;
|
||||
} else {
|
||||
return TAG_QS_SINKHOLE_POWER_INSIDE_RADIUS;
|
||||
}
|
||||
}
|
||||
|
||||
f32 daTagQs_c::getCenterPower() {
|
||||
return getType() == 0 ? 12.0f : 20.0f;
|
||||
if (getType() == 0) {
|
||||
return TAG_QS_POWER_CENTER;
|
||||
} else {
|
||||
return TAG_QS_SINKHOLE_POWER_CENTER;
|
||||
}
|
||||
}
|
||||
|
||||
f32 daTagQs_c::calcPower(f32 param_1, f32 param_2) {
|
||||
f32 dVar12 = 1.0f;
|
||||
if (getSwNo() != 0xff) {
|
||||
if (fopAcM_isSwitch(this, getSwNo())) {
|
||||
dVar12 = field_0x570 / 30.0f;
|
||||
dVar12 = field_0x570 / (f32)TAG_QS_START_MORF_FRAME;
|
||||
} else {
|
||||
dVar12 = (30 - field_0x574) / 30.0f;
|
||||
dVar12 = (TAG_QS_STOP_MORF_FRAME - field_0x574) / (f32)TAG_QS_STOP_MORF_FRAME;
|
||||
}
|
||||
}
|
||||
if (param_2 > (param_1 * 0.8f)) {
|
||||
if (param_2 > param_1 * TAG_QS_SAFE_AREA) {
|
||||
return dVar12 * getPower();
|
||||
}
|
||||
|
||||
return dVar12 *
|
||||
((1.0f - (param_2 / (param_1 * getSafeArea()))) * (getCenterPower() - getPower80()) +
|
||||
((1.0f - param_2 / (param_1 * getSafeArea())) * (getCenterPower() - getPower80()) +
|
||||
getPower80());
|
||||
}
|
||||
|
||||
static int hikiyose(cXyz* param_1, cXyz* param_2, cXyz* param_3, f32 param_4) {
|
||||
cXyz cStack_44 = *param_1 - *param_2;
|
||||
cXyz cStack_50(cStack_44);
|
||||
cStack_50.y = 0.0f;
|
||||
f32 dVar6 = fabsf(cStack_50.getSquareMag());
|
||||
if (dVar6 < 4.0f) {
|
||||
cXyz posDiff;
|
||||
posDiff = *param_1 - *param_2;
|
||||
cXyz posDiffLat(posDiff);
|
||||
posDiffLat.y = 0.0f;
|
||||
f32 dist;
|
||||
if (fabsf(posDiffLat.getSquareMag()) < 4.0f) {
|
||||
param_2->x = param_1->x + cM_rndFX(1.0f);
|
||||
param_2->y -= 0.5f;
|
||||
param_2->y -= TAG_QS_CENTRAL_SINK_SPEED;
|
||||
param_2->z = param_1->z + cM_rndFX(1.0f);
|
||||
param_3->y = param_2->y;
|
||||
if (param_2->y < param_1->y - 100.0f) {
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
} else if (cStack_44.abs() < param_4) {
|
||||
param_2->x = param_1->x;
|
||||
param_2->y = param_1->y;
|
||||
param_2->z = param_1->z;
|
||||
} else {
|
||||
cStack_44.normalize();
|
||||
cStack_44 *= param_4;
|
||||
*param_2 += cStack_44;
|
||||
dist = posDiff.abs();
|
||||
if (dist < param_4) {
|
||||
param_2->x = param_1->x;
|
||||
param_2->y = param_1->y;
|
||||
param_2->z = param_1->z;
|
||||
} else {
|
||||
posDiff.normalize();
|
||||
posDiff *= param_4;
|
||||
*param_2 += posDiff;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void* search(void* param_1, void* param_2) {
|
||||
UNUSED(param_2);
|
||||
|
||||
if (param_1 == NULL || !fopAcM_IsActor(param_1)) {
|
||||
return NULL;
|
||||
}
|
||||
fopAc_ac_c* actor1 = (fopAc_ac_c*) param_1;
|
||||
daTagQs_c* actor2 = (daTagQs_c*) param_2;
|
||||
f32 dVar9 = actor2->current.pos.absXZ(actor1->current.pos);
|
||||
if (dVar9 > actor2->field_0x568) {
|
||||
|
||||
daTagQs_c* qs = (daTagQs_c*)param_2;
|
||||
fopAc_ac_c* target = (fopAc_ac_c*)param_1;
|
||||
|
||||
f32 latDist = qs->current.pos.absXZ(target->current.pos);
|
||||
if (latDist > qs->field_0x568) {
|
||||
return NULL;
|
||||
}
|
||||
if (actor2->current.pos.y - 110.0f > actor1->current.pos.y ||
|
||||
actor2->current.pos.y + actor2->field_0x56c < actor1->current.pos.y)
|
||||
|
||||
if (qs->current.pos.y - 110.0f > target->current.pos.y ||
|
||||
qs->current.pos.y + qs->field_0x56c < target->current.pos.y)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
if (actor1->current.pos.y >
|
||||
actor2->current.pos.y + (actor2->field_0x56c * dVar9) / (actor2->field_0x568 * 0.9f) + 20.0f)
|
||||
|
||||
if (target->current.pos.y >
|
||||
qs->current.pos.y + qs->field_0x56c * latDist / (qs->field_0x568 * 0.9f) + 20.0f)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (fopAcM_GetProfName(param_1) == PROC_ITEM) {
|
||||
daItem_c* item = (daItem_c*)param_1;
|
||||
item->getItemNo();
|
||||
if (item->getItemNo() <= 3) {
|
||||
int iVar3 = hikiyose(&actor2->current.pos, &actor1->current.pos, &actor1->old.pos,
|
||||
actor2->calcPower(actor2->field_0x568, dVar9));
|
||||
if (iVar3 == 1) {
|
||||
daItem_c* item = (daItem_c*)target;
|
||||
// somehow this condition is supposed to produce a double `li r0, 0x1` instruction,
|
||||
// this only produces one and is likely a fakematch anyway
|
||||
if (((u8)item->getItemNo(), true) && item->getItemNo() <= 3) {
|
||||
int sp14 = hikiyose(&qs->current.pos, &item->current.pos, &item->old.pos,
|
||||
qs->calcPower(qs->field_0x568, latDist));
|
||||
if (sp14 == 1) {
|
||||
item->startCtrl();
|
||||
} else if (iVar3 == 2) {
|
||||
fopAcM_delete(actor1);
|
||||
} else if (sp14 == 2) {
|
||||
fopAcM_delete(item);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (fopAcM_GetProfName(param_1) == PROC_Obj_Carry) {
|
||||
daObjCarry_c* carry = (daObjCarry_c*)param_1;
|
||||
daObjCarry_c* carry = (daObjCarry_c*)target;
|
||||
if (carry->getType() == 7 || carry->getType() == 1 || carry->getType() == 5) {
|
||||
int iVar3 = hikiyose(&actor2->current.pos, &carry->current.pos, &carry->old.pos, actor2->calcPower(actor2->field_0x568, dVar9));
|
||||
if (iVar3 == 1) {
|
||||
int sp10 = hikiyose(&qs->current.pos, &carry->current.pos, &carry->old.pos,
|
||||
qs->calcPower(qs->field_0x568, latDist));
|
||||
if (sp10 == 1) {
|
||||
carry->startCtrl();
|
||||
} else if (iVar3 == 2) {
|
||||
} else if (sp10 == 2) {
|
||||
fopAcM_delete(carry);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (param_1 == daPy_getPlayerActorClass()) {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
cXyz local_58 = actor2->current.pos - player->current.pos;
|
||||
if (local_58.getSquareMag() >= actor2->getPower()) {
|
||||
s16 sVar6 = cM_atan2s(local_58.x, local_58.z);
|
||||
cXyz posDiff = qs->current.pos - player->current.pos;
|
||||
if (posDiff.getSquareMag() >= qs->getPower()) {
|
||||
s16 yaw = cM_atan2s(posDiff.x, posDiff.z);
|
||||
if (!player->checkPlayerFly()) {
|
||||
player->setOutPower(actor2->calcPower(actor2->field_0x568, dVar9), sVar6, 0);
|
||||
player->setOutPower(qs->calcPower(qs->field_0x568, latDist), yaw, 0);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int daTagQs_c::execute() {
|
||||
fopAcM_Search(search, this);
|
||||
if ((TAG_QS_FLAGS & 0x2) == 0) {
|
||||
fopAcM_Search(search, this);
|
||||
}
|
||||
if (getSwNo() != 0xff) {
|
||||
int bossLife;
|
||||
int bossLife = 0;
|
||||
if (fopAcM_isSwitch(this, getSwNo())) {
|
||||
field_0x570++;
|
||||
if (field_0x570 > 30) {
|
||||
field_0x570 = 30;
|
||||
if (field_0x570 > TAG_QS_START_MORF_FRAME) {
|
||||
field_0x570 = TAG_QS_START_MORF_FRAME;
|
||||
}
|
||||
field_0x574 = 0;
|
||||
bossLife = (field_0x570 * 100.0f) / 30.0f;
|
||||
bossLife = (field_0x570 * 100.0f) / (f32)TAG_QS_START_MORF_FRAME;
|
||||
if (getType() == 0) {
|
||||
Z2GetAudioMgr()->seStartLevel(Z2SE_ENV_QUICKSAND_LOOP, ¤t.pos, 0,
|
||||
dComIfGp_getReverb(fopAcM_GetRoomNo(this)), 1.0f,
|
||||
@@ -188,11 +347,11 @@ int daTagQs_c::execute() {
|
||||
}
|
||||
} else {
|
||||
field_0x574++;
|
||||
if (field_0x574 > 30) {
|
||||
field_0x574 = 30;
|
||||
if (field_0x574 > TAG_QS_STOP_MORF_FRAME) {
|
||||
field_0x574 = TAG_QS_STOP_MORF_FRAME;
|
||||
}
|
||||
field_0x570 = 0;
|
||||
bossLife = 100.0f - field_0x574 * 100.0f / 30.0f;
|
||||
bossLife = 100.0f - field_0x574 * 100.0f / (f32)TAG_QS_STOP_MORF_FRAME;
|
||||
}
|
||||
dComIfGs_BossLife_public_Set(bossLife);
|
||||
} else {
|
||||
@@ -206,6 +365,15 @@ int daTagQs_c::execute() {
|
||||
}
|
||||
|
||||
int daTagQs_c::draw() {
|
||||
if (TAG_QS_FLAGS & 0x1) {
|
||||
GXColor color;
|
||||
color.r = 0xff;
|
||||
color.g = 0;
|
||||
color.b = 0xff;
|
||||
color.a = 0x80;
|
||||
dDbVw_drawCylinderXlu(current.pos, field_0x568, field_0x56c, color, 1);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -218,6 +386,10 @@ static int daTagQs_Execute(daTagQs_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagQs_IsDelete(daTagQs_c* i_this) {
|
||||
UNUSED(i_this);
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -227,7 +399,8 @@ static int daTagQs_Delete(daTagQs_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagQs_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagQs_c*>(i_this)->create();
|
||||
daTagQs_c* qs = static_cast<daTagQs_c*>(i_this);
|
||||
return qs->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagQs_Method = {
|
||||
|
||||
@@ -6,7 +6,44 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_ret_room.h"
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
|
||||
class daTagRetRm_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagRetRm_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
void setScale(const cXyz& i_scale) { scale = i_scale; };
|
||||
|
||||
cXyz scale;
|
||||
u8 showTag;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagRetRm_HIO_c l_TAG_RET_ROOM_HIO;
|
||||
#endif
|
||||
|
||||
daTagRetRm_HIO_c::daTagRetRm_HIO_c() {
|
||||
// empty function
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
void daTagRetRm_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Return to room tag"
|
||||
ctx->genLabel("____________部屋戻しタグ____________", 0);
|
||||
// "Scale value X"
|
||||
ctx->genSlider("スケール値X", &scale.x, 0.0f, 25.0f);
|
||||
// "Scale value Y"
|
||||
ctx->genSlider("スケール値Y", &scale.y, 0.0f, 25.0f);
|
||||
// "Scale value Z"
|
||||
ctx->genSlider("スケール値Z", &scale.z, 0.0f, 25.0f);
|
||||
// "Display tag ON/OFF"
|
||||
ctx->genCheckBox("Tag表示ON/OFF", &showTag, TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
daTagRetRm_c::daTagRetRm_c() {}
|
||||
|
||||
@@ -15,14 +52,51 @@ daTagRetRm_c::~daTagRetRm_c() {}
|
||||
int daTagRetRm_c::create() {
|
||||
fopAcM_ct(this, daTagRetRm_c);
|
||||
init();
|
||||
|
||||
#if DEBUG
|
||||
// "Room return tag Lv7D"
|
||||
l_TAG_RET_ROOM_HIO.entryHIO("部屋戻しタグLv7D");
|
||||
l_TAG_RET_ROOM_HIO.setScale(scale);
|
||||
l_TAG_RET_ROOM_HIO.showTag = FALSE;
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daTagRetRm_c::Delete() {
|
||||
#if DEBUG
|
||||
l_TAG_RET_ROOM_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagRetRm_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_TAG_RET_ROOM_HIO.showTag == TRUE) {
|
||||
GXColor color = {0xff, 0, 0, 0x80};
|
||||
cXyz sp10[8];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
|
||||
sp10[0].set(-field_0x56c, 0.0f, -field_0x574);
|
||||
sp10[1].set(-field_0x56c, 0.0f, field_0x574);
|
||||
sp10[2].set(field_0x56c, 0.0f, -field_0x574);
|
||||
sp10[3].set(field_0x56c, 0.0f, field_0x574);
|
||||
sp10[4].set(-field_0x56c, field_0x570, -field_0x574);
|
||||
sp10[5].set(-field_0x56c, field_0x570, field_0x574);
|
||||
sp10[6].set(field_0x56c, field_0x570, -field_0x574);
|
||||
sp10[7].set(field_0x56c, field_0x570, field_0x574);
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(sp10); i++) {
|
||||
mDoMtx_stack_c::multVec(&sp10[i], &sp10[i]);
|
||||
}
|
||||
|
||||
dDbVw_drawCube8pXlu(sp10, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -48,21 +122,21 @@ void daTagRetRm_c::init() {
|
||||
field_0x578 = 0;
|
||||
}
|
||||
|
||||
u8 daTagRetRm_c::chkPlyrInTag() {
|
||||
cXyz pos;
|
||||
if (dComIfGp_getPlayer(0) == NULL) {
|
||||
return 0;
|
||||
bool daTagRetRm_c::chkPlyrInTag() {
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
if (player == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
cXyz pos = player->current.pos - current.pos;
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&pos, &pos);
|
||||
if (0 < pos.y && field_0x570 > pos.y && field_0x56c > pos.x && field_0x574 > pos.z &&
|
||||
-field_0x56c < pos.x && -field_0x574 < pos.z)
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
pos = daPy_getPlayerActorClass()->current.pos - current.pos;
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&pos, &pos);
|
||||
if ((0 < pos.y) && (field_0x570 > pos.y) && (field_0x56c > pos.x) &&
|
||||
(field_0x574 > pos.z) && (-field_0x56c < pos.x) && (-field_0x574 < pos.z))
|
||||
{
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,10 +12,14 @@ static char* l_arcName = "RvBack";
|
||||
|
||||
static char* l_evName = "RIVER_BACK";
|
||||
|
||||
static char* l_staffName = "rvback";
|
||||
|
||||
int daTagRiverBack_c::Create() {
|
||||
mMapToolID = -1;
|
||||
eventInfo.setArchiveName(l_arcName);
|
||||
mEventID = dComIfGp_getEventManager().getEventIdx(this, l_evName, -1);
|
||||
mEventID = (s16)dComIfGp_getEventManager().getEventIdx(this, l_evName, -1);
|
||||
// "River flow reversal tag: evid<%d>tool<%d>"
|
||||
OS_REPORT("川流れ戻しタグ:evid<%d>tool<%d>\n", mEventID, mMapToolID);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -23,8 +27,7 @@ int daTagRiverBack_c::create() {
|
||||
fopAcM_ct(this, daTagRiverBack_c);
|
||||
int phase = dComIfG_resLoad(&mPhase, l_arcName);
|
||||
if (phase == cPhs_COMPLEATE_e) {
|
||||
int result = Create();
|
||||
if (!result) {
|
||||
if (!Create()) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
}
|
||||
@@ -32,13 +35,11 @@ int daTagRiverBack_c::create() {
|
||||
}
|
||||
|
||||
int daTagRiverBack_c::execute() {
|
||||
u8 swBit = getSwBit();
|
||||
if (swBit != 0xFF && fopAcM_isSwitch(this, swBit) != 0) {
|
||||
if (getSwbit() != 0xFF && fopAcM_isSwitch(this, getSwbit()) != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 swBit2 = getSwBit2();
|
||||
if (swBit2 != 0xFF && fopAcM_isSwitch(this, swBit2) == 0) {
|
||||
if (getSwbit2() != 0xFF && fopAcM_isSwitch(this, getSwbit2()) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -47,8 +48,6 @@ int daTagRiverBack_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static char* l_staffName = "rvback";
|
||||
|
||||
void daTagRiverBack_c::event_proc_call() {
|
||||
typedef void (daTagRiverBack_c::*actionFunc)();
|
||||
static actionFunc l_func[] = {&daTagRiverBack_c::actionWait,
|
||||
@@ -59,7 +58,8 @@ void daTagRiverBack_c::event_proc_call() {
|
||||
}
|
||||
|
||||
void daTagRiverBack_c::actionWait() {
|
||||
if (dComIfGp_checkPlayerStatus0(0, 0x100000) != 0) {
|
||||
u32 result = dComIfGp_checkPlayerStatus0(0, 0x100000);
|
||||
if (result != 0) {
|
||||
mCount = 0;
|
||||
setAction(ACTION_ORDER_EVENT_e);
|
||||
fopAcM_orderOtherEventId(this, mEventID, mMapToolID, 0xFFFF, 0, 1);
|
||||
@@ -72,7 +72,7 @@ void daTagRiverBack_c::actionOrderEvent() {
|
||||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||||
setAction(ACTION_EVENT_e);
|
||||
mStaffID = dComIfGp_evmng_getMyStaffId(l_staffName, NULL, 0);
|
||||
player->mNoResetFlg0 |= 0x10000;
|
||||
player->onDemoStreamAccept();
|
||||
demoProc();
|
||||
} else {
|
||||
fopAcM_orderOtherEventId(this, mEventID, mMapToolID, 0xFFFF, 0, 1);
|
||||
@@ -82,7 +82,7 @@ void daTagRiverBack_c::actionOrderEvent() {
|
||||
|
||||
void daTagRiverBack_c::actionEvent() {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
mCount += 1;
|
||||
mCount += (s16)1;
|
||||
if (dComIfGp_evmng_endCheck(mEventID)) {
|
||||
setAction(ACTION_DEAD_e);
|
||||
dComIfGp_event_reset();
|
||||
@@ -96,34 +96,35 @@ void daTagRiverBack_c::actionEvent() {
|
||||
|
||||
void daTagRiverBack_c::actionDead() {}
|
||||
|
||||
static char* action_table[] = {"WAIT", "SCENE_CHG"};
|
||||
|
||||
int daTagRiverBack_c::demoProc() {
|
||||
static char* action_table[] = {"WAIT", "SCENE_CHG"};
|
||||
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
int act_id = dComIfGp_evmng_getMyActIdx(mStaffID, action_table, ARRAY_SIZEU(action_table), 0, 0);
|
||||
|
||||
int* timer_p;
|
||||
if (dComIfGp_evmng_getIsAddvance(mStaffID)) {
|
||||
switch (act_id) {
|
||||
case WAIT_e: {
|
||||
int* timer_p = dComIfGp_evmng_getMyIntegerP(mStaffID, "Timer");
|
||||
case WAIT_e:
|
||||
timer_p = dComIfGp_evmng_getMyIntegerP(mStaffID, "Timer");
|
||||
if (timer_p == NULL) {
|
||||
mTimer = 1;
|
||||
} else {
|
||||
mTimer = *timer_p;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCENE_CHG_e:
|
||||
mDoAud_seStart(Z2SE_FORCE_BACK, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
switch (act_id) {
|
||||
case WAIT_e:
|
||||
if ((cLib_calcTimer(&mTimer) & 0xFF) == 0) {
|
||||
if (cLib_calcTimer(&mTimer) == 0) {
|
||||
dComIfGp_evmng_cutEnd(mStaffID);
|
||||
}
|
||||
break;
|
||||
case SCENE_CHG_e:
|
||||
dStage_changeScene(fopAcM_GetParamBit(this, 0, 8) & 0xFF, 0.0f, 0, fopAcM_GetRoomNo(this),
|
||||
dStage_changeScene(getNextSceneNo(), 0.0f, 0, fopAcM_GetRoomNo(this),
|
||||
0, -1);
|
||||
break;
|
||||
default:
|
||||
@@ -143,10 +144,12 @@ static int daTagRiverBack_Execute(daTagRiverBack_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagRiverBack_Delete(daTagRiverBack_c* i_this) {
|
||||
fopAcM_RegisterDeleteID(i_this, "RiverBack");
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagRiverBack_Create(daTagRiverBack_c* i_this) {
|
||||
fopAcM_RegisterCreateID(i_this, "RiverBack");
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,30 +6,112 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_rmbit_sw.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
class daTagRmbitSw_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagRmbitSw_HIO_c();
|
||||
|
||||
void setScale(const cXyz& i_scale);
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
cXyz scale;
|
||||
u8 show_tag;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagRmbitSw_HIO_c l_RMBIT_HIO;
|
||||
|
||||
daTagRmbitSw_HIO_c::daTagRmbitSw_HIO_c() {
|
||||
// empty function
|
||||
}
|
||||
|
||||
void daTagRmbitSw_HIO_c::setScale(const cXyz& i_scale) {
|
||||
scale = i_scale;
|
||||
}
|
||||
|
||||
void daTagRmbitSw_HIO_c::genMessage(JORMContext* ctx) {
|
||||
ctx->genLabel("____________部屋戻しタグ____________", 0);
|
||||
ctx->genSlider("スケール値X", &scale.x, 0.0f, 25.0f);
|
||||
ctx->genSlider("スケール値Y", &scale.y, 0.0f, 25.0f);
|
||||
ctx->genSlider("スケール値Z", &scale.z, 0.0f, 25.0f);
|
||||
ctx->genCheckBox("Tag表示ON/OFF", &show_tag, 0x1);
|
||||
}
|
||||
#endif
|
||||
|
||||
daTagRmbitSw_c::daTagRmbitSw_c() {}
|
||||
|
||||
daTagRmbitSw_c::~daTagRmbitSw_c() {}
|
||||
|
||||
int daTagRmbitSw_c::create() {
|
||||
fopAcM_ct(this, daTagRmbitSw_c);
|
||||
|
||||
init();
|
||||
|
||||
#if DEBUG
|
||||
// "Destination room bit change switch"
|
||||
l_RMBIT_HIO.entryHIO("到達部屋ビット変更スイッチ");
|
||||
l_RMBIT_HIO.setScale(scale);
|
||||
l_RMBIT_HIO.show_tag = FALSE;
|
||||
#endif
|
||||
|
||||
if (getArg1_RoomNo() == -1) {
|
||||
JUT_WARN(165, "%s", " VisitedRoomNo == -1 !!!!!\n");
|
||||
}
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daTagRmbitSw_c::Delete() {
|
||||
#if DEBUG
|
||||
l_RMBIT_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagRmbitSw_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_RMBIT_HIO.show_tag == TRUE) {
|
||||
GXColor color = {0xff, 0, 0, 0x80};
|
||||
cXyz sp10[8];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
|
||||
sp10[0].set(-field_0x56c, 0.0f, -field_0x574);
|
||||
sp10[1].set(-field_0x56c, 0.0f, field_0x574);
|
||||
sp10[2].set(field_0x56c, 0.0f, -field_0x574);
|
||||
sp10[3].set(field_0x56c, 0.0f, field_0x574);
|
||||
sp10[4].set(-field_0x56c, field_0x570, -field_0x574);
|
||||
sp10[5].set(-field_0x56c, field_0x570, field_0x574);
|
||||
sp10[6].set(field_0x56c, field_0x570, -field_0x574);
|
||||
sp10[7].set(field_0x56c, field_0x570, field_0x574);
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(sp10); i++) {
|
||||
mDoMtx_stack_c::multVec(&sp10[i], &sp10[i]);
|
||||
}
|
||||
|
||||
dDbVw_drawCube8pXlu(sp10, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagRmbitSw_c::execute() {
|
||||
#if DEBUG
|
||||
field_0x56c = l_RMBIT_HIO.scale.x * 50.0f;
|
||||
field_0x570 = l_RMBIT_HIO.scale.y * 100.0f;
|
||||
field_0x574 = l_RMBIT_HIO.scale.z * 50.0f;
|
||||
#endif
|
||||
|
||||
if (chkPlyrInTag()) {
|
||||
if (getArg3_CngBitFlg() == 1) {
|
||||
if ((s32)getSwBit() == 0xff || fopAcM_isSwitch(this, getSwBit())) {
|
||||
if (getSwBit() == 0xff || fopAcM_isSwitch(this, getSwBit())) {
|
||||
if (getArg2_CngBitVal() == 1) {
|
||||
if (getArg0_RoomSaveTableNo() == -1) {
|
||||
dComIfGs_onVisitedRoom(getArg1_RoomNo());
|
||||
@@ -79,22 +161,22 @@ void daTagRmbitSw_c::init() {
|
||||
field_0x574 = scale.z * 50.0f;
|
||||
}
|
||||
|
||||
u8 daTagRmbitSw_c::chkPlyrInTag() {
|
||||
bool daTagRmbitSw_c::chkPlyrInTag() {
|
||||
fopAc_ac_c* fopPos = dComIfGp_getPlayer(0);
|
||||
|
||||
if (!fopPos) {
|
||||
return 0;
|
||||
} else {
|
||||
cXyz cPos = fopPos->current.pos - current.pos;
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&cPos, &cPos);
|
||||
if ((0.0f < cPos.y) && (field_0x570 > cPos.y) && (field_0x56c > cPos.x) &&
|
||||
(field_0x574 > cPos.z) && (-field_0x56c < cPos.x) && (-field_0x574 < cPos.z))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return 0;
|
||||
|
||||
cXyz cPos = fopPos->current.pos - current.pos;
|
||||
mDoMtx_stack_c::YrotS(-current.angle.y);
|
||||
mDoMtx_stack_c::multVec(&cPos, &cPos);
|
||||
if (0.0f < cPos.y && field_0x570 > cPos.y && field_0x56c > cPos.x &&
|
||||
field_0x574 > cPos.z && -field_0x56c < cPos.x && -field_0x574 < cPos.z)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int daTagRmbitSw_create(daTagRmbitSw_c* i_this) {
|
||||
|
||||
@@ -9,10 +9,12 @@
|
||||
|
||||
static int daTagSchedule_Create(fopAc_ac_c* i_this) {
|
||||
daTagSchedule_c* schedule_tag = (daTagSchedule_c*)i_this;
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return schedule_tag->create();
|
||||
}
|
||||
|
||||
static int daTagSchedule_Delete(daTagSchedule_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagSchedule_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -43,10 +43,12 @@ static int daTagSetBall_Execute(daTagSetBall_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagSetBall_Delete(daTagSetBall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagSetBall_Create(daTagSetBall_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,33 @@
|
||||
|
||||
#include "d/actor/d_a_tag_setrestart.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
class daTagRestart_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagRestart_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
u8 show_range;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagRestart_HIO_c l_HIO;
|
||||
|
||||
daTagRestart_HIO_c::daTagRestart_HIO_c() {
|
||||
show_range = FALSE;
|
||||
}
|
||||
|
||||
void daTagRestart_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Room return switch tag"
|
||||
ctx->genLabel("部屋戻し切替タグ", 0);
|
||||
// "Range display"
|
||||
ctx->genCheckBox("範囲表示", &show_range, 0x1);
|
||||
}
|
||||
#endif
|
||||
|
||||
int daTagRestart_c::Create() {
|
||||
field_0x56c[0].x = scale.x * -100.0f;
|
||||
field_0x56c[0].z = scale.z * -100.0f;
|
||||
@@ -23,10 +48,7 @@ int daTagRestart_c::Create() {
|
||||
field_0x56c[3].x = scale.x * -100.0f;
|
||||
field_0x56c[3].z = scale.z * 100.0f;
|
||||
|
||||
field_0x56c[3].y = 0.0f;
|
||||
field_0x56c[2].y = 0.0f;
|
||||
field_0x56c[1].y = 0.0f;
|
||||
field_0x56c[0].y = 0.0f;
|
||||
field_0x56c[0].y = field_0x56c[1].y = field_0x56c[2].y = field_0x56c[3].y = 0.0f;
|
||||
|
||||
mPlayerRoomNo = -1;
|
||||
return 1;
|
||||
@@ -39,6 +61,11 @@ int daTagRestart_c::create() {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
// "Room return switch tag"
|
||||
l_HIO.entryHIO("部屋戻し切替タグ");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
@@ -56,6 +83,7 @@ int daTagRestart_c::execute() {
|
||||
int roomNo = dComIfGp_roomControl_getStayNo();
|
||||
if (roomNo != mPlayerRoomNo) {
|
||||
cXyz pos_offset;
|
||||
cXyz restart_pos;
|
||||
s16 restart_angle;
|
||||
if (roomNo == daTagRestart_prm::getFRoomNo(this)) {
|
||||
restart_angle = home.angle.y;
|
||||
@@ -68,10 +96,14 @@ int daTagRestart_c::execute() {
|
||||
pos_offset.y += 100.0f;
|
||||
mDoMtx_stack_c::YrotS(home.angle.y);
|
||||
mDoMtx_stack_c::multVec(&pos_offset, &pos_offset);
|
||||
cXyz restart_pos = current.pos + pos_offset;
|
||||
restart_pos = current.pos + pos_offset;
|
||||
|
||||
if (fopAcM_gc_c::gndCheck(&restart_pos)) {
|
||||
restart_pos.y = fopAcM_gc_c::getGroundY();
|
||||
} else {
|
||||
// "There was no floor at the player's restart position!"
|
||||
OS_REPORT_ERROR("プレイヤー部屋戻し位置に床がありませんでした!\n");
|
||||
JUT_ASSERT(304, FALSE);
|
||||
}
|
||||
|
||||
dComIfGs_setRestartRoom(restart_pos, restart_angle, fopAcM_GetRoomNo(player));
|
||||
@@ -82,20 +114,63 @@ int daTagRestart_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagRestart_c::_delete() {
|
||||
int daTagRestart_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
GXColor color = {0x80, 0, 0, 0x80};
|
||||
cXyz sp10[8];
|
||||
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
|
||||
sp10[0] = field_0x56c[0];
|
||||
sp10[1] = field_0x56c[1];
|
||||
sp10[2] = field_0x56c[3];
|
||||
sp10[3] = field_0x56c[2];
|
||||
sp10[4] = field_0x56c[0];
|
||||
sp10[5] = field_0x56c[1];
|
||||
sp10[6] = field_0x56c[3];
|
||||
sp10[7] = field_0x56c[2];
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(sp10); i++) {
|
||||
mDoMtx_stack_c::multVec(&sp10[i], &sp10[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
sp10[i].y += 1000.0f;
|
||||
}
|
||||
|
||||
dDbVw_drawCube8pXlu(sp10, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagRestart_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagRestart_Draw(daTagRestart_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagRestart_Execute(daTagRestart_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagRestart_Delete(daTagRestart_c* i_this) {
|
||||
("Delete -> TagRestart( =%d)\n", fopAcM_GetID(i_this));
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagRestart_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagRestart_c*>(i_this)->create();
|
||||
daTagRestart_c* restart = static_cast<daTagRestart_c*>(i_this);
|
||||
fopAcM_RegisterCreateID(i_this, "Hasu");
|
||||
return restart->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagRestart_Method = {
|
||||
@@ -103,7 +178,11 @@ static actor_method_class l_daTagRestart_Method = {
|
||||
(process_method_func)daTagRestart_Delete,
|
||||
(process_method_func)daTagRestart_Execute,
|
||||
(process_method_func)NULL,
|
||||
#if DEBUG
|
||||
(process_method_func)daTagRestart_Draw,
|
||||
#else
|
||||
(process_method_func)NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
actor_process_profile_definition g_profile_Tag_Restart = {
|
||||
|
||||
@@ -47,17 +47,17 @@ int daTag_ShopItem_c::create() {
|
||||
|
||||
if (getSwitchBit1() != 0xFF) {
|
||||
if (dComIfGs_isSaveSwitch(getSwitchBit1())) {
|
||||
mCreateTimer = 150;
|
||||
// "Already Sold\n"
|
||||
OS_REPORT("もう売れたよ\n");
|
||||
mCreateTimer = 150;
|
||||
}
|
||||
}
|
||||
|
||||
if (getSwitchBit2() != 0xFF) {
|
||||
if (!dComIfGs_isSaveSwitch(getSwitchBit2())) {
|
||||
mCreateTimer = 150;
|
||||
// "Not sold yet\n"
|
||||
OS_REPORT("まだ売れない\n");
|
||||
mCreateTimer = 150;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ int daTag_ShopItem_c::Execute() {
|
||||
if (mProcessID == fpcM_ERROR_PROCESS_ID_e) {
|
||||
if (mCreateTimer == 0) {
|
||||
mProcessID =
|
||||
fopAcM_create(PROC_ShopItem, (getType() & 0xFF) | (getGroupID() << 0x1C),
|
||||
fopAcM_create(PROC_ShopItem, getType() | (getGroupID() << 28),
|
||||
¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle, NULL, -1);
|
||||
|
||||
} else {
|
||||
@@ -126,19 +126,25 @@ int daTag_ShopItem_c::Draw() {
|
||||
}
|
||||
|
||||
u8 daTag_ShopItem_c::getType() {
|
||||
return fopAcM_GetParam(this) & 0xFF;
|
||||
u8 result = fopAcM_GetParam(this);
|
||||
return result;
|
||||
}
|
||||
|
||||
u8 daTag_ShopItem_c::getGroupID() {
|
||||
return fopAcM_GetParam(this) >> 0x1C;
|
||||
u8 result = (fopAcM_GetParam(this) & 0xF0000000) >> 28;
|
||||
return result;
|
||||
}
|
||||
|
||||
u8 daTag_ShopItem_c::getSwitchBit1() {
|
||||
return home.angle.z & 0xFF;
|
||||
u16 angleZ = home.angle.z;
|
||||
u8 result = angleZ;
|
||||
return result;
|
||||
}
|
||||
|
||||
u8 daTag_ShopItem_c::getSwitchBit2() {
|
||||
return home.angle.z >> 8 & 0xFF;
|
||||
u16 angleZ = home.angle.z;
|
||||
u8 result = (angleZ & 0xFF00) >> 8;
|
||||
return result;
|
||||
}
|
||||
|
||||
void daTag_ShopItem_c::initialize() {
|
||||
|
||||
@@ -33,19 +33,19 @@ int daTagSmkEmt_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u16 const PARTICLE_NAME[3] = {
|
||||
0x87E7,
|
||||
0x87E8,
|
||||
0x87E9
|
||||
};
|
||||
|
||||
void daTagSmkEmt_c::createSmkEmt() {
|
||||
static u16 const PARTICLE_NAME[3] = {
|
||||
dPa_RM(ID_ZF_S_L5CHIMSMK00),
|
||||
dPa_RM(ID_ZF_S_L5CHIMSMK01),
|
||||
dPa_RM(ID_ZF_S_L5CHIMSMK02),
|
||||
};
|
||||
|
||||
cXyz pos(current.pos);
|
||||
csXyz angle(0,0,0);
|
||||
cXyz pos2(1.0f,1.0f,1.0f);
|
||||
cXyz pos2(1.0f, 1.0f, 1.0f);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mParticles[i] = dComIfGp_particle_set(PARTICLE_NAME[i],&pos,&angle,&pos2);
|
||||
mParticles[i] = dComIfGp_particle_set(PARTICLE_NAME[i], &pos, &angle, &pos2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,34 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_spinner.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
class daTagSpinner_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagSpinner_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
u8 enable_debug_display;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagSpinner_HIO_c l_HIO;
|
||||
|
||||
daTagSpinner_HIO_c::daTagSpinner_HIO_c() {
|
||||
enable_debug_display = FALSE;
|
||||
}
|
||||
|
||||
void daTagSpinner_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Spinner suction tag"
|
||||
ctx->genLabel("スピンナー吸い込みタグ", 0);
|
||||
// "Debug display"
|
||||
ctx->genCheckBox("デバッグ表示", &enable_debug_display, 0x1);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int CheckCreateHeap(fopAc_ac_c* param_0) {
|
||||
daTagSpinner_c* tag = (daTagSpinner_c*)param_0;
|
||||
return tag->CreateHeap();
|
||||
@@ -17,12 +43,15 @@ static void* search_spinner_sub(void* tag_0, void* tag_1) {
|
||||
fopAc_ac_c* actor = (fopAc_ac_c*)tag_0;
|
||||
daTagSpinner_c* actor2 = (daTagSpinner_c*)tag_1;
|
||||
|
||||
if ((actor != NULL) && (fopAcM_IsActor(actor) != NULL) && (fopAcM_GetProfName(actor) == 0xF2)) {
|
||||
if ((actor->current.pos.absXZ(actor2->current.pos)) < (actor2->GetR())) {
|
||||
if (actor != NULL &&
|
||||
fopAcM_IsActor(actor) != NULL &&
|
||||
fopAcM_GetProfName(actor) == PROC_SPINNER) {
|
||||
f32 latDist = actor->current.pos.absXZ(actor2->current.pos);
|
||||
if (latDist < actor2->GetR()) {
|
||||
return actor;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void daTagSpinner_c::initBaseMtx() {
|
||||
@@ -30,8 +59,8 @@ void daTagSpinner_c::initBaseMtx() {
|
||||
}
|
||||
|
||||
void daTagSpinner_c::setBaseMtx() {
|
||||
MTXTrans(mDoMtx_stack_c::now, current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_ZXYrotM(mDoMtx_stack_c::now, shape_angle.x, shape_angle.y, shape_angle.z);
|
||||
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);
|
||||
}
|
||||
|
||||
int daTagSpinner_c::Create() {
|
||||
@@ -46,21 +75,27 @@ int daTagSpinner_c::CreateHeap() {
|
||||
}
|
||||
|
||||
int daTagSpinner_c::create() {
|
||||
int iVar1;
|
||||
int iVar2;
|
||||
fopAcM_ct(this, daTagSpinner_c);
|
||||
|
||||
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0)) {
|
||||
iVar2 = 5;
|
||||
} else {
|
||||
iVar1 = Create();
|
||||
if (iVar1 == NULL) {
|
||||
iVar2 = 5;
|
||||
} else {
|
||||
iVar2 = 4;
|
||||
int var_r29 = cPhs_COMPLEATE_e;
|
||||
if (var_r29 == cPhs_COMPLEATE_e) {
|
||||
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
if (!Create()) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
OS_REPORT("TAG_SPINNER PARAM:%x\n", fopAcM_GetParam(this));
|
||||
|
||||
#if DEBUG
|
||||
// "Spinner suction tag"
|
||||
l_HIO.entryHIO("スピンナー吸い込みタグ");
|
||||
#endif
|
||||
}
|
||||
return iVar2;
|
||||
|
||||
return var_r29;
|
||||
}
|
||||
|
||||
int daTagSpinner_c::execute() {
|
||||
@@ -76,26 +111,55 @@ int daTagSpinner_c::execute() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagSpinner_c::_delete() {
|
||||
int daTagSpinner_c::draw() {
|
||||
#if DEBUG
|
||||
GXColor color = (GXColor){0, 0, 0x80, 0x80};
|
||||
|
||||
if (l_HIO.enable_debug_display) {
|
||||
dDbVw_drawCylinderXlu(current.pos, mRadius, field_0x56c, color, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagSpinner_Execute(daTagSpinner_c* tag) {
|
||||
return tag->execute();
|
||||
int daTagSpinner_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagSpinner_Execute(daTagSpinner_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagSpinner_Draw(daTagSpinner_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagSpinner_Delete(daTagSpinner_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagSpinner_Create(fopAc_ac_c* tag) {
|
||||
return static_cast<daTagSpinner_c*>(tag)->create();
|
||||
static int daTagSpinner_Create(fopAc_ac_c* i_this) {
|
||||
daTagSpinner_c* spinner = static_cast<daTagSpinner_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return spinner->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagSpinner_Method = {
|
||||
(process_method_func)daTagSpinner_Create,
|
||||
(process_method_func)daTagSpinner_Delete,
|
||||
(process_method_func)daTagSpinner_Execute,
|
||||
(process_method_func)NULL,
|
||||
#if DEBUG
|
||||
(process_method_func)daTagSpinner_Draw,
|
||||
#else
|
||||
(process_method_func)NULL,
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -28,8 +28,8 @@ static dCcD_SrcCyl l_cylSrc = {
|
||||
int daTagSppath_c::create() {
|
||||
fopAcM_ct(this, daTagSppath_c);
|
||||
|
||||
mSwNo1 = fopAcM_GetParamBit(this, 8, 8);
|
||||
mSwNo2 = fopAcM_GetParamBit(this, 16, 8);
|
||||
mSwNo1 = (fopAcM_GetParam(this) >> 8) & 0xFF;
|
||||
mSwNo2 = (fopAcM_GetParam(this) >> 16) & 0xFF;
|
||||
s32 pathIndex = fopAcM_GetParam(this) & 0xff;
|
||||
|
||||
if (pathIndex == 0xff ||
|
||||
@@ -53,53 +53,65 @@ int daTagSppath_c::create() {
|
||||
}
|
||||
|
||||
static int daTagSppath_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagSppath_c*>(i_this)->create();
|
||||
daTagSppath_c* spPath = static_cast<daTagSppath_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return spPath->create();
|
||||
}
|
||||
|
||||
daTagSppath_c::~daTagSppath_c() {}
|
||||
|
||||
static int daTagSppath_Delete(daTagSppath_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagSppath_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagSppath_c::getNearPathPos(cXyz* i_result, dPath* i_path) {
|
||||
daPy_py_c* py = daPy_getPlayerActorClass();
|
||||
cXyz* pyCurPos = &py->current.pos;
|
||||
cXyz* pyCurPos = &daPy_getPlayerActorClass()->current.pos;
|
||||
dPnt* curPnt = i_path->m_points;
|
||||
f32 bestDist = FLT_MAX;
|
||||
|
||||
int bestNo;
|
||||
f32 distToSeg;
|
||||
BOOL isValid;
|
||||
cM3dGLin line;
|
||||
cXyz nearestPointOnSeg;
|
||||
cXyz pntDiff;
|
||||
f32 distToSeg;
|
||||
int bestNo;
|
||||
f32 flatness;
|
||||
f32 segLen;
|
||||
dPnt* adjPnt;
|
||||
|
||||
for (int i = 0; i < i_path->m_num; i++, curPnt++) {
|
||||
if (i != i_path->m_num - 1) {
|
||||
line.set(curPnt[0].m_position, curPnt[1].m_position);
|
||||
if (!dPath_ChkClose(i_path)) {
|
||||
adjPnt = curPnt + 1;
|
||||
if (i == 0) {
|
||||
pntDiff.set(curPnt[1].m_position.x - curPnt[0].m_position.x,
|
||||
curPnt[1].m_position.y - curPnt[0].m_position.y,
|
||||
curPnt[1].m_position.z - curPnt[0].m_position.z);
|
||||
f32 segLen = pntDiff.abs();
|
||||
pntDiff.set(adjPnt->m_position.x - curPnt->m_position.x,
|
||||
adjPnt->m_position.y - curPnt->m_position.y,
|
||||
adjPnt->m_position.z - curPnt->m_position.z);
|
||||
segLen = pntDiff.abs();
|
||||
pntDiff.normalizeZP();
|
||||
f32 flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f && segLen > 30.0f / flatness) {
|
||||
line.GetStartP() = line.GetStart() + pntDiff * (30.0f / flatness);
|
||||
flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f) {
|
||||
flatness = 30.0f / flatness;
|
||||
if (segLen > flatness) {
|
||||
line.GetStartP() = line.GetStart() + pntDiff * flatness;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i == i_path->m_num - 2) {
|
||||
pntDiff.set(curPnt[0].m_position.x - curPnt[1].m_position.x,
|
||||
curPnt[0].m_position.y - curPnt[1].m_position.y,
|
||||
curPnt[0].m_position.z - curPnt[1].m_position.z);
|
||||
f32 segLen = pntDiff.abs();
|
||||
pntDiff.set(curPnt->m_position.x - adjPnt->m_position.x,
|
||||
curPnt->m_position.y - adjPnt->m_position.y,
|
||||
curPnt->m_position.z - adjPnt->m_position.z);
|
||||
segLen = pntDiff.abs();
|
||||
pntDiff.normalizeZP();
|
||||
f32 flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f && segLen > 30.0f / flatness) {
|
||||
line.GetEndP() = line.GetEnd() + pntDiff * (30.0f / flatness);
|
||||
flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f) {
|
||||
flatness = 30.0f / flatness;
|
||||
if (segLen > flatness) {
|
||||
line.GetEndP() = line.GetEnd() + pntDiff * flatness;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,7 +129,6 @@ int daTagSppath_c::getNearPathPos(cXyz* i_result, dPath* i_path) {
|
||||
if (isValid == 0) {
|
||||
nearestPointOnSeg = curPnt->m_position;
|
||||
if (!dPath_ChkClose(i_path) && ((i == 0 || (i == i_path->m_num - 1)))) {
|
||||
dPnt* adjPnt;
|
||||
if (i == 0) {
|
||||
adjPnt = curPnt + 1;
|
||||
} else {
|
||||
@@ -127,11 +138,14 @@ int daTagSppath_c::getNearPathPos(cXyz* i_result, dPath* i_path) {
|
||||
pntDiff.set(adjPnt->m_position.x - curPnt->m_position.x,
|
||||
adjPnt->m_position.y - curPnt->m_position.y,
|
||||
adjPnt->m_position.z - curPnt->m_position.z);
|
||||
f32 segLen = pntDiff.abs();
|
||||
segLen = pntDiff.abs();
|
||||
pntDiff.normalizeZP();
|
||||
f32 flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f && segLen > 30.0f / flatness) {
|
||||
nearestPointOnSeg += pntDiff * (30.0f / flatness);
|
||||
flatness = pntDiff.absXZ();
|
||||
if (flatness > 0.001f) {
|
||||
flatness = 30.0f / flatness;
|
||||
if (segLen > flatness) {
|
||||
nearestPointOnSeg += pntDiff * flatness;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -157,12 +171,14 @@ int daTagSppath_c::execute() {
|
||||
}
|
||||
|
||||
dPath* path = mpInitPath;
|
||||
cXyz nearestPointOnPath;
|
||||
f32 bestDist = FLT_MAX;
|
||||
f32 dist;
|
||||
int no;
|
||||
|
||||
for (; path != NULL; path = dPath_GetNextRoomPath(path, fopAcM_GetRoomNo(this))) {
|
||||
cXyz nearestPointOnPath;
|
||||
int no = getNearPathPos(&nearestPointOnPath, path);
|
||||
f32 dist = nearestPointOnPath.abs2(py->current.pos);
|
||||
no = getNearPathPos(&nearestPointOnPath, path);
|
||||
dist = nearestPointOnPath.abs2(py->current.pos);
|
||||
if (dist < bestDist) {
|
||||
bestDist = dist;
|
||||
current.pos = nearestPointOnPath;
|
||||
@@ -172,8 +188,7 @@ int daTagSppath_c::execute() {
|
||||
}
|
||||
|
||||
if (mpBestPath->field_0x4 == 0) {
|
||||
u32 swNo = mpBestPath->field_0x6;
|
||||
if (swNo == 0xff || fopAcM_isSwitch(this, swNo) == 0) {
|
||||
if (mpBestPath->field_0x6 == 0xff || fopAcM_isSwitch(this, mpBestPath->field_0x6) == 0) {
|
||||
field_0x6e8 = 1;
|
||||
} else {
|
||||
field_0x6e8 = 2;
|
||||
@@ -182,7 +197,8 @@ int daTagSppath_c::execute() {
|
||||
field_0x6e8 = 0;
|
||||
}
|
||||
|
||||
mCyl.SetC(cXyz(current.pos.x, current.pos.y - mHeight * 0.5f, current.pos.z));
|
||||
cXyz sp10(current.pos.x, current.pos.y - mHeight * 0.5f, current.pos.z);
|
||||
mCyl.SetC(sp10);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -6,9 +6,41 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_spring.h"
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
|
||||
class daTagSpring_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagSpring_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
u8 draw_range;
|
||||
u8 recovery_time;
|
||||
u8 field_0x8;
|
||||
};
|
||||
|
||||
daTagSpring_HIO_c::daTagSpring_HIO_c() {
|
||||
draw_range = 0;
|
||||
recovery_time = 30;
|
||||
field_0x8 = 1;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
daTagSpring_HIO_c l_HIO;
|
||||
|
||||
void daTagSpring_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Spirit spring"
|
||||
ctx->genLabel("精霊の泉", 0);
|
||||
// "Draw range"
|
||||
ctx->genCheckBox("範囲描画", &draw_range, 1);
|
||||
// "Recovery time"
|
||||
ctx->genSlider("回復時間", &recovery_time, 0, 200);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagSpring_c::initBaseMtx() {
|
||||
setBaseMtx();
|
||||
}
|
||||
@@ -30,7 +62,11 @@ int daTagSpring_c::create() {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
fopAcM_GetParam(this);
|
||||
OS_REPORT("SPRING PARAM:%x\n", fopAcM_GetParam(this));
|
||||
#if DEBUG
|
||||
l_HIO.entryHIO("精霊の泉");
|
||||
#endif
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
@@ -49,40 +85,73 @@ int daTagSpring_c::execute() {
|
||||
|
||||
if (checkArea() && fopAcM_wt_c::waterCheck(&player_p->current.pos) &&
|
||||
(!dComIfGp_checkPlayerStatus0(0, 0x100000) &&
|
||||
fopAcM_wt_c::mWaterY > player_p->current.pos.y ||
|
||||
fopAcM_wt_c::getWaterY() > player_p->current.pos.y ||
|
||||
dComIfGp_checkPlayerStatus0(0, 0x100000)))
|
||||
{
|
||||
if (mTimer != 0) {
|
||||
mTimer--;
|
||||
} else {
|
||||
#if DEBUG
|
||||
mTimer = l_HIO.recovery_time;
|
||||
#else
|
||||
mTimer = 30;
|
||||
#endif
|
||||
dComIfGp_setItemLifeCount(1.0f, 1);
|
||||
}
|
||||
} else {
|
||||
#if DEBUG
|
||||
mTimer = l_HIO.recovery_time;
|
||||
#else
|
||||
mTimer = 30;
|
||||
#endif
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 daTagSpring_c::checkArea() {
|
||||
bool daTagSpring_c::checkArea() {
|
||||
fopAc_ac_c* player_p = daPy_getPlayerActorClass();
|
||||
return player_p->current.pos.absXZ(current.pos) < (scale.x * 1000);
|
||||
if (player_p->current.pos.absXZ(current.pos) < (scale.x * 1000.0f)) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int daTagSpring_c::draw() {
|
||||
#if DEBUG
|
||||
if (l_HIO.draw_range) {
|
||||
GXColor color = (GXColor){0, 0, 0xff, 0x80};
|
||||
dDbVw_drawCylinderXlu(current.pos, scale.x * 1000.0f, 100.0f, color, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagSpring_c::_delete() {
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagSpring_Draw(daTagSpring_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
static int daTagSpring_Execute(daTagSpring_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagSpring_Delete(daTagSpring_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagSpring_Create(daTagSpring_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,8 @@ int daTag_SSDrink_c::Delete() {
|
||||
}
|
||||
|
||||
int daTag_SSDrink_c::Execute() {
|
||||
if (chkEvent()) {
|
||||
int eventResult = chkEvent();
|
||||
if (eventResult) {
|
||||
if (mProcessFunc) {
|
||||
(this->*mProcessFunc)(0);
|
||||
}
|
||||
@@ -40,8 +41,9 @@ int daTag_SSDrink_c::Draw() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTag_SSDrink_c::getTypeFromParam() {
|
||||
switch (fopAcM_GetParamBit(this, 0, 4)) {
|
||||
u8 daTag_SSDrink_c::getTypeFromParam() {
|
||||
u8 param = fopAcM_GetParam(this) & 0xF;
|
||||
switch (param) {
|
||||
case 0:
|
||||
field_0x5D3 = 0x69;
|
||||
return 0;
|
||||
@@ -70,28 +72,18 @@ int daTag_SSDrink_c::getTypeFromParam() {
|
||||
}
|
||||
|
||||
u8 daTag_SSDrink_c::getSwitchFromParam() {
|
||||
return fopAcM_GetParamBit(this, 4, 8);
|
||||
u8 result = (fopAcM_GetParam(this) & 0xFF0) >> 4;
|
||||
return result;
|
||||
}
|
||||
|
||||
u16 daTag_SSDrink_c::getFlowNodeNum() {
|
||||
u16 num = home.angle.x;
|
||||
bool bVar1 = false;
|
||||
if (num == 0xFFFF || num == 0) {
|
||||
bVar1 = true;
|
||||
}
|
||||
|
||||
u16 num2;
|
||||
if (!bVar1) {
|
||||
num2 = num;
|
||||
} else {
|
||||
num2 = 0xFFFF;
|
||||
}
|
||||
|
||||
return num2 & 0xFFFF;
|
||||
u16 angleX = home.angle.x;
|
||||
return angleX == 0xFFFF || angleX == 0 ? 0xFFFF : angleX;
|
||||
}
|
||||
|
||||
u16 daTag_SSDrink_c::getValue() {
|
||||
return fopAcM_GetParamBit(this, 12, 16);
|
||||
u16 result = (fopAcM_GetParam(this) & 0xFFFF000) >> 12;
|
||||
return result;
|
||||
}
|
||||
|
||||
void daTag_SSDrink_c::restart() {
|
||||
@@ -117,7 +109,7 @@ int daTag_SSDrink_c::setProcess(ProcessFunc i_processFunc) {
|
||||
int retVal = 0;
|
||||
|
||||
if (checkProcess(i_processFunc)) {
|
||||
return 0;
|
||||
return retVal;
|
||||
} else {
|
||||
mEventType = 2;
|
||||
if (mProcessFunc) {
|
||||
@@ -167,7 +159,7 @@ int daTag_SSDrink_c::chkEvent() {
|
||||
}
|
||||
|
||||
int daTag_SSDrink_c::orderEvent() {
|
||||
if (!dComIfGp_getLinkPlayer()->checkWolf() && fopAcM_isSwitch(this, getSwitchFromParam()) &&
|
||||
if (!daPy_py_c::checkNowWolf() && fopAcM_isSwitch(this, getSwitchFromParam()) &&
|
||||
field_0x5D3 != 0x60 && getFlowNodeNum() != 0xFFFF)
|
||||
{
|
||||
attention_info.flags = (fopAc_AttnFlag_TALKREAD_e | fopAc_AttnFlag_SPEAK_e);
|
||||
@@ -176,7 +168,7 @@ int daTag_SSDrink_c::orderEvent() {
|
||||
}
|
||||
|
||||
if (attention_info.flags == (fopAc_AttnFlag_TALKREAD_e | fopAc_AttnFlag_SPEAK_e)) {
|
||||
if (fopAcM_searchPlayerDistanceXZ(this) <= 160.0f && fopAcM_seenPlayerAngleY() <= 0x2000) {
|
||||
if (fopAcM_searchPlayerDistanceXZ(this) <= 160.0f && fopAcM_seenPlayerAngleY(this) <= 0x2000) {
|
||||
attention_info.distances[fopAc_attn_TALK_e] = 0x9D;
|
||||
attention_info.distances[fopAc_attn_SPEAK_e] = 0x9D;
|
||||
eventInfo.onCondition(1);
|
||||
@@ -192,7 +184,7 @@ int daTag_SSDrink_c::wait(void* param_0) {
|
||||
if (!eventInfo.checkCommandCatch()) {
|
||||
if (fopAcM_isSwitch(this, getSwitchFromParam())) {
|
||||
if (fopAcM_searchPlayerDistanceXZ(this) <= 160.0f &&
|
||||
fopAcM_seenPlayerAngleY() <= 0x2000)
|
||||
fopAcM_seenPlayerAngleY(this) <= 0x2000)
|
||||
{
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
cXyz local_28 = attention_info.position - player->attention_info.position;
|
||||
|
||||
+193
-122
@@ -5,8 +5,25 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/actor/d_a_tag_statue_evt.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
|
||||
class daTagStatue_HIO_c : public mDoHIO_entry_c {
|
||||
public:
|
||||
daTagStatue_HIO_c();
|
||||
|
||||
void genMessage(JORMContext*);
|
||||
|
||||
f32 check_range;
|
||||
f32 event_trigger_range;
|
||||
u8 show_range;
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagStatue_HIO_c l_HIO;
|
||||
#endif
|
||||
|
||||
static int CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
daTagStatue_c* tag_statue = static_cast<daTagStatue_c*>(i_this);
|
||||
@@ -14,8 +31,9 @@ static int CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
}
|
||||
|
||||
// Returns ID of Owl Statue corresponding to tag
|
||||
static void* s_s_sub(void* i_proc, void* unused) {
|
||||
if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_CSTAF) {
|
||||
static void* s_s_sub(void* i_proc, void* param_1) {
|
||||
UNUSED(param_1);
|
||||
if (fopAcM_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_CSTAF) {
|
||||
return i_proc;
|
||||
}
|
||||
|
||||
@@ -36,15 +54,6 @@ static const u16 l_event_bit[6] = {
|
||||
dSv_event_flag_c::F_0812, /* N/A - N/A */
|
||||
};
|
||||
|
||||
void daTagStatue_c::setBaseMtx() {
|
||||
const cXyz& current_pos = fopAcM_GetPosition(this);
|
||||
mDoMtx_stack_c::transS(current_pos.x, 1.0f + current_pos.y, current_pos.z);
|
||||
const csXyz& shape_angle = *fopAcM_GetShapeAngle_p(this);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
|
||||
}
|
||||
|
||||
static char* l_arcName = "Obj_cs_f";
|
||||
|
||||
static u16 l_eff_id[3] = {
|
||||
@@ -74,19 +83,42 @@ static cull_box l_cull_box = {
|
||||
{300.0f, 400.0f, 300.0f} // Max
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
daTagStatue_HIO_c::daTagStatue_HIO_c() {
|
||||
check_range = 120.0f;
|
||||
event_trigger_range = 100.0f;
|
||||
show_range = 0;
|
||||
}
|
||||
|
||||
void daTagStatue_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Sky Character tag"
|
||||
ctx->genLabel("天空文字タグ", 0, 0);
|
||||
ctx->genCheckBox("範囲表示", &show_range, 1);
|
||||
// "Stone statue check range"
|
||||
ctx->genSlider("石像チェック範囲", &check_range, 0.0f, 1000.0f);
|
||||
// "Event trigger range"
|
||||
ctx->genSlider("イベント起動範囲", &event_trigger_range, 0.0f, 1000.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
void daTagStatue_c::setBaseMtx() {
|
||||
mDoMtx_stack_c::transS(current.pos.x, 1.0f + current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
cPhs__Step daTagStatue_c::Create() {
|
||||
if(fopAcM_isSwitch(this, getSwbit2())) {
|
||||
if (fopAcM_isSwitch(this, getSwbit2())) {
|
||||
// Player already obtained Sky Character from this tag
|
||||
setAction(ACTION_DEAD_e);
|
||||
mpGlowingSkyCharacterBrk->setFrame(0.0f);
|
||||
mpGlowingSkyCharacterBrk->setPlaySpeed(0.0f);
|
||||
}
|
||||
else {
|
||||
if(fopAcM_isSwitch(this, getSwbit())) {
|
||||
} else {
|
||||
if (fopAcM_isSwitch(this, getSwbit())) {
|
||||
setParticle();
|
||||
mpGlowingSkyCharacterBrk->setFrame(mpGlowingSkyCharacterBrk->getEndFrame());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
mpGlowingSkyCharacterBrk->setFrame(0.0f);
|
||||
mpGlowingSkyCharacterBrk->setPlaySpeed(0.0f);
|
||||
}
|
||||
@@ -94,49 +126,56 @@ cPhs__Step daTagStatue_c::Create() {
|
||||
setAction(ACTION_WAIT_e);
|
||||
}
|
||||
|
||||
mpPlatformCircleBtk->setFrame(static_cast<f32>(mSkyCharacterEventBitIdIndex));
|
||||
mpPlatformCircleBtk->setFrame(mSkyCharacterEventBitIdIndex);
|
||||
|
||||
initBaseMtx();
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, l_cull_box.min.x, l_cull_box.min.y, l_cull_box.min.z, l_cull_box.max.x, l_cull_box.max.y, l_cull_box.max.z);
|
||||
fopAcM_setCullSizeBox(this, l_cull_box.min.x, l_cull_box.min.y, l_cull_box.min.z,
|
||||
l_cull_box.max.x, l_cull_box.max.y, l_cull_box.max.z);
|
||||
|
||||
char* ev_arc_name = l_evArcName[mSkyCharacterEventBitIdIndex];
|
||||
|
||||
if(!ev_arc_name) {
|
||||
if (!l_evArcName[mSkyCharacterEventBitIdIndex]) {
|
||||
eventInfo.setArchiveName(l_arcName);
|
||||
}
|
||||
else {
|
||||
eventInfo.setArchiveName(ev_arc_name);
|
||||
} else {
|
||||
eventInfo.setArchiveName(l_evArcName[mSkyCharacterEventBitIdIndex]);
|
||||
}
|
||||
|
||||
mMapToolId = 255;
|
||||
|
||||
mEventId = dComIfGp_getPEvtManager()->getEventIdx(this, l_eventName[mSkyCharacterEventBitIdIndex], 0xFF);
|
||||
mEventId = (int)dComIfGp_getEventManager().
|
||||
getEventIdx(this, l_eventName[mSkyCharacterEventBitIdIndex], 0xFF);
|
||||
|
||||
mTreasureDemoItemId = -1;
|
||||
mItemId = -1;
|
||||
mOwlStatueId = -1;
|
||||
|
||||
return cPhs_LOADING_e;
|
||||
}
|
||||
|
||||
int daTagStatue_c::CreateHeap() {
|
||||
J3DModelData* model_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcName, 6));
|
||||
mpModel = mDoExt_J3DModel__create(model_data, 0x00080000, 0x11000284);
|
||||
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcName, 6));
|
||||
JUT_ASSERT(277, modelData != NULL)
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000284);
|
||||
|
||||
if(!mpModel) return 0;
|
||||
if (!mpModel) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
J3DAnmTextureSRTKey* btk = reinterpret_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(l_arcName, 12));
|
||||
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 12);
|
||||
JUT_ASSERT(291, pbtk != NULL);
|
||||
mpPlatformCircleBtk = new mDoExt_btkAnm();
|
||||
|
||||
|
||||
if(!mpPlatformCircleBtk || !mpPlatformCircleBtk->init(model_data, btk, 1, 0, 1.0f, 0, -1))
|
||||
if (!mpPlatformCircleBtk || !mpPlatformCircleBtk->init(modelData, pbtk, 1, 0, 1.0f, 0, -1)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
J3DAnmTevRegKey* brk = reinterpret_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes(l_arcName, 9));
|
||||
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 9);
|
||||
JUT_ASSERT(303, pbrk != NULL);
|
||||
mpGlowingSkyCharacterBrk = new mDoExt_brkAnm();
|
||||
|
||||
if(!mpGlowingSkyCharacterBrk || !mpGlowingSkyCharacterBrk->init(model_data, brk, 1, 0, 1.0f, 0, -1))
|
||||
if (!mpGlowingSkyCharacterBrk ||
|
||||
!mpGlowingSkyCharacterBrk->init(modelData, pbrk, 1, 0, 1.0f, 0, -1)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -144,40 +183,50 @@ int daTagStatue_c::CreateHeap() {
|
||||
cPhs__Step daTagStatue_c::create() {
|
||||
fopAcM_ct(this, daTagStatue_c);
|
||||
|
||||
mSkyCharacterEventBitIdIndex = fopAcM_GetParamBit(this, 8, 4);
|
||||
mSkyCharacterEventBitIdIndex = getType();
|
||||
|
||||
int phase;
|
||||
if(l_evArcName[mSkyCharacterEventBitIdIndex]) {
|
||||
if (l_evArcName[mSkyCharacterEventBitIdIndex]) {
|
||||
phase = dComIfG_resLoad(&mEvArcPhase, l_evArcName[mSkyCharacterEventBitIdIndex]);
|
||||
|
||||
if(phase != cPhs_COMPLEATE_e)
|
||||
if (phase != cPhs_COMPLEATE_e) {
|
||||
return static_cast<cPhs__Step>(phase);
|
||||
}
|
||||
}
|
||||
|
||||
phase = dComIfG_resLoad(&mArcPhase, l_arcName);
|
||||
if(phase == cPhs_COMPLEATE_e) {
|
||||
if(!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x1100))
|
||||
if (phase == cPhs_COMPLEATE_e) {
|
||||
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x1100)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
if(Create() == cPhs_INIT_e)
|
||||
if (Create() == cPhs_INIT_e) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
// "Sky Character tag"
|
||||
l_HIO.entryHIO("天空文字タグ");
|
||||
#endif
|
||||
}
|
||||
|
||||
return static_cast<cPhs__Step>(phase);
|
||||
}
|
||||
|
||||
int daTagStatue_c::execute() {
|
||||
if(static_cast<u32>(mOwlStatueId + (1 << 16)) == 0xFFFF) {
|
||||
base_process_class* found_owl_statue = fpcEx_Search(s_s_sub, this);
|
||||
if(found_owl_statue) {
|
||||
if (static_cast<u32>(mOwlStatueId + (1 << 16)) == 0xFFFF) {
|
||||
base_process_class* found_owl_statue = fpcM_Search(s_s_sub, this);
|
||||
if (found_owl_statue) {
|
||||
mOwlStatueId = fopAcM_GetID(found_owl_statue);
|
||||
// "Sky Character tag: a stone statue was discovered!"
|
||||
OS_REPORT("天空文字タグ:石像発見しました!ID=%d\n", mOwlStatueId);
|
||||
}
|
||||
}
|
||||
|
||||
event_proc_call();
|
||||
setBaseMtx();
|
||||
|
||||
if(mpGlowingSkyCharacterBrk) {
|
||||
if (mpGlowingSkyCharacterBrk) {
|
||||
mpGlowingSkyCharacterBrk->play();
|
||||
}
|
||||
|
||||
@@ -191,20 +240,21 @@ void daTagStatue_c::event_proc_call() {
|
||||
|
||||
(this->*l_func[mCurrentAction])();
|
||||
|
||||
// Form ring of light around platform and glowing Sky Character if Owl Statue has been moved far enough away
|
||||
if(checkOnEffect()) {
|
||||
// Form ring of light around platform and glowing Sky Character if Owl Statue has been moved far
|
||||
// enough away
|
||||
if (checkOnEffect()) {
|
||||
setParticle();
|
||||
mpGlowingSkyCharacterBrk->setPlaySpeed(1.0f);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
endParticle();
|
||||
mpGlowingSkyCharacterBrk->setPlaySpeed(-1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void daTagStatue_c::actionWait() {
|
||||
if(checkStartDemo()) {
|
||||
// Statue is far enough away and player is close enough to the tag for the cutscene to be ordered
|
||||
if (checkStartDemo()) {
|
||||
// Statue is far enough away and player is close enough to the tag for the cutscene to be
|
||||
// ordered
|
||||
setAction(ACTION_ORDER_EVENT_e);
|
||||
fopAcM_orderOtherEventId(this, mEventId, mMapToolId, 0xFFFF, 0, 1);
|
||||
eventInfo.onCondition(0x0002);
|
||||
@@ -212,13 +262,12 @@ void daTagStatue_c::actionWait() {
|
||||
}
|
||||
|
||||
void daTagStatue_c::actionOrderEvent() {
|
||||
if(eventInfo.checkCommandDemoAccrpt()) {
|
||||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||||
// Cutscene order accepted
|
||||
setAction(ACTION_EVENT_e);
|
||||
mDoAud_subBgmStart(Z2BGM_KOMONJO_GET_INTRO);
|
||||
Z2GetAudioMgr()->subBgmStart(Z2BGM_KOMONJO_GET_INTRO);
|
||||
demoProc();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// Cutscene order has not been accepted yet, attempt again
|
||||
fopAcM_orderOtherEventId(this, mEventId, mMapToolId, 0xFFFF, 0, 1);
|
||||
eventInfo.onCondition(0x0002);
|
||||
@@ -226,13 +275,12 @@ void daTagStatue_c::actionOrderEvent() {
|
||||
}
|
||||
|
||||
void daTagStatue_c::actionEvent() {
|
||||
if(dComIfGp_evmng_endCheck(mEventId)) {
|
||||
if (dComIfGp_evmng_endCheck(mEventId)) {
|
||||
setAction(ACTION_DEAD_e);
|
||||
dComIfGp_event_reset();
|
||||
fopAcM_onSwitch(this, getSwbit2());
|
||||
dComIfGs_onEventBit(l_event_bit[mSkyCharacterEventBitIdIndex]);
|
||||
}
|
||||
else {
|
||||
dComIfGs_onEventBit((u16)l_event_bit[mSkyCharacterEventBitIdIndex]);
|
||||
} else {
|
||||
demoProc();
|
||||
}
|
||||
}
|
||||
@@ -268,13 +316,19 @@ int daTagStatue_c::demoProc() {
|
||||
16384 // Ruined Theatre
|
||||
};
|
||||
|
||||
int act_id = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZEU(action_table), 0, 0);
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
|
||||
if(dComIfGp_evmng_getIsAddvance(mStaffId)) {
|
||||
int act_id =
|
||||
dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZEU(action_table), 0, 0);
|
||||
|
||||
int item;
|
||||
int* timer_p;
|
||||
fopAc_ac_c* found_owl_statue;
|
||||
if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
|
||||
switch(act_id) {
|
||||
case DEMO_ACTION_WAIT: {
|
||||
// Delay fading to black
|
||||
int* timer_p = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer");
|
||||
timer_p = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer");
|
||||
|
||||
if (!timer_p) {
|
||||
mTimer = 1;
|
||||
@@ -286,9 +340,11 @@ int daTagStatue_c::demoProc() {
|
||||
}
|
||||
case DEMO_ACTION_MOVE_OWL_STATUE:
|
||||
// Position and orient Owl Statue behind player
|
||||
if(mSkyCharacterEventBitIdIndex != TAG_LOCATION_GERUDO_DESERT && mSkyCharacterEventBitIdIndex != TAG_LOCATION_LAKE_HYLIA && mSkyCharacterEventBitIdIndex != TAG_LOCATION_RUINED_THEATRE) {
|
||||
fopAc_ac_c* found_owl_statue = reinterpret_cast<fopAc_ac_c*>(fpcEx_Search(s_s_sub, this));
|
||||
if(found_owl_statue) {
|
||||
if (mSkyCharacterEventBitIdIndex != TAG_LOCATION_GERUDO_DESERT &&
|
||||
mSkyCharacterEventBitIdIndex != TAG_LOCATION_LAKE_HYLIA &&
|
||||
mSkyCharacterEventBitIdIndex != TAG_LOCATION_RUINED_THEATRE) {
|
||||
found_owl_statue = reinterpret_cast<fopAc_ac_c*>(fpcM_Search(s_s_sub, this));
|
||||
if (found_owl_statue) {
|
||||
found_owl_statue->current.pos = l_statue_pos[mSkyCharacterEventBitIdIndex];
|
||||
found_owl_statue->shape_angle.y = l_statue_ang[mSkyCharacterEventBitIdIndex];
|
||||
fopAcM_OnStatus(found_owl_statue, 0x800);
|
||||
@@ -296,31 +352,31 @@ int daTagStatue_c::demoProc() {
|
||||
}
|
||||
break;
|
||||
case DEMO_ACTION_AWARD_ITEM:
|
||||
// If the player already has 5 Sky Characters, reward them with the completed Ancient Sky Book,
|
||||
// otherwise, reward another character
|
||||
int item;
|
||||
if(getLetterCount() == 5) {
|
||||
// If the player already has 5 Sky Characters, reward them with the completed
|
||||
// Ancient Sky Book, otherwise, reward another character
|
||||
if (getLetterCount() == 5) {
|
||||
item = fpcNm_ITEM_ANCIENT_DOCUMENT2;
|
||||
/* Sky character - Sky character 6 */
|
||||
dComIfGs_onEventBit(dSv_event_flag_c::F_0796);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
item = fpcNm_ITEM_AIR_LETTER;
|
||||
}
|
||||
|
||||
mTreasureDemoItemId = fopAcM_createItemForTrBoxDemo(&fopAcM_GetPosition(this), item, -1, fopAcM_GetRoomNo(this), 0, 0);
|
||||
mItemId =
|
||||
fopAcM_createItemForTrBoxDemo(¤t.pos, item, -1,
|
||||
fopAcM_GetRoomNo(this), 0, 0);
|
||||
|
||||
if(static_cast<u32>(mTreasureDemoItemId + (1 << 16)) != 0xFFFF) {
|
||||
dComIfGp_event_setItemPartnerId(mTreasureDemoItemId);
|
||||
JUT_ASSERT(580, mItemId != fpcM_ERROR_PROCESS_ID_e);
|
||||
|
||||
if (mItemId + (1 << 16) != 0xFFFF) {
|
||||
dComIfGp_event_setItemPartnerId(mItemId);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(act_id) {
|
||||
case DEMO_ACTION_WAIT:
|
||||
if(!cLib_calcTimer<u8>(&mTimer)) {
|
||||
if (!cLib_calcTimer<u8>(&mTimer)) {
|
||||
dComIfGp_evmng_cutEnd(mStaffId);
|
||||
}
|
||||
break;
|
||||
@@ -336,16 +392,18 @@ int daTagStatue_c::demoProc() {
|
||||
}
|
||||
|
||||
void daTagStatue_c::setParticle() {
|
||||
for(int i = 0; i < 3; i++) {
|
||||
if(!mpLightRingEmitters[i]) {
|
||||
mpLightRingEmitters[i] = dComIfGp_particle_set(l_eff_id[i], ¤t.pos, &home.angle, &scale);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (!mpLightRingEmitters[i]) {
|
||||
mpLightRingEmitters[i] =
|
||||
dComIfGp_particle_set(l_eff_id[i], ¤t.pos, &home.angle, &scale, 0xff, NULL,
|
||||
-1, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void daTagStatue_c::endParticle() {
|
||||
for(int i = 0; i < 3; i++) {
|
||||
if(mpLightRingEmitters[i]) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (mpLightRingEmitters[i]) {
|
||||
mpLightRingEmitters[i]->becomeInvalidEmitter();
|
||||
mpLightRingEmitters[i]->quitImmortalEmitter();
|
||||
mpLightRingEmitters[i] = NULL;
|
||||
@@ -353,48 +411,48 @@ void daTagStatue_c::endParticle() {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if statue is far enough away from the Sky Character platform and if player is close enough to the tag for the cutscene
|
||||
// of obtaining a Sky Character to be ordered
|
||||
// Check if statue is far enough away from the Sky Character platform and if player is close enough
|
||||
// to the tag for the cutscene of obtaining a Sky Character to be ordered
|
||||
BOOL daTagStatue_c::checkStartDemo() {
|
||||
const fopAc_ac_c* const player = dComIfGp_getPlayer(0);
|
||||
const fopAc_ac_c* const player = daPy_getPlayerActorClass();
|
||||
|
||||
if(!checkOnEffect()) {
|
||||
if (!checkOnEffect()) {
|
||||
// Owl Statue is not far enough away from tag
|
||||
return 0;
|
||||
}
|
||||
|
||||
const f32 tag_distance_to_player = sqrtf(PSVECSquareDistance(&player->current.pos, ¤t.pos));
|
||||
#if DEBUG
|
||||
#define TAG_STATUE_EVENT_TRIGGER_RANGE l_HIO.event_trigger_range
|
||||
#else
|
||||
#define TAG_STATUE_EVENT_TRIGGER_RANGE 100.0f
|
||||
#endif
|
||||
|
||||
return (tag_distance_to_player < 100.0f);
|
||||
if (player->current.pos.abs(current.pos) < TAG_STATUE_EVENT_TRIGGER_RANGE) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Return whether the owl statue has moved far enough away (in the horizontal plane) from the platform where the Sky Character is obtained
|
||||
// in order for its glowing effects to occur and the cutscene to be ordered
|
||||
// Return whether the owl statue has moved far enough away (in the horizontal plane) from the
|
||||
// platform where the Sky Character is obtained in order for its glowing effects to occur and the
|
||||
// cutscene to be ordered
|
||||
BOOL daTagStatue_c::checkOnEffect() {
|
||||
BOOL is_switch = fopAcM_isSwitch(this, getSwbit2());
|
||||
if(!is_switch && static_cast<u32>(mOwlStatueId + (1 << 16)) != 0xFFFF) {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
if (!fopAcM_isSwitch(this, getSwbit2()) &&
|
||||
static_cast<u32>(mOwlStatueId + (1 << 16)) != 0xFFFF) {
|
||||
fopAc_ac_c* found_owl_statue = fopAcM_SearchByID(mOwlStatueId);
|
||||
if(found_owl_statue) {
|
||||
Vec statue_tag_xy_pos;
|
||||
Vec found_owl_statue_xy_pos;
|
||||
if (found_owl_statue) {
|
||||
#if DEBUG
|
||||
#define TAG_STATUE_CHECK_RANGE l_HIO.check_range
|
||||
#else
|
||||
#define TAG_STATUE_CHECK_RANGE 120.0f
|
||||
#endif
|
||||
|
||||
const f32 found_owl_statue_z = fopAcM_GetPosition(found_owl_statue).z;
|
||||
const f32 found_owl_statue_x = fopAcM_GetPosition(found_owl_statue).x;
|
||||
found_owl_statue_xy_pos.x = found_owl_statue_x;
|
||||
found_owl_statue_xy_pos.y = 0.0f;
|
||||
found_owl_statue_xy_pos.z = found_owl_statue_z;
|
||||
|
||||
const f32 statue_tag_z = fopAcM_GetPosition(this).z;
|
||||
const f32 statue_tag_x = fopAcM_GetPosition(this).x;
|
||||
statue_tag_xy_pos.x = statue_tag_x;
|
||||
statue_tag_xy_pos.y = 0.0f;
|
||||
statue_tag_xy_pos.z = statue_tag_z;
|
||||
|
||||
const f32 distance_between_statue_and_tag = sqrtf(PSVECSquareDistance(&found_owl_statue_xy_pos, &statue_tag_xy_pos));
|
||||
|
||||
if(distance_between_statue_and_tag > 120.0f) return TRUE;
|
||||
}
|
||||
else {
|
||||
if (found_owl_statue->current.pos.absXZ(current.pos) > TAG_STATUE_CHECK_RANGE) {
|
||||
return TRUE;
|
||||
}
|
||||
} else {
|
||||
// No Owl Statue found, platform cannot be covered
|
||||
return TRUE;
|
||||
}
|
||||
@@ -403,21 +461,20 @@ BOOL daTagStatue_c::checkOnEffect() {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s32 daTagStatue_c::getLetterCount() {
|
||||
s32 numLetters = 0;
|
||||
for(int i = 0; i < 6; i++) {
|
||||
if(dComIfGs_isEventBit(l_event_bit[i])) {
|
||||
int daTagStatue_c::getLetterCount() {
|
||||
int numLetters = 0;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (dComIfGs_isEventBit((u16)l_event_bit[i])) {
|
||||
numLetters++;
|
||||
}
|
||||
}
|
||||
|
||||
return numLetters;
|
||||
return numLetters;
|
||||
}
|
||||
|
||||
int daTagStatue_c::draw() {
|
||||
dScnKy_env_light_c* env_light = dKy_getEnvlight();
|
||||
env_light->settingTevStruct(0, ¤t.pos, &tevStr);
|
||||
env_light->setLightTevColorType_MAJI(mpModel, &tevStr);
|
||||
g_env_light.settingTevStruct(0, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
|
||||
|
||||
dComIfGd_setListBG();
|
||||
|
||||
@@ -429,32 +486,46 @@ int daTagStatue_c::draw() {
|
||||
|
||||
dComIfGd_setList();
|
||||
|
||||
#if DEBUG
|
||||
if (l_HIO.show_range) {
|
||||
GXColor color1 = (GXColor){0xff, 0, 0, 0xff};
|
||||
GXColor color2 = (GXColor){0, 0, 0xff, 0xff};
|
||||
dDbVw_drawCircleXlu(current.pos, l_HIO.check_range, color1, 1, 12);
|
||||
dDbVw_drawCircleXlu(current.pos, l_HIO.event_trigger_range, color2, 1, 12);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int daTagStatue_c::_delete() {
|
||||
endParticle();
|
||||
dComIfG_resDelete(&mArcPhase, l_arcName);
|
||||
if(l_evArcName[mSkyCharacterEventBitIdIndex]) {
|
||||
if (l_evArcName[mSkyCharacterEventBitIdIndex]) {
|
||||
dComIfG_resDelete(&mEvArcPhase, l_evArcName[mSkyCharacterEventBitIdIndex]);
|
||||
}
|
||||
#if DEBUG
|
||||
l_HIO.removeHIO();
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagStatue_Draw(daTagStatue_c* i_this) {
|
||||
static int daTagStatue_Draw(daTagStatue_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
}
|
||||
|
||||
static int daTagStatue_Execute(daTagStatue_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static int daTagStatue_Delete(daTagStatue_c* i_this) {
|
||||
fopAcM_RegisterDeleteID(i_this, "Sample");
|
||||
return i_this->_delete();
|
||||
}
|
||||
|
||||
static int daTagStatue_Create(daTagStatue_c* i_this) {
|
||||
fopAcM_RegisterCreateID(i_this, "Sample");
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,18 +5,25 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_stream.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
#include "d/actor/d_a_tag_stream.h"
|
||||
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_s_play.h"
|
||||
|
||||
int daTagStream_c::create() {
|
||||
fopAcM_ct(this, daTagStream_c);
|
||||
|
||||
mPriority = fopAcM_GetParam(this) >> 8;
|
||||
mPriority = (fopAcM_GetParam(this) >> 8) & 0xFF;
|
||||
mPower = fopAcM_GetParam(this);
|
||||
field_0x56b = fopAcM_GetParam(this) >> 16;
|
||||
field_0x56b = (fopAcM_GetParam(this) >> 16) & 0xFF;
|
||||
|
||||
fopAcM_GetParam(this) >> 24 != 0 ? mParameters = 0 : mParameters = 1;
|
||||
if ((fopAcM_GetParam(this) >> 24) != 0) {
|
||||
mParameters = 0;
|
||||
} else {
|
||||
mParameters = 1;
|
||||
}
|
||||
|
||||
scale.x *= 100.0f;
|
||||
scale.y *= 100.0f;
|
||||
@@ -49,18 +56,17 @@ int daTagStream_c::create() {
|
||||
} else {
|
||||
m_top = this;
|
||||
}
|
||||
|
||||
f32 float1 = cM_scos(shape_angle.y) * cM_scos(shape_angle.x);
|
||||
f32 float2 = -cM_ssin(shape_angle.x);
|
||||
f32 float3 = cM_ssin(shape_angle.y) * cM_scos(shape_angle.x);
|
||||
|
||||
speed.set(float3,float2,float1);
|
||||
speed.set(cM_ssin(shape_angle.y) * cM_scos(shape_angle.x), -cM_ssin(shape_angle.x),
|
||||
cM_scos(shape_angle.y) * cM_scos(shape_angle.x));
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
static int daTagStream_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagStream_c*>(i_this)->create();
|
||||
daTagStream_c* stream = static_cast<daTagStream_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return stream->create();
|
||||
}
|
||||
|
||||
daTagStream_c::~daTagStream_c() {
|
||||
@@ -78,6 +84,7 @@ daTagStream_c::~daTagStream_c() {
|
||||
};
|
||||
|
||||
static int daTagStream_Delete(daTagStream_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagStream_c();
|
||||
return 1;
|
||||
}
|
||||
@@ -96,8 +103,33 @@ static int daTagStream_Execute(daTagStream_c* i_this) {
|
||||
return i_this->execute();
|
||||
}
|
||||
|
||||
static bool daTagStream_Draw(daTagStream_c* param_0) {
|
||||
return true;
|
||||
static int daTagStream_Draw(daTagStream_c* i_this) {
|
||||
#if DEBUG
|
||||
if (UREG_S(9) != 0 && i_this->checkStreamOn()) {
|
||||
cXyz vertices[8];
|
||||
vertices[0].set(-i_this->scale.x, i_this->scale.y, -i_this->scale.z);
|
||||
vertices[1].set(i_this->scale.x, vertices[0].y, vertices[0].z);
|
||||
vertices[2].set(vertices[0].x, vertices[0].y, i_this->scale.z);
|
||||
vertices[3].set(vertices[1].x, vertices[0].y, vertices[2].z);
|
||||
vertices[4].set(vertices[0].x, 0.0f, vertices[0].z);
|
||||
vertices[5].set(vertices[1].x, 0.0f, vertices[1].z);
|
||||
vertices[6].set(vertices[2].x, 0.0f, vertices[2].z);
|
||||
vertices[7].set(vertices[3].x, 0.0f, vertices[3].z);
|
||||
|
||||
mDoMtx_stack_c::transS(i_this->current.pos);
|
||||
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(vertices); i++) {
|
||||
mDoMtx_stack_c::multVec(&vertices[i], &vertices[i]);
|
||||
}
|
||||
|
||||
static GXColor color = {0xff, 0, 0xff, 0x80};
|
||||
|
||||
dDbVw_drawCube8pXlu(vertices, color);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static actor_method_class l_daTagStream_Method = {
|
||||
|
||||
@@ -52,12 +52,15 @@ static int daTag_Telop_IsDelete(daTag_Telop_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTag_Telop_Delete(daTag_Telop_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTag_Telop_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTag_Telop_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTag_Telop_c*>(i_this)->create();
|
||||
daTag_Telop_c* telop = static_cast<daTag_Telop_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return telop->create();
|
||||
}
|
||||
|
||||
static actor_method_class l_daTag_Telop_Method = {
|
||||
|
||||
@@ -6,12 +6,40 @@
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
|
||||
#include "d/actor/d_a_tag_theB_hint.h"
|
||||
#include "d/actor/d_a_npc_theB.h"
|
||||
|
||||
int daTagTheBHint_c::create() {
|
||||
fopAcM_ct(this, daTagTheBHint_c);
|
||||
field_0x568 = std::pow(scale.x * 100.0f,2.0f);
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
int daTagTheBHint_c::execute() {
|
||||
if (fopAcM_isSwitch(this, getSwitchNo())) {
|
||||
fopAcM_delete(this);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (fopAcM_searchPlayerDistanceXZ2(this) < field_0x568) {
|
||||
daNpcTheB_c* the_b = (daNpcTheB_c*)fpcM_SearchByName(PROC_NPC_THEB);
|
||||
if (the_b) {
|
||||
int roomNo = getRoomNo() == 0xff ? fopAcM_GetRoomNo(this) : getRoomNo();
|
||||
|
||||
the_b->setHintEvent(getMessageNo(), getLinkID(), roomNo);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int daTagTheBHint_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagTheBHint_c*>(i_this)->create();
|
||||
daTagTheBHint_c* theBHint = static_cast<daTagTheBHint_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return theBHint->create();
|
||||
}
|
||||
|
||||
static int daTagTheBHint_Delete(daTagTheBHint_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagTheBHint_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -45,12 +45,13 @@ void daTagWrHowl_c::init() {
|
||||
}
|
||||
|
||||
bool daTagWrHowl_c::chkWlfInTag() {
|
||||
if (dComIfGp_getPlayer(0) == NULL) {
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
if (player == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (daPy_py_c::checkNowWolf()) {
|
||||
cXyz player_pos = dComIfGp_getPlayer(0)->current.pos;
|
||||
cXyz player_pos = player->current.pos;
|
||||
if (player_pos.abs2(current.pos) < field_0x570) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ static int daTagWatchGe_IsDelete(daTagWatchGe_c* i_this) {
|
||||
}
|
||||
|
||||
static int daTagWatchGe_Delete(daTagWatchGe_c* i_this) {
|
||||
fopAcM_RegisterDeleteID(i_this, "Tag_WatchGe");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,25 +7,113 @@
|
||||
|
||||
#include "d/actor/d_a_tag_waterfall.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_debug_viewer.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "f_op/f_op_camera_mng.h"
|
||||
|
||||
static u32 m_master_id = static_cast<u32>(0xFFFFFFFF);
|
||||
|
||||
daTagWaterFall_HIO_c::daTagWaterFall_HIO_c() {
|
||||
field_0x04 = -1;
|
||||
mBaseFogNear = 0.0f;
|
||||
mBaseFogFar = 10000.0f;
|
||||
mColorBlendStepDivisor = 3.0f;
|
||||
mShouldModifyFog = false;
|
||||
field_0x14 = 0;
|
||||
field_0x15 = 0;
|
||||
field_0x18 = 0.0f;
|
||||
field_0x1C = 0.0f;
|
||||
field_0x20 = 0.0f;
|
||||
child = -1;
|
||||
base_fog_far = 0.0f;
|
||||
base_fog_near = 10000.0f;
|
||||
color_blend_step_divisor = 3.0f;
|
||||
enable_fog_adjust = false;
|
||||
draw_ellipse = 0;
|
||||
enable_ellipse_adjust = 0;
|
||||
ellipse_radius_a = 0.0f;
|
||||
ellipse_radius_b = 0.0f;
|
||||
ellipse_rotate = 0.0f;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
void daTagWaterFall_HIO_c::genMessage(JORMContext* ctx) {
|
||||
// "Zora river waterfall"
|
||||
ctx->genLabel("ゾーラ川の滝", 0x80000001);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
|
||||
// "Fog adjustment parameters"
|
||||
ctx->genLabel("フォグ調整パラメータ", 0x80000001);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
// "Fog adjustment ON?"
|
||||
ctx->genCheckBox("フォグ調整ON?", &enable_fog_adjust, 0x1);
|
||||
// "Near direct value"
|
||||
ctx->genSlider("near直値", &base_fog_far, -100000.0f, 100000.0f);
|
||||
// "Far direct value"
|
||||
ctx->genSlider("far直値", &base_fog_near, -100000.0f, 100000.0f);
|
||||
// "Switching time"
|
||||
ctx->genSlider("切り替わり時間", &color_blend_step_divisor, 0.0f, 100.0f);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
|
||||
// "Ellipse adjustment parameters"
|
||||
ctx->genLabel("楕円調整パラメータ", 0x80000001);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
// "Ellipse display"
|
||||
ctx->genCheckBox("楕円表示", &draw_ellipse, 0x1);
|
||||
ctx->genLabel("-", 0x80000001);
|
||||
// "Ellipse adjustment ON?"
|
||||
ctx->genCheckBox("楕円調整ON?", &enable_ellipse_adjust, 0x1);
|
||||
// "Ellipse X radius"
|
||||
ctx->genSlider("楕円X半径", &ellipse_radius_a, 0.0f, 10000.0f);
|
||||
// "Ellipse Z radius"
|
||||
ctx->genSlider("楕円Z半径", &ellipse_radius_b, 0.0f, 10000.0f);
|
||||
// "Ellipse rotation"
|
||||
ctx->genSlider("楕円回転", &ellipse_rotate, 0.0f, 65536.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool masterWaterfallTagExists;
|
||||
|
||||
static u32 m_master_id = 0xFFFFFFFF;
|
||||
|
||||
static daTagWaterFall_HIO_c l_HIO;
|
||||
|
||||
int daTagWaterFall_c::draw() {
|
||||
#if DEBUG
|
||||
f32 paramX;
|
||||
f32 paramY;
|
||||
f32 rotCos;
|
||||
f32 rotSin;
|
||||
s16 angle;
|
||||
if (l_HIO.draw_ellipse || l_HIO.enable_ellipse_adjust) {
|
||||
angle = 0;
|
||||
cXyz startPos = current.pos;
|
||||
if (!l_HIO.draw_ellipse) {
|
||||
paramX = l_HIO.ellipse_radius_a * cM_ssin(angle);
|
||||
paramY = l_HIO.ellipse_radius_b * cM_scos(angle);
|
||||
rotCos = cM_scos(l_HIO.ellipse_rotate);
|
||||
rotSin = cM_ssin(l_HIO.ellipse_rotate);
|
||||
} else {
|
||||
paramX = mCylinderRadiusA * cM_ssin(angle);
|
||||
paramY = mCylinderRadiusB * cM_scos(angle);
|
||||
rotCos = cM_scos(shape_angle.y);
|
||||
rotSin = cM_ssin(shape_angle.y);
|
||||
}
|
||||
|
||||
startPos.x += paramX * rotCos + paramY * rotSin;
|
||||
startPos.z += -paramX * rotSin + paramY * rotCos;
|
||||
|
||||
cXyz endPos;
|
||||
for (int i = 0; i < 0x10; i++) {
|
||||
angle += (s16)0x1000;
|
||||
endPos = current.pos;
|
||||
if (l_HIO.draw_ellipse == 0) {
|
||||
paramX = l_HIO.ellipse_radius_a * cM_ssin(angle);
|
||||
paramY = l_HIO.ellipse_radius_b * cM_scos(angle);
|
||||
} else {
|
||||
paramX = mCylinderRadiusA * cM_ssin(angle);
|
||||
paramY = mCylinderRadiusB * cM_scos(angle);
|
||||
}
|
||||
endPos.x += paramX * rotCos + paramY * rotSin;
|
||||
endPos.z += -paramX * rotSin + paramY * rotCos;
|
||||
|
||||
dDbVw_drawLineXlu(startPos, endPos, (GXColor){0, 0xff, 0, 0xff}, 1, 0xc);
|
||||
|
||||
startPos = endPos;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -33,18 +121,14 @@ static int daTagWaterFall_Draw(daTagWaterFall_c* i_this) {
|
||||
return i_this->draw();
|
||||
}
|
||||
|
||||
void* s_waterfall(void* pProc, void* unused) {
|
||||
if (fopAc_IsActor(pProc)) {
|
||||
if (fopAcM_GetName(pProc) == PROC_Tag_WaterFall) {
|
||||
daTagWaterFall_c* pProcWaterfallTag = static_cast<daTagWaterFall_c*>(pProc);
|
||||
void* s_waterfall(void* pProc, void* param_1) {
|
||||
UNUSED(param_1);
|
||||
|
||||
s32 id = fpcM_GetID(pProc);
|
||||
if (!fpcM_IsCreating(id)) {
|
||||
if (pProcWaterfallTag->checkHitWaterFallCamera()) {
|
||||
return pProc;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fopAcM_IsActor(pProc) &&
|
||||
fopAcM_GetName(pProc) == PROC_Tag_WaterFall &&
|
||||
!fpcM_IsCreating(fopAcM_GetID(pProc)) &&
|
||||
static_cast<daTagWaterFall_c*>(pProc)->checkHitWaterFallCamera()) {
|
||||
return pProc;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -56,67 +140,69 @@ f32 daTagWaterFall_c::getEllipseY(f32 x) {
|
||||
|
||||
f32 ellipseRadiusB = mCylinderRadiusB;
|
||||
f32 ellipseRadiusA = mCylinderRadiusA;
|
||||
f32 ellipseRadiusBSquared = ellipseRadiusB * ellipseRadiusB;
|
||||
f32 ellipseRadiusASquared = ellipseRadiusA * ellipseRadiusA;
|
||||
|
||||
f32 ellipseYSquared_OverBSquared = (1.0f - ((x * x) / (ellipseRadiusASquared)));
|
||||
f32 ellipseYSquared = (ellipseRadiusBSquared)*ellipseYSquared_OverBSquared;
|
||||
#if DEBUG
|
||||
if (l_HIO.enable_ellipse_adjust) {
|
||||
ellipseRadiusB = l_HIO.ellipse_radius_b;
|
||||
ellipseRadiusA = l_HIO.ellipse_radius_a;
|
||||
}
|
||||
#endif
|
||||
|
||||
return JMAFastSqrt(ellipseYSquared);
|
||||
f32 result = JMAFastSqrt((ellipseRadiusB * ellipseRadiusB) *
|
||||
(1.0f - ((x * x) / (ellipseRadiusA * ellipseRadiusA))));
|
||||
return result;
|
||||
}
|
||||
|
||||
bool daTagWaterFall_c::checkHitWaterFall(cXyz objPos) {
|
||||
Vec dst;
|
||||
cXyz dst;
|
||||
|
||||
s16 angleY = shape_angle.y;
|
||||
f32 ellipseRadiusA = mCylinderRadiusA;
|
||||
|
||||
mDoMtx_stack_c::YrotS(-fopAcM_GetShapeAngle_p(this)->y);
|
||||
#if DEBUG
|
||||
if (l_HIO.enable_ellipse_adjust) {
|
||||
angleY = l_HIO.ellipse_rotate;
|
||||
ellipseRadiusA = l_HIO.ellipse_radius_a;
|
||||
}
|
||||
#endif
|
||||
|
||||
const cXyz& waterfallTagPos = fopAcM_GetPosition(this);
|
||||
mDoMtx_stack_c::transM(-waterfallTagPos.x, -waterfallTagPos.y, -waterfallTagPos.z);
|
||||
mDoMtx_stack_c::YrotS(-angleY);
|
||||
|
||||
mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z);
|
||||
|
||||
mDoMtx_stack_c::multVec(&objPos, &dst);
|
||||
|
||||
if (fabsf(dst.x) < ellipseRadiusA) {
|
||||
const f32 absEllipseY = fabsf(getEllipseY(dst.x));
|
||||
if (fabsf(dst.z) < absEllipseY) {
|
||||
if (waterfallTagPos.y < objPos.y) {
|
||||
// Instruction reordering occurs when mCylinderHeight == 0.0f is used
|
||||
if (!mCylinderHeight || (waterfallTagPos.y + mCylinderHeight) > objPos.y) {
|
||||
return true;
|
||||
}
|
||||
f32 absEllipseY;
|
||||
if (std::abs(dst.x) < ellipseRadiusA) {
|
||||
absEllipseY = std::abs(getEllipseY(dst.x));
|
||||
if (std::abs(dst.z) < absEllipseY && current.pos.y < objPos.y) {
|
||||
// Instruction reordering occurs when mCylinderHeight == 0.0f is used
|
||||
if (!mCylinderHeight || (current.pos.y + mCylinderHeight) > objPos.y) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool daTagWaterFall_c::checkHitWaterFallCamera() {
|
||||
const camera_class* camera = dComIfGp_getCamera(0);
|
||||
return checkHitWaterFall(camera->lookat.eye);
|
||||
return checkHitWaterFall(dComIfGp_getCamera(0)->lookat.eye);
|
||||
}
|
||||
|
||||
static bool masterWaterfallTagExists;
|
||||
|
||||
static daTagWaterFall_HIO_c l_HIO;
|
||||
|
||||
int daTagWaterFall_c::execute() {
|
||||
u32 masterId = m_master_id;
|
||||
u32 waterfallId = fpcM_GetID(this);
|
||||
|
||||
if (masterId == waterfallId) {
|
||||
if (m_master_id == fopAcM_GetID(this)) {
|
||||
if (mFrameCountdown) {
|
||||
const dScnKy_env_light_c* const envLight = dKy_getEnvlight();
|
||||
mFogNear = envLight->mFogNear;
|
||||
mFogFar = envLight->mFogFar;
|
||||
mFrameCountdown--;
|
||||
mColpat = envLight->mColpatWeather;
|
||||
mColpat = g_env_light.mColpatWeather;
|
||||
mColorBlend = 1.0f;
|
||||
} else {
|
||||
bool currCameraInWaterfall = false;
|
||||
if (fpcEx_Search(s_waterfall, this)) {
|
||||
currCameraInWaterfall = true;
|
||||
u8 currCameraInWaterfall = FALSE;
|
||||
if (fpcM_Search(s_waterfall, this)) {
|
||||
currCameraInWaterfall = TRUE;
|
||||
}
|
||||
|
||||
if (!currCameraInWaterfall) {
|
||||
@@ -132,7 +218,7 @@ int daTagWaterFall_c::execute() {
|
||||
mPrevCameraInWaterfall = currCameraInWaterfall;
|
||||
}
|
||||
|
||||
cLib_chaseF(&mColorBlend, 1.0f, 1.0f / l_HIO.mColorBlendStepDivisor);
|
||||
cLib_chaseF(&mColorBlend, 1.0f, 1.0f / l_HIO.color_blend_step_divisor);
|
||||
|
||||
if (!mPrevCameraInWaterfall) {
|
||||
dKy_custom_colset(7, mColpat, mColorBlend);
|
||||
@@ -141,23 +227,24 @@ int daTagWaterFall_c::execute() {
|
||||
}
|
||||
|
||||
f32 instanceFogMultiplier;
|
||||
f32 HIOFogMultiplier;
|
||||
f32 hioFogMultiplier;
|
||||
|
||||
if (l_HIO.mShouldModifyFog) {
|
||||
if (l_HIO.enable_fog_adjust) {
|
||||
if (mPrevCameraInWaterfall) {
|
||||
instanceFogMultiplier = 1.0f - mColorBlend;
|
||||
HIOFogMultiplier = mColorBlend;
|
||||
hioFogMultiplier = mColorBlend;
|
||||
} else {
|
||||
instanceFogMultiplier = mColorBlend;
|
||||
HIOFogMultiplier = 1.0f - mColorBlend;
|
||||
hioFogMultiplier = 1.0f - mColorBlend;
|
||||
}
|
||||
|
||||
f32 fogParam0 =
|
||||
(mFogNear * instanceFogMultiplier) + (l_HIO.mBaseFogNear * HIOFogMultiplier);
|
||||
f32 fogParam1 =
|
||||
(mFogFar * instanceFogMultiplier) + (l_HIO.mBaseFogFar * HIOFogMultiplier);
|
||||
|
||||
dKy_fog_startendz_set(fogParam0, fogParam1, 1.0f);
|
||||
dKy_fog_startendz_set(
|
||||
(mFogNear * instanceFogMultiplier) +
|
||||
(l_HIO.base_fog_far * hioFogMultiplier),
|
||||
(mFogFar * instanceFogMultiplier) +
|
||||
(l_HIO.base_fog_near * hioFogMultiplier),
|
||||
1.0f
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,7 +264,12 @@ static int daTagWaterFall_IsDelete(daTagWaterFall_c* i_this) {
|
||||
int daTagWaterFall_c::_delete() {
|
||||
if (mIsMasterWaterfallTag) {
|
||||
masterWaterfallTagExists = false;
|
||||
|
||||
#if DEBUG
|
||||
mDoHIO_deleteChild(l_HIO.child);
|
||||
#endif
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -189,37 +281,41 @@ static int daTagWaterFall_Delete(daTagWaterFall_c* i_this) {
|
||||
cPhs__Step daTagWaterFall_c::create() {
|
||||
fopAcM_ct(this, daTagWaterFall_c);
|
||||
|
||||
OS_REPORT("Tag_WaterFall PARAM %x %x %x \n", fopAcM_GetParam(this), current.angle.x, current.angle.y);
|
||||
|
||||
if (masterWaterfallTagExists == false) {
|
||||
masterWaterfallTagExists = true;
|
||||
mIsMasterWaterfallTag = 1;
|
||||
l_HIO.field_0x04 = -1;
|
||||
#if DEBUG
|
||||
// "Zora river waterfall"
|
||||
l_HIO.child = mDoHIO_createChild("ゾーラ川の滝", &l_HIO);
|
||||
#else
|
||||
l_HIO.child = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
mCylinderRadiusA = static_cast<f32>(fpcM_GetParam(this) & 0x0000FFFF);
|
||||
mCylinderRadiusA = static_cast<f32>(fopAcM_GetParam(this) & 0x0000FFFF);
|
||||
|
||||
if (mCylinderRadiusA < 0.0f) {
|
||||
mCylinderRadiusB = 0.0f;
|
||||
}
|
||||
|
||||
mCylinderHeight = static_cast<f32>((fpcM_GetParam(this) & 0xFFFF0000) >> 16);
|
||||
mCylinderHeight = static_cast<f32>((fopAcM_GetParam(this) >> 16) & 0xFFFF);
|
||||
|
||||
if (mCylinderHeight < 0.0f) {
|
||||
mCylinderHeight = 0.0f;
|
||||
}
|
||||
|
||||
mCylinderRadiusB = static_cast<f32>((fopAcM_GetAngle_p(this)->x & 0x0000FFFF));
|
||||
mCylinderRadiusB = static_cast<f32>(current.angle.x & 0xFFFF);
|
||||
|
||||
if (mCylinderRadiusB <= 0.0f) {
|
||||
mCylinderRadiusB = mCylinderRadiusA;
|
||||
}
|
||||
|
||||
fopAcM_GetShapeAngle_p(this)->x = 0;
|
||||
fopAcM_GetAngle_p(this)->x = 0;
|
||||
current.angle.x = shape_angle.x = 0;
|
||||
|
||||
if (m_master_id + (1 << 16) == 0xFFFF) {
|
||||
u32 id = fopAcM_GetID(this);
|
||||
|
||||
m_master_id = id;
|
||||
m_master_id = fopAcM_GetID(this);
|
||||
|
||||
mColorBlend = 0.0f;
|
||||
mFrameCountdown = 30;
|
||||
@@ -232,8 +328,6 @@ static int daTagWaterFall_Create(daTagWaterFall_c* i_this) {
|
||||
return i_this->create();
|
||||
}
|
||||
|
||||
daTagWaterFall_HIO_c::~daTagWaterFall_HIO_c() {}
|
||||
|
||||
static actor_method_class l_daTagWaterFall_Method = {
|
||||
(process_method_func)daTagWaterFall_Create, (process_method_func)daTagWaterFall_Delete,
|
||||
(process_method_func)daTagWaterFall_Execute, (process_method_func)daTagWaterFall_IsDelete,
|
||||
|
||||
@@ -55,8 +55,8 @@ int daTagYami_c::create() {
|
||||
} else {
|
||||
on_CoHit();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
@@ -72,7 +72,8 @@ int daTagYami_c::Execute() {
|
||||
|
||||
void daTagYami_c::calcCoC(cXyz& i_dst) {
|
||||
cXyz base(0.0f, 0.0f, 430.0f);
|
||||
mDoMtx_stack_c::ZXYrotS(csXyz(0, -0x7f96, 0));
|
||||
csXyz sp10(0, -0x7f96, 0);
|
||||
mDoMtx_stack_c::ZXYrotS(sp10);
|
||||
mDoMtx_stack_c::multVec(&base, &base);
|
||||
i_dst = home.pos + base;
|
||||
}
|
||||
@@ -87,14 +88,12 @@ u32 daTagYami_c::chk_CoHit() {
|
||||
}
|
||||
|
||||
f32 coR = getCoR();
|
||||
f32 plDist = getPlDist();
|
||||
return plDist < coR;
|
||||
return getPlDist() < coR;
|
||||
}
|
||||
|
||||
f32 daTagYami_c::getPlDist() {
|
||||
cXyz coC(mCoC);
|
||||
daPy_py_c* py = daPy_getPlayerActorClass();
|
||||
cXyz pyPos = fopAcM_GetPosition((fopAc_ac_c*)py);
|
||||
cXyz pyPos = *fopAcM_GetPosition_p(daPy_getPlayerActorClass());
|
||||
cXyz diff = pyPos - coC;
|
||||
return diff.absXZ();
|
||||
}
|
||||
@@ -109,14 +108,19 @@ void daTagYami_c::offMidnaTagSw2() {
|
||||
}
|
||||
|
||||
int daTagYami_Create(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagYami_c*>(i_this)->create();
|
||||
daTagYami_c* yami = static_cast<daTagYami_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return yami->create();
|
||||
}
|
||||
|
||||
int daTagYami_Execute(fopAc_ac_c* i_this) {
|
||||
return static_cast<daTagYami_c*>(i_this)->Execute();
|
||||
daTagYami_c* yami = static_cast<daTagYami_c*>(i_this);
|
||||
int id = fopAcM_GetID(i_this);
|
||||
return yami->Execute();
|
||||
}
|
||||
|
||||
int daTagYami_Delete(daTagYami_c* i_this) {
|
||||
int id = fopAcM_GetID(i_this);
|
||||
i_this->~daTagYami_c();
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user