Put some const data in npcUtils

This commit is contained in:
Tal Hayon 2022-08-07 00:17:12 +03:00
parent 18ef0d34b4
commit 807d313e10
4 changed files with 42 additions and 32 deletions

View File

@ -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"

View File

@ -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;

View File

@ -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);

View File

@ -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) {