From 19b143fdd36bf6ba5df53fbc5261e33d12766cd4 Mon Sep 17 00:00:00 2001 From: Jdog Date: Sat, 15 Aug 2020 09:57:33 -0700 Subject: [PATCH] Match DeleteNpc --- .../code_f2470_len_27f0/DeleteNpc.s | 22 ---------- include/common_structs.h | 42 +++++++++++++++++++ src/code_f2470_len_27f0.c | 11 ++++- 3 files changed, 52 insertions(+), 23 deletions(-) delete mode 100644 asm/nonmatchings/code_f2470_len_27f0/DeleteNpc.s diff --git a/asm/nonmatchings/code_f2470_len_27f0/DeleteNpc.s b/asm/nonmatchings/code_f2470_len_27f0/DeleteNpc.s deleted file mode 100644 index b80cee382e..0000000000 --- a/asm/nonmatchings/code_f2470_len_27f0/DeleteNpc.s +++ /dev/null @@ -1,22 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - - -glabel DeleteNpc -/* 0F25CC 802CDC1C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0F25D0 802CDC20 AFBF0010 */ sw $ra, 0x10($sp) -/* 0F25D4 802CDC24 8C82000C */ lw $v0, 0xc($a0) -/* 0F25D8 802CDC28 0C0B1EAF */ jal get_variable -/* 0F25DC 802CDC2C 8C450000 */ lw $a1, ($v0) -/* 0F25E0 802CDC30 0C00EABB */ jal get_npc_unsafe -/* 0F25E4 802CDC34 0040202D */ daddu $a0, $v0, $zero -/* 0F25E8 802CDC38 50400004 */ beql $v0, $zero, .L802CDC4C -/* 0F25EC 802CDC3C 24020002 */ addiu $v0, $zero, 2 -/* 0F25F0 802CDC40 0C00E273 */ jal free_npc -/* 0F25F4 802CDC44 0040202D */ daddu $a0, $v0, $zero -/* 0F25F8 802CDC48 24020002 */ addiu $v0, $zero, 2 -.L802CDC4C: -/* 0F25FC 802CDC4C 8FBF0010 */ lw $ra, 0x10($sp) -/* 0F2600 802CDC50 03E00008 */ jr $ra -/* 0F2604 802CDC54 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/include/common_structs.h b/include/common_structs.h index 0892675e8e..4ea7090654 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -4,6 +4,12 @@ #include "ultra64.h" #include "types.h" +typedef struct vec3f { + /* 0x00 */ f32 x; + /* 0x04 */ f32 y; + /* 0x08 */ f32 z; +} vec3f; // size = 0x0C + typedef struct matrix4f { /* 0x00 */ f32 mtx[4][4]; } matrix4f; // size = 0x40 @@ -671,6 +677,42 @@ typedef struct npc_blur_data { /* 0xA4 */ f32 zpos[20]; } npc_blur_data; // size = 0xF4 +typedef struct npc { + /* 0x000 */ s32 flags; + /* 0x004 */ UNK_PTR onUpdate; /* run before anything else for this npc in the npc update step */ + /* 0x008 */ UNK_PTR onRender; /* run after the display list for this npc is built */ + /* 0x00C */ f32 yaw; + /* 0x010 */ f32 planarFlyDist; /* also used for speech, temp0? */ + /* 0x014 */ f32 jumpScale; /* also used for speech, temp1? */ + /* 0x018 */ f32 moveSpeed; + /* 0x01C */ f32 jumpVelocity; + /* 0x020 */ struct npc_blur_data* blurData; /* related to movement somehow... */ + /* 0x024 */ char unk_24[4]; + /* 0x028 */ u32 currentAnim; + /* 0x02C */ char unk_2C[12]; + /* 0x038 */ struct vec3f pos; + /* 0x044 */ struct vec3f rotation; + /* 0x050 */ char unk_50[4]; + /* 0x054 */ struct vec3f scale; + /* 0x060 */ struct vec3f moveToPos; + /* 0x06C */ struct vec3f colliderPos; /* used during collision with player */ + /* 0x078 */ s32 shadowIndex; + /* 0x07C */ f32 shadowScale; + /* 0x080 */ char unk_80[8]; + /* 0x088 */ s16 isFacingAway; + /* 0x08A */ s16 yawCamOffset; + /* 0x08C */ char unk_8C[2]; + /* 0x08E */ s16 duration; /* formerly interp_counter */ + /* 0x090 */ s16 homePos[3]; + /* 0x096 */ char unk_96[14]; + /* 0x0A4 */ u8 npcID; + /* 0x0A5 */ char unk_A5; + /* 0x0A6 */ s16 collisionRadius; + /* 0x0A8 */ s16 collisionHeight; + /* 0x0AA */ u8 renderMode; + /* 0x0AB */ char unk_AB[661]; +} npc; // size = 0x340 + typedef struct collider_aabb { /* 0x00 */ f32 min[3]; /* 0x0C */ f32 max[3]; diff --git a/src/code_f2470_len_27f0.c b/src/code_f2470_len_27f0.c index 50d684a384..31d9a0f318 100644 --- a/src/code_f2470_len_27f0.c +++ b/src/code_f2470_len_27f0.c @@ -4,7 +4,16 @@ INCLUDE_ASM(code_f2470_len_27f0, func_802CDAC0); INCLUDE_ASM(code_f2470_len_27f0, set_npc_animation); -INCLUDE_ASM(code_f2470_len_27f0, DeleteNpc); +s32 DeleteNpc(script_context* script, s32 initialCall) { + bytecode* ptrReadPos = script->ptrReadPos; + npc* npcPtr = get_npc_unsafe(get_variable(script, *ptrReadPos)); + + if (npcPtr) { + free_npc(npcPtr); + return 2; + } + return 2; +} INCLUDE_ASM(code_f2470_len_27f0, GetNpcPointer);