work on link bow, kandelaar, and whistle (#2004)

This commit is contained in:
TakaRikka
2023-12-15 06:04:05 -08:00
committed by GitHub
parent 8293fb7c22
commit 6e58e660d5
21 changed files with 1038 additions and 193 deletions
+2 -2
View File
@@ -15206,8 +15206,8 @@ void daAlink_c::setItemActionButtonStatus(u8 param_0) {
}
/* 800B26FC-800B271C 0AD03C 0020+00 2/2 0/0 1/1 .text itemActionTrigger__9daAlink_cFv */
void daAlink_c::itemActionTrigger() {
spActionTrigger();
BOOL daAlink_c::itemActionTrigger() {
return spActionTrigger();
}
/* 800B271C-800B2EA4 0AD05C 0788+00 1/1 0/0 0/0 .text setStickData__9daAlink_cFv */
+303 -11
View File
@@ -3,6 +3,8 @@
* Player Bow and Arrow action handling
*/
#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "rel/d/a/d_a_arrow/d_a_arrow.h"
/* 800DE64C-800DE740 0D8F8C 00F4+00 1/1 0/0 2/2 .text getArrowFlyData__9daAlink_cCFPfPfi
@@ -59,13 +61,13 @@ BOOL daAlink_c::checkBowAndSlingItem(int i_itemNo) {
/* 800DE7D4-800DE884 0D9114 00B0+00 1/1 0/0 0/0 .text setSlingModel__9daAlink_cFv */
void daAlink_c::setSlingModel() {
J3DAnmTransform* bck = (J3DAnmTransform*)mAnmHeap9.loadDataIdx(0x1F9);
JKRHeap* heap = setItemHeap();
JKRHeap* prev_heap = setItemHeap();
J3DModelData* model_data = loadAramBmd(0x319, 0x2C00);
mHeldItemModel = initModel(model_data, 0);
mItemBck.init(bck, 0, 2, lit_6040, 0, -1, false);
mDoExt_setCurrentHeap(heap);
mDoExt_setCurrentHeap(prev_heap);
field_0x2f95 = 5;
field_0x2f94 = 103;
}
@@ -121,8 +123,8 @@ void daAlink_c::makeArrow() {
field_0x301e = 0;
}
fopAc_ac_c* arrow_actor = daArrow_c::makeArrow(this, field_0x301e);
mItemAcKeep.setData(arrow_actor);
fopAc_ac_c* arrow_p = daArrow_c::makeArrow(this, field_0x301e);
mItemAcKeep.setData(arrow_p);
}
mItemVar0.field_0x3018 = 0;
@@ -130,17 +132,17 @@ void daAlink_c::makeArrow() {
/* 800DEAE4-800DEB8C 0D9424 00A8+00 3/3 0/0 0/0 .text deleteArrow__9daAlink_cFv */
void daAlink_c::deleteArrow() {
daArrow_c* arrow = (daArrow_c*)mItemAcKeep.getActor();
daArrow_c* arrow_p = (daArrow_c*)mItemAcKeep.getActor();
if (arrow != NULL && fopAcM_GetName(arrow) == PROC_ARROW) {
if (arrow->checkBombArrow() &&
if (arrow_p != NULL && fopAcM_GetName(arrow_p) == PROC_ARROW) {
if (arrow_p->checkBombArrow() &&
(mDamageTimer == daAlinkHIO_damage_c0::m.mInvincibleTime || i_checkModeFlg(8)))
{
arrow->setBombArrowExplode();
arrow_p->setBombArrowExplode();
dComIfGp_addSelectItemNum(mSelectItemId, -1);
dComIfGp_setItemArrowNumCount(-1);
} else {
fopAcM_delete(arrow);
fopAcM_delete(arrow_p);
}
mItemAcKeep.clearData();
}
@@ -157,6 +159,44 @@ void daAlink_c::setBowOrSlingStatus() {
}
/* 800DEBC8-800DED88 0D9508 01C0+00 1/1 0/0 0/0 .text changeArrowType__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
void daAlink_c::changeArrowType() {
if (checkCanoeSlider() || (mEquipItem == BOW && field_0x301e == 0) ||
(mEquipItem == BOMB_ARROW && field_0x301e == 0 &&
dComIfGp_getSelectItemNum(mSelectItemId) == 0) ||
(mEquipItem == HAWK_ARROW && i_checkAttentionLock()))
{
return;
}
setItemActionButtonStatus(0x11);
if (arrowChangeTrigger()) {
if (mEquipItem == HAWK_ARROW) {
if (i_dComIfGp_checkPlayerStatus0(0, 0x200000)) {
dComIfGp_clearPlayerStatus0(0, 0x200000);
seStartSystem(Z2SE_AL_HAWK_EYE_PUTOFF);
} else {
dComIfGp_setPlayerStatus0(0, 0x200000);
seStartSystem(Z2SE_AL_HAWK_EYE_PUTON);
}
} else {
if (field_0x301e == 1) {
field_0x301e = 0;
} else {
field_0x301e = 1;
}
if (mItemAcKeep.getActor() != NULL) {
deleteArrow();
makeArrow();
setBowReloadAnime();
}
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -165,6 +205,7 @@ asm void daAlink_c::changeArrowType() {
#include "asm/d/a/d_a_alink/changeArrowType__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 800DED88-800DEE1C 0D96C8 0094+00 1/1 0/0 0/0 .text cancelBowMoveRideNotAtn__9daAlink_cFv */
BOOL daAlink_c::cancelBowMoveRideNotAtn() {
@@ -236,14 +277,194 @@ void daAlink_c::setBowReloadAnime() {
}
/* 800DF0BC-800DF798 0D99FC 06DC+00 2/2 0/0 0/0 .text checkUpperItemActionBow__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
BOOL daAlink_c::checkUpperItemActionBow() {
daPy_frameCtrl_c* frameCtrl_p = &mUpperFrameCtrl[2];
if (mEquipItem == PACHINKO) {
mDoMtx_multVec(getLeftItemMatrix(), &slingLocalPos, &mHeldItemRootPos);
}
if (checkBowChargeWaitAnime()) {
daArrow_c* arrow_p = (daArrow_c*)mItemAcKeep.getActor();
if (mEquipItem != PACHINKO) {
if (field_0x301c > 0) {
field_0x301c--;
if (field_0x301c <= frameCtrl_p->getEnd() && frameCtrl_p->getFrame() < 0.1f &&
frameCtrl_p->getRate() < 0.1f)
{
frameCtrl_p->setRate(1.0f);
}
} else {
i_onResetFlg0(RFLG0_UNK_10);
cancelItemUseQuake(0);
}
}
if (checkReadyItem()) {
if (mItemVar0.field_0x3018 != 0) {
setUpperAnimeParam(0xC, UPPER_2, &daAlinkHIO_bow_c0::m.mShootAnm);
setFacePriBck(0xE8);
field_0x2f96 = 0;
u16 var_r29;
if (mEquipItem == PACHINKO) {
var_r29 = 0x1F1;
if (dComIfGs_getPachinkoNum() != 0 &&
daArrow_c::makeSlingStone(this, &mHeldItemRootPos) != NULL)
{
dComIfGp_setItemPachinkoNumCount(-1);
}
} else if (field_0x301c != 0) {
var_r29 = 0x43;
} else {
var_r29 = 0x44;
}
changeItemBck(var_r29, daAlinkHIO_bow_c0::m.mShootAnm.mStartFrame);
mItemVar0.field_0x3018 = 0;
} else if (mEquipItem == PACHINKO) {
if (!itemButton()) {
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
seStartOnlyReverb(Z2SE_AL_PACHINKO_SHOT);
mItemVar0.field_0x3018 = 1;
resetFacePriAnime();
}
} else if (!itemButton()) {
if (arrow_p != NULL) {
u32 sound;
int shock_strength;
if (field_0x301c != 0) {
arrow_p->setShoot();
shock_strength = 1;
if (arrow_p->checkBombArrow()) {
sound = Z2SE_OBJ_ARROWBOMB_SHOT;
} else {
sound = Z2SE_OBJ_ARROW_SHOT_NORMAL;
}
} else {
arrow_p->setChargeShoot();
shock_strength = 2;
if (arrow_p->checkBombArrow()) {
sound = Z2SE_OBJ_ARROWBOMB_SHOTGAIN;
} else {
sound = Z2SE_OBJ_ARROW_SHOT_GAIN;
}
}
dComIfGp_getVibration().StartShock(shock_strength, 1, cXyz(0.0f, 1.0f, 0.0f));
seStartOnlyReverb(sound);
if (field_0x301e == 1) {
dComIfGp_addSelectItemNum(mSelectItemId, -1);
}
dComIfGp_setItemArrowNumCount(-1);
mItemAcKeep.clearData();
i_onResetFlg0(RFLG0_UNK_20000000);
field_0x30a4 = daAlinkHIO_bow_c0::m.mBombArrowHoldTime;
} else {
seStartOnlyReverb(Z2SE_AL_ARROW_EMPTY);
}
mItemVar0.field_0x3018 = 1;
resetFacePriAnime();
if (mEquipItem == BOW) {
field_0x301e = 0;
}
} else {
changeArrowType();
}
}
} else if (checkBowReloadAnime()) {
if (checkAnmEnd(frameCtrl_p)) {
setUpperAnimeBaseSpeed(10, 0.0f, -1.0f);
setFacePriTexture(FTANM_UNK_9);
setFacePriBck(0xE6);
if (mEquipItem != PACHINKO) {
changeItemBck(0x42, 0.0f);
dComIfGp_getVibration().StartQuake(1, 1, cXyz(0.0f, 1.0f, 0.0f));
i_onNoResetFlg3(FLG3_UNK_4);
}
}
} else if (checkBowWaitAnime()) {
if ((mItemVar0.field_0x3018 == 0 && mFastShotTime != 0) ||
(mItemMode == 0 && !itemButton() && mItemVar0.field_0x3018 == 0 &&
cancelBowMoveRideNotAtn()))
{
resetUpperAnime(UPPER_2, 3.0f);
dComIfGp_clearPlayerStatus0(0, 0x1040);
return 1;
}
if (mItemMode == 0 && (itemButton() || mItemVar0.field_0x3018 != 0) && checkReadyItem() &&
(field_0x30a4 == 0 || field_0x301e != 1))
{
setBowReloadAnime();
if (mEquipItem == PACHINKO) {
mItemVar0.field_0x3018 = 0;
} else {
makeArrow();
}
} else if (mEquipItem == HAWK_ARROW) {
changeArrowType();
}
if (mItemMode != 0) {
mItemMode--;
}
} else if (checkBowShootAnime()) {
if (mUpperFrameCtrl[2].getFrame() >= 6.0f) {
field_0x2f97 = 5;
} else if (mUpperFrameCtrl[2].getFrame() >= 1.0f) {
field_0x2f96 = 4;
}
if (checkAnmEnd(&mUpperFrameCtrl[2]) && cancelBowMoveRideNotAtn()) {
resetUpperAnime(UPPER_2, 3.0f);
dComIfGp_clearPlayerStatus0(0, 0x1040);
return 1;
}
if (checkAnmEnd(&mUpperFrameCtrl[2]) ||
(mUpperFrameCtrl[2].getFrame() > daAlinkHIO_bow_c0::m.mShootAnm.mCheckFrame &&
itemButton()))
{
setBowReadyAnime();
}
if (mItemMode != 0) {
mItemMode--;
}
}
if (checkBowWaitAnime() || (mEquipItem == PACHINKO && checkBowChargeWaitAnime())) {
field_0x33dc += daAlinkHIO_bow_c0::m.mShootAnm.mSpeed;
} else {
field_0x33dc = mUpperFrameCtrl[2].getFrame();
}
return cancelUpperItemReadyAnime(0);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::checkUpperItemActionBow() {
asm BOOL daAlink_c::checkUpperItemActionBow() {
nofralloc
#include "asm/d/a/d_a_alink/checkUpperItemActionBow__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 800DF798-800DF814 0DA0D8 007C+00 1/1 0/0 0/0 .text checkUpperItemActionBowFly__9daAlink_cFv */
void daAlink_c::checkUpperItemActionBowFly() {
@@ -257,6 +478,76 @@ void daAlink_c::checkUpperItemActionBowFly() {
}
/* 800DF814-800DFAE8 0DA154 02D4+00 4/4 0/0 0/0 .text checkNextActionBow__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
int daAlink_c::checkNextActionBow() {
if (mFastShotTime != 0 && checkBowReadyAnime()) {
mFastShotTime--;
}
BOOL var_r31 = false;
if (!checkBowAnime()) {
setBowReadyAnime();
setFastShotTimer();
if (!i_checkAttentionLock()) {
field_0x2fe4 = shape_angle.y;
}
mItemMode = 0;
mItemVar0.field_0x3018 = 1;
if (mEquipItem == HAWK_ARROW) {
var_r31 = true;
mFastShotTime = 0;
}
if ((!i_checkAttentionLock() && !checkDashAnime()) || i_checkModeFlg(0x400)) {
mFastShotTime = 0;
if (i_checkAttentionLock() && i_checkModeFlg(0x400)) {
mItemVar0.field_0x3018 = 1;
} else {
mItemVar0.field_0x3018 = 0;
}
if (!i_checkResetFlg0(RFLG0_UNK_80)) {
mItemMode = 3;
}
}
}
BOOL rt;
if (!i_checkAttentionLock() && mFastShotTime == 0) {
if (i_checkModeFlg(0x400)) {
if (checkCanoeRide()) {
rt = procCanoeBowSubjectInit();
} else {
rt = procHorseBowSubjectInit();
}
} else {
rt = procBowSubjectInit();
}
} else {
if (i_checkModeFlg(0x400)) {
if (checkCanoeRide()) {
rt = procCanoeBowMoveInit();
} else {
rt = procHorseBowMoveInit();
}
} else {
rt = procBowMoveInit();
}
}
if (rt && var_r31) {
dComIfGp_setPlayerStatus0(0, 0x200000);
seStartSystem(Z2SE_AL_HAWK_EYE_PUTON);
}
return rt;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -265,6 +556,7 @@ asm int daAlink_c::checkNextActionBow() {
#include "asm/d/a/d_a_alink/checkNextActionBow__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 800DFAE8-800DFBC8 0DA428 00E0+00 1/1 0/0 0/0 .text setBowModel__9daAlink_cFv */
// matches with literals
@@ -400,4 +692,4 @@ int daAlink_c::procBowMove() {
}
return 1;
}
}
+39 -23
View File
@@ -3,6 +3,10 @@
* Player Particle Effect handling
*/
#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_k_wmark.h"
/* 80120580-80120634 11AEC0 00B4+00 21/21 0/0 0/0 .text
* setEmitter__9daAlink_cFPUlUsPC4cXyzPC5csXyz */
// matches with literal
@@ -57,6 +61,24 @@ void daAlink_c::stopDrawParticle(u32 param_0) {
}
/* 801207BC-80120880 11B0FC 00C4+00 1/0 0/0 0/0 .text setEffectFrontRollParam__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
void daAlink_c::setEffectFrontRollParam() {
int j, i;
for (i = 0; i < 5; i++) {
for (j = 0; j < 2; j++) {
if (field_0x2e54.getTypeFour(i, j) == 0) {
JPABaseEmitter* emitter_p = field_0x2e54.getEmitterFour(i, j, 0);
if (emitter_p != NULL) {
emitter_p->setRate(2.0f);
}
}
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -65,6 +87,7 @@ asm void daAlink_c::setEffectFrontRollParam() {
#include "asm/d/a/d_a_alink/setEffectFrontRollParam__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 80120880-80120B00 11B1C0 0280+00 1/0 0/0 0/0 .text setEffectSlipParam__9daAlink_cFv */
#pragma push
@@ -111,14 +134,14 @@ asm void daAlink_c::setEffectSumouParam() {
#pragma pop
/* 801211C0-80121214 11BB00 0054+00 46/46 0/0 0/0 .text setFootEffectProcType__9daAlink_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::setFootEffectProcType(int param_0) {
nofralloc
#include "asm/d/a/d_a_alink/setFootEffectProcType__9daAlink_cFi.s"
void daAlink_c::setFootEffectProcType(int param_0) {
if (param_0 != field_0x2f9f) {
field_0x2e54.clearFourAllID();
}
field_0x2f9e = param_0;
field_0x2f9f = field_0x2f9e;
}
#pragma pop
/* 80121214-80121304 11BB54 00F0+00 1/1 0/0 0/0 .text setWolfFootOn__9daAlink_cFi */
#pragma push
@@ -132,14 +155,11 @@ asm void daAlink_c::setWolfFootOn(int param_0) {
/* 80121304-80121388 11BC44 0084+00 1/1 0/0 0/0 .text setFootMark__9daAlink_cFP4cXyzUsi
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::setFootMark(cXyz* param_0, u16 param_1, int param_2) {
nofralloc
#include "asm/d/a/d_a_alink/setFootMark__9daAlink_cFP4cXyzUsi.s"
void daAlink_c::setFootMark(cXyz* i_pos, u16 i_mtxNo, int param_2) {
cXyz sp8;
mDoMtx_multVecSR(mpLinkModel->i_getAnmMtx(i_mtxNo), &cXyz::BaseX, &sp8);
dkWmark_c::setFootMark(i_pos, sp8.atan2sX_Z(), param_2);
}
#pragma pop
/* 80121388-801221F0 11BCC8 0E68+00 1/1 0/0 0/0 .text setEffect__9daAlink_cFv */
#pragma push
@@ -162,14 +182,10 @@ asm void daAlink_c::setSumouEffect() {
#pragma pop
/* 801225E8-80122654 11CF28 006C+00 1/1 0/0 0/0 .text setWaterfallEffect__9daAlink_cFPC4cXyzPUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::setWaterfallEffect(cXyz const* param_0, u32* param_1) {
nofralloc
#include "asm/d/a/d_a_alink/setWaterfallEffect__9daAlink_cFPC4cXyzPUl.s"
void daAlink_c::setWaterfallEffect(cXyz const* param_0, u32* param_1) {
setEmitter(&param_1[0], 0x8614, param_0, NULL);
setEmitter(&param_1[1], 0x8615, param_0, NULL);
}
#pragma pop
/* 80122654-8012277C 11CF94 0128+00 1/1 0/0 0/0 .text setWaterfallEffect__9daAlink_cFv */
#pragma push
@@ -459,8 +475,8 @@ asm void daAlink_c::setBottleEffect() {
#pragma pop
/* 80124E28-80124EA8 11F768 0080+00 2/2 0/0 0/0 .text clearFirePointDamageEffect__9daAlink_cFi */
void daAlink_c::clearFirePointDamageEffect(int i) {
firePointEff_c* fire_eff = &field_0x32d8[i];
void daAlink_c::clearFirePointDamageEffect(int i_effNo) {
firePointEff_c* fire_eff = &field_0x32d8[i_effNo];
if (fire_eff->field_0x0 != 0) {
stopDrawParticle(fire_eff->field_0x4);
+245 -30
View File
@@ -3,9 +3,14 @@
* Player Lantern action handling
*/
#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "rel/d/a/e/d_a_e_sm2/d_a_e_sm2.h"
#include "rel/d/a/tag/d_a_tag_ss_drink/d_a_tag_ss_drink.h"
/* 80110654-80110668 10AF94 0014+00 1/1 0/0 0/0 .text daAlink_searchTagKandelaar__FP10fopAc_ac_cPv
*/
static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* param_1) {
static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* i_data) {
if (fopAcM_GetName(i_actor) == PROC_TAG_LANTERN) {
return i_actor;
}
@@ -15,12 +20,13 @@ static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* param_1
/* 80110668-801106E8 10AFA8 0080+00 1/1 0/0 0/0 .text daAlink_searchTagKtOnFire__FP10fopAc_ac_cPv
*/
static fopAc_ac_c* daAlink_searchTagKtOnFire(fopAc_ac_c* i_actor, void* param_1) {
daAlink_c* link = daAlink_getAlinkActorClass();
static fopAc_ac_c* daAlink_searchTagKtOnFire(fopAc_ac_c* i_actor, void* i_data) {
daAlink_c* player_p = daAlink_getAlinkActorClass();
if (fopAcM_GetName(i_actor) == PROC_Tag_KtOnFire &&
i_actor->current.pos.abs2(link->current.pos) < lit_26816 &&
fopAcM_seenActorAngleY(link, i_actor) < 0x3000) {
i_actor->current.pos.abs2(player_p->current.pos) < lit_26816 &&
fopAcM_seenActorAngleY(player_p, i_actor) < 0x3000)
{
return i_actor;
}
@@ -66,7 +72,7 @@ BOOL daAlink_c::checkWaterInKandelaarOffset(f32 param_0) {
void daAlink_c::checkWaterInKandelaar(f32 param_0) {
if (i_checkNoResetFlg2(FLG2_UNK_1) && checkWaterInKandelaarOffset(param_0)) {
if (mEquipItem == KANTERA) {
deleteEquipItem(1, 1);
deleteEquipItem(TRUE, TRUE);
} else {
offKandelaarModel();
seStartOnlyReverb(Z2SE_AL_ITEM_TAKEOUT);
@@ -90,7 +96,9 @@ bool daAlink_c::checkUseKandelaar(int param_0) {
/* 801108B4-801108EC 10B1F4 0038+00 1/0 0/0 0/0 .text checkKandelaarSwing__9daAlink_cCFi
*/
bool daAlink_c::checkKandelaarSwing(int param_0) const {
if ((checkKandelaarSwingAnime() || mProcID == PROC_KANDELAAR_SWING) && (dComIfGs_getOil() != 0 || param_0 == 0)) {
if ((checkKandelaarSwingAnime() || mProcID == PROC_KANDELAAR_SWING) &&
(dComIfGs_getOil() != 0 || param_0 == 0))
{
return true;
}
@@ -110,10 +118,10 @@ asm void daAlink_c::kandelaarModelCallBack() {
/* 80110BEC-80110C28 10B52C 003C+00 1/1 0/0 0/0 .text daAlink_kandelaarModelCallBack__FP8J3DJointi
*/
static int daAlink_kandelaarModelCallBack(J3DJoint* param_0, int param_1) {
daAlink_c* link = (daAlink_c*)j3dSys.getModel()->getUserArea();
daAlink_c* player_p = (daAlink_c*)j3dSys.getModel()->getUserArea();
if (param_1 == 0) {
link->kandelaarModelCallBack();
player_p->kandelaarModelCallBack();
}
return 1;
@@ -122,7 +130,9 @@ static int daAlink_kandelaarModelCallBack(J3DJoint* param_0, int param_1) {
/* 80110C28-80110C6C 10B568 0044+00 1/0 0/0 0/0 .text getKandelaarFlamePos__9daAlink_cFv
*/
cXyz* daAlink_c::getKandelaarFlamePos() {
if ((!i_checkNoResetFlg2((daPy_FLG2)0x20001) && !i_checkEndResetFlg1(ERFLG1_UNK_4)) || i_checkWolf() || !i_checkNoResetFlg1(FLG1_UNK_80)) {
if ((!i_checkNoResetFlg2((daPy_FLG2)0x20001) && !i_checkEndResetFlg1(ERFLG1_UNK_4)) ||
i_checkWolf() || !i_checkNoResetFlg1(FLG1_UNK_80))
{
return NULL;
}
@@ -135,6 +145,52 @@ BOOL daAlink_c::checkKandelaarEquipAnime() const {
}
/* 80110C94-80110E80 10B5D4 01EC+00 1/1 0/0 0/0 .text preKandelaarDraw__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
void daAlink_c::preKandelaarDraw() {
J3DMaterial* mat_p = mpKanteraGlowModel->getModelData()->getMaterialNodePointer(0);
J3DGXColorS10 color;
color.r = daAlinkHIO_kandelaar_c0::m.mColorReg1R;
color.g = daAlinkHIO_kandelaar_c0::m.mColorReg1G;
color.b = daAlinkHIO_kandelaar_c0::m.mColorReg1B;
color.a = 255;
mat_p->setTevColor(1, &color);
color.r = daAlinkHIO_kandelaar_c0::m.mColorReg2R;
color.g = daAlinkHIO_kandelaar_c0::m.mColorReg2G;
color.b = daAlinkHIO_kandelaar_c0::m.mColorReg2B;
mat_p->setTevColor(2, &color);
cXyz proj;
mDoLib_project(&mKandelaarFlamePos, &proj);
camera_class* camera_p = dComIfGp_getCamera(0);
f32 var_f3;
if (camera_p != NULL) {
var_f3 = camera_p->mCamera.TrimHeight();
} else {
var_f3 = 0.0f;
}
if (proj.x > 0.0f && proj.x < 640.0f && proj.y > var_f3 && proj.y < 456.0f - var_f3) {
dComIfGd_peekZ(proj.x, proj.y, &field_0x32c8);
} else {
field_0x32c8 = 0;
}
f32 near = dComIfGd_getView()->mNear;
f32 far = dComIfGd_getView()->mFar;
mDoLib_pos2camera(&mKandelaarFlamePos, &proj);
proj.z += 30.0f;
if (proj.z > -0.01f) {
proj.z = -0.01f;
}
field_0x344c = ((near + (far * near) / proj.z) / (far - near) + 1.0f) * 1.6777215E7f;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -143,12 +199,38 @@ asm void daAlink_c::preKandelaarDraw() {
#include "asm/d/a/d_a_alink/preKandelaarDraw__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 80110E80-80110E84 10B7C0 0004+00 0/0 3/0 0/0 .text
* setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10 */
void J3DTevBlock::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {}
/* 80110E84-80110F88 10B7C4 0104+00 4/4 0/0 0/0 .text setKandelaarModel__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
void daAlink_c::setKandelaarModel() {
field_0x2f94 = 0;
if (!i_checkNoResetFlg2(FLG2_UNK_1)) {
i_onNoResetFlg2(FLG2_UNK_1);
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(field_0x30c0), &mKandelaarFlamePos);
mKandelaarFlamePos.y -= 30.0f;
field_0x3630 = field_0x3624;
field_0x3624 = mKandelaarFlamePos;
field_0x3618 = cXyz::Zero;
field_0x32c8 = 0;
field_0x3448 = 0.0f;
field_0x344c = -1.0f;
mpKanteraGlowModel->setBaseScale(cXyz::Zero);
}
mZ2Link.setKanteraState(1);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -157,11 +239,12 @@ asm void daAlink_c::setKandelaarModel() {
#include "asm/d/a/d_a_alink/setKandelaarModel__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 80110F88-80110FE0 10B8C8 0058+00 3/3 0/0 0/0 .text resetOilBottleModel__9daAlink_cFv
*/
void daAlink_c::resetOilBottleModel() {
deleteEquipItem(0, 1);
deleteEquipItem(FALSE, TRUE);
if (mProcVar3.field_0x300e.x != 0) {
setKandelaarModel();
@@ -172,37 +255,168 @@ void daAlink_c::resetOilBottleModel() {
}
/* 80110FE0-801110B8 10B920 00D8+00 3/3 0/0 0/0 .text commonKandelaarPourInit__9daAlink_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::commonKandelaarPourInit() {
nofralloc
#include "asm/d/a/d_a_alink/commonKandelaarPourInit__9daAlink_cFv.s"
void daAlink_c::commonKandelaarPourInit() {
if (i_checkNoResetFlg2(FLG2_UNK_1)) {
mProcVar3.field_0x300e.x = 1;
} else {
mProcVar3.field_0x300e.x = 0;
}
keepItemData();
setKandelaarModel();
setBottleModel(getReadyItem());
mProcVar2.field_0x300c = 0;
dComIfGp_setPlayerStatus1(0, 0x2000);
field_0x3194 = 10;
dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0);
}
#pragma pop
/* 801110B8-8011130C 10B9F8 0254+00 3/3 0/0 0/0 .text commonKandelaarPour__9daAlink_cFi
*/
// matches with literals
#ifdef NONMATCHING
int daAlink_c::commonKandelaarPour(int param_0) {
simpleAnmPlay(field_0x0718);
simpleAnmPlay(field_0x071c);
daPy_frameCtrl_c* frameCtrl_p;
u16 current_anm;
if (param_0) {
frameCtrl_p = &mUpperFrameCtrl[2];
current_anm = mUpperAnmHeap[2].getIdx();
} else {
frameCtrl_p = &mUnderFrameCtrl[0];
current_anm = mUnderAnmHeap[0].getIdx();
}
i_onNoResetFlg2(FLG2_UNK_10000000);
if (current_anm == getMainBckData(ANM_OIL_BOTTLE_POUR_START)->m_underID) {
if (checkAnmEnd(frameCtrl_p)) {
if (param_0) {
setUpperAnimeBaseMorf(getMainBckData(ANM_OIL_BOTTLE_POUR)->m_upperID, 0.0f);
} else {
setSingleAnimeBaseMorf(ANM_OIL_BOTTLE_POUR, 0.0f);
}
dComIfGp_setItemOilCount(dComIfGs_getMaxOil());
} else if (frameCtrl_p->checkPass(10.0f)) {
field_0x071c->setFrame(0.0f);
mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x071c);
}
} else if (current_anm == getMainBckData(ANM_OIL_BOTTLE_POUR)->m_underID) {
if (dComIfGp_getItemNowOil() == dComIfGs_getOil()) {
if (mProcVar2.field_0x300c == 0) {
mProcVar2.field_0x300c = 1;
mHeldItemModel->getModelData()->entryTexMtxAnimator(field_0x0720);
} else if (simpleAnmPlay(field_0x0720)) {
if (param_0) {
setUpperAnimeParam(getMainBckData(ANM_OIL_BOTTLE_POUR_END)->m_upperID, UPPER_2,
&daAlinkHIO_kandelaar_c0::m.mEndUnkAnm);
} else {
setSingleAnimeParam(ANM_OIL_BOTTLE_POUR_END,
&daAlinkHIO_kandelaar_c0::m.mEndUnkAnm);
}
field_0x072c->setFrame(2.0f);
dComIfGs_setEquipBottleItemEmpty(mSelectItemId);
}
}
} else if (checkAnmEnd(frameCtrl_p)) {
if (param_0) {
resetUpperAnime(UPPER_2, 3.0f);
}
resetOilBottleModel();
resetSpecialEvent();
i_offNoResetFlg2(FLG2_UNK_10000000);
return 1;
}
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::commonKandelaarPour(int param_0) {
asm int daAlink_c::commonKandelaarPour(int param_0) {
nofralloc
#include "asm/d/a/d_a_alink/commonKandelaarPour__9daAlink_cFi.s"
}
#pragma pop
#endif
/* 8011130C-80111440 10BC4C 0134+00 1/1 0/0 0/0 .text initKandelaarSwing__9daAlink_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daAlink_c::initKandelaarSwing() {
nofralloc
#include "asm/d/a/d_a_alink/initKandelaarSwing__9daAlink_cFv.s"
void daAlink_c::initKandelaarSwing() {
if (mEquipItem == KANTERA) {
if (dComIfGs_getOil() != 0) {
mZ2Link.getKantera().startSound(Z2SE_AL_KANTERA_SWING, 0, mVoiceReverbIntensity);
} else {
mZ2Link.getKantera().startSound(Z2SE_AL_KANTERA_OFF_SWING, 0, mVoiceReverbIntensity);
}
}
voiceStart(Z2SE_AL_V_SWING_BOTTLE);
field_0xFB8.ResetAtHit();
if (!checkEventRun()) {
dComIfGp_setItemOilCount(-daAlinkHIO_kandelaar_c0::m.mShakeOilLoss);
}
field_0xFB8.OffAtSetBit();
field_0xFB8.SetR(lit_6895);
field_0xFB8.SetAtType(AT_TYPE_LANTERN_SWING);
field_0xFB8.SetAtHitMark(0);
field_0xFB8.SetAtSe(dCcD_SE_NONE);
field_0xFB8.SetAtAtp(0);
field_0xFB8.SetAtMtrl(1);
}
#pragma pop
/* 80111440-801115CC 10BD80 018C+00 2/1 0/0 0/0 .text procKandelaarSwingInit__9daAlink_cFv */
// matches with literals
#ifdef NONMATCHING
int daAlink_c::procKandelaarSwingInit() {
fopAc_ac_c* catch_target_p = i_dComIfGp_att_getCatghTarget();
if (catch_target_p != NULL) {
s16 name = fopAcM_GetName(catch_target_p);
BOOL is_sm2 = name == PROC_E_SM2;
if (name == PROC_OBJ_OILTUBO ||
(name == PROC_TAG_SSDRINK &&
static_cast<daTag_SSDrink_c*>(catch_target_p)->checkShopOil()) ||
(is_sm2 && static_cast<e_sm2_class*>(catch_target_p)->checkYellow()))
{
return procBottleSwingInit(catch_target_p, is_sm2);
}
}
if (!commonProcInitNotSameProc(PROC_KANDELAAR_SWING)) {
return 0;
}
mNormalSpeed = 0.0f;
current.angle.y = shape_angle.y;
if ((mLinkAcch.i_ChkGroundHit() && getMoveBGActorName(mLinkAcch.m_gnd, 0) == PROC_OBJ_WEB1) ||
(checkStageName("F_SP108") &&
fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchTagKtOnFire, NULL) != NULL))
{
setSingleAnimeParam(ANM_BOTTLE_SWING_DOWN, &daAlinkHIO_bottle_c0::m.mSwingDownAnm);
field_0x3478 = daAlinkHIO_bottle_c0::m.mSwingDownAnm.mCheckFrame;
field_0x347c = 5.0f;
field_0x3480 = 12.0f;
} else {
setSingleAnimeParam(ANM_LANTERN_SWING, &daAlinkHIO_kandelaar_c0::m.mShakeAnm);
field_0x3478 = daAlinkHIO_kandelaar_c0::m.mShakeAnm.mCheckFrame;
field_0x347c = 4.0f;
field_0x3480 = 11.0f;
}
initKandelaarSwing();
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -211,18 +425,19 @@ asm int daAlink_c::procKandelaarSwingInit() {
#include "asm/d/a/d_a_alink/procKandelaarSwingInit__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 801115CC-8011167C 10BF0C 00B0+00 1/0 0/0 0/0 .text procKandelaarSwing__9daAlink_cFv */
int daAlink_c::procKandelaarSwing() {
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
if (frameCtrl->checkAnmEnd()) {
if (frameCtrl_p->checkAnmEnd()) {
if (mDemo.getDemoMode() == 0x27) {
dComIfGp_evmng_cutEnd(field_0x3184);
} else {
checkNextAction(0);
}
} else if (frameCtrl->getFrame() > field_0x3478 && mDemo.getDemoMode() != 0x27) {
} else if (frameCtrl_p->getFrame() > field_0x3478 && mDemo.getDemoMode() != 0x27) {
onModeFlg(4);
checkNextAction(1);
}
@@ -251,4 +466,4 @@ int daAlink_c::procKandelaarPourInit() {
int daAlink_c::procKandelaarPour() {
commonKandelaarPour(0);
return 1;
}
}
+3 -1
View File
@@ -3,6 +3,8 @@
* Player Swim action handling
*/
#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "f_op/f_op_kankyo_mng.h"
/* 80101890-801018E4 0FC1D0 0054+00 6/6 0/0 0/0 .text checkZoraWearMaskDraw__9daAlink_cFv
@@ -1091,4 +1093,4 @@ int daAlink_c::procOctaIealSpit() {
}
return 1;
}
}
+201 -32
View File
@@ -3,21 +3,25 @@
* Player Horse / Hawk Grass Whistle action handling
*/
#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
#include "rel/d/a/npc/d_a_npc_tk/d_a_npc_tk.h"
#include "rel/d/a/obj/d_a_obj_yobikusa/d_a_obj_yobikusa.h"
/* 8011174C-80111770 10C08C 0024+00 1/1 0/0 0/0 .text daAlink_searchWhistle__FP10fopAc_ac_cPv */
static fopAc_ac_c* daAlink_searchWhistle(fopAc_ac_c* p_actor, void*) {
if (daAlink_getAlinkActorClass()->getGrassHowlEventActor() == fopAcM_GetName(p_actor)) {
return p_actor;
static fopAc_ac_c* daAlink_searchWhistle(fopAc_ac_c* i_actor, void* i_data) {
if (daAlink_getAlinkActorClass()->getGrassHowlEventActor() == fopAcM_GetName(i_actor)) {
return i_actor;
}
return NULL;
}
/* 80111770-80111784 10C0B0 0014+00 1/1 0/0 0/0 .text daAlink_searchHawk__FP10fopAc_ac_cPv */
static fopAc_ac_c* daAlink_searchHawk(fopAc_ac_c* p_actor, void*) {
if (fopAcM_GetName(p_actor) == PROC_NPC_TK) {
return p_actor;
static fopAc_ac_c* daAlink_searchHawk(fopAc_ac_c* i_actor, void* i_data) {
if (fopAcM_GetName(i_actor) == PROC_NPC_TK) {
return i_actor;
}
return NULL;
@@ -26,18 +30,18 @@ static fopAc_ac_c* daAlink_searchHawk(fopAc_ac_c* p_actor, void*) {
/* 80111784-8011181C 10C0C4 0098+00 1/1 0/0 0/0 .text setGrassWhistleModel__9daAlink_cFi
*/
void daAlink_c::setGrassWhistleModel(int modelType) {
static const char* grassWhistleArcName[2] = {
static const char* grassWhistleArcName[] = {
"J_Tobi",
"J_Umak",
};
JKRHeap* heap = setItemHeap();
JKRHeap* prev_heap = setItemHeap();
J3DModelData* modeldata = (J3DModelData*)dComIfG_getObjectRes(grassWhistleArcName[modelType],
grassWhistleIdx[modelType]);
mHeldItemModel = mDoExt_J3DModel__create(modeldata, 0x80000, 0x11000084);
mDoExt_setCurrentHeap(heap);
mDoExt_setCurrentHeap(prev_heap);
mEquipItem = 0x104;
field_0x2f94 = 2;
}
@@ -45,11 +49,11 @@ void daAlink_c::setGrassWhistleModel(int modelType) {
/* 8011181C-80111894 10C15C 0078+00 1/1 0/0 0/0 .text setHorseWhistleModel__9daAlink_cFv
*/
void daAlink_c::setHorseWhistleModel() {
JKRHeap* heap = setItemHeap();
JKRHeap* prev_heap = setItemHeap();
mHeldItemModel = initModel(loadAramBmd(0x31A, 0x3000), 0);
mDoExt_setCurrentHeap(heap);
mDoExt_setCurrentHeap(prev_heap);
mEquipItem = HORSE_FLUTE;
field_0x2f94 = 2;
}
@@ -71,14 +75,14 @@ int daAlink_c::procGrassWhistleGetInit() {
field_0x2f92 = 0xFE;
field_0x280c.setData(field_0x27f4);
daObjYobikusa_c* yobikusa = (daObjYobikusa_c*)field_0x27f4;
mProcVar2.field_0x300c = yobikusa->getType();
mProcVar3.field_0x300e.x = yobikusa->getPathID();
mProcVar3.field_0x300e.y = yobikusa->isPlayerCorrect();
mProcVar3.field_0x300e.z = yobikusa->shape_angle.y + 0x8000;
field_0x37c8.set(yobikusa->current.pos.x + cM_ssin(yobikusa->shape_angle.y) * 50.0f,
yobikusa->current.pos.y + 50.0f,
yobikusa->current.pos.z + cM_scos(yobikusa->shape_angle.y) * 50.0f);
daObjYobikusa_c* yobikusa_p = (daObjYobikusa_c*)field_0x27f4;
mProcVar2.field_0x300c = yobikusa_p->getType();
mProcVar3.field_0x300e.x = yobikusa_p->getPathID();
mProcVar3.field_0x300e.y = yobikusa_p->isPlayerCorrect();
mProcVar3.field_0x300e.z = yobikusa_p->shape_angle.y + 0x8000;
field_0x37c8.set(yobikusa_p->current.pos.x + cM_ssin(yobikusa_p->shape_angle.y) * 50.0f,
yobikusa_p->current.pos.y + 50.0f,
yobikusa_p->current.pos.z + cM_scos(yobikusa_p->shape_angle.y) * 50.0f);
voiceStart(Z2SE_AL_V_SWING_BOTTLE);
return 1;
}
@@ -96,13 +100,14 @@ asm int daAlink_c::procGrassWhistleGetInit() {
/* 801119D8-80111A9C 10C318 00C4+00 1/0 0/0 0/0 .text procGrassWhistleGet__9daAlink_cFv
*/
int daAlink_c::procGrassWhistleGet() {
daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl;
if (frameCtrl->checkAnmEnd()) {
procGrassWhistleWaitInit(mProcVar2.field_0x300c, mProcVar3.field_0x300e.x, mProcVar3.field_0x300e.y, mProcVar3.field_0x300e.z, &field_0x37c8);
} else if (mEquipItem == NO_ITEM && frameCtrl->getFrame() >= lit_7710) {
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
if (frameCtrl_p->checkAnmEnd()) {
procGrassWhistleWaitInit(mProcVar2.field_0x300c, mProcVar3.field_0x300e.x,
mProcVar3.field_0x300e.y, mProcVar3.field_0x300e.z, &field_0x37c8);
} else if (mEquipItem == NO_ITEM && frameCtrl_p->getFrame() >= lit_7710) {
setGrassWhistleModel(mProcVar2.field_0x300c);
if (field_0x280c.getActor() != NULL) {
fopAcM_setCarryNow(field_0x280c.getActor(), 0);
seStartOnlyReverb(Z2SE_AL_PICKUP_GRASS);
@@ -114,18 +119,181 @@ int daAlink_c::procGrassWhistleGet() {
/* 80111A9C-80111CA4 10C3DC 0208+00 2/2 0/0 0/0 .text
* procGrassWhistleWaitInit__9daAlink_cFiiisP4cXyz */
// matches with literals
#ifdef NONMATCHING
int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s16 param_3,
cXyz* param_4) {
u16 var_r6;
if (param_0 == 3) {
var_r6 = 0xFFFF;
} else {
var_r6 = 0xFFF9;
}
if (!dComIfGp_event_compulsory(this, NULL, var_r6)) {
return checkNextAction(0);
}
mDemo.i_setSpecialDemoType();
commonProcInit(PROC_GRASS_WHISTLE_WAIT);
if (param_0 == 3) {
keepItemData();
setHorseWhistleModel();
setSingleAnimeBase(ANM_GRASS_WHISTLE_START);
field_0x3198 = -1;
field_0x32cc = 0x532;
} else {
setSingleAnimeBase(ANM_WAIT);
mKeepItem = NO_ITEM;
if (param_0 == 0) {
field_0x3198 = 0x100;
field_0x32cc = 0x535;
} else {
field_0x3198 = -1;
field_0x32cc = 0x532;
}
}
setUpperAnimeBaseMorf(getMainBckData(ANM_GRASS_WHISTLE_START)->m_underID, -1.0f);
setFacePriAnime(ANM_GRASS_WHISTLE_START);
mProcVar2.field_0x300c = param_0;
mProcVar3.field_0x300e.x = param_1;
dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), 0);
mProcVar0.field_0x3008 = 0;
mProcVar3.field_0x300e.y = 0;
mProcVar3.field_0x300e.z = 0;
mMsgClassID = -1;
mNormalSpeed = 0.0f;
current.angle.y = shape_angle.y;
field_0x2f98 = 4;
if (param_2) {
mLinkGndChk.SetPos(param_4);
f32 gnd_cross = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
if (gnd_cross != -1000000000.0f) {
current.pos.set(param_4->x, gnd_cross, param_4->z);
}
shape_angle.y = param_3;
current.angle.y = shape_angle.y;
}
dComIfGp_setPlayerStatus1(0, 0x4000000);
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s16 param_3,
cXyz* param_4) {
cXyz* param_4) {
nofralloc
#include "asm/d/a/d_a_alink/procGrassWhistleWaitInit__9daAlink_cFiiisP4cXyz.s"
}
#pragma pop
#endif
/* 80111CA4-80111FF0 10C5E4 034C+00 1/0 0/0 0/0 .text procGrassWhistleWait__9daAlink_cFv
*/
// small regalloc
#ifdef NONMATCHING
int daAlink_c::procGrassWhistleWait() {
if (mProcVar3.field_0x300e.z != 0) {
if (checkEndMessage(field_0x32cc)) {
resetSpecialEvent();
return procWaitInit();
}
return 1;
}
if (mProcVar0.field_0x3008 < 0) {
mProcVar0.field_0x3008--;
if (mProcVar0.field_0x3008 == -3) {
return procWaitInit();
}
} else if (mProcVar0.field_0x3008 != 0) {
mProcVar0.field_0x3008--;
if (mProcVar0.field_0x3008 == 0) {
daHorse_c* horse_p = i_dComIfGp_getHorseActor();
daNPC_TK_c* tk_p = (daNPC_TK_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchWhistle, NULL);
if (tk_p != NULL) {
fopAcM_OnStatus(tk_p, 0x800);
if (field_0x3198 == 0x100) {
tk_p->setEvent();
tk_p->setHawkPath(mProcVar3.field_0x300e.x);
}
mProcVar0.field_0x3008--;
resetSpecialEvent();
} else {
int temp_r4;
if ((mProcVar2.field_0x300c == 1 || mProcVar2.field_0x300c == 3) && horse_p != NULL) {
temp_r4 = horse_p->callHorse(&current.pos);
} else {
temp_r4 = 0;
}
if (temp_r4 == 1 || temp_r4 == 4 || temp_r4 == 2) {
return procCoHorseCallWaitInit(temp_r4);
} else if (temp_r4 == 3) {
resetSpecialEvent();
return procWaitInit();
}
setFaceBasicTexture(FTANM_UNK_0);
mProcVar3.field_0x300e.z = 1;
return 1;
}
setGrassCancelStatus(0);
}
} else if (checkAnmEnd(&mUpperFrameCtrl[2])) {
setGrassCancelStatus(0x12);
setDoStatus(0x2C);
if (mProcVar2.field_0x300c == 3 || doTrigger()) {
setSingleAnimeBaseMorf(ANM_GRASS_WHISTLE_PLAY, 0.0f);
resetUpperAnime(UPPER_2, -1.0f);
dComIfGp_event_onHindFlag(6);
if (mProcVar2.field_0x300c == 0) {
voiceStart(Z2SE_PLAY_REED_TOBIKUSA);
mProcVar0.field_0x3008 = 100;
if (i_dComIfGs_isEventBit(dSv_event_flag_c::F_0700) &&
i_dComIfGs_isEventBit(dSv_event_flag_c::F_0037))
{
dComIfGs_onEventBit(dSv_event_flag_c::F_0581);
}
} else {
voiceStart(Z2SE_PLAY_REED_UMAKUSA);
mProcVar0.field_0x3008 = 140;
if (mProcVar2.field_0x300c == 1) {
dComIfGs_onEventBit(dSv_event_flag_c::F_0580);
}
}
} else if (grassCancelTrigger()) {
resetUpperAnime(UPPER_2, -1.0f);
resetSpecialEvent();
procWaitInit();
}
} else {
setGrassCancelStatus(0);
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -134,6 +302,7 @@ asm int daAlink_c::procGrassWhistleWait() {
#include "asm/d/a/d_a_alink/procGrassWhistleWait__9daAlink_cFv.s"
}
#pragma pop
#endif
/* 80111FF0-801120C8 10C930 00D8+00 2/2 0/0 0/0 .text procCoHorseCallWaitInit__9daAlink_cFi */
int daAlink_c::procCoHorseCallWaitInit(int param_0) {
@@ -176,7 +345,7 @@ int daAlink_c::procHawkCatchInit() {
}
setSingleAnimeBase(ANM_HAWK_CATCH);
deleteEquipItem(0, 1);
deleteEquipItem(FALSE, TRUE);
return 1;
}
@@ -199,14 +368,14 @@ int daAlink_c::procHawkSubjectInit() {
setSingleAnimeBase(ANM_HAWK_WAIT);
fopAc_ac_c* actor = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchHawk, NULL);
if (actor != NULL) {
field_0x280c.setData(actor);
fopAc_ac_c* hawk_p = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchHawk, NULL);
if (hawk_p != NULL) {
field_0x280c.setData(hawk_p);
}
mProcVar2.field_0x300c = 0;
mBodyAngle.y = 0;
deleteEquipItem(0, 1);
deleteEquipItem(FALSE, TRUE);
return 1;
}
@@ -218,4 +387,4 @@ asm int daAlink_c::procHawkSubject() {
nofralloc
#include "asm/d/a/d_a_alink/procHawkSubject__9daAlink_cFv.s"
}
#pragma pop
#pragma pop