mirror of https://github.com/pmret/papermario.git
297 lines
7.1 KiB
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);
|