diff options
| author | Marcus Huderle <huderlem@gmail.com> | 2020-08-02 12:20:55 -0500 |
|---|---|---|
| committer | Marcus Huderle <huderlem@gmail.com> | 2020-08-02 12:23:25 -0500 |
| commit | b6864cfac635fc8080680f0a819f8c1aeec497f6 (patch) | |
| tree | 6169608d325c986a1d4fe2df77672db2fcc23b75 /src/object/heartContainer.c | |
| parent | c942711addcc4b07a680f529b789b43162783310 (diff) | |
Finish decompiling heartContainer.c
Diffstat (limited to 'src/object/heartContainer.c')
| -rw-r--r-- | src/object/heartContainer.c | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/src/object/heartContainer.c b/src/object/heartContainer.c index 10714a8e..b32b1981 100644 --- a/src/object/heartContainer.c +++ b/src/object/heartContainer.c @@ -1,21 +1,33 @@ #include "global.h" #include "entity.h" #include "flags.h" +#include "functions.h" extern void DeleteThisEntity(); -extern void sub_0808E714(Entity*); +extern void sub_08080CB4(Entity*); +extern int sub_08017850(Entity*); +extern void CreateItemEntity(u32, u32, u32); -extern void (*const gUnk_08121C48[])(Entity*); +static void sub_0808E6A0(Entity*); +static void sub_0808E6E4(Entity*); +static void sub_0808E714(Entity*); +static void sub_0808E764(Entity*); + +static void (*const gHeartContainerActions[])(Entity*) = { + sub_0808E6A0, + sub_0808E6E4, + sub_0808E714, + sub_0808E764, +}; extern BoundingBox gUnk_08121C58; void HeartContainer(Entity* this) { - gUnk_08121C48[this->action](this); + gHeartContainerActions[this->action](this); } -void sub_0808E6A0(Entity* this) { - - if (CheckFlags(*(u16*)&this->cutsceneBeh)) { +static void sub_0808E6A0(Entity* this) { + if (CheckFlags(this->cutsceneBeh.HWORD)) { DeleteThisEntity(); } this->action = 1; @@ -26,7 +38,7 @@ void sub_0808E6A0(Entity* this) { this->scriptedScene = 3; } -void sub_0808E6E4(Entity* this) { +static void sub_0808E6E4(Entity* this) { if (CheckFlags(this->field_0x86)) { this->action = 2; this->spriteSettings.b.draw = 1; @@ -34,3 +46,26 @@ void sub_0808E6E4(Entity* this) { sub_0808E714(this); } } + +static void sub_0808E714(Entity* this) { + int var0 = 0x400 - this->field_0xf * 8; + if (var0 > 0x100) { + this->field_0xf++; + sub_0805EC9C(this, var0, var0, 0); + } else { + this->action = 3; + this->field_0x3c |= 0x10; + sub_0805EC60(this); + PlaySFX(0x141); + } + sub_08080CB4(this); +} + +static void sub_0808E764(Entity* this) { + sub_08080CB4(this); + if (!(gLinkState.flags.all & 0x80) && sub_08017850(this)) { + SetFlag(this->cutsceneBeh.HWORD); + CreateItemEntity(0x62, 0, 0); + DeleteThisEntity(); + } +} |
