mirror of
https://github.com/pmret/papermario.git
synced 2024-11-18 17:02:46 +01:00
384 lines
11 KiB
C
384 lines
11 KiB
C
#include "common.h"
|
|
|
|
ApiStatus HidePlayerShadow(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 hideShadow = get_variable(script, *args++);
|
|
|
|
if (hideShadow) {
|
|
disable_player_shadow();
|
|
} else {
|
|
enable_player_shadow();
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus DisablePlayerPhysics(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 disable = get_variable(script, *args++);
|
|
|
|
if (disable) {
|
|
disable_player_static_collisions();
|
|
} else {
|
|
enable_player_static_collisions();
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus DisablePlayerInput(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 enable = get_variable(script, *args++);
|
|
|
|
if (enable) {
|
|
disable_player_input();
|
|
func_800EF628();
|
|
func_800E97B8();
|
|
func_800E984C();
|
|
if (playerStatus->actionState == ActionState_SPIN) {
|
|
playerStatus->animFlags |= 0x40000;
|
|
}
|
|
D_8009A650[0] |= 0x40;
|
|
} else {
|
|
enable_player_input();
|
|
func_800EF600();
|
|
func_800E01DC();
|
|
D_8009A650[0] &= ~0x40;
|
|
func_800E983C();
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerPos(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
Bytecode* args = script->ptrReadPos;
|
|
f32 x = get_variable(script, *args++);
|
|
f32 y = get_variable(script, *args++);
|
|
f32 z = get_variable(script, *args++);
|
|
|
|
gPlayerNpcPtr->pos.x = x;
|
|
gPlayerNpcPtr->pos.y = y;
|
|
gPlayerNpcPtr->pos.z = z;
|
|
|
|
playerStatus->position.x = gPlayerNpcPtr->pos.x;
|
|
playerStatus->position.y = gPlayerNpcPtr->pos.y;
|
|
playerStatus->position.z = gPlayerNpcPtr->pos.z;
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerCollisionSize(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 height = get_variable(script, *args++);
|
|
s32 radius = get_variable(script, *args);
|
|
Npc* player = gPlayerNpcPtr;
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
|
|
player->collisionHeight = height;
|
|
player->collisionRadius = radius;
|
|
|
|
playerStatus->colliderHeight = player->collisionHeight;
|
|
playerStatus->colliderDiameter = player->collisionRadius;
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerSpeed(ScriptInstance* script, s32 isInitialCall) {
|
|
gPlayerNpcPtr->moveSpeed = get_float_variable(script, *script->ptrReadPos);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerJumpscale(ScriptInstance* script, s32 isInitialCall) {
|
|
gPlayerNpcPtr->jumpScale = get_float_variable(script, *script->ptrReadPos);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
#ifdef NON_MATCHING
|
|
ApiStatus SetPlayerAnimation(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
PlayerAnim animation;
|
|
|
|
animation = get_variable(script, *args);
|
|
|
|
gPlayerNpcPtr->currentAnim = animation;
|
|
gPlayerAnimation = animation;
|
|
|
|
if (animation == 0x80003) {
|
|
exec_ShakeCam1(0, 0, 2);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
#else
|
|
INCLUDE_ASM(s32, "code_F5750", SetPlayerAnimation, ScriptInstance* script, s32 isInitialCall);
|
|
#endif
|
|
|
|
ApiStatus SetPlayerActionState(ScriptInstance* script, s32 isInitialCall) {
|
|
set_action_state(get_variable(script, *script->ptrReadPos));
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerAnimationSpeed(ScriptInstance* script, s32 isInitialCall) {
|
|
gPlayerNpcPtr->animationSpeed = get_float_variable(script, *script->ptrReadPos);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", PlayerMoveTo, ScriptInstance* script, s32 isInitialCall);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D1270);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D1380);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", player_jump);
|
|
|
|
void PlayerJump(ScriptInstance* script, s32 isInitialCall) {
|
|
player_jump(script, isInitialCall, 0);
|
|
}
|
|
|
|
void PlayerJump1(ScriptInstance* script, s32 isInitialCall) {
|
|
player_jump(script, isInitialCall, 1);
|
|
}
|
|
|
|
void PlayerJump2(ScriptInstance* script, s32 isInitialCall) {
|
|
player_jump(script, isInitialCall, 2);
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", InterpPlayerYaw, ScriptInstance* script, s32 isInitialCall);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", PlayerFaceNpc, ScriptInstance* script, s32 isInitialCall);
|
|
|
|
ApiStatus GetPlayerTargetYaw(ScriptInstance* script, s32 isInitialCall) {
|
|
set_variable(script, *script->ptrReadPos, gPlayerStatus.targetYaw);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetPlayerFlagBits(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
PlayerStatus* playerStatus2 = &gPlayerStatus;
|
|
Bytecode bits = *args++;
|
|
Bytecode a1 = *args;
|
|
|
|
if (get_variable(script, a1)) {
|
|
playerStatus->flags |= bits;
|
|
} else {
|
|
playerStatus2->flags &= ~bits;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetPlayerActionState(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode outVar = *script->ptrReadPos;
|
|
set_variable(script, outVar, gPlayerActionState);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetPlayerPos(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode outVar1 = *args++;
|
|
Bytecode outVar2 = *args++;
|
|
Bytecode outVar3 = *args++;
|
|
|
|
set_variable(script, outVar1, playerStatus->position.x);
|
|
set_variable(script, outVar2, playerStatus->position.y);
|
|
set_variable(script, outVar3, playerStatus->position.z);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetPlayerAnimation(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode outVar = *script->ptrReadPos;
|
|
|
|
set_variable(script, outVar, gPlayerAnimation);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus FullyRestoreHPandFP(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerData* playerData = &gPlayerData;
|
|
|
|
playerData->curHP = playerData->curMaxHP;
|
|
playerData->curFP = playerData->curMaxFP;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus FullyRestoreSP(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerData* playerData = &gPlayerData;
|
|
|
|
playerData->specialBarsFilled = playerData->maxStarPower * 256;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus EnablePartner(ScriptInstance* script, s32 isInitialCall) {
|
|
s32 partnerIdx = get_variable(script, *script->ptrReadPos) - 1;
|
|
PartnerData* partner = &gPlayerData.partners[partnerIdx];
|
|
|
|
partner->enabled = TRUE;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus DisablePartner(ScriptInstance* script, s32 isInitialCall) {
|
|
s32 partnerIdx = get_variable(script, *script->ptrReadPos) - 1;
|
|
PartnerData* partner = &gPlayerData.partners[partnerIdx];
|
|
|
|
partner->enabled = FALSE;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", UseEntryHeading);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2148);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", UseExitHeading);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D23F8);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D244C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2484);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D249C);
|
|
|
|
ApiStatus func_802D24F4(ScriptInstance* script, s32 isInitialCall) {
|
|
return (gPlayerStatus.moveFrames == 0) * ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2508);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2520);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D286C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2884);
|
|
|
|
ApiStatus DisablePulseStone(ScriptInstance* script, s32 isInitialCall) {
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
PlayerStatus* playerStatus2 = &gPlayerStatus;
|
|
|
|
if (get_variable(script, *script->ptrReadPos)) {
|
|
playerStatus->animFlags &= ~0x80;
|
|
} else {
|
|
playerStatus2->animFlags |= 0x80;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetCurrentPartner(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode a0 = *args;
|
|
PlayerData* playerData = &gPlayerData;
|
|
s32 currentPartner = 0;
|
|
|
|
if (D_8010EBB0[0] != 0) {
|
|
currentPartner = playerData->currentPartner;
|
|
}
|
|
|
|
set_variable(script, a0, currentPartner);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2B50);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2B6C);
|
|
|
|
ApiStatus Disable8bitMario(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
PlayerStatus* playerStatus = &gPlayerStatus;
|
|
PlayerStatus* playerStatus2 = &gPlayerStatus;
|
|
|
|
if (get_variable(script, *args)) {
|
|
playerStatus->colliderHeight = 37;
|
|
playerStatus->colliderDiameter = 26;
|
|
playerStatus->animFlags &= ~0x4000;
|
|
} else {
|
|
playerStatus2->colliderHeight = 19;
|
|
playerStatus2->colliderDiameter = 26;
|
|
playerStatus2->animFlags |= 0x44004;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2C14);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2C40);
|
|
|
|
ApiStatus PlaySoundAtPlayer(ScriptInstance* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
|
|
play_sound_at_player(var, var2);
|
|
return 2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2D30);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2ED4);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2F34);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D2FCC);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3028);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D31E0);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3398);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D33D4);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3474);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D354C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3624);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3674);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D36E0);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D378C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3840);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D38EC);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3998);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D39FC);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3A60);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3C58);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3EB8);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3F74);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D3FC8);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4050);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4164);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D417C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D420C);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D42AC);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4364);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D43AC);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D43D0);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D43F4);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4434);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4488);
|
|
|
|
INCLUDE_ASM(s32, "code_F5750", func_802D4560);
|