From 807d313e10be369240a1309f7ffe63c143f87287 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 7 Aug 2022 00:17:12 +0300 Subject: [PATCH] Put some const data in npcUtils --- data/data_081146D0.s | 26 ------------------------- include/hitbox.h | 1 + linker.ld | 1 + src/npcUtils.c | 46 ++++++++++++++++++++++++++++++++++++++------ 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/data/data_081146D0.s b/data/data_081146D0.s index e6f4b0b4..fc6a066d 100644 --- a/data/data_081146D0.s +++ b/data/data_081146D0.s @@ -4,32 +4,6 @@ .section .rodata .align 2 - -gNPCHitboxes:: @ 08114EE4 - .4byte 00000000 - .4byte gHitbox_2 - .4byte gHitbox_30 - .4byte gHitbox_2 - .4byte gHitbox_3 - .4byte gHitbox_31 - -gUnk_08114EFC:: @ 08114EFC - .4byte sub_0806EF88 - .4byte sub_0806EE70 - .4byte sub_0806EED0 - .4byte sub_0806EEF4 - -gUnk_08114F0C:: @ 08114F0C - .4byte sub_0806EFAC - .4byte sub_0806EFBC - .4byte sub_0806EFCC - .4byte sub_0806EFDC - .4byte sub_0806F014 - .4byte sub_0806F02C - .4byte sub_0806F048 - .4byte sub_0806F050 - .4byte sub_0806F064 - gUnk_08114F30:: @ 08114F30 .incbin "data_081146D0/gUnk_08114F30.bin" diff --git a/include/hitbox.h b/include/hitbox.h index b2b601ea..bf0916f0 100644 --- a/include/hitbox.h +++ b/include/hitbox.h @@ -34,6 +34,7 @@ extern const Hitbox gHitbox_27; extern const Hitbox gHitbox_28; extern const Hitbox gHitbox_29; extern const Hitbox gHitbox_30; +extern const Hitbox gHitbox_31; extern const Hitbox gHitbox_32; extern const Hitbox gUnk_080FD190; extern const Hitbox gUnk_080FD1A8; diff --git a/linker.ld b/linker.ld index 81e26aff..f25dbc52 100644 --- a/linker.ld +++ b/linker.ld @@ -1268,6 +1268,7 @@ SECTIONS { src/npc/phonograph.o(.rodata); src/npc/npc58.o(.rodata); src/npcDefinitions.o(.rodata); + src/npcUtils.o(.rodata); data/data_081146D0.o(.rodata); src/physics.o(.rodata); src/playerHitbox.o(.rodata); diff --git a/src/npcUtils.c b/src/npcUtils.c index 9e7fb73e..cf041a0d 100644 --- a/src/npcUtils.c +++ b/src/npcUtils.c @@ -6,13 +6,10 @@ #include "save.h" #include "npc.h" #include "kinstone.h" +#include "hitbox.h" extern const NPCDefinition gNPCDefinitions[]; -extern Hitbox* gNPCHitboxes[]; -extern u32 (*gUnk_08114EFC[])(Entity*); -extern u32 (*gUnk_08114F0C[])(Entity*, u8*); - typedef struct { u16 textIndex; u16 _2; @@ -21,6 +18,18 @@ typedef struct { extern NPCData* gUnk_08001A7C[]; u32 sub_0806EF88(Entity*); +u32 sub_0806EE70(Entity*); +u32 sub_0806EED0(Entity*); +u32 sub_0806EEF4(Entity*); +u32 sub_0806EFAC(Entity*, u16*); +u32 sub_0806EFBC(Entity*, u16*); +u32 sub_0806EFCC(Entity*, u16*); +u32 sub_0806EFDC(Entity*, u16*); +u32 sub_0806F014(Entity*, u16*); +u32 sub_0806F02C(Entity*, u16*); +u32 sub_0806F048(Entity*, u16*); +u32 sub_0806F050(Entity*, u16*); +u32 sub_0806F064(Entity*, u16*); static void sub_0806EF14(Entity*); static void sub_0806EF4C(Entity*, u16*); @@ -48,6 +57,14 @@ static const NPCDefinition* GetNPCDefinition(Entity* this) { } void NPCInit(Entity* this) { + static const Hitbox* const gNPCHitboxes[] = { + NULL, + &gHitbox_2, + &gHitbox_30, + &gHitbox_2, + &gHitbox_3, + &gHitbox_31, + }; u32 tmp; u32 tmp2; @@ -75,7 +92,7 @@ void NPCInit(Entity* this) { this->spriteSettings.shadow = definition->data.sprite.shadow; this->spritePriority.b1 = definition->data.sprite.spritePriority; this->spriteSettings.draw = definition->data.sprite.draw; - this->hitbox = gNPCHitboxes[definition->bitfield.hitbox]; + this->hitbox = (Hitbox*) gNPCHitboxes[definition->bitfield.hitbox]; this->flags |= ENT_DID_INIT; tmp2 = 0xff; this->animIndex = tmp2; @@ -135,6 +152,12 @@ void sub_0806EE04(Entity* ent, void* a2, u32 a3) { } u32 sub_0806EE20(Entity* ent) { + static u32 (*const gUnk_08114EFC[])(Entity*) = { + sub_0806EF88, + sub_0806EE70, + sub_0806EED0, + sub_0806EEF4, + }; u32 v3; if (!ent->interactType) { @@ -203,8 +226,19 @@ static u32 sub_0806EF74(Entity* ent, u32 a2) { } u32 sub_0806EF88(Entity* ent) { + static u32 (*const gUnk_08114F0C[])(Entity*, u16*) = { + sub_0806EFAC, + sub_0806EFBC, + sub_0806EFCC, + sub_0806EFDC, + sub_0806F014, + sub_0806F02C, + sub_0806F048, + sub_0806F050, + sub_0806F064, + }; u8* v1 = (u8*)&((u16*)ent->child)[ent->hitType]; - return gUnk_08114F0C[*v1](ent, v1); + return gUnk_08114F0C[*v1](ent, (u16*)v1); } u32 sub_0806EFAC(Entity* ent, u16* a2) {