papermario/src/code_77480.c

297 lines
7.1 KiB
C

#include "common.h"
extern s32 D_8010C920;
extern s32 D_8010C93C;
extern s32 D_8010C940;
extern s32 D_8010C950;
extern s32 D_8010C958;
INCLUDE_ASM(s32, "code_77480", test_below_player);
INCLUDE_ASM(s32, "code_77480", func_800DE46C);
INCLUDE_ASM(s32, "code_77480", trace_below_player);
INCLUDE_ASM(s32, "code_77480", collision_check_above);
INCLUDE_ASM(s32, "code_77480", trace_above_player);
INCLUDE_ASM(s32, "code_77480", do_lateral_collision);
INCLUDE_ASM(s32, "code_77480", func_800DEE5C);
INCLUDE_ASM(s32, "code_77480", func_800DF15C);
void func_800DF3FC(f32* arg0, f32* arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) {
f32 temp = (arg2 * arg4) + (arg3 * arg5);
*arg0 = (arg2 - (temp * arg4)) * 0.5f;
*arg1 = (arg3 - (temp * arg5)) * 0.5f;
}
INCLUDE_ASM(s32, "code_77480", test_player_lateral);
INCLUDE_ASM(s32, "code_77480", update_player);
INCLUDE_ASM(s32, "code_77480", check_input_use_partner);
INCLUDE_ASM(s32, "code_77480", func_800DFAAC);
void func_800DFBE8(void) {
func_800E5A2C();
collision_main_lateral();
func_800E4BB8();
if (!(gPlayerStatusPtr->flags & 0x4000000)) {
Camera* camera = &gCameras[0];
camera->targetPos.x = gPlayerStatusPtr->position.x;
camera->targetPos.y = gPlayerStatusPtr->position.y;
camera->targetPos.z = gPlayerStatusPtr->position.z;
}
}
void clear_player_status(void) {
mem_clear(&gPlayerStatus, sizeof(gPlayerStatus));
}
void func_800DFC74(void) {
PlayerStatus* playerStatus = PLAYER_STATUS;
mem_clear(playerStatus, sizeof(PlayerStatus));
playerStatus->flags = 1;
func_800E205C();
playerStatus->shadowID = create_shadow_type(0, playerStatus->position.x, playerStatus->position.y,
playerStatus->position.z);
func_800E6B68();
func_800E0B14();
func_800E069C();
func_800E0514();
func_800E0374();
func_800E5520();
}
s32 func_800DFCF4(void) {
if (D_8010EBB0[0] == 1 && (D_8010EBB0[3] == 6 || D_8010EBB0[3] == 9 || D_8010EBB0[3] == 7 || D_8010EBB0[3] == 4
|| D_8010EBB0[3] == 8)) {
return 0;
}
return 1;
}
INCLUDE_ASM(s32, "code_77480", func_800DFD48);
void func_800DFEFC(void) {
PlayerStatus* playerStatus = PLAYER_STATUS;
s32 temp_v0 = func_800DFD48();
if (temp_v0 != -1) {
playerStatus->anim = temp_v0;
playerStatus->unk_BC = 0;
playerStatus->flags &= ~0x10000000;
}
}
void func_800DFF50(s32 arg0) {
PlayerStatus* playerStatus = PLAYER_STATUS;
playerStatus->anim = arg0;
playerStatus->unk_BC = 0;
playerStatus->flags &= ~0x10000000;
}
void func_800DFF78(void) {
PlayerStatus* playerStatus = PLAYER_STATUS;
s32 temp_v0 = func_800DFD48();
if (temp_v0 != -1) {
playerStatus->anim = temp_v0;
playerStatus->unk_BC = 0;
playerStatus->flags |= 0x10000000;
}
}
INCLUDE_ASM(s32, "code_77480", func_800DFFCC);
// dist_to_player2D
f32 func_800E0088(f32 x, f32 z) {
PlayerStatus* playerStatus = PLAYER_STATUS;
return dist2D(x, z, playerStatus->position.x, playerStatus->position.z);
}
void enable_player_shadow(void) {
get_shadow_by_index(PLAYER_STATUS->shadowID)->flags &= ~1;
}
void disable_player_shadow(void) {
get_shadow_by_index(PLAYER_STATUS->shadowID)->flags |= 1;
}
s32 disable_player_static_collisions(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
playerStatus->flags |= 0x1000;
playerStatus->enableCollisionOverlapsCheck++;
return playerStatus->enableCollisionOverlapsCheck;
}
s32 enable_player_static_collisions(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
playerStatus->enableCollisionOverlapsCheck--;
if (playerStatus->enableCollisionOverlapsCheck == 0) {
playerStatus->flags &= ~0x1000;
}
return playerStatus->enableCollisionOverlapsCheck;
}
s32 disable_player_input(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
playerStatus->flags |= 0x2000;
playerStatus->statusMenuCounterinputEnabledCounter++;
return playerStatus->statusMenuCounterinputEnabledCounter;
}
s32 enable_player_input(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
playerStatus->statusMenuCounterinputEnabledCounter--;
if (playerStatus->statusMenuCounterinputEnabledCounter == 0) {
playerStatus->flags &= ~0x2000;
}
return playerStatus->statusMenuCounterinputEnabledCounter;
}
void func_800E01DC(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
if (playerStatus->animFlags & 0x10) {
playerStatus->flags |= 0x8000000;
}
}
s32 func_800E0208(void) {
GameStatus* gameStatus = GAME_STATUS;
s32 ret = 0;
if (gameStatus->disableScripts && (gameStatus->currentButtons & 0x10)) {
if (D_8010EBB0[0] == 0) {
set_action_state(ActionState_IDLE);
}
ret = 1;
}
return ret;
}
void func_800E0260(void) {
func_800E0658();
func_800E0AD0();
func_800E04D0();
func_800E0330();
}
INCLUDE_ASM(s32, "code_77480", func_800E0294);
void func_800E0330(void) {
if ((gPlayerStatusPtr->animFlags & 0x100) && (D_8010C93C != 0)) {
func_802B7000();
}
}
void func_800E0374(void) {
D_8010C93C = 0;
gPlayerStatusPtr->animFlags &= ~0x100;
}
INCLUDE_ASM(s32, "code_77480", func_800E0398);
void func_800E04D0(void) {
if ((gPlayerStatusPtr->animFlags & 0x40) && (D_8010C920 != 0)) {
func_802B71D4();
}
}
void func_800E0514(void) {
D_8010C920 = 0;
gPlayerStatusPtr->animFlags &= ~0x40;
}
s32 func_800E0538(void) {
PlayerStatus* playerStatus = PLAYER_STATUS;
s32* unk_C8 = playerStatus->unk_C8;
s32 ret = 0;
s32 cond;
if (unk_C8 != NULL && !(*unk_C8 & 0x10000000)) {
cond = (playerStatus->flags & 0x2002000) == 0x2000000;
ret = cond;
}
return ret;
}
INCLUDE_ASM(s32, "code_77480", func_800E0580);
void func_800E0658(void) {
if ((gPlayerStatusPtr->animFlags & 0x20) && (D_8010C940 != 0)) {
func_802B71C8();
}
}
void func_800E069C(void) {
D_8010C940 = 0;
gPlayerStatusPtr->animFlags &= ~0x20;
}
void func_800E06C0(s32 arg0) {
D_8010C950 = (arg0 == 1);
}
INCLUDE_ASM(s32, "code_77480", func_800E06D8);
INCLUDE_ASM(s32, "code_77480", func_800E0818);
void func_800E0AD0(void) {
if ((gPlayerStatusPtr->animFlags & 0x10) && (D_8010C958 != 0)) {
func_802B71E8();
}
}
void func_800E0B14(void) {
D_8010C958 = 0;
gPlayerStatusPtr->animFlags &= ~0x10;
}
void func_800E0B38(void) {
PlayerData* playerData = PLAYER_DATA;
if (!GAME_STATUS->isBattle) {
s32 i;
for (i = 1; i < ARRAY_COUNT(playerData->unk_2C4); i++) {
if (playerData->partners[i].enabled) {
playerData->unk_2C4[i] += 1;
}
}
}
}
INCLUDE_ASM(s32, "code_77480", func_800E0B90);
INCLUDE_ASM(s32, "code_77480", func_800E0FEC);
void render_player(void) {
if (!GAME_STATUS->disableScripts) {
render_player_model();
}
}
INCLUDE_ASM(void, "code_77480", render_player_model);
INCLUDE_ASM(s32, "code_77480", appendGfx_player);
INCLUDE_ASM(s32, "code_77480", appendGfx_player_spin);
INCLUDE_ASM(s32, "code_77480", update_player_shadow);