mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
2276 lines
65 KiB
C++
2276 lines
65 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_npc_bs1.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_npc_bs1.h"
|
|
#include "d/res/res_bs.h"
|
|
#include "JSystem/J3DGraphBase/J3DSys.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item.h"
|
|
#include "d/d_kankyo.h"
|
|
#include "d/d_shop.h"
|
|
#include "d/d_snap.h"
|
|
#include "d/d_letter.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "f_op/f_op_actor.h"
|
|
#include "m_Do/m_Do_ext.h"
|
|
#include "m_Do/m_Do_hostIO.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
|
|
#include "weak_data_1811.h" // IWYU pragma: keep
|
|
|
|
static fpc_ProcID l_msgId;
|
|
static msg_class* l_msg;
|
|
static daNpc_Bs1_HIO_c l_HIO;
|
|
|
|
static dCcD_SrcCyl l_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_VsOther_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_Set_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 30.0f,
|
|
/* Height */ 80.0f,
|
|
},
|
|
};
|
|
|
|
/* 000000EC-00000108 .text __ct__20daNpc_Bs1_childHIO_cFv */
|
|
daNpc_Bs1_childHIO_c::daNpc_Bs1_childHIO_c() {}
|
|
|
|
/* 00000108-00000264 .text __ct__15daNpc_Bs1_HIO_cFv */
|
|
daNpc_Bs1_HIO_c::daNpc_Bs1_HIO_c() {
|
|
// Bs1
|
|
mChild[0].mNpc.m04 = -64.0f;
|
|
mChild[0].mNpc.mMaxHeadX = 0x1FFE;
|
|
mChild[0].mNpc.mMaxHeadY = 0x38E0;
|
|
mChild[0].mNpc.mMaxBackboneX = 0;
|
|
mChild[0].mNpc.mMaxBackboneY = 0x1C70;
|
|
mChild[0].mNpc.mMinHeadX = -0x1FFE;
|
|
mChild[0].mNpc.mMinHeadY = -0x38E0;
|
|
mChild[0].mNpc.mMinBackboneX = 0;
|
|
mChild[0].mNpc.mMinBackboneY = -0x1C70;
|
|
mChild[0].mNpc.mMaxTurnStep = 0x1000;
|
|
mChild[0].mNpc.mMaxHeadTurnVel = 0x800;
|
|
mChild[0].mNpc.mAttnYOffset = 55.0f;
|
|
mChild[0].mNpc.m22 = 0;
|
|
mChild[0].mNpc.mMaxAttnDistXZ = 300.0f;
|
|
mChild[0].m2C = 0;
|
|
mChild[0].m30 = 0.65f;
|
|
mChild[0].m34 = 0.9f;
|
|
mChild[0].m38 = 0.5f;
|
|
mChild[0].m3C = 27.0f;
|
|
mChild[0].m40 = 20.0f;
|
|
|
|
// Bs2
|
|
mChild[1].mNpc.m04 = -64.0f;
|
|
mChild[1].mNpc.mMaxHeadX = 0x1FFE;
|
|
mChild[1].mNpc.mMaxHeadY = 0x38E0;
|
|
mChild[1].mNpc.mMaxBackboneX = 0;
|
|
mChild[1].mNpc.mMaxBackboneY = 0x1C70;
|
|
mChild[1].mNpc.mMinHeadX = -0x1FFE;
|
|
mChild[1].mNpc.mMinHeadY = -0x38E0;
|
|
mChild[1].mNpc.mMinBackboneX = 0;
|
|
mChild[1].mNpc.mMinBackboneY = -0x1C70;
|
|
mChild[1].mNpc.mMaxTurnStep = 0x1000;
|
|
mChild[1].mNpc.mMaxHeadTurnVel = 0x800;
|
|
mChild[1].mNpc.mAttnYOffset = 55.0f;
|
|
mChild[1].mNpc.m22 = 0;
|
|
mChild[1].mNpc.mMaxAttnDistXZ = 300.0f;
|
|
mChild[1].m2C = 1;
|
|
mChild[1].m30 = 0.65f;
|
|
mChild[1].m34 = 0.9f;
|
|
mChild[1].m38 = 0.5f;
|
|
mChild[1].m3C = 27.0f;
|
|
mChild[1].m40 = 20.0f;
|
|
|
|
mNo = -1;
|
|
m8 = -1;
|
|
}
|
|
|
|
/* 000002C4-000002E4 .text daNpc_Bs1_XyEventCB__FPvi */
|
|
static s16 daNpc_Bs1_XyEventCB(void* i_this, int value) {
|
|
return ((daNpc_Bs1_c*)i_this)->XyEventCB(value);
|
|
}
|
|
/* 000002E4-00000490 .text XyEventCB__11daNpc_Bs1_cFi */
|
|
s16 daNpc_Bs1_c::XyEventCB(int i_itemBtn) {
|
|
s16 eventIdx = -1;
|
|
u8 selectedItem = (s32)dComIfGp_getSelectItem(i_itemBtn);
|
|
if (mType == 0) {
|
|
if (selectedItem == KAISEN_PRESENT1) {
|
|
eventIdx = mEventIdxs[0];
|
|
m82B = 0;
|
|
setAction(&daNpc_Bs1_c::event_action, NULL);
|
|
} else if (selectedItem == KAISEN_PRESENT2) {
|
|
eventIdx = mEventIdxs[1];
|
|
m82B = 1;
|
|
setAction(&daNpc_Bs1_c::event_action, NULL);
|
|
}
|
|
}
|
|
return eventIdx;
|
|
}
|
|
|
|
static const int l_bck_ix_tbl[] = {
|
|
BS_INDEX_BCK_BS_WAIT01,
|
|
BS_INDEX_BCK_BS_TALK01,
|
|
BS_INDEX_BCK_BS_TALK02,
|
|
BS_INDEX_BCK_BS_TALK03,
|
|
BS_INDEX_BCK_BS_TALK04,
|
|
BS_INDEX_BCK_BS_LAUGH,
|
|
BS_INDEX_BCK_BS_PRAISE,
|
|
BS_INDEX_BCK_BS_ANGRY,
|
|
BS_INDEX_BCK_BS_MANTAN,
|
|
BS_INDEX_BCK_BS_TALK04,
|
|
};
|
|
|
|
static const int l_btp_ix_tbl[] = {
|
|
BS_INDEX_BTP_BS,
|
|
BS_INDEX_BTP_MABA,
|
|
BS_INDEX_BTP_LOOK,
|
|
BS_INDEX_BTP_BS_PRAISE,
|
|
};
|
|
|
|
/* 00000490-00000658 .text nodeCallBack_Bs__FP7J3DNodei */
|
|
static BOOL nodeCallBack_Bs(J3DNode* node, int calcTiming) {
|
|
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
daNpc_Bs1_c* i_this = (daNpc_Bs1_c*)model->getUserArea();
|
|
s32 jntNo = joint->getJntNo();
|
|
if (i_this) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
if (jntNo == i_this->getHeadJntNum()) {
|
|
cXyz offset(0.0f, 0.0f, 0.0f);
|
|
mDoMtx_XrotM(*calc_mtx, i_this->getHead_y());
|
|
mDoMtx_ZrotM(*calc_mtx, -i_this->getHead_x());
|
|
cXyz pos;
|
|
MtxPosition(&offset, &pos);
|
|
i_this->setAttentionBasePos(pos);
|
|
offset.x = 28.0f;
|
|
offset.y = 20.0f;
|
|
offset.z = 0.0f;
|
|
MtxPosition(&offset, &pos);
|
|
i_this->setEyePos(pos);
|
|
i_this->incAttnSetCount();
|
|
} else if (jntNo == i_this->getBackboneJntNum()) {
|
|
mDoMtx_XrotM(*calc_mtx, i_this->getBackbone_y());
|
|
mDoMtx_ZrotM(*calc_mtx, -i_this->getBackbone_x());
|
|
}
|
|
cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000658-0000076C .text initTexPatternAnm__11daNpc_Bs1_cFb */
|
|
BOOL daNpc_Bs1_c::initTexPatternAnm(bool i_modify) {
|
|
J3DModelData* modelData = mpMorf->getModel()->getModelData();
|
|
m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Bs", l_btp_ix_tbl[m828]);
|
|
JUT_ASSERT(0x1bd, m_head_tex_pattern != NULL);
|
|
if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) {
|
|
return FALSE;
|
|
}
|
|
mFrame = 0;
|
|
m2C6 = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000076C-000007F8 .text playTexPatternAnm__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::playTexPatternAnm() {
|
|
if (cLib_calcTimer(&m2C6) == 0) {
|
|
if (mFrame >= m_head_tex_pattern->getFrameMax()) {
|
|
mFrame -= m_head_tex_pattern->getFrameMax();
|
|
m2C6 = cM_rndF(100.0f) + 30.0f;
|
|
} else {
|
|
mFrame += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000007F8-0000087C .text setAnm__11daNpc_Bs1_cFSc */
|
|
void daNpc_Bs1_c::setAnm(s8 index) {
|
|
static u32 play_mode_tbl[10] = {
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_NONE,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
};
|
|
static f32 morf_frame_tbl[10] = {8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f};
|
|
static f32 play_speed_tbl[10] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
|
|
|
|
if (index != m829 || m829 == -1) {
|
|
m829 = index;
|
|
dNpc_setAnm_2(mpMorf, play_mode_tbl[index], morf_frame_tbl[index], play_speed_tbl[index],
|
|
l_bck_ix_tbl[index], -1, "Bs");
|
|
}
|
|
}
|
|
|
|
/* 0000087C-000008C0 .text setTexAnm__11daNpc_Bs1_cFSc */
|
|
void daNpc_Bs1_c::setTexAnm(s8 value) {
|
|
if (m828 != value || m828 == -1) {
|
|
m828 = value;
|
|
initTexPatternAnm(TRUE);
|
|
}
|
|
}
|
|
|
|
/* 000008C0-00000BD8 .text setAnmFromMsgTag__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::setAnmFromMsgTag() {
|
|
switch (dComIfGp_getMesgAnimeAttrInfo()) {
|
|
case 0:
|
|
setAnm(0);
|
|
setTexAnm(1);
|
|
break;
|
|
case 1:
|
|
setAnm(1);
|
|
setTexAnm(2);
|
|
break;
|
|
case 2:
|
|
setAnm(2);
|
|
setTexAnm(2);
|
|
break;
|
|
case 3:
|
|
setAnm(3);
|
|
setTexAnm(2);
|
|
break;
|
|
case 4:
|
|
setAnm(0);
|
|
setTexAnm(2);
|
|
break;
|
|
case 5:
|
|
setAnm(4);
|
|
setTexAnm(2);
|
|
break;
|
|
case 6:
|
|
setAnm(5);
|
|
setTexAnm(2);
|
|
break;
|
|
case 7:
|
|
setAnm(6);
|
|
setTexAnm(3);
|
|
break;
|
|
case 8:
|
|
setAnm(7);
|
|
setTexAnm(2);
|
|
break;
|
|
case 9:
|
|
setAnm(8);
|
|
setTexAnm(2);
|
|
break;
|
|
case 0xA:
|
|
setAnm(9);
|
|
setTexAnm(2);
|
|
break;
|
|
default:
|
|
if ((m829 == 0x2 && (mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f))) ||
|
|
(m829 == 0x4 && (mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f))) ||
|
|
(m829 == 0x6 && (mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f))) ||
|
|
(m829 == 0x8 && (mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f))))
|
|
{
|
|
setAnm(0);
|
|
} else if (m829 == 0x9 && (mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f))) {
|
|
setAnm(3);
|
|
}
|
|
break;
|
|
}
|
|
dComIfGp_clearMesgAnimeAttrInfo();
|
|
}
|
|
|
|
/* 00000BD8-00000C88 .text chkAttention__11daNpc_Bs1_cF4cXyzs */
|
|
BOOL daNpc_Bs1_c::chkAttention(cXyz param, s16) {
|
|
daPy_py_c* pPlayer = daPy_getPlayerActorClass();
|
|
f32 maxAttnDistXZ = l_HIO.mChild[mType].mNpc.mMaxAttnDistXZ;
|
|
cXyz sp20 = pPlayer->current.pos - param;
|
|
cXyz sp14(0.0f, 0.0f, 1.0f);
|
|
return maxAttnDistXZ > sp14.inprod(sp20);
|
|
}
|
|
|
|
/* 00000C88-00000D40 .text eventOrder__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::eventOrder() {
|
|
if (m82A == 0x3) {
|
|
fopAcM_orderOtherEventId(this, m83A);
|
|
} else if (m82A == 0x3) {
|
|
// Bug? This condition will never be met because the first check already caught == 0x3.
|
|
fopAcM_orderOtherEventId(this, mEventIdxs[m82B]);
|
|
} else if (m82A == 0x1 || m82A == 0x2) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
|
|
if (m82A == 0x1) {
|
|
fopAcM_orderSpeakEvent(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000D40-00000F8C .text checkOrder__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::checkOrder() {
|
|
if(eventInfo.checkCommandDemoAccrpt()) {
|
|
if(m82A == 3) {
|
|
m82A = 0;
|
|
setAction(&daNpc_Bs1_c::getdemo_action, 0);
|
|
}
|
|
else if(m82A == 4) {
|
|
m82A = 0;
|
|
setAction(&daNpc_Bs1_c::event_action, 0);
|
|
}
|
|
}
|
|
else if (eventInfo.checkCommandTalk()) {
|
|
if(m82A == 1 || m82A == 2) {
|
|
m82A = 0;
|
|
m731 = 1;
|
|
talkInit();
|
|
if(!dComIfGp_event_chkTalkXY()) {
|
|
cXyz pos(0.0f, 0.0f, 125.0f);
|
|
mShopCamAction.shop_cam_action_init();
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, -0x6000);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
mShopCamAction.Save();
|
|
}
|
|
}
|
|
|
|
/* 00000F8C-00001088 .text daNpc_Bs1_getBuyItemMax__Fii */
|
|
static u32 daNpc_Bs1_getBuyItemMax(int i_itemCost, int i_itemNo) {
|
|
int beastIdx;
|
|
switch (i_itemNo) {
|
|
case dItem_BOKOBABA_SEED_e:
|
|
beastIdx = 1;
|
|
break;
|
|
case dItem_SKULL_NECKLACE_e:
|
|
beastIdx = 0;
|
|
break;
|
|
case dItem_RED_JELLY_e:
|
|
beastIdx = 4;
|
|
break;
|
|
case dItem_GREEN_JELLY_e:
|
|
beastIdx = 5;
|
|
break;
|
|
case dItem_BLUE_JELLY_e:
|
|
beastIdx = 6;
|
|
break;
|
|
case dItem_JOY_PENDANT_e:
|
|
beastIdx = 7;
|
|
break;
|
|
case dItem_GOLDEN_FEATHER_e:
|
|
beastIdx = 2;
|
|
break;
|
|
default:
|
|
beastIdx = 3;
|
|
break;
|
|
}
|
|
|
|
int beastNum = dComIfGs_getBeastNum(beastIdx);
|
|
int currRupee = dComIfGs_getRupee();
|
|
u8 walletSize = dComIfGs_getWalletSize();
|
|
|
|
u16 maxRupees;
|
|
switch (walletSize) {
|
|
case 0:
|
|
maxRupees = 200;
|
|
break;
|
|
case 1:
|
|
maxRupees = 1000;
|
|
break;
|
|
case 2:
|
|
default:
|
|
maxRupees = 5000;
|
|
break;
|
|
}
|
|
|
|
int r4 = maxRupees - currRupee;
|
|
int r5 = r4 / i_itemCost;
|
|
if (r4 - r5 * i_itemCost != 0) {
|
|
r5 += 1;
|
|
}
|
|
|
|
return cLib_maxLimit(r5, beastNum);
|
|
}
|
|
|
|
/* 00001088-000010EC .text daNpc_Bs1_setPayRupee__Fii */
|
|
static void daNpc_Bs1_setPayRupee(int unknownParam1, int unknownParam2) {
|
|
int rupee = dComIfGs_getRupee();
|
|
u16 maxRupees;
|
|
switch (dComIfGs_getWalletSize()) {
|
|
case 0:
|
|
maxRupees = 200;
|
|
break;
|
|
case 1:
|
|
maxRupees = 1000;
|
|
break;
|
|
case 2:
|
|
default:
|
|
maxRupees = 5000;
|
|
break;
|
|
}
|
|
|
|
int r5 = maxRupees - rupee;
|
|
int paymentTotal = cLib_maxLimit(unknownParam1 * unknownParam2, r5);
|
|
|
|
daNpc_Bs1_c::setPayRupee(paymentTotal);
|
|
}
|
|
|
|
/* 000010EC-00001F7C .text next_msgStatus__11daNpc_Bs1_cFPUl */
|
|
u16 daNpc_Bs1_c::next_msgStatus(u32* pMsgNo) {
|
|
/* Nonmatching */
|
|
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
|
|
|
|
switch(*pMsgNo) {
|
|
case 0xF50:
|
|
case 0xF53:
|
|
case 0xF55:
|
|
case 0xF56:
|
|
case 0xF58:
|
|
case 0xF6F:
|
|
case 0xF70:
|
|
case 0xF71:
|
|
case 0xF73:
|
|
case 0xF79:
|
|
case 0xF81:
|
|
case 0xF86:
|
|
case 0xF8B:
|
|
case 0xF90:
|
|
case 0xF95:
|
|
case 0xF9A:
|
|
case 0xF9F:
|
|
case 0xFD6:
|
|
case 0xFD7:
|
|
case 0x2F62:
|
|
case 0x2F64:
|
|
case 0x2F65:
|
|
case 0x2F67:
|
|
*pMsgNo += 1;
|
|
break;
|
|
case 0xF78:
|
|
case 0xF80:
|
|
case 0xF85:
|
|
case 0xF8A:
|
|
case 0xF8F:
|
|
case 0xF94:
|
|
case 0xF99:
|
|
case 0xF9E: {
|
|
m83C = dComIfGp_getMessageRupee();
|
|
int buyMax = daNpc_Bs1_getBuyItemMax(m83C, m840);
|
|
setBuyItemMax(buyMax);
|
|
setBuyItem(buyMax);
|
|
if(buyMax != 0) {
|
|
*pMsgNo += 1;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF7E;
|
|
break;
|
|
}
|
|
case 0xFD4: {
|
|
m83C = dComIfGp_getMessageRupee();
|
|
int buyMax = daNpc_Bs1_getBuyItemMax(m83C, m840);
|
|
setBuyItemMax(buyMax);
|
|
setBuyItem(buyMax);
|
|
if(buyMax != 0) {
|
|
*pMsgNo = 0xF9F;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF7E;
|
|
break;
|
|
}
|
|
case 0xF7A:
|
|
case 0xF82:
|
|
case 0xF87:
|
|
case 0xF8C:
|
|
case 0xF91:
|
|
case 0xF96:
|
|
case 0xF9B:
|
|
case 0xFA0:
|
|
dComIfGp_setMessageSetNumber(1);
|
|
if(l_msg->mSelectNum == 0 && !dComIfGp_checkMesgCancelButton()) {
|
|
if(*pMsgNo == 0xFA0) {
|
|
*pMsgNo = 0xFD2;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo += 1;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF7F;
|
|
break;
|
|
case 0xF7B:
|
|
case 0xF83:
|
|
case 0xF88:
|
|
case 0xF8D:
|
|
case 0xF92:
|
|
case 0xF97:
|
|
case 0xF9C:
|
|
case 0xFD2:
|
|
daNpc_Bs1_setPayRupee(m83C, getBuyItem());
|
|
*pMsgNo += 1;
|
|
|
|
break;
|
|
case 0xF7C:
|
|
case 0xF84:
|
|
case 0xF89:
|
|
case 0xF8E:
|
|
case 0xF93:
|
|
case 0xF98:
|
|
case 0xF9D:
|
|
case 0xFD3:
|
|
if(dComIfGp_checkMesgCancelButton()) {
|
|
*pMsgNo = 0xF7F;
|
|
break;
|
|
}
|
|
|
|
if(l_msg->mSelectNum == 0) {
|
|
int idx;
|
|
switch(*pMsgNo) {
|
|
case 0xF7C:
|
|
idx = 1;
|
|
break;
|
|
case 0xF84:
|
|
idx = 0;
|
|
break;
|
|
case 0xF89:
|
|
idx = 4;
|
|
break;
|
|
case 0xF8E:
|
|
idx = 5;
|
|
break;
|
|
case 0xF93:
|
|
idx = 6;
|
|
break;
|
|
case 0xF98:
|
|
idx = 7;
|
|
break;
|
|
case 0xF9D:
|
|
idx = 2;
|
|
break;
|
|
case 0xFD3:
|
|
idx = 3;
|
|
break;
|
|
}
|
|
dComIfGp_setItemRupeeCount(getPayRupee());
|
|
dComIfGp_setItemBeastNumCount(idx, -getBuyItem());
|
|
|
|
if(*pMsgNo == 0xFD3) {
|
|
u8 r3 = dComIfGs_getEventReg(0x7F0F);
|
|
r3 += getBuyItem();
|
|
u8 temp = cLib_maxLimit<u8>(r3, 0xF);
|
|
dComIfGs_setEventReg(0x7F0F, temp);
|
|
|
|
if(temp < 0xA) {
|
|
*pMsgNo = 0xFD5;
|
|
break;
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x3B04)) {
|
|
*pMsgNo = 0xFD9;
|
|
break;
|
|
}
|
|
|
|
dComIfGs_onEventBit(0x3B04);
|
|
*pMsgNo = 0xFD6;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF7D;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo -= 1;
|
|
break;
|
|
case 0xFD5:
|
|
*pMsgNo = 0xF7D;
|
|
break;
|
|
case 0x2F45:
|
|
case 0x2F46:
|
|
case 0x2F48:
|
|
case 0x2F50:
|
|
case 0x2F51:
|
|
case 0x2F52:
|
|
case 0x2F53:
|
|
case 0x2F54:
|
|
case 0x2F55:
|
|
case 0x2F58:
|
|
case 0x2F59:
|
|
case 0x2F5A:
|
|
case 0x2F5B:
|
|
case 0x2F5C:
|
|
case 0x2F5D:
|
|
case 0x2F5E:
|
|
case 0x2F5F:
|
|
case 0x2F60:
|
|
case 0x2F61:
|
|
case 0x2F66:
|
|
case 0x2F68:
|
|
*pMsgNo = 0x2F47;
|
|
break;
|
|
case 0x2F6B:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
*pMsgNo = 0x2F49;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
*pMsgNo = 0x2F6C;
|
|
|
|
break;
|
|
case 0x2F6C:
|
|
if(dComIfGp_checkMesgCancelButton()) {
|
|
*pMsgNo = 0x2F6B;
|
|
break;
|
|
}
|
|
|
|
if(l_msg->mSelectNum == 0) {
|
|
*pMsgNo = (int)cM_rndF(4.0f) + 0x2F6E;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0x2F6D;
|
|
break;
|
|
case 0x2F6D:
|
|
case 0x2F6E:
|
|
case 0x2F6F:
|
|
case 0x2F70:
|
|
case 0x2F71:
|
|
*pMsgNo = 0x2F6B;
|
|
break;
|
|
case 0xF3D:
|
|
case 0xF41:
|
|
case 0xF57:
|
|
case 0xF59:
|
|
case 0xF5A:
|
|
case 0xF5B:
|
|
case 0xF5C:
|
|
case 0xF5D:
|
|
case 0xF5F:
|
|
case 0xF60:
|
|
*pMsgNo = 0xF3E;
|
|
break;
|
|
case 0xF5E:
|
|
*pMsgNo = 0xF62;
|
|
break;
|
|
case 0xF3E:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
u8 points = dComIfGs_getEventReg(0x86FF);
|
|
if(mShopItems.isSoldOutItemAll()) {
|
|
*pMsgNo = 0xF62;
|
|
break;
|
|
}
|
|
|
|
if(points >= 60) {
|
|
*pMsgNo = 0xF61;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF40;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
|
|
break;
|
|
case 0x2F47:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
*pMsgNo = 0x2F49;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
|
|
break;
|
|
case 0xF3F:
|
|
*pMsgNo = 0xF3E;
|
|
break;
|
|
case 0xF63:
|
|
case 0xF64:
|
|
case 0xF65:
|
|
case 0xF66:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
u8 points = dComIfGs_getEventReg(0x86FF);
|
|
if(mShopItems.isSoldOutItemAll()) {
|
|
*pMsgNo = 0xF62;
|
|
break;
|
|
}
|
|
|
|
if(points >= 60) {
|
|
*pMsgNo = 0xF61;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF40;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
|
|
break;
|
|
case 0x2F78:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
*pMsgNo = 0x2F49;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
|
|
break;
|
|
case 0xF42:
|
|
case 0xF43:
|
|
case 0xF44:
|
|
case 0xF67:
|
|
case 0xF69:
|
|
case 0xF6B:
|
|
case 0xF6D:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
u8 points = dComIfGs_getEventReg(0x86FF);
|
|
if(mShopItems.isSoldOutItemAll()) {
|
|
*pMsgNo = 0xF62;
|
|
break;
|
|
}
|
|
|
|
if(points >= 60) {
|
|
*pMsgNo = 0xF61;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF40;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
*pMsgNo = mShopItems.getSelectItemBuyMsg();
|
|
break;
|
|
case 0x2F4A:
|
|
case 0x2F4B:
|
|
case 0x2F4C:
|
|
case 0x2F72:
|
|
case 0x2F74:
|
|
case 0x2F76:
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
*pMsgNo = 0x2F49;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
*pMsgNo = mShopItems.getSelectItemBuyMsg();
|
|
break;
|
|
case 0xF45:
|
|
case 0xF46:
|
|
case 0xF47:
|
|
case 0xF68:
|
|
case 0xF6A:
|
|
case 0xF6C:
|
|
case 0xF6E:
|
|
if(dComIfGp_checkMesgCancelButton()) {
|
|
*pMsgNo = mShopItems.getSelectItemShowMsg();
|
|
break;
|
|
}
|
|
|
|
if(l_msg->mSelectNum == 0) {
|
|
int rupee = dComIfGp_getMessageRupee();
|
|
u8 status = dShop_BoughtErrorStatus(&mShopItems, 0, rupee);
|
|
|
|
if(status & 1) {
|
|
*pMsgNo = 0xF49;
|
|
break;
|
|
}
|
|
if(status & 2) {
|
|
*pMsgNo = 0xF48;
|
|
break;
|
|
}
|
|
if(status & 0x20) {
|
|
*pMsgNo = 0xF4A;
|
|
break;
|
|
}
|
|
if(status & 4) {
|
|
*pMsgNo = 0xF4B;
|
|
break;
|
|
}
|
|
if(status & 0x10) {
|
|
*pMsgNo = 0xF4D;
|
|
break;
|
|
}
|
|
|
|
fopAcM_seStart(this, JA_SE_SHOP_BOUGHT, 0);
|
|
mShopItems.hideSelectItem();
|
|
dComIfGp_setItemRupeeCount(-rupee);
|
|
if(mShopItems.getSelectItemNo() == dItem_BAIT_BAG_e) {
|
|
mShopItems.SoldOutItem(mShopItems.mSelectedItemIdx);
|
|
m76C[mShopItems.mSelectedItemIdx] = 1;
|
|
}
|
|
|
|
int itemNo = mShopItems.getSelectItemNo();
|
|
if(!checkItemGet(itemNo, 0)) {
|
|
m82A = 3;
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
itemNo = mShopItems.getSelectItemNo();
|
|
execItemGet(itemNo);
|
|
|
|
if(mType == 0) {
|
|
if(dComIfGs_getEventReg(0x86FF) != 0) {
|
|
*pMsgNo = 0xF4C;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF4E;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0x2F53;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = mShopItems.getSelectItemShowMsg();
|
|
break;
|
|
case 0x2F4D:
|
|
case 0x2F4E:
|
|
case 0x2F4F:
|
|
case 0x2F73:
|
|
case 0x2F75:
|
|
case 0x2F77:
|
|
if(dComIfGp_checkMesgCancelButton()) {
|
|
*pMsgNo = mShopItems.getSelectItemShowMsg();
|
|
break;
|
|
}
|
|
|
|
if(l_msg->mSelectNum == 0) {
|
|
int rupee = dComIfGp_getMessageRupee();
|
|
u32 status = dShop_BoughtErrorStatus(&mShopItems, 0, rupee);
|
|
|
|
if(status & 0x20) {
|
|
*pMsgNo = 0x2F50;
|
|
break;
|
|
}
|
|
if(status & 4) {
|
|
*pMsgNo = 0x2F51;
|
|
break;
|
|
}
|
|
if(status & 0x10) {
|
|
*pMsgNo = 0x2F52;
|
|
break;
|
|
}
|
|
|
|
fopAcM_seStart(this, JA_SE_SHOP_BOUGHT, 0);
|
|
mShopItems.hideSelectItem();
|
|
dComIfGp_setItemRupeeCount(-rupee);
|
|
u8 itemNo = mShopItems.getSelectItemNo();
|
|
if(itemNo == dItem_EMPTY_BOTTLE_e || itemNo == dItem_HEART_PIECE_e || itemNo == dItem_COLLECT_MAP_30_e) {
|
|
mShopItems.SoldOutItem(mShopItems.mSelectedItemIdx);
|
|
m76C[mShopItems.mSelectedItemIdx] = 1;
|
|
|
|
switch(itemNo) {
|
|
case dItem_EMPTY_BOTTLE_e:
|
|
dComIfGs_onEventBit(0x2020);
|
|
break;
|
|
case dItem_HEART_PIECE_e:
|
|
dComIfGs_onEventBit(0x2010);
|
|
break;
|
|
case dItem_COLLECT_MAP_30_e:
|
|
dComIfGs_onEventBit(0x2008);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// these int casts are probably fake
|
|
if(!checkItemGet((int)mShopItems.getSelectItemNo(), 0)) {
|
|
m82A = 3;
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
execItemGet((int)mShopItems.getSelectItemNo());
|
|
*pMsgNo = 0x2F53;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = mShopItems.getSelectItemShowMsg();
|
|
break;
|
|
case 0xF48:
|
|
case 0xF49:
|
|
case 0xF4A:
|
|
case 0xF4B:
|
|
case 0xF4D:
|
|
case 0xF4F:
|
|
case 0xF51:
|
|
case 0xF52:
|
|
case 0xF54:
|
|
*pMsgNo = 0xF3E;
|
|
break;
|
|
case 0xF4C:
|
|
case 0xF4E: {
|
|
int points = dComIfGs_getEventReg(0x86FF);
|
|
points += 1;
|
|
points = cLib_maxLimit<int>(points, 0xFF);
|
|
dComIfGs_setEventReg(0x86FF, points);
|
|
|
|
if(points > 60) {
|
|
*pMsgNo = 0xF3E;
|
|
break;
|
|
}
|
|
|
|
if(points == 60) {
|
|
dLetter_send(0xAF03);
|
|
*pMsgNo = 0xF53;
|
|
break;
|
|
}
|
|
|
|
if(points > 30) {
|
|
*pMsgNo = 0xF52;
|
|
break;
|
|
}
|
|
|
|
if(points == 30) {
|
|
dLetter_send(0xB003);
|
|
*pMsgNo = 0xF50;
|
|
break;
|
|
}
|
|
|
|
*pMsgNo = 0xF4F;
|
|
break;
|
|
}
|
|
default:
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 00001F7C-000024B8 .text getMsg__11daNpc_Bs1_cFv */
|
|
u32 daNpc_Bs1_c::getMsg() {
|
|
u32 msgNo;
|
|
if(m740) {
|
|
msgNo = m740;
|
|
m740 = 0;
|
|
}
|
|
else if(dComIfGp_event_chkTalkXY()) {
|
|
u8 itemNo = dComIfGp_event_getPreItemNo();
|
|
|
|
if(mType == 0) {
|
|
if(isEmono(itemNo)) {
|
|
m840 = itemNo;
|
|
switch(itemNo) {
|
|
case dItem_BOKOBABA_SEED_e:
|
|
msgNo = 0xF78;
|
|
break;
|
|
case dItem_SKULL_NECKLACE_e:
|
|
msgNo = 0xF80;
|
|
break;
|
|
case dItem_RED_JELLY_e:
|
|
msgNo = 0xF85;
|
|
break;
|
|
case dItem_GREEN_JELLY_e:
|
|
msgNo = 0xF8A;
|
|
break;
|
|
case dItem_BLUE_JELLY_e:
|
|
msgNo = 0xF8F;
|
|
break;
|
|
case dItem_JOY_PENDANT_e:
|
|
msgNo = 0xF94;
|
|
break;
|
|
case dItem_GOLDEN_FEATHER_e:
|
|
msgNo = 0xF99;
|
|
break;
|
|
default:
|
|
if(dComIfGs_getEventReg(0x7F0F) < 10) {
|
|
msgNo = 0xF9E;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0xFD4;
|
|
break;
|
|
}
|
|
}
|
|
else if(itemNo == KAISEN_PRESENT1) {
|
|
msgNo = 0xF6F;
|
|
}
|
|
else if(itemNo == KAISEN_PRESENT2) {
|
|
msgNo = 0xF73;
|
|
}
|
|
else {
|
|
msgNo = 0xF75;
|
|
}
|
|
}
|
|
else if(itemNo == KAISEN_PRESENT1 || itemNo == KAISEN_PRESENT2) {
|
|
msgNo = 0x2F56;
|
|
}
|
|
else if(isEmono(itemNo)) {
|
|
msgNo = 0x2F79;
|
|
}
|
|
else {
|
|
msgNo = 0x2F57;
|
|
}
|
|
}
|
|
else if(mType == 0) {
|
|
u8 points = dComIfGs_getEventReg(0x86FF);
|
|
if(mShopItems.isSoldOutItemAll()) {
|
|
msgNo = 0xF3D;
|
|
}
|
|
else if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && !dComIfGs_isEventBit(0x1F20) && isSellBomb()) {
|
|
dComIfGs_onEventBit(0x1F20);
|
|
m837 = 1;
|
|
msgNo = 0xF55;
|
|
}
|
|
else if(m837) {
|
|
msgNo = 0xF58;
|
|
}
|
|
else if(points >= 60) {
|
|
if(m836) {
|
|
msgNo = 0xF5D;
|
|
}
|
|
else {
|
|
msgNo = 0xF5C;
|
|
m836 = 1;
|
|
}
|
|
}
|
|
else if(points != 0) {
|
|
if(m836) {
|
|
msgNo = 0xF5B;
|
|
}
|
|
else {
|
|
msgNo = 0xF5A;
|
|
m836 = 1;
|
|
}
|
|
}
|
|
else if(m836) {
|
|
msgNo = 0xF41;
|
|
}
|
|
else {
|
|
m836 = 1;
|
|
msgNo = 0xF3D;
|
|
}
|
|
}
|
|
else if(mShopItems.isSoldOutItemAll()) {
|
|
msgNo = 0x2F62;
|
|
}
|
|
else if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && !dComIfGs_isEventBit(0x1F20) && isSellBomb()) {
|
|
dComIfGs_onEventBit(0x1F20);
|
|
m837 = 1;
|
|
msgNo = 0x2F64;
|
|
}
|
|
else if(m837) {
|
|
msgNo = 0x2F67;
|
|
}
|
|
else if(dComIfGs_isEventBit(0x1F08)) {
|
|
if(dComIfGs_isEventBit(0x2040)) {
|
|
if(m838 == 1) {
|
|
msgNo = 0x2F60;
|
|
}
|
|
else {
|
|
msgNo = 0x2F61;
|
|
}
|
|
}
|
|
else {
|
|
dComIfGs_onEventBit(0x2040);
|
|
msgNo = 0x2F5F;
|
|
m838 = 1;
|
|
}
|
|
}
|
|
else {
|
|
switch(dComIfGs_getEventReg(0xBB07)) {
|
|
case 0:
|
|
if(m836 || dComIfGs_isEventBit(0x1F10)) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
dComIfGs_onEventBit(0x1F10);
|
|
msgNo = 0x2F45;
|
|
break;
|
|
case 1:
|
|
if(m836) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F58;
|
|
break;
|
|
case 2:
|
|
if(m836) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F59;
|
|
break;
|
|
case 3:
|
|
if(m836) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F5A;
|
|
break;
|
|
case 4:
|
|
if(m836) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F5B;
|
|
break;
|
|
case 5:
|
|
if(m836) {
|
|
msgNo = 0x2F46;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F5C;
|
|
break;
|
|
case 6:
|
|
if(m836) {
|
|
msgNo = 0x2F69;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F5D;
|
|
break;
|
|
case 7:
|
|
if(m836) {
|
|
msgNo = 0x2F6A;
|
|
break;
|
|
}
|
|
|
|
msgNo = 0x2F5E;
|
|
break;
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x1F10)) {
|
|
dComIfGs_onEventBit(0x1F10);
|
|
}
|
|
|
|
m836 = 1;
|
|
}
|
|
|
|
return msgNo;
|
|
}
|
|
|
|
/* 000024B8-00002574 .text setCollision__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::setCollision() {
|
|
cXyz offset(0.0f, 0.0f, 0.0f);
|
|
offset.z = -16.0f;
|
|
cXyz out;
|
|
MtxTrans(current.pos.x, current.pos.y, current.pos.z, false);
|
|
mDoMtx_YrotM(*calc_mtx, m726.y);
|
|
MtxPosition(&offset, &out);
|
|
mCyl.SetC(out);
|
|
mCyl.SetR(46.0f);
|
|
mCyl.SetH(130.0f);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
}
|
|
|
|
/* 00002574-00002580 .text talkInit__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::talkInit() {
|
|
m835 = 0;
|
|
}
|
|
|
|
/* 00002580-00002604 .text shopMsgCheck__11daNpc_Bs1_cFUl */
|
|
BOOL daNpc_Bs1_c::shopMsgCheck(u32 msgNo) {
|
|
if(mType == 0) {
|
|
if((0xF42 <= msgNo && msgNo <= 0xF54) || (0xF67 <= msgNo && msgNo <= 0xF6E) || (0xF63 <= msgNo && msgNo <= 0xF66) || msgNo == 0xF3E) {
|
|
return true;
|
|
}
|
|
}
|
|
else {
|
|
if((0x2F4A <= msgNo && msgNo <= 0x2F53) || (0x2F6B <= msgNo && msgNo <= 0x2F78) || msgNo == 0x2F47) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00002604-00002624 .text daNpc_Bs1_getDefaultMsgCB__FPv */
|
|
static u32 daNpc_Bs1_getDefaultMsgCB(void* i_this) {
|
|
return static_cast<daNpc_Bs1_c*>(i_this)->getDefaultMsg();
|
|
}
|
|
|
|
/* 00002624-00002714 .text getDefaultMsg__11daNpc_Bs1_cFv */
|
|
u32 daNpc_Bs1_c::getDefaultMsg() {
|
|
u32 msgNo;
|
|
|
|
if(mType == 0) {
|
|
u8 points = dComIfGs_getEventReg(0x86FF);
|
|
if(mShopItems.isSoldOutItemAll()) {
|
|
msgNo = 0xF5E;
|
|
}
|
|
else if(points >= 60) {
|
|
msgNo = 0xF60;
|
|
}
|
|
else if(points != 0) {
|
|
msgNo = 0xF5F;
|
|
}
|
|
else {
|
|
msgNo = 0xF3F;
|
|
}
|
|
}
|
|
else if(!dComIfGs_isEventBit(0x1F08)) {
|
|
msgNo = 0x2F48;
|
|
}
|
|
else if(!dComIfGs_isEventBit(0x2108)) {
|
|
dComIfGs_onEventBit(0x2108);
|
|
msgNo = 0x2F54;
|
|
}
|
|
else {
|
|
msgNo = 0x2F55;
|
|
}
|
|
|
|
return msgNo;
|
|
}
|
|
|
|
/* 00002714-000027B8 .text shopStickMoveMsgCheck__11daNpc_Bs1_cFUl */
|
|
BOOL daNpc_Bs1_c::shopStickMoveMsgCheck(u32 msgNo) {
|
|
if(mType == 0) {
|
|
if((0xF42 <= msgNo && msgNo <= 0xF44) || ((0xF67 <= msgNo && msgNo <= 0xF6E) && (msgNo & 1)) || (0xF63 <= msgNo && msgNo <= 0xF66) || msgNo == 0xF3E) {
|
|
return true;
|
|
}
|
|
}
|
|
else {
|
|
if((0x2F4A <= msgNo && msgNo <= 0x2F4C) || ((0x2F72 <= msgNo && msgNo <= 0x2F76) && !(msgNo & 1)) || msgNo == 0x2F78 || msgNo == 0x2F6B || msgNo == 0x2F47) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000027B8-000027EC .text checkBeastItemSellMsg__11daNpc_Bs1_cFUl */
|
|
BOOL daNpc_Bs1_c::checkBeastItemSellMsg(u32 msgNo) {
|
|
switch (msgNo) {
|
|
case 0xF7A:
|
|
case 0xF7C:
|
|
case 0xF82:
|
|
case 0xF84:
|
|
case 0xF87:
|
|
case 0xF89:
|
|
case 0xF8C:
|
|
case 0xF8E:
|
|
case 0xF91:
|
|
case 0xF93:
|
|
case 0xF96:
|
|
case 0xF98:
|
|
case 0xF9B:
|
|
case 0xF9D:
|
|
case 0xFA0:
|
|
case 0xFD3:
|
|
return TRUE;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/* 000027EC-000028D0 .text normal_talk__11daNpc_Bs1_cFv */
|
|
u16 daNpc_Bs1_c::normal_talk() {
|
|
u16 status = l_msg->mStatus;
|
|
if(status == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&m738);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(m738);
|
|
}
|
|
}
|
|
else if(status == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
}
|
|
else if(status == fopMsgStts_MSG_PREPARING_e) {
|
|
fopMsgM_demoMsgFlagOn();
|
|
}
|
|
|
|
cXyz pos = mShopCamAction.getItemZoomPos(100.0f);
|
|
mShopItems.Item_ZoomUp(pos);
|
|
mpShopCursor->hide();
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 000028D0-000029EC .text shop_talk__11daNpc_Bs1_cFv */
|
|
u16 daNpc_Bs1_c::shop_talk() {
|
|
mpShopCursor->show();
|
|
if(dShop_now_triggercheck(l_msg, &mStickControl, &mShopItems, &m738, daNpc_Bs1_getDefaultMsgCB, this)) {
|
|
m708 = 1;
|
|
m73C = 0;
|
|
if(m738 == 0xF3F) {
|
|
m835 = 2;
|
|
}
|
|
}
|
|
|
|
u16 status = l_msg->mStatus;
|
|
if(status == fopMsgStts_MSG_DISPLAYED_e || status == fopMsgStts_MSG_CONTINUES_e) {
|
|
if(m708) {
|
|
m708 = 0;
|
|
}
|
|
else {
|
|
m73C = m738;
|
|
l_msg->mStatus = next_msgStatus(&m73C);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(m73C);
|
|
}
|
|
}
|
|
}
|
|
else if(status == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 000029EC-00002C10 .text talk__11daNpc_Bs1_cFv */
|
|
u16 daNpc_Bs1_c::talk() {
|
|
u16 status = 0xFF;
|
|
|
|
if(m835 == 0) {
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
m738 = getMsg();
|
|
m73C = 0;
|
|
m835 = 1;
|
|
}
|
|
else if(m835 != -1) {
|
|
if(l_msgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
if(dComIfGp_event_chkTalkXY() && !dComIfGp_evmng_ChkPresentEnd()) {
|
|
return 0xFF;
|
|
}
|
|
else {
|
|
l_msgId = fopMsgM_messageSet(m738, this);
|
|
}
|
|
}
|
|
else {
|
|
setAnmFromMsgTag();
|
|
switch(m835) {
|
|
case 1:
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
if(l_msg) {
|
|
m835 = 2;
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
status = normal_talk();
|
|
break;
|
|
case 3:
|
|
status = shop_talk();
|
|
break;
|
|
}
|
|
|
|
if(dComIfGp_checkMesgSendButton()) {
|
|
m738 = l_msg->mMsgNo;
|
|
if(!shopStickMoveMsgCheck(m738)) {
|
|
if(!shopMsgCheck(m738)) {
|
|
mShopItems.mSelectedItemIdx = -1;
|
|
|
|
if(mShopItems.isHide()) {
|
|
mShopItems.showItem();
|
|
}
|
|
}
|
|
|
|
m835 = 2;
|
|
}
|
|
else {
|
|
if(m738 == 0xF3E || m738 == 0x2F47) {
|
|
mShopItems.mSelectedItemIdx = -1;
|
|
|
|
if(mShopItems.isHide()) {
|
|
mShopItems.showItem();
|
|
}
|
|
}
|
|
|
|
m835 = 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
mShopCamAction.m54 = mShopItems.mSelectedItemIdx;
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 00002C10-00003018 .text createShopList__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::createShopList() {
|
|
static __shop_items_set_data* Item_set_data3[] = {
|
|
&shopItems_setData_Feedbag,
|
|
&shopItems_setData_FoodAll,
|
|
&shopItems_setData_FoodHyoi,
|
|
&shopItems_setData_FoodHyoi,
|
|
NULL,
|
|
&shopItems_setData_Bomb30Bs,
|
|
};
|
|
static __shop_items_set_data* Item_set_data4[] = {
|
|
&shopItems_setData_arrow10,
|
|
&shopItems_setData_arrow30,
|
|
&shopItems_setData_FoodAll,
|
|
};
|
|
static __shop_items_set_data* Item_set_data5[] = {
|
|
&shopItems_setData_arrow30,
|
|
&shopItems_setData_Bomb30Bs,
|
|
&shopItems_setData_red_bottleBs,
|
|
};
|
|
static __shop_items_set_data* Item_set_dataBs2[] = {
|
|
&shopItems_setData_emptybottle,
|
|
&shopItems_setData_kakera_heart,
|
|
&shopItems_setData_map,
|
|
};
|
|
|
|
csXyz angle(csXyz::Zero);
|
|
|
|
if(mType == 0) {
|
|
__shop_items_set_data** pDataSet;
|
|
switch(mShopIndex) {
|
|
case 3:
|
|
pDataSet = &Item_set_data3[0];
|
|
break;
|
|
case 4:
|
|
pDataSet = &Item_set_data4[0];
|
|
break;
|
|
case 5:
|
|
pDataSet = &Item_set_data5[0];
|
|
break;
|
|
default:
|
|
pDataSet = &Item_set_data3[0];
|
|
break;
|
|
}
|
|
|
|
for(int i = 0; i < 3; i++) {
|
|
u8 itemNo = pDataSet[i]->mpItemData->mItemNo;
|
|
int idx = i;
|
|
if((itemNo == dItem_BAIT_BAG_e && dComIfGs_checkGetItem(itemNo)) || (itemNo == dItem_HYOI_PEAR_e && dComIfGs_checkGetItem(dItem_BOMB_BAG_e))) {
|
|
itemNo = pDataSet[i + 3][0].mpItemData->mItemNo;
|
|
idx += 3;
|
|
}
|
|
|
|
mShopItems.mItemActorProcessIds[i] = fopAcM_createShopItem((cXyz*)&Item_set_pos_data_tbl[mShopIndex][i], itemNo, &angle, fopAcM_GetRoomNo(this));
|
|
mpItemSetList[i] = pDataSet[idx];
|
|
}
|
|
}
|
|
else {
|
|
__shop_items_set_data** temp = &Item_set_dataBs2[0];
|
|
__shop_items_set_data* dataSet[4];
|
|
int index = 0;
|
|
|
|
if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e)) {
|
|
dataSet[index] = &shopItems_setData_Bomb30Bs2;
|
|
index = 1;
|
|
}
|
|
if(dComIfGs_getItem(dInvSlot_BOW_e) != dItem_NONE_e) {
|
|
dataSet[index] = &shopItems_setData_arrow30Bs2;
|
|
index++;
|
|
}
|
|
dataSet[index] = &shopItems_setData_red_bottleBs2;
|
|
index++;
|
|
if(!dComIfGs_checkGetItem(dItem_BOMB_BAG_e)) {
|
|
dataSet[index] = &shopItems_setData_Bomb30Bs2;
|
|
index++;
|
|
}
|
|
if(dComIfGs_getItem(dInvSlot_BOW_e) == dItem_NONE_e) {
|
|
dataSet[index] = &shopItems_setData_arrow30Bs2;
|
|
}
|
|
|
|
int dataIdx = 0;
|
|
for(int i = 0; i < 3; i++) {
|
|
u8 itemNo = temp[i]->mpItemData->mItemNo;
|
|
if((i == 0 && dComIfGs_isEventBit(0x2020)) || (i == 1 && dComIfGs_isEventBit(0x2010)) || (i == 2 && dComIfGs_isEventBit(0x2008))) {
|
|
itemNo = dataSet[dataIdx]->mpItemData->mItemNo;
|
|
mpItemSetList[i] = dataSet[dataIdx];
|
|
dataIdx++;
|
|
}
|
|
else {
|
|
mpItemSetList[i] = temp[i];
|
|
}
|
|
|
|
mShopItems.mItemActorProcessIds[i] = fopAcM_createShopItem((cXyz*)&Item_set_pos_data_tbl[mShopIndex][i], itemNo, &angle, fopAcM_GetRoomNo(this));
|
|
}
|
|
}
|
|
|
|
mShopItems.setItemSum(3);
|
|
mShopItems.setItemSetDataList(mpItemSetList);
|
|
for(int i = 0; i < 3; i++) {
|
|
mShopItems.mSelectedItemIdx = i;
|
|
if((!dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && isBomb(mShopItems.getSelectItemNo())) || (dComIfGs_getItem(dInvSlot_BOW_e) == dItem_NONE_e && isArrow(mShopItems.getSelectItemNo()))) {
|
|
mShopItems.SoldOutItem(i);
|
|
m76C[i] = true;
|
|
}
|
|
else {
|
|
m76C[i] = false;
|
|
}
|
|
|
|
mItemPosOffsets[i] = Item_set_pos_data_tbl[mShopIndex][i];
|
|
}
|
|
|
|
mShopItems.mSelectedItemIdx = -1;
|
|
}
|
|
|
|
/* 00003018-00003090 .text isSellBomb__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::isSellBomb() {
|
|
for (int index = 0; index < 3; index++) {
|
|
if (isBomb(mShopItems.getItemNo(index)) && !mShopItems.isSoldOutItem(index)) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00003090-00003478 .text CreateInit__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::CreateInit() {
|
|
cXyz dummy(0.0f, 0.0f, 0.0f);
|
|
|
|
m726.x = current.angle.x;
|
|
m726.y = current.angle.y;
|
|
m726.z = current.angle.z;
|
|
|
|
attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
|
|
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAA;
|
|
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAA;
|
|
|
|
gravity = -30.0f;
|
|
|
|
switch(mType) {
|
|
case 0:
|
|
setAction(&daNpc_Bs1_c::wait_action, 0);
|
|
m83A = dComIfGp_evmng_getEventIdx("BS1_GETDEMO");
|
|
mEventCut.setActorInfo("Bs1", this);
|
|
mEventCut.setJntCtrlPtr(&mJntCtrl);
|
|
break;
|
|
case 1:
|
|
setAction(&daNpc_Bs1_c::wait_action, 0);
|
|
m83A = dComIfGp_evmng_getEventIdx("BS2_GETDEMO");
|
|
mEventCut.setActorInfo("Bs2", this);
|
|
mEventCut.setJntCtrlPtr(&mJntCtrl);
|
|
break;
|
|
}
|
|
|
|
eventInfo.setXyEventCB(daNpc_Bs1_XyEventCB);
|
|
m718 = current.pos;
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
mCyl.Set(l_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
|
|
m836 = 0;
|
|
m837 = 0;
|
|
m708 = 0;
|
|
m740 = 0;
|
|
mShopIndex = fopAcM_GetParam(this) & 0xFF;
|
|
if(mShopIndex != -1) {
|
|
if(mType == 0) {
|
|
mShopIndex = cLib_minMaxLimit<int>(mShopIndex + 2, 3, 5);
|
|
}
|
|
else {
|
|
mShopIndex = 6;
|
|
}
|
|
|
|
mShopIndex = cLib_minMaxLimit<s8>(mShopIndex, 0, 7);
|
|
|
|
mShopCamAction.setCamDataIdx(mShopIndex);
|
|
mShopItems.setItemDataIdx(mShopIndex);
|
|
mShopCamAction.setCamAction(0);
|
|
}
|
|
else {
|
|
mShopCamAction.setCamDataIdx(2);
|
|
mShopItems.setItemDataIdx(2);
|
|
mShopCamAction.setCamAction(0);
|
|
}
|
|
|
|
createShopList();
|
|
m82B = 2;
|
|
mEventIdxs[0] = dComIfGp_evmng_getEventIdx("PUT_PRAICE_TICKET");
|
|
mEventIdxs[1] = dComIfGp_evmng_getEventIdx("PUT_FULL_TICKET");
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003478-000034C8 .text setAttention__11daNpc_Bs1_cFb */
|
|
void daNpc_Bs1_c::setAttention(bool shouldSet) {
|
|
if (!shouldSet && m72F >= 2) {
|
|
return;
|
|
}
|
|
attention_info.position.set(
|
|
m718.x,
|
|
m718.y + l_HIO.mChild[mType].mNpc.mAttnYOffset,
|
|
m718.z
|
|
);
|
|
}
|
|
|
|
/* 000034C8-000037B8 .text lookBack__11daNpc_Bs1_cFv */
|
|
void daNpc_Bs1_c::lookBack() {
|
|
cXyz sp74;
|
|
cXyz sp68(0.0f, 0.0f, 0.0f);
|
|
cXyz* r28 = NULL;
|
|
s16 desiredYRot = current.angle.y;
|
|
switch (m830) {
|
|
case 0x1:
|
|
if (m730 != 0) {
|
|
sp74 = dNpc_playerEyePos(l_HIO.mChild[mType].mNpc.m04);
|
|
r28 = &sp74;
|
|
sp68 = current.pos;
|
|
sp68.y = eyePos.y - 80.0f;
|
|
setTexAnm(2);
|
|
} else {
|
|
r28 = NULL;
|
|
setTexAnm(1);
|
|
}
|
|
break;
|
|
case 0x2:
|
|
if (mShopCamAction.checkCamAction(NULL)) {
|
|
sp74 = dNpc_playerEyePos(l_HIO.mChild[mType].mNpc.m04);
|
|
} else if (mShopItems.mSelectedItemIdx == -1) {
|
|
sp74 = mShopCamAction.getItemZoomPos(100.0f);
|
|
} else {
|
|
cXyz selectItemBasePos = mShopItems.getSelectItemBasePos();
|
|
sp74 = mShopItems.getSelectItemPos();
|
|
mpShopCursor->setPos(selectItemBasePos);
|
|
mpShopCursor->setScale(
|
|
l_HIO.mChild[mType].m30,
|
|
l_HIO.mChild[mType].m34,
|
|
l_HIO.mChild[mType].m38,
|
|
l_HIO.mChild[mType].m3C,
|
|
l_HIO.mChild[mType].m40
|
|
);
|
|
mpShopCursor->anm_play();
|
|
}
|
|
r28 = &sp74;
|
|
sp68 = current.pos;
|
|
sp68.y = eyePos.y;
|
|
break;
|
|
}
|
|
if (mJntCtrl.trnChk()) {
|
|
cLib_addCalcAngleS2(&m724, l_HIO.mChild[mType].mNpc.mMaxHeadTurnVel, 4, 0x800);
|
|
} else {
|
|
m724 = 0;
|
|
}
|
|
mJntCtrl.lookAtTarget(¤t.angle.y, r28, sp68, desiredYRot, m724, true);
|
|
}
|
|
|
|
/* 000037B8-00003830 .text wait01__11daNpc_Bs1_cFv */
|
|
bool daNpc_Bs1_c::wait01() {
|
|
if (m731 != 0) {
|
|
m831 = m830;
|
|
m830 = 2;
|
|
} else if (m730 != 0) {
|
|
m82A = 2;
|
|
} else if (m82A == 0x02) {
|
|
m82A = 0;
|
|
}
|
|
return mpMorf->isMorf();
|
|
}
|
|
|
|
/* 00003830-00003970 .text talk01__11daNpc_Bs1_cFv */
|
|
bool daNpc_Bs1_c::talk01() {
|
|
u16 status = talk();
|
|
if (status == fopMsgStts_BOX_CLOSED_e) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
m830 = m831;
|
|
dComIfGp_event_reset();
|
|
m731 = 0;
|
|
setAnm(0);
|
|
player->offPlayerNoDraw();
|
|
mShopCamAction.Reset();
|
|
} else {
|
|
if (shopMsgCheck(m738) && status == 8) {
|
|
if (mShopItems.getSelectItemBuyMsg() == m738) {
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
}
|
|
} else if (status == 8 && checkBeastItemSellMsg(m738)) {
|
|
dComIfGp_setDoStatusForce(dActStts_CHOOSE_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
}
|
|
}
|
|
return mpMorf->isMorf();
|
|
}
|
|
|
|
/* 00003970-00003A70 .text wait_action__11daNpc_Bs1_cFPv */
|
|
BOOL daNpc_Bs1_c::wait_action(void*) {
|
|
if (mActionStatus == ACTION_STARTING) {
|
|
m830 = 1;
|
|
m731 = 0;
|
|
mActionStatus += 1; // ACTION_ONGOING
|
|
} else if (mActionStatus != ACTION_ENDING) {
|
|
s16 val = current.angle.y + getHead_y() + getBackbone_y();
|
|
m730 = chkAttention(current.pos, val);
|
|
bool setAttn;
|
|
switch (m830) {
|
|
case 1:
|
|
setAttn = wait01();
|
|
break;
|
|
case 2:
|
|
setAttn = talk01();
|
|
break;
|
|
default:
|
|
setAttn = FALSE;
|
|
break;
|
|
}
|
|
lookBack();
|
|
setAttention(setAttn);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003A70-00003CB4 .text getdemo_action__11daNpc_Bs1_cFPv */
|
|
BOOL daNpc_Bs1_c::getdemo_action(void*) {
|
|
static char* a_name[] = {
|
|
"Bs1",
|
|
"Bs2",
|
|
};
|
|
static char* a_cut_name[] = {
|
|
"dummy1",
|
|
"dummy2",
|
|
};
|
|
|
|
u32 staffIdx = dComIfGp_evmng_getMyStaffId(a_name[mType]);
|
|
u32 actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, a_cut_name, ARRAY_SIZE(a_cut_name), FALSE, 0);
|
|
if (mActionStatus == ACTION_STARTING) {
|
|
daPy_getPlayerActorClass()->offPlayerNoDraw();
|
|
m830 = m831;
|
|
mShopCamAction.Reset();
|
|
u16 itemNo = mShopItems.getSelectItemNo();
|
|
fpc_ProcID itemPID = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 0, -1, current.roomNo);
|
|
if (itemPID != fpcM_ERROR_PROCESS_ID_e) {
|
|
dComIfGp_event_setItemPartnerId(itemPID);
|
|
}
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
mShopItems.mSelectedItemIdx = -1;
|
|
mActionStatus += 1; // ACTION_ONGOING
|
|
} else if (mActionStatus != ACTION_ENDING) {
|
|
fopMsgM_demoMsgFlagOn();
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
if (dComIfGp_evmng_endCheck(m83A)) {
|
|
m82A = 1;
|
|
if (mType == 0) {
|
|
u8 someVal = dComIfGs_getEventReg(0x86FF);
|
|
if (someVal != 0) {
|
|
m740 = 0xF4C;
|
|
} else {
|
|
m740 = 0xF4E;
|
|
}
|
|
} else {
|
|
m740 = 0x2F53;
|
|
}
|
|
dComIfGp_event_reset();
|
|
setAction(&daNpc_Bs1_c::wait_action, NULL);
|
|
}
|
|
lookBack();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003CB4-00003D7C .text evn_talk_init__11daNpc_Bs1_cFi */
|
|
BOOL daNpc_Bs1_c::evn_talk_init(int actorId) {
|
|
int* pMsgNo = dComIfGp_evmng_getMyIntegerP(actorId, "MsgNo");
|
|
int* pEndMsgNo = dComIfGp_evmng_getMyIntegerP(actorId, "EndMsgNo");
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
l_msg = NULL;
|
|
if (pMsgNo != NULL) {
|
|
m738 = *pMsgNo;
|
|
} else {
|
|
m738 = 0;
|
|
}
|
|
if (pEndMsgNo != NULL) {
|
|
m744 = *pEndMsgNo;
|
|
} else {
|
|
m744 = 0;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003D7C-00003DE4 .text evn_continue_talk_init__11daNpc_Bs1_cFi */
|
|
BOOL daNpc_Bs1_c::evn_continue_talk_init(int actorId) {
|
|
int* pEndMsgNo = dComIfGp_evmng_getMyIntegerP(actorId, "EndMsgNo");
|
|
if (pEndMsgNo != NULL) {
|
|
m744 = *pEndMsgNo;
|
|
} else {
|
|
m744 = 0;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003DE4-00003F14 .text evn_talk__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::evn_talk() {
|
|
if (l_msgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
l_msgId = fopMsgM_messageSet(m738, &eyePos);
|
|
} else if (l_msg == NULL) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
fopMsgM_demoMsgFlagOn();
|
|
} else {
|
|
setAnmFromMsgTag();
|
|
u16 msgStatus = l_msg->mStatus;
|
|
if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&m738);
|
|
if (l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(m738);
|
|
}
|
|
} else {
|
|
if (msgStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
l_msg = NULL;
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
return TRUE;
|
|
}
|
|
if ((msgStatus == 2 || msgStatus == 6) && (m738 == m744)) {
|
|
m744 = 0;
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00003F14-00003FE0 .text evn_jnt_lock_init__11daNpc_Bs1_cFi */
|
|
BOOL daNpc_Bs1_c::evn_jnt_lock_init(int actorIdx) {
|
|
int* substance = dComIfGp_evmng_getMyIntegerP(actorIdx, "prm");
|
|
u32 jnt_to_lock;
|
|
if (substance != NULL) {
|
|
jnt_to_lock = *substance;
|
|
} else {
|
|
jnt_to_lock = 0;
|
|
}
|
|
switch (jnt_to_lock) {
|
|
case 0:
|
|
mJntCtrl.offHeadLock();
|
|
mJntCtrl.offBackBoneLock();
|
|
break;
|
|
case 1:
|
|
mJntCtrl.onHeadLock();
|
|
mJntCtrl.offBackBoneLock();
|
|
break;
|
|
case 2:
|
|
mJntCtrl.offHeadLock();
|
|
mJntCtrl.onBackBoneLock();
|
|
break;
|
|
case 3:
|
|
mJntCtrl.onHeadLock();
|
|
mJntCtrl.onBackBoneLock();
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003FE0-00004048 .text evn_wait_init__11daNpc_Bs1_cFi */
|
|
BOOL daNpc_Bs1_c::evn_wait_init(int actorIdx) {
|
|
int* pTimer = dComIfGp_evmng_getMyIntegerP(actorIdx, "Timer");
|
|
if (pTimer != NULL) {
|
|
m63E = (u16)*pTimer;
|
|
} else {
|
|
m63E = 0;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004048-00004078 .text evn_wait__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::evn_wait() {
|
|
return cLib_calcTimer(&m63E) == 0 ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 00004078-000040E4 .text evn_set_anm_init__11daNpc_Bs1_cFi */
|
|
BOOL daNpc_Bs1_c::evn_set_anm_init(int actorIdx) {
|
|
u32 anmNo;
|
|
int* pAnmNo = dComIfGp_evmng_getMyIntegerP(actorIdx, "AnmNo");
|
|
if (pAnmNo != NULL) {
|
|
anmNo = *pAnmNo;
|
|
} else {
|
|
anmNo = 0;
|
|
}
|
|
setAnm(anmNo);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000040E4-00004138 .text evn_praise_init__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::evn_praise_init() {
|
|
s16 life = dComIfGs_getMaxLife() - dComIfGs_getLife();
|
|
dComIfGp_setItemLifeCount(life);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004138-000041E0 .text evn_mantan_init__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::evn_mantan_init() {
|
|
s16 life = dComIfGs_getMaxLife() - dComIfGs_getLife();
|
|
s16 magic = dComIfGs_getMaxMagic() - dComIfGs_getMagic();
|
|
s16 bombs = dComIfGs_getBombMax() - dComIfGs_getBombNum();
|
|
s16 arrows = dComIfGs_getArrowMax() - dComIfGs_getArrowNum();
|
|
dComIfGp_setItemLifeCount(life);
|
|
dComIfGp_setItemMagicCount(magic);
|
|
dComIfGp_setItemBombNumCount(bombs);
|
|
dComIfGp_setItemArrowNumCount(arrows);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000041E0-00004384 .text privateCut__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::privateCut() {
|
|
static char* cut_name_tbl[] = {
|
|
"TALKMSG",
|
|
"CONTINUE_TALK",
|
|
"JNTLOCK",
|
|
"WAIT",
|
|
"SETANM",
|
|
"PRAISE",
|
|
"MANTAN",
|
|
"GETTICKET",
|
|
};
|
|
|
|
enum {
|
|
ACT_TALKMSG,
|
|
ACT_CONTINUE_TALK,
|
|
ACT_JNTLOCK,
|
|
ACT_WAIT,
|
|
ACT_SETANM,
|
|
ACT_PRAISE,
|
|
ACT_MANTAN,
|
|
ACT_GETTICKET,
|
|
};
|
|
|
|
int staffId = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
|
|
if (staffId == -1) {
|
|
return FALSE;
|
|
}
|
|
int actIdx = dComIfGp_evmng_getMyActIdx(staffId, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0);
|
|
if (actIdx == -1) {
|
|
dComIfGp_evmng_cutEnd(staffId);
|
|
} else {
|
|
if (dComIfGp_evmng_getIsAddvance(staffId)) {
|
|
switch (actIdx) {
|
|
case ACT_TALKMSG:
|
|
evn_talk_init(staffId);
|
|
break;
|
|
case ACT_CONTINUE_TALK:
|
|
evn_continue_talk_init(staffId);
|
|
break;
|
|
case ACT_JNTLOCK:
|
|
evn_jnt_lock_init(staffId);
|
|
break;
|
|
case ACT_WAIT:
|
|
evn_wait_init(staffId);
|
|
break;
|
|
case ACT_SETANM:
|
|
evn_set_anm_init(staffId);
|
|
break;
|
|
case ACT_PRAISE:
|
|
evn_praise_init();
|
|
break;
|
|
case ACT_MANTAN:
|
|
evn_mantan_init();
|
|
break;
|
|
case ACT_GETTICKET:
|
|
dComIfGs_setReserveItemEmpty();
|
|
break;
|
|
}
|
|
}
|
|
|
|
BOOL end;
|
|
switch (actIdx) {
|
|
case ACT_TALKMSG:
|
|
case ACT_CONTINUE_TALK:
|
|
end = evn_talk();
|
|
break;
|
|
case ACT_WAIT:
|
|
end = evn_wait();
|
|
break;
|
|
default:
|
|
end = TRUE;
|
|
break;
|
|
}
|
|
if (end) {
|
|
dComIfGp_evmng_cutEnd(staffId);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004384-000044EC .text event_action__11daNpc_Bs1_cFPv */
|
|
BOOL daNpc_Bs1_c::event_action(void*) {
|
|
if (mActionStatus == ACTION_STARTING) {
|
|
dComIfGp_evmng_getMyStaffId("Bs1", NULL, 0);
|
|
mActionStatus += 1; // ACTION_ONGOING
|
|
} else if (mActionStatus != ACTION_ENDING) {
|
|
privateCut();
|
|
if (dComIfGp_evmng_endCheck(mEventIdxs[m82B])) {
|
|
m82A = 0;
|
|
m82B = 2;
|
|
dComIfGp_event_reset();
|
|
setAction(&daNpc_Bs1_c::wait_action, NULL);
|
|
}
|
|
lookBack();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000044EC-000046E8 .text _draw__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::_draw() {
|
|
J3DModel* pModel = mpMorf->getModel();
|
|
J3DModelData* pModelData = pModel->getModelData();
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(pModel, &tevStr);
|
|
mBtpAnm.entry(pModelData, mFrame);
|
|
J3DModel* pHelmetModel = mpHelmetModel;
|
|
g_env_light.setLightTevColorType(pHelmetModel, &tevStr);
|
|
mpMorf->updateDL();
|
|
if (l_HIO.mChild[mType].m2C != 0) {
|
|
mDoMtx_stack_c::copy(pModel->getAnmMtx(m_head_jnt_num));
|
|
mDoMtx_stack_c::transM(4.0f, 0.0f, 0.0f);
|
|
pHelmetModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoExt_modelUpdateDL(pHelmetModel);
|
|
}
|
|
mBtpAnm.remove(pModelData);
|
|
|
|
cXyz shadowPos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
m29C = dComIfGd_setShadow(
|
|
m29C, 1, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f,
|
|
current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr
|
|
);
|
|
|
|
if (mShopItems.mSelectedItemIdx >= 0) {
|
|
mpShopCursor->draw();
|
|
}
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
if (m76C[i] != 0) {
|
|
g_env_light.setLightTevColorType(mpSoldSignModels[i], &tevStr);
|
|
mDoExt_modelUpdateDL(mpSoldSignModels[i]);
|
|
}
|
|
}
|
|
|
|
dSnap_RegistFig(DSNAP_TYPE_BS, this, current.pos, current.angle.y, 1.0f, 1.0f, 1.0f);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000046E8-000048D4 .text _execute__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::_execute() {
|
|
mJntCtrl.setParam(
|
|
l_HIO.mChild[mType].mNpc.mMaxBackboneX, l_HIO.mChild[mType].mNpc.mMaxBackboneY,
|
|
l_HIO.mChild[mType].mNpc.mMinBackboneX, l_HIO.mChild[mType].mNpc.mMinBackboneY,
|
|
l_HIO.mChild[mType].mNpc.mMaxHeadX, l_HIO.mChild[mType].mNpc.mMaxHeadY,
|
|
l_HIO.mChild[mType].mNpc.mMinHeadX, l_HIO.mChild[mType].mNpc.mMinHeadY,
|
|
l_HIO.mChild[mType].mNpc.mMaxTurnStep);
|
|
playTexPatternAnm();
|
|
m72E = mpMorf->play(&eyePos, 0, 0);
|
|
if (mpMorf->getFrame() < m734) {
|
|
m72E = 1;
|
|
}
|
|
m734 = mpMorf->getFrame();
|
|
checkOrder();
|
|
(this->*mCurrActionFunc)(NULL);
|
|
mShopCamAction.move();
|
|
mShopItems.Item_Move();
|
|
eventOrder();
|
|
fopAcM_posMoveF(this, mStts.GetCCMoveP());
|
|
mAcch.CrrPos(*dComIfG_Bgsp());
|
|
tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
|
|
tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
|
|
J3DModel* pModel = mpMorf->getModel();
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
pModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
for (int i = 0; i < 3; i++) {
|
|
if (m76C[i] != 0) {
|
|
mDoMtx_stack_c::transS(mItemPosOffsets[i]);
|
|
mpSoldSignModels[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
setCollision();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000048D4-00004960 .text _delete__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::_delete() {
|
|
dComIfG_resDelete(&mPhase, "Bs");
|
|
if (heap != NULL && mpMorf != NULL) {
|
|
mpMorf->stopZelAnime();
|
|
}
|
|
if (l_HIO.m8 >= 0 && (l_HIO.m8 -= 1) < 0) {
|
|
mDoHIO_deleteChild(l_HIO.mNo);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004960-00004980 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return ((daNpc_Bs1_c*)i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 00004980-00004AD8 .text _create__11daNpc_Bs1_cFv */
|
|
cPhs_State daNpc_Bs1_c::_create() {
|
|
fopAcM_SetupActor(this, daNpc_Bs1_c);
|
|
|
|
cPhs_State phase_state = dComIfG_resLoad(&mPhase, "Bs");
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
mType = fopAcM_GetParamBit(fopAcM_GetParam(this), 0x14, 0x4);
|
|
switch (mType) {
|
|
case 0:
|
|
// Normal Beedle
|
|
mType = 0;
|
|
break;
|
|
case 1:
|
|
// Masked Beedle
|
|
mType = 1;
|
|
break;
|
|
default:
|
|
// Default to Normal Beedle
|
|
mType = 0;
|
|
break;
|
|
}
|
|
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x0)) {
|
|
return cPhs_ERROR_e;
|
|
} else {
|
|
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
|
if (l_HIO.m8 < 0) {
|
|
l_HIO.mNo = mDoHIO_createChild("ボ−トショップ店員", &l_HIO); // "Boat Shopkeeper"
|
|
}
|
|
l_HIO.m8 += 1;
|
|
if (!CreateInit()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
}
|
|
}
|
|
return phase_state;
|
|
}
|
|
|
|
/* 000050A8-00005470 .text CreateHeap__11daNpc_Bs1_cFv */
|
|
BOOL daNpc_Bs1_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Bs", BS_INDEX_BDL_BS);
|
|
mpMorf = new mDoExt_McaMorf(
|
|
modelData,
|
|
NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("Bs", BS_INDEX_BCK_BS_WAIT01),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, NULL,
|
|
0, 0x11020203
|
|
);
|
|
if (!mpMorf || !mpMorf->getModel()) {
|
|
mpMorf = NULL;
|
|
return FALSE;
|
|
}
|
|
|
|
m_head_jnt_num = modelData->getJointName()->getIndex("head");
|
|
JUT_ASSERT(0xa68, m_head_jnt_num >= 0);
|
|
m_backbone_jnt_num = modelData->getJointName()->getIndex("backbone1");
|
|
JUT_ASSERT(0xa6a, m_backbone_jnt_num >= 0);
|
|
|
|
switch (mType) {
|
|
case 0:
|
|
m828 = 1;
|
|
break;
|
|
case 1:
|
|
m828 = 1;
|
|
break;
|
|
}
|
|
|
|
if (!initTexPatternAnm(FALSE)) {
|
|
return FALSE;
|
|
}
|
|
|
|
mpHelmetModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes("Bs", BS_INDEX_BDL_BS_MET), 0, 0x11020203);
|
|
if (!mpHelmetModel) {
|
|
return FALSE;
|
|
}
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
mpSoldSignModels[i] = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes("Bs", BS_INDEX_BDL_VSOLD), 0, 0x11020203);
|
|
if (mpSoldSignModels[i] == NULL) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
for (u16 jntNo = 0; jntNo < modelData->getJointNum(); jntNo++) {
|
|
if (jntNo == getHeadJntNum() || jntNo == getBackboneJntNum()) {
|
|
mpMorf->getModel()->getModelData()->getJointNodePointer(jntNo)->setCallBack(nodeCallBack_Bs);
|
|
}
|
|
}
|
|
mpMorf->getModel()->setUserArea((u32)this);
|
|
mAcchCir.SetWall(30.0f, 0.0f);
|
|
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this));
|
|
mpShopCursor = ShopCursor_create((J3DModelData*)dComIfG_getObjectRes("Bs", BS_INDEX_BMD_SHOP_CURSOR01),
|
|
(J3DAnmTevRegKey*)dComIfG_getObjectRes("Bs", BS_INDEX_BRK_SHOP_CURSOR01),
|
|
l_HIO.mChild[mType].m30);
|
|
|
|
if (mpShopCursor != NULL) {
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/* 00005470-00005490 .text daNpc_Bs1_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daNpc_Bs1_Create(fopAc_ac_c* i_this) {
|
|
return ((daNpc_Bs1_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 00005490-000054B0 .text daNpc_Bs1_Delete__FP11daNpc_Bs1_c */
|
|
static BOOL daNpc_Bs1_Delete(daNpc_Bs1_c* i_this) {
|
|
return i_this->_delete();
|
|
}
|
|
|
|
/* 000054B0-000054D0 .text daNpc_Bs1_Execute__FP11daNpc_Bs1_c */
|
|
static BOOL daNpc_Bs1_Execute(daNpc_Bs1_c* i_this) {
|
|
return i_this->_execute();
|
|
}
|
|
|
|
/* 000054D0-000054F0 .text daNpc_Bs1_Draw__FP11daNpc_Bs1_c */
|
|
static BOOL daNpc_Bs1_Draw(daNpc_Bs1_c* i_this) {
|
|
return i_this->_draw();
|
|
}
|
|
|
|
/* 000054F0-000054F8 .text daNpc_Bs1_IsDelete__FP11daNpc_Bs1_c */
|
|
static BOOL daNpc_Bs1_IsDelete(daNpc_Bs1_c*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class l_daNpc_Bs1_Method = {
|
|
(process_method_func)daNpc_Bs1_Create,
|
|
(process_method_func)daNpc_Bs1_Delete,
|
|
(process_method_func)daNpc_Bs1_Execute,
|
|
(process_method_func)daNpc_Bs1_IsDelete,
|
|
(process_method_func)daNpc_Bs1_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_NPC_BS1 = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_NPC_BS1,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daNpc_Bs1_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_NPC_BS1,
|
|
/* Actor SubMtd */ &l_daNpc_Bs1_Method,
|
|
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_12_e,
|
|
};
|