diff options
Diffstat (limited to 'src/overlays/actors/player_actor/m_player.c')
| -rw-r--r-- | src/overlays/actors/player_actor/m_player.c | 228 |
1 files changed, 196 insertions, 32 deletions
diff --git a/src/overlays/actors/player_actor/m_player.c b/src/overlays/actors/player_actor/m_player.c index 4945bab..a17917e 100644 --- a/src/overlays/actors/player_actor/m_player.c +++ b/src/overlays/actors/player_actor/m_player.c @@ -1,4 +1,7 @@ #include "m_player.h" +#include "m_player_lib.h" +#include "game.h" +#include "overlays/gamestates/ovl_play/m_play.h" extern ClObjPipe_Init Player_actor_OcInfoData_forStand; #if 0 @@ -21,37 +24,198 @@ ClObjTrisElem_Init Player_actor_pclobj_tris_base_forItem[] = { ClObjTris_Init Player_actor_pclobj_tris_data_forItem = { { OC1_TYPE_10 | OC1_TYPE_20, OC2_2, COLSHAPE_TRIS }, ARRAY_COUNT(Player_actor_pclobj_tris_base_forItem), Player_actor_pclobj_tris_base_forItem }; #endif -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2D50_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2DE4_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2E4C_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2EB8_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2F24_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B2F90_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B3010_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B30B4_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B30EC_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B312C_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B3170_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B31B4_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B31F8_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B323C_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B3280_jp.s") - -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B32C4_jp.s") +s8 Player_actor_Get_ItemKind(Actor* actor, s32 kind); + +// m_player_controller + +s32 Player_actor_CheckController_forPickup(Game* game) { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + return !Player_ITEM_IS_VALID(kind) && (data->triggerButtonA != 0) && (data->buttonB != 0); + } + + return chkTrigger(B_BUTTON); +} + +s32 Player_actor_CheckController_forAxe(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (Player_ITEM_IS_AXE(kind)) { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->triggerButtonA; + } + return chkTrigger(A_BUTTON); + } + + return FALSE; +} + +s32 Player_actor_CheckController_forNet(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (Player_ITEM_IS_NET(kind)) { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->buttonA; + } + return chkButton(A_BUTTON); + } + + return FALSE; +} + +s32 Player_actor_CheckController_forRod(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (Player_ITEM_IS_ROD(kind)) { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->triggerButtonA; + } + return chkTrigger(A_BUTTON); + } + + return FALSE; +} + +s32 Player_actor_CheckController_forScoop(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (Player_ITEM_IS_SCOOP(kind)) { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->triggerButtonA; + } + return chkTrigger(A_BUTTON); + } + + return FALSE; +} + +s32 Player_actor_CheckController_forUmbrella(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (Player_ITEM_IS_UMBRELLA(kind) != FALSE) { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->triggerButtonA; + } + return chkTrigger(A_BUTTON); + } + + return FALSE; +} + +int Player_actor_CheckController_forShake_tree(Game* game) { + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)game); + Player* player = (Player*)actor; + s8 kind = Player_actor_Get_ItemKind(actor, player->unk_0CF0); + + if (!Player_ITEM_KIND_CHECK(kind, 0, Player_ITEM_KIND_SCOOP) || Player_ITEM_IS_UMBRELLA(kind) != FALSE) { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + return (data->triggerButtonA != 0) && (data->buttonB == 0); + } else { + return chkTrigger(A_BUTTON); + } + } + return FALSE; +} + +f32 Player_actor_CheckController_forStruggle_pitfall() { + if (chkTrigger(A_BUTTON) != 0) { + return 1.0f; + } else { + return 0.0f; + } +} + +s32 Player_actor_CheckController_forDush() { + if (mEv_CheckTitleDemo() > 0) { + return mPlib_Get_controller_data_for_title_demo_p()->buttonB; + } else { + return chkButton(Z_TRIG); + } +} + +f32 Player_actor_GetController_move_percentX() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + return data->controller.moveX; + } else { + return gamePT->controller.moveX; + } +} + +f32 Player_actor_GetController_move_percentY() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.moveY; + } else { + return gamePT->controller.moveY; + } +} + +f32 Player_actor_GetController_move_percentR() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.moveR; + } else { + return gamePT->controller.moveR; + } +} + +s16 Player_actor_GetController_move_angle() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.moveAngle; + } else { + return gamePT->controller.moveAngle; + } +} + +s16 Player_actor_GetController_old_move_angle() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.lastMoveAngle; + } else { + return gamePT->controller.lastMoveAngle; + } +} + +f32 Player_actor_GetController_recognize_percentR() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.adjustedR; + } else { + return gamePT->controller.adjustedR; + } +} + +f32 Player_actor_GetController_old_recognize_percentR() { + if (mEv_CheckTitleDemo() > 0) { + PlayerControllerData* data = mPlib_Get_controller_data_for_title_demo_p(); + + return data->controller.lastAdjustedR; + } else { + return gamePT->controller.lastAdjustedR; + } +} #pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808B3308_jp.s") @@ -619,7 +783,7 @@ ClObjTris_Init Player_actor_pclobj_tris_data_forItem = { { OC1_TYPE_10 | OC1_TYP #pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808BD584_jp.s") -#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808BD5C4_jp.s") +#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/Player_actor_Get_ItemKind.s") #pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/actors/player_actor/m_player/func_808BD668_jp.s") |
