summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-02-27 12:08:42 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2022-02-27 13:44:06 +0100
commit6d1424aad052dcd8d1ad5309e6e0587ae7ae9f43 (patch)
tree00b11a3909d4c5a98fe113e4f44c63fe4af8d6d6
parent1e33e5a55d70554878cd22d0d30e76df8edfb6b9 (diff)
Decompile WindTribeTeleporter
-rw-r--r--asm/object/windTribeTeleporter.s741
-rw-r--r--data/const/object/windTribeTeleporter.s11
-rw-r--r--include/object.h2
-rw-r--r--linker.ld4
-rw-r--r--src/object/windTribeTeleporter.c195
5 files changed, 198 insertions, 755 deletions
diff --git a/asm/object/windTribeTeleporter.s b/asm/object/windTribeTeleporter.s
deleted file mode 100644
index 4fe081a9..00000000
--- a/asm/object/windTribeTeleporter.s
+++ /dev/null
@@ -1,741 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start WindTribeTeleporter
-WindTribeTeleporter: @ 0x080A0F24
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _080A0F40 @ =gUnk_08124C10
- 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_080A11E0
- pop {r4, pc}
- .align 2, 0
-_080A0F40: .4byte gUnk_08124C10
-
- thumb_func_start sub_080A0F44
-sub_080A0F44: @ 0x080A0F44
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- movs r6, #1
- strb r6, [r5, #0xc]
- adds r1, r5, #0
- adds r1, #0x59
- movs r0, #8
- strb r0, [r1]
- adds r2, r5, #0
- adds r2, #0x29
- ldrb r0, [r2]
- movs r1, #7
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080A0FA8 @ =gHitbox_22
- str r0, [r5, #0x48]
- adds r0, r5, #0
- movs r1, #6
- bl SetDefaultPriority
- adds r0, r5, #0
- bl sub_080A11C0
- cmp r0, #0
- beq _080A0FA4
- ldr r1, _080A0FAC @ =gPlayerEntity
- ldrh r0, [r5, #0x2e]
- movs r4, #0
- strh r0, [r1, #0x2e]
- ldrh r0, [r5, #0x32]
- strh r0, [r1, #0x32]
- movs r0, #3
- bl SetPlayerControl
- bl sub_08078B48
- bl SetPlayerEventPriority
- movs r0, #0x89
- lsls r0, r0, #1
- bl SoundReq
- movs r0, #3
- strb r0, [r5, #0xc]
- strb r4, [r5, #0xd]
- adds r0, r5, #0
- adds r0, #0x68
- strb r6, [r0]
-_080A0FA4:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_080A0FA8: .4byte gHitbox_22
-_080A0FAC: .4byte gPlayerEntity
-
- thumb_func_start sub_080A0FB0
-sub_080A0FB0: @ 0x080A0FB0
- push {r4, r5, lr}
- adds r5, r0, #0
- bl sub_080A11C0
- adds r1, r0, #0
- cmp r1, #0
- beq _080A0FF8
- adds r0, r5, #0
- adds r0, #0x68
- ldrb r0, [r0]
- cmp r0, #0
- bne _080A0FFE
- ldr r1, _080A0FF4 @ =gPlayerEntity
- ldrh r0, [r5, #0x2e]
- movs r4, #0
- strh r0, [r1, #0x2e]
- ldrh r0, [r5, #0x32]
- strh r0, [r1, #0x32]
- movs r0, #3
- bl SetPlayerControl
- bl sub_08078B48
- bl SetPlayerEventPriority
- movs r0, #0x89
- lsls r0, r0, #1
- bl SoundReq
- movs r0, #2
- strb r0, [r5, #0xc]
- strb r4, [r5, #0xd]
- b _080A0FFE
- .align 2, 0
-_080A0FF4: .4byte gPlayerEntity
-_080A0FF8:
- adds r0, r5, #0
- adds r0, #0x68
- strb r1, [r0]
-_080A0FFE:
- pop {r4, r5, pc}
-
- thumb_func_start sub_080A1000
-sub_080A1000: @ 0x080A1000
-.ifdef DEMO_JP
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0xd]
- cmp r1, #1
- beq _080A0B52
- cmp r1, #1
- bgt _080A0B3C
- cmp r1, #0
- beq _080A0B46
- b _080A0BB0
-_080A0B3C:
- cmp r1, #2
- beq _080A0B60
- cmp r1, #3
- beq _080A0B8C
- b _080A0BB0
-_080A0B46:
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- b _080A0BF0
-_080A0B52:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0BF0
- b _080A0B98
-_080A0B60:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0B7E
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- adds r0, #0xf5
- bl SoundReq
- b _080A0BF0
-_080A0B7E:
- ldr r0, _080A0B88 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
- b _080A0BDE
- .align 2, 0
-_080A0B88: .4byte gRoomTransition
-_080A0B8C:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0BA4
-_080A0B98:
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- b _080A0BF0
-_080A0BA4:
- ldr r0, _080A0BAC @ =gRoomTransition
- ldr r0, [r0]
- b _080A0BDE
- .align 2, 0
-_080A0BAC: .4byte gRoomTransition
-_080A0BB0:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0BD8
- movs r0, #0xfc
- bl SetLocalFlag
- ldrb r1, [r4, #0xb]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080A0BD4 @ =0x0813AA10
- adds r0, r0, r1
- bl DoExitTransition
- b _080A0BF0
- .align 2, 0
-_080A0BD4: .4byte 0x0813AA10
-_080A0BD8:
- ldr r0, _080A0BF4 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #1
-_080A0BDE:
- ands r0, r1
- cmp r0, #0
- bne _080A0BF0
- ldr r0, _080A0BF8 @ =gPlayerEntity
- ldrb r1, [r0, #0x14]
- adds r1, #2
- movs r2, #6
- ands r1, r2
- strb r1, [r0, #0x14]
-_080A0BF0:
- pop {r4, pc}
- .align 2, 0
-_080A0BF4: .4byte gRoomTransition
-_080A0BF8: .4byte gPlayerEntity
-
-
-.else
-.ifdef JP
- push {lr}
- adds r1, r0, #0
- ldrb r2, [r1, #0xd]
- cmp r2, #1
- beq _080A0DF2
- cmp r2, #1
- bgt _080A0DDC
- cmp r2, #0
- beq _080A0DE6
- b _080A0E50
-_080A0DDC:
- cmp r2, #2
- beq _080A0E00
- cmp r2, #3
- beq _080A0E2C
- b _080A0E50
-_080A0DE6:
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- b _080A0E8C
-_080A0DF2:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0E8C
- b _080A0E38
-_080A0E00:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0E1E
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- adds r0, #0xf5
- bl SoundReq
- b _080A0E8C
-_080A0E1E:
- ldr r0, _080A0E28 @ =0x030010A0
- ldr r0, [r0]
- movs r1, #7
- b _080A0E7A
- .align 2, 0
-_080A0E28: .4byte 0x030010A0
-_080A0E2C:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0E44
-_080A0E38:
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- b _080A0E8C
-_080A0E44:
- ldr r0, _080A0E4C @ =0x030010A0
- ldr r0, [r0]
- ands r0, r2
- b _080A0E7C
- .align 2, 0
-_080A0E4C: .4byte 0x030010A0
-_080A0E50:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0E74
- ldrb r1, [r1, #0xb]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080A0E70 @ =gUnk_0813ADEC
- adds r0, r0, r1
- bl DoExitTransition
- b _080A0E8C
- .align 2, 0
-_080A0E70: .4byte gUnk_0813ADEC
-_080A0E74:
- ldr r0, _080A0E90 @ =0x030010A0
- ldr r0, [r0]
- movs r1, #1
-_080A0E7A:
- ands r0, r1
-_080A0E7C:
- cmp r0, #0
- bne _080A0E8C
- ldr r0, _080A0E94 @ =0x03001160
- ldrb r1, [r0, #0x14]
- adds r1, #2
- movs r2, #6
- ands r1, r2
- strb r1, [r0, #0x14]
-_080A0E8C:
- pop {pc}
- .align 2, 0
-_080A0E90: .4byte 0x030010A0
-_080A0E94: .4byte 0x03001160
-.else
-.ifdef EU
- push {lr}
- adds r1, r0, #0
- ldrb r2, [r1, #0xd]
- cmp r2, #1
- beq _080A0876
- cmp r2, #1
- bgt _080A0860
- cmp r2, #0
- beq _080A086A
- b _080A08D4
-_080A0860:
- cmp r2, #2
- beq _080A0884
- cmp r2, #3
- beq _080A08B0
- b _080A08D4
-_080A086A:
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- b _080A0910
-_080A0876:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A0910
- b _080A08BC
-_080A0884:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A08A2
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- adds r0, #0xf5
- bl SoundReq
- b _080A0910
-_080A08A2:
- ldr r0, _080A08AC @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
- b _080A08FE
- .align 2, 0
-_080A08AC: .4byte gRoomTransition
-_080A08B0:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A08C8
-_080A08BC:
- ldrb r0, [r1, #0xd]
- adds r0, #1
- strb r0, [r1, #0xd]
- movs r0, #0x1e
- strb r0, [r1, #0xe]
- b _080A0910
-_080A08C8:
- ldr r0, _080A08D0 @ =gRoomTransition
- ldr r0, [r0]
- ands r0, r2
- b _080A0900
- .align 2, 0
-_080A08D0: .4byte gRoomTransition
-_080A08D4:
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A08F8
- ldrb r1, [r1, #0xb]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080A08F4 @ =gUnk_0813ADEC
- adds r0, r0, r1
- bl DoExitTransition
- b _080A0910
- .align 2, 0
-_080A08F4: .4byte gUnk_0813ADEC
-_080A08F8:
- ldr r0, _080A0914 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #1
-_080A08FE:
- ands r0, r1
-_080A0900:
- cmp r0, #0
- bne _080A0910
- ldr r0, _080A0918 @ =gPlayerEntity
- ldrb r1, [r0, #0x14]
- adds r1, #2
- movs r2, #6
- ands r1, r2
- strb r1, [r0, #0x14]
-_080A0910:
- pop {pc}
- .align 2, 0
-_080A0914: .4byte gRoomTransition
-_080A0918: .4byte gPlayerEntity
-
-.else
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0xd]
- cmp r1, #1
- beq _080A102A
- cmp r1, #1
- bgt _080A1014
- cmp r1, #0
- beq _080A101E
- b _080A1088
-_080A1014:
- cmp r1, #2
- beq _080A1038
- cmp r1, #3
- beq _080A1064
- b _080A1088
-_080A101E:
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- b _080A10D4
-_080A102A:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A10D4
- b _080A1070
-_080A1038:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A1056
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- adds r0, #0xf5
- bl SoundReq
- b _080A10D4
-_080A1056:
- ldr r0, _080A1060 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
- b _080A10C2
- .align 2, 0
-_080A1060: .4byte gRoomTransition
-_080A1064:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A107C
-_080A1070:
- ldrb r0, [r4, #0xd]
- adds r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- b _080A10D4
-_080A107C:
- ldr r0, _080A1084 @ =gRoomTransition
- ldr r0, [r0]
- b _080A10C2
- .align 2, 0
-_080A1084: .4byte gRoomTransition
-_080A1088:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A10BC
- ldr r0, _080A10B4 @ =gRoomControls
- ldrb r0, [r0, #4]
- cmp r0, #3
- bne _080A10A2
- movs r0, #0xf9
- bl SetLocalFlag
-_080A10A2:
- ldrb r1, [r4, #0xb]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080A10B8 @ =gUnk_0813ADEC
- adds r0, r0, r1
- bl DoExitTransition
- b _080A10D4
- .align 2, 0
-_080A10B4: .4byte gRoomControls
-_080A10B8: .4byte gUnk_0813ADEC
-_080A10BC:
- ldr r0, _080A10D8 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #1
-_080A10C2:
- ands r0, r1
- cmp r0, #0
- bne _080A10D4
- ldr r0, _080A10DC @ =gPlayerEntity
- ldrb r1, [r0, #0x14]
- adds r1, #2
- movs r2, #6
- ands r1, r2
- strb r1, [r0, #0x14]
-_080A10D4:
- pop {r4, pc}
- .align 2, 0
-_080A10D8: .4byte gRoomTransition
-_080A10DC: .4byte gPlayerEntity
-.endif
-.endif
-.endif
-
- thumb_func_start sub_080A10E0
-sub_080A10E0: @ 0x080A10E0
- push {r4, lr}
- adds r2, r0, #0
- ldrb r1, [r2, #0xd]
- cmp r1, #1
- beq _080A110E
- cmp r1, #1
- bgt _080A10F4
- cmp r1, #0
- beq _080A10FE
- b _080A1180
-_080A10F4:
- cmp r1, #2
- beq _080A1124
- cmp r1, #3
- beq _080A1148
- b _080A1180
-_080A10FE:
- movs r0, #1
- strb r0, [r2, #0xd]
- movs r0, #0x1e
- strb r0, [r2, #0xe]
- adds r0, #0xf6
- bl SoundReq
- b _080A11BA
-_080A110E:
- ldrb r0, [r2, #0xe]
- subs r0, #1
- strb r0, [r2, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- beq _080A1130
- ldr r0, _080A1120 @ =gRoomTransition
- ldr r0, [r0]
- b _080A1162
- .align 2, 0
-_080A1120: .4byte gRoomTransition
-_080A1124:
- ldrb r0, [r2, #0xe]
- subs r0, #1
- strb r0, [r2, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A113C
-_080A1130:
- ldrb r0, [r2, #0xd]
- adds r0, #1
- strb r0, [r2, #0xd]
- movs r0, #0x1e
- strb r0, [r2, #0xe]
- b _080A11BA
-_080A113C:
- ldr r0, _080A1144 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #3
- b _080A1162
- .align 2, 0
-_080A1144: .4byte gRoomTransition
-_080A1148:
- ldrb r0, [r2, #0xe]
- subs r0, #1
- strb r0, [r2, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A115C
- ldrb r0, [r2, #0xd]
- adds r0, #1
- strb r0, [r2, #0xd]
- b _080A11BA
-_080A115C:
- ldr r0, _080A1178 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
-_080A1162:
- ands r0, r1
- cmp r0, #0
- bne _080A11BA
- ldr r0, _080A117C @ =gPlayerEntity
- ldrb r1, [r0, #0x14]
- adds r1, #2
- movs r2, #6
- ands r1, r2
- strb r1, [r0, #0x14]
- b _080A11BA
- .align 2, 0
-_080A1178: .4byte gRoomTransition
-_080A117C: .4byte gPlayerEntity
-_080A1180:
- ldr r4, _080A11A0 @ =gPlayerEntity
- ldrb r3, [r4, #0x14]
- cmp r3, #4
- beq _080A11A8
- ldr r0, _080A11A4 @ =gRoomTransition
- ldr r0, [r0]
- movs r1, #7
- ands r0, r1
- cmp r0, #0
- bne _080A11BA
- adds r0, r3, #2
- movs r1, #6
- ands r0, r1
- strb r0, [r4, #0x14]
- b _080A11BA
- .align 2, 0
-_080A11A0: .4byte gPlayerEntity
-_080A11A4: .4byte gRoomTransition
-_080A11A8:
- movs r0, #0
- movs r1, #1
- strb r1, [r2, #0xc]
- strb r0, [r2, #0xd]
- ldr r0, _080A11BC @ =gPlayerState
- adds r0, #0x8b
- strb r1, [r0]
- bl ResetPlayerEventPriority
-_080A11BA:
- pop {r4, pc}
- .align 2, 0
-_080A11BC: .4byte gPlayerState
-
- thumb_func_start sub_080A11C0
-sub_080A11C0: @ 0x080A11C0
- push {lr}
- adds r1, r0, #0
- ldr r0, _080A11D8 @ =gPlayerEntity
- movs r2, #0x36
- ldrsh r0, [r0, r2]
- cmp r0, #0
- bne _080A11DC
- adds r0, r1, #0
- bl IsCollidingPlayer
- b _080A11DE
- .align 2, 0
-_080A11D8: .4byte gPlayerEntity
-_080A11DC:
- movs r0, #0
-_080A11DE:
- pop {pc}
-
- thumb_func_start sub_080A11E0
-sub_080A11E0: @ 0x080A11E0
- push {lr}
- adds r2, r0, #0
- adds r1, r2, #0
- adds r1, #0x59
- ldrb r0, [r1]
- subs r0, #1
- strb r0, [r1]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080A1202
- movs r0, #8
- strb r0, [r1]
- ldrb r0, [r2, #0x1e]
- adds r0, #1
- movs r1, #3
- ands r0, r1
- strb r0, [r2, #0x1e]
-_080A1202:
- pop {pc}
diff --git a/data/const/object/windTribeTeleporter.s b/data/const/object/windTribeTeleporter.s
deleted file mode 100644
index 27e02207..00000000
--- a/data/const/object/windTribeTeleporter.s
+++ /dev/null
@@ -1,11 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_08124C10:: @ 08124C10
- .4byte sub_080A0F44
- .4byte sub_080A0FB0
- .4byte sub_080A1000
- .4byte sub_080A10E0
diff --git a/include/object.h b/include/object.h
index 2231dd7b..25347073 100644
--- a/include/object.h
+++ b/include/object.h
@@ -410,7 +410,7 @@ void ObjectB4(Entity*);
void ObjectB5(Entity*);
void ObjectB6(Entity*);
void Well(Entity*);
-void WindTribeTeleporter(Entity*);
+void WindTribeTeleporter();
void ObjectB9(Entity*);
void GyorgBossObject(Entity*);
void Windcrest(Entity*);
diff --git a/linker.ld b/linker.ld
index ced8f611..25bdf961 100644
--- a/linker.ld
+++ b/linker.ld
@@ -831,7 +831,7 @@ SECTIONS {
src/object/objectB5.o(.text);
asm/object/objectB6.o(.text);
src/object/well.o(.text);
- asm/object/windTribeTeleporter.o(.text);
+ src/object/windTribeTeleporter.o(.text);
asm/object/objectB9.o(.text);
src/object/gyorgBossObject.o(.text);
src/object/windcrest.o(.text);
@@ -1587,7 +1587,7 @@ SECTIONS {
data/const/object/objectB4.o(.rodata);
data/animations/object/objectB4.o(.rodata);
data/const/object/well.o(.rodata);
- data/const/object/windTribeTeleporter.o(.rodata);
+ src/object/windTribeTeleporter.o(.rodata);
data/const/object/objectB9.o(.rodata);
src/object/gyorgBossObject.o(.rodata);
data/const/object/windcrest.o(.rodata);
diff --git a/src/object/windTribeTeleporter.c b/src/object/windTribeTeleporter.c
new file mode 100644
index 00000000..052d4d2e
--- /dev/null
+++ b/src/object/windTribeTeleporter.c
@@ -0,0 +1,195 @@
+/**
+ * @file windTribeTeleporter.c
+ * @ingroup Objects
+ *
+ * @brief WindTribeTeleporter object
+ */
+
+#define NENT_DEPRECATED
+#include "global.h"
+#include "object.h"
+#include "functions.h"
+#include "hitbox.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unk_68;
+} WindTribeTeleporterEntity;
+
+extern ScreenTransitionData gUnk_0813ADEC[];
+
+void WindTribeTeleporter_Init(WindTribeTeleporterEntity*);
+void WindTribeTeleporter_Action1(WindTribeTeleporterEntity*);
+void WindTribeTeleporter_Action2(WindTribeTeleporterEntity*);
+void WindTribeTeleporter_Action3(WindTribeTeleporterEntity*);
+void sub_080A11E0(WindTribeTeleporterEntity*);
+bool32 sub_080A11C0(WindTribeTeleporterEntity*);
+
+void WindTribeTeleporter(WindTribeTeleporterEntity* this) {
+ static void (*const WindTribeTeleporter_Actions[])(WindTribeTeleporterEntity*) = {
+ WindTribeTeleporter_Init,
+ WindTribeTeleporter_Action1,
+ WindTribeTeleporter_Action2,
+ WindTribeTeleporter_Action3,
+ };
+ WindTribeTeleporter_Actions[super->action](this);
+ sub_080A11E0(this);
+}
+
+void WindTribeTeleporter_Init(WindTribeTeleporterEntity* this) {
+ super->action = 1;
+ super->frameDuration = 8;
+ super->spritePriority.b0 = 7;
+ super->hitbox = (Hitbox*)&gHitbox_22;
+ SetDefaultPriority(super, 6);
+ if (sub_080A11C0(this)) {
+ gPlayerEntity.x.HALF.HI = super->x.HALF.HI;
+ gPlayerEntity.y.HALF.HI = super->y.HALF.HI;
+ SetPlayerControl(CONTROL_DISABLED);
+ sub_08078B48();
+ SetPlayerEventPriority();
+ SoundReq(SFX_112);
+ super->action = 3;
+ super->subAction = 0;
+ this->unk_68 = 1;
+ }
+}
+
+void WindTribeTeleporter_Action1(WindTribeTeleporterEntity* this) {
+ if (sub_080A11C0(this)) {
+ if (this->unk_68 == 0) {
+ gPlayerEntity.x.HALF.HI = super->x.HALF.HI;
+ gPlayerEntity.y.HALF.HI = super->y.HALF.HI;
+ SetPlayerControl(CONTROL_DISABLED);
+ sub_08078B48();
+ SetPlayerEventPriority();
+ SoundReq(SFX_112);
+ super->action = 2;
+ super->subAction = 0;
+ }
+ } else {
+ this->unk_68 = 0;
+ }
+}
+
+void WindTribeTeleporter_Action2(WindTribeTeleporterEntity* this) {
+ switch (super->subAction) {
+ case 0:
+ super->actionDelay = 0x1e;
+ super->subAction++;
+ break;
+ case 1:
+ if (--super->actionDelay == 0) {
+ super->subAction++;
+ super->actionDelay = 0x1e;
+ }
+ break;
+ case 2:
+ if (--super->actionDelay == 0) {
+ super->subAction++;
+ super->actionDelay = 0x1e;
+ SoundReq(SFX_113);
+ } else {
+ if ((gRoomTransition.frameCount & 7) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ }
+ break;
+ case 3:
+ if (--super->actionDelay == 0) {
+ super->subAction++;
+ super->actionDelay = 0x1e;
+ } else {
+ if ((gRoomTransition.frameCount & 3) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ }
+ break;
+ default:
+ if (--super->actionDelay == 0) {
+ #if defined(DEMO_JP) || defined(JP) || defined(EU)
+ #ifdef DEMO_JP
+ SetLocalFlag(0xfc);
+ #endif
+ DoExitTransition(&gUnk_0813ADEC[super->type2]);
+ #else
+ if (gRoomControls.area == 3) {
+ SetLocalFlag(0xf9);
+ }
+ DoExitTransition(&gUnk_0813ADEC[super->type2]);
+ #endif
+ } else {
+ if ((gRoomTransition.frameCount & 1) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ }
+ break;
+ }
+}
+
+void WindTribeTeleporter_Action3(WindTribeTeleporterEntity* this) {
+ switch (super->subAction) {
+ case 0:
+ super->subAction = 1;
+ super->actionDelay = 0x1e;
+ SoundReq(SFX_114);
+ break;
+ case 1:
+ if (--super->actionDelay != 0) {
+ if ((gRoomTransition.frameCount & 1) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ } else {
+ super->subAction++;
+ super->actionDelay = 0x1e;
+ }
+ break;
+ case 2:
+ if (--super->actionDelay == 0) {
+ super->subAction++;
+ super->actionDelay = 0x1e;
+ } else {
+ if ((gRoomTransition.frameCount & 3) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ }
+ break;
+ case 3:
+ if (--super->actionDelay == 0) {
+ super->subAction++;
+ } else {
+ if ((gRoomTransition.frameCount & 7) == 0) {
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ }
+ }
+ break;
+ default:
+ if (gPlayerEntity.animationState != 4) {
+ if ((gRoomTransition.frameCount & 7U) != 0) {
+ return;
+ }
+ gPlayerEntity.animationState = (gPlayerEntity.animationState + 2) & 6;
+ } else {
+ super->action = 1;
+ super->subAction = 0;
+ gPlayerState.controlMode = 1;
+ ResetPlayerEventPriority();
+ }
+ break;
+ }
+}
+
+bool32 sub_080A11C0(WindTribeTeleporterEntity* this) {
+ if (gPlayerEntity.z.HALF.HI != 0) {
+ return FALSE;
+ } else {
+ return IsCollidingPlayer(super);
+ }
+}
+
+void sub_080A11E0(WindTribeTeleporterEntity* this) {
+ if (--super->frameDuration == 0) {
+ super->frameDuration = 8;
+ super->frameIndex = (super->frameIndex + 1) & 3;
+ }
+}