papermario/src/code_f2470_len_27f0.c

190 lines
5.9 KiB
C
Raw Normal View History

2020-08-04 08:49:11 +02:00
#include "common.h"
2020-08-16 07:13:03 +02:00
Npc* resolve_npc(ScriptInstance* script, NpcId npcIdOrPtr) {
2020-08-16 06:24:20 +02:00
if (npcIdOrPtr == NpcId_SELF) {
2020-08-15 06:25:36 +02:00
return get_npc_safe(script->ownerID);
2020-08-16 06:24:20 +02:00
} else if (npcIdOrPtr >= -270000000) {
return get_npc_safe(npcIdOrPtr);
2020-08-15 06:25:36 +02:00
} else {
2020-08-16 06:24:20 +02:00
return (Npc*) npcIdOrPtr;
2020-08-15 06:25:36 +02:00
}
}
2020-08-04 08:49:11 +02:00
INCLUDE_ASM(code_f2470_len_27f0, set_npc_animation);
2020-08-16 08:55:51 +02:00
ApiStatus DeleteNpc(ScriptInstance* script, s32 isInitialCall) {
2020-08-16 05:23:40 +02:00
Bytecode* ptrReadPos = script->ptrReadPos;
2020-08-16 05:19:00 +02:00
Npc* npcPtr = get_npc_unsafe(get_variable(script, *ptrReadPos++));
2020-08-04 08:49:11 +02:00
2020-08-15 18:57:33 +02:00
if (npcPtr) {
free_npc(npcPtr);
2020-08-16 08:55:51 +02:00
return ApiStatus_DONE2;
2020-08-15 18:57:33 +02:00
}
2020-08-16 08:55:51 +02:00
return ApiStatus_DONE2;
2020-08-15 18:57:33 +02:00
}
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
ApiStatus GetNpcPointer(ScriptInstance* script, s32 isInitialCall) {
2020-08-16 05:23:40 +02:00
Bytecode* ptrReadPos = script->ptrReadPos;
2020-08-16 06:24:20 +02:00
NpcId npcID = get_variable(script, *ptrReadPos++);
2020-08-16 05:23:40 +02:00
Bytecode varNPC = *ptrReadPos++;
2020-08-15 19:59:48 +02:00
set_variable(script, varNPC, get_npc_safe(npcID));
2020-08-16 08:55:51 +02:00
return ApiStatus_DONE2;
2020-08-15 19:59:48 +02:00
}
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, SetNpcPos);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, SetNpcRotation);
2020-08-04 08:49:11 +02:00
2020-08-18 23:12:26 +02:00
ApiStatus SetNpcScale(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
f32 sizeX = get_float_variable(script, *ptrReadPos++);
f32 sizeY = get_float_variable(script, *ptrReadPos++);
f32 sizeZ = get_float_variable(script, *ptrReadPos++);
Npc* npcPtr = resolve_npc(script, npcID);
if (npcPtr != NULL) {
s32 todo = 1; // TODO: Figure out why this variable and subsequent if block is required for matching
if (todo) {
npcPtr->scale.x = sizeX;
npcPtr->scale.y = sizeY;
npcPtr->scale.z = sizeZ;
}
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
2020-08-04 08:49:11 +02:00
ApiStatus SetNpcCollisionSize(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
s32 height = get_variable(script, *ptrReadPos++);
s32 radius = get_variable(script, *ptrReadPos++);
Npc* npcPtr = resolve_npc(script, npcID);
if (npcPtr != NULL) {
2020-08-18 22:47:06 +02:00
s32 todo = 1; // TODO: Figure out why this variable and subsequent if block is required for matching
if (todo) {
npcPtr->collisionHeight = height;
npcPtr->collisionRadius = radius;
}
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
ApiStatus SetNpcSpeed(ScriptInstance* script, s32 isInitialCall) {
2020-08-18 21:38:25 +02:00
Bytecode* ptrReadPos = script->ptrReadPos;
2020-08-16 08:55:51 +02:00
NpcId npcID = get_variable(script, *ptrReadPos++);
f32 speed = get_float_variable(script, *ptrReadPos);
2020-08-16 08:55:51 +02:00
Npc* npcPtr = resolve_npc(script, npcID);
if(npcPtr != NULL) {
2020-08-18 21:38:25 +02:00
npcPtr->moveSpeed = speed;
2020-08-18 23:12:26 +02:00
return ApiStatus_DONE2; // Doesn't match if omitted
}
2020-08-18 21:38:25 +02:00
return ApiStatus_DONE2;
}
2020-08-04 08:49:11 +02:00
2020-08-18 23:12:26 +02:00
ApiStatus SetNpcJumpscale(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
f32 jumpScale = get_float_variable(script, *ptrReadPos);
Npc* npcPtr = resolve_npc(script, npcID);
if(npcPtr != NULL) {
npcPtr->jumpScale = jumpScale;
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
2020-08-04 08:49:11 +02:00
ApiStatus SetNpcAnimation(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
s32 animation = get_variable(script, *ptrReadPos);
Npc* npcPtr = resolve_npc(script, npcID);
if (npcPtr != NULL) {
set_npc_animation(npcPtr, animation);
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
ApiStatus GetNpcAnimation(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
Bytecode outVar = *ptrReadPos++;
Npc* npcPtr = resolve_npc(script, npcID);
if (npcPtr != NULL) {
set_variable(script, outVar, npcPtr->currentAnim);
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
// TODO: Figure out meaning of float value in Npc struct that this function is setting
ApiStatus func_802CE1C0(ScriptInstance* script, s32 isInitialCall) {
Bytecode* ptrReadPos = script->ptrReadPos;
NpcId npcID = get_variable(script, *ptrReadPos++);
f32 value1 = get_float_variable(script, *ptrReadPos++);
Npc* npcPtr = resolve_npc(script, npcID);
2020-08-04 08:49:11 +02:00
if (npcPtr != NULL) {
npcPtr->unk_30 = value1;
return ApiStatus_DONE2; // Doesn't match if omitted
}
return ApiStatus_DONE2;
}
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcMoveTo);
2020-08-04 08:49:11 +02:00
INCLUDE_ASM(code_f2470_len_27f0, _npc_jump_to);
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcJump0);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcJump1);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcFlyTo);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, GetNpcYaw);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, SetNpcYaw);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, InterpNpcYaw);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcFacePlayer);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcFaceNpc);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, SetNpcFlagBits);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, GetNpcPos);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, EnableNpcShadow);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, EnableNpcBlur);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, ClearPartnerMoveHistory);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, NpcSetHomePosToCurrent);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, GetPartnerPos);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, DisablePartnerAI);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, EnablePartnerAI);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, BringPartnerOut);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, PutPartnerAway);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, GetCurrentPartnerID);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, SetNpcEffect);
2020-08-04 08:49:11 +02:00
2020-08-16 08:55:51 +02:00
INCLUDE_API_ASM(code_f2470_len_27f0, PlaySoundAtNpc);