diff options
| author | notyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com> | 2020-07-15 18:50:32 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-15 18:50:32 -0700 |
| commit | 400807e932ff1bd27b59c4a2cedeaa988d15ffd7 (patch) | |
| tree | 45e3a9a14f006d418d1d886171ce87f30bb6f2e3 /src | |
| parent | 287e05a55f0e05ed1e0df725c8efd505aa56941f (diff) | |
| parent | ca5de28b09f4e9e6d2912e91b58aaea421996772 (diff) | |
Merge pull request #25 from gamestabled:beedle
Beedle
Diffstat (limited to 'src')
| -rw-r--r-- | src/npc/beedle.c | 163 |
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; +} |
