diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 903a91d9a..83876265e 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -119,14 +119,17 @@ public: void onEnd() { field_0x04 = true; - field_0x20 = 0; + field_0x20 = NULL; } /* 0x04 */ bool field_0x04; /* 0x05 */ bool field_0x05; - /* 0x08 */ u8 field_0x08[0x20 - 0x08]; - /* 0x20 */ int field_0x20; - /* 0x24 */ u8 field_0x24[0x28 - 0x24]; + /* 0x08 */ u8 field_0x08[0x0C - 0x08]; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ u8 field_0x14[0x20 - 0x14]; + /* 0x20 */ const csXyz* field_0x20; + /* 0x24 */ JPABaseEmitter* mpEmitter; }; // Size: 0x28 STATIC_ASSERT(sizeof(daPy_swimTailEcallBack_c) == 0x28); @@ -160,6 +163,9 @@ public: ~daPy_dmEcallBack_c() {} daPy_dmEcallBack_c() {} + static void setTimer(s16 timer) { m_timer = timer; } + static void setType(u16 type) { m_type = type; } + static s16 m_timer; static u16 m_type; }; // Size: 0x0C @@ -1210,6 +1216,10 @@ public: ANM_UNK_C4 = 0xC4, }; + enum daPy_UNDER { + + }; + enum daPy_UPPER { UPPER_UNK2 = 2, }; @@ -1225,9 +1235,6 @@ public: typedef BOOL (daPy_lk_c::*ProcFunc)(); - void getBoomerangCatchPos() const; - void getLineTopPos(); - cXyz getHookshotRootPos() const { return mHookshotRootPos; } void seStartOnlyReverb(u32); void seStartMapInfo(u32); void seStartSwordCut(u32); @@ -1281,9 +1288,9 @@ public: void setHintActor(); void setDoStatusBasic(); void setDoStatus(); - void getDirectionFromAngle(s16); - void getDirectionFromShapeAngle(); - void getDirectionFromCurrentAngle(); + int getDirectionFromAngle(s16); + int getDirectionFromShapeAngle(); + int getDirectionFromCurrentAngle(); void setNormalSpeedF(f32, f32, f32, f32); void posMoveFromFootPos(); void posMove(); @@ -2072,6 +2079,9 @@ public: void clearDamageWait() {} void exchangeGrabActor(fopAc_ac_c*) {} void getDekuLeafWindPos() const {} + void getBoomerangCatchPos() const {} + void getLineTopPos() {} + cXyz getHookshotRootPos() const { return mHookshotRootPos; } void getIceParticleBtk() {} void getIceWaterParticleBtk() {} void getShadowID() const {} @@ -2089,102 +2099,63 @@ public: request_of_phase_process_class* getPhase() { return &mPhsLoad; } - // void allTrigger() const {} - // void cancelTrigger() const {} - // void checkAttentionLock() {} - // void checkBoomerangCatchAnime() const {} - // void checkBoomerangReadyAnime() const {} - // void checkBoomerangRock() {} - // void checkBoomerangThrowAnime() const {} - // void checkBothItemEquipAnime() const {} - // void checkBowReloadAnime() const {} - // void checkBowShootAnime() const {} - // void checkBowWaitAnime() const {} - // void checkCarryActionNow() const {} - // void checkCrawlWaterIn() {} - // void checkDashDamageAnime() const {} - // void checkDoubleItemEquipAnime() const {} - // void checkFaceTypeNot() const {} - // void checkGrabAnime() const {} - // void checkGrabAnimeHeavy() const {} - // void checkGrabAnimeLight() const {} - // void checkGuardSlip() const {} - // void checkHookshotReadyAnime() const {} - // void checkIsland() const {} - // void checkMirrorShieldEquip() const {} - // void checkModeFlg(unsigned long) const {} - // void checkNoControll() const {} - // void checkNoDamageMode() const {} - // void checkNoUpperAnime() const {} - // void checkPlayerDemoMode() const {} - // void checkPowerGloveEquip() const {} - // void checkRopeThrowAnime() const {} - // void checkShieldEquip() const {} - // void checkShipGetOff() {} - // void checkSpecialDemoMode() const {} - // void checkSwordEquip() const {} - // void checkSwordEquipAnime() const {} - // void checkTinkleHover() const {} - // void checkTinkleShield() const {} - // void checkUpperAnime(unsigned short) const {} - // void checkUpperGuardAnime() const {} - // void clearDamageWait() {} - // void decrementBombCnt() {} - // void doButton() const {} - // void doTrigger() const {} - // void exchangeGrabActor(fopAc_ac_c*) {} - // void getAnmSpeedStickRate(float, float) {} - // void getBombBrk() {} - // void getBombWaterPillarBrk() {} - // void getBombWaterPillarBtk() {} - // void getBoomerangCatchPos() const {} - // void getDekuLeafWindPos() const {} - // void getHookshotRootPos() const {} - // void getIceArrowBtk() {} - // void getIceParticleBtk() {} - // void getIceWaterParticleBtk() {} - // void getLightArrowBtk() {} - // void getLineTopPos() {} - // void getModelJointMtx(unsigned short) {} - // void getNowAnmPackUnder(daPy_lk_c::daPy_UNDER) {} - // void getNowAnmPackUpper(daPy_lk_c::daPy_UPPER) {} - // void getPhase() {} - // void getShadowID() const {} - // void getStartEvent() {} - // void getStartMode() {} - // void getStartModeFromParam(unsigned long) {} - // void getStartRoomNo() {} - // void getTactLeftHandPos() const {} - // void itemButtonX() const {} - // void itemButtonY() const {} - // void itemButtonZ() const {} - // void itemTriggerX() const {} - // void itemTriggerY() const {} - // void itemTriggerZ() const {} - // void npcStartRestartRoom() {} - // void offModeFlg(unsigned long) {} - // void offShipTact() {} - // void onModeFlg(unsigned long) {} - // void onShipDrop(short) {} - // void onShipTact() {} - // void otherWeaponTrigger() const {} - // void seStartSystem(unsigned long) {} - // void setDaiokutaEnd() {} - // void setFootEffectPosType(unsigned char) {} - // void setHoverBoots(short) {} - // void setSpeedAndAngleBoomerang() {} - // void setSpeedAndAngleBow() {} - // void setSpeedAndAngleHookshot() {} - // void setSpeedAndAngleRope() {} - // void setTinkleShield(short) {} - // void setWhirlId(unsigned int) {} - // void spActionButton() const {} - // void spActionTrigger() const {} - // void spBattleTrigger() const {} - // void spLTrigger() const {} - // void swordButton() const {} - // void swordTrigger() const {} - // void talkTrigger() const {} + void allTrigger() const {} + void cancelTrigger() const {} + void checkAttentionLock() {} + void checkBoomerangRock() {} + void checkBothItemEquipAnime() const {} + void checkBowReloadAnime() const {} + void checkBowShootAnime() const {} + void checkBowWaitAnime() const {} + void checkCrawlWaterIn() {} + void checkDashDamageAnime() const {} + void checkDoubleItemEquipAnime() const {} + void checkFaceTypeNot() const {} + void checkGuardSlip() const {} + void checkHookshotReadyAnime() const {} + void checkIsland() const {} + void checkMirrorShieldEquip() const {} + void checkNoUpperAnime() const {} + void checkPlayerDemoMode() const {} + void checkPowerGloveEquip() const {} + void checkRopeThrowAnime() const {} + void checkShieldEquip() const {} + void checkSpecialDemoMode() const {} + void checkSwordEquip() const {} + void checkSwordEquipAnime() const {} + void checkTinkleHover() const {} + void checkUpperAnime(u16) const {} + void checkUpperGuardAnime() const {} + void decrementBombCnt() {} + void doButton() const {} + void doTrigger() const {} + void getAnmSpeedStickRate(f32, f32) {} + void getBombWaterPillarBrk() {} + void getBombWaterPillarBtk() {} + void getNowAnmPackUnder(daPy_UNDER) {} + void getNowAnmPackUpper(daPy_UPPER) {} + void getStartModeFromParam(u32) {} + void getTactLeftHandPos() const {} + void itemButtonX() const {} + void itemButtonY() const {} + void itemButtonZ() const {} + void itemTriggerX() const {} + void itemTriggerY() const {} + void itemTriggerZ() const {} + void otherWeaponTrigger() const {} + void seStartSystem(u32) {} + void setFootEffectPosType(u8) {} + void setSpeedAndAngleBoomerang() {} + void setSpeedAndAngleBow() {} + void setSpeedAndAngleHookshot() {} + void setSpeedAndAngleRope() {} + void spActionButton() const {} + void spActionTrigger() const {} + void spBattleTrigger() const {} + void spLTrigger() const {} + void swordButton() const {} + void swordTrigger() const {} + void talkTrigger() const {} virtual MtxP getLeftHandMatrix() { return mpCLModel->getAnmMtx(0x08); } // cl_LhandA joint virtual MtxP getRightHandMatrix() { return mpCLModel->getAnmMtx(0x0C); } // cl_RhandA joint diff --git a/include/d/d_particle.h b/include/d/d_particle.h index a13664a7f..266150fa8 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -426,17 +426,19 @@ public: JKRHeap * getHeap() { return mHeap; } static dPa_setColorEcallBack* getLifeBallSetColorEcallBack(int idx) { return &mLifeBall[idx]; } + static dPa_setColorEcallBack mLifeBall[3]; + + static bool isStatus(u8 status) { return mStatus & status; } + static void onStatus(u8 status) { mStatus |= status; } + static void offStatus(u8 status) { mStatus &= ~status; } + static u8 mStatus; static dPa_rippleEcallBack mSingleRippleEcallBack; - static dPa_setColorEcallBack mLifeBall[3]; static JPAEmitterManager * mEmitterMng; - static bool isStatus(u8 b) { return !!(mStatus & b); } - static u8 mStatus; - - static Mtx mWindViewMatrix; static MtxP getWindViewMatrix() { return mWindViewMatrix; } + static Mtx mWindViewMatrix; /* 0x0000 */ JKRHeap* mHeap; /* 0x0004 */ JPAResourceManager* mpCommonResMgr; diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index b77ce9fce..27dcec5e4 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -2759,18 +2759,26 @@ void daPy_lk_c::setDoStatus() { } /* 80108A9C-80108B08 .text getDirectionFromAngle__9daPy_lk_cFs */ -void daPy_lk_c::getDirectionFromAngle(s16) { - /* Nonmatching */ +int daPy_lk_c::getDirectionFromAngle(s16 angle) { + if (abs(angle) > 0x6000) { + return 1; + } else if (angle >= 0x2000) { + return 2; + } else if (angle <= -0x2000) { + return 3; + } else { + return 0; + } } /* 80108B08-80108B38 .text getDirectionFromShapeAngle__9daPy_lk_cFv */ -void daPy_lk_c::getDirectionFromShapeAngle() { - /* Nonmatching */ +int daPy_lk_c::getDirectionFromShapeAngle() { + return getDirectionFromAngle(m34E8 - shape_angle.y); } /* 80108B38-80108B68 .text getDirectionFromCurrentAngle__9daPy_lk_cFv */ -void daPy_lk_c::getDirectionFromCurrentAngle() { - /* Nonmatching */ +int daPy_lk_c::getDirectionFromCurrentAngle() { + return getDirectionFromAngle(m34E8 - current.angle.y); } /* 80108B68-80108D80 .text setNormalSpeedF__9daPy_lk_cFffff */ diff --git a/src/d/actor/d_a_player_particle.inc b/src/d/actor/d_a_player_particle.inc index 83b0f8bfb..72aeeca6c 100644 --- a/src/d/actor/d_a_player_particle.inc +++ b/src/d/actor/d_a_player_particle.inc @@ -11,20 +11,37 @@ */ #include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_sea.h" /* 8012901C-80129034 .text setup__24daPy_swimTailEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_swimTailEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { - /* Nonmatching */ +void daPy_swimTailEcallBack_c::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* angle, s8) { + mpEmitter = emitter; + field_0x04 = false; + field_0x20 = angle; + field_0x05 = false; } /* 80129034-801290D8 .text getMaxWaterY__24daPy_swimTailEcallBack_cFPQ29JGeometry8TVec3 */ -void daPy_swimTailEcallBack_c::getMaxWaterY(JGeometry::TVec3*) { - /* Nonmatching */ +void daPy_swimTailEcallBack_c::getMaxWaterY(JGeometry::TVec3* pos) { + if (daSea_ChkArea(pos->x, pos->z)) { + pos->y = daSea_calcWave(pos->x, pos->z) + 2.0f; + if (field_0x10 > pos->y) { + pos->y = field_0x10 + 2.0f; + } + } else if (field_0x10 != 0.0f) { + pos->y = field_0x10 + 2.0f; + } else { + pos->y = field_0x0C; + } } /* 801290D8-8012910C .text remove__24daPy_swimTailEcallBack_cFv */ void daPy_swimTailEcallBack_c::remove() { - /* Nonmatching */ + if (mpEmitter != NULL) { + mpEmitter->setEmitterCallBackPtr(NULL); + mpEmitter->becomeInvalidEmitter(); + mpEmitter = NULL; + } } /* 8012910C-80129310 .text execute__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ @@ -34,11 +51,13 @@ void daPy_swimTailEcallBack_c::execute(JPABaseEmitter*) { /* 80129310-80129348 .text draw__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ void daPy_swimTailEcallBack_c::draw(JPABaseEmitter*) { - /* Nonmatching */ + if (dPa_control_c::isStatus(0x01)) { + GXSetZMode(GX_FALSE, GX_NEVER, GX_FALSE); + } } /* 80129348-8012952C .text draw__18daPy_sightPacket_cFv */ -BOOL daPy_sightPacket_c::draw() { +void daPy_sightPacket_c::draw() { /* Nonmatching */ } @@ -58,7 +77,7 @@ void daPy_swBlur_c::copySwBlur(MtxP, int) { } /* 80129A78-80129DD0 .text draw__13daPy_swBlur_cFv */ -BOOL daPy_swBlur_c::draw() { +void daPy_swBlur_c::draw() { /* Nonmatching */ } @@ -104,8 +123,9 @@ void daPy_waterDropEcallBack_c::execute(JPABaseEmitter* emitter) { } /* 8012A040-8012A058 .text setup__25daPy_waterDropEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_waterDropEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { - /* Nonmatching */ +void daPy_waterDropEcallBack_c::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* angle, s8) { + mpEmitter = emitter; + mpEmitter->becomeImmortalEmitter(); } /* 8012A058-8012A0B4 .text end__25daPy_waterDropEcallBack_cFv */ @@ -205,7 +225,12 @@ void daPy_lk_c::endFlameDamageEmitter() { /* 8012C9D8-8012CA44 .text endDamageEmitter__9daPy_lk_cFv */ void daPy_lk_c::endDamageEmitter() { - /* Nonmatching */ + for (int i = 0; i < (int)ARRAY_SIZE(m33B8); i++) { + m33B8[i].end(); + } + daPy_dmEcallBack_c::setTimer(0); + daPy_dmEcallBack_c::setType(3); + mLightInfluence.mPower = 0.0f; } /* 8012CA44-8012CD60 .text setItemWaterEffect__9daPy_lk_cFP10fopAc_ac_cii */ diff --git a/src/d/actor/d_a_player_ship.inc b/src/d/actor/d_a_player_ship.inc index 44423de5d..3a29b9466 100644 --- a/src/d/actor/d_a_player_ship.inc +++ b/src/d/actor/d_a_player_ship.inc @@ -12,6 +12,7 @@ #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_ship.h" +#include "d/d_com_inf_game.h" /* 8013F848-8013F8AC .text shipSpecialDemoStart__9daPy_lk_cFv */ void daPy_lk_c::shipSpecialDemoStart() { @@ -53,7 +54,7 @@ void daPy_lk_c::initShipRideUseItem(int param_1, int param_2) { if (param_1 == 0) { return; } - dComIfGp_getShipActor()->field_0x034D = 2; // TODO probably inline setter + dComIfGp_getShipActor()->m034D = 2; // TODO probably inline setter mGravity = 0.0f; speed.y = 0.0f; if (param_1 == 1) {