mirror of
https://github.com/zeldaret/tmc
synced 2026-07-02 20:46:44 -04:00
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
/**
|
|
* @file npc58.c
|
|
* @ingroup NPCs
|
|
*
|
|
* @brief NPC 58
|
|
*/
|
|
#define NENT_DEPRECATED
|
|
#include "entity.h"
|
|
#include "npc.h"
|
|
|
|
typedef struct {
|
|
/*0x00*/ Entity base;
|
|
/*0x68*/ s16 unk_68;
|
|
/*0x6a*/ s16 unk_6a;
|
|
/*0x6c*/ s16 unk_6c;
|
|
} NPC58Entity;
|
|
|
|
extern void sub_0806FFBC(Entity*, u32, u32, u32);
|
|
|
|
static const SpriteLoadData gUnk_081146D0[] = {
|
|
{ 0, 0x61, 0x4 }, { 0x800, 0x61, 0x4 }, { 0x1000, 0x61, 0x4 }, { 0x1800, 0x61, 0x4 }, { 0, 0, 0 },
|
|
};
|
|
|
|
void NPC58(NPC58Entity* this) {
|
|
s32 sVar1;
|
|
s32 uVar2;
|
|
s32 uVar4;
|
|
GenericEntity* entity;
|
|
|
|
if (super->action == 0) {
|
|
if (!LoadExtraSpriteData(super, gUnk_081146D0)) {
|
|
return;
|
|
}
|
|
super->action++;
|
|
super->spriteSettings.draw = 2;
|
|
super->spriteRendering.b3 = 0;
|
|
super->spritePriority.b0 = 0;
|
|
super->spriteOrientation.flipY = 1;
|
|
super->x.HALF.HI = 0x78;
|
|
super->y.HALF.HI = 0x10;
|
|
}
|
|
entity = (GenericEntity*)super->parent;
|
|
if (entity != NULL) {
|
|
sVar1 = *(s16*)&entity->field_0x68.HWORD;
|
|
uVar2 = (s32)sVar1 / 600;
|
|
this->unk_68 = uVar2;
|
|
uVar4 = (s32)sVar1 % 600;
|
|
this->unk_6a = uVar4 / 0x3c;
|
|
uVar4 = uVar4 % 0x3c;
|
|
uVar2 = uVar4 / 6;
|
|
this->unk_6c = uVar2;
|
|
if (entity->base.next == NULL) {
|
|
DeleteThisEntity();
|
|
}
|
|
} else {
|
|
DeleteThisEntity();
|
|
}
|
|
}
|
|
|
|
void NPC58_Head(NPC58Entity* this) {
|
|
super->frameIndex = 0xff;
|
|
SetExtraSpriteFrame(super, 0, this->unk_68);
|
|
SetExtraSpriteFrame(super, 1, this->unk_6a);
|
|
SetExtraSpriteFrame(super, 2, this->unk_6c);
|
|
SetExtraSpriteFrame(super, 3, 10);
|
|
sub_0806FFBC(super, 0, -12, 0);
|
|
sub_0806FFBC(super, 1, -4, 0);
|
|
sub_0806FFBC(super, 2, 0xc, 0);
|
|
sub_0807000C(super);
|
|
}
|