summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2022-02-28 02:32:53 +0200
committerTal Hayon <talhayon1@gmail.com>2022-02-28 02:32:53 +0200
commit644d044a1946bb10994350bebb7a151bf42ebc56 (patch)
tree7bf8045824279fd856531aff74b8164f8d551ee6
parent4bf9c9b04d6af1071ebdbf369bcef004dda637bc (diff)
Decompile macroPlayer
-rw-r--r--asm/object/macroPlayer.s553
-rw-r--r--assets/assets.json5
-rw-r--r--data/const/object/macroPlayer.s25
-rw-r--r--linker.ld4
-rw-r--r--src/object/macroPlayer.c251
5 files changed, 253 insertions, 585 deletions
diff --git a/asm/object/macroPlayer.s b/asm/object/macroPlayer.s
deleted file mode 100644
index c741786a..00000000
--- a/asm/object/macroPlayer.s
+++ /dev/null
@@ -1,553 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start MacroPlayer
-MacroPlayer: @ 0x0808CAE4
- push {lr}
- ldr r2, _0808CAF8 @ =gUnk_08121680
- ldrb r1, [r0, #0xa]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0808CAF8: .4byte gUnk_08121680
-
- thumb_func_start sub_0808CAFC
-sub_0808CAFC: @ 0x0808CAFC
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _0808CB18 @ =gUnk_08121688
- ldrb r0, [r4, #0xc]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
- adds r0, r4, #0
- bl sub_0808CB9C
- pop {r4, pc}
- .align 2, 0
-_0808CB18: .4byte gUnk_08121688
-
- thumb_func_start sub_0808CB1C
-sub_0808CB1C: @ 0x0808CB1C
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- cmp r0, #0
- bne _0808CB70
- movs r2, #1
- strb r2, [r4, #0xc]
- ldrb r0, [r4, #0x18]
- movs r1, #3
- orrs r0, r1
- strb r0, [r4, #0x18]
- movs r0, #0xa7
- strh r0, [r4, #0x12]
- movs r0, #0xd
- strb r0, [r4, #0x1e]
- adds r0, r4, #0
- adds r0, #0x60
- strh r2, [r0]
- ldrb r1, [r4, #0x1a]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #5
- orrs r0, r1
- strb r0, [r4, #0x1a]
- ldrb r2, [r4, #0x19]
- movs r1, #0x3f
- adds r0, r1, #0
- ands r0, r2
- strb r0, [r4, #0x19]
- adds r3, r4, #0
- adds r3, #0x29
- ldrb r2, [r3]
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r2
- strb r0, [r3]
- ldrb r0, [r4, #0x1b]
- ands r1, r0
- movs r0, #0x80
- orrs r1, r0
- strb r1, [r4, #0x1b]
-_0808CB70:
- ldr r0, [r4, #0x50]
- ldr r1, [r0, #0x2c]
- str r1, [r4, #0x2c]
- ldr r1, [r0, #0x30]
- str r1, [r4, #0x30]
- movs r5, #0
- str r5, [r4, #0x34]
- adds r1, r4, #0
- bl SortEntityBelow
- ldrb r0, [r4, #0xd]
- cmp r0, #0
- beq _0808CB98
- adds r0, r4, #0
- adds r0, #0x60
- movs r1, #0
- strh r5, [r0]
- strb r1, [r4, #0xd]
- movs r0, #4
- strb r0, [r4, #0x1e]
-_0808CB98:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0808CB9C
-sub_0808CB9C: @ 0x0808CB9C
- push {r4, r5, lr}
- adds r3, r0, #0
- adds r0, #0x68
- ldrh r1, [r0]
- ldrb r4, [r0]
- lsrs r5, r1, #8
- movs r2, #0
- ldrb r0, [r3, #0x14]
- cmp r0, #4
- bls _0808CBB2
- movs r2, #1
-_0808CBB2:
- lsls r2, r2, #6
- ldrb r1, [r3, #0x18]
- movs r0, #0x41
- rsbs r0, r0, #0
- ands r0, r1
- orrs r0, r2
- strb r0, [r3, #0x18]
- cmp r4, #0xb7
- bhi _0808CBCA
- ldrb r0, [r3, #0x14]
- lsrs r0, r0, #1
- adds r4, r4, r0
-_0808CBCA:
- ldrh r0, [r3, #0x12]
- cmp r5, r0
- bne _0808CBDA
- adds r0, r3, #0
- adds r0, #0x58
- ldrb r0, [r0]
- cmp r4, r0
- beq _0808CBE4
-_0808CBDA:
- strh r5, [r3, #0x12]
- adds r0, r3, #0
- adds r1, r4, #0
- bl InitAnimationForceUpdate
-_0808CBE4:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0808CBE8
-sub_0808CBE8: @ 0x0808CBE8
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r4, #0x18]
- movs r3, #4
- strb r3, [r4, #0x14]
- ldrb r2, [r4, #0x19]
- movs r1, #0x3f
- adds r0, r1, #0
- ands r0, r2
- strb r0, [r4, #0x19]
- movs r0, #0x29
- adds r0, r0, r4
- mov ip, r0
- ldrb r2, [r0]
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r2
- mov r2, ip
- strb r0, [r2]
- ldrb r0, [r4, #0x1b]
- ands r1, r0
- movs r0, #0x80
- orrs r1, r0
- strb r1, [r4, #0x1b]
- adds r1, r4, #0
- adds r1, #0x68
- movs r0, #0x8a
- lsls r0, r0, #1
- strh r0, [r1]
- subs r1, #0x10
- movs r0, #0xff
- strb r0, [r1]
- ldr r0, _0808CC80 @ =0x0000FF50
- strh r0, [r4, #0x36]
- adds r0, r4, #0
- adds r0, #0x6a
- strh r3, [r0]
- ldrb r0, [r4, #0x19]
- movs r1, #3
- orrs r0, r1
- strb r0, [r4, #0x19]
- adds r0, r4, #0
- movs r1, #4
- movs r2, #4
- movs r3, #0
- bl sub_0805EC9C
- ldr r0, _0808CC84 @ =gUnk_02018EB0
- str r4, [r0, #0x14]
- movs r0, #0
- bl sub_0807A094
- adds r1, r0, #0
- adds r0, r4, #0
- bl ChangeObjPalette
- movs r0, #0x3c
- movs r1, #1
- movs r2, #0
- bl CreateObject
- cmp r0, #0
- beq _0808CC7C
- str r4, [r0, #0x50]
- str r0, [r4, #0x54]
-_0808CC7C:
- pop {r4, pc}
- .align 2, 0
-_0808CC80: .4byte 0x0000FF50
-_0808CC84: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CC88
-sub_0808CC88: @ 0x0808CC88
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r4, r5, #0
- adds r4, #0x6a
- ldrh r1, [r4]
- ldr r0, _0808CCB8 @ =0x000003FF
- cmp r1, r0
- bhi _0808CCB4
- adds r0, r1, #4
- strh r0, [r4]
- ldrh r2, [r4]
- adds r0, r5, #0
- adds r1, r2, #0
- movs r3, #0
- bl sub_0805EC9C
- ldrh r1, [r4]
- adds r0, r5, #0
- movs r2, #8
- movs r3, #2
- bl sub_0806FCF4
-_0808CCB4:
- pop {r4, r5, pc}
- .align 2, 0
-_0808CCB8: .4byte 0x000003FF
-
- thumb_func_start sub_0808CCBC
-sub_0808CCBC: @ 0x0808CCBC
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0808CC88
- movs r1, #0x80
- lsls r1, r1, #5
- adds r0, r4, #0
- bl GravityUpdate
- cmp r0, #0
- bne _0808CCFA
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0x14
- strb r0, [r4, #0x15]
- adds r0, #0xec
- strh r0, [r4, #0x24]
- movs r0, #0xc0
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- ldrb r1, [r4, #0x18]
- movs r0, #0x31
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4, #0x18]
- ldr r0, [r4, #0x54]
- movs r1, #1
- strb r1, [r0, #0xd]
- ldr r0, _0808CCFC @ =gUnk_02018EB0
- strb r1, [r0, #0x18]
-_0808CCFA:
- pop {r4, pc}
- .align 2, 0
-_0808CCFC: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CD00
-sub_0808CD00: @ 0x0808CD00
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0808CC88
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl GravityUpdate
- cmp r0, #0
- beq _0808CD24
- adds r0, r4, #0
- bl LinearMoveUpdate
- b _0808CD3E
-_0808CD24:
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0xa
- strb r0, [r4, #0x15]
- movs r0, #0xc0
- strh r0, [r4, #0x24]
- movs r0, #0xa0
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- ldr r1, _0808CD40 @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x19]
-_0808CD3E:
- pop {r4, pc}
- .align 2, 0
-_0808CD40: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CD44
-sub_0808CD44: @ 0x0808CD44
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0808CC88
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl GravityUpdate
- cmp r0, #0
- beq _0808CD68
- adds r0, r4, #0
- bl LinearMoveUpdate
- b _0808CD82
-_0808CD68:
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0x11
- strb r0, [r4, #0x15]
- adds r0, #0xef
- strh r0, [r4, #0x24]
- movs r0, #0x90
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- ldr r1, _0808CD84 @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x1a]
-_0808CD82:
- pop {r4, pc}
- .align 2, 0
-_0808CD84: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CD88
-sub_0808CD88: @ 0x0808CD88
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0808CC88
- movs r1, #0xc0
- lsls r1, r1, #5
- adds r0, r4, #0
- bl GravityUpdate
- cmp r0, #0
- beq _0808CDB8
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl LinearMoveUpdate
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, #0x7f
- bgt _0808CDD6
- movs r0, #0x80
- strh r0, [r4, #0x2e]
- b _0808CDD6
-_0808CDB8:
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0x3c
- strb r0, [r4, #0xe]
- adds r1, r4, #0
- adds r1, #0x68
- ldr r0, _0808CDD8 @ =0x00000C04
- strh r0, [r1]
- ldr r0, [r4, #0x54]
- bl DeleteEntity
- adds r0, r4, #0
- bl sub_0805EC60
-_0808CDD6:
- pop {r4, pc}
- .align 2, 0
-_0808CDD8: .4byte 0x00000C04
-
- thumb_func_start sub_0808CDDC
-sub_0808CDDC: @ 0x0808CDDC
- push {lr}
- adds r1, r0, #0
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0808CDF6
- ldrb r0, [r1, #0xc]
- adds r0, #1
- strb r0, [r1, #0xc]
- movs r0, #0x10
- strb r0, [r1, #0xe]
-_0808CDF6:
- pop {pc}
-
- thumb_func_start sub_0808CDF8
-sub_0808CDF8: @ 0x0808CDF8
- push {lr}
- adds r3, r0, #0
- ldrb r0, [r3, #0xe]
- subs r0, #1
- strb r0, [r3, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0808CE2C
- ldr r0, _0808CE30 @ =gArea
- ldrb r1, [r0, #0x16]
- ldrb r0, [r3, #0xc]
- adds r0, #1
- adds r0, r0, r1
- strb r0, [r3, #0xc]
- ldr r2, _0808CE34 @ =gUnk_081216B4
- lsls r1, r1, #1
- adds r0, r1, r2
- ldrb r0, [r0]
- strb r0, [r3, #0x14]
- adds r1, #1
- adds r1, r1, r2
- ldrb r0, [r1]
- strb r0, [r3, #0x15]
- movs r0, #0xa0
- lsls r0, r0, #1
- strh r0, [r3, #0x24]
-_0808CE2C:
- pop {pc}
- .align 2, 0
-_0808CE30: .4byte gArea
-_0808CE34: .4byte gUnk_081216B4
-
- thumb_func_start sub_0808CE38
-sub_0808CE38: @ 0x0808CE38
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl LinearMoveUpdate
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, #0xc7
- bgt _0808CE52
- movs r0, #0x18
- strb r0, [r4, #0x15]
-_0808CE52:
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, #0x2f
- bgt _0808CE60
- ldr r1, _0808CE64 @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x1b]
-_0808CE60:
- pop {r4, pc}
- .align 2, 0
-_0808CE64: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CE68
-sub_0808CE68: @ 0x0808CE68
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl LinearMoveUpdate
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, #0xc7
- bgt _0808CE82
- movs r0, #8
- strb r0, [r4, #0x15]
-_0808CE82:
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, #0xd0
- ble _0808CE90
- ldr r1, _0808CE94 @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x1b]
-_0808CE90:
- pop {r4, pc}
- .align 2, 0
-_0808CE94: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CE98
-sub_0808CE98: @ 0x0808CE98
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl LinearMoveUpdate
- movs r0, #0x32
- ldrsh r1, [r4, r0]
- movs r0, #0x90
- lsls r0, r0, #1
- cmp r1, r0
- ble _0808CEB8
- ldr r1, _0808CEBC @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x1b]
-_0808CEB8:
- pop {r4, pc}
- .align 2, 0
-_0808CEBC: .4byte gUnk_02018EB0
-
- thumb_func_start sub_0808CEC0
-sub_0808CEC0: @ 0x0808CEC0
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl LinearMoveUpdate
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, #0xc7
- bgt _0808CEDA
- movs r0, #0x18
- strb r0, [r4, #0x15]
-_0808CEDA:
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, #0xf
- bgt _0808CEE8
- ldr r1, _0808CEEC @ =gUnk_02018EB0
- movs r0, #1
- strb r0, [r1, #0x1b]
-_0808CEE8:
- pop {r4, pc}
- .align 2, 0
-_0808CEEC: .4byte gUnk_02018EB0
diff --git a/assets/assets.json b/assets/assets.json
index a7f635fa..a6862320 100644
--- a/assets/assets.json
+++ b/assets/assets.json
@@ -43545,11 +43545,6 @@
"size": 32
},
{
- "path": "macroPlayer/gUnk_081216B4.bin",
- "start": 1185460,
- "size": 8
- },
- {
"path": "object3D/gUnk_081216C8_EU.bin",
"variants": [
"EU"
diff --git a/data/const/object/macroPlayer.s b/data/const/object/macroPlayer.s
deleted file mode 100644
index 1e573c65..00000000
--- a/data/const/object/macroPlayer.s
+++ /dev/null
@@ -1,25 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_08121680:: @ 08121680
- .4byte sub_0808CAFC
- .4byte sub_0808CB1C
-
-gUnk_08121688:: @ 08121688
- .4byte sub_0808CBE8
- .4byte sub_0808CCBC
- .4byte sub_0808CD00
- .4byte sub_0808CD44
- .4byte sub_0808CD88
- .4byte sub_0808CDDC
- .4byte sub_0808CDF8
- .4byte sub_0808CE38
- .4byte sub_0808CE68
- .4byte sub_0808CE98
- .4byte sub_0808CEC0
-
-gUnk_081216B4:: @ 081216B4
- .incbin "macroPlayer/gUnk_081216B4.bin"
diff --git a/linker.ld b/linker.ld
index c3cf8625..cf0fab77 100644
--- a/linker.ld
+++ b/linker.ld
@@ -705,7 +705,7 @@ SECTIONS {
asm/object/object75.o(.text); /* 75 and 76 are mislocated in object table */
asm/object/object76.o(.text);
asm/object/code_0808C964.o(.text);
- asm/object/macroPlayer.o(.text);
+ src/object/macroPlayer.o(.text);
asm/object/object3D.o(.text);
src/object/object3E.o(.text);
src/object/giantLeaf.o(.text);
@@ -1440,7 +1440,7 @@ SECTIONS {
src/object/macroMushroomStalks.o(.rodata);
data/const/object/object75.o(.rodata);
data/const/object/object76.o(.rodata);
- data/const/object/macroPlayer.o(.rodata);
+ src/object/macroPlayer.o(.rodata);
data/const/object/object3D.o(.rodata);
src/object/object3E.o(.rodata);
data/const/object/giantLeaf.o(.rodata);
diff --git a/src/object/macroPlayer.c b/src/object/macroPlayer.c
new file mode 100644
index 00000000..37cf06ce
--- /dev/null
+++ b/src/object/macroPlayer.c
@@ -0,0 +1,251 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "coord.h"
+#include "functions.h"
+#include "object.h"
+#include "area.h"
+
+typedef struct {
+ Entity base;
+ union SplitHWord unk68;
+ u16 unk6a;
+} MacroPlayerEntity;
+
+extern u8 gUnk_02018EB0[];
+extern int sub_0807A094(int);
+
+void MacroPlayer_Type0(MacroPlayerEntity*);
+void MacroPlayer_Type1(MacroPlayerEntity*);
+void MacroPlayer_Type0_Init(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action1(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action2(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action3(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action4(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action5(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action6(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action7(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action8(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action9(MacroPlayerEntity*);
+void MacroPlayer_Type0_Action10(MacroPlayerEntity*);
+void sub_0808CB9C(MacroPlayerEntity*);
+
+void MacroPlayer(Entity* this) {
+ static void (*const typeFuncs[])(MacroPlayerEntity*) = {
+ MacroPlayer_Type0,
+ MacroPlayer_Type1,
+ };
+ typeFuncs[this->type]((MacroPlayerEntity*)this);
+}
+
+void MacroPlayer_Type0(MacroPlayerEntity* this) {
+ static void (*const actionFuncs[])(MacroPlayerEntity*) = {
+ MacroPlayer_Type0_Init, MacroPlayer_Type0_Action1, MacroPlayer_Type0_Action2, MacroPlayer_Type0_Action3,
+ MacroPlayer_Type0_Action4, MacroPlayer_Type0_Action5, MacroPlayer_Type0_Action6, MacroPlayer_Type0_Action7,
+ MacroPlayer_Type0_Action8, MacroPlayer_Type0_Action9, MacroPlayer_Type0_Action10,
+ };
+ actionFuncs[super->action](this);
+ sub_0808CB9C(this);
+}
+
+void MacroPlayer_Type1(MacroPlayerEntity* this) {
+ Entity* pEVar1;
+
+ if (super->action == 0) {
+ super->action = 1;
+ super->spriteSettings.draw = 3;
+ super->spriteIndex = 0xa7;
+ super->frameIndex = 13;
+ super->spriteVramOffset = 1;
+ super->palette.b.b0 = 5;
+ super->spriteRendering.b3 = 0;
+ super->spritePriority.b0 = 0;
+ super->spriteOrientation.flipY = 2;
+ }
+ pEVar1 = super->parent;
+ super->x = pEVar1->x;
+ super->y = pEVar1->y;
+ super->z.WORD = 0;
+ SortEntityBelow(pEVar1, super);
+ if (super->subAction != 0) {
+ super->spriteVramOffset = 0;
+ super->subAction = 0;
+ super->frameIndex = 4;
+ }
+}
+
+void sub_0808CB9C(MacroPlayerEntity* this) {
+ u32 uVar1;
+ u32 uVar2;
+ u32 uVar3;
+ u32 uVar4;
+ u32 val;
+
+ uVar2 = this->unk68.HWORD;
+ uVar1 = this->unk68.HALF.LO;
+ uVar4 = uVar2 >> 8;
+ val = 0;
+ uVar3 = super->animationState;
+ val = uVar3 > 4;
+ super->spriteSettings.flipX = val;
+ if (uVar1 < 0xb8) {
+ uVar1 += super->animationState >> 1;
+ }
+ if ((uVar4 != (u16)super->spriteIndex) || (uVar1 != super->animIndex)) {
+ super->spriteIndex = uVar4;
+ InitAnimationForceUpdate(super, uVar1);
+ }
+}
+
+void MacroPlayer_Type0_Init(MacroPlayerEntity* this) {
+ Entity* pEVar1;
+ u8* ptr;
+
+ super->action++;
+ super->spriteSettings.draw = 1;
+ super->animationState = 4;
+ super->spriteRendering.b3 = 0;
+ super->spritePriority.b0 = 0;
+ super->spriteOrientation.flipY = 2;
+ this->unk68.HWORD = 0x114;
+ super->animIndex = 0xff;
+ super->z.HALF.HI = 0xff50;
+ this->unk6a = 4;
+ super->spriteRendering.b0 = 3;
+ sub_0805EC9C(super, 4, 4, 0);
+ ptr = gUnk_02018EB0;
+ *(Entity**)&ptr[0x14] = super;
+ ChangeObjPalette(super, sub_0807A094(0));
+ pEVar1 = CreateObject(PORTAL_FALLING_PLAYER, 1, 0);
+ if (pEVar1 != NULL) {
+ pEVar1->parent = super;
+ super->child = pEVar1;
+ }
+}
+
+void sub_0808CC88(MacroPlayerEntity* this) {
+ if (this->unk6a < 0x400) {
+ this->unk6a += 4;
+ sub_0805EC9C(super, this->unk6a, this->unk6a, 0);
+ sub_0806FCF4(super, this->unk6a, 8, 2);
+ }
+}
+
+void MacroPlayer_Type0_Action1(MacroPlayerEntity* this) {
+ sub_0808CC88(this);
+ if (GravityUpdate(super, 0x1000) == 0) {
+ super->action++;
+ super->direction = DirectionSouthWest;
+ super->speed = 0x100;
+ super->zVelocity = 0x30000;
+ super->spriteSettings.shadow = 0;
+ super->child->subAction = 1;
+ gUnk_02018EB0[0x18] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action2(MacroPlayerEntity* this) {
+ sub_0808CC88(this);
+ UpdateAnimationSingleFrame(super);
+ if (GravityUpdate(super, 0x2000)) {
+ LinearMoveUpdate(super);
+ } else {
+ super->action++;
+ super->direction = 10;
+ super->speed = 0xc0;
+ super->zVelocity = 0x28000;
+ gUnk_02018EB0[0x19] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action3(MacroPlayerEntity* this) {
+ sub_0808CC88(this);
+ UpdateAnimationSingleFrame(super);
+ if (GravityUpdate(super, 0x2000)) {
+ LinearMoveUpdate(super);
+ } else {
+ super->action++;
+ super->direction = 17;
+ super->speed = 0x100;
+ super->zVelocity = 0x24000;
+ gUnk_02018EB0[0x1a] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action4(MacroPlayerEntity* this) {
+ sub_0808CC88(this);
+ if (GravityUpdate(super, 0x1800)) {
+ UpdateAnimationSingleFrame(super);
+ LinearMoveUpdate(super);
+ if (super->x.HALF.HI < 0x80) {
+ super->x.HALF.HI = 0x80;
+ }
+ } else {
+ super->action++;
+ super->actionDelay = 60;
+ this->unk68.HWORD = 0xc04;
+ DeleteEntity(super->child);
+ sub_0805EC60(super);
+ }
+}
+
+void MacroPlayer_Type0_Action5(MacroPlayerEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action++;
+ super->actionDelay = 0x10;
+ }
+}
+
+void MacroPlayer_Type0_Action6(MacroPlayerEntity* this) {
+ static const u8 gUnk_081216B4[] = { 0, 0x1a, 0x2, 0x5, 0x4, 0x11, 0x6, 0x1a };
+ u32 uVar2;
+
+ if (--super->actionDelay == 0) {
+ uVar2 = gArea.curPortalExitDirection;
+ super->action += 1;
+ super->action += uVar2;
+ super->animationState = gUnk_081216B4[uVar2 * 2];
+ super->direction = gUnk_081216B4[uVar2 * 2 + 1];
+ super->speed = 0x140;
+ }
+}
+
+void MacroPlayer_Type0_Action7(MacroPlayerEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ LinearMoveUpdate(super);
+ if (super->y.HALF.HI < 200) {
+ super->direction = DirectionWest;
+ }
+ if (super->x.HALF.HI < 0x30) {
+ gUnk_02018EB0[0x1b] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action8(MacroPlayerEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ LinearMoveUpdate(super);
+ if (super->y.HALF.HI < 200) {
+ super->direction = DirectionEast;
+ }
+ if (super->x.HALF.HI > 0xd0) {
+ gUnk_02018EB0[0x1b] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action9(MacroPlayerEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ LinearMoveUpdate(super);
+ if (super->y.HALF.HI > 0x120) {
+ gUnk_02018EB0[0x1b] = 1;
+ }
+}
+
+void MacroPlayer_Type0_Action10(MacroPlayerEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ LinearMoveUpdate(super);
+ if (super->y.HALF.HI < 200) {
+ super->direction = DirectionWest;
+ }
+ if (super->x.HALF.HI < 0x10) {
+ gUnk_02018EB0[0x1b] = 1;
+ }
+}