summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2022-03-31 14:11:59 -0700
committerGitHub <noreply@github.com>2022-03-31 14:11:59 -0700
commit9233701a5df02847510df90937f25bccc46eebd2 (patch)
treed8ac1b365e60d52cf749b2ed3066e1217b81d6e6
parent673a565e3a8b7d501a5eb4836e2f0f678b93db11 (diff)
parent03e15c611ceb2c35a0766afde467fddf02327dc8 (diff)
Merge pull request #483 from octorock/beanstalkSubtask
Decompile some of beanstalkSubtask
-rw-r--r--asm/beanstalkSubtask.s3607
-rw-r--r--asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc46
-rw-r--r--asm/non_matching/beanstalkSubtask/SetBGDefaults.inc19
-rw-r--r--asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc1394
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_080197D4.inc54
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc95
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A370.inc120
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc63
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A570.inc454
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc92
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc55
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801AA58.inc88
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801AB08.inc183
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801AC68.inc29
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801AC98.inc111
-rw-r--r--asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc67
-rw-r--r--asm/non_matching/playerUtils/sub_0807BFD0.inc4
-rw-r--r--include/beanstalkSubtask.h36
-rw-r--r--include/functions.h4
-rw-r--r--include/main.h2
-rw-r--r--include/player.h3
-rw-r--r--include/room.h3
-rw-r--r--include/save.h2
-rw-r--r--include/structures.h20
-rw-r--r--linker.ld4
-rw-r--r--src/beanstalkSubtask.c603
-rw-r--r--src/enterPortalSubtask.c10
-rw-r--r--src/game.c18
-rw-r--r--src/item/itemTryPickupObject.c4
-rw-r--r--src/npc/ghostBrothers.c5
-rw-r--r--src/object/chestSpawner.c3
-rw-r--r--src/object/jailBars.c6
-rw-r--r--src/object/macroPlayer.c18
-rw-r--r--src/object/object74.c5
-rw-r--r--src/object/pushableGrave.c4
-rw-r--r--src/object/stoneTablet.c5
-rw-r--r--src/physics.c16
-rw-r--r--src/subtask2.c6
38 files changed, 3585 insertions, 3673 deletions
diff --git a/asm/beanstalkSubtask.s b/asm/beanstalkSubtask.s
deleted file mode 100644
index 0d925e49..00000000
--- a/asm/beanstalkSubtask.s
+++ /dev/null
@@ -1,3607 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0801967C
-sub_0801967C: @ 0x0801967C
- push {lr}
- ldr r1, _08019690 @ =gUnk_080B4458
- ldr r0, _08019694 @ =gMenu
- ldrb r0, [r0, #6]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {pc}
- .align 2, 0
-_08019690: .4byte gUnk_080B4458
-_08019694: .4byte gMenu
-
- thumb_func_start sub_08019698
-sub_08019698: @ 0x08019698
- push {r4, r5, lr}
- ldr r0, _08019724 @ =gUI
- ldrb r1, [r0, #3]
- lsls r0, r1, #3
- subs r0, r0, r1
- lsls r0, r0, #1
- ldr r1, _08019728 @ =gUnk_080B4410
- adds r4, r0, r1
- movs r0, #0x80
- lsls r0, r0, #1
- ldrh r1, [r4, #4]
- bl SetLocalFlagByBank
- ldrh r0, [r4]
- ldrh r1, [r4, #2]
- bl LoadAuxiliaryRoom
- ldr r5, _0801972C @ =gRoomControls
- ldrh r0, [r4, #6]
- ldrh r1, [r5, #0xa]
- adds r0, r0, r1
- strh r0, [r5, #0xa]
- ldrh r0, [r4, #8]
- ldrh r2, [r5, #0xc]
- adds r0, r0, r2
- strh r0, [r5, #0xc]
- ldr r1, _08019730 @ =gUpdateVisibleTiles
- movs r0, #1
- strb r0, [r1]
- bl UpdateScrollVram
- ldr r2, _08019734 @ =gScreen
- ldrh r1, [r2]
- ldr r0, _08019738 @ =0x0000FEFF
- ands r0, r1
- strh r0, [r2]
- movs r0, #0x2c
- movs r1, #0
- movs r2, #0
- bl CreateObject
- adds r1, r0, #0
- cmp r1, #0
- beq _08019700
- ldrh r0, [r4, #0xa]
- ldrh r2, [r5, #0xa]
- adds r0, r0, r2
- strh r0, [r1, #0x2e]
- ldrh r0, [r4, #0xc]
- ldrh r5, [r5, #0xc]
- adds r0, r0, r5
- strh r0, [r1, #0x32]
-_08019700:
- movs r0, #0x11
- bl LoadGfxGroup
- bl FlushSprites
- bl DrawEntities
- bl CopyOAM
- movs r0, #4
- movs r1, #8
- bl SetFade
- ldr r1, _0801973C @ =gUnk_02018EB0
- ldrb r0, [r1]
- adds r0, #1
- strb r0, [r1]
- pop {r4, r5, pc}
- .align 2, 0
-_08019724: .4byte gUI
-_08019728: .4byte gUnk_080B4410
-_0801972C: .4byte gRoomControls
-_08019730: .4byte gUpdateVisibleTiles
-_08019734: .4byte gScreen
-_08019738: .4byte 0x0000FEFF
-_0801973C: .4byte gUnk_02018EB0
-
- thumb_func_start sub_08019740
-sub_08019740: @ 0x08019740
- push {lr}
- ldr r0, _0801975C @ =gFadeControl
- ldrb r0, [r0]
- cmp r0, #0
- bne _08019758
- ldr r0, _08019760 @ =gUnk_02018EB0
- ldrb r1, [r0]
- adds r1, #1
- strb r1, [r0]
- movs r1, #0xc3
- lsls r1, r1, #1
- strh r1, [r0, #4]
-_08019758:
- pop {pc}
- .align 2, 0
-_0801975C: .4byte gFadeControl
-_08019760: .4byte gUnk_02018EB0
-
- thumb_func_start sub_08019764
-sub_08019764: @ 0x08019764
- push {lr}
- bl FlushSprites
- bl UpdateEntities
- bl DrawEntities
- bl CopyOAM
- ldr r2, _08019798 @ =gUnk_02018EB0
- ldrh r0, [r2, #4]
- subs r0, #1
- strh r0, [r2, #4]
- lsls r0, r0, #0x10
- cmp r0, #0
- beq _08019790
- ldr r0, _0801979C @ =gInput
- ldrh r1, [r0, #2]
- movs r0, #0xa
- ands r0, r1
- cmp r0, #0
- beq _08019796
-_08019790:
- ldrb r0, [r2]
- adds r0, #1
- strb r0, [r2]
-_08019796:
- pop {pc}
- .align 2, 0
-_08019798: .4byte gUnk_02018EB0
-_0801979C: .4byte gInput
-
- thumb_func_start sub_080197A0
-sub_080197A0: @ 0x080197A0
- push {lr}
- movs r0, #2
- movs r1, #0xb
- bl MenuFadeIn
- pop {pc}
-
- thumb_func_start SetBGDefaults
-SetBGDefaults: @ 0x080197AC
- ldr r0, _080197C4 @ =gMapBottom
- ldr r1, _080197C8 @ =gBGAffSettings
- str r1, [r0]
- ldr r2, _080197CC @ =gUnk_080B77C0
- ldrh r0, [r2]
- strh r0, [r1]
- ldr r0, _080197D0 @ =gMapTop
- subs r1, #0xc
- str r1, [r0]
- ldrh r0, [r2, #2]
- strh r0, [r1]
- bx lr
- .align 2, 0
-_080197C4: .4byte gMapBottom
-_080197C8: .4byte gScreen + 0x20
-_080197CC: .4byte gUnk_080B77C0
-_080197D0: .4byte gMapTop
-
- thumb_func_start sub_080197D4
-sub_080197D4: @ 0x080197D4
- push {r4, r5, lr}
- adds r4, r0, #0
- movs r5, #0x80
- lsls r5, r5, #0x18
-_080197DC:
- ldr r3, [r4, #4]
- cmp r3, #0
- beq _08019824
- ldr r1, [r4]
- ldr r0, _08019808 @ =0x7FFFFFFF
- ands r1, r0
- ldr r0, _0801980C @ =gMapData
- adds r1, r1, r0
- ldr r2, [r4, #8]
- adds r0, r2, #0
- ands r0, r5
- cmp r0, #0
- beq _0801981A
- lsrs r0, r3, #0x18
- cmp r0, #6
- bne _08019810
- adds r0, r1, #0
- adds r1, r3, #0
- bl LZ77UnCompVram
- b _0801982E
- .align 2, 0
-_08019808: .4byte 0x7FFFFFFF
-_0801980C: .4byte gMapData
-_08019810:
- adds r0, r1, #0
- adds r1, r3, #0
- bl LZ77UnCompWram
- b _0801982E
-_0801981A:
- adds r0, r1, #0
- adds r1, r3, #0
- bl MemCopy
- b _0801982E
-_08019824:
- ldrh r0, [r4]
- bl LoadPaletteGroup
- bl sub_080533CC
-_0801982E:
- adds r4, #0xc
- adds r0, r4, #0
- subs r0, #0xc
- ldr r0, [r0]
- ands r0, r5
- cmp r0, #0
- bne _080197DC
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start UpdatePlayerCollision
-UpdatePlayerCollision: @ 0x08019840
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- ldr r0, _0801985C @ =gPlayerState
- adds r2, r0, #0
- adds r2, #0xa8
- ldrb r1, [r2]
- adds r7, r0, #0
- cmp r1, #0
- bne _08019860
- adds r0, #0xa9
- ldrb r0, [r0]
- b _08019862
- .align 2, 0
-_0801985C: .4byte gPlayerState
-_08019860:
- ldrb r0, [r2]
-_08019862:
- cmp r0, #0x12
- bne _0801986A
- bl _0801A2A4
-_0801986A:
- cmp r0, #0x12
- bgt _08019878
- cmp r0, #3
- bne _08019876
- bl _0801A2A4
-_08019876:
- b _08019880
-_08019878:
- cmp r0, #0x16
- bne _08019880
- bl _0801A2A4
-_08019880:
- ldrb r0, [r7, #0x1e]
- ldr r1, _08019898 @ =gPlayerEntity
- mov sb, r1
- cmp r0, #0
- bne _08019890
- ldrb r0, [r1, #0xc]
- cmp r0, #0x1d
- bne _0801989C
-_08019890:
- mov r2, sb
- ldrb r4, [r2, #0x15]
- b _0801989E
- .align 2, 0
-_08019898: .4byte gPlayerEntity
-_0801989C:
- ldrb r4, [r7, #0xd]
-_0801989E:
- movs r0, #0x83
- ands r0, r4
- cmp r0, #0
- bne _0801997C
- ldrb r0, [r7, #0xa]
- cmp r0, #0
- bne _0801997C
- lsrs r1, r4, #2
- mov r0, sb
- bl sub_0807BDB8
- adds r4, r0, #0
- cmp r4, #0xff
- beq _0801997C
- ldr r5, _08019960 @ =gRoomControls
- ldrb r1, [r5, #0xf]
- movs r0, #4
- ands r0, r1
- cmp r0, #0
- bne _0801997C
- lsls r1, r4, #2
- ldr r0, _08019964 @ =gUnk_080B4490
- adds r6, r1, r0
- mov r3, sb
- movs r1, #0x2e
- ldrsh r0, [r3, r1]
- movs r2, #0
- ldrsh r1, [r6, r2]
- adds r0, r0, r1
- ldrh r1, [r5, #6]
- subs r0, r0, r1
- asrs r0, r0, #4
- movs r3, #0x3f
- ands r0, r3
- mov r1, sb
- movs r2, #0x32
- ldrsh r1, [r1, r2]
- mov r8, r1
- movs r1, #2
- ldrsh r6, [r6, r1]
- mov r2, r8
- adds r1, r2, r6
- ldrh r2, [r5, #8]
- subs r1, r1, r2
- asrs r1, r1, #4
- ands r1, r3
- lsls r1, r1, #6
- orrs r0, r1
- mov r1, sb
- adds r1, #0x38
- ldrb r1, [r1]
- bl sub_080B1B44
- cmp r0, #0xff
- bne _0801997C
- ldr r0, [r7, #0x30]
- ldr r1, _08019968 @ =0x00010002
- ands r0, r1
- cmp r0, #0
- bne _0801995A
- ldrb r1, [r7, #0x1b]
- movs r0, #0x10
- ands r0, r1
- cmp r0, #0
- bne _0801995A
- mov r3, sb
- movs r1, #0x2e
- ldrsh r0, [r3, r1]
- ldrh r1, [r5, #6]
- subs r0, r0, r1
- movs r2, #0x32
- ldrsh r1, [r3, r2]
- ldrh r2, [r5, #8]
- subs r1, r1, r2
- adds r2, r4, #0
- movs r3, #5
- bl sub_080806BC
- cmp r0, #0
- bne _0801996C
- ldrb r0, [r7, #5]
- cmp r0, #0
- bne _0801995A
- ldrb r1, [r7, #0x1c]
- movs r0, #0xf
- ands r0, r1
- cmp r0, #0
- bne _0801995A
- mov r0, sb
- adds r1, r4, #0
- bl sub_0807BD14
- cmp r0, #0
- bne _0801996C
-_0801995A:
- movs r0, #3
- bl _0801A2A6
- .align 2, 0
-_08019960: .4byte gRoomControls
-_08019964: .4byte gUnk_080B4490
-_08019968: .4byte 0x00010002
-_0801996C:
- ldr r1, _08019978 @ =gPlayerEntity
- lsls r0, r4, #3
- strb r0, [r1, #0x15]
- movs r0, #0xf
- bl _0801A2A6
- .align 2, 0
-_08019978: .4byte gPlayerEntity
-_0801997C:
- ldr r4, _080199DC @ =gPlayerEntity
- adds r5, r4, #0
- adds r5, #0x38
- ldrb r0, [r5]
- bl GetLayerByIndex
- mov r8, r0
- ldrb r1, [r4, #0x14]
- movs r0, #6
- ands r0, r1
- lsls r0, r0, #1
- ldr r1, _080199E0 @ =gUnk_080B4468
- adds r6, r0, r1
- movs r3, #0x2e
- ldrsh r0, [r4, r3]
- movs r2, #0
- ldrsh r1, [r6, r2]
- adds r0, r0, r1
- ldr r3, _080199E4 @ =gRoomControls
- ldrh r1, [r3, #6]
- subs r0, r0, r1
- asrs r7, r0, #4
- movs r2, #0x3f
- ands r7, r2
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- movs r4, #2
- ldrsh r1, [r6, r4]
- adds r0, r0, r1
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r7, r0
- ldrb r1, [r5]
- adds r0, r7, #0
- bl GetTileType
- adds r6, r0, #0
- ldr r0, _080199E8 @ =0x00003FFF
- cmp r6, r0
- bhi _080199EC
- adds r0, r6, #0
- bl sub_080B1B54
- adds r4, r0, #0
- b _080199EE
- .align 2, 0
-_080199DC: .4byte gPlayerEntity
-_080199E0: .4byte gUnk_080B4468
-_080199E4: .4byte gRoomControls
-_080199E8: .4byte 0x00003FFF
-_080199EC:
- adds r4, r6, #0
-_080199EE:
- ldr r5, _08019A28 @ =gPlayerEntity
- ldrb r1, [r5, #0x14]
- adds r3, r1, #0
- ldr r0, _08019A2C @ =0x00004036
- mov sb, r5
- cmp r4, r0
- bne _080199FE
- b _08019F0C
-_080199FE:
- cmp r4, r0
- bhi _08019AE0
- cmp r4, #0x71
- bne _08019A08
- b _08019D94
-_08019A08:
- cmp r4, #0x71
- bhi _08019A4E
- cmp r4, #0x3a
- bne _08019A12
- b _08019CFC
-_08019A12:
- cmp r4, #0x3a
- bhi _08019A30
- cmp r4, #0x1a
- bne _08019A1C
- b _08019D48
-_08019A1C:
- cmp r4, #0x28
- bne _08019A22
- b _08019BB8
-_08019A22:
- bl _0801A2A4
- .align 2, 0
-_08019A28: .4byte gPlayerEntity
-_08019A2C: .4byte 0x00004036
-_08019A30:
- cmp r4, #0x5b
- bne _08019A36
- b _08019CFC
-_08019A36:
- cmp r4, #0x5b
- bhi _08019A44
- cmp r4, #0x3d
- bne _08019A40
- b _08019DD4
-_08019A40:
- bl _0801A2A4
-_08019A44:
- cmp r4, #0x70
- bne _08019A4A
- b _08019CC0
-_08019A4A:
- bl _0801A2A4
-_08019A4E:
- ldr r0, _08019A6C @ =0x0000400B
- cmp r4, r0
- bne _08019A56
- b _08019E44
-_08019A56:
- cmp r4, r0
- bhi _08019A70
- cmp r4, #0x72
- bne _08019A60
- b _08019FA8
-_08019A60:
- subs r0, #0xb
- cmp r4, r0
- bne _08019A68
- b _08019B78
-_08019A68:
- bl _0801A2A4
- .align 2, 0
-_08019A6C: .4byte 0x0000400B
-_08019A70:
- ldr r0, _08019AD4 @ =0x0000401B
- cmp r4, r0
- bne _08019A78
- b _08019C70
-_08019A78:
- cmp r4, r0
- bhs _08019A80
- bl _0801A2A4
-_08019A80:
- adds r0, #0x12
- cmp r4, r0
- bls _08019A8A
- bl _0801A2A4
-_08019A8A:
- subs r0, #2
- cmp r4, r0
- bhs _08019A94
- bl _0801A2A4
-_08019A94:
- mov r0, r8
- adds r1, r7, #0
- bl sub_0801A370
- cmp r0, #0
- bne _08019AA4
- bl _0801A2A4
-_08019AA4:
- lsls r0, r7, #1
- mov r2, r8
- adds r2, #4
- adds r2, r2, r0
- ldrb r1, [r5, #0x14]
- movs r0, #4
- ands r0, r1
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x1a
- ldr r3, _08019AD8 @ =0x00004030
- adds r1, r3, #0
- adds r0, r0, r1
- strh r0, [r2]
- ldr r2, _08019ADC @ =gPlayerState
- ldr r1, [r2, #0x30]
- movs r0, #0x80
- ands r1, r0
- adds r7, r2, #0
- mov sb, r5
- cmp r1, #0
- bne _08019AD0
- b _0801A09A
-_08019AD0:
- b _0801A094
- .align 2, 0
-_08019AD4: .4byte 0x0000401B
-_08019AD8: .4byte 0x00004030
-_08019ADC: .4byte gPlayerState
-_08019AE0:
- ldr r0, _08019B04 @ =0x00004053
- cmp r4, r0
- bne _08019AE8
- b _0801A13C
-_08019AE8:
- cmp r4, r0
- bhi _08019B24
- subs r0, #0xb
- cmp r4, r0
- bhi _08019B08
- subs r0, #8
- cmp r4, r0
- blo _08019AFA
- b _08019DD4
-_08019AFA:
- subs r0, #2
- cmp r4, r0
- bne _08019B02
- b _08019F50
-_08019B02:
- b _0801A2A4
- .align 2, 0
-_08019B04: .4byte 0x00004053
-_08019B08:
- ldr r0, _08019B20 @ =0x00004051
- cmp r4, r0
- bne _08019B10
- b _08019CFC
-_08019B10:
- cmp r4, r0
- bls _08019B16
- b _0801A120
-_08019B16:
- subs r0, #7
- cmp r4, r0
- bne _08019B1E
- b _0801A0BC
-_08019B1E:
- b _0801A2A4
- .align 2, 0
-_08019B20: .4byte 0x00004051
-_08019B24:
- ldr r0, _08019B48 @ =0x00004058
- cmp r4, r0
- bne _08019B2C
- b _0801A19A
-_08019B2C:
- cmp r4, r0
- bhi _08019B4C
- subs r0, #2
- cmp r4, r0
- bne _08019B38
- b _0801A15A
-_08019B38:
- cmp r4, r0
- bls _08019B3E
- b _0801A198
-_08019B3E:
- subs r0, #1
- cmp r4, r0
- bne _08019B46
- b _0801A158
-_08019B46:
- b _0801A2A4
- .align 2, 0
-_08019B48: .4byte 0x00004058
-_08019B4C:
- ldr r0, _08019B64 @ =0x0000405F
- cmp r4, r0
- bne _08019B54
- b _0801A1D4
-_08019B54:
- cmp r4, r0
- bhi _08019B68
- subs r0, #5
- cmp r4, r0
- bne _08019B60
- b _08019EC8
-_08019B60:
- b _0801A2A4
- .align 2, 0
-_08019B64: .4byte 0x0000405F
-_08019B68:
- ldr r0, _08019B74 @ =0x0000407D
- cmp r4, r0
- bne _08019B70
- b _0801A23C
-_08019B70:
- b _0801A2A4
- .align 2, 0
-_08019B74: .4byte 0x0000407D
-_08019B78:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #2
- bl sub_0801A458
- cmp r0, #0
- bne _08019B88
- b _0801A2A4
-_08019B88:
- lsls r0, r7, #1
- mov r1, r8
- adds r1, #4
- adds r1, r1, r0
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r4, _08019BB0 @ =0x00004001
- adds r0, r0, r4
- strh r0, [r1]
- ldr r2, _08019BB4 @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- adds r7, r2, #0
- cmp r0, #0
- bne _08019BAA
- b _0801A0F8
-_08019BAA:
- movs r0, #0xc0
- b _0801A0FA
- .align 2, 0
-_08019BB0: .4byte 0x00004001
-_08019BB4: .4byte gPlayerState
-_08019BB8:
- ldr r1, _08019C50 @ =gPlayerState
- ldr r0, [r1, #0x30]
- movs r2, #0x80
- ands r0, r2
- cmp r0, #0
- beq _08019BC6
- b _0801A2A4
-_08019BC6:
- ldrb r0, [r1, #0xa]
- cmp r0, #0
- beq _08019BCE
- b _0801A2A4
-_08019BCE:
- ldrb r0, [r5, #0x14]
- lsls r0, r0, #2
- ldrb r1, [r1, #0xd]
- cmp r0, r1
- beq _08019BDA
- b _0801A2A4
-_08019BDA:
- ldrb r1, [r5, #0x15]
- adds r0, r2, #0
- ands r0, r1
- cmp r0, #0
- beq _08019BE6
- b _0801A2A4
-_08019BE6:
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r7, #0
- bl sub_080B1B44
- cmp r0, #0xf
- beq _08019BF8
- b _0801A2A4
-_08019BF8:
- bl sub_08079778
- cmp r0, #0
- bne _08019C02
- b _0801A2A4
-_08019C02:
- ldrb r1, [r5, #0x14]
- movs r0, #6
- ands r0, r1
- lsls r0, r0, #1
- ldr r1, _08019C54 @ =gUnk_080B4478
- adds r6, r0, r1
- movs r1, #0x2e
- ldrsh r0, [r5, r1]
- ldr r4, _08019C58 @ =gRoomControls
- ldrh r1, [r4, #6]
- subs r0, r0, r1
- movs r2, #0
- ldrsh r1, [r6, r2]
- adds r0, r0, r1
- movs r3, #0x32
- ldrsh r1, [r5, r3]
- ldrh r2, [r4, #8]
- subs r1, r1, r2
- movs r3, #2
- ldrsh r2, [r6, r3]
- adds r1, r1, r2
- bl sub_08080734
- adds r2, r0, #0
- cmp r2, #0
- bne _08019C38
- b _0801A2A4
-_08019C38:
- ldrb r1, [r5, #0x14]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _08019C5C
- ldrh r0, [r2, #4]
- ldrh r4, [r4, #8]
- adds r0, r0, r4
- adds r0, #6
- strh r0, [r5, #0x32]
- b _08019C64
- .align 2, 0
-_08019C50: .4byte gPlayerState
-_08019C54: .4byte gUnk_080B4478
-_08019C58: .4byte gRoomControls
-_08019C5C:
- ldrh r0, [r2, #2]
- ldrh r4, [r4, #6]
- adds r0, r0, r4
- strh r0, [r5, #0x2e]
-_08019C64:
- movs r0, #4
- movs r1, #0
- movs r2, #1
- bl sub_08078AC0
- b _0801A2A4
-_08019C70:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #0xb
- bl sub_0801A2B0
- cmp r0, #0
- bne _08019C80
- b _0801A2A4
-_08019C80:
- lsls r0, r7, #1
- mov r1, r8
- adds r1, #4
- adds r1, r1, r0
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r4, _08019CB8 @ =0x0000401C
- adds r0, r0, r4
- movs r3, #0
- strh r0, [r1]
- ldr r1, _08019CBC @ =gPlayerState
- movs r0, #0xa0
- strb r0, [r1, #6]
- movs r0, #5
- strb r0, [r1, #0xc]
- ldr r0, [r1, #0x30]
- movs r2, #1
- orrs r0, r2
- str r0, [r1, #0x30]
- strh r3, [r5, #0x2c]
- strh r3, [r5, #0x30]
- ldrb r0, [r5, #0x14]
- lsls r0, r0, #2
- strb r0, [r5, #0x15]
- strb r2, [r5, #0xa]
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_08019CB8: .4byte 0x0000401C
-_08019CBC: .4byte gPlayerState
-_08019CC0:
- ldr r0, _08019CF8 @ =gPlayerState
- adds r2, r0, #0
- adds r2, #0x35
- ldrb r1, [r2]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08019CD2
- b _0801A2A4
-_08019CD2:
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _08019CE2
- b _0801A2A4
-_08019CE2:
- ldrb r0, [r2]
- lsls r0, r0, #2
- adds r1, r6, #0
- adds r2, r7, #0
- bl sub_0801A9F0
- cmp r0, #0
- bne _08019CF4
- b _0801A2A4
-_08019CF4:
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_08019CF8: .4byte gPlayerState
-_08019CFC:
- ldr r2, _08019D40 @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08019D0A
- b _0801A2A4
-_08019D0A:
- mov r1, sb
- ldrb r0, [r1, #0x14]
- cmp r0, #0
- beq _08019D14
- b _0801A2A4
-_08019D14:
- ldr r0, _08019D44 @ =gUnk_0200AF00
- adds r0, #0x2d
- movs r1, #4
- strb r1, [r0]
- adds r0, r2, #0
- adds r0, #0x92
- ldrh r1, [r0]
- movs r0, #0xc0
- ands r0, r1
- cmp r0, #0
- bne _08019D2C
- b _0801A2A4
-_08019D2C:
- movs r0, #1
- strb r0, [r2, #0x1a]
- mov r0, sb
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r7, #0
- bl sub_080A7CFC
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_08019D40: .4byte gPlayerState
-_08019D44: .4byte gUnk_0200AF00
-_08019D48:
- cmp r3, #0
- beq _08019D4E
- b _0801A2A4
-_08019D4E:
- ldr r2, _08019D8C @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x81
- lsls r1, r1, #7
- ands r0, r1
- cmp r0, #0
- beq _08019D5E
- b _0801A2A4
-_08019D5E:
- ldr r0, _08019D90 @ =gUnk_0200AF00
- adds r0, #0x2d
- movs r1, #6
- strb r1, [r0]
- adds r0, r2, #0
- adds r0, #0x92
- ldrh r1, [r0]
- movs r0, #0x88
- ands r0, r1
- cmp r0, #0
- bne _08019D76
- b _0801A2A4
-_08019D76:
- movs r0, #1
- strb r0, [r2, #0x1a]
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r7, #0
- bl sub_080A7C8C
- movs r0, #2
- b _0801A2A6
- .align 2, 0
-_08019D8C: .4byte gPlayerState
-_08019D90: .4byte gUnk_0200AF00
-_08019D94:
- bl HasDungeonMap
- cmp r0, #0
- bne _08019D9E
- b _0801A2A4
-_08019D9E:
- ldr r0, _08019DCC @ =gUnk_0200AF00
- adds r0, #0x2d
- movs r1, #6
- strb r1, [r0]
- ldr r2, _08019DD0 @ =gPlayerState
- adds r0, r2, #0
- adds r0, #0x92
- ldrh r1, [r0]
- movs r0, #0x88
- ands r0, r1
- cmp r0, #0
- bne _08019DB8
- b _0801A2A4
-_08019DB8:
- movs r0, #1
- strb r0, [r2, #0x1a]
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r7, #0
- bl sub_0804B388
- movs r0, #2
- b _0801A2A6
- .align 2, 0
-_08019DCC: .4byte gUnk_0200AF00
-_08019DD0: .4byte gPlayerState
-_08019DD4:
- ldr r4, _08019E3C @ =gPlayerState
- ldr r0, [r4, #0x30]
- movs r1, #0x80
- lsls r1, r1, #7
- ands r0, r1
- cmp r0, #0
- beq _08019DE4
- b _0801A2A4
-_08019DE4:
- bl sub_08079778
- cmp r0, #0
- bne _08019DEE
- b _0801A2A4
-_08019DEE:
-.ifdef USA
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- beq _08019DF6
- b _0801A2A4
-.else
-.ifdef DEMO_USA
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- beq _08019DF6
- b _0801A2A4
-.else
-.ifdef DEMO_JP @ TODO deduplicate
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- beq _08019DF6
- b _0801A2A4
-.endif
-.endif
-.endif
-_08019DF6:
- ldr r2, _08019E40 @ =gPlayerEntity
- ldrb r0, [r2, #0x14]
- lsls r0, r0, #2
- ldrb r3, [r4, #0xd]
- cmp r0, r3
- beq _08019E04
- b _0801A2A4
-_08019E04:
- ldrb r1, [r2, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08019E10
- b _0801A2A4
-_08019E10:
- ldrb r0, [r2, #0xf]
- cmp r0, #5
- bhi _08019E18
- b _0801A2A4
-_08019E18:
- movs r0, #0x81
- strb r0, [r4, #2]
- ldr r0, [r4, #0x30]
- movs r1, #0x20
- orrs r0, r1
- str r0, [r4, #0x30]
- movs r0, #0x15
- strb r0, [r4, #0xc]
- movs r0, #0x80
- lsls r0, r0, #0xa
- str r0, [r2, #0x20]
- ldrb r1, [r2, #0x10]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r2, #0x10]
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_08019E3C: .4byte gPlayerState
-_08019E40: .4byte gPlayerEntity
-_08019E44:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #8
- bl sub_0801A2B0
- cmp r0, #0
- bne _08019E54
- b _0801A2A4
-_08019E54:
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r0, [r0]
- lsls r1, r7, #1
- cmp r0, #3
- bne _08019E84
- ldr r0, _08019E7C @ =gMapTop
- adds r0, #4
- adds r2, r1, r0
- ldrh r0, [r2]
- cmp r0, r4
- bne _08019E84
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r4, _08019E80 @ =0x0000400C
- adds r0, r0, r4
- strh r0, [r2]
- mov sb, r5
- b _08019E98
- .align 2, 0
-_08019E7C: .4byte gMapTop
-_08019E80: .4byte 0x0000400C
-_08019E84:
- mov r0, r8
- adds r0, #4
- adds r0, r0, r1
- ldr r2, _08019EBC @ =gPlayerEntity
- ldrb r1, [r2, #0x14]
- lsrs r1, r1, #1
- ldr r3, _08019EC0 @ =0x0000400C
- adds r1, r1, r3
- strh r1, [r0]
- mov sb, r2
-_08019E98:
- ldr r2, _08019EC4 @ =gPlayerState
- movs r3, #0
- movs r0, #0xa0
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- mov r4, sb
- strh r3, [r4, #0x2c]
- strh r3, [r4, #0x30]
- ldrb r0, [r4, #0x14]
- lsls r0, r0, #2
- strb r0, [r4, #0x15]
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_08019EBC: .4byte gPlayerEntity
-_08019EC0: .4byte 0x0000400C
-_08019EC4: .4byte gPlayerState
-_08019EC8:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #2
- bl sub_0801A2B0
- cmp r0, #0
- bne _08019ED8
- b _0801A2A4
-_08019ED8:
- lsls r0, r7, #1
- mov r1, r8
- adds r1, #4
- adds r1, r1, r0
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r2, _08019F04 @ =0x0000405B
- adds r0, r0, r2
- movs r3, #0
- strh r0, [r1]
- ldr r2, _08019F08 @ =gPlayerState
- movs r0, #0x98
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- strh r3, [r5, #0x2c]
- strh r3, [r5, #0x30]
- b _0801A228
- .align 2, 0
-_08019F04: .4byte 0x0000405B
-_08019F08: .4byte gPlayerState
-_08019F0C:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #0xb
- bl sub_0801A2B0
- cmp r0, #0
- bne _08019F1C
- b _0801A2A4
-_08019F1C:
- lsls r0, r7, #1
- mov r1, r8
- adds r1, #4
- adds r1, r1, r0
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r3, _08019F48 @ =0x00004037
- adds r0, r0, r3
- movs r3, #0
- strh r0, [r1]
- ldr r2, _08019F4C @ =gPlayerState
- movs r0, #0xa0
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- strh r3, [r5, #0x2c]
- strh r3, [r5, #0x30]
- b _0801A228
- .align 2, 0
-_08019F48: .4byte 0x00004037
-_08019F4C: .4byte gPlayerState
-_08019F50:
- cmp r3, #0
- beq _08019F56
- b _0801A2A4
-_08019F56:
- ldr r2, _08019FA0 @ =gPlayerState
- adds r0, r2, #0
- adds r0, #0x35
- ldrb r0, [r0]
- ldrb r1, [r2, #0xd]
- orrs r0, r1
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08019F6C
- b _0801A2A4
-_08019F6C:
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- bne _08019F7C
- b _0801A2A4
-_08019F7C:
- lsls r1, r7, #1
- mov r0, r8
- adds r0, #4
- adds r0, r0, r1
- ldr r1, _08019FA4 @ =0x0000403F
- strh r1, [r0]
- movs r0, #0x82
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- strh r3, [r5, #0x2c]
- strh r3, [r5, #0x30]
- b _0801A228
- .align 2, 0
-_08019FA0: .4byte gPlayerState
-_08019FA4: .4byte 0x0000403F
-_08019FA8:
- ldr r0, _0801A07C @ =gPlayerState
- adds r0, #0x35
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08019FB8
- b _0801A2A4
-_08019FB8:
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _08019FC8
- b _0801A2A4
-_08019FC8:
- adds r0, r5, #0
- movs r1, #1
- bl sub_0801A570
- adds r7, r0, #0
- ldr r0, _0801A080 @ =0x0000FFFF
- cmp r7, r0
- bne _08019FDA
- b _0801A2A4
-_08019FDA:
- lsrs r0, r7, #0xc
- subs r0, #1
- mov r8, r0
- ldr r0, _0801A084 @ =0x00000FFF
- ands r7, r0
- movs r4, #0
- movs r6, #0
- ldr r5, _0801A088 @ =gPlayerClones
- mov sb, r5
-_08019FEC:
- mov r1, sb
- ldr r0, [r1]
- movs r1, #1
- lsls r1, r4
- ldr r0, [r0, #0x6c]
- ands r0, r1
- cmp r0, #0
- beq _0801A00A
- ldr r0, [r5]
- movs r1, #0
- bl sub_0801A570
- cmp r0, r7
- bne _0801A00A
- adds r6, #1
-_0801A00A:
- adds r5, #4
- adds r4, #1
- cmp r4, #2
- bls _08019FEC
- cmp r6, r8
- bhs _0801A018
- b _0801A2A4
-_0801A018:
- movs r0, #7
- mov r1, r8
- movs r2, #0
- bl CreateObject
- adds r5, r0, #0
- cmp r5, #0
- bne _0801A02A
- b _0801A2A4
-_0801A02A:
- ldr r3, _0801A08C @ =gPlayerEntity
- ldrb r0, [r3, #0x14]
- lsls r0, r0, #2
- movs r4, #0
- strb r0, [r5, #0x15]
- movs r1, #0x3f
- adds r0, r7, #0
- ands r0, r1
- lsls r0, r0, #4
- adds r0, #8
- ldr r2, _0801A090 @ =gRoomControls
- ldrh r1, [r2, #6]
- adds r1, r1, r0
- strh r1, [r5, #0x2e]
- movs r0, #0xfc
- lsls r0, r0, #4
- ands r0, r7
- lsrs r0, r0, #2
- adds r0, #8
- ldrh r1, [r2, #8]
- adds r1, r1, r0
- strh r1, [r5, #0x32]
- adds r0, r3, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r5, #0
- adds r0, #0x38
- strb r1, [r0]
- ldr r2, _0801A07C @ =gPlayerState
- movs r0, #0xa0
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- strh r4, [r3, #0x2c]
- strh r4, [r3, #0x30]
- ldrb r0, [r5, #0x15]
- b _0801A0B6
- .align 2, 0
-_0801A07C: .4byte gPlayerState
-_0801A080: .4byte 0x0000FFFF
-_0801A084: .4byte 0x00000FFF
-_0801A088: .4byte gPlayerClones
-_0801A08C: .4byte gPlayerEntity
-_0801A090: .4byte gRoomControls
-_0801A094:
- movs r0, #0xa0
- strb r0, [r2, #6]
- b _0801A09E
-_0801A09A:
- movs r0, #0x90
- strb r0, [r7, #6]
-_0801A09E:
- movs r2, #0
- movs r0, #5
- strb r0, [r7, #0xc]
- ldr r0, [r7, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r7, #0x30]
- mov r3, sb
- strh r2, [r3, #0x2c]
- strh r2, [r3, #0x30]
- ldrb r0, [r3, #0x14]
- lsls r0, r0, #2
-_0801A0B6:
- strb r0, [r3, #0x15]
- movs r0, #1
- b _0801A2A6
-_0801A0BC:
- mov r0, r8
- adds r1, r7, #0
- movs r2, #8
- bl sub_0801A458
- cmp r0, #0
- bne _0801A0CC
- b _0801A2A4
-_0801A0CC:
- lsls r0, r7, #1
- mov r1, r8
- adds r1, #4
- adds r1, r1, r0
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- ldr r4, _0801A0F0 @ =0x0000404B
- adds r0, r0, r4
- strh r0, [r1]
- ldr r2, _0801A0F4 @ =gPlayerState
- ldr r0, [r2, #0x30]
- movs r1, #0x80
- ands r0, r1
- adds r7, r2, #0
- cmp r0, #0
- beq _0801A0F8
- movs r0, #0xc0
- b _0801A0FA
- .align 2, 0
-_0801A0F0: .4byte 0x0000404B
-_0801A0F4: .4byte gPlayerState
-_0801A0F8:
- movs r0, #0xa0
-_0801A0FA:
- strb r0, [r7, #6]
- movs r2, #0
- movs r0, #5
- strb r0, [r7, #0xc]
- ldr r0, [r7, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r7, #0x30]
- ldr r1, _0801A11C @ =gPlayerEntity
- strh r2, [r1, #0x2c]
- strh r2, [r1, #0x30]
- ldrb r0, [r1, #0x14]
- lsls r0, r0, #2
- strb r0, [r1, #0x15]
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_0801A11C: .4byte gPlayerEntity
-_0801A120:
- ldr r0, _0801A134 @ =gPlayerState
- adds r0, #0x35
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801A12C
- b _0801A2A4
-_0801A12C:
- ldr r0, _0801A138 @ =0x00004054
- adds r1, r5, #0
- b _0801A28C
- .align 2, 0
-_0801A134: .4byte gPlayerState
-_0801A138: .4byte 0x00004054
-_0801A13C:
- ldr r0, _0801A150 @ =gPlayerState
- adds r0, #0x35
- ldrb r0, [r0]
- cmp r0, #6
- beq _0801A148
- b _0801A2A4
-_0801A148:
- ldr r0, _0801A154 @ =0x00004054
- adds r1, r5, #0
- b _0801A28C
- .align 2, 0
-_0801A150: .4byte gPlayerState
-_0801A154: .4byte 0x00004054
-_0801A158:
- subs r7, #1
-_0801A15A:
- ldr r0, _0801A190 @ =gPlayerState
- adds r0, #0x35
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801A166
- b _0801A2A4
-_0801A166:
- mov r0, sb
- ldrh r1, [r0, #0x32]
- movs r0, #0xf
- ands r0, r1
- cmp r0, #9
- bgt _0801A174
- b _0801A2A4
-_0801A174:
- movs r4, #0
- ldr r5, _0801A194 @ =gPlayerClones
-_0801A178:
- ldr r0, [r5]
- movs r1, #0
- bl sub_0801A8D0
- cmp r0, r7
- bne _0801A186
- b _0801A288
-_0801A186:
- adds r5, #4
- adds r4, #1
- cmp r4, #2
- bls _0801A178
- b _0801A2A4
- .align 2, 0
-_0801A190: .4byte gPlayerState
-_0801A194: .4byte gPlayerClones
-_0801A198:
- subs r7, #0x40
-_0801A19A:
- ldr r0, _0801A1CC @ =gPlayerState
- adds r0, #0x35
- ldrb r0, [r0]
- cmp r0, #6
- beq _0801A1A6
- b _0801A2A4
-_0801A1A6:
- mov r2, sb
- ldrh r1, [r2, #0x2e]
- movs r0, #0xf
- ands r0, r1
- cmp r0, #9
- ble _0801A2A4
- movs r4, #0
- ldr r5, _0801A1D0 @ =gPlayerClones
-_0801A1B6:
- ldr r0, [r5]
- movs r1, #6
- bl sub_0801A8D0
- cmp r0, r7
- beq _0801A288
- adds r5, #4
- adds r4, #1
- cmp r4, #2
- bls _0801A1B6
- b _0801A2A4
- .align 2, 0
-_0801A1CC: .4byte gPlayerState
-_0801A1D0: .4byte gPlayerClones
-_0801A1D4:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _0801A2A4
- ldr r6, _0801A234 @ =gPlayerState
- adds r0, r6, #0
- adds r0, #0x35
- ldrb r0, [r0]
- ldrb r1, [r6, #0xd]
- orrs r0, r1
- movs r1, #0x80
- ands r0, r1
- lsls r0, r0, #0x18
- lsrs r4, r0, #0x18
- cmp r4, #0
- bne _0801A2A4
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r3, #1
- mov r8, r3
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- beq _0801A2A4
- ldr r0, _0801A238 @ =0x00004074
- adds r1, r5, #0
- adds r1, #0x38
- ldrb r2, [r1]
- adds r1, r7, #0
- bl SetTile
- movs r0, #0xa0
- strb r0, [r6, #6]
- movs r0, #5
- strb r0, [r6, #0xc]
- ldr r0, [r6, #0x30]
- mov r1, r8
- orrs r0, r1
- str r0, [r6, #0x30]
- strh r4, [r5, #0x2c]
- strh r4, [r5, #0x30]
-_0801A228:
- ldrb r0, [r5, #0x14]
- lsls r0, r0, #2
- strb r0, [r5, #0x15]
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_0801A234: .4byte gPlayerState
-_0801A238: .4byte 0x00004074
-_0801A23C:
- cmp r3, #4
- bne _0801A2A4
- ldr r1, _0801A280 @ =gPlayerState
- adds r0, r1, #0
- adds r0, #0x35
- ldrb r0, [r0]
- ldrb r1, [r1, #0xd]
- orrs r0, r1
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0801A2A4
- adds r0, r5, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0801A2A4
- ldr r0, _0801A284 @ =0x00004074
- adds r4, r5, #0
- adds r4, #0x38
- ldrb r2, [r4]
- adds r1, r7, #0
- bl SetTile
- ldrb r2, [r4]
- movs r0, #0xd
- adds r1, r7, #0
- bl sub_080001D0
- movs r0, #1
- b _0801A2A6
- .align 2, 0
-_0801A280: .4byte gPlayerState
-_0801A284: .4byte 0x00004074
-_0801A288:
- ldr r0, _0801A29C @ =0x00004059
- ldr r1, _0801A2A0 @ =gPlayerEntity
-_0801A28C:
- adds r1, #0x38
- ldrb r2, [r1]
- adds r1, r7, #0
- bl SetTile
- movs r0, #4
- b _0801A2A6
- .align 2, 0
-_0801A29C: .4byte 0x00004059
-_0801A2A0: .4byte gPlayerEntity
-_0801A2A4:
- movs r0, #0
-_0801A2A6:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_0801A2B0
-sub_0801A2B0: @ 0x0801A2B0
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- ldr r1, _0801A31C @ =gUnk_080B4488
- ldr r2, _0801A320 @ =gPlayerEntity
- ldrb r0, [r2, #0x14]
- lsrs r0, r0, #1
- lsls r0, r0, #1
- adds r0, r0, r1
- ldrh r3, [r0]
- ldr r1, _0801A324 @ =gPlayerState
- adds r0, r1, #0
- adds r0, #0x35
- ldrb r0, [r0]
- ldrb r1, [r1, #0xd]
- orrs r0, r1
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0801A36C
- adds r0, r2, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0801A36C
- adds r0, r4, r3
- lsls r0, r0, #0x10
- lsrs r4, r0, #0x10
- adds r0, r2, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- bl sub_080B1B54
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- adds r1, r0, #0
- cmp r0, #0x52
- beq _0801A36C
- cmp r0, #0x52
- bgt _0801A328
- cmp r0, #0x26
- blt _0801A32C
- cmp r0, #0x27
- ble _0801A36C
- cmp r0, #0x29
- beq _0801A36C
- b _0801A32C
- .align 2, 0
-_0801A31C: .4byte gUnk_080B4488
-_0801A320: .4byte gPlayerEntity
-_0801A324: .4byte gPlayerState
-_0801A328:
- cmp r1, #0x74
- beq _0801A36C
-_0801A32C:
- ldr r0, _0801A364 @ =0x00002004
- adds r3, r5, r0
- adds r0, r3, r4
- ldrb r0, [r0]
- cmp r0, #0x28
- beq _0801A36C
- movs r1, #0x3f
- ands r1, r4
- ldr r0, _0801A368 @ =gRoomControls
- lsls r1, r1, #4
- ldrh r2, [r0, #6]
- adds r1, r1, r2
- lsrs r2, r4, #6
- lsls r2, r2, #4
- ldrh r0, [r0, #8]
- adds r2, r2, r0
- lsls r1, r1, #0x10
- asrs r1, r1, #0x10
- lsls r2, r2, #0x10
- asrs r2, r2, #0x10
- adds r0, r3, #0
- adds r3, r6, #0
- bl IsTileCollision
- cmp r0, #0
- bne _0801A36C
- movs r0, #1
- b _0801A36E
- .align 2, 0
-_0801A364: .4byte 0x00002004
-_0801A368: .4byte gRoomControls
-_0801A36C:
- movs r0, #0
-_0801A36E:
- pop {r4, r5, r6, pc}
-
- thumb_func_start sub_0801A370
-sub_0801A370: @ 0x0801A370
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- adds r4, r1, #0
- ldr r5, _0801A3C8 @ =gPlayerEntity
- ldrb r1, [r5, #0x14]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _0801A44E
- bl sub_0801A4F8
- cmp r0, #0
- beq _0801A44E
- movs r0, #2
- bl GetLayerByIndex
- adds r7, r0, #0
- ldr r1, _0801A3CC @ =gUnk_080B4488
- ldrb r0, [r5, #0x14]
- lsrs r0, r0, #1
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r6, [r0, r1]
- adds r4, r4, r6
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- adds r1, r0, #0
- ldr r0, _0801A3D0 @ =0x0000402B
- cmp r1, r0
- beq _0801A3D4
- cmp r1, r0
- blo _0801A3D6
- adds r0, #4
- cmp r1, r0
- bhi _0801A3D6
-_0801A3C4:
- movs r0, #1
- b _0801A450
- .align 2, 0
-_0801A3C8: .4byte gPlayerEntity
-_0801A3CC: .4byte gUnk_080B4488
-_0801A3D0: .4byte 0x0000402B
-_0801A3D4:
- adds r4, r4, r6
-_0801A3D6:
- adds r0, r7, r4
- ldr r1, _0801A40C @ =0x00001F84
- adds r0, r0, r1
- ldrb r0, [r0]
- cmp r0, #0x46
- beq _0801A44E
- ldr r0, _0801A410 @ =gPlayerEntity
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- bl sub_080B1B54
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #0x52
- beq _0801A44E
- cmp r0, #0x52
- bgt _0801A414
- cmp r0, #0x26
- blt _0801A418
- cmp r0, #0x27
- ble _0801A44E
- cmp r0, #0x29
- beq _0801A44E
- b _0801A418
- .align 2, 0
-_0801A40C: .4byte 0x00001F84
-_0801A410: .4byte gPlayerEntity
-_0801A414:
- cmp r0, #0x74
- beq _0801A44E
-_0801A418:
- ldr r0, _0801A434 @ =0x00002004
- add r0, r8
- adds r0, r0, r4
- ldrb r0, [r0]
- adds r1, r0, #0
- cmp r0, #0xa
- beq _0801A446
- cmp r0, #0xa
- bgt _0801A438
- cmp r0, #0
- beq _0801A3C4
- cmp r0, #5
- beq _0801A440
- b _0801A44E
- .align 2, 0
-_0801A434: .4byte 0x00002004
-_0801A438:
- cmp r1, #0x44
- beq _0801A446
- cmp r1, #0x45
- bne _0801A44E
-_0801A440:
- cmp r6, #1
- bne _0801A44E
- b _0801A3C4
-_0801A446:
- movs r0, #1
- rsbs r0, r0, #0
- cmp r6, r0
- beq _0801A3C4
-_0801A44E:
- movs r0, #0
-_0801A450:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_0801A458
-sub_0801A458: @ 0x0801A458
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r7, r0, #0
- adds r5, r1, #0
- mov r8, r2
- ldr r0, _0801A4A4 @ =gUnk_080B4488
- ldr r6, _0801A4A8 @ =gPlayerEntity
- ldrb r1, [r6, #0x14]
- lsrs r1, r1, #1
- lsls r1, r1, #1
- adds r1, r1, r0
- movs r0, #0
- ldrsh r4, [r1, r0]
- bl sub_0801A4F8
- cmp r0, #0
- beq _0801A4F0
- adds r4, r5, r4
- adds r0, r6, #0
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- bl sub_080B1B54
- cmp r0, #0x52
- beq _0801A4F0
- cmp r0, #0x52
- bhi _0801A4AC
- cmp r0, #0x26
- blo _0801A4B0
- cmp r0, #0x27
- bls _0801A4F0
- cmp r0, #0x29
- beq _0801A4F0
- b _0801A4B0
- .align 2, 0
-_0801A4A4: .4byte gUnk_080B4488
-_0801A4A8: .4byte gPlayerEntity
-_0801A4AC:
- cmp r0, #0x74
- beq _0801A4F0
-_0801A4B0:
- ldr r2, _0801A4E8 @ =0x00002004
- adds r3, r7, r2
- adds r5, r3, r4
- ldrb r0, [r5]
- cmp r0, #0x28
- beq _0801A4F0
- movs r1, #0x3f
- ands r1, r4
- ldr r0, _0801A4EC @ =gRoomControls
- lsls r1, r1, #4
- ldrh r2, [r0, #6]
- adds r1, r1, r2
- lsrs r2, r4, #6
- lsls r2, r2, #4
- ldrh r0, [r0, #8]
- adds r2, r2, r0
- adds r0, r3, #0
- mov r3, r8
- bl IsTileCollision
- cmp r0, #0
- bne _0801A4F0
- ldrb r0, [r5]
- subs r0, #1
- cmp r0, #0xe
- bls _0801A4F0
- movs r0, #1
- b _0801A4F2
- .align 2, 0
-_0801A4E8: .4byte 0x00002004
-_0801A4EC: .4byte gRoomControls
-_0801A4F0:
- movs r0, #0
-_0801A4F2:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0801A4F8
-sub_0801A4F8: @ 0x0801A4F8
- push {r4, r5, lr}
- ldr r4, _0801A538 @ =gPlayerState
- ldr r0, [r4, #0x30]
- movs r5, #0x80
- ands r0, r5
- cmp r0, #0
- beq _0801A544
- movs r0, #0x45
- bl GetInventoryValue
- cmp r0, #1
- bne _0801A564
- ldrb r1, [r4, #0xd]
- adds r0, r5, #0
- ands r0, r1
- cmp r0, #0
- bne _0801A564
- ldr r2, _0801A53C @ =gPlayerEntity
- ldrb r0, [r2, #0x15]
- cmp r1, r0
- bne _0801A564
- ldrb r0, [r2, #0x15]
- adds r0, #4
- movs r1, #0x18
- ands r0, r1
- ldr r1, _0801A540 @ =gUnk_080B44A0
- lsrs r0, r0, #2
- adds r0, r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2, #0x2a]
- b _0801A55E
- .align 2, 0
-_0801A538: .4byte gPlayerState
-_0801A53C: .4byte gPlayerEntity
-_0801A540: .4byte gUnk_080B44A0
-_0801A544:
- adds r0, r4, #0
- adds r0, #0x35
- ldrb r0, [r0]
- ldrb r1, [r4, #0xd]
- orrs r0, r1
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0801A564
- ldr r0, _0801A568 @ =gPlayerEntity
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
-_0801A55E:
- ands r0, r1
- cmp r0, #0
- bne _0801A56C
-_0801A564:
- movs r0, #0
- b _0801A56E
- .align 2, 0
-_0801A568: .4byte gPlayerEntity
-_0801A56C:
- movs r0, #1
-_0801A56E:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0801A570
-sub_0801A570: @ 0x0801A570
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- adds r6, r0, #0
- mov sl, r1
- cmp r6, #0
- bne _0801A58C
- ldr r0, _0801A588 @ =0x0000FFFF
- b _0801A8C2
- .align 2, 0
-_0801A588: .4byte 0x0000FFFF
-_0801A58C:
- adds r4, r6, #0
- adds r4, #0x38
- ldrb r0, [r4]
- bl GetLayerByIndex
- mov r8, r0
- ldr r0, _0801A668 @ =0x00005004
- add r0, r8
- mov ip, r0
- movs r5, #4
- movs r7, #2
- ldrb r0, [r6, #0x14]
- lsrs r0, r0, #1
- mov sb, r4
- cmp r0, #1
- beq _0801A678
- cmp r0, #1
- ble _0801A5BC
- cmp r0, #2
- bne _0801A5B6
- b _0801A73C
-_0801A5B6:
- cmp r0, #3
- bne _0801A5BC
- b _0801A7FC
-_0801A5BC:
- movs r1, #0x2e
- ldrsh r0, [r6, r1]
- ldr r2, _0801A66C @ =gRoomControls
- ldrh r1, [r2, #6]
- subs r0, r0, r1
- asrs r4, r0, #4
- movs r3, #0x3f
- ands r4, r3
- movs r1, #0x32
- ldrsh r0, [r6, r1]
- ldrh r1, [r2, #8]
- adds r1, #0xa
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r4, r0
- mov r2, r8
- adds r2, #4
- movs r3, #0xdc
- lsls r3, r3, #2
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A5EA:
- ldrh r0, [r1]
- lsls r0, r0, #1
- add r0, ip
- ldrh r0, [r0]
- cmp r0, r3
- beq _0801A600
- subs r1, #2
- subs r4, #1
- subs r5, #1
- cmp r5, #0
- bne _0801A5EA
-_0801A600:
- subs r4, #0x40
- movs r3, #0xdd
- lsls r3, r3, #2
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A60A:
- ldrh r0, [r1]
- lsls r0, r0, #1
- add r0, ip
- ldrh r0, [r0]
- cmp r0, r3
- bne _0801A620
- adds r7, #1
- subs r1, #0x80
- subs r4, #0x40
- cmp r7, #3
- bls _0801A60A
-_0801A620:
- mov r2, sl
- cmp r2, #0
- bne _0801A628
- b _0801A8C0
-_0801A628:
- mov r0, sb
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- adds r5, r0, #0
- ldr r1, _0801A670 @ =0xFFFFFC97
- adds r0, r5, r1
- cmp r0, #1
- bls _0801A63E
- b _0801A8B4
-_0801A63E:
- ldr r2, _0801A674 @ =0x00001FC4
- adds r0, r4, r2
- mov r2, r8
- adds r1, r2, r0
- movs r5, #0
- cmp r5, r7
- blo _0801A64E
- b _0801A8B6
-_0801A64E:
- ldrb r0, [r1]
- cmp r0, #0
- beq _0801A656
- b _0801A8B4
-_0801A656:
- adds r5, #1
- cmp r5, r7
- blo _0801A65E
- b _0801A8B6
-_0801A65E:
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801A656
- b _0801A8B4
- .align 2, 0
-_0801A668: .4byte 0x00005004
-_0801A66C: .4byte gRoomControls
-_0801A670: .4byte 0xFFFFFC97
-_0801A674: .4byte 0x00001FC4
-_0801A678:
- movs r0, #0x2e
- ldrsh r1, [r6, r0]
- ldr r3, _0801A730 @ =gRoomControls
- ldrh r0, [r3, #6]
- subs r0, #0xa
- subs r1, r1, r0
- asrs r4, r1, #4
- movs r2, #0x3f
- ands r4, r2
- movs r1, #0x32
- ldrsh r0, [r6, r1]
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r4, r0
- mov r2, r8
- adds r2, #4
- mov r3, ip
- movs r6, #0xdc
- lsls r6, r6, #2
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A6A8:
- ldrh r0, [r1]
- lsls r0, r0, #1
- adds r0, r3, r0
- ldrh r0, [r0]
- cmp r0, r6
- beq _0801A6BE
- adds r1, #0x80
- adds r4, #0x40
- subs r5, #1
- cmp r5, #0
- bne _0801A6A8
-_0801A6BE:
- subs r4, #0x40
- movs r3, #0xdd
- lsls r3, r3, #2
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A6C8:
- ldrh r0, [r1]
- lsls r0, r0, #1
- add r0, ip
- ldrh r0, [r0]
- cmp r0, r3
- bne _0801A6DE
- adds r7, #1
- subs r1, #0x80
- subs r4, #0x40
- cmp r7, #3
- bls _0801A6C8
-_0801A6DE:
- mov r2, sl
- cmp r2, #0
- bne _0801A6E6
- b _0801A8C0
-_0801A6E6:
- mov r0, sb
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- adds r5, r0, #0
- ldr r0, _0801A734 @ =0x00000369
- cmp r5, r0
- beq _0801A700
- adds r0, #4
- cmp r5, r0
- beq _0801A700
- b _0801A8B4
-_0801A700:
- adds r0, r4, r7
- ldr r1, _0801A738 @ =0x00002004
- adds r0, r0, r1
- mov r2, r8
- adds r1, r2, r0
- movs r5, #0
- cmp r5, r7
- blo _0801A712
- b _0801A8B6
-_0801A712:
- ldrb r0, [r1]
- cmp r0, #0
- beq _0801A71A
- b _0801A8B4
-_0801A71A:
- adds r5, #1
- cmp r5, r7
- blo _0801A722
- b _0801A8B6
-_0801A722:
- lsls r0, r5, #6
- adds r0, r0, r1
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801A71A
- b _0801A8B4
- .align 2, 0
-_0801A730: .4byte gRoomControls
-_0801A734: .4byte 0x00000369
-_0801A738: .4byte 0x00002004
-_0801A73C:
- movs r1, #0x2e
- ldrsh r0, [r6, r1]
- ldr r2, _0801A7E8 @ =gRoomControls
- ldrh r1, [r2, #6]
- subs r0, r0, r1
- asrs r4, r0, #4
- movs r3, #0x3f
- ands r4, r3
- movs r1, #0x32
- ldrsh r0, [r6, r1]
- ldrh r1, [r2, #8]
- subs r1, #0xa
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r4, r0
- mov r2, r8
- adds r2, #4
- mov r3, ip
- ldr r6, _0801A7EC @ =0x0000036F
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A76A:
- ldrh r0, [r1]
- lsls r0, r0, #1
- adds r0, r3, r0
- ldrh r0, [r0]
- cmp r0, r6
- beq _0801A780
- adds r1, #2
- adds r4, #1
- subs r5, #1
- cmp r5, #0
- bne _0801A76A
-_0801A780:
- subs r4, #1
- ldr r3, _0801A7F0 @ =0x00000372
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A788:
- ldrh r0, [r1]
- lsls r0, r0, #1
- add r0, ip
- ldrh r0, [r0]
- cmp r0, r3
- bne _0801A79E
- adds r7, #1
- subs r1, #2
- subs r4, #1
- cmp r7, #3
- bls _0801A788
-_0801A79E:
- mov r2, sl
- cmp r2, #0
- bne _0801A7A6
- b _0801A8C0
-_0801A7A6:
- mov r0, sb
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- adds r5, r0, #0
- ldr r0, _0801A7F4 @ =0x00000369
- cmp r5, r0
- beq _0801A7BE
- adds r0, #2
- cmp r5, r0
- bne _0801A8B4
-_0801A7BE:
- lsls r0, r7, #6
- adds r0, r4, r0
- ldr r1, _0801A7F8 @ =0x00002004
- adds r0, r0, r1
- mov r2, r8
- adds r1, r2, r0
- movs r5, #0
- cmp r5, r7
- bhs _0801A8B6
- ldrb r0, [r1]
- cmp r0, #0
- bne _0801A8B4
-_0801A7D6:
- adds r5, #1
- cmp r5, r7
- bhs _0801A8B6
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801A7D6
- b _0801A8B4
- .align 2, 0
-_0801A7E8: .4byte gRoomControls
-_0801A7EC: .4byte 0x0000036F
-_0801A7F0: .4byte 0x00000372
-_0801A7F4: .4byte 0x00000369
-_0801A7F8: .4byte 0x00002004
-_0801A7FC:
- movs r0, #0x2e
- ldrsh r1, [r6, r0]
- ldr r3, _0801A890 @ =gRoomControls
- ldrh r0, [r3, #6]
- adds r0, #0xa
- subs r1, r1, r0
- asrs r4, r1, #4
- movs r2, #0x3f
- ands r4, r2
- movs r1, #0x32
- ldrsh r0, [r6, r1]
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r4, r0
- mov r2, r8
- adds r2, #4
- mov r3, ip
- ldr r6, _0801A894 @ =0x0000036F
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A82A:
- ldrh r0, [r1]
- lsls r0, r0, #1
- adds r0, r3, r0
- ldrh r0, [r0]
- cmp r0, r6
- beq _0801A840
- subs r1, #0x80
- subs r4, #0x40
- subs r5, #1
- cmp r5, #0
- bne _0801A82A
-_0801A840:
- subs r4, #1
- ldr r3, _0801A898 @ =0x00000372
- lsls r0, r4, #1
- adds r1, r0, r2
-_0801A848:
- ldrh r0, [r1]
- lsls r0, r0, #1
- add r0, ip
- ldrh r0, [r0]
- cmp r0, r3
- bne _0801A85E
- adds r7, #1
- subs r1, #2
- subs r4, #1
- cmp r7, #3
- bls _0801A848
-_0801A85E:
- mov r2, sl
- cmp r2, #0
- beq _0801A8C0
- mov r0, sb
- ldrb r1, [r0]
- adds r0, r4, #0
- bl GetTileType
- adds r5, r0, #0
- ldr r0, _0801A89C @ =0x00000369
- cmp r5, r0
- beq _0801A87C
- adds r0, #3
- cmp r5, r0
- bne _0801A8B4
-_0801A87C:
- ldr r1, _0801A8A0 @ =0x00002003
- adds r0, r4, r1
- mov r2, r8
- adds r1, r2, r0
- movs r5, #0
- cmp r5, r7
- bhs _0801A8B6
- ldrb r0, [r1]
- b _0801A8B0
- .align 2, 0
-_0801A890: .4byte gRoomControls
-_0801A894: .4byte 0x0000036F
-_0801A898: .4byte 0x00000372
-_0801A89C: .4byte 0x00000369
-_0801A8A0: .4byte 0x00002003
-_0801A8A4:
- adds r5, #1
- cmp r5, r7
- bhs _0801A8B6
- lsls r0, r5, #6
- adds r0, r0, r1
- ldrb r0, [r0]
-_0801A8B0:
- cmp r0, #0
- beq _0801A8A4
-_0801A8B4:
- ldr r4, _0801A8CC @ =0x0000FFFF
-_0801A8B6:
- mov r0, sl
- cmp r0, #0
- beq _0801A8C0
- lsls r0, r7, #0xc
- orrs r4, r0
-_0801A8C0:
- adds r0, r4, #0
-_0801A8C2:
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801A8CC: .4byte 0x0000FFFF
-
- thumb_func_start sub_0801A8D0
-sub_0801A8D0: @ 0x0801A8D0
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- cmp r5, #0
- beq _0801A978
- adds r0, r5, #0
- adds r0, #0x38
- ldrb r0, [r0]
- bl GetLayerByIndex
- adds r6, r0, #4
- cmp r4, #0
- bne _0801A92C
- movs r1, #0x2e
- ldrsh r0, [r5, r1]
- ldr r2, _0801A91C @ =gRoomControls
- ldrh r1, [r2, #6]
- subs r0, r0, r1
- asrs r4, r0, #4
- movs r3, #0x3f
- ands r4, r3
- movs r1, #0x32
- ldrsh r0, [r5, r1]
- ldrh r1, [r2, #8]
- adds r1, #8
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r4, r0
- lsls r0, r4, #1
- adds r0, r0, r6
- ldrh r1, [r0]
- ldr r0, _0801A920 @ =0x00004055
- cmp r1, r0
- bne _0801A924
- subs r0, r4, #1
- b _0801A97A
- .align 2, 0
-_0801A91C: .4byte gRoomControls
-_0801A920: .4byte 0x00004055
-_0801A924:
- ldr r0, _0801A928 @ =0x00004056
- b _0801A96A
- .align 2, 0
-_0801A928: .4byte 0x00004056
-_0801A92C:
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- ldr r3, _0801A960 @ =gRoomControls
- ldrh r0, [r3, #6]
- adds r0, #8
- subs r1, r1, r0
- asrs r4, r1, #4
- movs r2, #0x3f
- ands r4, r2
- movs r1, #0x32
- ldrsh r0, [r5, r1]
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r4, r0
- lsls r0, r4, #1
- adds r0, r0, r6
- ldrh r1, [r0]
- ldr r0, _0801A964 @ =0x00004057
- cmp r1, r0
- bne _0801A968
- adds r0, r4, #0
- subs r0, #0x40
- b _0801A97A
- .align 2, 0
-_0801A960: .4byte gRoomControls
-_0801A964: .4byte 0x00004057
-_0801A968:
- ldr r0, _0801A974 @ =0x00004058
-_0801A96A:
- cmp r1, r0
- bne _0801A978
- adds r0, r4, #0
- b _0801A97A
- .align 2, 0
-_0801A974: .4byte 0x00004058
-_0801A978:
- ldr r0, _0801A97C @ =0x0000FFFF
-_0801A97A:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801A97C: .4byte 0x0000FFFF
-
- thumb_func_start sub_0801A980
-sub_0801A980: @ 0x0801A980
- push {r4, r5, r6, r7, lr}
- ldr r4, _0801A9E0 @ =gPlayerEntity
- adds r6, r4, #0
- adds r6, #0x38
- ldrb r0, [r6]
- bl GetLayerByIndex
- ldrb r0, [r4, #0x14]
- movs r2, #6
- ands r2, r0
- lsls r2, r2, #1
- ldr r0, _0801A9E4 @ =gUnk_080B44A8
- adds r2, r2, r0
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- movs r3, #0
- ldrsh r1, [r2, r3]
- adds r0, r0, r1
- ldr r5, _0801A9E8 @ =gRoomControls
- ldrh r1, [r5, #6]
- subs r0, r0, r1
- asrs r0, r0, #4
- movs r3, #0x3f
- ands r0, r3
- movs r7, #0x32
- ldrsh r1, [r4, r7]
- movs r4, #2
- ldrsh r2, [r2, r4]
- adds r1, r1, r2
- ldrh r2, [r5, #8]
- subs r1, r1, r2
- asrs r1, r1, #4
- ands r1, r3
- lsls r1, r1, #6
- orrs r0, r1
- ldrb r1, [r6]
- bl GetTileType
- lsls r0, r0, #0x10
- lsrs r1, r0, #0x10
- ldr r0, _0801A9EC @ =0x00003FFF
- cmp r1, r0
- bhi _0801A9DC
- adds r0, r1, #0
- bl sub_080B1B54
-_0801A9DC:
- movs r0, #0
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801A9E0: .4byte gPlayerEntity
-_0801A9E4: .4byte gUnk_080B44A8
-_0801A9E8: .4byte gRoomControls
-_0801A9EC: .4byte 0x00003FFF
-
- thumb_func_start sub_0801A9F0
-sub_0801A9F0: @ 0x0801A9F0
- push {r4, r5, lr}
- adds r3, r0, #0
- adds r4, r2, #0
- movs r2, #0
- ldr r5, _0801AA0C @ =0xFFFFFCA0
- adds r0, r1, r5
- cmp r0, #4
- bhi _0801AA40
- lsls r0, r0, #2
- ldr r1, _0801AA10 @ =_0801AA14
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801AA0C: .4byte 0xFFFFFCA0
-_0801AA10: .4byte _0801AA14
-_0801AA14: @ jump table
- .4byte _0801AA44 @ case 0
- .4byte _0801AA28 @ case 1
- .4byte _0801AA34 @ case 2
- .4byte _0801AA3A @ case 3
- .4byte _0801AA2E @ case 4
-_0801AA28:
- cmp r3, #0
- bne _0801AA40
- b _0801AA44
-_0801AA2E:
- cmp r3, #8
- bne _0801AA40
- b _0801AA44
-_0801AA34:
- cmp r3, #0x10
- bne _0801AA40
- b _0801AA44
-_0801AA3A:
- cmp r3, #0x18
- bne _0801AA40
- movs r2, #1
-_0801AA40:
- cmp r2, #0
- beq _0801AA54
-_0801AA44:
- ldr r0, _0801AA50 @ =gPlayerEntity
- adds r1, r4, #0
- adds r2, r3, #0
- bl sub_0801AA58
- b _0801AA56
- .align 2, 0
-_0801AA50: .4byte gPlayerEntity
-_0801AA54:
- movs r0, #0
-_0801AA56:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0801AA58
-sub_0801AA58: @ 0x0801AA58
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r6, r0, #0
- adds r5, r1, #0
- adds r7, r2, #0
- movs r0, #0x38
- adds r0, r0, r6
- mov r8, r0
- ldrb r0, [r0]
- bl GetLayerByIndex
- ldr r2, _0801AAF0 @ =gUnk_080B4488
- lsrs r1, r7, #3
- lsls r1, r1, #1
- adds r1, r1, r2
- movs r2, #0
- ldrsh r1, [r1, r2]
- adds r1, r5, r1
- ldr r2, _0801AAF4 @ =0x00002004
- adds r0, r0, r2
- adds r0, r0, r1
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801AA94
- subs r0, #0x20
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x1f
- bhi _0801AB00
-_0801AA94:
- movs r0, #7
- movs r1, #0
- movs r2, #0
- bl CreateObject
- adds r4, r0, #0
- cmp r4, #0
- beq _0801AB00
- movs r3, #0
- strb r7, [r4, #0x15]
- movs r1, #0x3f
- adds r0, r5, #0
- ands r0, r1
- lsls r0, r0, #4
- adds r0, #8
- ldr r2, _0801AAF8 @ =gRoomControls
- ldrh r1, [r2, #6]
- adds r1, r1, r0
- strh r1, [r4, #0x2e]
- movs r0, #0xfc
- lsls r0, r0, #4
- ands r0, r5
- lsrs r0, r0, #2
- adds r0, #8
- ldrh r1, [r2, #8]
- adds r1, r1, r0
- strh r1, [r4, #0x32]
- mov r0, r8
- ldrb r1, [r0]
- adds r0, r4, #0
- adds r0, #0x38
- strb r1, [r0]
- ldr r2, _0801AAFC @ =gPlayerState
- movs r0, #0xa0
- strb r0, [r2, #6]
- movs r0, #5
- strb r0, [r2, #0xc]
- ldr r0, [r2, #0x30]
- movs r1, #1
- orrs r0, r1
- str r0, [r2, #0x30]
- strh r3, [r6, #0x2c]
- strh r3, [r6, #0x30]
- strb r7, [r6, #0x15]
- movs r0, #1
- b _0801AB02
- .align 2, 0
-_0801AAF0: .4byte gUnk_080B4488
-_0801AAF4: .4byte 0x00002004
-_0801AAF8: .4byte gRoomControls
-_0801AAFC: .4byte gPlayerState
-_0801AB00:
- movs r0, #0
-_0801AB02:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0801AB08
-sub_0801AB08: @ 0x0801AB08
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #8
- adds r5, r0, #0
- mov r8, r1
- ldr r0, _0801AB4C @ =gMapBottom
- movs r1, #2
- cmp r8, r0
- bne _0801AB22
- movs r1, #1
-_0801AB22:
- lsls r2, r1, #0xc
- ldr r7, _0801AB50 @ =0x00003004
- add r7, r8
- mov r6, r8
- adds r6, #4
- movs r0, #0
- ldr r1, _0801AB54 @ =0x00003FFF
- mov sb, r1
-_0801AB32:
- movs r3, #0
- mov sl, r3
- adds r0, #1
- str r0, [sp]
- movs r0, #0x80
- lsls r0, r0, #1
- adds r4, r5, r0
-_0801AB40:
- ldrh r0, [r6]
- cmp r0, sb
- bhi _0801AB58
- lsls r0, r0, #2
- b _0801AB64
- .align 2, 0
-_0801AB4C: .4byte gMapBottom
-_0801AB50: .4byte 0x00003004
-_0801AB54: .4byte 0x00003FFF
-_0801AB58:
- ldrh r1, [r7]
- adds r0, r2, #0
- str r2, [sp, #4]
- bl sub_0801AC68
- ldr r2, [sp, #4]
-_0801AB64:
- lsls r0, r0, #1
- ldr r1, _0801AB8C @ =0x00007004
- adds r0, r0, r1
- mov r3, r8
- adds r1, r3, r0
- ldrh r0, [r1]
- strh r0, [r5]
- ldrh r0, [r1, #2]
- strh r0, [r5, #2]
- ldrh r0, [r1, #4]
- strh r0, [r4]
- ldrh r0, [r1, #6]
- strh r0, [r4, #2]
- adds r4, #4
- adds r5, #4
- ldrh r0, [r6, #2]
- cmp r0, sb
- bhi _0801AB90
- lsls r0, r0, #2
- b _0801AB9C
- .align 2, 0
-_0801AB8C: .4byte 0x00007004
-_0801AB90:
- adds r0, r2, #1
- ldrh r1, [r7, #2]
- str r2, [sp, #4]
- bl sub_0801AC68
- ldr r2, [sp, #4]
-_0801AB9C:
- lsls r0, r0, #1
- ldr r1, _0801ABC4 @ =0x00007004
- adds r0, r0, r1
- mov r3, r8
- adds r1, r3, r0
- ldrh r0, [r1]
- strh r0, [r5]
- ldrh r0, [r1, #2]
- strh r0, [r5, #2]
- ldrh r0, [r1, #4]
- strh r0, [r4]
- ldrh r0, [r1, #6]
- strh r0, [r4, #2]
- adds r4, #4
- adds r5, #4
- ldrh r0, [r6, #4]
- cmp r0, sb
- bhi _0801ABC8
- lsls r0, r0, #2
- b _0801ABD4
- .align 2, 0
-_0801ABC4: .4byte 0x00007004
-_0801ABC8:
- adds r0, r2, #2
- ldrh r1, [r7, #4]
- str r2, [sp, #4]
- bl sub_0801AC68
- ldr r2, [sp, #4]
-_0801ABD4:
- lsls r0, r0, #1
- ldr r1, _0801ABFC @ =0x00007004
- adds r0, r0, r1
- mov r3, r8
- adds r1, r3, r0
- ldrh r0, [r1]
- strh r0, [r5]
- ldrh r0, [r1, #2]
- strh r0, [r5, #2]
- ldrh r0, [r1, #4]
- strh r0, [r4]
- ldrh r0, [r1, #6]
- strh r0, [r4, #2]
- adds r4, #4
- adds r5, #4
- ldrh r0, [r6, #6]
- cmp r0, sb
- bhi _0801AC00
- lsls r0, r0, #2
- b _0801AC0C
- .align 2, 0
-_0801ABFC: .4byte 0x00007004
-_0801AC00:
- adds r0, r2, #3
- ldrh r1, [r7, #6]
- str r2, [sp, #4]
- bl sub_0801AC68
- ldr r2, [sp, #4]
-_0801AC0C:
- lsls r0, r0, #1
- ldr r1, _0801AC64 @ =0x00007004
- adds r0, r0, r1
- mov r3, r8
- adds r1, r3, r0
- ldrh r0, [r1]
- strh r0, [r5]
- ldrh r0, [r1, #2]
- strh r0, [r5, #2]
- ldrh r0, [r1, #4]
- strh r0, [r4]
- ldrh r0, [r1, #6]
- strh r0, [r4, #2]
- adds r4, #4
- adds r5, #4
- adds r6, #8
- adds r7, #8
- adds r0, r2, #4
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
- mov r0, sl
- adds r0, #1
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- mov sl, r0
- cmp r0, #0xf
- bhi _0801AC44
- b _0801AB40
-_0801AC44:
- movs r0, #0x80
- lsls r0, r0, #1
- adds r5, r5, r0
- ldr r1, [sp]
- lsls r0, r1, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #0x3f
- bhi _0801AC56
- b _0801AB32
-_0801AC56:
- add sp, #8
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801AC64: .4byte 0x00007004
-
- thumb_func_start sub_0801AC68
-sub_0801AC68: @ 0x0801AC68
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r2, _0801AC84 @ =gUnk_0200B240
- ldr r0, _0801AC88 @ =gRoomVars
- ldrh r3, [r0, #0xe]
- movs r0, #0
- cmp r0, r3
- bhs _0801AC94
-_0801AC78:
- ldrh r5, [r2]
- cmp r4, r5
- bne _0801AC8C
- ldrh r0, [r2, #2]
- lsls r0, r0, #2
- b _0801AC96
- .align 2, 0
-_0801AC84: .4byte gUnk_0200B240
-_0801AC88: .4byte gRoomVars
-_0801AC8C:
- adds r2, #4
- adds r0, #1
- cmp r0, r3
- blo _0801AC78
-_0801AC94:
- lsls r0, r1, #2
-_0801AC96:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0801AC98
-sub_0801AC98: @ 0x0801AC98
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #8
- ldr r0, _0801ACD0 @ =gRoomControls
- ldrh r1, [r0, #0x1e]
- lsrs r1, r1, #4
- mov r8, r1
- ldrh r0, [r0, #0x20]
- lsrs r0, r0, #4
- str r0, [sp]
- movs r6, #0
- movs r1, #0
- cmp r1, r0
- bhs _0801AD5C
-_0801ACBA:
- movs r0, #0
- adds r1, #1
- str r1, [sp, #4]
- cmp r0, r8
- bhs _0801AD4C
-_0801ACC4:
- ldr r5, _0801ACD4 @ =gUnk_080B44C0
- adds r0, #1
- mov sl, r0
- adds r0, r6, #1
- mov sb, r0
- b _0801ACDA
- .align 2, 0
-_0801ACD0: .4byte gRoomControls
-_0801ACD4: .4byte gUnk_080B44C0
-_0801ACD8:
- adds r5, #0xc
-_0801ACDA:
- ldrh r0, [r5]
- ldr r1, _0801AD0C @ =0x0000FFFF
- cmp r0, r1
- beq _0801AD06
- adds r4, r0, #0
- adds r0, r6, #0
- movs r1, #1
- bl GetTileType
- cmp r4, r0
- bne _0801ACD8
- ldrh r0, [r5, #0xa]
- lsls r0, r0, #2
- ldr r1, _0801AD10 @ =gUnk_080B44B8
- adds r0, r0, r1
- ldr r0, [r0]
- cmp r0, #0
- beq _0801ACD8
- adds r0, r5, #0
- adds r1, r6, #0
- bl sub_0801AD6C
-_0801AD06:
- ldr r5, _0801AD14 @ =gUnk_080B44C2
- ldr r7, _0801AD0C @ =0x0000FFFF
- b _0801AD1A
- .align 2, 0
-_0801AD0C: .4byte 0x0000FFFF
-_0801AD10: .4byte gUnk_080B44B8
-_0801AD14: .4byte gUnk_080B44C2
-_0801AD18:
- adds r5, #0xc
-_0801AD1A:
- ldrh r0, [r5]
- cmp r0, r7
- beq _0801AD44
- adds r4, r0, #0
- adds r0, r6, #0
- movs r1, #2
- bl GetTileType
- cmp r4, r0
- bne _0801AD18
- ldrh r0, [r5, #0xa]
- lsls r0, r0, #2
- ldr r1, _0801AD68 @ =gUnk_080B44B8
- adds r0, r0, r1
- ldr r0, [r0]
- cmp r0, #0
- beq _0801AD18
- adds r0, r5, #0
- adds r1, r6, #0
- bl sub_0801AD6C
-_0801AD44:
- mov r0, sl
- mov r6, sb
- cmp r0, r8
- blo _0801ACC4
-_0801AD4C:
- adds r0, r6, #0
- adds r0, #0x40
- mov r1, r8
- subs r6, r0, r1
- ldr r1, [sp, #4]
- ldr r0, [sp]
- cmp r1, r0
- blo _0801ACBA
-_0801AD5C:
- add sp, #8
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801AD68: .4byte gUnk_080B44B8
-
- thumb_func_start sub_0801AD6C
-sub_0801AD6C: @ 0x0801AD6C
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r6, r1, #0
- ldrh r0, [r4, #2]
- cmp r0, #9
- beq _0801ADDC
- bl GetEmptyEntity
- adds r5, r0, #0
- cmp r5, #0
- beq _0801AE26
- ldrh r0, [r4, #2]
- strb r0, [r5, #8]
- ldrh r0, [r4, #4]
- strb r0, [r5, #9]
- ldrh r0, [r4, #6]
- strb r0, [r5, #0xa]
- ldrh r0, [r4, #8]
- strb r0, [r5, #0xb]
- movs r1, #0x3f
- adds r0, r6, #0
- ands r0, r1
- lsls r0, r0, #4
- adds r0, #8
- ldr r2, _0801ADD4 @ =gRoomControls
- ldrh r1, [r2, #6]
- adds r1, r1, r0
- movs r3, #0
- strh r1, [r5, #0x2e]
- movs r0, #0xfc
- lsls r0, r0, #4
- ands r0, r6
- lsrs r0, r0, #2
- adds r0, #8
- ldrh r1, [r2, #8]
- adds r1, r1, r0
- strh r1, [r5, #0x32]
- adds r0, r5, #0
- adds r0, #0x38
- strb r3, [r0]
- adds r0, r5, #0
- bl ResolveCollisionLayer
- ldr r1, _0801ADD8 @ =gUnk_081091E4
- ldrb r0, [r5, #8]
- adds r0, r0, r1
- ldrb r1, [r0]
- adds r0, r5, #0
- bl AppendEntityToList
- b _0801AE26
- .align 2, 0
-_0801ADD4: .4byte gRoomControls
-_0801ADD8: .4byte gUnk_081091E4
-_0801ADDC:
- bl GetEmptyManager
- adds r3, r0, #0
- cmp r3, #0
- beq _0801AE26
- ldrh r0, [r4, #2]
- strb r0, [r3, #8]
- ldrh r0, [r4, #4]
- strb r0, [r3, #9]
- ldrh r0, [r4, #6]
- strb r0, [r3, #0xa]
- ldrh r0, [r4, #8]
- strb r0, [r3, #0xb]
- movs r1, #0x3f
- adds r0, r6, #0
- ands r0, r1
- lsls r0, r0, #4
- adds r0, #8
- ldr r2, _0801AE28 @ =gRoomControls
- ldrh r1, [r2, #6]
- adds r1, r1, r0
- strh r1, [r3, #0x38]
- movs r0, #0xfc
- lsls r0, r0, #4
- ands r0, r6
- lsrs r0, r0, #2
- adds r0, #8
- ldrh r1, [r2, #8]
- adds r1, r1, r0
- strh r1, [r3, #0x3a]
- ldr r1, _0801AE2C @ =gUnk_081091E4
- ldrb r0, [r3, #8]
- adds r0, r0, r1
- ldrb r1, [r0]
- adds r0, r3, #0
- bl AppendEntityToList
-_0801AE26:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801AE28: .4byte gRoomControls
-_0801AE2C: .4byte gUnk_081091E4
-
- thumb_func_start sub_0801AE30
-sub_0801AE30: @ 0x0801AE30
- movs r0, #1
- bx lr
-
- thumb_func_start sub_0801AE34
-sub_0801AE34: @ 0x0801AE34
- ldr r0, _0801AE40 @ =gRoomControls
- ldrb r0, [r0, #0xf]
- lsrs r0, r0, #1
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_0801AE40: .4byte gRoomControls
-
- thumb_func_start sub_0801AE44
-sub_0801AE44: @ 0x0801AE44
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _0801AEE0 @ =gRoomControls
- movs r0, #0
- str r0, [r1, #0x34]
- bl sub_0807BFD0
- cmp r4, #0
- beq _0801AE5A
- bl LoadRoomGfx
-_0801AE5A:
- bl sub_080809D4
- bl UpdateIsDiggingCave
- ldr r0, _0801AEE4 @ =gRoomTransition
- adds r0, #0x2d
- ldrb r0, [r0]
- cmp r0, #0
- beq _0801AE70
- bl sub_0807C898
-_0801AE70:
- ldr r4, _0801AEE8 @ =gArea
- ldrb r0, [r4, #0xc]
- cmp r0, #0
- beq _0801AE8C
- ldr r1, _0801AEEC @ =0x0600F000
- movs r2, #0x80
- lsls r2, r2, #4
- movs r0, #0xf
- bl MemFill16
- movs r0, #1
- rsbs r0, r0, #0
- bl sub_0805BB74
-_0801AE8C:
- movs r0, #5
- bl GetCurrentRoomProperty
- cmp r0, #0
- beq _0801AE9A
- bl _call_via_r0
-_0801AE9A:
- ldr r0, _0801AEF0 @ =gUnk_03004030
- ldrb r0, [r0, #8]
- cmp r0, #0
- bne _0801AEB6
- ldr r1, _0801AEF4 @ =0x0000088C
- adds r0, r4, r1
- ldr r1, [r0]
- cmp r1, #0
- beq _0801AEB6
- ldr r2, _0801AEF8 @ =0x00000888
- adds r0, r4, r2
- ldr r0, [r0]
- bl _call_via_r1
-_0801AEB6:
- ldr r0, _0801AEE0 @ =gRoomControls
- ldrb r1, [r0, #0xf]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _0801AF0C
- ldr r1, _0801AEFC @ =gMapBottom
- ldr r0, [r1]
- cmp r0, #0
- beq _0801AED0
- ldr r0, _0801AF00 @ =gMapDataBottomSpecial
- bl sub_0801AB08
-_0801AED0:
- ldr r1, _0801AF04 @ =gMapTop
- ldr r0, [r1]
- cmp r0, #0
- beq _0801AF10
- ldr r0, _0801AF08 @ =gMapDataTopSpecial
- bl sub_0801AB08
- b _0801AF10
- .align 2, 0
-_0801AEE0: .4byte gRoomControls
-_0801AEE4: .4byte gRoomTransition
-_0801AEE8: .4byte gArea
-_0801AEEC: .4byte 0x0600F000
-_0801AEF0: .4byte gUnk_03004030
-_0801AEF4: .4byte 0x0000088C
-_0801AEF8: .4byte 0x00000888
-_0801AEFC: .4byte gMapBottom
-_0801AF00: .4byte gMapDataBottomSpecial
-_0801AF04: .4byte gMapTop
-_0801AF08: .4byte gMapDataTopSpecial
-_0801AF0C:
- bl sub_0807C4F8
-_0801AF10:
- bl UpdateScrollVram
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start SetMultipleTiles
-SetMultipleTiles: @ 0x0801AF18
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- adds r6, r1, #0
- adds r5, r2, #0
- movs r1, #0
- ldrsh r0, [r4, r1]
- movs r1, #1
- rsbs r1, r1, #0
- cmp r0, r1
- beq _0801AF46
- adds r7, r1, #0
-_0801AF2E:
- ldrh r0, [r4]
- movs r2, #2
- ldrsh r1, [r4, r2]
- adds r1, r6, r1
- adds r2, r5, #0
- bl SetTile
- adds r4, #4
- movs r1, #0
- ldrsh r0, [r4, r1]
- cmp r0, r7
- bne _0801AF2E
-_0801AF46:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0801AF48
-sub_0801AF48: @ 0x0801AF48
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r6, r1, #0
- adds r5, r2, #0
- ldr r0, _0801AF7C @ =0x00003FFF
- cmp r4, r0
- bhi _0801AF7A
- ldr r0, _0801AF80 @ =gRoomTransition
- adds r0, #0x30
- ldrb r0, [r0]
- cmp r0, #0
- bne _0801AF7A
- ldr r2, _0801AF84 @ =gRoomVars
- ldrh r3, [r2, #0xe]
- cmp r3, #0xff
- bhi _0801AF7A
- ldr r0, _0801AF88 @ =gUnk_0200B240
- lsls r1, r3, #2
- adds r1, r1, r0
- strh r4, [r1, #2]
- lsls r0, r5, #0xc
- orrs r0, r6
- strh r0, [r1]
- adds r0, r3, #1
- strh r0, [r2, #0xe]
-_0801AF7A:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801AF7C: .4byte 0x00003FFF
-_0801AF80: .4byte gRoomTransition
-_0801AF84: .4byte gRoomVars
-_0801AF88: .4byte gUnk_0200B240
-
- thumb_func_start DeleteLoadedTileEntity
-DeleteLoadedTileEntity: @ 0x0801AF8C
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- lsls r1, r1, #0xc
- orrs r4, r1
- ldr r2, _0801AFB8 @ =gUnk_0200B240
- ldr r0, _0801AFBC @ =gRoomVars
- ldrh r1, [r0, #0xe]
- movs r3, #0
- adds r5, r2, #0
- cmp r3, r1
- bhs _0801AFE0
- ldrh r6, [r2]
- cmp r4, r6
- bne _0801AFC0
- subs r1, #1
- strh r1, [r0, #0xe]
- lsls r0, r1, #2
- adds r0, r0, r2
- ldr r0, [r0]
- str r0, [r2]
- b _0801AFE0
- .align 2, 0
-_0801AFB8: .4byte gUnk_0200B240
-_0801AFBC: .4byte gRoomVars
-_0801AFC0:
- adds r2, #4
- adds r3, #1
- cmp r3, r1
- bhs _0801AFE0
- ldrh r6, [r2]
- cmp r4, r6
- bne _0801AFC0
- subs r1, #1
- strh r1, [r0, #0xe]
- adds r2, r5, #0
- lsls r0, r3, #2
- adds r0, r0, r2
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- str r1, [r0]
-_0801AFE0:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_0801AFE4
-sub_0801AFE4: @ 0x0801AFE4
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- ldr r3, _0801B018 @ =gUnk_02027EB4
- ldr r0, _0801B01C @ =gRoomControls
- ldrh r1, [r0, #0x1e]
- lsrs r1, r1, #4
- mov sl, r1
- ldrh r0, [r0, #0x20]
- lsrs r0, r0, #4
- mov sb, r0
- movs r7, #0
- cmp r7, sb
- bhs _0801B054
-_0801B004:
- movs r2, #0
- adds r0, r7, #1
- mov r8, r0
- cmp r2, sl
- bhs _0801B046
-_0801B00E:
- ldr r1, _0801B020 @ =gUnk_080B44D0
- adds r4, r3, #1
- adds r5, r2, #1
- b _0801B026
- .align 2, 0
-_0801B018: .4byte gUnk_02027EB4
-_0801B01C: .4byte gRoomControls
-_0801B020: .4byte gUnk_080B44D0
-_0801B024:
- adds r1, #4
-_0801B026:
- ldrh r0, [r1]
- cmp r0, #0
- beq _0801B03E
- ldrb r6, [r3]
- cmp r0, r6
- bne _0801B024
- ldrh r0, [r1, #2]
- lsls r1, r7, #6
- adds r1, r1, r2
- movs r2, #1
- bl SetTile
-_0801B03E:
- adds r3, r4, #0
- adds r2, r5, #0
- cmp r2, sl
- blo _0801B00E
-_0801B046:
- adds r0, r3, #0
- adds r0, #0x40
- mov r1, sl
- subs r3, r0, r1
- mov r7, r8
- cmp r7, sb
- blo _0801B004
-_0801B054:
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start UpdateBgAnim
-UpdateBgAnim: @ 0x0801B060
- push {r4, r5, lr}
- movs r3, #0
- ldr r4, _0801B0B0 @ =gUnk_02000CC0
- movs r5, #8
-_0801B068:
- ldr r2, [r4]
- cmp r2, #0
- beq _0801B0C2
- ldrh r1, [r4, #6]
- subs r0, r1, #1
- strh r0, [r4, #6]
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _0801B0BA
- cmp r3, #0
- bne _0801B0B8
- ldr r0, _0801B0B4 @ =gFadeControl
- ldrb r0, [r0]
- cmp r0, #0
- bne _0801B08C
- ldr r0, [r2]
- bl sub_0801B0EC
-_0801B08C:
- ldr r0, [r4]
- adds r0, #4
- bl sub_0801B0C4
- strh r0, [r4, #6]
- ldr r0, [r4]
- adds r1, r0, #0
- adds r1, #8
- str r1, [r4]
- ldr r0, [r0, #8]
- cmp r0, #0
- bne _0801B0AC
- ldr r0, [r1, #4]
- lsls r0, r0, #3
- subs r0, r1, r0
- str r0, [r4]
-_0801B0AC:
- movs r3, #1
- b _0801B0BA
- .align 2, 0
-_0801B0B0: .4byte gUnk_02000CC0
-_0801B0B4: .4byte gFadeControl
-_0801B0B8:
- strh r1, [r4, #6]
-_0801B0BA:
- adds r4, #8
- subs r5, #1
- cmp r5, #0
- bne _0801B068
-_0801B0C2:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0801B0C4
-sub_0801B0C4: @ 0x0801B0C4
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, [r4]
- cmp r0, #0
- bge _0801B0E6
- bl Random
- ldr r1, _0801B0E8 @ =gUnk_080B4550
- ldrb r2, [r4]
- lsls r2, r2, #2
- adds r2, r2, r1
- movs r1, #7
- ands r1, r0
- ldr r0, [r2]
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
-_0801B0E6:
- pop {r4, pc}
- .align 2, 0
-_0801B0E8: .4byte gUnk_080B4550
-
- thumb_func_start sub_0801B0EC
-sub_0801B0EC: @ 0x0801B0EC
- push {r4, r5, lr}
- adds r4, r0, #0
-_0801B0F0:
- ldr r1, [r4, #4]
- ldr r0, _0801B110 @ =gGlobalGfxAndPalettes
- adds r5, r1, r0
- ldrb r2, [r4, #2]
- ldrh r3, [r4]
- ldr r0, [r4]
- lsrs r0, r0, #0x1c
- movs r1, #1
- ands r0, r1
- cmp r0, #0
- beq _0801B114
- lsrs r1, r3, #5
- adds r0, r5, #0
- bl LoadPalettes
- b _0801B122
- .align 2, 0
-_0801B110: .4byte gGlobalGfxAndPalettes
-_0801B114:
- movs r0, #0xc0
- lsls r0, r0, #0x13
- adds r1, r3, r0
- lsls r2, r2, #5
- adds r0, r5, #0
- bl MemCopy
-_0801B122:
- ldr r0, [r4]
- cmp r0, #0
- bge _0801B12C
- adds r4, #8
- b _0801B0F0
-_0801B12C:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0801B130
-sub_0801B130: @ 0x0801B130
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- bl sub_0801B170
- ldr r5, _0801B164 @ =gUnk_02000CC0
- ldrh r0, [r4]
- ldr r1, _0801B168 @ =0x0000FFFF
- cmp r0, r1
- beq _0801B162
- ldr r7, _0801B16C @ =gUnk_080B7278
- adds r6, r1, #0
-_0801B146:
- ldrh r0, [r4]
- lsls r0, r0, #2
- adds r0, r0, r7
- ldr r0, [r0]
- str r0, [r5]
- adds r0, #4
- bl sub_0801B0C4
- strh r0, [r5, #6]
- adds r5, #8
- adds r4, #2
- ldrh r0, [r4]
- cmp r0, r6
- bne _0801B146
-_0801B162:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801B164: .4byte gUnk_02000CC0
-_0801B168: .4byte 0x0000FFFF
-_0801B16C: .4byte gUnk_080B7278
-
- thumb_func_start sub_0801B170
-sub_0801B170: @ 0x0801B170
- push {lr}
- movs r1, #0
- movs r2, #0
- ldr r0, _0801B184 @ =gUnk_02000CC0
-_0801B178:
- str r2, [r0]
- adds r0, #8
- adds r1, #1
- cmp r1, #7
- bls _0801B178
- pop {pc}
- .align 2, 0
-_0801B184: .4byte gUnk_02000CC0
diff --git a/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc b/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc
new file mode 100644
index 00000000..ee3be1c6
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc
@@ -0,0 +1,46 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r4, r0, #0
+ lsls r1, r1, #0xc
+ orrs r4, r1
+ ldr r2, _0801AFB8 @ =gUnk_0200B240
+ ldr r0, _0801AFBC @ =gRoomVars
+ ldrh r1, [r0, #0xe]
+ movs r3, #0
+ adds r5, r2, #0
+ cmp r3, r1
+ bhs _0801AFE0
+ ldrh r6, [r2]
+ cmp r4, r6
+ bne _0801AFC0
+ subs r1, #1
+ strh r1, [r0, #0xe]
+ lsls r0, r1, #2
+ adds r0, r0, r2
+ ldr r0, [r0]
+ str r0, [r2]
+ b _0801AFE0
+ .align 2, 0
+_0801AFB8: .4byte gUnk_0200B240
+_0801AFBC: .4byte gRoomVars
+_0801AFC0:
+ adds r2, #4
+ adds r3, #1
+ cmp r3, r1
+ bhs _0801AFE0
+ ldrh r6, [r2]
+ cmp r4, r6
+ bne _0801AFC0
+ subs r1, #1
+ strh r1, [r0, #0xe]
+ adds r2, r5, #0
+ lsls r0, r3, #2
+ adds r0, r0, r2
+ lsls r1, r1, #2
+ adds r1, r1, r2
+ ldr r1, [r1]
+ str r1, [r0]
+_0801AFE0:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/SetBGDefaults.inc b/asm/non_matching/beanstalkSubtask/SetBGDefaults.inc
new file mode 100644
index 00000000..9168fd3e
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/SetBGDefaults.inc
@@ -0,0 +1,19 @@
+ .syntax unified
+ ldr r0, _080197C4 @ =gMapBottom
+ ldr r1, _080197C8 @ =gBGAffSettings
+ str r1, [r0]
+ ldr r2, _080197CC @ =gUnk_080B77C0
+ ldrh r0, [r2]
+ strh r0, [r1]
+ ldr r0, _080197D0 @ =gMapTop
+ subs r1, #0xc
+ str r1, [r0]
+ ldrh r0, [r2, #2]
+ strh r0, [r1]
+ bx lr
+ .align 2, 0
+_080197C4: .4byte gMapBottom
+_080197C8: .4byte gScreen + 0x20
+_080197CC: .4byte gUnk_080B77C0
+_080197D0: .4byte gMapTop
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc b/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc
new file mode 100644
index 00000000..cfb3caab
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc
@@ -0,0 +1,1394 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sb
+ mov r6, r8
+ push {r6, r7}
+ ldr r0, _0801985C @ =gPlayerState
+ adds r2, r0, #0
+ adds r2, #0xa8
+ ldrb r1, [r2]
+ adds r7, r0, #0
+ cmp r1, #0
+ bne _08019860
+ adds r0, #0xa9
+ ldrb r0, [r0]
+ b _08019862
+ .align 2, 0
+_0801985C: .4byte gPlayerState
+_08019860:
+ ldrb r0, [r2]
+_08019862:
+ cmp r0, #0x12
+ bne _0801986A
+ bl _0801A2A4
+_0801986A:
+ cmp r0, #0x12
+ bgt _08019878
+ cmp r0, #3
+ bne _08019876
+ bl _0801A2A4
+_08019876:
+ b _08019880
+_08019878:
+ cmp r0, #0x16
+ bne _08019880
+ bl _0801A2A4
+_08019880:
+ ldrb r0, [r7, #0x1e]
+ ldr r1, _08019898 @ =gPlayerEntity
+ mov sb, r1
+ cmp r0, #0
+ bne _08019890
+ ldrb r0, [r1, #0xc]
+ cmp r0, #0x1d
+ bne _0801989C
+_08019890:
+ mov r2, sb
+ ldrb r4, [r2, #0x15]
+ b _0801989E
+ .align 2, 0
+_08019898: .4byte gPlayerEntity
+_0801989C:
+ ldrb r4, [r7, #0xd]
+_0801989E:
+ movs r0, #0x83
+ ands r0, r4
+ cmp r0, #0
+ bne _0801997C
+ ldrb r0, [r7, #0xa]
+ cmp r0, #0
+ bne _0801997C
+ lsrs r1, r4, #2
+ mov r0, sb
+ bl sub_0807BDB8
+ adds r4, r0, #0
+ cmp r4, #0xff
+ beq _0801997C
+ ldr r5, _08019960 @ =gRoomControls
+ ldrb r1, [r5, #0xf]
+ movs r0, #4
+ ands r0, r1
+ cmp r0, #0
+ bne _0801997C
+ lsls r1, r4, #2
+ ldr r0, _08019964 @ =gUnk_080B4490
+ adds r6, r1, r0
+ mov r3, sb
+ movs r1, #0x2e
+ ldrsh r0, [r3, r1]
+ movs r2, #0
+ ldrsh r1, [r6, r2]
+ adds r0, r0, r1
+ ldrh r1, [r5, #6]
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ movs r3, #0x3f
+ ands r0, r3
+ mov r1, sb
+ movs r2, #0x32
+ ldrsh r1, [r1, r2]
+ mov r8, r1
+ movs r1, #2
+ ldrsh r6, [r6, r1]
+ mov r2, r8
+ adds r1, r2, r6
+ ldrh r2, [r5, #8]
+ subs r1, r1, r2
+ asrs r1, r1, #4
+ ands r1, r3
+ lsls r1, r1, #6
+ orrs r0, r1
+ mov r1, sb
+ adds r1, #0x38
+ ldrb r1, [r1]
+ bl sub_080B1B44
+ cmp r0, #0xff
+ bne _0801997C
+ ldr r0, [r7, #0x30]
+ ldr r1, _08019968 @ =0x00010002
+ ands r0, r1
+ cmp r0, #0
+ bne _0801995A
+ ldrb r1, [r7, #0x1b]
+ movs r0, #0x10
+ ands r0, r1
+ cmp r0, #0
+ bne _0801995A
+ mov r3, sb
+ movs r1, #0x2e
+ ldrsh r0, [r3, r1]
+ ldrh r1, [r5, #6]
+ subs r0, r0, r1
+ movs r2, #0x32
+ ldrsh r1, [r3, r2]
+ ldrh r2, [r5, #8]
+ subs r1, r1, r2
+ adds r2, r4, #0
+ movs r3, #5
+ bl sub_080806BC
+ cmp r0, #0
+ bne _0801996C
+ ldrb r0, [r7, #5]
+ cmp r0, #0
+ bne _0801995A
+ ldrb r1, [r7, #0x1c]
+ movs r0, #0xf
+ ands r0, r1
+ cmp r0, #0
+ bne _0801995A
+ mov r0, sb
+ adds r1, r4, #0
+ bl sub_0807BD14
+ cmp r0, #0
+ bne _0801996C
+_0801995A:
+ movs r0, #3
+ bl _0801A2A6
+ .align 2, 0
+_08019960: .4byte gRoomControls
+_08019964: .4byte gUnk_080B4490
+_08019968: .4byte 0x00010002
+_0801996C:
+ ldr r1, _08019978 @ =gPlayerEntity
+ lsls r0, r4, #3
+ strb r0, [r1, #0x15]
+ movs r0, #0xf
+ bl _0801A2A6
+ .align 2, 0
+_08019978: .4byte gPlayerEntity
+_0801997C:
+ ldr r4, _080199DC @ =gPlayerEntity
+ adds r5, r4, #0
+ adds r5, #0x38
+ ldrb r0, [r5]
+ bl GetLayerByIndex
+ mov r8, r0
+ ldrb r1, [r4, #0x14]
+ movs r0, #6
+ ands r0, r1
+ lsls r0, r0, #1
+ ldr r1, _080199E0 @ =gUnk_080B4468
+ adds r6, r0, r1
+ movs r3, #0x2e
+ ldrsh r0, [r4, r3]
+ movs r2, #0
+ ldrsh r1, [r6, r2]
+ adds r0, r0, r1
+ ldr r3, _080199E4 @ =gRoomControls
+ ldrh r1, [r3, #6]
+ subs r0, r0, r1
+ asrs r7, r0, #4
+ movs r2, #0x3f
+ ands r7, r2
+ movs r1, #0x32
+ ldrsh r0, [r4, r1]
+ movs r4, #2
+ ldrsh r1, [r6, r4]
+ adds r0, r0, r1
+ ldrh r1, [r3, #8]
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r2
+ lsls r0, r0, #6
+ orrs r7, r0
+ ldrb r1, [r5]
+ adds r0, r7, #0
+ bl GetTileType
+ adds r6, r0, #0
+ ldr r0, _080199E8 @ =0x00003FFF
+ cmp r6, r0
+ bhi _080199EC
+ adds r0, r6, #0
+ bl sub_080B1B54
+ adds r4, r0, #0
+ b _080199EE
+ .align 2, 0
+_080199DC: .4byte gPlayerEntity
+_080199E0: .4byte gUnk_080B4468
+_080199E4: .4byte gRoomControls
+_080199E8: .4byte 0x00003FFF
+_080199EC:
+ adds r4, r6, #0
+_080199EE:
+ ldr r5, _08019A28 @ =gPlayerEntity
+ ldrb r1, [r5, #0x14]
+ adds r3, r1, #0
+ ldr r0, _08019A2C @ =0x00004036
+ mov sb, r5
+ cmp r4, r0
+ bne _080199FE
+ b _08019F0C
+_080199FE:
+ cmp r4, r0
+ bhi _08019AE0
+ cmp r4, #0x71
+ bne _08019A08
+ b _08019D94
+_08019A08:
+ cmp r4, #0x71
+ bhi _08019A4E
+ cmp r4, #0x3a
+ bne _08019A12
+ b _08019CFC
+_08019A12:
+ cmp r4, #0x3a
+ bhi _08019A30
+ cmp r4, #0x1a
+ bne _08019A1C
+ b _08019D48
+_08019A1C:
+ cmp r4, #0x28
+ bne _08019A22
+ b _08019BB8
+_08019A22:
+ bl _0801A2A4
+ .align 2, 0
+_08019A28: .4byte gPlayerEntity
+_08019A2C: .4byte 0x00004036
+_08019A30:
+ cmp r4, #0x5b
+ bne _08019A36
+ b _08019CFC
+_08019A36:
+ cmp r4, #0x5b
+ bhi _08019A44
+ cmp r4, #0x3d
+ bne _08019A40
+ b _08019DD4
+_08019A40:
+ bl _0801A2A4
+_08019A44:
+ cmp r4, #0x70
+ bne _08019A4A
+ b _08019CC0
+_08019A4A:
+ bl _0801A2A4
+_08019A4E:
+ ldr r0, _08019A6C @ =0x0000400B
+ cmp r4, r0
+ bne _08019A56
+ b _08019E44
+_08019A56:
+ cmp r4, r0
+ bhi _08019A70
+ cmp r4, #0x72
+ bne _08019A60
+ b _08019FA8
+_08019A60:
+ subs r0, #0xb
+ cmp r4, r0
+ bne _08019A68
+ b _08019B78
+_08019A68:
+ bl _0801A2A4
+ .align 2, 0
+_08019A6C: .4byte 0x0000400B
+_08019A70:
+ ldr r0, _08019AD4 @ =0x0000401B
+ cmp r4, r0
+ bne _08019A78
+ b _08019C70
+_08019A78:
+ cmp r4, r0
+ bhs _08019A80
+ bl _0801A2A4
+_08019A80:
+ adds r0, #0x12
+ cmp r4, r0
+ bls _08019A8A
+ bl _0801A2A4
+_08019A8A:
+ subs r0, #2
+ cmp r4, r0
+ bhs _08019A94
+ bl _0801A2A4
+_08019A94:
+ mov r0, r8
+ adds r1, r7, #0
+ bl sub_0801A370
+ cmp r0, #0
+ bne _08019AA4
+ bl _0801A2A4
+_08019AA4:
+ lsls r0, r7, #1
+ mov r2, r8
+ adds r2, #4
+ adds r2, r2, r0
+ ldrb r1, [r5, #0x14]
+ movs r0, #4
+ ands r0, r1
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x1a
+ ldr r3, _08019AD8 @ =0x00004030
+ adds r1, r3, #0
+ adds r0, r0, r1
+ strh r0, [r2]
+ ldr r2, _08019ADC @ =gPlayerState
+ ldr r1, [r2, #0x30]
+ movs r0, #0x80
+ ands r1, r0
+ adds r7, r2, #0
+ mov sb, r5
+ cmp r1, #0
+ bne _08019AD0
+ b _0801A09A
+_08019AD0:
+ b _0801A094
+ .align 2, 0
+_08019AD4: .4byte 0x0000401B
+_08019AD8: .4byte 0x00004030
+_08019ADC: .4byte gPlayerState
+_08019AE0:
+ ldr r0, _08019B04 @ =0x00004053
+ cmp r4, r0
+ bne _08019AE8
+ b _0801A13C
+_08019AE8:
+ cmp r4, r0
+ bhi _08019B24
+ subs r0, #0xb
+ cmp r4, r0
+ bhi _08019B08
+ subs r0, #8
+ cmp r4, r0
+ blo _08019AFA
+ b _08019DD4
+_08019AFA:
+ subs r0, #2
+ cmp r4, r0
+ bne _08019B02
+ b _08019F50
+_08019B02:
+ b _0801A2A4
+ .align 2, 0
+_08019B04: .4byte 0x00004053
+_08019B08:
+ ldr r0, _08019B20 @ =0x00004051
+ cmp r4, r0
+ bne _08019B10
+ b _08019CFC
+_08019B10:
+ cmp r4, r0
+ bls _08019B16
+ b _0801A120
+_08019B16:
+ subs r0, #7
+ cmp r4, r0
+ bne _08019B1E
+ b _0801A0BC
+_08019B1E:
+ b _0801A2A4
+ .align 2, 0
+_08019B20: .4byte 0x00004051
+_08019B24:
+ ldr r0, _08019B48 @ =0x00004058
+ cmp r4, r0
+ bne _08019B2C
+ b _0801A19A
+_08019B2C:
+ cmp r4, r0
+ bhi _08019B4C
+ subs r0, #2
+ cmp r4, r0
+ bne _08019B38
+ b _0801A15A
+_08019B38:
+ cmp r4, r0
+ bls _08019B3E
+ b _0801A198
+_08019B3E:
+ subs r0, #1
+ cmp r4, r0
+ bne _08019B46
+ b _0801A158
+_08019B46:
+ b _0801A2A4
+ .align 2, 0
+_08019B48: .4byte 0x00004058
+_08019B4C:
+ ldr r0, _08019B64 @ =0x0000405F
+ cmp r4, r0
+ bne _08019B54
+ b _0801A1D4
+_08019B54:
+ cmp r4, r0
+ bhi _08019B68
+ subs r0, #5
+ cmp r4, r0
+ bne _08019B60
+ b _08019EC8
+_08019B60:
+ b _0801A2A4
+ .align 2, 0
+_08019B64: .4byte 0x0000405F
+_08019B68:
+ ldr r0, _08019B74 @ =0x0000407D
+ cmp r4, r0
+ bne _08019B70
+ b _0801A23C
+_08019B70:
+ b _0801A2A4
+ .align 2, 0
+_08019B74: .4byte 0x0000407D
+_08019B78:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #2
+ bl sub_0801A458
+ cmp r0, #0
+ bne _08019B88
+ b _0801A2A4
+_08019B88:
+ lsls r0, r7, #1
+ mov r1, r8
+ adds r1, #4
+ adds r1, r1, r0
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r4, _08019BB0 @ =0x00004001
+ adds r0, r0, r4
+ strh r0, [r1]
+ ldr r2, _08019BB4 @ =gPlayerState
+ ldr r0, [r2, #0x30]
+ movs r1, #0x80
+ ands r0, r1
+ adds r7, r2, #0
+ cmp r0, #0
+ bne _08019BAA
+ b _0801A0F8
+_08019BAA:
+ movs r0, #0xc0
+ b _0801A0FA
+ .align 2, 0
+_08019BB0: .4byte 0x00004001
+_08019BB4: .4byte gPlayerState
+_08019BB8:
+ ldr r1, _08019C50 @ =gPlayerState
+ ldr r0, [r1, #0x30]
+ movs r2, #0x80
+ ands r0, r2
+ cmp r0, #0
+ beq _08019BC6
+ b _0801A2A4
+_08019BC6:
+ ldrb r0, [r1, #0xa]
+ cmp r0, #0
+ beq _08019BCE
+ b _0801A2A4
+_08019BCE:
+ ldrb r0, [r5, #0x14]
+ lsls r0, r0, #2
+ ldrb r1, [r1, #0xd]
+ cmp r0, r1
+ beq _08019BDA
+ b _0801A2A4
+_08019BDA:
+ ldrb r1, [r5, #0x15]
+ adds r0, r2, #0
+ ands r0, r1
+ cmp r0, #0
+ beq _08019BE6
+ b _0801A2A4
+_08019BE6:
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r7, #0
+ bl sub_080B1B44
+ cmp r0, #0xf
+ beq _08019BF8
+ b _0801A2A4
+_08019BF8:
+ bl sub_08079778
+ cmp r0, #0
+ bne _08019C02
+ b _0801A2A4
+_08019C02:
+ ldrb r1, [r5, #0x14]
+ movs r0, #6
+ ands r0, r1
+ lsls r0, r0, #1
+ ldr r1, _08019C54 @ =gUnk_080B4478
+ adds r6, r0, r1
+ movs r1, #0x2e
+ ldrsh r0, [r5, r1]
+ ldr r4, _08019C58 @ =gRoomControls
+ ldrh r1, [r4, #6]
+ subs r0, r0, r1
+ movs r2, #0
+ ldrsh r1, [r6, r2]
+ adds r0, r0, r1
+ movs r3, #0x32
+ ldrsh r1, [r5, r3]
+ ldrh r2, [r4, #8]
+ subs r1, r1, r2
+ movs r3, #2
+ ldrsh r2, [r6, r3]
+ adds r1, r1, r2
+ bl sub_08080734
+ adds r2, r0, #0
+ cmp r2, #0
+ bne _08019C38
+ b _0801A2A4
+_08019C38:
+ ldrb r1, [r5, #0x14]
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ beq _08019C5C
+ ldrh r0, [r2, #4]
+ ldrh r4, [r4, #8]
+ adds r0, r0, r4
+ adds r0, #6
+ strh r0, [r5, #0x32]
+ b _08019C64
+ .align 2, 0
+_08019C50: .4byte gPlayerState
+_08019C54: .4byte gUnk_080B4478
+_08019C58: .4byte gRoomControls
+_08019C5C:
+ ldrh r0, [r2, #2]
+ ldrh r4, [r4, #6]
+ adds r0, r0, r4
+ strh r0, [r5, #0x2e]
+_08019C64:
+ movs r0, #4
+ movs r1, #0
+ movs r2, #1
+ bl sub_08078AC0
+ b _0801A2A4
+_08019C70:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #0xb
+ bl sub_0801A2B0
+ cmp r0, #0
+ bne _08019C80
+ b _0801A2A4
+_08019C80:
+ lsls r0, r7, #1
+ mov r1, r8
+ adds r1, #4
+ adds r1, r1, r0
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r4, _08019CB8 @ =0x0000401C
+ adds r0, r0, r4
+ movs r3, #0
+ strh r0, [r1]
+ ldr r1, _08019CBC @ =gPlayerState
+ movs r0, #0xa0
+ strb r0, [r1, #6]
+ movs r0, #5
+ strb r0, [r1, #0xc]
+ ldr r0, [r1, #0x30]
+ movs r2, #1
+ orrs r0, r2
+ str r0, [r1, #0x30]
+ strh r3, [r5, #0x2c]
+ strh r3, [r5, #0x30]
+ ldrb r0, [r5, #0x14]
+ lsls r0, r0, #2
+ strb r0, [r5, #0x15]
+ strb r2, [r5, #0xa]
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_08019CB8: .4byte 0x0000401C
+_08019CBC: .4byte gPlayerState
+_08019CC0:
+ ldr r0, _08019CF8 @ =gPlayerState
+ adds r2, r0, #0
+ adds r2, #0x35
+ ldrb r1, [r2]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08019CD2
+ b _0801A2A4
+_08019CD2:
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ bne _08019CE2
+ b _0801A2A4
+_08019CE2:
+ ldrb r0, [r2]
+ lsls r0, r0, #2
+ adds r1, r6, #0
+ adds r2, r7, #0
+ bl sub_0801A9F0
+ cmp r0, #0
+ bne _08019CF4
+ b _0801A2A4
+_08019CF4:
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_08019CF8: .4byte gPlayerState
+_08019CFC:
+ ldr r2, _08019D40 @ =gPlayerState
+ ldr r0, [r2, #0x30]
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08019D0A
+ b _0801A2A4
+_08019D0A:
+ mov r1, sb
+ ldrb r0, [r1, #0x14]
+ cmp r0, #0
+ beq _08019D14
+ b _0801A2A4
+_08019D14:
+ ldr r0, _08019D44 @ =gUnk_0200AF00
+ adds r0, #0x2d
+ movs r1, #4
+ strb r1, [r0]
+ adds r0, r2, #0
+ adds r0, #0x92
+ ldrh r1, [r0]
+ movs r0, #0xc0
+ ands r0, r1
+ cmp r0, #0
+ bne _08019D2C
+ b _0801A2A4
+_08019D2C:
+ movs r0, #1
+ strb r0, [r2, #0x1a]
+ mov r0, sb
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r7, #0
+ bl sub_080A7CFC
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_08019D40: .4byte gPlayerState
+_08019D44: .4byte gUnk_0200AF00
+_08019D48:
+ cmp r3, #0
+ beq _08019D4E
+ b _0801A2A4
+_08019D4E:
+ ldr r2, _08019D8C @ =gPlayerState
+ ldr r0, [r2, #0x30]
+ movs r1, #0x81
+ lsls r1, r1, #7
+ ands r0, r1
+ cmp r0, #0
+ beq _08019D5E
+ b _0801A2A4
+_08019D5E:
+ ldr r0, _08019D90 @ =gUnk_0200AF00
+ adds r0, #0x2d
+ movs r1, #6
+ strb r1, [r0]
+ adds r0, r2, #0
+ adds r0, #0x92
+ ldrh r1, [r0]
+ movs r0, #0x88
+ ands r0, r1
+ cmp r0, #0
+ bne _08019D76
+ b _0801A2A4
+_08019D76:
+ movs r0, #1
+ strb r0, [r2, #0x1a]
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r7, #0
+ bl sub_080A7C8C
+ movs r0, #2
+ b _0801A2A6
+ .align 2, 0
+_08019D8C: .4byte gPlayerState
+_08019D90: .4byte gUnk_0200AF00
+_08019D94:
+ bl HasDungeonMap
+ cmp r0, #0
+ bne _08019D9E
+ b _0801A2A4
+_08019D9E:
+ ldr r0, _08019DCC @ =gUnk_0200AF00
+ adds r0, #0x2d
+ movs r1, #6
+ strb r1, [r0]
+ ldr r2, _08019DD0 @ =gPlayerState
+ adds r0, r2, #0
+ adds r0, #0x92
+ ldrh r1, [r0]
+ movs r0, #0x88
+ ands r0, r1
+ cmp r0, #0
+ bne _08019DB8
+ b _0801A2A4
+_08019DB8:
+ movs r0, #1
+ strb r0, [r2, #0x1a]
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r7, #0
+ bl sub_0804B388
+ movs r0, #2
+ b _0801A2A6
+ .align 2, 0
+_08019DCC: .4byte gUnk_0200AF00
+_08019DD0: .4byte gPlayerState
+_08019DD4:
+ ldr r4, _08019E3C @ =gPlayerState
+ ldr r0, [r4, #0x30]
+ movs r1, #0x80
+ lsls r1, r1, #7
+ ands r0, r1
+ cmp r0, #0
+ beq _08019DE4
+ b _0801A2A4
+_08019DE4:
+ bl sub_08079778
+ cmp r0, #0
+ bne _08019DEE
+ b _0801A2A4
+_08019DEE:
+.ifdef USA
+ ldrb r0, [r4, #0xa]
+ cmp r0, #0
+ beq _08019DF6
+ b _0801A2A4
+.else
+.ifdef DEMO_USA
+ ldrb r0, [r4, #0xa]
+ cmp r0, #0
+ beq _08019DF6
+ b _0801A2A4
+.else
+.ifdef DEMO_JP @ TODO deduplicate
+ ldrb r0, [r4, #0xa]
+ cmp r0, #0
+ beq _08019DF6
+ b _0801A2A4
+.endif
+.endif
+.endif
+_08019DF6:
+ ldr r2, _08019E40 @ =gPlayerEntity
+ ldrb r0, [r2, #0x14]
+ lsls r0, r0, #2
+ ldrb r3, [r4, #0xd]
+ cmp r0, r3
+ beq _08019E04
+ b _0801A2A4
+_08019E04:
+ ldrb r1, [r2, #0x15]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08019E10
+ b _0801A2A4
+_08019E10:
+ ldrb r0, [r2, #0xf]
+ cmp r0, #5
+ bhi _08019E18
+ b _0801A2A4
+_08019E18:
+ movs r0, #0x81
+ strb r0, [r4, #2]
+ ldr r0, [r4, #0x30]
+ movs r1, #0x20
+ orrs r0, r1
+ str r0, [r4, #0x30]
+ movs r0, #0x15
+ strb r0, [r4, #0xc]
+ movs r0, #0x80
+ lsls r0, r0, #0xa
+ str r0, [r2, #0x20]
+ ldrb r1, [r2, #0x10]
+ movs r0, #0x7f
+ ands r0, r1
+ strb r0, [r2, #0x10]
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_08019E3C: .4byte gPlayerState
+_08019E40: .4byte gPlayerEntity
+_08019E44:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #8
+ bl sub_0801A2B0
+ cmp r0, #0
+ bne _08019E54
+ b _0801A2A4
+_08019E54:
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r0, [r0]
+ lsls r1, r7, #1
+ cmp r0, #3
+ bne _08019E84
+ ldr r0, _08019E7C @ =gMapTop
+ adds r0, #4
+ adds r2, r1, r0
+ ldrh r0, [r2]
+ cmp r0, r4
+ bne _08019E84
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r4, _08019E80 @ =0x0000400C
+ adds r0, r0, r4
+ strh r0, [r2]
+ mov sb, r5
+ b _08019E98
+ .align 2, 0
+_08019E7C: .4byte gMapTop
+_08019E80: .4byte 0x0000400C
+_08019E84:
+ mov r0, r8
+ adds r0, #4
+ adds r0, r0, r1
+ ldr r2, _08019EBC @ =gPlayerEntity
+ ldrb r1, [r2, #0x14]
+ lsrs r1, r1, #1
+ ldr r3, _08019EC0 @ =0x0000400C
+ adds r1, r1, r3
+ strh r1, [r0]
+ mov sb, r2
+_08019E98:
+ ldr r2, _08019EC4 @ =gPlayerState
+ movs r3, #0
+ movs r0, #0xa0
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ mov r4, sb
+ strh r3, [r4, #0x2c]
+ strh r3, [r4, #0x30]
+ ldrb r0, [r4, #0x14]
+ lsls r0, r0, #2
+ strb r0, [r4, #0x15]
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_08019EBC: .4byte gPlayerEntity
+_08019EC0: .4byte 0x0000400C
+_08019EC4: .4byte gPlayerState
+_08019EC8:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #2
+ bl sub_0801A2B0
+ cmp r0, #0
+ bne _08019ED8
+ b _0801A2A4
+_08019ED8:
+ lsls r0, r7, #1
+ mov r1, r8
+ adds r1, #4
+ adds r1, r1, r0
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r2, _08019F04 @ =0x0000405B
+ adds r0, r0, r2
+ movs r3, #0
+ strh r0, [r1]
+ ldr r2, _08019F08 @ =gPlayerState
+ movs r0, #0x98
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ strh r3, [r5, #0x2c]
+ strh r3, [r5, #0x30]
+ b _0801A228
+ .align 2, 0
+_08019F04: .4byte 0x0000405B
+_08019F08: .4byte gPlayerState
+_08019F0C:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #0xb
+ bl sub_0801A2B0
+ cmp r0, #0
+ bne _08019F1C
+ b _0801A2A4
+_08019F1C:
+ lsls r0, r7, #1
+ mov r1, r8
+ adds r1, #4
+ adds r1, r1, r0
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r3, _08019F48 @ =0x00004037
+ adds r0, r0, r3
+ movs r3, #0
+ strh r0, [r1]
+ ldr r2, _08019F4C @ =gPlayerState
+ movs r0, #0xa0
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ strh r3, [r5, #0x2c]
+ strh r3, [r5, #0x30]
+ b _0801A228
+ .align 2, 0
+_08019F48: .4byte 0x00004037
+_08019F4C: .4byte gPlayerState
+_08019F50:
+ cmp r3, #0
+ beq _08019F56
+ b _0801A2A4
+_08019F56:
+ ldr r2, _08019FA0 @ =gPlayerState
+ adds r0, r2, #0
+ adds r0, #0x35
+ ldrb r0, [r0]
+ ldrb r1, [r2, #0xd]
+ orrs r0, r1
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08019F6C
+ b _0801A2A4
+_08019F6C:
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ bne _08019F7C
+ b _0801A2A4
+_08019F7C:
+ lsls r1, r7, #1
+ mov r0, r8
+ adds r0, #4
+ adds r0, r0, r1
+ ldr r1, _08019FA4 @ =0x0000403F
+ strh r1, [r0]
+ movs r0, #0x82
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ strh r3, [r5, #0x2c]
+ strh r3, [r5, #0x30]
+ b _0801A228
+ .align 2, 0
+_08019FA0: .4byte gPlayerState
+_08019FA4: .4byte 0x0000403F
+_08019FA8:
+ ldr r0, _0801A07C @ =gPlayerState
+ adds r0, #0x35
+ ldrb r1, [r0]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08019FB8
+ b _0801A2A4
+_08019FB8:
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ bne _08019FC8
+ b _0801A2A4
+_08019FC8:
+ adds r0, r5, #0
+ movs r1, #1
+ bl sub_0801A570
+ adds r7, r0, #0
+ ldr r0, _0801A080 @ =0x0000FFFF
+ cmp r7, r0
+ bne _08019FDA
+ b _0801A2A4
+_08019FDA:
+ lsrs r0, r7, #0xc
+ subs r0, #1
+ mov r8, r0
+ ldr r0, _0801A084 @ =0x00000FFF
+ ands r7, r0
+ movs r4, #0
+ movs r6, #0
+ ldr r5, _0801A088 @ =gPlayerClones
+ mov sb, r5
+_08019FEC:
+ mov r1, sb
+ ldr r0, [r1]
+ movs r1, #1
+ lsls r1, r4
+ ldr r0, [r0, #0x6c]
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A00A
+ ldr r0, [r5]
+ movs r1, #0
+ bl sub_0801A570
+ cmp r0, r7
+ bne _0801A00A
+ adds r6, #1
+_0801A00A:
+ adds r5, #4
+ adds r4, #1
+ cmp r4, #2
+ bls _08019FEC
+ cmp r6, r8
+ bhs _0801A018
+ b _0801A2A4
+_0801A018:
+ movs r0, #7
+ mov r1, r8
+ movs r2, #0
+ bl CreateObject
+ adds r5, r0, #0
+ cmp r5, #0
+ bne _0801A02A
+ b _0801A2A4
+_0801A02A:
+ ldr r3, _0801A08C @ =gPlayerEntity
+ ldrb r0, [r3, #0x14]
+ lsls r0, r0, #2
+ movs r4, #0
+ strb r0, [r5, #0x15]
+ movs r1, #0x3f
+ adds r0, r7, #0
+ ands r0, r1
+ lsls r0, r0, #4
+ adds r0, #8
+ ldr r2, _0801A090 @ =gRoomControls
+ ldrh r1, [r2, #6]
+ adds r1, r1, r0
+ strh r1, [r5, #0x2e]
+ movs r0, #0xfc
+ lsls r0, r0, #4
+ ands r0, r7
+ lsrs r0, r0, #2
+ adds r0, #8
+ ldrh r1, [r2, #8]
+ adds r1, r1, r0
+ strh r1, [r5, #0x32]
+ adds r0, r3, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r5, #0
+ adds r0, #0x38
+ strb r1, [r0]
+ ldr r2, _0801A07C @ =gPlayerState
+ movs r0, #0xa0
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ strh r4, [r3, #0x2c]
+ strh r4, [r3, #0x30]
+ ldrb r0, [r5, #0x15]
+ b _0801A0B6
+ .align 2, 0
+_0801A07C: .4byte gPlayerState
+_0801A080: .4byte 0x0000FFFF
+_0801A084: .4byte 0x00000FFF
+_0801A088: .4byte gPlayerClones
+_0801A08C: .4byte gPlayerEntity
+_0801A090: .4byte gRoomControls
+_0801A094:
+ movs r0, #0xa0
+ strb r0, [r2, #6]
+ b _0801A09E
+_0801A09A:
+ movs r0, #0x90
+ strb r0, [r7, #6]
+_0801A09E:
+ movs r2, #0
+ movs r0, #5
+ strb r0, [r7, #0xc]
+ ldr r0, [r7, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r7, #0x30]
+ mov r3, sb
+ strh r2, [r3, #0x2c]
+ strh r2, [r3, #0x30]
+ ldrb r0, [r3, #0x14]
+ lsls r0, r0, #2
+_0801A0B6:
+ strb r0, [r3, #0x15]
+ movs r0, #1
+ b _0801A2A6
+_0801A0BC:
+ mov r0, r8
+ adds r1, r7, #0
+ movs r2, #8
+ bl sub_0801A458
+ cmp r0, #0
+ bne _0801A0CC
+ b _0801A2A4
+_0801A0CC:
+ lsls r0, r7, #1
+ mov r1, r8
+ adds r1, #4
+ adds r1, r1, r0
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ ldr r4, _0801A0F0 @ =0x0000404B
+ adds r0, r0, r4
+ strh r0, [r1]
+ ldr r2, _0801A0F4 @ =gPlayerState
+ ldr r0, [r2, #0x30]
+ movs r1, #0x80
+ ands r0, r1
+ adds r7, r2, #0
+ cmp r0, #0
+ beq _0801A0F8
+ movs r0, #0xc0
+ b _0801A0FA
+ .align 2, 0
+_0801A0F0: .4byte 0x0000404B
+_0801A0F4: .4byte gPlayerState
+_0801A0F8:
+ movs r0, #0xa0
+_0801A0FA:
+ strb r0, [r7, #6]
+ movs r2, #0
+ movs r0, #5
+ strb r0, [r7, #0xc]
+ ldr r0, [r7, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r7, #0x30]
+ ldr r1, _0801A11C @ =gPlayerEntity
+ strh r2, [r1, #0x2c]
+ strh r2, [r1, #0x30]
+ ldrb r0, [r1, #0x14]
+ lsls r0, r0, #2
+ strb r0, [r1, #0x15]
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_0801A11C: .4byte gPlayerEntity
+_0801A120:
+ ldr r0, _0801A134 @ =gPlayerState
+ adds r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801A12C
+ b _0801A2A4
+_0801A12C:
+ ldr r0, _0801A138 @ =0x00004054
+ adds r1, r5, #0
+ b _0801A28C
+ .align 2, 0
+_0801A134: .4byte gPlayerState
+_0801A138: .4byte 0x00004054
+_0801A13C:
+ ldr r0, _0801A150 @ =gPlayerState
+ adds r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #6
+ beq _0801A148
+ b _0801A2A4
+_0801A148:
+ ldr r0, _0801A154 @ =0x00004054
+ adds r1, r5, #0
+ b _0801A28C
+ .align 2, 0
+_0801A150: .4byte gPlayerState
+_0801A154: .4byte 0x00004054
+_0801A158:
+ subs r7, #1
+_0801A15A:
+ ldr r0, _0801A190 @ =gPlayerState
+ adds r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801A166
+ b _0801A2A4
+_0801A166:
+ mov r0, sb
+ ldrh r1, [r0, #0x32]
+ movs r0, #0xf
+ ands r0, r1
+ cmp r0, #9
+ bgt _0801A174
+ b _0801A2A4
+_0801A174:
+ movs r4, #0
+ ldr r5, _0801A194 @ =gPlayerClones
+_0801A178:
+ ldr r0, [r5]
+ movs r1, #0
+ bl sub_0801A8D0
+ cmp r0, r7
+ bne _0801A186
+ b _0801A288
+_0801A186:
+ adds r5, #4
+ adds r4, #1
+ cmp r4, #2
+ bls _0801A178
+ b _0801A2A4
+ .align 2, 0
+_0801A190: .4byte gPlayerState
+_0801A194: .4byte gPlayerClones
+_0801A198:
+ subs r7, #0x40
+_0801A19A:
+ ldr r0, _0801A1CC @ =gPlayerState
+ adds r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #6
+ beq _0801A1A6
+ b _0801A2A4
+_0801A1A6:
+ mov r2, sb
+ ldrh r1, [r2, #0x2e]
+ movs r0, #0xf
+ ands r0, r1
+ cmp r0, #9
+ ble _0801A2A4
+ movs r4, #0
+ ldr r5, _0801A1D0 @ =gPlayerClones
+_0801A1B6:
+ ldr r0, [r5]
+ movs r1, #6
+ bl sub_0801A8D0
+ cmp r0, r7
+ beq _0801A288
+ adds r5, #4
+ adds r4, #1
+ cmp r4, #2
+ bls _0801A1B6
+ b _0801A2A4
+ .align 2, 0
+_0801A1CC: .4byte gPlayerState
+_0801A1D0: .4byte gPlayerClones
+_0801A1D4:
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A2A4
+ ldr r6, _0801A234 @ =gPlayerState
+ adds r0, r6, #0
+ adds r0, #0x35
+ ldrb r0, [r0]
+ ldrb r1, [r6, #0xd]
+ orrs r0, r1
+ movs r1, #0x80
+ ands r0, r1
+ lsls r0, r0, #0x18
+ lsrs r4, r0, #0x18
+ cmp r4, #0
+ bne _0801A2A4
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r3, #1
+ mov r8, r3
+ mov r0, r8
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A2A4
+ ldr r0, _0801A238 @ =0x00004074
+ adds r1, r5, #0
+ adds r1, #0x38
+ ldrb r2, [r1]
+ adds r1, r7, #0
+ bl SetTile
+ movs r0, #0xa0
+ strb r0, [r6, #6]
+ movs r0, #5
+ strb r0, [r6, #0xc]
+ ldr r0, [r6, #0x30]
+ mov r1, r8
+ orrs r0, r1
+ str r0, [r6, #0x30]
+ strh r4, [r5, #0x2c]
+ strh r4, [r5, #0x30]
+_0801A228:
+ ldrb r0, [r5, #0x14]
+ lsls r0, r0, #2
+ strb r0, [r5, #0x15]
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_0801A234: .4byte gPlayerState
+_0801A238: .4byte 0x00004074
+_0801A23C:
+ cmp r3, #4
+ bne _0801A2A4
+ ldr r1, _0801A280 @ =gPlayerState
+ adds r0, r1, #0
+ adds r0, #0x35
+ ldrb r0, [r0]
+ ldrb r1, [r1, #0xd]
+ orrs r0, r1
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ bne _0801A2A4
+ adds r0, r5, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A2A4
+ ldr r0, _0801A284 @ =0x00004074
+ adds r4, r5, #0
+ adds r4, #0x38
+ ldrb r2, [r4]
+ adds r1, r7, #0
+ bl SetTile
+ ldrb r2, [r4]
+ movs r0, #0xd
+ adds r1, r7, #0
+ bl sub_080001D0
+ movs r0, #1
+ b _0801A2A6
+ .align 2, 0
+_0801A280: .4byte gPlayerState
+_0801A284: .4byte 0x00004074
+_0801A288:
+ ldr r0, _0801A29C @ =0x00004059
+ ldr r1, _0801A2A0 @ =gPlayerEntity
+_0801A28C:
+ adds r1, #0x38
+ ldrb r2, [r1]
+ adds r1, r7, #0
+ bl SetTile
+ movs r0, #4
+ b _0801A2A6
+ .align 2, 0
+_0801A29C: .4byte 0x00004059
+_0801A2A0: .4byte gPlayerEntity
+_0801A2A4:
+ movs r0, #0
+_0801A2A6:
+ pop {r3, r4}
+ mov r8, r3
+ mov sb, r4
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_080197D4.inc b/asm/non_matching/beanstalkSubtask/sub_080197D4.inc
new file mode 100644
index 00000000..cbf77d93
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_080197D4.inc
@@ -0,0 +1,54 @@
+ .syntax unified
+ push {r4, r5, lr}
+ adds r4, r0, #0
+ movs r5, #0x80
+ lsls r5, r5, #0x18
+_080197DC:
+ ldr r3, [r4, #4]
+ cmp r3, #0
+ beq _08019824
+ ldr r1, [r4]
+ ldr r0, _08019808 @ =0x7FFFFFFF
+ ands r1, r0
+ ldr r0, _0801980C @ =gMapData
+ adds r1, r1, r0
+ ldr r2, [r4, #8]
+ adds r0, r2, #0
+ ands r0, r5
+ cmp r0, #0
+ beq _0801981A
+ lsrs r0, r3, #0x18
+ cmp r0, #6
+ bne _08019810
+ adds r0, r1, #0
+ adds r1, r3, #0
+ bl LZ77UnCompVram
+ b _0801982E
+ .align 2, 0
+_08019808: .4byte 0x7FFFFFFF
+_0801980C: .4byte gMapData
+_08019810:
+ adds r0, r1, #0
+ adds r1, r3, #0
+ bl LZ77UnCompWram
+ b _0801982E
+_0801981A:
+ adds r0, r1, #0
+ adds r1, r3, #0
+ bl MemCopy
+ b _0801982E
+_08019824:
+ ldrh r0, [r4]
+ bl LoadPaletteGroup
+ bl sub_080533CC
+_0801982E:
+ adds r4, #0xc
+ adds r0, r4, #0
+ subs r0, #0xc
+ ldr r0, [r0]
+ ands r0, r5
+ cmp r0, #0
+ bne _080197DC
+ pop {r4, r5, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc
new file mode 100644
index 00000000..8c19bbe9
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc
@@ -0,0 +1,95 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ adds r6, r2, #0
+ ldr r1, _0801A31C @ =gUnk_080B4488
+ ldr r2, _0801A320 @ =gPlayerEntity
+ ldrb r0, [r2, #0x14]
+ lsrs r0, r0, #1
+ lsls r0, r0, #1
+ adds r0, r0, r1
+ ldrh r3, [r0]
+ ldr r1, _0801A324 @ =gPlayerState
+ adds r0, r1, #0
+ adds r0, #0x35
+ ldrb r0, [r0]
+ ldrb r1, [r1, #0xd]
+ orrs r0, r1
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ bne _0801A36C
+ adds r0, r2, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A36C
+ adds r0, r4, r3
+ lsls r0, r0, #0x10
+ lsrs r4, r0, #0x10
+ adds r0, r2, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ bl sub_080B1B54
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ adds r1, r0, #0
+ cmp r0, #0x52
+ beq _0801A36C
+ cmp r0, #0x52
+ bgt _0801A328
+ cmp r0, #0x26
+ blt _0801A32C
+ cmp r0, #0x27
+ ble _0801A36C
+ cmp r0, #0x29
+ beq _0801A36C
+ b _0801A32C
+ .align 2, 0
+_0801A31C: .4byte gUnk_080B4488
+_0801A320: .4byte gPlayerEntity
+_0801A324: .4byte gPlayerState
+_0801A328:
+ cmp r1, #0x74
+ beq _0801A36C
+_0801A32C:
+ ldr r0, _0801A364 @ =0x00002004
+ adds r3, r5, r0
+ adds r0, r3, r4
+ ldrb r0, [r0]
+ cmp r0, #0x28
+ beq _0801A36C
+ movs r1, #0x3f
+ ands r1, r4
+ ldr r0, _0801A368 @ =gRoomControls
+ lsls r1, r1, #4
+ ldrh r2, [r0, #6]
+ adds r1, r1, r2
+ lsrs r2, r4, #6
+ lsls r2, r2, #4
+ ldrh r0, [r0, #8]
+ adds r2, r2, r0
+ lsls r1, r1, #0x10
+ asrs r1, r1, #0x10
+ lsls r2, r2, #0x10
+ asrs r2, r2, #0x10
+ adds r0, r3, #0
+ adds r3, r6, #0
+ bl IsTileCollision
+ cmp r0, #0
+ bne _0801A36C
+ movs r0, #1
+ b _0801A36E
+ .align 2, 0
+_0801A364: .4byte 0x00002004
+_0801A368: .4byte gRoomControls
+_0801A36C:
+ movs r0, #0
+_0801A36E:
+ pop {r4, r5, r6, pc}
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A370.inc b/asm/non_matching/beanstalkSubtask/sub_0801A370.inc
new file mode 100644
index 00000000..5bbea38e
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A370.inc
@@ -0,0 +1,120 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ mov r8, r0
+ adds r4, r1, #0
+ ldr r5, _0801A3C8 @ =gPlayerEntity
+ ldrb r1, [r5, #0x14]
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ beq _0801A44E
+ bl sub_0801A4F8
+ cmp r0, #0
+ beq _0801A44E
+ movs r0, #2
+ bl GetLayerByIndex
+ adds r7, r0, #0
+ ldr r1, _0801A3CC @ =gUnk_080B4488
+ ldrb r0, [r5, #0x14]
+ lsrs r0, r0, #1
+ lsls r0, r0, #1
+ adds r0, r0, r1
+ movs r1, #0
+ ldrsh r6, [r0, r1]
+ adds r4, r4, r6
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ adds r1, r0, #0
+ ldr r0, _0801A3D0 @ =0x0000402B
+ cmp r1, r0
+ beq _0801A3D4
+ cmp r1, r0
+ blo _0801A3D6
+ adds r0, #4
+ cmp r1, r0
+ bhi _0801A3D6
+_0801A3C4:
+ movs r0, #1
+ b _0801A450
+ .align 2, 0
+_0801A3C8: .4byte gPlayerEntity
+_0801A3CC: .4byte gUnk_080B4488
+_0801A3D0: .4byte 0x0000402B
+_0801A3D4:
+ adds r4, r4, r6
+_0801A3D6:
+ adds r0, r7, r4
+ ldr r1, _0801A40C @ =0x00001F84
+ adds r0, r0, r1
+ ldrb r0, [r0]
+ cmp r0, #0x46
+ beq _0801A44E
+ ldr r0, _0801A410 @ =gPlayerEntity
+ adds r0, #0x38
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ bl sub_080B1B54
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ cmp r0, #0x52
+ beq _0801A44E
+ cmp r0, #0x52
+ bgt _0801A414
+ cmp r0, #0x26
+ blt _0801A418
+ cmp r0, #0x27
+ ble _0801A44E
+ cmp r0, #0x29
+ beq _0801A44E
+ b _0801A418
+ .align 2, 0
+_0801A40C: .4byte 0x00001F84
+_0801A410: .4byte gPlayerEntity
+_0801A414:
+ cmp r0, #0x74
+ beq _0801A44E
+_0801A418:
+ ldr r0, _0801A434 @ =0x00002004
+ add r0, r8
+ adds r0, r0, r4
+ ldrb r0, [r0]
+ adds r1, r0, #0
+ cmp r0, #0xa
+ beq _0801A446
+ cmp r0, #0xa
+ bgt _0801A438
+ cmp r0, #0
+ beq _0801A3C4
+ cmp r0, #5
+ beq _0801A440
+ b _0801A44E
+ .align 2, 0
+_0801A434: .4byte 0x00002004
+_0801A438:
+ cmp r1, #0x44
+ beq _0801A446
+ cmp r1, #0x45
+ bne _0801A44E
+_0801A440:
+ cmp r6, #1
+ bne _0801A44E
+ b _0801A3C4
+_0801A446:
+ movs r0, #1
+ rsbs r0, r0, #0
+ cmp r6, r0
+ beq _0801A3C4
+_0801A44E:
+ movs r0, #0
+_0801A450:
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc b/asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc
new file mode 100644
index 00000000..04b7188c
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc
@@ -0,0 +1,63 @@
+ .syntax unified
+ push {r4, r5, lr}
+ ldr r4, _0801A538 @ =gPlayerState
+ ldr r0, [r4, #0x30]
+ movs r5, #0x80
+ ands r0, r5
+ cmp r0, #0
+ beq _0801A544
+ movs r0, #0x45
+ bl GetInventoryValue
+ cmp r0, #1
+ bne _0801A564
+ ldrb r1, [r4, #0xd]
+ adds r0, r5, #0
+ ands r0, r1
+ cmp r0, #0
+ bne _0801A564
+ ldr r2, _0801A53C @ =gPlayerEntity
+ ldrb r0, [r2, #0x15]
+ cmp r1, r0
+ bne _0801A564
+ ldrb r0, [r2, #0x15]
+ adds r0, #4
+ movs r1, #0x18
+ ands r0, r1
+ ldr r1, _0801A540 @ =gUnk_080B44A0
+ lsrs r0, r0, #2
+ adds r0, r0, r1
+ ldrh r1, [r0]
+ ldrh r0, [r2, #0x2a]
+ b _0801A55E
+ .align 2, 0
+_0801A538: .4byte gPlayerState
+_0801A53C: .4byte gPlayerEntity
+_0801A540: .4byte gUnk_080B44A0
+_0801A544:
+ adds r0, r4, #0
+ adds r0, #0x35
+ ldrb r0, [r0]
+ ldrb r1, [r4, #0xd]
+ orrs r0, r1
+ movs r1, #0x80
+ ands r0, r1
+ cmp r0, #0
+ bne _0801A564
+ ldr r0, _0801A568 @ =gPlayerEntity
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #1
+_0801A55E:
+ ands r0, r1
+ cmp r0, #0
+ bne _0801A56C
+_0801A564:
+ movs r0, #0
+ b _0801A56E
+ .align 2, 0
+_0801A568: .4byte gPlayerEntity
+_0801A56C:
+ movs r0, #1
+_0801A56E:
+ pop {r4, r5, pc}
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A570.inc b/asm/non_matching/beanstalkSubtask/sub_0801A570.inc
new file mode 100644
index 00000000..e7e7effd
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A570.inc
@@ -0,0 +1,454 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ adds r6, r0, #0
+ mov sl, r1
+ cmp r6, #0
+ bne _0801A58C
+ ldr r0, _0801A588 @ =0x0000FFFF
+ b _0801A8C2
+ .align 2, 0
+_0801A588: .4byte 0x0000FFFF
+_0801A58C:
+ adds r4, r6, #0
+ adds r4, #0x38
+ ldrb r0, [r4]
+ bl GetLayerByIndex
+ mov r8, r0
+ ldr r0, _0801A668 @ =0x00005004
+ add r0, r8
+ mov ip, r0
+ movs r5, #4
+ movs r7, #2
+ ldrb r0, [r6, #0x14]
+ lsrs r0, r0, #1
+ mov sb, r4
+ cmp r0, #1
+ beq _0801A678
+ cmp r0, #1
+ ble _0801A5BC
+ cmp r0, #2
+ bne _0801A5B6
+ b _0801A73C
+_0801A5B6:
+ cmp r0, #3
+ bne _0801A5BC
+ b _0801A7FC
+_0801A5BC:
+ movs r1, #0x2e
+ ldrsh r0, [r6, r1]
+ ldr r2, _0801A66C @ =gRoomControls
+ ldrh r1, [r2, #6]
+ subs r0, r0, r1
+ asrs r4, r0, #4
+ movs r3, #0x3f
+ ands r4, r3
+ movs r1, #0x32
+ ldrsh r0, [r6, r1]
+ ldrh r1, [r2, #8]
+ adds r1, #0xa
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r3
+ lsls r0, r0, #6
+ orrs r4, r0
+ mov r2, r8
+ adds r2, #4
+ movs r3, #0xdc
+ lsls r3, r3, #2
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A5EA:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ add r0, ip
+ ldrh r0, [r0]
+ cmp r0, r3
+ beq _0801A600
+ subs r1, #2
+ subs r4, #1
+ subs r5, #1
+ cmp r5, #0
+ bne _0801A5EA
+_0801A600:
+ subs r4, #0x40
+ movs r3, #0xdd
+ lsls r3, r3, #2
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A60A:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ add r0, ip
+ ldrh r0, [r0]
+ cmp r0, r3
+ bne _0801A620
+ adds r7, #1
+ subs r1, #0x80
+ subs r4, #0x40
+ cmp r7, #3
+ bls _0801A60A
+_0801A620:
+ mov r2, sl
+ cmp r2, #0
+ bne _0801A628
+ b _0801A8C0
+_0801A628:
+ mov r0, sb
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ adds r5, r0, #0
+ ldr r1, _0801A670 @ =0xFFFFFC97
+ adds r0, r5, r1
+ cmp r0, #1
+ bls _0801A63E
+ b _0801A8B4
+_0801A63E:
+ ldr r2, _0801A674 @ =0x00001FC4
+ adds r0, r4, r2
+ mov r2, r8
+ adds r1, r2, r0
+ movs r5, #0
+ cmp r5, r7
+ blo _0801A64E
+ b _0801A8B6
+_0801A64E:
+ ldrb r0, [r1]
+ cmp r0, #0
+ beq _0801A656
+ b _0801A8B4
+_0801A656:
+ adds r5, #1
+ cmp r5, r7
+ blo _0801A65E
+ b _0801A8B6
+_0801A65E:
+ adds r0, r1, r5
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801A656
+ b _0801A8B4
+ .align 2, 0
+_0801A668: .4byte 0x00005004
+_0801A66C: .4byte gRoomControls
+_0801A670: .4byte 0xFFFFFC97
+_0801A674: .4byte 0x00001FC4
+_0801A678:
+ movs r0, #0x2e
+ ldrsh r1, [r6, r0]
+ ldr r3, _0801A730 @ =gRoomControls
+ ldrh r0, [r3, #6]
+ subs r0, #0xa
+ subs r1, r1, r0
+ asrs r4, r1, #4
+ movs r2, #0x3f
+ ands r4, r2
+ movs r1, #0x32
+ ldrsh r0, [r6, r1]
+ ldrh r1, [r3, #8]
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r2
+ lsls r0, r0, #6
+ orrs r4, r0
+ mov r2, r8
+ adds r2, #4
+ mov r3, ip
+ movs r6, #0xdc
+ lsls r6, r6, #2
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A6A8:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ adds r0, r3, r0
+ ldrh r0, [r0]
+ cmp r0, r6
+ beq _0801A6BE
+ adds r1, #0x80
+ adds r4, #0x40
+ subs r5, #1
+ cmp r5, #0
+ bne _0801A6A8
+_0801A6BE:
+ subs r4, #0x40
+ movs r3, #0xdd
+ lsls r3, r3, #2
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A6C8:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ add r0, ip
+ ldrh r0, [r0]
+ cmp r0, r3
+ bne _0801A6DE
+ adds r7, #1
+ subs r1, #0x80
+ subs r4, #0x40
+ cmp r7, #3
+ bls _0801A6C8
+_0801A6DE:
+ mov r2, sl
+ cmp r2, #0
+ bne _0801A6E6
+ b _0801A8C0
+_0801A6E6:
+ mov r0, sb
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ adds r5, r0, #0
+ ldr r0, _0801A734 @ =0x00000369
+ cmp r5, r0
+ beq _0801A700
+ adds r0, #4
+ cmp r5, r0
+ beq _0801A700
+ b _0801A8B4
+_0801A700:
+ adds r0, r4, r7
+ ldr r1, _0801A738 @ =0x00002004
+ adds r0, r0, r1
+ mov r2, r8
+ adds r1, r2, r0
+ movs r5, #0
+ cmp r5, r7
+ blo _0801A712
+ b _0801A8B6
+_0801A712:
+ ldrb r0, [r1]
+ cmp r0, #0
+ beq _0801A71A
+ b _0801A8B4
+_0801A71A:
+ adds r5, #1
+ cmp r5, r7
+ blo _0801A722
+ b _0801A8B6
+_0801A722:
+ lsls r0, r5, #6
+ adds r0, r0, r1
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801A71A
+ b _0801A8B4
+ .align 2, 0
+_0801A730: .4byte gRoomControls
+_0801A734: .4byte 0x00000369
+_0801A738: .4byte 0x00002004
+_0801A73C:
+ movs r1, #0x2e
+ ldrsh r0, [r6, r1]
+ ldr r2, _0801A7E8 @ =gRoomControls
+ ldrh r1, [r2, #6]
+ subs r0, r0, r1
+ asrs r4, r0, #4
+ movs r3, #0x3f
+ ands r4, r3
+ movs r1, #0x32
+ ldrsh r0, [r6, r1]
+ ldrh r1, [r2, #8]
+ subs r1, #0xa
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r3
+ lsls r0, r0, #6
+ orrs r4, r0
+ mov r2, r8
+ adds r2, #4
+ mov r3, ip
+ ldr r6, _0801A7EC @ =0x0000036F
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A76A:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ adds r0, r3, r0
+ ldrh r0, [r0]
+ cmp r0, r6
+ beq _0801A780
+ adds r1, #2
+ adds r4, #1
+ subs r5, #1
+ cmp r5, #0
+ bne _0801A76A
+_0801A780:
+ subs r4, #1
+ ldr r3, _0801A7F0 @ =0x00000372
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A788:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ add r0, ip
+ ldrh r0, [r0]
+ cmp r0, r3
+ bne _0801A79E
+ adds r7, #1
+ subs r1, #2
+ subs r4, #1
+ cmp r7, #3
+ bls _0801A788
+_0801A79E:
+ mov r2, sl
+ cmp r2, #0
+ bne _0801A7A6
+ b _0801A8C0
+_0801A7A6:
+ mov r0, sb
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ adds r5, r0, #0
+ ldr r0, _0801A7F4 @ =0x00000369
+ cmp r5, r0
+ beq _0801A7BE
+ adds r0, #2
+ cmp r5, r0
+ bne _0801A8B4
+_0801A7BE:
+ lsls r0, r7, #6
+ adds r0, r4, r0
+ ldr r1, _0801A7F8 @ =0x00002004
+ adds r0, r0, r1
+ mov r2, r8
+ adds r1, r2, r0
+ movs r5, #0
+ cmp r5, r7
+ bhs _0801A8B6
+ ldrb r0, [r1]
+ cmp r0, #0
+ bne _0801A8B4
+_0801A7D6:
+ adds r5, #1
+ cmp r5, r7
+ bhs _0801A8B6
+ adds r0, r1, r5
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801A7D6
+ b _0801A8B4
+ .align 2, 0
+_0801A7E8: .4byte gRoomControls
+_0801A7EC: .4byte 0x0000036F
+_0801A7F0: .4byte 0x00000372
+_0801A7F4: .4byte 0x00000369
+_0801A7F8: .4byte 0x00002004
+_0801A7FC:
+ movs r0, #0x2e
+ ldrsh r1, [r6, r0]
+ ldr r3, _0801A890 @ =gRoomControls
+ ldrh r0, [r3, #6]
+ adds r0, #0xa
+ subs r1, r1, r0
+ asrs r4, r1, #4
+ movs r2, #0x3f
+ ands r4, r2
+ movs r1, #0x32
+ ldrsh r0, [r6, r1]
+ ldrh r1, [r3, #8]
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r2
+ lsls r0, r0, #6
+ orrs r4, r0
+ mov r2, r8
+ adds r2, #4
+ mov r3, ip
+ ldr r6, _0801A894 @ =0x0000036F
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A82A:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ adds r0, r3, r0
+ ldrh r0, [r0]
+ cmp r0, r6
+ beq _0801A840
+ subs r1, #0x80
+ subs r4, #0x40
+ subs r5, #1
+ cmp r5, #0
+ bne _0801A82A
+_0801A840:
+ subs r4, #1
+ ldr r3, _0801A898 @ =0x00000372
+ lsls r0, r4, #1
+ adds r1, r0, r2
+_0801A848:
+ ldrh r0, [r1]
+ lsls r0, r0, #1
+ add r0, ip
+ ldrh r0, [r0]
+ cmp r0, r3
+ bne _0801A85E
+ adds r7, #1
+ subs r1, #2
+ subs r4, #1
+ cmp r7, #3
+ bls _0801A848
+_0801A85E:
+ mov r2, sl
+ cmp r2, #0
+ beq _0801A8C0
+ mov r0, sb
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl GetTileType
+ adds r5, r0, #0
+ ldr r0, _0801A89C @ =0x00000369
+ cmp r5, r0
+ beq _0801A87C
+ adds r0, #3
+ cmp r5, r0
+ bne _0801A8B4
+_0801A87C:
+ ldr r1, _0801A8A0 @ =0x00002003
+ adds r0, r4, r1
+ mov r2, r8
+ adds r1, r2, r0
+ movs r5, #0
+ cmp r5, r7
+ bhs _0801A8B6
+ ldrb r0, [r1]
+ b _0801A8B0
+ .align 2, 0
+_0801A890: .4byte gRoomControls
+_0801A894: .4byte 0x0000036F
+_0801A898: .4byte 0x00000372
+_0801A89C: .4byte 0x00000369
+_0801A8A0: .4byte 0x00002003
+_0801A8A4:
+ adds r5, #1
+ cmp r5, r7
+ bhs _0801A8B6
+ lsls r0, r5, #6
+ adds r0, r0, r1
+ ldrb r0, [r0]
+_0801A8B0:
+ cmp r0, #0
+ beq _0801A8A4
+_0801A8B4:
+ ldr r4, _0801A8CC @ =0x0000FFFF
+_0801A8B6:
+ mov r0, sl
+ cmp r0, #0
+ beq _0801A8C0
+ lsls r0, r7, #0xc
+ orrs r4, r0
+_0801A8C0:
+ adds r0, r4, #0
+_0801A8C2:
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801A8CC: .4byte 0x0000FFFF
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc
new file mode 100644
index 00000000..2798f507
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc
@@ -0,0 +1,92 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ cmp r5, #0
+ beq _0801A978
+ adds r0, r5, #0
+ adds r0, #0x38
+ ldrb r0, [r0]
+ bl GetLayerByIndex
+ adds r6, r0, #4
+ cmp r4, #0
+ bne _0801A92C
+ movs r1, #0x2e
+ ldrsh r0, [r5, r1]
+ ldr r2, _0801A91C @ =gRoomControls
+ ldrh r1, [r2, #6]
+ subs r0, r0, r1
+ asrs r4, r0, #4
+ movs r3, #0x3f
+ ands r4, r3
+ movs r1, #0x32
+ ldrsh r0, [r5, r1]
+ ldrh r1, [r2, #8]
+ adds r1, #8
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r3
+ lsls r0, r0, #6
+ orrs r4, r0
+ lsls r0, r4, #1
+ adds r0, r0, r6
+ ldrh r1, [r0]
+ ldr r0, _0801A920 @ =0x00004055
+ cmp r1, r0
+ bne _0801A924
+ subs r0, r4, #1
+ b _0801A97A
+ .align 2, 0
+_0801A91C: .4byte gRoomControls
+_0801A920: .4byte 0x00004055
+_0801A924:
+ ldr r0, _0801A928 @ =0x00004056
+ b _0801A96A
+ .align 2, 0
+_0801A928: .4byte 0x00004056
+_0801A92C:
+ movs r0, #0x2e
+ ldrsh r1, [r5, r0]
+ ldr r3, _0801A960 @ =gRoomControls
+ ldrh r0, [r3, #6]
+ adds r0, #8
+ subs r1, r1, r0
+ asrs r4, r1, #4
+ movs r2, #0x3f
+ ands r4, r2
+ movs r1, #0x32
+ ldrsh r0, [r5, r1]
+ ldrh r1, [r3, #8]
+ subs r0, r0, r1
+ asrs r0, r0, #4
+ ands r0, r2
+ lsls r0, r0, #6
+ orrs r4, r0
+ lsls r0, r4, #1
+ adds r0, r0, r6
+ ldrh r1, [r0]
+ ldr r0, _0801A964 @ =0x00004057
+ cmp r1, r0
+ bne _0801A968
+ adds r0, r4, #0
+ subs r0, #0x40
+ b _0801A97A
+ .align 2, 0
+_0801A960: .4byte gRoomControls
+_0801A964: .4byte 0x00004057
+_0801A968:
+ ldr r0, _0801A974 @ =0x00004058
+_0801A96A:
+ cmp r1, r0
+ bne _0801A978
+ adds r0, r4, #0
+ b _0801A97A
+ .align 2, 0
+_0801A974: .4byte 0x00004058
+_0801A978:
+ ldr r0, _0801A97C @ =0x0000FFFF
+_0801A97A:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801A97C: .4byte 0x0000FFFF
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc
new file mode 100644
index 00000000..70e4a2b8
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc
@@ -0,0 +1,55 @@
+ .syntax unified
+ push {r4, r5, lr}
+ adds r3, r0, #0
+ adds r4, r2, #0
+ movs r2, #0
+ ldr r5, _0801AA0C @ =0xFFFFFCA0
+ adds r0, r1, r5
+ cmp r0, #4
+ bhi _0801AA40
+ lsls r0, r0, #2
+ ldr r1, _0801AA10 @ =_0801AA14
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0801AA0C: .4byte 0xFFFFFCA0
+_0801AA10: .4byte _0801AA14
+_0801AA14: @ jump table
+ .4byte _0801AA44 @ case 0
+ .4byte _0801AA28 @ case 1
+ .4byte _0801AA34 @ case 2
+ .4byte _0801AA3A @ case 3
+ .4byte _0801AA2E @ case 4
+_0801AA28:
+ cmp r3, #0
+ bne _0801AA40
+ b _0801AA44
+_0801AA2E:
+ cmp r3, #8
+ bne _0801AA40
+ b _0801AA44
+_0801AA34:
+ cmp r3, #0x10
+ bne _0801AA40
+ b _0801AA44
+_0801AA3A:
+ cmp r3, #0x18
+ bne _0801AA40
+ movs r2, #1
+_0801AA40:
+ cmp r2, #0
+ beq _0801AA54
+_0801AA44:
+ ldr r0, _0801AA50 @ =gPlayerEntity
+ adds r1, r4, #0
+ adds r2, r3, #0
+ bl sub_0801AA58
+ b _0801AA56
+ .align 2, 0
+_0801AA50: .4byte gPlayerEntity
+_0801AA54:
+ movs r0, #0
+_0801AA56:
+ pop {r4, r5, pc}
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AA58.inc b/asm/non_matching/beanstalkSubtask/sub_0801AA58.inc
new file mode 100644
index 00000000..4e2f68f8
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801AA58.inc
@@ -0,0 +1,88 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ adds r6, r0, #0
+ adds r5, r1, #0
+ adds r7, r2, #0
+ movs r0, #0x38
+ adds r0, r0, r6
+ mov r8, r0
+ ldrb r0, [r0]
+ bl GetLayerByIndex
+ ldr r2, _0801AAF0 @ =gUnk_080B4488
+ lsrs r1, r7, #3
+ lsls r1, r1, #1
+ adds r1, r1, r2
+ movs r2, #0
+ ldrsh r1, [r1, r2]
+ adds r1, r5, r1
+ ldr r2, _0801AAF4 @ =0x00002004
+ adds r0, r0, r2
+ adds r0, r0, r1
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _0801AA94
+ subs r0, #0x20
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0x1f
+ bhi _0801AB00
+_0801AA94:
+ movs r0, #7
+ movs r1, #0
+ movs r2, #0
+ bl CreateObject
+ adds r4, r0, #0
+ cmp r4, #0
+ beq _0801AB00
+ movs r3, #0
+ strb r7, [r4, #0x15]
+ movs r1, #0x3f
+ adds r0, r5, #0
+ ands r0, r1
+ lsls r0, r0, #4
+ adds r0, #8
+ ldr r2, _0801AAF8 @ =gRoomControls
+ ldrh r1, [r2, #6]
+ adds r1, r1, r0
+ strh r1, [r4, #0x2e]
+ movs r0, #0xfc
+ lsls r0, r0, #4
+ ands r0, r5
+ lsrs r0, r0, #2
+ adds r0, #8
+ ldrh r1, [r2, #8]
+ adds r1, r1, r0
+ strh r1, [r4, #0x32]
+ mov r0, r8
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ adds r0, #0x38
+ strb r1, [r0]
+ ldr r2, _0801AAFC @ =gPlayerState
+ movs r0, #0xa0
+ strb r0, [r2, #6]
+ movs r0, #5
+ strb r0, [r2, #0xc]
+ ldr r0, [r2, #0x30]
+ movs r1, #1
+ orrs r0, r1
+ str r0, [r2, #0x30]
+ strh r3, [r6, #0x2c]
+ strh r3, [r6, #0x30]
+ strb r7, [r6, #0x15]
+ movs r0, #1
+ b _0801AB02
+ .align 2, 0
+_0801AAF0: .4byte gUnk_080B4488
+_0801AAF4: .4byte 0x00002004
+_0801AAF8: .4byte gRoomControls
+_0801AAFC: .4byte gPlayerState
+_0801AB00:
+ movs r0, #0
+_0801AB02:
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AB08.inc b/asm/non_matching/beanstalkSubtask/sub_0801AB08.inc
new file mode 100644
index 00000000..5ddd6ca2
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801AB08.inc
@@ -0,0 +1,183 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #8
+ adds r5, r0, #0
+ mov r8, r1
+ ldr r0, _0801AB4C @ =gMapBottom
+ movs r1, #2
+ cmp r8, r0
+ bne _0801AB22
+ movs r1, #1
+_0801AB22:
+ lsls r2, r1, #0xc
+ ldr r7, _0801AB50 @ =0x00003004
+ add r7, r8
+ mov r6, r8
+ adds r6, #4
+ movs r0, #0
+ ldr r1, _0801AB54 @ =0x00003FFF
+ mov sb, r1
+_0801AB32:
+ movs r3, #0
+ mov sl, r3
+ adds r0, #1
+ str r0, [sp]
+ movs r0, #0x80
+ lsls r0, r0, #1
+ adds r4, r5, r0
+_0801AB40:
+ ldrh r0, [r6]
+ cmp r0, sb
+ bhi _0801AB58
+ lsls r0, r0, #2
+ b _0801AB64
+ .align 2, 0
+_0801AB4C: .4byte gMapBottom
+_0801AB50: .4byte 0x00003004
+_0801AB54: .4byte 0x00003FFF
+_0801AB58:
+ ldrh r1, [r7]
+ adds r0, r2, #0
+ str r2, [sp, #4]
+ bl sub_0801AC68
+ ldr r2, [sp, #4]
+_0801AB64:
+ lsls r0, r0, #1
+ ldr r1, _0801AB8C @ =0x00007004
+ adds r0, r0, r1
+ mov r3, r8
+ adds r1, r3, r0
+ ldrh r0, [r1]
+ strh r0, [r5]
+ ldrh r0, [r1, #2]
+ strh r0, [r5, #2]
+ ldrh r0, [r1, #4]
+ strh r0, [r4]
+ ldrh r0, [r1, #6]
+ strh r0, [r4, #2]
+ adds r4, #4
+ adds r5, #4
+ ldrh r0, [r6, #2]
+ cmp r0, sb
+ bhi _0801AB90
+ lsls r0, r0, #2
+ b _0801AB9C
+ .align 2, 0
+_0801AB8C: .4byte 0x00007004
+_0801AB90:
+ adds r0, r2, #1
+ ldrh r1, [r7, #2]
+ str r2, [sp, #4]
+ bl sub_0801AC68
+ ldr r2, [sp, #4]
+_0801AB9C:
+ lsls r0, r0, #1
+ ldr r1, _0801ABC4 @ =0x00007004
+ adds r0, r0, r1
+ mov r3, r8
+ adds r1, r3, r0
+ ldrh r0, [r1]
+ strh r0, [r5]
+ ldrh r0, [r1, #2]
+ strh r0, [r5, #2]
+ ldrh r0, [r1, #4]
+ strh r0, [r4]
+ ldrh r0, [r1, #6]
+ strh r0, [r4, #2]
+ adds r4, #4
+ adds r5, #4
+ ldrh r0, [r6, #4]
+ cmp r0, sb
+ bhi _0801ABC8
+ lsls r0, r0, #2
+ b _0801ABD4
+ .align 2, 0
+_0801ABC4: .4byte 0x00007004
+_0801ABC8:
+ adds r0, r2, #2
+ ldrh r1, [r7, #4]
+ str r2, [sp, #4]
+ bl sub_0801AC68
+ ldr r2, [sp, #4]
+_0801ABD4:
+ lsls r0, r0, #1
+ ldr r1, _0801ABFC @ =0x00007004
+ adds r0, r0, r1
+ mov r3, r8
+ adds r1, r3, r0
+ ldrh r0, [r1]
+ strh r0, [r5]
+ ldrh r0, [r1, #2]
+ strh r0, [r5, #2]
+ ldrh r0, [r1, #4]
+ strh r0, [r4]
+ ldrh r0, [r1, #6]
+ strh r0, [r4, #2]
+ adds r4, #4
+ adds r5, #4
+ ldrh r0, [r6, #6]
+ cmp r0, sb
+ bhi _0801AC00
+ lsls r0, r0, #2
+ b _0801AC0C
+ .align 2, 0
+_0801ABFC: .4byte 0x00007004
+_0801AC00:
+ adds r0, r2, #3
+ ldrh r1, [r7, #6]
+ str r2, [sp, #4]
+ bl sub_0801AC68
+ ldr r2, [sp, #4]
+_0801AC0C:
+ lsls r0, r0, #1
+ ldr r1, _0801AC64 @ =0x00007004
+ adds r0, r0, r1
+ mov r3, r8
+ adds r1, r3, r0
+ ldrh r0, [r1]
+ strh r0, [r5]
+ ldrh r0, [r1, #2]
+ strh r0, [r5, #2]
+ ldrh r0, [r1, #4]
+ strh r0, [r4]
+ ldrh r0, [r1, #6]
+ strh r0, [r4, #2]
+ adds r4, #4
+ adds r5, #4
+ adds r6, #8
+ adds r7, #8
+ adds r0, r2, #4
+ lsls r0, r0, #0x10
+ lsrs r2, r0, #0x10
+ mov r0, sl
+ adds r0, #1
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ mov sl, r0
+ cmp r0, #0xf
+ bhi _0801AC44
+ b _0801AB40
+_0801AC44:
+ movs r0, #0x80
+ lsls r0, r0, #1
+ adds r5, r5, r0
+ ldr r1, [sp]
+ lsls r0, r1, #0x10
+ lsrs r0, r0, #0x10
+ cmp r0, #0x3f
+ bhi _0801AC56
+ b _0801AB32
+_0801AC56:
+ add sp, #8
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801AC64: .4byte 0x00007004
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AC68.inc b/asm/non_matching/beanstalkSubtask/sub_0801AC68.inc
new file mode 100644
index 00000000..33879685
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801AC68.inc
@@ -0,0 +1,29 @@
+ .syntax unified
+ push {r4, r5, lr}
+ adds r4, r0, #0
+ ldr r2, _0801AC84 @ =gUnk_0200B240
+ ldr r0, _0801AC88 @ =gRoomVars
+ ldrh r3, [r0, #0xe]
+ movs r0, #0
+ cmp r0, r3
+ bhs _0801AC94
+_0801AC78:
+ ldrh r5, [r2]
+ cmp r4, r5
+ bne _0801AC8C
+ ldrh r0, [r2, #2]
+ lsls r0, r0, #2
+ b _0801AC96
+ .align 2, 0
+_0801AC84: .4byte gUnk_0200B240
+_0801AC88: .4byte gRoomVars
+_0801AC8C:
+ adds r2, #4
+ adds r0, #1
+ cmp r0, r3
+ blo _0801AC78
+_0801AC94:
+ lsls r0, r1, #2
+_0801AC96:
+ pop {r4, r5, pc}
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AC98.inc b/asm/non_matching/beanstalkSubtask/sub_0801AC98.inc
new file mode 100644
index 00000000..a41ce6cd
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801AC98.inc
@@ -0,0 +1,111 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #8
+ ldr r0, _0801ACD0 @ =gRoomControls
+ ldrh r1, [r0, #0x1e]
+ lsrs r1, r1, #4
+ mov r8, r1
+ ldrh r0, [r0, #0x20]
+ lsrs r0, r0, #4
+ str r0, [sp]
+ movs r6, #0
+ movs r1, #0
+ cmp r1, r0
+ bhs _0801AD5C
+_0801ACBA:
+ movs r0, #0
+ adds r1, #1
+ str r1, [sp, #4]
+ cmp r0, r8
+ bhs _0801AD4C
+_0801ACC4:
+ ldr r5, _0801ACD4 @ =gUnk_080B44C0
+ adds r0, #1
+ mov sl, r0
+ adds r0, r6, #1
+ mov sb, r0
+ b _0801ACDA
+ .align 2, 0
+_0801ACD0: .4byte gRoomControls
+_0801ACD4: .4byte gUnk_080B44C0
+_0801ACD8:
+ adds r5, #0xc
+_0801ACDA:
+ ldrh r0, [r5]
+ ldr r1, _0801AD0C @ =0x0000FFFF
+ cmp r0, r1
+ beq _0801AD06
+ adds r4, r0, #0
+ adds r0, r6, #0
+ movs r1, #1
+ bl GetTileType
+ cmp r4, r0
+ bne _0801ACD8
+ ldrh r0, [r5, #0xa]
+ lsls r0, r0, #2
+ ldr r1, _0801AD10 @ =gUnk_080B44B8
+ adds r0, r0, r1
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _0801ACD8
+ adds r0, r5, #0
+ adds r1, r6, #0
+ bl sub_0801AD6C
+_0801AD06:
+ ldr r5, _0801AD14 @ =gUnk_080B44C2
+ ldr r7, _0801AD0C @ =0x0000FFFF
+ b _0801AD1A
+ .align 2, 0
+_0801AD0C: .4byte 0x0000FFFF
+_0801AD10: .4byte gUnk_080B44B8
+_0801AD14: .4byte gUnk_080B44C2
+_0801AD18:
+ adds r5, #0xc
+_0801AD1A:
+ ldrh r0, [r5]
+ cmp r0, r7
+ beq _0801AD44
+ adds r4, r0, #0
+ adds r0, r6, #0
+ movs r1, #2
+ bl GetTileType
+ cmp r4, r0
+ bne _0801AD18
+ ldrh r0, [r5, #0xa]
+ lsls r0, r0, #2
+ ldr r1, _0801AD68 @ =gUnk_080B44B8
+ adds r0, r0, r1
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _0801AD18
+ adds r0, r5, #0
+ adds r1, r6, #0
+ bl sub_0801AD6C
+_0801AD44:
+ mov r0, sl
+ mov r6, sb
+ cmp r0, r8
+ blo _0801ACC4
+_0801AD4C:
+ adds r0, r6, #0
+ adds r0, #0x40
+ mov r1, r8
+ subs r6, r0, r1
+ ldr r1, [sp, #4]
+ ldr r0, [sp]
+ cmp r1, r0
+ blo _0801ACBA
+_0801AD5C:
+ add sp, #8
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801AD68: .4byte gUnk_080B44B8
+ .syntax divided
diff --git a/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc b/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc
new file mode 100644
index 00000000..0e23e085
--- /dev/null
+++ b/asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc
@@ -0,0 +1,67 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ ldr r3, _0801B018 @ =gUnk_02027EB4
+ ldr r0, _0801B01C @ =gRoomControls
+ ldrh r1, [r0, #0x1e]
+ lsrs r1, r1, #4
+ mov sl, r1
+ ldrh r0, [r0, #0x20]
+ lsrs r0, r0, #4
+ mov sb, r0
+ movs r7, #0
+ cmp r7, sb
+ bhs _0801B054
+_0801B004:
+ movs r2, #0
+ adds r0, r7, #1
+ mov r8, r0
+ cmp r2, sl
+ bhs _0801B046
+_0801B00E:
+ ldr r1, _0801B020 @ =gUnk_080B44D0
+ adds r4, r3, #1
+ adds r5, r2, #1
+ b _0801B026
+ .align 2, 0
+_0801B018: .4byte gUnk_02027EB4
+_0801B01C: .4byte gRoomControls
+_0801B020: .4byte gUnk_080B44D0
+_0801B024:
+ adds r1, #4
+_0801B026:
+ ldrh r0, [r1]
+ cmp r0, #0
+ beq _0801B03E
+ ldrb r6, [r3]
+ cmp r0, r6
+ bne _0801B024
+ ldrh r0, [r1, #2]
+ lsls r1, r7, #6
+ adds r1, r1, r2
+ movs r2, #1
+ bl SetTile
+_0801B03E:
+ adds r3, r4, #0
+ adds r2, r5, #0
+ cmp r2, sl
+ blo _0801B00E
+_0801B046:
+ adds r0, r3, #0
+ adds r0, #0x40
+ mov r1, sl
+ subs r3, r0, r1
+ mov r7, r8
+ cmp r7, sb
+ blo _0801B004
+_0801B054:
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/playerUtils/sub_0807BFD0.inc b/asm/non_matching/playerUtils/sub_0807BFD0.inc
index 0b1a9373..6426a853 100644
--- a/asm/non_matching/playerUtils/sub_0807BFD0.inc
+++ b/asm/non_matching/playerUtils/sub_0807BFD0.inc
@@ -2,7 +2,7 @@
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
- bl sub_0801B170
+ bl ClearBgAnimations
bl sub_0807BFA8
ldr r7, _0807C0B8 @ =0x0000FFFF
ldr r6, _0807C0BC @ =gMetatileTypesBottom
@@ -54,7 +54,7 @@ _0807C01C:
ldr r0, [r0, #0x14]
cmp r0, #0
beq _0807C04E
- bl sub_0801B130
+ bl LoadBgAnimations
_0807C04E:
adds r5, r6, #0
movs r0, #0x80
diff --git a/include/beanstalkSubtask.h b/include/beanstalkSubtask.h
new file mode 100644
index 00000000..8735475a
--- /dev/null
+++ b/include/beanstalkSubtask.h
@@ -0,0 +1,36 @@
+#ifndef BEANSTALK_SUBTASK_H
+#define BEANSTALK_SUBTASK_H
+
+#include "global.h"
+
+/*
+tiles 0x4000 and above create an entry here
+ */
+#define MAX_0200B240 0x100
+typedef struct {
+ u16 position; // (layer << 0xc) | position
+ u16 data;
+} struct_0200B240;
+extern struct_0200B240 gUnk_0200B240[MAX_0200B240];
+
+typedef struct {
+ u16 vramOffset;
+ u8 gfxSize;
+ u8 unk_3;
+ u32 gfxOffset;
+} BgAnimationGfx;
+
+typedef struct {
+ BgAnimationGfx* gfx;
+ u32 unk_4;
+} BgAnimationFrame;
+
+typedef struct {
+ BgAnimationFrame* currentFrame;
+ u16 unk_4;
+ u16 timer;
+} BgAnimation;
+#define MAX_BG_ANIMATIONS 8
+extern BgAnimation gBgAnimations[MAX_BG_ANIMATIONS];
+
+#endif // BEANSTALK_SUBTASK_H \ No newline at end of file
diff --git a/include/functions.h b/include/functions.h
index 53f1821a..2f0428a8 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -42,7 +42,7 @@ extern void SetDirtTile(u32);
* @param basePosition the position the offsets in tileData are based on
* @param layer the tile layer
*/
-extern void SetMultipleTiles(u16* tileData, u32 basePosition, u32 layer);
+extern void SetMultipleTiles(TileData* tileData, u32 basePosition, u32 layer);
extern void TryLoadPrologueHyruleTown(void);
extern void UnloadGFXSlots(Entity*);
extern void UnloadOBJPalette(Entity*);
@@ -74,7 +74,7 @@ extern u32 sub_080044EC(Entity*, u32);
extern void sub_0800451C(Entity*);
extern void sub_08004542(Entity*);
extern void sub_080085B0(Entity*);
-extern void sub_08008796(Entity*, u32, u32, u32);
+extern u16* sub_08008796(Entity*, u32, u32, u32);
extern void sub_08016AD2(Entity*);
extern u32 sub_0801766C(Entity*);
extern void sub_0801AFE4(void);
diff --git a/include/main.h b/include/main.h
index c6be0f37..0a2c97bf 100644
--- a/include/main.h
+++ b/include/main.h
@@ -81,7 +81,7 @@ typedef struct {
/*0x0A*/ u16 fadeInTime;
/*0x0C*/ u8 fillerC[0x10];
/*0x1c*/ RoomControls unk_1c;
- /*0x2e*/ u8 unk_2e[0x364];
+ /*0x2e+4*/ u8 unk_2e[0x360];
} UI;
static_assert(sizeof(UI) == 0x3b4);
diff --git a/include/player.h b/include/player.h
index aeceeaf5..0f5bc077 100644
--- a/include/player.h
+++ b/include/player.h
@@ -269,8 +269,7 @@ typedef struct {
/*0x3a*/ u8 field_0x3a;
/*0x3b*/ u8 field_0x3b;
/*0x3c*/ u8 field_0x3c[2];
- /*0x3e*/ u8 swordGoldParticle : 1;
- /* */ u8 swordBlueParticle : 1;
+ /*0x3e*/ u8 swordDamage : 2;
/* */ u8 filler14 : 6;
/*0x3f*/ u8 field_0x3f;
/*0x40*/ u8 path_memory[64];
diff --git a/include/room.h b/include/room.h
index 5cd1c1d6..f4663028 100644
--- a/include/room.h
+++ b/include/room.h
@@ -52,6 +52,7 @@ typedef struct {
/*0x28*/ union SplitWord bg3OffsetX;
/*0x2C*/ union SplitWord bg3OffsetY;
/*0x30*/ Entity* camera_target;
+ /*0x34*/ u32 unk_34;
} RoomControls;
extern RoomControls gRoomControls;
@@ -69,7 +70,7 @@ typedef struct {
/* 0x0a */ u8 unk2;
/* 0x0b */ u8 filler2;
/* 0x0c */ s16 lightLevel;
- /* 0x0e */ u8 filler3[2];
+ /* 0x0e */ u16 unk_0e;
/* 0x10 */ u8 unk_10[4];
/* 0x14 */ u32 flags;
/* 0x18 */ u32 unk3;
diff --git a/include/save.h b/include/save.h
index d85cad01..487c499a 100644
--- a/include/save.h
+++ b/include/save.h
@@ -41,7 +41,7 @@ typedef struct {
/*0x006*/ u8 saw_staffroll;
/*0x007*/ u8 unk7;
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
- /*0x009*/ u8 field_0x9[0x34];
+ /*0x009*/ u8 field_0x9[0x37];
/*0x040*/ u32 windcrests; /**< Windcrest flags. */
/*0x044*/ u8 filler44[0xC];
/*0x050*/ u32 unk50;
diff --git a/include/structures.h b/include/structures.h
index 7fc1210f..0b0dc185 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -318,4 +318,24 @@ typedef struct {
u8 stylized;
} Font;
+typedef struct {
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2[2];
+ u16 unk_4;
+ u8 filler[12];
+ Entity* unk_14;
+ u8 unk_18;
+ u8 unk_19;
+ u8 unk_1a;
+ u8 unk_1b;
+} struct_02018EB0;
+
+extern struct_02018EB0 gUnk_02018EB0;
+
+typedef struct {
+ s16 tile;
+ s16 position;
+} TileData;
+
#endif
diff --git a/linker.ld b/linker.ld
index e84fa0ea..cfb9da2a 100644
--- a/linker.ld
+++ b/linker.ld
@@ -23,7 +23,7 @@ SECTIONS {
. = 0x00000090; gUnk_02000090 = .;
. = 0x000000B0; gUnk_020000B0 = .;
. = 0x000000C0; gUnk_020000C0 = .;
- . = 0x00000CC0; gUnk_02000CC0 = .;
+ . = 0x00000CC0; gBgAnimations = .;
. = 0x00000D00; gTextGfxBuffer = .;
. = 0x00001A00; gPaletteList = .;
. = 0x00001A3C; gUnk_02001A3C = .;
@@ -311,7 +311,7 @@ SECTIONS {
src/playerItem/playerItemGustBig.o(.text);
src/playerItem/playerItemBow.o(.text);
src/playerItem/playerItemSwordBeam.o(.text);
- asm/beanstalkSubtask.o(.text);
+ src/beanstalkSubtask.o(.text);
src/playerItem/playerItemBomb.o(.text);
src/playerItem/playerItemBoomerang.o(.text);
src/playerItem/playerItemDashSword.o(.text);
diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c
new file mode 100644
index 00000000..179c20d9
--- /dev/null
+++ b/src/beanstalkSubtask.c
@@ -0,0 +1,603 @@
+#include "beanstalkSubtask.h"
+#include "collision.h"
+#include "common.h"
+#include "fade.h"
+#include "functions.h"
+#include "game.h"
+#include "global.h"
+#include "item.h"
+#include "main.h"
+#include "manager.h"
+#include "menu.h"
+#include "object.h"
+#include "screen.h"
+#include "structures.h"
+
+extern void UpdateIsDiggingCave(void);
+extern void sub_0807C898(void);
+extern void sub_0805BB74(s32);
+extern void LoadRoomGfx(void);
+extern void sub_0807BFD0(void);
+extern void sub_0807C4F8(void);
+
+extern void gMapData;
+extern u8 gUpdateVisibleTiles;
+extern u16 gMapDataTopSpecial[];
+extern u16 gMapDataBottomSpecial[];
+
+extern const u8 gGlobalGfxAndPalettes[];
+extern const u8 gUnk_081091E4[];
+
+extern void (*const gUnk_080B4458[])(void);
+extern const u16 gUnk_080B44A0[];
+extern const u16 gUnk_080B4410[];
+extern const s16 gUnk_080B4488[];
+extern const s16 gUnk_080B44A8[];
+extern const u16 gUnk_080B44D0[];
+extern const u16* gUnk_080B4550[];
+extern const u16 gUnk_080B77C0[];
+extern BgAnimationFrame* gUnk_080B7278[];
+
+bool32 sub_0801A4F8(void);
+bool32 sub_0801AA58(Entity*, u32, u32);
+void sub_0801AB08(u16*, LayerStruct*);
+void LoadBgAnimationGfx(BgAnimationGfx*);
+u32 GetBgAnimationTimer(s32*);
+void ClearBgAnimations(void);
+
+void sub_0801967C(void) {
+ gUnk_080B4458[gMenu.overlayType]();
+}
+
+void sub_08019698(void) {
+ Entity* object;
+ const u16* ptr;
+ ptr = &gUnk_080B4410[gUI.field_0x3 * 7];
+ SetLocalFlagByBank(0x100, ptr[2]);
+ LoadAuxiliaryRoom(ptr[0], ptr[1]);
+ gRoomControls.scroll_x += ptr[3];
+ gRoomControls.scroll_y += ptr[4];
+ gUpdateVisibleTiles = 1;
+ UpdateScrollVram();
+ gScreen.lcd.displayControl &= 0xfeff;
+ object = CreateObject(BEANSTALK, 0, 0);
+ if (object != NULL) {
+ object->x.HALF.HI = gRoomControls.scroll_x + ptr[5];
+ object->y.HALF.HI = gRoomControls.scroll_y + ptr[6];
+ }
+ LoadGfxGroup(0x11);
+ FlushSprites();
+ DrawEntities();
+ CopyOAM();
+ SetFade(4, 8);
+ gUnk_02018EB0.unk_0++;
+}
+
+void sub_08019740(void) {
+ if (gFadeControl.active == 0) {
+ gUnk_02018EB0.unk_0++;
+ gUnk_02018EB0.unk_4 = 0x186;
+ }
+}
+
+void sub_08019764(void) {
+ FlushSprites();
+ UpdateEntities();
+ DrawEntities();
+ CopyOAM();
+ if ((--gUnk_02018EB0.unk_4 == 0) || ((gInput.newKeys & 10) != 0)) {
+ gUnk_02018EB0.unk_0++;
+ }
+}
+
+void sub_080197A0(void) {
+ MenuFadeIn(2, 0xb);
+}
+
+NONMATCH("asm/non_matching/beanstalkSubtask/SetBGDefaults.inc", void SetBGDefaults(void)) {
+ u16* ptr;
+ BgSettings* bg;
+
+ gMapBottom.bgControlPtr = (u16*)&gScreen.bg2;
+ gScreen.bg2.control = gUnk_080B77C0[0];
+ gMapTop.bgControlPtr = (u16*)&gScreen.bg1;
+ gScreen.bg1.control = gUnk_080B77C0[1];
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_080197D4.inc", void sub_080197D4(u32* param_1)) {
+ u32 uVar1;
+ u8* src;
+ void* dest;
+
+ do {
+ dest = (void*)param_1[1];
+ if (dest != NULL) {
+ src = &gMapData + (*param_1 & 0x7fffffff);
+ if ((param_1[2] & 0x80000000) != 0) {
+ if ((u32)dest >> 0x18 == 6) {
+ LZ77UnCompVram(src, dest);
+ } else {
+ LZ77UnCompWram(src, dest);
+ }
+ } else {
+ MemCopy(src, dest, param_1[2]);
+ }
+ } else {
+ LoadPaletteGroup((u32) * (u16*)param_1);
+ sub_080533CC();
+ }
+ uVar1 = *param_1;
+ param_1 += 3;
+ } while ((uVar1 & 0x80000000) != 0);
+}
+END_NONMATCH
+
+// Has ifdefs for other variants
+ASM_FUNC("asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc", void UpdatePlayerCollision())
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc",
+ bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType)) {
+ u16 uVar1;
+ u32 uVar2;
+ bool32 bVar3;
+ u32 pos;
+
+ uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1];
+ if ((((gPlayerState.field_0x35 | gPlayerState.field_0xd) & 0x80) == 0) && ((gPlayerEntity.frame & 1) != 0)) {
+ switch ((s32)sub_080B1B54(GetTileType(position + uVar1, gPlayerEntity.collisionLayer))) {
+ case 0x52:
+ break;
+ case 0x26:
+ case 0x27:
+ return FALSE;
+ case 0x29:
+ return FALSE;
+ case 0x74:
+ return FALSE;
+ default:
+ if ((layer->collisionData[(position + uVar1)] != 0x28) &&
+ (!IsTileCollision(
+ layer->collisionData,
+ (s32)((((position + uVar1) & 0x3f) * 0x10 + (u32)gRoomControls.origin_x) * 0x10000) >> 0x10,
+ (s32)((((position + uVar1) >> 6) * 0x10 + (u32)gRoomControls.origin_y) * 0x10000) >> 0x10,
+ collisionType))) {
+ return TRUE;
+ }
+ break;
+ }
+ }
+ return FALSE;
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A370.inc", bool32 sub_0801A370(LayerStruct* layer, u32 position)) {
+ LayerStruct* topLayer;
+ u32 tileType;
+ u32 pos;
+ s32 offset;
+
+ if ((gPlayerEntity.animationState & 2) == 0) {
+ return FALSE;
+ }
+ if (!sub_0801A4F8()) {
+ return FALSE;
+ }
+ topLayer = GetLayerByIndex(2);
+ offset = gUnk_080B4488[gPlayerEntity.animationState >> 1];
+ pos = position + offset;
+ tileType = GetTileType(pos, gPlayerEntity.collisionLayer);
+ switch (tileType) {
+ case 0x402b:
+ pos += offset;
+ break;
+ case 0x402c ... 0x402f:
+ return TRUE;
+ }
+ if (topLayer->collisionData[pos - 0x80] == 0x46) {
+ return FALSE;
+ }
+ switch ((u16)sub_080B1B54(GetTileType(pos, gPlayerEntity.collisionLayer))) {
+ case 0x52:
+ return FALSE;
+ case 0x26:
+ case 0x27:
+ return FALSE;
+ case 0x29:
+ return FALSE;
+ case 0x74:
+ return FALSE;
+ }
+ switch (layer->collisionData[pos]) {
+ case 0:
+ return TRUE;
+ case 5:
+ case 0x45:
+ if (offset == 1) {
+ return TRUE;
+ }
+ break;
+ case 0xa:
+ case 0x44:
+ if (offset == -1) {
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+END_NONMATCH
+
+bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType) {
+ u32 tileType;
+ u32 pos;
+ s32 offset = gUnk_080B4488[gPlayerEntity.animationState >> 1];
+ if (sub_0801A4F8()) {
+ pos = position + offset;
+ tileType = GetTileType(pos, gPlayerEntity.collisionLayer);
+ switch (sub_080B1B54(tileType)) {
+ case 0x52:
+ case 0x26:
+ case 0x27:
+ case 0x29:
+ case 0x74:
+ return FALSE;
+ default:
+ if (((layer->collisionData[pos] != 0x28) &&
+ (!IsTileCollision(layer->collisionData, (pos & 0x3f) * 0x10 + gRoomControls.origin_x,
+ (pos >> 6) * 0x10 + gRoomControls.origin_y, collisionType))) &&
+ (0xe < (u32)layer->collisionData[pos] - 1)) {
+ return TRUE;
+ }
+ break;
+ }
+ }
+ return FALSE;
+}
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4F8(void)) {
+ u32 uVar1;
+ u32 uVar3;
+
+ if ((gPlayerState.flags & PL_MINISH) != 0) {
+ if (GetInventoryValue(ITEM_POWER_BRACELETS) != 1) {
+ return FALSE;
+ }
+ if ((gPlayerState.field_0xd & 0x80) != 0) {
+ return FALSE;
+ }
+ if (gPlayerState.field_0xd != gPlayerEntity.direction) {
+ return FALSE;
+ }
+ if ((gPlayerEntity.collisions & gUnk_080B44A0[(((gPlayerEntity.direction + 4) & 0x18) >> 2)]) == 0) {
+ return FALSE;
+ }
+ } else {
+ if (((gPlayerState.field_0x35 | gPlayerState.field_0xd) & 0x80) != 0) {
+ return FALSE;
+ }
+ if ((gPlayerEntity.frame & 1) == 0) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+END_NONMATCH
+
+ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc", u32 sub_0801A8D0(Entity* this, u32 param_2)) {
+ u16* mapData;
+ u32 tile;
+ u32 position;
+
+ if (this != NULL) {
+ mapData = GetLayerByIndex(this->collisionLayer)->mapData;
+ if (param_2 == 0) {
+ position = COORD_TO_TILE_OFFSET(this, 0, 8);
+ tile = mapData[position];
+ if (tile == 0x4055) {
+ return position - 1;
+ }
+ if (tile == 0x4056) {
+ return position;
+ }
+ } else {
+ position = COORD_TO_TILE_OFFSET(this, 8, 0);
+ tile = mapData[position];
+ if (tile == 0x4057) {
+ return position - 0x40;
+ }
+ if (tile == 0x4058) {
+ return position;
+ }
+ }
+ }
+ return 0xffff;
+}
+END_NONMATCH
+
+bool32 sub_0801A980(void) {
+ u16 tileType;
+ const s16* ptr;
+ GetLayerByIndex(gPlayerEntity.collisionLayer);
+ ptr = &gUnk_080B44A8[gPlayerEntity.animationState & 6];
+ tileType = GetTileType(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]), gPlayerEntity.collisionLayer);
+ if (tileType < 0x4000) {
+ sub_080B1B54(tileType);
+ }
+ return FALSE;
+}
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc",
+ bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3)) {
+
+ switch (param_2) {
+ case 0x361:
+ if (param_1 == 0) {
+ goto result;
+ } else {
+ return FALSE;
+ }
+ break;
+ case 0x362:
+ if (param_1 == 0x10) {
+ goto result;
+ } else {
+ return FALSE;
+ }
+ break;
+ case 0x363:
+ if (param_1 == 0x18) {
+ goto result;
+ } else {
+ return FALSE;
+ }
+ break;
+ case 0x364:
+ if (param_1 == 8) {
+ goto result;
+ } else {
+ return FALSE;
+ }
+ break;
+ case 0x360:
+ result:
+ return sub_0801AA58(&gPlayerEntity, param_3, param_1);
+ default:
+ return FALSE;
+ }
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AA58.inc",
+ bool32 sub_0801AA58(Entity* this, u32 param_2, u32 param_3)) {
+ LayerStruct* layer;
+ Entity* object;
+
+ layer = GetLayerByIndex(this->collisionLayer);
+ if (((layer->collisionData[param_2 + gUnk_080B4488[param_3 >> 3]] == 0) ||
+ ((u8)(layer->collisionData[param_2 + gUnk_080B4488[param_3 >> 3]] - 0x20) < 0x20))) {
+
+ object = CreateObject(PUSHED_BLOCK, 0, 0);
+ if (object != NULL) {
+ object->direction = param_3;
+ object->x.HALF.HI = ((param_2 & 0x3f) * 0x10 + 8) + gRoomControls.origin_x;
+ object->y.HALF.HI = (((param_2 & 0xfc0) >> 2) + 8) + gRoomControls.origin_y;
+ object->collisionLayer = this->collisionLayer;
+ gPlayerState.pushedObject = 0xa0;
+ gPlayerState.queued_action = 5;
+ gPlayerState.flags |= 1;
+ this->x.HALF.LO = 0;
+ this->y.HALF.LO = 0;
+ this->direction = param_3;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+END_NONMATCH
+
+ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AB08.inc", void sub_0801AB08(u16* a, LayerStruct* layer))
+
+NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AC68.inc", u32 sub_0801AC68(u32 position, u32 data)) {
+ u32 index;
+ struct_0200B240* ptr;
+ u32 end;
+
+ ptr = gUnk_0200B240;
+ end = gRoomVars.unk_0e;
+ for (index = 0; index < end; index++) {
+ if (position == ptr[index].position) {
+ return ptr[index].data << 2;
+ }
+ }
+ return data << 2;
+}
+END_NONMATCH
+
+ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AC98.inc", void sub_0801AC98())
+
+void sub_0801AD6C(u16* param_1, u32 param_2) {
+ Entity* entity;
+ Manager* manager;
+ s32 tmpX1;
+ s32 tmpY1;
+ s32 tmpX2;
+ s32 tmpY2;
+
+ if (param_1[1] != 9) {
+ entity = GetEmptyEntity();
+ if (entity != NULL) {
+ entity->kind = (u8)param_1[1];
+ entity->id = (u8)param_1[2];
+ entity->type = (u8)param_1[3];
+ entity->type2 = (u8)param_1[4];
+ tmpX1 = ((u16)param_2 & 0x3f) * 0x10 + 8;
+ entity->x.HALF.HI = tmpX1 + gRoomControls.origin_x;
+ tmpY1 = (s16)((param_2 & 0xfc0) >> 2) + 8;
+ entity->y.HALF.HI = tmpY1 + gRoomControls.origin_y;
+ entity->collisionLayer = 0;
+ ResolveCollisionLayer(entity);
+ AppendEntityToList(entity, gUnk_081091E4[entity->kind]);
+ }
+ } else {
+ manager = GetEmptyManager();
+ if (manager != NULL) {
+ manager->type = (u8)param_1[1];
+ manager->subtype = (u8)param_1[2];
+ manager->unk_0a = (u8)param_1[3];
+ manager->unk_0b = (u8)param_1[4];
+ tmpX2 = ((u16)param_2 & 0x3f) * 0x10 + 8;
+ *(u16*)(&manager[1].unk_0e + 10) = tmpX2 + gRoomControls.origin_x;
+ tmpY2 = (s16)((param_2 & 0xfc0) >> 2) + 8;
+ *(u16*)(&manager[1].unk_0e + 12) = tmpY2 + gRoomControls.origin_y;
+ AppendEntityToList((Entity*)manager, gUnk_081091E4[manager->type]);
+ }
+ }
+}
+
+bool32 sub_0801AE30(void) {
+ return TRUE;
+}
+
+u32 sub_0801AE34(void) {
+ return gRoomControls.scroll_flags >> 1 & 1;
+}
+
+void sub_0801AE44(s32 param_1) {
+ void (*func)(void);
+ gRoomControls.unk_34 = 0;
+ sub_0807BFD0();
+ if (param_1 != 0) {
+ LoadRoomGfx();
+ }
+ sub_080809D4();
+ UpdateIsDiggingCave();
+ if (gRoomTransition.field_0x2c[0] != 0) {
+ sub_0807C898();
+ }
+ if (gArea.lightType != 0) {
+ MemFill16(0xf, (void*)0x600f000, 0x800);
+ sub_0805BB74(-1);
+ }
+ func = GetCurrentRoomProperty(5);
+ if (func != NULL) {
+ func();
+ }
+ if ((gUnk_03004030.isDiggingCave == 0) && (gArea.onEnter != NULL)) {
+ gArea.onEnter(gArea.transitionManager);
+ }
+ if ((gRoomControls.scroll_flags & 1) == 0) {
+ if (gMapBottom.bgControlPtr != NULL) {
+ sub_0801AB08(gMapDataBottomSpecial, &gMapBottom);
+ }
+ if (gMapTop.bgControlPtr != NULL) {
+ sub_0801AB08(gMapDataTopSpecial, &gMapTop);
+ }
+ } else {
+ sub_0807C4F8();
+ }
+ UpdateScrollVram();
+}
+
+void SetMultipleTiles(TileData* tileData, u32 basePosition, u32 layer) {
+ while (tileData->tile != -1) {
+ SetTile((u16)tileData->tile, basePosition + tileData->position, layer);
+ tileData++;
+ }
+}
+
+// Add a new entry at the end of gUnk_0200B240
+void sub_0801AF48(u32 data, u32 position, u32 layer) {
+ u32 index;
+ if ((data < 0x4000) && (gRoomTransition.field_0x2c[3] == 0)) {
+ index = gRoomVars.unk_0e;
+ if (index < 0x100) {
+ gUnk_0200B240[index].data = data;
+ gUnk_0200B240[index].position = (layer << 0xc) | position;
+ gRoomVars.unk_0e = index + 1;
+ }
+ }
+}
+
+ASM_FUNC("asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc",
+ void DeleteLoadedTileEntity(u32 position, u32 layer))
+
+ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc", void sub_0801AFE4(void))
+
+void UpdateBgAnimations(void) {
+ bool32 alreadyUploadedGfx = FALSE;
+ BgAnimation* animation = gBgAnimations;
+ s32 index = 8;
+ while (index != 0) {
+ if (animation->currentFrame == NULL) {
+ return;
+ }
+ if (--animation->timer == 0) {
+ if (!alreadyUploadedGfx) {
+ if (gFadeControl.active == 0) {
+ LoadBgAnimationGfx(animation->currentFrame->gfx);
+ }
+ animation->timer = GetBgAnimationTimer(&animation->currentFrame->unk_4);
+ animation->currentFrame++;
+ if (animation->currentFrame->gfx == NULL) {
+ animation->currentFrame -= animation->currentFrame->unk_4;
+ }
+ alreadyUploadedGfx = TRUE;
+ } else {
+ animation->timer++;
+ }
+ }
+ animation++;
+ index--;
+ }
+}
+
+u32 GetBgAnimationTimer(s32* param_1) {
+ if (param_1[0] < 0) {
+ return gUnk_080B4550[*(u8*)param_1][(Random() & 7)];
+ } else {
+ return param_1[0];
+ }
+}
+
+void LoadBgAnimationGfx(BgAnimationGfx* param_1) {
+ const u8* src;
+ u32 vramOffset;
+ u32 size;
+ while (TRUE) {
+ src = &gGlobalGfxAndPalettes[param_1->gfxOffset];
+ size = param_1->gfxSize;
+ vramOffset = param_1->vramOffset;
+ if ((*(u32*)param_1 >> 0x1c & 1) != 0) {
+ LoadPalettes(src, vramOffset >> 5, size);
+ } else {
+ MemCopy(src, (void*)(vramOffset + 0x6000000), size << 5);
+ }
+ if (*(int*)param_1 >= 0) {
+ return;
+ }
+ param_1++;
+ }
+}
+
+void LoadBgAnimations(u16* param_1) {
+ BgAnimation* animation;
+ ClearBgAnimations();
+ animation = gBgAnimations;
+ while (param_1[0] != 0xffff) {
+ animation->currentFrame = gUnk_080B7278[param_1[0]];
+ animation->timer = GetBgAnimationTimer(&animation->currentFrame->unk_4);
+ ;
+ animation++;
+ param_1++;
+ }
+}
+
+void ClearBgAnimations(void) {
+ u32 index;
+ for (index = 0; index < MAX_BG_ANIMATIONS; index++) {
+ gBgAnimations[index].currentFrame = NULL;
+ }
+}
diff --git a/src/enterPortalSubtask.c b/src/enterPortalSubtask.c
index 5019a300..c0a1f948 100644
--- a/src/enterPortalSubtask.c
+++ b/src/enterPortalSubtask.c
@@ -9,19 +9,9 @@
#include "game.h"
#include "fileselect.h"
-typedef struct {
- u8 filler[18];
- Entity* unk_14;
- u8 unk_18;
- u8 unk_19;
- u8 unk_1a;
- u8 unk_1b;
-} struct_02018EB0;
-
extern void ClearArmosData(void);
extern void sub_080300C4(void);
-extern struct_02018EB0 gUnk_02018EB0;
extern u16 gUnk_020178E0[];
extern u8 gUnk_02017700[];
diff --git a/src/game.c b/src/game.c
index 6ebd0579..4ba8eb61 100644
--- a/src/game.c
+++ b/src/game.c
@@ -102,14 +102,14 @@ extern bool32 CheckInitPortal(void);
extern void UpdateCarriedObject(void);
extern void DrawUI(void);
extern void CollisionMain(void);
-extern void sub_0805BB74(u32);
+extern void sub_0805BB74(s32);
extern void CreateZeldaFollower(void);
extern void LoadRoomGfx(void);
extern void RecycleEntities(void);
extern void sub_0804AF90(void);
extern void CallRoomProp6(void);
extern void UpdateScroll(void);
-extern void UpdateBgAnim(void);
+extern void UpdateBgAnimations(void);
extern void CleanUpGFXSlots(void);
extern void sub_080ADE24(void);
extern void InitUI(bool32);
@@ -246,7 +246,7 @@ extern void (*const gUnk_080FD138[])(void);
extern const u16 gUnk_080FD964[];
-extern void sub_0801B170(void);
+extern void ClearBgAnimations(void);
void GameTask(void) {
static GameState* const sStates[] = {
@@ -344,7 +344,7 @@ static void GameMain_ChangeRoom(void) {
UpdateEntities();
if (!UpdateLightLevel())
UpdateScroll();
- UpdateBgAnim();
+ UpdateBgAnimations();
UpdateScrollVram();
DrawUI();
UpdateManagers();
@@ -421,7 +421,7 @@ static void GameMain_Update(void) {
UpdateDoorTransition();
CollisionMain();
UpdateScroll();
- UpdateBgAnim();
+ UpdateBgAnimations();
UpdateScrollVram();
sub_08052C3C();
DrawUI();
@@ -508,7 +508,7 @@ static void InitializeEntities(void) {
CallRoomProp5And7();
sub_0805329C();
UpdateScrollVram();
- sub_0805BB74(0xffffffff);
+ sub_0805BB74(-1);
UpdatePlayerRoomStatus();
}
@@ -608,7 +608,7 @@ static void AuxCutscene_Main(void) {
DrawEntities();
CopyOAM();
UpdateScroll();
- UpdateBgAnim();
+ UpdateBgAnimations();
UpdateManagers();
UpdateScrollVram();
}
@@ -1878,7 +1878,7 @@ void sub_08053758(void) {
gRoomControls.camera_target = NULL;
gRoomControls.scroll_y = 0;
gRoomControls.scroll_x = 0;
- sub_0801B170();
+ ClearBgAnimations();
DispReset(0);
gScreen.lcd.displayControl = 0x2640;
gScreen.controls.layerFXControl = 0x2244;
@@ -2601,7 +2601,7 @@ void sub_080548E8(void) {
DrawEntities();
CopyOAM();
UpdateScroll();
- UpdateBgAnim();
+ UpdateBgAnimations();
UpdateScrollVram();
}
diff --git a/src/item/itemTryPickupObject.c b/src/item/itemTryPickupObject.c
index d932582e..4f5f7228 100644
--- a/src/item/itemTryPickupObject.c
+++ b/src/item/itemTryPickupObject.c
@@ -7,7 +7,7 @@ extern void (*const gUnk_0811BDB4[])(ItemBehavior*, u32);
u32 sub_08077F64(ItemBehavior* arg0, u32 idx);
u32 sub_080789A8(void);
-void sub_080762C4(ItemBehavior*, void*, u8, u32);
+void sub_080762C4(ItemBehavior*, Entity*, u8, u32);
void sub_08076088(ItemBehavior*, void*, u32);
void ItemTryPickupObject(ItemBehavior* this, u32 idx) {
@@ -61,7 +61,7 @@ void ItemPickupCheck(ItemBehavior* this, u32 idx) {
}
}
-void sub_080762C4(ItemBehavior* this, void* arg1, u8 arg2, u32 arg3) {
+void sub_080762C4(ItemBehavior* this, Entity* arg1, u8 arg2, u32 arg3) {
this->field_0x18 = arg1;
gPlayerState.heldObject = arg2;
sub_08077D38(this, arg3);
diff --git a/src/npc/ghostBrothers.c b/src/npc/ghostBrothers.c
index a0a04942..38846f47 100644
--- a/src/npc/ghostBrothers.c
+++ b/src/npc/ghostBrothers.c
@@ -16,7 +16,6 @@ extern u32 gSpriteAnimations_GhostBrothers[];
extern u32 gUnk_08110188;
extern s8 gUnk_0811015C[8];
-extern u8 gUnk_02018EB0[];
extern u8 gUnk_0811022E[];
void sub_08065C0C(Entity* this);
@@ -144,7 +143,7 @@ void sub_08065DB8(Entity* this) {
if (--this->timer == 0) {
this->subAction++;
this->timer = 0xb4;
- gUnk_02018EB0[1]++;
+ gUnk_02018EB0.unk_1++;
InitAnimationForceUpdate(this, 2);
}
break;
@@ -174,7 +173,7 @@ void sub_08065DB8(Entity* this) {
this->timer = (u8) * (puVar3 + 1);
*(u16**)&this->field_0x6c = (puVar3 + 2);
} else {
- gUnk_02018EB0[0]++;
+ gUnk_02018EB0.unk_0++;
DeleteThisEntity();
}
}
diff --git a/src/object/chestSpawner.c b/src/object/chestSpawner.c
index af7f4adb..0e6eadf6 100644
--- a/src/object/chestSpawner.c
+++ b/src/object/chestSpawner.c
@@ -288,6 +288,7 @@ void ChestSpawner_Type0Action3(ChestSpawnerEntity* this) {
}
void sub_080842D8(ChestSpawnerEntity* this) {
+ // TODO recreate as TileData[]
static const u8 gUnk_0811F854[] = {
35, 64, 191, 255, 35, 64, 192, 255, 38, 64, 255, 255, 38, 64, 0, 0, 255, 255,
};
@@ -310,7 +311,7 @@ void sub_080842D8(ChestSpawnerEntity* this) {
if ((super->y.HALF.HI & 8) != 0) {
index += 2;
}
- SetMultipleTiles((u16*)gUnk_0811F898[index], COORD_TO_TILE(super), super->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_0811F898[index], COORD_TO_TILE(super), super->collisionLayer);
}
const Hitbox gUnk_0811F8A8 = { 0, -3, { 0, 0, 0, 0 }, 6, 6 };
diff --git a/src/object/jailBars.c b/src/object/jailBars.c
index 3a4abc9b..3758a766 100644
--- a/src/object/jailBars.c
+++ b/src/object/jailBars.c
@@ -8,8 +8,8 @@
static void SetJailBarTiles(Entity*, u32);
extern void (*const gUnk_08124950[])(Entity*);
-extern u16 gUnk_08124960[];
-extern u16 gUnk_0812497A[];
+extern TileData gUnk_08124960[];
+extern TileData gUnk_0812497A[];
void JailBars(Entity* this) {
gUnk_08124950[this->action](this);
@@ -49,7 +49,7 @@ void nullsub_127(Entity* this) {
}
static void SetJailBarTiles(Entity* this, u32 arg1) {
- u16* puVar1;
+ TileData* puVar1;
puVar1 = gUnk_08124960;
if (arg1 == 1) {
diff --git a/src/object/macroPlayer.c b/src/object/macroPlayer.c
index 4b9f4182..5a75369b 100644
--- a/src/object/macroPlayer.c
+++ b/src/object/macroPlayer.c
@@ -11,7 +11,6 @@ typedef struct {
u16 unk6a;
} MacroPlayerEntity;
-extern u8 gUnk_02018EB0[];
extern int sub_0807A094(int);
void MacroPlayer_Type0(MacroPlayerEntity*);
@@ -112,8 +111,7 @@ void MacroPlayer_Type0_Init(MacroPlayerEntity* this) {
this->unk6a = 4;
super->spriteRendering.b0 = 3;
SetAffineInfo(super, 4, 4, 0);
- ptr = gUnk_02018EB0;
- *(Entity**)&ptr[0x14] = super;
+ gUnk_02018EB0.unk_14 = super;
ChangeObjPalette(super, sub_0807A094(0));
pEVar1 = CreateObject(PORTAL_FALLING_PLAYER, 1, 0);
if (pEVar1 != NULL) {
@@ -139,7 +137,7 @@ void MacroPlayer_Type0_Action1(MacroPlayerEntity* this) {
super->zVelocity = 0x30000;
super->spriteSettings.shadow = 0;
super->child->subAction = 1;
- gUnk_02018EB0[0x18] = 1;
+ gUnk_02018EB0.unk_18 = 1;
}
}
@@ -153,7 +151,7 @@ void MacroPlayer_Type0_Action2(MacroPlayerEntity* this) {
super->direction = 10;
super->speed = 0xc0;
super->zVelocity = 0x28000;
- gUnk_02018EB0[0x19] = 1;
+ gUnk_02018EB0.unk_19 = 1;
}
}
@@ -167,7 +165,7 @@ void MacroPlayer_Type0_Action3(MacroPlayerEntity* this) {
super->direction = 17;
super->speed = 0x100;
super->zVelocity = 0x24000;
- gUnk_02018EB0[0x1a] = 1;
+ gUnk_02018EB0.unk_1a = 1;
}
}
@@ -216,7 +214,7 @@ void MacroPlayer_Type0_Action7(MacroPlayerEntity* this) {
super->direction = DirectionWest;
}
if (super->x.HALF.HI < 0x30) {
- gUnk_02018EB0[0x1b] = 1;
+ gUnk_02018EB0.unk_1b = 1;
}
}
@@ -227,7 +225,7 @@ void MacroPlayer_Type0_Action8(MacroPlayerEntity* this) {
super->direction = DirectionEast;
}
if (super->x.HALF.HI > 0xd0) {
- gUnk_02018EB0[0x1b] = 1;
+ gUnk_02018EB0.unk_1b = 1;
}
}
@@ -235,7 +233,7 @@ void MacroPlayer_Type0_Action9(MacroPlayerEntity* this) {
UpdateAnimationSingleFrame(super);
LinearMoveUpdate(super);
if (super->y.HALF.HI > 0x120) {
- gUnk_02018EB0[0x1b] = 1;
+ gUnk_02018EB0.unk_1b = 1;
}
}
@@ -246,6 +244,6 @@ void MacroPlayer_Type0_Action10(MacroPlayerEntity* this) {
super->direction = DirectionWest;
}
if (super->x.HALF.HI < 0x10) {
- gUnk_02018EB0[0x1b] = 1;
+ gUnk_02018EB0.unk_1b = 1;
}
}
diff --git a/src/object/object74.c b/src/object/object74.c
index 828ad006..977d9365 100644
--- a/src/object/object74.c
+++ b/src/object/object74.c
@@ -103,14 +103,15 @@ void sub_08097CB4(Object74Entity* this) {
}
void sub_08097CFC(Object74Entity* this) {
+ // TODO recreate as TileData[]
static const u16 gUnk_08123344[] = { 16448, 65471, 16449, 65472, 16450, 65473, 16451, 65535, 16452, 0,
16453, 1, 16454, 63, 16455, 64, 16456, 65, 65535 };
static const u16 gUnk_0812336A[] = {
16449, 65471, 16449, 65472, 16452, 65535, 16452, 0, 16455, 63, 16455, 64, 65535
};
if ((super->x.HALF.HI & 0xf) == 0) {
- SetMultipleTiles((u16*)gUnk_0812336A, COORD_TO_TILE(super), super->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_0812336A, COORD_TO_TILE(super), super->collisionLayer);
} else {
- SetMultipleTiles((u16*)gUnk_08123344, COORD_TO_TILE(super), super->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_08123344, COORD_TO_TILE(super), super->collisionLayer);
}
}
diff --git a/src/object/pushableGrave.c b/src/object/pushableGrave.c
index f84681ea..04d97a5a 100644
--- a/src/object/pushableGrave.c
+++ b/src/object/pushableGrave.c
@@ -78,7 +78,7 @@ void PushableGrave_Init(PushableGraveEntity* this) {
super->hitbox = (Hitbox*)&gUnk_080FD570;
SetTile(tileIndex, tilePosition, super->collisionLayer);
if (super->type2 == 2) {
- SetMultipleTiles((u16*)gUnk_081232C0, tilePosition, super->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_081232C0, tilePosition, super->collisionLayer);
}
}
}
@@ -200,6 +200,8 @@ bool32 sub_0809798C(PushableGraveEntity* this) {
void (*const gUnk_081232AC[])(PushableGraveEntity*) = {
PushableGrave_Init, PushableGrave_Action1, PushableGrave_Action2, PushableGrave_Action3, PushableGrave_Action4,
};
+
+// TODO recreate as TileData[]
const u8 gUnk_081232C0[] = {
61, 64, 191, 255, 61, 64, 192, 255, 61, 64, 193, 255, 61, 64, 255,
255, 61, 64, 1, 0, 61, 64, 63, 0, 61, 64, 65, 0, 255, 255,
diff --git a/src/object/stoneTablet.c b/src/object/stoneTablet.c
index ce0df01e..a6888bfd 100644
--- a/src/object/stoneTablet.c
+++ b/src/object/stoneTablet.c
@@ -15,6 +15,7 @@ void StoneTablet(Entity* this) {
}
void sub_080979CC(Entity* this) {
+ // TODO recreate as TileData[]
static const u16 gUnk_081232EC[] = { 0x4022, 0xfffe, 0x4022, 0xffff, 0x4022, 0x0, 0x4022, 0x1, 0xffff };
static const u16 gUnk_081232FE[] = { 0x4065, 0xffbf, 0x4022, 0xffc0, 0x4066, 0xffc1, 0x4029,
0xffff, 0x4026, 0x0, 0x402a, 0x1, 0xffff };
@@ -22,10 +23,10 @@ void sub_080979CC(Entity* this) {
this->spriteSettings.draw = 1;
if (this->type == 3) {
this->frameIndex = 0;
- SetMultipleTiles((u16*)gUnk_081232FE, COORD_TO_TILE(this), this->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_081232FE, COORD_TO_TILE(this), this->collisionLayer);
} else {
this->frameIndex = this->type;
- SetMultipleTiles((u16*)gUnk_081232EC, COORD_TO_TILE(this), this->collisionLayer);
+ SetMultipleTiles((TileData*)gUnk_081232EC, COORD_TO_TILE(this), this->collisionLayer);
}
}
diff --git a/src/physics.c b/src/physics.c
index 9cc3b53b..609d8e8c 100644
--- a/src/physics.c
+++ b/src/physics.c
@@ -217,31 +217,31 @@ u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) {
return CalculateDirectionTo(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y);
}
-u32 sub_0806F854(Entity* ent, s32 x, s32 y) {
+bool32 sub_0806F854(Entity* ent, s32 x, s32 y) {
if (ent->z.WORD == 0 || (ent->collisionLayer & 2))
- return 0;
+ return FALSE;
if (!sub_080B1BA4(TILE(ent->x.HALF.HI + x, ent->y.HALF.HI + y), 2, 8)) {
ent->spriteRendering.b3 = 1;
ent->spriteOrientation.flipY = 1;
- return 0;
+ return FALSE;
}
ent->spriteRendering.b3 = 2;
ent->spriteOrientation.flipY = 2;
- return 1;
+ return TRUE;
}
-u32 sub_0806F8DC(Entity* ent) {
+bool32 sub_0806F8DC(Entity* ent) {
if (ent->collisionLayer & 2)
- return 0;
+ return FALSE;
if (!GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, 2)) {
GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, ent->collisionLayer);
ent->spriteRendering.b3 = 1;
ent->spriteOrientation.flipY = 1;
- return 0;
+ return FALSE;
}
ent->spriteRendering.b3 = 2;
ent->spriteOrientation.flipY = 2;
- return 1;
+ return TRUE;
}
u32 sub_0806F948(Entity* ent) {
diff --git a/src/subtask2.c b/src/subtask2.c
index d4755441..8432d418 100644
--- a/src/subtask2.c
+++ b/src/subtask2.c
@@ -47,8 +47,6 @@ u32 sub_080A6D74(u32);
extern const ScreenTransitionData gUnk_08128024[];
void sub_080A71F4(ScreenTransitionData*);
-extern u8 gUnk_02018EB0[];
-
extern void DeleteAllEntities(void);
extern void sub_0805E974(void);
@@ -314,8 +312,8 @@ void MenuFadeIn(u32 param_1, u32 param_2) {
gUI.fadeInTime = 0x20;
gMain.substate = GAMEMAIN_SUBTASK;
SetFade(5, 0x20);
- gUnk_02018EB0[0] = 0;
- gUnk_02018EB0[1] = 0;
+ gUnk_02018EB0.unk_0 = 0;
+ gUnk_02018EB0.unk_1 = 0;
}
void sub_080A71A4(u32 param_1, u32 param_2, u32 param_3) {