summaryrefslogtreecommitdiff
path: root/src/object
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2020-08-02 12:20:55 -0500
committerMarcus Huderle <huderlem@gmail.com>2020-08-02 12:23:25 -0500
commitb6864cfac635fc8080680f0a819f8c1aeec497f6 (patch)
tree6169608d325c986a1d4fe2df77672db2fcc23b75 /src/object
parentc942711addcc4b07a680f529b789b43162783310 (diff)
Finish decompiling heartContainer.c
Diffstat (limited to 'src/object')
-rw-r--r--src/object/heartContainer.c49
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();
+ }
+}