summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-07-15 18:50:32 -0700
committerGitHub <noreply@github.com>2020-07-15 18:50:32 -0700
commit400807e932ff1bd27b59c4a2cedeaa988d15ffd7 (patch)
tree45e3a9a14f006d418d1d886171ce87f30bb6f2e3 /src
parent287e05a55f0e05ed1e0df725c8efd505aa56941f (diff)
parentca5de28b09f4e9e6d2912e91b58aaea421996772 (diff)
Merge pull request #25 from gamestabled:beedle
Beedle
Diffstat (limited to 'src')
-rw-r--r--src/npc/beedle.c163
1 files changed, 163 insertions, 0 deletions
diff --git a/src/npc/beedle.c b/src/npc/beedle.c
new file mode 100644
index 00000000..bdcce8c7
--- /dev/null
+++ b/src/npc/beedle.c
@@ -0,0 +1,163 @@
+#include "global.h"
+#include "entity.h"
+#include "functions.h"
+#include "textbox.h"
+#include "link.h"
+#include "room.h"
+
+typedef struct {
+ u32 unk_00;
+ s8 unk_04;
+} gUnk_0810C89C_struct;
+
+extern void sub_08078850(Entity*, u32, s8, gUnk_0810C89C_struct*);
+
+extern u8 gUnk_0810C88C[];
+extern BoundingBox gUnk_0810C894;
+extern gUnk_0810C89C_struct gUnk_0810C89C[];
+extern SpriteLoadData gUnk_0810C8D4;
+extern void (*gUnk_0810C8E0[])(Entity*);
+extern u8 gUnk_0810C8F0[];
+
+void sub_080632C8(Entity* this);
+void sub_08063410(Entity* this);
+s32 sub_080633C8(Entity* this);
+void sub_0806346C(Entity* this);
+
+void Beedle(Entity* this) {
+ if (this->flags & 0x2) {
+ sub_08063410(this);
+ } else {
+ sub_080632C8(this);
+ }
+}
+
+void sub_080632C8(Entity* this) {
+ gUnk_0810C8E0[this->action](this);
+}
+
+void sub_080632E0(Entity* this) {
+ if (LoadExtraSpriteData(this, &gUnk_0810C8D4) != 0) {
+ InitializeAnimation(this, 0);
+ sub_08078778(this);
+ this->spriteSettings.b.draw = 1;
+ this->action = 1;
+ }
+}
+
+void sub_08063314(Entity* this) {
+ u32 offset;
+
+ if (((++this->field_0xf & 0xF) == 0) && (offset = sub_080633C8(this), this->animIndex != offset)) {
+ InitializeAnimation(this, offset);
+ }
+ if (this->interactType != '\0') {
+ TextboxNoOverlapFollow(this->actionDelay + 0xA01);
+ this->action++;
+ }
+ sub_0806ED78(this);
+}
+
+void sub_0806336C(Entity* this) {
+ if ((gTextBox.doTextBox & 0x7F) == 0) {
+ this->action++;
+ InitializeAnimation(this, 8);
+ }
+}
+
+void sub_08063390(Entity* this) {
+ GetNextFrame(this);
+ if (this->frames.b.f3 != 0) {
+ this->action = 1;
+ InitializeAnimation(this, GetAnimationState(this));
+ sub_08078778(this);
+ }
+ sub_0806ED78(this);
+}
+
+s32 sub_080633C8(Entity* this) {
+ s32 uVar1;
+
+ uVar1 = sub_0806ED9C(this, 0x20, 0x20);
+ if (uVar1 < 0) {
+ uVar1 = this->animIndex;
+ }
+ return uVar1;
+}
+
+void Beedle_Head(Entity* this) {
+ SetExtraSpriteFrame(this, 0, this->frames.all & 0x3F);
+ SetExtraSpriteFrame(this, 1, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, 1, 0);
+ sub_0807000C(this);
+}
+
+void sub_08063410(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_0810C8D4) == 0) {
+ return;
+ }
+ this->action++;
+ if (this->entityType.form != 0) {
+ this->boundingBox = &gUnk_0810C894;
+ this->entityType.parameter = 0;
+ }
+ sub_0807DD64(this);
+ sub_08078778(this);
+ }
+ if (this->entityType.form != 0) {
+ sub_0806346C(this);
+ }
+ sub_0807DDAC(this, 0);
+ sub_0807DDE4(this);
+ GetNextFrame(this);
+}
+
+void sub_0806346C(Entity* this) {
+ u8 bVar1;
+ s32 iVar2;
+ s32 iVar3;
+
+ iVar3 = (gLinkEntity.x.HALF.HI - this->x.HALF.HI);
+ iVar2 = (gLinkEntity.y.HALF.HI - this->y.HALF.HI);
+
+ iVar3 += 0x30;
+ iVar2 += 0x18;
+ if (iVar3 < 0) {
+ iVar3 = 0;
+ }
+ if (iVar3 > 0x50) {
+ iVar3 = 0x50;
+ }
+ if (iVar2 < 0) {
+ iVar2 = 0;
+ }
+ if (iVar2 > 0x40) {
+ iVar2 = 0x40;
+ }
+
+ iVar3 >>= 4;
+ iVar2 >>= 4;
+
+ bVar1 = gUnk_0810C8F0[(gLinkEntity.animationState >> 1) + iVar3 * 4 + iVar2 * 0x18];
+ if (bVar1 != this->entityType.parameter) {
+ gUnk_0810C89C_struct* temp = &gUnk_0810C89C[bVar1];
+ sub_08078850(this, 1, temp->unk_04, temp);
+ this->entityType.parameter = bVar1;
+ }
+}
+
+void sub_080634E4(Entity* this, u32* param_1) {
+ param_1[1] = this->entityType.parameter;
+}
+
+void sub_080634EC(Entity* this) {
+ gRoomVars.itemForSaleIndex = gUnk_0810C88C[this->entityType.parameter];
+}
+
+void sub_08063504(Entity* this, u32* param_2) {
+ u32 uVar1;
+
+ uVar1 = sub_080544DC(gUnk_0810C88C[this->entityType.parameter]);
+ param_2[5] = (-uVar1 | uVar1) >> 0x1F;
+}