From 4d66b468f843f72b6a7e5cae21b4c24cb25096d7 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:03:29 +0100 Subject: [PATCH 1/5] Merge playerUtils Merge all player utils files, split asm into functions and decompile a bunch of functions. --- asm/code_0805EC04.s | 223 - asm/code_08077B98.s | 967 --- asm/code_08078778.s | 6292 ----------------- asm/code_0807B9B8.s | 1997 ------ asm/code_0807CAA0.s | 153 - asm/enemy/code_080300AC.s | 101 - asm/getInventoryValue.s | 23 - asm/macros/scripts.inc | 2 +- .../playerUtils/GetSurfaceCalcType.inc | 88 + asm/non_matching/playerUtils/LoadRoomGfx.inc | 383 + .../playerUtils/ResolvePlayerAnimation.inc | 268 + .../playerUtils/RespawnPlayer.inc | 100 + .../playerUtils/SetInventoryValue.inc | 21 + asm/non_matching/playerUtils/SetTileType.inc | 135 + asm/non_matching/playerUtils/sub_080777A0.inc | 118 + asm/non_matching/playerUtils/sub_08077880.inc | 40 + asm/non_matching/playerUtils/sub_080778CC.inc | 64 + asm/non_matching/playerUtils/sub_08078008.inc | 56 + asm/non_matching/playerUtils/sub_08078180.inc | 157 + asm/non_matching/playerUtils/sub_080782C0.inc | 238 + asm/non_matching/playerUtils/sub_080784E4.inc | 315 + asm/non_matching/playerUtils/sub_08078930.inc | 20 + asm/non_matching/playerUtils/sub_08078954.inc | 47 + asm/non_matching/playerUtils/sub_080789A8.inc | 116 + asm/non_matching/playerUtils/sub_08078CD0.inc | 73 + asm/non_matching/playerUtils/sub_08078D60.inc | 152 + asm/non_matching/playerUtils/sub_08078FB0.inc | 99 + asm/non_matching/playerUtils/sub_08079064.inc | 68 + asm/non_matching/playerUtils/sub_080792D8.inc | 139 + asm/non_matching/playerUtils/sub_080793E4.inc | 57 + asm/non_matching/playerUtils/sub_08079550.inc | 218 + asm/non_matching/playerUtils/sub_08079778.inc | 38 + asm/non_matching/playerUtils/sub_080797C4.inc | 22 + asm/non_matching/playerUtils/sub_080797EC.inc | 178 + asm/non_matching/playerUtils/sub_08079B24.inc | 92 + asm/non_matching/playerUtils/sub_08079C30.inc | 110 + asm/non_matching/playerUtils/sub_08079E90.inc | 98 + asm/non_matching/playerUtils/sub_08079FD4.inc | 65 + asm/non_matching/playerUtils/sub_0807A094.inc | 66 + asm/non_matching/playerUtils/sub_0807A2F8.inc | 257 + asm/non_matching/playerUtils/sub_0807A500.inc | 103 + asm/non_matching/playerUtils/sub_0807A5B8.inc | 204 + asm/non_matching/playerUtils/sub_0807A750.inc | 184 + asm/non_matching/playerUtils/sub_0807A894.inc | 41 + asm/non_matching/playerUtils/sub_0807A8D8.inc | 209 + asm/non_matching/playerUtils/sub_0807AAF8.inc | 42 + asm/non_matching/playerUtils/sub_0807AB44.inc | 129 + asm/non_matching/playerUtils/sub_0807AC54.inc | 67 + asm/non_matching/playerUtils/sub_0807ACCC.inc | 121 + asm/non_matching/playerUtils/sub_0807ADB8.inc | 56 + asm/non_matching/playerUtils/sub_0807AE20.inc | 98 + asm/non_matching/playerUtils/sub_0807B480.inc | 108 + asm/non_matching/playerUtils/sub_0807B55C.inc | 39 + asm/non_matching/playerUtils/sub_0807B5B0.inc | 40 + asm/non_matching/playerUtils/sub_0807B600.inc | 173 + asm/non_matching/playerUtils/sub_0807B778.inc | 44 + asm/non_matching/playerUtils/sub_0807B9B8.inc | 99 + asm/non_matching/playerUtils/sub_0807BA8C.inc | 101 + asm/non_matching/playerUtils/sub_0807BBE4.inc | 79 + asm/non_matching/playerUtils/sub_0807BC84.inc | 73 + asm/non_matching/playerUtils/sub_0807BD14.inc | 87 + asm/non_matching/playerUtils/sub_0807BDB8.inc | 159 + asm/non_matching/playerUtils/sub_0807BEEC.inc | 84 + asm/non_matching/playerUtils/sub_0807BF88.inc | 19 + asm/non_matching/playerUtils/sub_0807BFD0.inc | 123 + asm/non_matching/playerUtils/sub_0807C460.inc | 79 + asm/non_matching/playerUtils/sub_0807C4F8.inc | 83 + asm/non_matching/playerUtils/sub_0807C5B0.inc | 36 + asm/non_matching/playerUtils/sub_0807C5F4.inc | 96 + asm/non_matching/playerUtils/sub_0807C69C.inc | 92 + asm/non_matching/playerUtils/sub_0807C740.inc | 111 + asm/non_matching/playerUtils/sub_0807C810.inc | 37 + asm/non_matching/playerUtils/sub_0807C8B0.inc | 98 + asm/non_matching/playerUtils/sub_0807CAC8.inc | 18 + asm/non_matching/playerUtils/sub_0807CAEC.inc | 18 + asm/non_matching/playerUtils/sub_0807CB24.inc | 74 + asm/object/objectB.s | 2 +- asm/object/waterfallOpening.s | 4 +- asm/playerUtils.s | 638 -- data/data_0811BE38.s | 2 +- .../introAssembly/script_PlayerGetSword.inc | 2 +- .../introCeremony/script_Npc4EMonsters.inc | 4 +- .../script_Npc4EVaatiAttacking.inc | 4 +- .../introTown/script_Npc4EIntroCastle.inc | 2 +- .../introTown/script_Npc4EIntroTown.inc | 4 +- data/scripts/graveyard/script_DampeInside.inc | 2 +- data/scripts/graveyard/script_DampeOuside.inc | 2 +- .../script_Object69CrowStealingKey.inc | 2 +- .../mtCrenel/script_PlayerGetWhiteSword.inc | 2 +- .../sanctuary/script_Npc4EPedestal.inc | 6 +- .../sanctuary/script_Npc4ESecondSanctuary.inc | 6 +- .../sanctuary/script_Npc4EThirdSanctuary.inc | 10 +- data/scripts/unused/script_08016482.inc | 2 +- .../veilFalls/script_BigGoronMirrorShield.inc | 4 +- include/asm.h | 2 +- include/flags.h | 2 - include/functions.h | 45 +- include/kinstone.h | 7 - include/new_player.h | 11 +- include/player.h | 37 +- include/structures.h | 37 + linker.ld | 6 +- src/code_0805EC04.c | 40 + src/code_08077B98.c | 287 - src/code_08078778.c | 77 - src/common.c | 2 +- src/coord.c | 5 +- src/enemy/acroBandits.c | 2 +- src/enemy/armos.c | 37 + src/enemy/businessScrub.c | 42 +- src/enemy/code_080300AC.c | 15 - src/enemy/likeLike.c | 22 +- src/enemy/rockChuchu.c | 2 +- src/enemy/spearMoblin.c | 2 +- src/enemy/spinyBeetle.c | 2 +- src/enemy/treeItem.c | 3 +- src/enemy/vaatiTransfigured.c | 2 +- src/fileselect.c | 9 +- src/flags.c | 7 +- src/interrupts.c | 23 +- src/item/itemBomb.c | 3 +- src/item/itemBow.c | 4 +- src/item/itemGustJar.c | 2 - src/item/itemLantern.c | 6 +- src/item/itemPacciCane.c | 9 +- src/item/itemPegasusBoots.c | 7 +- src/item/itemShield.c | 10 +- src/item/itemSword.c | 28 +- src/manager/managerF.c | 2 +- src/menu/kinstone_menu.c | 4 +- src/message.c | 6 +- src/npc/beedle.c | 2 +- src/npc/bigGoron.c | 9 +- src/npc/bladeBrothers.c | 42 +- src/npc/carpenter.c | 3 +- src/npc/dampe.c | 5 +- src/npc/dog.c | 10 +- src/npc/drLeft.c | 8 +- src/npc/forestMinish.c | 20 +- src/npc/kingDaltus.c | 5 +- src/npc/librari.c | 4 +- src/npc/librarians.c | 28 +- src/npc/marcy.c | 15 +- src/npc/mayorHagen.c | 4 +- src/npc/melari.c | 5 +- src/npc/ministerPotho.c | 5 +- src/npc/mountainMinish.c | 5 +- src/npc/mutoh.c | 3 +- src/npc/npc4E.c | 23 +- src/npc/pita.c | 18 +- src/npc/sturgeon.c | 3 +- src/npc/talon.c | 3 +- src/npc/townMinish.c | 7 +- src/npc/townsperson.c | 3 +- src/npc/windTribespeople.c | 2 +- src/object/bigVortex.c | 4 +- src/object/book.c | 4 +- src/object/button.c | 2 +- src/object/cloud.c | 2 +- src/object/itemForSale.c | 2 +- src/object/object43.c | 4 +- src/object/object6A.c | 4 +- src/object/object86.c | 5 +- src/object/objectOnSpinyBeetle.c | 2 +- src/object/treeHidingPortal.c | 6 - src/player.c | 11 +- src/playerItem/playerItem3.c | 3 +- src/playerItem/playerItemC.c | 2 +- src/playerUtils.c | 1873 +++++ src/respawnPlayer.c | 38 - src/roomInit.c | 37 +- src/script.c | 39 +- src/sub_0807B820.c | 53 - src/sub_0807CA18.c | 77 - 174 files changed, 9483 insertions(+), 11302 deletions(-) delete mode 100644 asm/code_0805EC04.s delete mode 100644 asm/code_08077B98.s delete mode 100644 asm/code_08078778.s delete mode 100644 asm/code_0807B9B8.s delete mode 100644 asm/code_0807CAA0.s delete mode 100644 asm/enemy/code_080300AC.s delete mode 100644 asm/getInventoryValue.s create mode 100644 asm/non_matching/playerUtils/GetSurfaceCalcType.inc create mode 100644 asm/non_matching/playerUtils/LoadRoomGfx.inc create mode 100644 asm/non_matching/playerUtils/ResolvePlayerAnimation.inc create mode 100644 asm/non_matching/playerUtils/RespawnPlayer.inc create mode 100644 asm/non_matching/playerUtils/SetInventoryValue.inc create mode 100644 asm/non_matching/playerUtils/SetTileType.inc create mode 100644 asm/non_matching/playerUtils/sub_080777A0.inc create mode 100644 asm/non_matching/playerUtils/sub_08077880.inc create mode 100644 asm/non_matching/playerUtils/sub_080778CC.inc create mode 100644 asm/non_matching/playerUtils/sub_08078008.inc create mode 100644 asm/non_matching/playerUtils/sub_08078180.inc create mode 100644 asm/non_matching/playerUtils/sub_080782C0.inc create mode 100644 asm/non_matching/playerUtils/sub_080784E4.inc create mode 100644 asm/non_matching/playerUtils/sub_08078930.inc create mode 100644 asm/non_matching/playerUtils/sub_08078954.inc create mode 100644 asm/non_matching/playerUtils/sub_080789A8.inc create mode 100644 asm/non_matching/playerUtils/sub_08078CD0.inc create mode 100644 asm/non_matching/playerUtils/sub_08078D60.inc create mode 100644 asm/non_matching/playerUtils/sub_08078FB0.inc create mode 100644 asm/non_matching/playerUtils/sub_08079064.inc create mode 100644 asm/non_matching/playerUtils/sub_080792D8.inc create mode 100644 asm/non_matching/playerUtils/sub_080793E4.inc create mode 100644 asm/non_matching/playerUtils/sub_08079550.inc create mode 100644 asm/non_matching/playerUtils/sub_08079778.inc create mode 100644 asm/non_matching/playerUtils/sub_080797C4.inc create mode 100644 asm/non_matching/playerUtils/sub_080797EC.inc create mode 100644 asm/non_matching/playerUtils/sub_08079B24.inc create mode 100644 asm/non_matching/playerUtils/sub_08079C30.inc create mode 100644 asm/non_matching/playerUtils/sub_08079E90.inc create mode 100644 asm/non_matching/playerUtils/sub_08079FD4.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A094.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A2F8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A500.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A5B8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A750.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A894.inc create mode 100644 asm/non_matching/playerUtils/sub_0807A8D8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807AAF8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807AB44.inc create mode 100644 asm/non_matching/playerUtils/sub_0807AC54.inc create mode 100644 asm/non_matching/playerUtils/sub_0807ACCC.inc create mode 100644 asm/non_matching/playerUtils/sub_0807ADB8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807AE20.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B480.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B55C.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B5B0.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B600.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B778.inc create mode 100644 asm/non_matching/playerUtils/sub_0807B9B8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BA8C.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BBE4.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BC84.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BD14.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BDB8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BEEC.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BF88.inc create mode 100644 asm/non_matching/playerUtils/sub_0807BFD0.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C460.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C4F8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C5B0.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C5F4.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C69C.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C740.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C810.inc create mode 100644 asm/non_matching/playerUtils/sub_0807C8B0.inc create mode 100644 asm/non_matching/playerUtils/sub_0807CAC8.inc create mode 100644 asm/non_matching/playerUtils/sub_0807CAEC.inc create mode 100644 asm/non_matching/playerUtils/sub_0807CB24.inc delete mode 100644 asm/playerUtils.s delete mode 100644 src/code_08077B98.c delete mode 100644 src/code_08078778.c delete mode 100644 src/enemy/code_080300AC.c create mode 100644 src/playerUtils.c delete mode 100644 src/respawnPlayer.c delete mode 100644 src/sub_0807B820.c delete mode 100644 src/sub_0807CA18.c diff --git a/asm/code_0805EC04.s b/asm/code_0805EC04.s deleted file mode 100644 index a4fecfbf..00000000 --- a/asm/code_0805EC04.s +++ /dev/null @@ -1,223 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805ED30 -sub_0805ED30: @ 0x0805ED30 - push {r4, lr} - ldr r2, _0805ED50 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x9c - ldr r0, [r0] - adds r4, r2, #0 - cmp r0, #0 - beq _0805ED88 - adds r1, r4, #0 - adds r1, #0x90 - ldr r2, [r1, #0xc] - ldrh r0, [r1, #8] - cmp r0, #0 - bne _0805ED7E - movs r4, #0 - b _0805ED62 - .align 2, 0 -_0805ED50: .4byte gPlayerState -_0805ED54: - cmp r0, #2 - beq _0805ED5E - strh r3, [r1, #8] - ldrh r0, [r2, #2] - strh r0, [r1, #0xa] -_0805ED5E: - adds r2, #4 - b _0805ED7C -_0805ED62: - ldrh r3, [r2] - lsrs r0, r3, #0xe - cmp r0, #1 - bne _0805ED72 - movs r3, #2 - ldrsh r0, [r2, r3] - adds r2, r2, r0 - b _0805ED62 -_0805ED72: - cmp r0, #3 - bne _0805ED54 - strh r4, [r1, #8] - strh r4, [r1, #0xa] - movs r2, #0 -_0805ED7C: - str r2, [r1, #0xc] -_0805ED7E: - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - ldrh r1, [r1, #0xa] - b _0805EDCA -_0805ED88: - adds r0, r4, #0 - adds r0, #0x8b - ldrb r0, [r0] - cmp r0, #3 - bgt _0805ED98 - cmp r0, #0 - blt _0805ED98 - movs r1, #0 -_0805ED98: - adds r2, r4, #0 - adds r2, #0x8b - ldrb r0, [r2] - cmp r0, #1 - beq _0805EDB4 - cmp r0, #1 - bgt _0805EDAC - cmp r0, #0 - beq _0805EDC6 - b _0805EDCA -_0805EDAC: - cmp r0, #3 - bgt _0805EDCA - movs r1, #0 - b _0805EDCA -_0805EDB4: - movs r0, #0 - strb r0, [r2] - ldr r0, _0805EDF8 @ =gInput - ldrh r0, [r0] - bl sub_0805EE04 - adds r1, r4, #0 - adds r1, #0x90 - strh r0, [r1] -_0805EDC6: - ldr r0, _0805EDF8 @ =gInput - ldrh r1, [r0] -_0805EDCA: - adds r0, r1, #0 - bl sub_0805EE04 - ldr r3, _0805EDFC @ =gPlayerState - adds r1, r3, #0 - adds r1, #0x90 - ldrh r2, [r1] - strh r0, [r1] - adds r1, r0, #0 - bics r1, r2 - adds r2, r3, #0 - adds r2, #0x92 - strh r1, [r2] - ldr r2, _0805EE00 @ =gUnk_08109202 - movs r1, #0xf0 - lsls r1, r1, #4 - ands r1, r0 - lsrs r1, r1, #8 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r3, #0xd] - pop {r4, pc} - .align 2, 0 -_0805EDF8: .4byte gInput -_0805EDFC: .4byte gPlayerState -_0805EE00: .4byte gUnk_08109202 - - thumb_func_start sub_0805EE04 -sub_0805EE04: @ 0x0805EE04 - push {r4, r5, lr} - adds r2, r0, #0 - movs r5, #0x80 - lsls r5, r5, #2 - ands r0, r5 - rsbs r0, r0, #0 - asrs r1, r0, #0x1f - movs r0, #0x80 - lsls r0, r0, #5 - ands r1, r0 - movs r4, #0x80 - lsls r4, r4, #1 - adds r0, r2, #0 - ands r0, r4 - cmp r0, #0 - beq _0805EE32 - movs r0, #0x20 - orrs r1, r0 - movs r0, #0x80 - lsls r0, r0, #8 - orrs r1, r0 - movs r0, #0x80 - orrs r1, r0 -_0805EE32: - movs r0, #1 - ands r0, r2 - cmp r0, #0 - beq _0805EE42 - movs r0, #8 - orrs r1, r0 - movs r0, #0x41 - orrs r1, r0 -_0805EE42: - movs r3, #2 - adds r0, r2, #0 - ands r0, r3 - cmp r0, #0 - beq _0805EE52 - movs r0, #0x10 - orrs r1, r0 - orrs r1, r3 -_0805EE52: - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - beq _0805EE5C - orrs r1, r4 -_0805EE5C: - movs r0, #0x20 - ands r0, r2 - cmp r0, #0 - beq _0805EE66 - orrs r1, r5 -_0805EE66: - movs r0, #0x40 - ands r0, r2 - cmp r0, #0 - beq _0805EE74 - movs r0, #0x80 - lsls r0, r0, #3 - orrs r1, r0 -_0805EE74: - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - beq _0805EE82 - movs r0, #0x80 - lsls r0, r0, #4 - orrs r1, r0 -_0805EE82: - adds r0, r1, #0 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0805EE88 -sub_0805EE88: @ 0x0805EE88 - push {lr} - ldr r1, _0805EEB0 @ =gRoomTransition - adds r0, r1, #0 - adds r0, #0x2f - ldrb r0, [r0] - cmp r0, #0 - beq _0805EEAC - ldr r1, [r1] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _0805EEAC - movs r0, #0xc - ands r1, r0 - lsrs r0, r1, #2 - adds r0, #0x2f - bl LoadPaletteGroup -_0805EEAC: - pop {pc} - .align 2, 0 -_0805EEB0: .4byte gRoomTransition - diff --git a/asm/code_08077B98.s b/asm/code_08077B98.s deleted file mode 100644 index e1eb8613..00000000 --- a/asm/code_08077B98.s +++ /dev/null @@ -1,967 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08077FEC -sub_08077FEC: @ 0x08077FEC - push {lr} - ldr r0, _08078000 @ =gPlayerState + 0xA0 - ldr r2, _08078004 @ =gUnk_0811BFE8 - ldrb r1, [r0] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08078000: .4byte gPlayerState + 0xA0 -_08078004: .4byte gUnk_0811BFE8 - - thumb_func_start sub_08078008 -sub_08078008: @ 0x08078008 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r6, _08078060 @ =gSave - adds r5, r6, #0 - adds r5, #0xb4 - ldrb r0, [r5] - bl ItemIsSword - cmp r0, #0 - bne _0807802C - adds r5, r6, #0 - adds r5, #0xb5 - ldrb r0, [r5] - bl ItemIsSword - movs r2, #0 - cmp r0, #0 - beq _0807802E -_0807802C: - ldrb r2, [r5] -_0807802E: - subs r0, r2, #1 - cmp r0, #1 - bhi _08078036 - movs r2, #0 -_08078036: - cmp r2, #0 - beq _08078068 - ldr r0, _08078064 @ =gPlayerState - ldrb r1, [r0, #0x1b] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08078068 - ldrb r0, [r4, #1] - adds r0, #1 - strb r0, [r4, #1] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0x14 - ble _0807806C - movs r0, #0xa - strb r0, [r4, #1] - movs r0, #3 - strb r0, [r4] - strb r2, [r4, #2] - b _0807806C - .align 2, 0 -_08078060: .4byte gSave -_08078064: .4byte gPlayerState -_08078068: - movs r0, #0 - strb r0, [r4, #1] -_0807806C: - movs r0, #0 - pop {r4, r5, r6, pc} - - thumb_func_start sub_08078070 -sub_08078070: @ 0x08078070 - push {lr} - adds r2, r0, #0 - ldr r3, _08078098 @ =gPlayerState - ldrb r1, [r3, #0x1b] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080780D6 - adds r0, r3, #0 - adds r0, #0xac - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #3 - ands r0, r1 - cmp r0, #0 - beq _0807809C - ldrh r0, [r2, #4] - adds r0, #0xc - b _080780A0 - .align 2, 0 -_08078098: .4byte gPlayerState -_0807809C: - ldrh r0, [r2, #4] - adds r0, #6 -_080780A0: - strh r0, [r2, #4] - movs r0, #4 - ldrsh r1, [r2, r0] - ldr r0, _080780BC @ =0x0000031F - cmp r1, r0 - ble _080780C0 - adds r0, #1 - strh r0, [r2, #4] - movs r0, #4 - strb r0, [r2] - movs r0, #0xd8 - bl SoundReq - b _080780DA - .align 2, 0 -_080780BC: .4byte 0x0000031F -_080780C0: - movs r1, #4 - ldrsh r0, [r2, r1] - movs r1, #0x14 - bl Mod - cmp r0, #0 - bne _080780DA - movs r0, #0xd7 - bl SoundReq - b _080780DA -_080780D6: - movs r0, #1 - strb r0, [r2] -_080780DA: - movs r0, #1 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080780E0 -sub_080780E0: @ 0x080780E0 - push {lr} - adds r2, r0, #0 - ldr r0, _080780F4 @ =gPlayerState - ldrb r1, [r0, #0x1b] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _080780F8 - movs r0, #5 - b _08078102 - .align 2, 0 -_080780F4: .4byte gPlayerState -_080780F8: - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - bne _08078104 - movs r0, #1 -_08078102: - strb r0, [r2] -_08078104: - movs r0, #1 - pop {pc} - - thumb_func_start sub_08078108 -sub_08078108: @ 0x08078108 - push {lr} - adds r1, r0, #0 - ldrh r0, [r1, #4] - subs r0, #1 - strh r0, [r1, #4] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08078120 - movs r0, #0 - strh r0, [r1, #4] - movs r0, #2 - strb r0, [r1] -_08078120: - movs r0, #1 - pop {pc} - - thumb_func_start sub_08078124 -sub_08078124: @ 0x08078124 - push {lr} - adds r1, r0, #0 - ldrh r0, [r1, #4] - subs r0, #0x10 - strh r0, [r1, #4] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _0807813C - movs r0, #0 - strh r0, [r1, #4] - movs r0, #2 - strb r0, [r1] -_0807813C: - movs r0, #1 - pop {pc} - - thumb_func_start sub_08078140 -sub_08078140: @ 0x08078140 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #1] - subs r0, #1 - movs r2, #0 - strb r0, [r1, #1] - lsls r0, r0, #0x18 - cmp r0, #0 - blt _08078156 - movs r0, #0 - b _0807815C -_08078156: - strb r2, [r1, #1] - strb r2, [r1] - movs r0, #1 -_0807815C: - pop {pc} - .align 2, 0 - - thumb_func_start ForceSetPlayerState -ForceSetPlayerState: @ 0x08078160 - push {lr} - ldr r1, _08078178 @ =gPlayerState - adds r1, #0xa8 - strb r0, [r1] - ldr r2, _0807817C @ =gPlayerEntity - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - bl sub_08078B48 - pop {pc} - .align 2, 0 -_08078178: .4byte gPlayerState -_0807817C: .4byte gPlayerEntity - - thumb_func_start sub_08078180 -sub_08078180: @ 0x08078180 - push {r4, r5, r6, lr} - ldr r0, _080781C8 @ =gUnk_0200AF00 - adds r1, r0, #0 - adds r1, #0x2f - ldrb r1, [r1] - adds r6, r0, #0 - cmp r1, #0 - beq _08078192 - b _080782BC -_08078192: - movs r4, #0 - ldr r5, _080781CC @ =gPlayerState - ldrb r0, [r5, #2] - cmp r0, #0 - beq _0807819E - b _080782B6 -_0807819E: - ldr r0, [r5, #0x30] - ldr r1, _080781D0 @ =0x00104D00 - ands r0, r1 - cmp r0, #0 - beq _080781AA - b _080782B6 -_080781AA: - ldrb r0, [r5, #5] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bhi _080781D4 - adds r1, r6, #0 - adds r1, #0x2e - ldrb r0, [r1] - movs r4, #3 - cmp r0, #0 - bne _080781C4 - b _080782B6 -_080781C4: - adds r4, r0, #0 - b _080782B6 - .align 2, 0 -_080781C8: .4byte gUnk_0200AF00 -_080781CC: .4byte gPlayerState -_080781D0: .4byte 0x00104D00 -_080781D4: - adds r1, r6, #0 - adds r1, #0x2d - ldrb r0, [r1] - cmp r0, #0 - bne _080781C4 - bl sub_080784E4 - adds r1, r0, #0 - ldr r0, [r1, #8] - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _08078278 - ldrb r0, [r1, #1] - subs r0, #1 - cmp r0, #9 - bhi _080782B6 - lsls r0, r0, #2 - ldr r1, _08078204 @ =_08078208 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078204: .4byte _08078208 -_08078208: @ jump table - .4byte _08078230 @ case 0 - .4byte _080782B6 @ case 1 - .4byte _08078254 @ case 2 - .4byte _080782B6 @ case 3 - .4byte _08078254 @ case 4 - .4byte _08078254 @ case 5 - .4byte _08078230 @ case 6 - .4byte _0807823C @ case 7 - .4byte _08078260 @ case 8 - .4byte _0807826C @ case 9 -_08078230: - movs r4, #7 - ldr r6, _08078238 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078238: .4byte gUnk_0200AF00 -_0807823C: - ldr r0, _0807824C @ =gRoomVars - ldrb r0, [r0, #6] - ldr r6, _08078250 @ =gUnk_0200AF00 - cmp r0, #0 - bne _080782B6 - movs r4, #9 - b _080782B6 - .align 2, 0 -_0807824C: .4byte gRoomVars -_08078250: .4byte gUnk_0200AF00 -_08078254: - movs r4, #6 - ldr r6, _0807825C @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_0807825C: .4byte gUnk_0200AF00 -_08078260: - movs r4, #5 - ldr r6, _08078268 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078268: .4byte gUnk_0200AF00 -_0807826C: - movs r4, #2 - ldr r6, _08078274 @ =gUnk_0200AF00 - b _080782B6 - .align 2, 0 -_08078274: .4byte gUnk_0200AF00 -_08078278: - bl sub_080789A8 - cmp r0, #0 - beq _080782A4 - adds r0, r5, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0xe - beq _080782BC - ldr r1, _080782A0 @ =gUnk_03003BE0 - ldrb r0, [r1, #1] - movs r4, #9 - cmp r0, #2 - bne _080782B6 - ldr r0, [r1, #8] - ldrb r0, [r0, #0x16] - cmp r0, #1 - bne _080782B6 - movs r4, #8 - b _080782B6 - .align 2, 0 -_080782A0: .4byte gUnk_03003BE0 -_080782A4: - adds r0, r5, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #1 - bne _080782B6 - ldrb r0, [r5, #0x1a] - cmp r0, #0 - bne _080782B6 - movs r4, #0xc -_080782B6: - adds r0, r6, #0 - adds r0, #0x2c - strb r4, [r0] -_080782BC: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080782C0 -sub_080782C0: @ 0x080782C0 - push {r4, r5, r6, lr} - ldr r1, _080782D8 @ =gPlayerState - adds r2, r1, #0 - adds r2, #0xa8 - ldrb r0, [r2] - adds r4, r1, #0 - cmp r0, #0 - bne _080782DC - adds r0, r4, #0 - adds r0, #0xa9 - ldrb r0, [r0] - b _080782DE - .align 2, 0 -_080782D8: .4byte gPlayerState -_080782DC: - ldrb r0, [r2] -_080782DE: - subs r0, #2 - cmp r0, #0x14 - bhi _08078348 - lsls r0, r0, #2 - ldr r1, _080782F0 @ =_080782F4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080782F0: .4byte _080782F4 -_080782F4: @ jump table - .4byte _080784AC @ case 0 - .4byte _080784AC @ case 1 - .4byte _08078348 @ case 2 - .4byte _08078348 @ case 3 - .4byte _08078348 @ case 4 - .4byte _08078348 @ case 5 - .4byte _08078348 @ case 6 - .4byte _08078348 @ case 7 - .4byte _08078348 @ case 8 - .4byte _08078348 @ case 9 - .4byte _080784AC @ case 10 - .4byte _08078348 @ case 11 - .4byte _08078348 @ case 12 - .4byte _08078348 @ case 13 - .4byte _08078348 @ case 14 - .4byte _08078348 @ case 15 - .4byte _080784AC @ case 16 - .4byte _08078348 @ case 17 - .4byte _08078348 @ case 18 - .4byte _080784AC @ case 19 - .4byte _080784AC @ case 20 -_08078348: - adds r0, r4, #0 - adds r0, #0x27 - adds r2, r4, #0 - adds r2, #0x26 - ldrb r1, [r0] - ldrb r0, [r2] - orrs r0, r1 - cmp r0, #0 - beq _0807835C - b _080784AC -_0807835C: - ldrb r0, [r4, #0x12] - cmp r0, #1 - bne _08078376 - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _0807836A - b _080784AC -_0807836A: - bl CanDispEzloMessage - cmp r0, #0 - beq _08078374 - b _080784C4 -_08078374: - b _080784AC -_08078376: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #7 - ands r0, r1 - cmp r0, #0 - beq _08078384 - b _080784AC -_08078384: - bl CanDispEzloMessage - cmp r0, #0 - beq _0807838E - b _080784C4 -_0807838E: - bl sub_080784E4 - ldr r6, [r0, #8] - cmp r6, #0 - bne _0807839A - b _080784AC -_0807839A: - ldrb r0, [r4, #5] - cmp r0, #0 - beq _080783B6 - cmp r0, #4 - beq _080783A6 - b _080784AC -_080783A6: - ldr r0, _08078400 @ =gPlayerEntity - ldr r0, [r0, #0x74] - ldr r0, [r0, #0x54] - ldrh r1, [r0, #8] - ldr r0, _08078404 @ =0x00000206 - cmp r1, r0 - beq _080783B6 - b _080784AC -_080783B6: - ldr r2, _08078408 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #5 - ands r0, r1 - adds r4, r2, #0 - cmp r0, #0 - beq _0807842C - ldr r5, _0807840C @ =gUnk_03003DF0 - ldr r0, [r5, #4] - ldrb r0, [r0, #3] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x63 - bhi _0807842C - movs r0, #0 - bl sub_0801E738 - ldr r0, _08078410 @ =gSave - ldr r1, _08078414 @ =0x0000012B - adds r0, r0, r1 - ldrb r0, [r0] - cmp r0, #0 - beq _08078418 - ldr r1, [r5, #4] - ldrb r0, [r1, #3] - strb r0, [r5, #2] - ldr r0, [r1, #8] - adds r0, #0x39 - movs r1, #2 - strb r1, [r0] - movs r0, #7 - strb r0, [r4, #0xc] - b _08078420 - .align 2, 0 -_08078400: .4byte gPlayerEntity -_08078404: .4byte 0x00000206 -_08078408: .4byte gPlayerState -_0807840C: .4byte gUnk_03003DF0 -_08078410: .4byte gSave -_08078414: .4byte 0x0000012B -_08078418: - ldr r0, _08078428 @ =0x00000B65 - movs r1, #0 - bl CreateEzloHint -_08078420: - movs r0, #0x13 - bl ForceSetPlayerState - b _080784C4 - .align 2, 0 -_08078428: .4byte 0x00000B65 -_0807842C: - adds r0, r4, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x88 - ands r0, r1 - cmp r0, #0 - beq _080784AC - ldr r0, _08078450 @ =gUnk_03003DF0 - ldr r0, [r0, #4] - ldrb r0, [r0, #1] - cmp r0, #0xa - bhi _080784C4 - lsls r0, r0, #2 - ldr r1, _08078454 @ =_08078458 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078450: .4byte gUnk_03003DF0 -_08078454: .4byte _08078458 -_08078458: @ jump table - .4byte _080784C4 @ case 0 - .4byte _08078484 @ case 1 - .4byte _080784C4 @ case 2 - .4byte _0807848E @ case 3 - .4byte _080784C4 @ case 4 - .4byte _0807848E @ case 5 - .4byte _08078484 @ case 6 - .4byte _0807848E @ case 7 - .4byte _080784A4 @ case 8 - .4byte _08078484 @ case 9 - .4byte _08078484 @ case 10 -_08078484: - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x13 - bl ForceSetPlayerState -_0807848E: - adds r1, r6, #0 - adds r1, #0x39 - movs r2, #0 - movs r0, #1 - strb r0, [r1] - ldr r0, _080784A0 @ =gUnk_03003DF0 - strb r2, [r0, #2] - b _080784C4 - .align 2, 0 -_080784A0: .4byte gUnk_03003DF0 -_080784A4: - ldr r2, _080784B0 @ =gRoomVars - ldrb r0, [r2, #6] - cmp r0, #0 - beq _080784B4 -_080784AC: - movs r0, #0 - b _080784C6 - .align 2, 0 -_080784B0: .4byte gRoomVars -_080784B4: - adds r1, r6, #0 - adds r1, #0x39 - movs r0, #1 - strb r0, [r1] - ldrb r0, [r6, #0xa] - strb r0, [r2, #6] - ldrb r0, [r6, #0xb] - strb r0, [r2, #7] -_080784C4: - movs r0, #1 -_080784C6: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080784C8 -sub_080784C8: @ 0x080784C8 - push {r4, lr} - ldr r4, _080784DC @ =gUnk_03003DF0 - movs r1, #0xc4 - lsls r1, r1, #1 - adds r0, r4, #0 - bl MemClear - ldr r0, _080784E0 @ =gUnk_0811C000 - str r0, [r4, #4] - pop {r4, pc} - .align 2, 0 -_080784DC: .4byte gUnk_03003DF0 -_080784E0: .4byte gUnk_0811C000 - - thumb_func_start sub_080784E4 -sub_080784E4: @ 0x080784E4 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _080784FC @ =gUnk_03003DF0 - ldrb r1, [r0] - mov r8, r0 - cmp r1, #0 - beq _08078500 - ldr r0, [r0, #4] - b _0807876A - .align 2, 0 -_080784FC: .4byte gUnk_03003DF0 -_08078500: - ldr r2, _08078528 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x27 - adds r3, r2, #0 - adds r3, #0x26 - ldrb r1, [r0] - ldrb r0, [r3] - orrs r0, r1 - cmp r0, #0 - bne _08078598 - adds r1, r2, #0 - adds r1, #0xa8 - ldrb r0, [r1] - cmp r0, #0 - bne _0807852C - adds r0, r2, #0 - adds r0, #0xa9 - ldrb r0, [r0] - b _0807852E - .align 2, 0 -_08078528: .4byte gPlayerState -_0807852C: - ldrb r0, [r1] -_0807852E: - subs r0, #2 - cmp r0, #0x14 - bhi _080785B0 - lsls r0, r0, #2 - ldr r1, _08078540 @ =_08078544 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078540: .4byte _08078544 -_08078544: @ jump table - .4byte _08078598 @ case 0 - .4byte _08078598 @ case 1 - .4byte _080785B0 @ case 2 - .4byte _080785B0 @ case 3 - .4byte _080785B0 @ case 4 - .4byte _080785B0 @ case 5 - .4byte _080785B0 @ case 6 - .4byte _080785B0 @ case 7 - .4byte _080785B0 @ case 8 - .4byte _080785B0 @ case 9 - .4byte _080785B0 @ case 10 - .4byte _080785B0 @ case 11 - .4byte _080785B0 @ case 12 - .4byte _080785B0 @ case 13 - .4byte _080785B0 @ case 14 - .4byte _080785B0 @ case 15 - .4byte _08078598 @ case 16 - .4byte _080785B0 @ case 17 - .4byte _080785B0 @ case 18 - .4byte _08078598 @ case 19 - .4byte _08078598 @ case 20 -_08078598: - movs r0, #0xff - mov r1, r8 - strb r0, [r1, #3] - ldr r0, _080785AC @ =gUnk_0811C000 - str r0, [r1, #4] - movs r1, #1 - mov r2, r8 - strb r1, [r2] - b _0807876A - .align 2, 0 -_080785AC: .4byte gUnk_0811C000 -_080785B0: - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080785F0 - bl HasDungeonMap - cmp r0, #0 - beq _080785C4 - movs r0, #1 -_080785C4: - adds r7, r0, #0 - bl HasDungeonCompass - cmp r0, #0 - beq _080785D2 - movs r0, #2 - orrs r7, r0 -_080785D2: - ldr r3, _080785E4 @ =gPlayerEntity - ldrb r0, [r3, #0x14] - movs r1, #6 - ands r1, r0 - ldr r0, _080785E8 @ =gUnk_0811C00C - adds r2, r1, r0 - ldr r5, _080785EC @ =gUnk_03003DF0 - mov r8, r5 - b _080785FE - .align 2, 0 -_080785E4: .4byte gPlayerEntity -_080785E8: .4byte gUnk_0811C00C -_080785EC: .4byte gUnk_03003DF0 -_080785F0: - ldr r3, _08078624 @ =gPlayerEntity - ldrb r0, [r3, #0x14] - movs r1, #6 - ands r1, r0 - ldr r0, _08078628 @ =gUnk_0811C014 - adds r2, r1, r0 - movs r7, #0 -_080785FE: - mov ip, r3 - mov r0, ip - movs r3, #0x2e - ldrsh r1, [r0, r3] - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - mov sl, r1 - mov r5, ip - movs r0, #0x32 - ldrsh r1, [r5, r0] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - mov sb, r1 - movs r6, #0 - ldr r5, _0807862C @ =gUnk_03003DF8 - b _08078724 - .align 2, 0 -_08078624: .4byte gPlayerEntity -_08078628: .4byte gUnk_0811C014 -_0807862C: .4byte gUnk_03003DF8 -_08078630: - ldrb r1, [r5] - movs r3, #1 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - bne _0807864E - mov r0, ip - adds r0, #0x38 - adds r1, r2, #0 - adds r1, #0x38 - ldrb r2, [r0] - ldrb r0, [r1] - ands r0, r2 - cmp r0, #0 - beq _08078714 -_0807864E: - ldrb r1, [r5, #2] - mov r2, ip - ldrb r0, [r2, #0x14] - lsrs r0, r0, #1 - asrs r1, r0 - ands r1, r3 - cmp r1, #0 - bne _08078714 - ldrb r0, [r5, #1] - cmp r0, #0xa - bhi _080786D4 - lsls r0, r0, #2 - ldr r1, _08078670 @ =_08078674 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078670: .4byte _08078674 -_08078674: @ jump table - .4byte _08078714 @ case 0 - .4byte _080786A0 @ case 1 - .4byte _080786C4 @ case 2 - .4byte _080786A0 @ case 3 - .4byte _080786A0 @ case 4 - .4byte _080786C8 @ case 5 - .4byte _080786CC @ case 6 - .4byte _080786B4 @ case 7 - .4byte _080786A0 @ case 8 - .4byte _080786A0 @ case 9 - .4byte _080786D4 @ case 10 -_080786A0: - ldr r0, _080786B0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08078714 - b _080786D4 - .align 2, 0 -_080786B0: .4byte gPlayerState -_080786B4: - ldr r0, _080786C0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - b _080786D0 - .align 2, 0 -_080786C0: .4byte gPlayerState -_080786C4: - ldrb r0, [r5, #3] - b _080786D0 -_080786C8: - movs r0, #1 - b _080786CE -_080786CC: - movs r0, #2 -_080786CE: - ands r0, r7 -_080786D0: - cmp r0, #0 - beq _08078714 -_080786D4: - ldr r0, [r5, #8] - movs r1, #0x2e - ldrsh r3, [r0, r1] - movs r2, #0x32 - ldrsh r4, [r0, r2] - ldr r1, [r5, #4] - cmp r1, #0 - beq _080786F4 - movs r0, #0 - ldrsb r0, [r1, r0] - adds r3, r3, r0 - movs r0, #1 - ldrsb r0, [r1, r0] - adds r4, r4, r0 - adds r2, r1, #2 - b _080786F8 -_080786F4: - ldr r0, [r0, #0x48] - adds r2, r0, #6 -_080786F8: - ldrb r1, [r2] - mov r5, sl - adds r0, r1, r5 - subs r0, r0, r3 - lsls r1, r1, #1 - cmp r0, r1 - bhs _08078714 - ldrb r1, [r2, #1] - mov r2, sb - adds r0, r1, r2 - subs r0, r0, r4 - lsls r1, r1, #1 - cmp r0, r1 - blo _0807873A -_08078714: - adds r6, #1 - cmp r6, #0x1f - bhi _08078758 - lsls r0, r6, #1 - adds r0, r0, r6 - lsls r0, r0, #2 - ldr r3, _08078754 @ =gUnk_03003DF8 - adds r5, r0, r3 -_08078724: - ldr r2, [r5, #8] - cmp r2, #0 - beq _08078714 - adds r0, r2, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - blt _0807873A - b _08078630 -_0807873A: - cmp r6, #0x1f - bhi _08078758 - mov r5, r8 - strb r6, [r5, #3] - lsls r0, r6, #1 - adds r0, r0, r6 - lsls r0, r0, #2 - mov r1, r8 - adds r1, #8 - adds r0, r0, r1 - str r0, [r5, #4] - b _08078762 - .align 2, 0 -_08078754: .4byte gUnk_03003DF8 -_08078758: - movs r0, #0xff - mov r1, r8 - strb r0, [r1, #3] - ldr r0, _08078774 @ =gUnk_0811C000 - str r0, [r1, #4] -_08078762: - movs r0, #1 - mov r2, r8 - strb r0, [r2] - ldr r0, [r2, #4] -_0807876A: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08078774: .4byte gUnk_0811C000 diff --git a/asm/code_08078778.s b/asm/code_08078778.s deleted file mode 100644 index c4a20565..00000000 --- a/asm/code_08078778.s +++ /dev/null @@ -1,6292 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0807887C -sub_0807887C: @ 0x0807887C - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r7, r1, #0 - adds r6, r2, #0 - adds r1, r5, #0 - adds r1, #0x39 - movs r0, #0 - strb r0, [r1] - adds r0, r5, #0 - bl sub_08078904 - adds r4, r0, #0 - cmp r4, #0 - bge _080788A4 - movs r0, #0 - bl sub_08078904 - adds r4, r0, #0 - cmp r4, #0 - blt _080788BA -_080788A4: - ldr r2, _080788DC @ =gUnk_03003DF0 - lsls r1, r4, #1 - adds r1, r1, r4 - lsls r1, r1, #2 - adds r0, r2, #0 - adds r0, #0x10 - adds r0, r1, r0 - str r5, [r0] - adds r1, r1, r2 - strb r7, [r1, #9] - strb r6, [r1, #0xb] -_080788BA: - cmp r6, #0 - beq _080788D6 - movs r0, #6 - movs r1, #9 - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - bne _080788D6 - movs r0, #9 - movs r1, #0 - movs r2, #0 - bl CreateObject -_080788D6: - adds r0, r4, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080788DC: .4byte gUnk_03003DF0 - - thumb_func_start sub_080788E0 -sub_080788E0: @ 0x080788E0 - push {lr} - bl sub_08078904 - adds r1, r0, #0 - cmp r1, #0 - blt _080788FC - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _08078900 @ =gUnk_03003DF8 - adds r0, r0, r1 - movs r1, #0xc - bl MemClear -_080788FC: - pop {pc} - .align 2, 0 -_08078900: .4byte gUnk_03003DF8 - - thumb_func_start sub_08078904 -sub_08078904: @ 0x08078904 - push {lr} - adds r3, r0, #0 - movs r1, #0 - ldr r0, _0807891C @ =gUnk_03003DF0 - adds r2, r0, #0 - adds r2, #0x10 -_08078910: - ldr r0, [r2] - cmp r3, r0 - bne _08078920 - adds r0, r1, #0 - b _0807892C - .align 2, 0 -_0807891C: .4byte gUnk_03003DF0 -_08078920: - adds r2, #0xc - adds r1, #1 - cmp r1, #0x1f - bls _08078910 - movs r0, #1 - rsbs r0, r0, #0 -_0807892C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08078930 -sub_08078930: @ 0x08078930 - push {lr} - adds r3, r0, #0 - ldr r2, _08078950 @ =gUnk_03003BE0 - ldrb r0, [r2, #2] - cmp r0, #0x1f - bhi _0807894C - lsls r0, r0, #2 - adds r1, r2, #0 - adds r1, #0xc - adds r0, r0, r1 - str r3, [r0] - ldrb r0, [r2, #2] - adds r0, #1 - strb r0, [r2, #2] -_0807894C: - pop {pc} - .align 2, 0 -_08078950: .4byte gUnk_03003BE0 - - thumb_func_start sub_08078954 -sub_08078954: @ 0x08078954 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - ldr r0, _08078970 @ =gUnk_03003BE0 - ldrb r1, [r0, #2] - adds r2, r0, #0 - cmp r4, r1 - bhs _080789A6 - ldr r0, [r2, #0xc] - cmp r0, r5 - bne _08078974 - subs r0, r1, #1 - b _0807898C - .align 2, 0 -_08078970: .4byte gUnk_03003BE0 -_08078974: - adds r4, #1 - ldrb r3, [r2, #2] - cmp r4, r3 - bhs _080789A6 - lsls r0, r4, #2 - adds r1, r2, #0 - adds r1, #0xc - adds r0, r0, r1 - ldr r0, [r0] - cmp r0, r5 - bne _08078974 - subs r0, r3, #1 -_0807898C: - strb r0, [r2, #2] - ldrb r0, [r2, #2] - cmp r4, r0 - bhs _080789A6 - lsls r0, r4, #2 - adds r0, #0xc - adds r1, r0, r2 -_0807899A: - ldr r0, [r1, #4] - stm r1!, {r0} - adds r4, #1 - ldrb r0, [r2, #2] - cmp r4, r0 - blo _0807899A -_080789A6: - pop {r4, r5, pc} - - thumb_func_start sub_080789A8 -sub_080789A8: @ 0x080789A8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r1, _080789BC @ =gUnk_03003BE0 - ldrb r0, [r1] - cmp r0, #0 - beq _080789C0 - ldrb r0, [r1, #1] - b _08078A88 - .align 2, 0 -_080789BC: .4byte gUnk_03003BE0 -_080789C0: - ldr r0, _08078A5C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08078A56 - ldr r0, _08078A60 @ =gPlayerEntity - bl sub_080002D0 - adds r4, r0, #0 - cmp r4, #0xf - bls _080789E6 - ldr r0, _08078A64 @ =gUnk_080084BC - adds r1, r4, #0 - subs r1, #0x10 - adds r1, r1, r0 - ldrb r0, [r1] - cmp r0, #0xf - beq _08078A56 -_080789E6: - ldr r0, _08078A5C @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x12 - beq _08078A56 - ldr r3, _08078A68 @ =gUnk_03003BE0 - movs r0, #1 - strb r0, [r3] - ldrb r4, [r3, #2] - cmp r4, #0 - beq _08078A2E - ldr r2, _08078A60 @ =gPlayerEntity - ldrb r1, [r2, #0x14] - movs r0, #6 - ands r0, r1 - ldr r1, _08078A6C @ =gUnk_0811BFE0 - adds r6, r0, r1 - adds r7, r2, #0 - adds r3, #8 - mov r8, r3 -_08078A0C: - lsls r0, r4, #2 - mov r1, r8 - adds r5, r0, r1 - ldr r1, [r5] - cmp r1, #0 - beq _08078A26 - ldrb r2, [r6] - ldrb r3, [r6, #1] - adds r0, r7, #0 - bl sub_0807A180 - cmp r0, #0 - bne _08078A74 -_08078A26: - subs r4, #1 - ldr r7, _08078A60 @ =gPlayerEntity - cmp r4, #0 - bne _08078A0C -_08078A2E: - ldr r0, _08078A60 @ =gPlayerEntity - ldrb r1, [r0, #0x14] - movs r2, #6 - ands r2, r1 - ldr r1, _08078A70 @ =gUnk_08007DF4 - adds r2, r2, r1 - movs r1, #0 - ldrsb r1, [r2, r1] - ldrb r2, [r2, #1] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - bl sub_0800029C - ldr r4, _08078A68 @ =gUnk_03003BE0 - strh r0, [r4, #4] - movs r1, #6 - bl sub_0806FC24 - cmp r0, #0 - bne _08078A84 -_08078A56: - movs r0, #0 - b _08078A88 - .align 2, 0 -_08078A5C: .4byte gPlayerState -_08078A60: .4byte gPlayerEntity -_08078A64: .4byte gUnk_080084BC -_08078A68: .4byte gUnk_03003BE0 -_08078A6C: .4byte gUnk_0811BFE0 -_08078A70: .4byte gUnk_08007DF4 -_08078A74: - mov r0, r8 - subs r0, #8 - ldr r1, [r5] - str r1, [r0, #8] - movs r1, #2 - strb r1, [r0, #1] - movs r0, #2 - b _08078A88 -_08078A84: - movs r0, #1 - strb r0, [r4, #1] -_08078A88: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start SetPlayerControl -SetPlayerControl: @ 0x08078A90 - push {lr} - adds r1, r0, #0 - ldr r0, _08078AA4 @ =gPlayerState - adds r2, r0, #0 - adds r2, #0x8b - ldrb r0, [r2] - cmp r0, #3 - beq _08078AA2 - strb r1, [r2] -_08078AA2: - pop {pc} - .align 2, 0 -_08078AA4: .4byte gPlayerState - - thumb_func_start CreateEzloHint -CreateEzloHint: @ 0x08078AA8 - ldr r3, _08078AB8 @ =gPlayerState - movs r2, #0x16 - strb r2, [r3, #0xc] - ldr r2, _08078ABC @ =gRoomTransition - strh r0, [r2, #0x36] -.ifdef JP - adds r2, #0x34 -.else -.ifdef EU - adds r2, #0x34 -.else - adds r2, #0x35 -.endif -.endif - strb r1, [r2] - bx lr - .align 2, 0 -_08078AB8: .4byte gPlayerState -_08078ABC: .4byte gRoomTransition - - thumb_func_start sub_08078AC0 -sub_08078AC0: @ 0x08078AC0 - push {r4, lr} - ldr r3, _08078AEC @ =gPlayerState - mov ip, r3 - movs r3, #0xf - mov r4, ip - strb r3, [r4, #0xc] - mov r3, ip - adds r3, #0x38 - strb r0, [r3] - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r0, r0, #0x1f - mov r1, ip - adds r1, #0x39 - strb r0, [r1] - rsbs r0, r2, #0 - orrs r0, r2 - lsrs r0, r0, #0x1f - adds r1, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_08078AEC: .4byte gPlayerState - - thumb_func_start sub_08078AF0 -sub_08078AF0: @ 0x08078AF0 - push {r4, lr} - ldr r3, _08078B40 @ =gPlayerState - mov ip, r3 - adds r3, #0x38 - movs r4, #0 - strb r1, [r3] - mov r1, ip - adds r1, #0x39 - strb r2, [r1] - adds r1, #1 - strb r4, [r1] - movs r1, #8 - mov r2, ip - strb r1, [r2, #0xc] - adds r2, #0xa8 - movs r1, #0x15 - strb r1, [r2] - mov r1, ip - adds r1, #0x26 - strb r4, [r1] - movs r1, #1 - mov r3, ip - strb r1, [r3, #0x14] - ldr r2, _08078B44 @ =gPlayerEntity - str r0, [r2, #0x54] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #0x11] - bl DeleteClones - pop {r4, pc} - .align 2, 0 -_08078B40: .4byte gPlayerState -_08078B44: .4byte gPlayerEntity - - thumb_func_start sub_08078B48 -sub_08078B48: @ 0x08078B48 - push {lr} - ldr r1, _08078B80 @ =gPlayerState - ldrb r0, [r1, #7] - movs r2, #0x80 - orrs r0, r2 - strb r0, [r1, #7] - ldrb r0, [r1, #0xb] - orrs r0, r2 - strb r0, [r1, #0xb] - ldrb r0, [r1, #0xa] - orrs r2, r0 - strb r2, [r1, #0xa] - adds r2, r1, #0 - adds r2, #0x27 - movs r0, #2 - strb r0, [r2] - adds r0, r1, #0 - adds r0, #0xa8 - ldrb r0, [r0] - subs r0, #4 - adds r2, r1, #0 - cmp r0, #0x19 - bhi _08078BF8 - lsls r0, r0, #2 - ldr r1, _08078B84 @ =_08078B88 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078B80: .4byte gPlayerState -_08078B84: .4byte _08078B88 -_08078B88: @ jump table - .4byte _08078C04 @ case 0 - .4byte _08078C04 @ case 1 - .4byte _08078BF8 @ case 2 - .4byte _08078BF8 @ case 3 - .4byte _08078BF8 @ case 4 - .4byte _08078BF0 @ case 5 - .4byte _08078BF8 @ case 6 - .4byte _08078BF8 @ case 7 - .4byte _08078BF8 @ case 8 - .4byte _08078BF8 @ case 9 - .4byte _08078BF8 @ case 10 - .4byte _08078BF8 @ case 11 - .4byte _08078BF8 @ case 12 - .4byte _08078BF8 @ case 13 - .4byte _08078BF8 @ case 14 - .4byte _08078BF8 @ case 15 - .4byte _08078BF8 @ case 16 - .4byte _08078BF8 @ case 17 - .4byte _08078BF8 @ case 18 - .4byte _08078BF8 @ case 19 - .4byte _08078BF8 @ case 20 - .4byte _08078C04 @ case 21 - .4byte _08078C04 @ case 22 - .4byte _08078BF8 @ case 23 - .4byte _08078BF8 @ case 24 - .4byte _08078C04 @ case 25 -_08078BF0: - ldr r0, [r2, #0x30] - ldr r1, _08078C18 @ =0xFFFBFFFF - ands r0, r1 - str r0, [r2, #0x30] -_08078BF8: - ldr r0, _08078C1C @ =gRoomVars - ldrb r0, [r0, #6] - cmp r0, #0 - bne _08078C04 - movs r0, #1 - strb r0, [r2, #0x1a] -_08078C04: - ldr r0, _08078C20 @ =gPlayerEntity - adds r0, #0x3d - movs r1, #0xfe - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x8a - movs r0, #2 - strb r0, [r1] - pop {pc} - .align 2, 0 -_08078C18: .4byte 0xFFFBFFFF -_08078C1C: .4byte gRoomVars -_08078C20: .4byte gPlayerEntity - - thumb_func_start sub_08078C24 -sub_08078C24: @ 0x08078C24 - push {lr} - ldr r3, _08078CAC @ =gPlayerState - movs r2, #0 - strb r2, [r3] - strb r2, [r3, #1] - strb r2, [r3, #2] - strb r2, [r3, #3] - strb r2, [r3, #4] - strb r2, [r3, #5] - strb r2, [r3, #6] - strb r2, [r3, #7] - movs r0, #0 - strh r2, [r3, #8] - strb r0, [r3, #0xa] - strb r0, [r3, #0xb] - movs r1, #0x35 - adds r1, r1, r3 - mov ip, r1 - adds r1, r3, #0 - adds r1, #0x36 - strb r0, [r1] - strb r0, [r3, #0xc] - strb r0, [r3, #0xd] - strb r0, [r3, #0xe] - strb r0, [r3, #0x11] - strb r0, [r3, #0x12] - strb r0, [r3, #0x13] - strb r0, [r3, #0x14] - strb r0, [r3, #0x1b] - strb r0, [r3, #0x1e] - strb r0, [r3, #0x1f] - subs r1, #0x16 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - strh r2, [r3, #0x22] - strh r2, [r3, #0x24] - adds r1, #5 - strb r0, [r1] - str r2, [r3, #0x2c] - adds r1, #0x5a - strh r2, [r1] - mov r1, ip - strb r0, [r1] - str r2, [r3, #0x30] - adds r1, r3, #0 - adds r1, #0x38 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #5 - strb r0, [r1] - subs r1, #3 - strb r0, [r1] - movs r0, #1 - rsbs r0, r0, #0 - adds r1, #4 - movs r2, #0x40 - bl MemFill32 - ldr r0, _08078CB0 @ =gUnk_03003DF0 - movs r1, #0xc4 - lsls r1, r1, #1 - bl MemClear - pop {pc} - .align 2, 0 -_08078CAC: .4byte gPlayerState -_08078CB0: .4byte gUnk_03003DF0 - - thumb_func_start UpdateCarriedObject -UpdateCarriedObject: @ 0x08078CB4 - push {lr} - ldr r0, _08078CCC @ =gPlayerState - ldrb r0, [r0, #5] - subs r0, #3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _08078CC8 - bl sub_08078D60 -_08078CC8: - pop {pc} - .align 2, 0 -_08078CCC: .4byte gPlayerState - - thumb_func_start sub_08078CD0 -sub_08078CD0: @ 0x08078CD0 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, [r5, #0x70] - ldrh r0, [r5, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - ldrb r1, [r5, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - ldr r1, _08078D28 @ =gUnk_0811C01C - ldr r0, _08078D2C @ =gPlayerState - ldr r0, [r0, #0x2c] - ldrb r0, [r0, #0x1e] - adds r0, r0, r1 - ldrb r2, [r0] - ldr r3, _08078D30 @ =gUnk_0811C0B0 - ldrb r1, [r4, #0x1c] - movs r0, #0x30 - ands r0, r1 - lsrs r0, r0, #2 - adds r0, r0, r3 - lsls r2, r2, #1 - ldr r0, [r0] - adds r2, r0, r2 - ldrb r0, [r5, #0x18] - lsls r0, r0, #0x19 - cmp r0, #0 - bge _08078D34 - movs r1, #0 - ldrsb r1, [r2, r1] - ldrh r0, [r5, #0x2e] - subs r0, r0, r1 - b _08078D3C - .align 2, 0 -_08078D28: .4byte gUnk_0811C01C -_08078D2C: .4byte gPlayerState -_08078D30: .4byte gUnk_0811C0B0 -_08078D34: - movs r0, #0 - ldrsb r0, [r2, r0] - ldrh r1, [r5, #0x2e] - adds r0, r0, r1 -_08078D3C: - strh r0, [r4, #0x2e] - movs r0, #1 - ldrsb r0, [r2, r0] - ldrh r1, [r5, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_0806FEBC - ldr r1, [r4, #0x50] - cmp r1, #0 - beq _08078D5E - adds r0, r4, #0 - bl CopyPosition -_08078D5E: - pop {r4, r5, pc} - - thumb_func_start sub_08078D60 -sub_08078D60: @ 0x08078D60 - push {r4, r5, r6, lr} - ldr r1, _08078DCC @ =gPlayerEntity - ldr r0, [r1, #0x74] - ldr r4, [r0, #0x54] - ldrb r0, [r4, #0xc] - adds r6, r1, #0 - cmp r0, #2 - beq _08078D72 - b _08078E82 -_08078D72: - adds r0, r6, #0 - adds r0, #0x63 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r6, #0x36] - adds r0, r0, r1 - strh r0, [r4, #0x36] - ldrb r1, [r6, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - adds r0, r6, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, r6, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0x7f - ands r2, r0 - ldr r1, _08078DD0 @ =gUnk_0811C0E8 - ldrb r0, [r4, #0x16] - lsrs r0, r0, #4 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x19 - cmp r0, #0 - bge _08078DD4 - adds r2, r1, r2 - movs r1, #0 - ldrsb r1, [r2, r1] - ldrh r0, [r6, #0x2e] - subs r0, r0, r1 - strh r0, [r4, #0x2e] - adds r1, r2, #0 - b _08078DE0 - .align 2, 0 -_08078DCC: .4byte gPlayerEntity -_08078DD0: .4byte gUnk_0811C0E8 -_08078DD4: - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r2, [r6, #0x2e] - adds r0, r0, r2 - strh r0, [r4, #0x2e] -_08078DE0: - movs r0, #1 - ldrsb r0, [r1, r0] - ldrh r1, [r4, #0x36] - adds r0, r0, r1 - strh r0, [r4, #0x36] - adds r5, r6, #0 - ldrh r0, [r5, #0x32] - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r1, r4, #0 - bl SortEntityAbove - ldr r0, _08078E34 @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #4 - bne _08078E4C - ldrb r1, [r5, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x19] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_0806F8DC - ldrb r1, [r4, #0x16] - movs r0, #0xf - ands r0, r1 - cmp r0, #2 - bne _08078E82 - ldr r0, _08078E38 @ =gRoomTransition - ldr r1, [r0] - movs r0, #3 - ands r1, r0 - cmp r1, #1 - beq _08078E3C - cmp r1, #3 - beq _08078E44 - b _08078E82 - .align 2, 0 -_08078E34: .4byte gPlayerState -_08078E38: .4byte gRoomTransition -_08078E3C: - ldrh r0, [r4, #0x2e] - adds r0, #1 - strh r0, [r4, #0x2e] - b _08078E82 -_08078E44: - ldrh r0, [r4, #0x2e] - subs r0, #1 - strh r0, [r4, #0x2e] - b _08078E82 -_08078E4C: - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - cmp r0, #0 - beq _08078E62 - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - b _08078E6E -_08078E62: - adds r0, r6, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - adds r1, #1 -_08078E6E: - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08078E82: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08078E84 -sub_08078E84: @ 0x08078E84 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - ldr r0, _08078ED0 @ =gPlayerEntity - cmp r4, r0 - bne _08078EAC - adds r0, r5, #0 - bl sub_08079BD8 - adds r0, r4, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x62 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x63 - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] -_08078EAC: - ldr r0, _08078ED4 @ =gSpritePtrs - ldrh r2, [r4, #0x12] - lsls r2, r2, #4 - adds r0, #4 - adds r2, r2, r0 - ldrb r1, [r4, #0x1e] - lsls r1, r1, #2 - ldr r0, [r2] - adds r0, r0, r1 - ldrb r0, [r0, #1] - cmp r0, #0 - beq _08078ED8 - adds r0, r4, #0 - movs r1, #1 - adds r2, r5, #0 - bl sub_0806FEBC - b _08078EE2 - .align 2, 0 -_08078ED0: .4byte gPlayerEntity -_08078ED4: .4byte gSpritePtrs -_08078ED8: - adds r0, r4, #0 - movs r1, #3 - adds r2, r5, #0 - bl sub_0806FEBC -_08078EE2: - pop {r4, r5, pc} - - thumb_func_start sub_08078EE4 -sub_08078EE4: @ 0x08078EE4 - ldr r2, _08078EF4 @ =gPlayerEntity - ldr r1, _08078EF8 @ =gPlayerState - ldrh r0, [r1, #0x16] - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x18] - strh r0, [r2, #0x32] - bx lr - .align 2, 0 -_08078EF4: .4byte gPlayerEntity -_08078EF8: .4byte gPlayerState - - thumb_func_start RunQueuedAction -RunQueuedAction: @ 0x08078EFC - push {lr} - ldr r3, _08078F18 @ =gPlayerState - ldrb r2, [r3, #0xc] - cmp r2, #0 - beq _08078F20 - ldr r0, _08078F1C @ =gPlayerEntity - movs r1, #0 - strb r2, [r0, #0xc] - strb r1, [r0, #0xd] - strb r1, [r3, #0xc] - bl DoPlayerAction - movs r0, #1 - b _08078F22 - .align 2, 0 -_08078F18: .4byte gPlayerState -_08078F1C: .4byte gPlayerEntity -_08078F20: - movs r0, #0 -_08078F22: - pop {pc} - - thumb_func_start sub_08078F24 -sub_08078F24: @ 0x08078F24 - push {r4, lr} - ldr r4, _08078F38 @ =gPlayerState - ldrb r3, [r4, #0xd] - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _08078F3C - bl ResetPlayerVelocity - b _08078F5A - .align 2, 0 -_08078F38: .4byte gPlayerState -_08078F3C: - ldr r2, _08078F5C @ =gSineTable - lsls r0, r3, #4 - adds r0, r0, r2 - ldrh r1, [r0] - adds r0, r4, #0 - adds r0, #0x8c - strh r1, [r0] - lsls r0, r3, #4 - adds r0, #0x80 - adds r0, r0, r2 - ldrh r0, [r0] - rsbs r0, r0, #0 - adds r1, r4, #0 - adds r1, #0x8e - strh r0, [r1] -_08078F5A: - pop {r4, pc} - .align 2, 0 -_08078F5C: .4byte gSineTable - - thumb_func_start ResetPlayerVelocity -ResetPlayerVelocity: @ 0x08078F60 - ldr r0, _08078F70 @ =gPlayerState - adds r1, r0, #0 - adds r1, #0x8c - movs r2, #0 - strh r2, [r1] - adds r0, #0x8e - strh r2, [r0] - bx lr - .align 2, 0 -_08078F70: .4byte gPlayerState - - thumb_func_start sub_08078F74 -sub_08078F74: @ 0x08078F74 - push {lr} - adds r2, r0, #0 - ldr r0, _08078FA4 @ =gArea - ldrb r0, [r0, #0x18] - cmp r0, #3 - bne _08078FAC - ldr r3, _08078FA8 @ =gPlayerState - adds r0, r3, #0 - adds r0, #0x35 - ldrb r0, [r0] - cmp r0, #0xff - beq _08078FAC - movs r1, #0 - movs r0, #0x81 - strb r0, [r3, #2] - movs r0, #0x15 - strb r0, [r2, #0xc] - strb r1, [r2, #0xd] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r2, #0x20] - movs r0, #1 - b _08078FAE - .align 2, 0 -_08078FA4: .4byte gArea -_08078FA8: .4byte gPlayerState -_08078FAC: - movs r0, #0 -_08078FAE: - pop {pc} - - thumb_func_start sub_08078FB0 -sub_08078FB0: @ 0x08078FB0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, _08078FE0 @ =gPlayerState - ldrb r1, [r5, #6] - movs r6, #0x80 - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - bne _08078FCA - adds r1, r5, #0 - adds r1, #0x35 - movs r0, #0xff - strb r0, [r1] -_08078FCA: - adds r0, r4, #0 - bl sub_08079064 - ldr r1, [r5, #0x30] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08078FE4 - movs r2, #0x58 - b _08078FFA - .align 2, 0 -_08078FE0: .4byte gPlayerState -_08078FE4: - ands r1, r6 - cmp r1, #0 - beq _08078FEE - movs r2, #0x18 - b _08078FFA -_08078FEE: - ldrh r0, [r5, #8] - lsrs r0, r0, #8 - movs r2, #0xb8 - cmp r0, #7 - bne _08078FFA - movs r2, #0x34 -_08078FFA: - ldr r0, _08079014 @ =gPlayerState - adds r3, r0, #0 - ldrb r1, [r0, #8] - cmp r2, r1 - bls _08079040 - ldrb r0, [r4, #0x14] - adds r2, r0, #0 - cmp r2, #4 - bls _08079018 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - b _08079020 - .align 2, 0 -_08079014: .4byte gPlayerState -_08079018: - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 -_08079020: - strb r0, [r4, #0x18] - ldr r0, [r3, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xc - ands r0, r1 - cmp r0, #0 - beq _08079036 - ldrh r1, [r3, #8] - ldrb r0, [r4, #0x14] - adds r2, r1, r0 - b _08079042 -_08079036: - lsls r0, r2, #0x18 - lsrs r0, r0, #0x19 - ldrh r3, [r3, #8] - adds r2, r0, r3 - b _08079042 -_08079040: - ldrh r2, [r0, #8] -_08079042: - ldrh r0, [r4, #0x12] - lsls r0, r0, #8 - adds r1, r4, #0 - adds r1, #0x58 - ldrb r1, [r1] - orrs r0, r1 - cmp r2, r0 - beq _08079062 - lsrs r0, r2, #8 - strh r0, [r4, #0x12] - movs r0, #0xff - ands r2, r0 - adds r0, r4, #0 - adds r1, r2, #0 - bl InitAnimationForceUpdate -_08079062: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08079064 -sub_08079064: @ 0x08079064 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, _0807909C @ =gPlayerState - ldr r1, [r0, #0x30] - ldr r2, _080790A0 @ =0x00100080 - ands r1, r2 - adds r5, r0, #0 - cmp r1, #0 - bne _080790DE - movs r3, #0 - movs r2, #0 - ldr r1, _080790A4 @ =gUnk_03000B80 -_0807907C: - ldrb r0, [r1, #0xf] - cmp r0, r3 - bls _08079086 - adds r3, r0, #0 - ldrh r4, [r1, #0x10] -_08079086: - adds r1, #0x1c - adds r2, #1 - cmp r2, #3 - bls _0807907C - adds r2, r5, #0 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bhs _080790A8 - strh r4, [r2, #8] - b _080790DE - .align 2, 0 -_0807909C: .4byte gPlayerState -_080790A0: .4byte 0x00100080 -_080790A4: .4byte gUnk_03000B80 -_080790A8: - adds r0, r2, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080790C0 - ldr r0, _080790BC @ =0x000002BE - strh r0, [r2, #8] - b _080790DE - .align 2, 0 -_080790BC: .4byte 0x000002BE -_080790C0: - ldrh r1, [r5, #8] - movs r0, #0xc1 - lsls r0, r0, #3 - cmp r1, r0 - beq _080790D8 - movs r0, #0x82 - lsls r0, r0, #1 - cmp r1, r0 - beq _080790D8 - ldr r0, _080790E0 @ =0x00000404 - cmp r1, r0 - bne _080790DE -_080790D8: - adds r0, r6, #0 - bl sub_080790E4 -_080790DE: - pop {r4, r5, r6, pc} - .align 2, 0 -_080790E0: .4byte 0x00000404 - - thumb_func_start sub_080790E4 -sub_080790E4: @ 0x080790E4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08079128 @ =gPlayerState - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _08079182 - movs r0, #0x10 - bl sub_080793E4 - cmp r0, #0 - beq _0807912C - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0x14 - strb r0, [r1] - adds r1, #5 - movs r0, #4 - strb r0, [r1] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - movs r0, #0x7a - bl SoundReq - b _08079182 - .align 2, 0 -_08079128: .4byte gPlayerState -_0807912C: - ldrb r1, [r5, #6] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08079182 - cmp r1, #0 - bne _08079150 - movs r0, #1 - bl sub_080793E4 - cmp r0, #0 - beq _0807914C - ldrb r0, [r4, #0xf] - cmp r0, #5 - bhi _08079154 - adds r0, #1 -_0807914C: - strb r0, [r4, #0xf] - b _08079182 -_08079150: - subs r0, r1, #1 - strb r0, [r5, #6] -_08079154: - ldr r2, _08079174 @ =gPlayerState - ldrb r0, [r4, #0x14] - adds r1, r2, #0 - adds r1, #0x35 - strb r0, [r1] - adds r1, #0x73 - movs r0, #0x19 - strb r0, [r1] - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807917C - ldr r0, _08079178 @ =0x0000093C - b _08079180 - .align 2, 0 -_08079174: .4byte gPlayerState -_08079178: .4byte 0x0000093C -_0807917C: - movs r0, #0xcf - lsls r0, r0, #2 -_08079180: - strh r0, [r2, #8] -_08079182: - pop {r4, r5, pc} - - thumb_func_start sub_08079184 -sub_08079184: @ 0x08079184 - ldr r0, _08079194 @ =gPlayerState - movs r1, #0 - strb r1, [r0, #5] - strb r1, [r0, #1] - ldr r0, _08079198 @ =gPlayerEntity - str r1, [r0, #0x74] - bx lr - .align 2, 0 -_08079194: .4byte gPlayerState -_08079198: .4byte gPlayerEntity - - thumb_func_start sub_0807919C -sub_0807919C: @ 0x0807919C - push {lr} - ldr r0, _080791B0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080791B4 - bl SetPlayerActionNormal - b _080791B8 - .align 2, 0 -_080791B0: .4byte gPlayerState -_080791B4: - bl sub_08079258 -_080791B8: - pop {pc} - .align 2, 0 - - thumb_func_start SetPlayerActionNormal -SetPlayerActionNormal: @ 0x080791BC - ldr r0, _080791CC @ =gPlayerEntity - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - strb r2, [r0, #0xd] - strb r2, [r0, #0xf] - bx lr - .align 2, 0 -_080791CC: .4byte gPlayerEntity - - thumb_func_start ResetPlayerAnimationAndAction -ResetPlayerAnimationAndAction: @ 0x080791D0 - push {lr} - ldr r3, _0807920C @ =gPlayerState - ldr r0, [r3, #0x30] - movs r1, #0x40 - ands r0, r1 - cmp r0, #0 - bne _080791E8 - ldr r0, _08079210 @ =gPlayerEntity - ldrb r1, [r0, #0x18] - movs r2, #3 - orrs r1, r2 - strb r1, [r0, #0x18] -_080791E8: - ldr r0, [r3, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08079214 - ldr r2, _08079210 @ =gPlayerEntity - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - bl sub_0807921C - b _08079218 - .align 2, 0 -_0807920C: .4byte gPlayerState -_08079210: .4byte gPlayerEntity -_08079214: - bl sub_08079258 -_08079218: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807921C -sub_0807921C: @ 0x0807921C - push {r4, lr} - ldr r4, _0807924C @ =gPlayerEntity - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r2, _08079250 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08079254 @ =0xFECBF6FA - ands r0, r1 - str r0, [r2, #0x30] - bl ResolvePlayerAnimation - bl SetPlayerActionNormal - adds r0, r4, #0 - bl sub_0805E374 - pop {r4, pc} - .align 2, 0 -_0807924C: .4byte gPlayerEntity -_08079250: .4byte gPlayerState -_08079254: .4byte 0xFECBF6FA - - thumb_func_start sub_08079258 -sub_08079258: @ 0x08079258 - push {r4, lr} - ldr r4, _080792AC @ =gPlayerState - ldr r0, [r4, #0x30] - movs r1, #0x40 - ands r0, r1 - ldr r3, _080792B0 @ =gPlayerEntity - cmp r0, #0 - bne _08079278 - ldrb r1, [r3, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r3, #0x10] - ldrb r0, [r3, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r3, #0x18] -_08079278: - movs r0, #9 - strb r0, [r3, #0xc] - movs r0, #1 - strb r0, [r3, #0xd] - adds r2, r3, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - movs r2, #0 - ldr r0, _080792B4 @ =0x00000C18 - strh r0, [r4, #8] - ldr r0, [r4, #0x30] - ldr r1, _080792B8 @ =0xFECFFEFA - ands r0, r1 - str r0, [r4, #0x30] - adds r0, r4, #0 - adds r0, #0x26 - strb r2, [r0] - strb r2, [r4, #0xc] - adds r0, r3, #0 - bl sub_0805E374 - pop {r4, pc} - .align 2, 0 -_080792AC: .4byte gPlayerState -_080792B0: .4byte gPlayerEntity -_080792B4: .4byte 0x00000C18 -_080792B8: .4byte 0xFECFFEFA - - thumb_func_start sub_080792BC -sub_080792BC: @ 0x080792BC - push {r4, lr} - ldr r3, _080792D0 @ =gPlayerState - movs r4, #0x13 - strb r4, [r3, #0xc] - adds r3, #0x38 - strb r2, [r3] - ldr r2, _080792D4 @ =gPlayerEntity - strh r0, [r2, #0x24] - strb r1, [r2, #0x15] - pop {r4, pc} - .align 2, 0 -_080792D0: .4byte gPlayerState -_080792D4: .4byte gPlayerEntity - - thumb_func_start sub_080792D8 -sub_080792D8: @ 0x080792D8 - push {r4, r5, r6, lr} - ldr r5, _08079344 @ =gPlayerEntity - adds r3, r5, #0 - adds r3, #0x42 - ldrb r0, [r3] - cmp r0, #0 - beq _080793E0 - ldrb r2, [r5, #0xc] - cmp r2, #0xb - beq _08079338 - ldr r0, _08079348 @ =gPlayerState - ldrb r1, [r0, #0x1e] - adds r6, r0, #0 - cmp r1, #0 - bne _08079338 - ldrb r0, [r6, #5] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _08079338 - ldrb r0, [r6, #2] - cmp r0, #0 - bne _08079338 - ldrb r0, [r6, #0x12] - cmp r0, #0xff - beq _08079338 - ldrb r1, [r6, #7] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08079338 - adds r0, r6, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - subs r0, #1 - cmp r0, #0 - bgt _08079338 - cmp r2, #3 - beq _08079338 - ldr r1, [r6, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xb - ands r1, r0 - cmp r1, #0 - beq _0807934C -_08079338: - adds r1, r5, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - b _080793E0 - .align 2, 0 -_08079344: .4byte gPlayerEntity -_08079348: .4byte gPlayerState -_0807934C: - cmp r2, #0x1d - bne _0807935E - adds r0, r5, #0 - adds r0, #0x3e - ldrb r0, [r0] - cmp r0, #0x10 - beq _0807935E - strb r1, [r3] - b _080793E0 -_0807935E: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r3, [r0] - movs r1, #0 - ldrsb r1, [r0, r1] - adds r2, r0, #0 - cmp r1, #0 - ble _08079372 - subs r0, r3, #1 - b _08079374 -_08079372: - adds r0, r3, #1 -_08079374: - strb r0, [r2] - ldrb r0, [r2] - cmp r0, #0 - beq _080793E0 - adds r4, r6, #0 - ldrb r0, [r4, #7] - movs r1, #0xdf - ands r1, r0 - strb r1, [r4, #7] - adds r0, r5, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _080793CA - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _080793CA - ldr r0, [r4, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080793CA - ldrb r0, [r4, #2] - cmp r0, #0 - bne _080793CA - bl ResetPlayer - ldr r0, [r4, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - bne _080793C4 - movs r0, #0x8a - lsls r0, r0, #1 - strh r0, [r4, #8] - b _080793CA -_080793C4: - movs r0, #0x83 - lsls r0, r0, #3 - strh r0, [r6, #8] -_080793CA: - movs r1, #0xa0 - lsls r1, r1, #2 - adds r4, r5, #0 - adds r4, #0x3e - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_080027EA - ldrb r0, [r4] - bl sub_0807A5B8 -_080793E0: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080793E4 -sub_080793E4: @ 0x080793E4 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _080793FC @ =gPlayerState - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _08079408 - ldr r1, _08079400 @ =gUnk_0811C0F8 - ldr r0, _08079404 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - b _08079410 - .align 2, 0 -_080793FC: .4byte gPlayerState -_08079400: .4byte gUnk_0811C0F8 -_08079404: .4byte gPlayerEntity -_08079408: - ldr r1, _08079448 @ =gUnk_0811C0F8 - ldr r0, _0807944C @ =gPlayerEntity - ldrb r0, [r0, #0x15] - lsrs r0, r0, #2 -_08079410: - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r4, [r0] - bl sub_08079778 - cmp r0, #0 - beq _08079454 - ldr r0, _08079450 @ =gPlayerState - adds r0, #0x90 - ldrh r0, [r0] - ands r0, r4 - cmp r0, #0 - beq _08079454 - cmp r5, #0 - beq _08079442 - bl sub_0807A500 - ldr r1, _0807944C @ =gPlayerEntity - adds r1, #0x38 - ldrb r1, [r1] - adds r2, r5, #0 - bl sub_080002F0 - cmp r0, #0 - beq _08079454 -_08079442: - movs r0, #1 - b _08079456 - .align 2, 0 -_08079448: .4byte gUnk_0811C0F8 -_0807944C: .4byte gPlayerEntity -_08079450: .4byte gPlayerState -_08079454: - movs r0, #0 -_08079456: - pop {r4, r5, pc} - - thumb_func_start RespawnPlayer -RespawnPlayer: @ 0x08079458 - push {r4, r5, lr} - ldr r4, _08079498 @ =gPlayerEntity - movs r1, #0 - movs r0, #0x19 - strb r0, [r4, #0xc] - str r1, [r4, #0x34] - str r1, [r4, #0x20] - adds r0, r4, #0 - adds r0, #0x42 - strb r1, [r0] - bl sub_08078EE4 - ldr r2, _0807949C @ =gPlayerState - ldr r1, [r2, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xa - ands r0, r1 - cmp r0, #0 - bne _08079514 - movs r0, #0x80 - lsls r0, r0, #9 - ands r1, r0 - cmp r1, #0 - beq _080794E4 - adds r0, r2, #0 - adds r0, #0x84 - ldr r1, [r0] - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r1, #0x32] - strh r0, [r4, #0x32] - b _08079514 - .align 2, 0 -_08079498: .4byte gPlayerEntity -_0807949C: .4byte gPlayerState -_080794A0: - ldr r2, _080794DC @ =gPlayerEntity - ldr r0, [r4] - lsrs r0, r0, #0x1e - adds r1, r2, #0 - adds r1, #0x38 - strb r0, [r1] - ldr r3, _080794E0 @ =gRoomControls - ldr r0, [r4] - movs r1, #0x3f - ands r0, r1 - lsls r0, r0, #4 - ldrh r1, [r3, #6] - adds r0, r0, r1 - adds r0, #8 - strh r0, [r2, #0x2e] - ldr r0, [r4] - movs r1, #0xfc - lsls r1, r1, #4 - ands r0, r1 - lsrs r0, r0, #2 - ldrh r3, [r3, #8] - adds r0, r0, r3 - adds r0, #8 - strh r0, [r2, #0x32] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - b _08079514 - .align 2, 0 -_080794DC: .4byte gPlayerEntity -_080794E0: .4byte gRoomControls -_080794E4: - movs r5, #0 - ldr r1, [r2, #0x40] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _08079514 - adds r4, r2, #0 - adds r4, #0x40 -_080794F4: - ldr r1, [r4] - ldrh r0, [r4] - lsrs r1, r1, #0x1e - bl sub_080002E0 - cmp r0, #0xf - bne _080794A0 - adds r4, #4 - adds r5, #1 - cmp r5, #0xf - bhi _08079514 - ldr r1, [r4] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - bne _080794F4 -_08079514: - ldr r0, _0807951C @ =gPlayerEntity - bl UpdateSpriteForCollisionLayer - pop {r4, r5, pc} - .align 2, 0 -_0807951C: .4byte gPlayerEntity - - thumb_func_start sub_08079520 -sub_08079520: @ 0x08079520 - push {lr} - adds r1, r0, #0 - ldr r0, _08079538 @ =gPlayerState - ldrb r0, [r0, #0xd] - cmp r0, #0x7f - ble _08079532 - ldrb r0, [r1, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #3 -_08079532: - strb r0, [r1, #0x15] - pop {pc} - .align 2, 0 -_08079538: .4byte gPlayerState - - thumb_func_start sub_0807953C -sub_0807953C: @ 0x0807953C - ldr r1, _08079548 @ =0x00000F38 - ldr r0, _0807954C @ =gPlayerState - adds r0, #0x92 - ldrh r0, [r0] - ands r0, r1 - bx lr - .align 2, 0 -_08079548: .4byte 0x00000F38 -_0807954C: .4byte gPlayerState - - thumb_func_start sub_08079550 -sub_08079550: @ 0x08079550 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r0, _080795A8 @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _08079562 - b _080796FC -_08079562: - ldr r2, _080795AC @ =gPlayerState - ldrb r0, [r2, #0x1e] - cmp r0, #0 - beq _08079576 - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _080795B4 -_08079576: - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - ldr r1, _080795B0 @ =gPlayerEntity - mov r8, r1 - cmp r0, #0 - bne _080795A0 - ldrb r1, [r2, #0x1b] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - bne _080795A0 - mov r3, r8 - ldrb r1, [r3, #0x15] - ldrb r2, [r2, #0xd] - cmp r1, r2 - bne _080795A0 - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080795B4 -_080795A0: - movs r0, #0 - mov r5, r8 - strb r0, [r5, #0xf] - b _080796FE - .align 2, 0 -_080795A8: .4byte gUnk_03004030 -_080795AC: .4byte gPlayerState -_080795B0: .4byte gPlayerEntity -_080795B4: - bl sub_08079778 - cmp r0, #0 - bne _080795BE - b _080796FC -_080795BE: - ldr r3, _08079610 @ =gPlayerEntity - ldrb r2, [r3, #0x14] - movs r0, #6 - ands r0, r2 - ldr r1, _08079614 @ =gUnk_0811C100 - adds r1, r0, r1 - movs r0, #2 - ands r0, r2 - mov r8, r3 - cmp r0, #0 - beq _0807961C - movs r6, #0x2e - ldrsh r2, [r3, r6] - movs r0, #0 - ldrsb r0, [r1, r0] - adds r2, r2, r0 - ldr r4, _08079618 @ =gRoomControls - ldrh r0, [r4, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - mov r0, r8 - movs r5, #0x32 - ldrsh r1, [r0, r5] - ldr r0, [r0, #0x48] - ldrb r5, [r0, #3] - adds r0, r1, r5 - ldrh r4, [r4, #8] - subs r0, r0, r4 - asrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - orrs r7, r2 - subs r1, r1, r5 - subs r1, r1, r4 - asrs r1, r1, #4 - ands r1, r3 - lsls r4, r1, #6 - orrs r4, r2 - b _0807965E - .align 2, 0 -_08079610: .4byte gPlayerEntity -_08079614: .4byte gUnk_0811C100 -_08079618: .4byte gRoomControls -_0807961C: - mov r6, r8 - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r0, [r6, #0x48] - ldrb r0, [r0, #4] - mov ip, r0 - adds r0, r2, r0 - ldr r4, _080796EC @ =gRoomControls - ldrh r3, [r4, #6] - mov sb, r3 - subs r0, r0, r3 - asrs r7, r0, #4 - movs r3, #0x3f - ands r7, r3 - movs r5, #0x32 - ldrsh r0, [r6, r5] - ldrb r1, [r1, #1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldrh r1, [r4, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r7, r0 - mov r6, ip - subs r2, r2, r6 - mov r1, sb - subs r2, r2, r1 - asrs r4, r2, #4 - ands r4, r3 - orrs r4, r0 -_0807965E: - adds r0, r7, #0 - mov r5, r8 - adds r5, #0x38 - ldrb r1, [r5] - bl sub_080002C8 - adds r3, r0, #0 - ldr r6, _080796F0 @ =gUnk_0811C1E8 - mov r1, r8 - ldrb r0, [r1, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r6 - ldr r1, [r0] - adds r0, r3, #0 - bl sub_08007DD6 - adds r3, r0, #0 - cmp r3, #0 - beq _080796FC - adds r0, r4, #0 - ldrb r1, [r5] - bl sub_080002C8 - adds r3, r0, #0 - mov r5, r8 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r6 - ldr r1, [r0] - adds r0, r3, #0 - bl sub_08007DD6 - adds r3, r0, #0 - cmp r3, #0 - beq _080796FC - ldr r1, _080796F4 @ =gPlayerState - ldrb r2, [r1, #6] - movs r0, #0x80 - orrs r0, r2 - strb r0, [r1, #6] - ldrb r0, [r1, #0x1e] - adds r4, r1, #0 - cmp r0, #0 - bne _080796C8 - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _080796FC -_080796C8: - ldr r0, _080796F8 @ =gPlayerEntity - subs r1, r3, #1 - movs r2, #0 - strb r1, [r0, #0x14] - movs r1, #4 - strb r1, [r0, #0xc] - strb r2, [r0, #0xd] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #0x81 - strb r1, [r4, #2] - bl DoPlayerAction - movs r0, #1 - b _080796FE - .align 2, 0 -_080796EC: .4byte gRoomControls -_080796F0: .4byte gUnk_0811C1E8 -_080796F4: .4byte gPlayerState -_080796F8: .4byte gPlayerEntity -_080796FC: - movs r0, #0 -_080796FE: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08079708 -sub_08079708: @ 0x08079708 - push {r4, lr} - ldr r4, _08079740 @ =gPlayerState - adds r2, r4, #0 - adds r2, #0xa8 - movs r3, #0 - movs r1, #0x12 - strb r1, [r2] - subs r2, #0x6c - movs r1, #0xff - strb r1, [r2] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #0xa - strb r1, [r0, #0xc] - strb r3, [r0, #0xd] - bl sub_080085B0 - ldr r0, [r4, #0x30] - movs r1, #0x88 - lsls r1, r1, #1 - ands r0, r1 - cmp r0, #0 - bne _0807973E - bl SetPlayerEventPriority -_0807973E: - pop {r4, pc} - .align 2, 0 -_08079740: .4byte gPlayerState - - thumb_func_start sub_08079744 -sub_08079744: @ 0x08079744 - push {lr} - adds r2, r0, #0 - ldrh r0, [r2, #0x2e] - movs r1, #0xf - ands r1, r0 - cmp r1, #8 - beq _0807975E - cmp r1, #8 - ble _0807975A - subs r0, #1 - b _0807975C -_0807975A: - adds r0, #1 -_0807975C: - strh r0, [r2, #0x2e] -_0807975E: - ldrh r0, [r2, #0x32] - movs r1, #0xf - ands r1, r0 - cmp r1, #8 - beq _08079774 - cmp r1, #8 - ble _08079770 - subs r0, #1 - b _08079772 -_08079770: - adds r0, #1 -_08079772: - strh r0, [r2, #0x32] -_08079774: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08079778 -sub_08079778: @ 0x08079778 - push {lr} - ldr r0, _08079790 @ =gPlayerState - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _0807979C - ldr r2, _08079794 @ =gUnk_0811C108 - ldr r1, _08079798 @ =gPlayerEntity - ldrb r0, [r1, #0x14] - lsrs r0, r0, #1 - b _080797A4 - .align 2, 0 -_08079790: .4byte gPlayerState -_08079794: .4byte gUnk_0811C108 -_08079798: .4byte gPlayerEntity -_0807979C: - ldr r2, _080797BC @ =gUnk_0811C108 - ldr r1, _080797C0 @ =gPlayerEntity - ldrb r0, [r1, #0x15] - lsrs r0, r0, #2 -_080797A4: - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r2, [r0] - movs r3, #0 - ldrh r0, [r1, #0x2a] - ands r0, r2 - cmp r2, r0 - bne _080797B6 - movs r3, #1 -_080797B6: - adds r0, r3, #0 - pop {pc} - .align 2, 0 -_080797BC: .4byte gUnk_0811C108 -_080797C0: .4byte gPlayerEntity - - thumb_func_start sub_080797C4 -sub_080797C4: @ 0x080797C4 - push {lr} - ldr r1, _080797E4 @ =gUnk_0811C110 - ldr r2, _080797E8 @ =gPlayerEntity - ldrb r0, [r2, #0x15] - lsrs r0, r0, #3 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - movs r3, #0 - ldrh r0, [r2, #0x2a] - ands r0, r1 - cmp r1, r0 - bne _080797E0 - movs r3, #1 -_080797E0: - adds r0, r3, #0 - pop {pc} - .align 2, 0 -_080797E4: .4byte gUnk_0811C110 -_080797E8: .4byte gPlayerEntity - - thumb_func_start sub_080797EC -sub_080797EC: @ 0x080797EC - push {r4, r5, lr} - ldr r4, _08079804 @ =gPlayerState - ldr r1, [r4, #0x30] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0807985C - ldrb r0, [r4, #5] - cmp r0, #0 - beq _0807980C - ldr r5, _08079808 @ =0x00000934 - b _0807991E - .align 2, 0 -_08079804: .4byte gPlayerState -_08079808: .4byte 0x00000934 -_0807980C: - ldrb r0, [r4, #3] - cmp r0, #0 - beq _08079818 - movs r5, #0x82 - lsls r5, r5, #3 - b _0807991E -_08079818: - adds r0, r4, #0 - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - bne _080798A0 - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - movs r5, #0xa4 - lsls r5, r5, #2 - cmp r0, #0 - bne _0807991E - movs r5, #0xb6 - lsls r5, r5, #1 - ldrb r1, [r4, #0x1b] - movs r0, #0x48 - ands r0, r1 - cmp r0, #0 - bne _080798C2 - lsls r0, r1, #0x18 - cmp r0, #0 - bne _080798CE - adds r1, r4, #0 - adds r1, #0xa8 - ldrb r0, [r1] - cmp r0, #0 - bne _08079852 - movs r0, #1 - strb r0, [r1] -_08079852: - ldr r5, _08079858 @ =0x00000404 - b _0807991E - .align 2, 0 -_08079858: .4byte 0x00000404 -_0807985C: - ldrb r0, [r4, #0x1c] - cmp r0, #0 - bne _0807992E - ldrb r0, [r4, #5] - cmp r0, #0 - beq _0807986E - movs r5, #0xd2 - lsls r5, r5, #2 - b _0807991E -_0807986E: - ldrb r0, [r4, #0x1e] - cmp r0, #0 - beq _0807987A - movs r5, #0xa6 - lsls r5, r5, #2 - b _0807991E -_0807987A: - movs r0, #0x80 - lsls r0, r0, #5 - ands r1, r0 - cmp r1, #0 - beq _0807988A - movs r5, #0xe2 - lsls r5, r5, #3 - b _0807991E -_0807988A: - ldrb r0, [r4, #3] - cmp r0, #0 - beq _08079896 - movs r5, #0xb0 - lsls r5, r5, #1 - b _0807991E -_08079896: - adds r0, r4, #0 - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - beq _080798A6 -_080798A0: - movs r5, #0xa1 - lsls r5, r5, #2 - b _0807991E -_080798A6: - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - movs r5, #0xa4 - lsls r5, r5, #2 - cmp r0, #0 - bne _0807991E - movs r5, #0xb6 - lsls r5, r5, #1 - ldrb r1, [r4, #0x1b] - movs r0, #0x48 - ands r0, r1 - cmp r0, #0 - beq _080798C8 -_080798C2: - movs r0, #0x6c - strb r0, [r4] - b _0807992E -_080798C8: - lsls r0, r1, #0x18 - cmp r0, #0 - beq _080798FC -_080798CE: - movs r0, #0 - bl sub_080793E4 - cmp r0, #0 - beq _0807991E - bl sub_0807A500 - ldr r1, _080798F8 @ =gPlayerEntity - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002E0 - cmp r0, #0xff - beq _0807991E - ldrb r1, [r4, #0x1b] - movs r0, #0xf7 - ands r0, r1 - strb r0, [r4, #0x1b] - movs r5, #0xb8 - lsls r5, r5, #1 - b _0807991E - .align 2, 0 -_080798F8: .4byte gPlayerEntity -_080798FC: - adds r1, r4, #0 - adds r1, #0xa8 - ldrb r0, [r1] - cmp r0, #0 - bne _0807990A - movs r0, #1 - strb r0, [r1] -_0807990A: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x10 - ands r0, r1 - movs r5, #0x82 - lsls r5, r5, #1 - cmp r0, #0 - beq _0807991E - movs r5, #0xc1 - lsls r5, r5, #3 -_0807991E: - ldr r0, _08079930 @ =gPlayerState - strh r5, [r0, #8] - ldrb r0, [r0, #3] - cmp r0, #0 - bne _0807992E - ldr r0, _08079934 @ =gPlayerEntity - bl UpdateAnimationSingleFrame -_0807992E: - pop {r4, r5, pc} - .align 2, 0 -_08079930: .4byte gPlayerState -_08079934: .4byte gPlayerEntity - - thumb_func_start ResolvePlayerAnimation -ResolvePlayerAnimation: @ 0x08079938 - push {r4, lr} - ldr r3, _08079954 @ =gPlayerState - ldr r2, [r3, #0x30] - movs r0, #8 - ands r0, r2 - mov ip, r3 - cmp r0, #0 - beq _080799E4 - ldrb r0, [r3, #5] - cmp r0, #0 - beq _0807995C - ldr r4, _08079958 @ =0x0000092C - b _08079AD8 - .align 2, 0 -_08079954: .4byte gPlayerState -_08079958: .4byte 0x0000092C -_0807995C: - mov r0, ip - adds r0, #0x3d - mov r3, ip - ldrb r1, [r3, #0x1c] - ldrb r0, [r0] - orrs r0, r1 - cmp r0, #0 - beq _0807996E - b _08079B14 -_0807996E: - movs r0, #0x80 - lsls r0, r0, #0x12 - ands r0, r2 - cmp r0, #0 - bne _08079A1E - mov r4, ip - ldrb r0, [r4, #3] - cmp r0, #0 - beq _08079988 - ldr r4, _08079984 @ =0x00000414 - b _08079AD8 - .align 2, 0 -_08079984: .4byte 0x00000414 -_08079988: - mov r0, ip - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - bne _08079A5C - mov r0, ip - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _08079A6C - mov r0, ip - ldrb r1, [r0, #0x1b] - movs r0, #0x48 - ands r0, r1 - cmp r0, #0 - beq _080799AA - b _08079B14 -_080799AA: - cmp r1, #0 - beq _080799B0 - b _08079AA4 -_080799B0: - mov r1, ip - ldrb r0, [r1, #4] - cmp r0, #0 - beq _080799BA - b _08079B14 -_080799BA: - movs r0, #0x20 - ands r2, r0 - cmp r2, #0 - beq _080799D0 - ldr r0, _080799D8 @ =gArea - ldrb r0, [r0, #0x17] - cmp r0, #4 - bne _080799CC - b _08079AD4 -_080799CC: - cmp r0, #5 - bne _080799DC -_080799D0: - movs r4, #0x80 - lsls r4, r4, #3 - b _08079AD8 - .align 2, 0 -_080799D8: .4byte gArea -_080799DC: - ldr r4, _080799E0 @ =0x000002C2 - b _08079AD8 - .align 2, 0 -_080799E0: .4byte 0x000002C2 -_080799E4: - mov r4, ip - ldrb r0, [r4, #5] - cmp r0, #0 - beq _080799F2 - movs r4, #0xd4 - lsls r4, r4, #2 - b _08079AD8 -_080799F2: - mov r0, ip - adds r0, #0x3d - mov r4, ip - ldrb r1, [r4, #0x1c] - ldrb r0, [r0] - orrs r0, r1 - cmp r0, #0 - beq _08079A04 - b _08079B14 -_08079A04: - movs r0, #0x80 - lsls r0, r0, #0xc - ands r0, r2 - cmp r0, #0 - beq _08079A14 - movs r4, #0x8b - lsls r4, r4, #4 - b _08079AD8 -_08079A14: - movs r0, #0x80 - lsls r0, r0, #0x12 - ands r0, r2 - cmp r0, #0 - beq _08079A24 -_08079A1E: - movs r4, #0x81 - lsls r4, r4, #4 - b _08079AD8 -_08079A24: - mov r1, ip - ldrb r0, [r1, #0x1e] - cmp r0, #0 - beq _08079A32 - movs r4, #0xa6 - lsls r4, r4, #2 - b _08079AD8 -_08079A32: - movs r0, #0x80 - lsls r0, r0, #5 - ands r0, r2 - cmp r0, #0 - beq _08079A44 - ldr r4, _08079A40 @ =0x0000070C - b _08079AD8 - .align 2, 0 -_08079A40: .4byte 0x0000070C -_08079A44: - mov r4, ip - ldrb r0, [r4, #3] - cmp r0, #0 - beq _08079A52 - movs r4, #0xb2 - lsls r4, r4, #1 - b _08079AD8 -_08079A52: - mov r0, ip - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - beq _08079A62 -_08079A5C: - movs r4, #0xa0 - lsls r4, r4, #2 - b _08079AD8 -_08079A62: - mov r0, ip - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08079A72 -_08079A6C: - movs r4, #0xa3 - lsls r4, r4, #2 - b _08079AD8 -_08079A72: - mov r0, ip - ldrb r1, [r0, #0x1b] - movs r0, #0x48 - ands r0, r1 - cmp r0, #0 - bne _08079B14 - movs r0, #0x20 - ands r2, r0 - cmp r2, #0 - beq _08079AA0 - ldr r0, _08079A98 @ =gArea - ldrb r0, [r0, #0x17] - ldr r4, _08079A9C @ =0x000002C2 - cmp r0, #4 - bne _08079AD8 - movs r4, #0xa6 - lsls r4, r4, #3 - b _08079AD8 - .align 2, 0 -_08079A98: .4byte gArea -_08079A9C: .4byte 0x000002C2 -_08079AA0: - cmp r1, #0 - beq _08079AAA -_08079AA4: - movs r4, #0xb4 - lsls r4, r4, #1 - b _08079AD8 -_08079AAA: - ldrb r0, [r3, #4] - cmp r0, #0 - bne _08079B14 - ldr r0, [r3, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08079AD4 - ldr r0, _08079ACC @ =gUnk_03000B80 - adds r0, #0x63 - ldrb r0, [r0] - cmp r0, #0 - bne _08079B14 - ldr r4, _08079AD0 @ =0x00000604 - b _08079AD8 - .align 2, 0 -_08079ACC: .4byte gUnk_03000B80 -_08079AD0: .4byte 0x00000604 -_08079AD4: - movs r4, #0x80 - lsls r4, r4, #1 -_08079AD8: - mov r1, ip - strh r4, [r1, #8] - ldrb r0, [r1, #5] - cmp r0, #0 - bne _08079B10 - movs r3, #0 - movs r2, #0 - ldr r1, _08079B18 @ =gUnk_03000B80 -_08079AE8: - ldrb r0, [r1, #0xf] - cmp r0, r3 - bls _08079AF0 - adds r3, r0, #0 -_08079AF0: - adds r1, #0x1c - adds r2, #1 - cmp r2, #3 - bls _08079AE8 - mov r2, ip - ldrb r0, [r2, #0xe] - cmp r0, r3 - blo _08079B14 - lsls r0, r4, #0x18 - lsrs r0, r0, #0x18 - ldrb r3, [r2] - cmp r0, r3 - bne _08079B10 - ldr r0, _08079B1C @ =gPlayerEntity - bl UpdateAnimationSingleFrame -_08079B10: - ldr r0, _08079B20 @ =gPlayerState - strb r4, [r0] -_08079B14: - pop {r4, pc} - .align 2, 0 -_08079B18: .4byte gUnk_03000B80 -_08079B1C: .4byte gPlayerEntity -_08079B20: .4byte gPlayerState - - thumb_func_start sub_08079B24 -sub_08079B24: @ 0x08079B24 - push {r4, r5, lr} - ldr r2, _08079B60 @ =gPlayerEntity - ldrb r0, [r2, #0xc] - cmp r0, #0xa - beq _08079BD4 - adds r0, r2, #0 - adds r0, #0x45 - ldrb r3, [r0] - cmp r3, #0 - bne _08079BD4 - ldr r4, _08079B64 @ =gPlayerState - ldr r1, [r4, #0x30] - ldr r0, _08079B68 @ =0xFEFFFFFF - ands r1, r0 - str r1, [r4, #0x30] - adds r0, r2, #0 - adds r0, #0x42 - strb r3, [r0] - ldrb r0, [r4, #7] - cmp r0, #0 - bne _08079BD4 - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08079B6C - bl RespawnPlayer - b _08079BC0 - .align 2, 0 -_08079B60: .4byte gPlayerEntity -_08079B64: .4byte gPlayerState -_08079B68: .4byte 0xFEFFFFFF -_08079B6C: - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _08079BC0 - movs r3, #0x80 - lsls r3, r3, #5 - ands r3, r1 - cmp r3, #0 - bne _08079BC0 - movs r5, #0x36 - ldrsh r0, [r2, r5] - cmp r0, #0 - bge _08079BA6 - ldr r0, [r2, #0x20] - cmp r0, #0 - ble _08079B8C - str r3, [r2, #0x20] -_08079B8C: - ldrb r1, [r4, #2] - movs r3, #0x41 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - bne _08079BD4 - strb r3, [r4, #2] - movs r0, #0xff - strb r0, [r2, #0x15] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r4, #0xd] - b _08079BD4 -_08079BA6: - movs r0, #2 - ands r1, r0 - cmp r1, #0 - bne _08079BC0 - bl sub_08079D48 - cmp r0, #0 - bne _08079BC0 - ldrb r0, [r4, #0xa] - movs r1, #0x10 - orrs r0, r1 - strb r0, [r4, #0xa] - b _08079BD4 -_08079BC0: - ldr r2, _08079BD0 @ =gPlayerEntity - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - movs r0, #0 - b _08079BD6 - .align 2, 0 -_08079BD0: .4byte gPlayerEntity -_08079BD4: - movs r0, #1 -_08079BD6: - pop {r4, r5, pc} - - thumb_func_start sub_08079BD8 -sub_08079BD8: @ 0x08079BD8 - push {r4, r5, lr} - ldr r4, _08079C2C @ =gPlayerEntity - ldr r1, [r4, #0x2c] - str r1, [r0, #0x2c] - ldr r1, [r4, #0x30] - str r1, [r0, #0x30] - ldr r1, [r4, #0x34] - str r1, [r0, #0x34] - adds r1, r4, #0 - adds r1, #0x38 - ldrb r2, [r1] - adds r1, r0, #0 - adds r1, #0x38 - strb r2, [r1] - ldrb r3, [r4, #0x19] - lsrs r3, r3, #6 - lsls r3, r3, #6 - ldrb r5, [r0, #0x19] - movs r2, #0x3f - adds r1, r2, #0 - ands r1, r5 - orrs r1, r3 - strb r1, [r0, #0x19] - ldrb r1, [r4, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r3, [r0, #0x1b] - ands r2, r3 - orrs r2, r1 - strb r2, [r0, #0x1b] - adds r4, #0x29 - ldrb r2, [r4] - lsls r2, r2, #0x1d - adds r0, #0x29 - lsrs r2, r2, #0x1d - ldrb r3, [r0] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r2 - strb r1, [r0] - pop {r4, r5, pc} - .align 2, 0 -_08079C2C: .4byte gPlayerEntity - - thumb_func_start sub_08079C30 -sub_08079C30: @ 0x08079C30 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldr r0, _08079C68 @ =gPlayerState - ldrb r1, [r0, #0x14] - adds r7, r0, #0 - cmp r1, #0 - beq _08079C44 - b _08079D40 -_08079C44: - ldr r1, [r7, #0x30] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08079D40 - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - bne _08079D36 - ldrb r0, [r7, #0x13] - subs r0, #0xd - cmp r0, #0x1d - bhi _08079CE8 - lsls r0, r0, #2 - ldr r1, _08079C6C @ =_08079C70 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08079C68: .4byte gPlayerState -_08079C6C: .4byte _08079C70 -_08079C70: @ jump table - .4byte _08079D36 @ case 0 - .4byte _08079D36 @ case 1 - .4byte _08079D36 @ case 2 - .4byte _08079D36 @ case 3 - .4byte _08079CE8 @ case 4 - .4byte _08079CE8 @ case 5 - .4byte _08079CE8 @ case 6 - .4byte _08079D36 @ case 7 - .4byte _08079CE8 @ case 8 - .4byte _08079CE8 @ case 9 - .4byte _08079D36 @ case 10 - .4byte _08079CE8 @ case 11 - .4byte _08079CE8 @ case 12 - .4byte _08079CE8 @ case 13 - .4byte _08079CE8 @ case 14 - .4byte _08079CE8 @ case 15 - .4byte _08079CE8 @ case 16 - .4byte _08079CE8 @ case 17 - .4byte _08079CE8 @ case 18 - .4byte _08079CE8 @ case 19 - .4byte _08079CE8 @ case 20 - .4byte _08079CE8 @ case 21 - .4byte _08079CE8 @ case 22 - .4byte _08079CE8 @ case 23 - .4byte _08079CE8 @ case 24 - .4byte _08079CE8 @ case 25 - .4byte _08079CE8 @ case 26 - .4byte _08079CE8 @ case 27 - .4byte _08079CE8 @ case 28 - .4byte _08079D36 @ case 29 -_08079CE8: - mov r8, r7 - mov r0, r8 - ldrb r4, [r0, #0x12] - movs r2, #1 - rsbs r2, r2, #0 - adds r0, r6, #0 - movs r1, #0 - bl sub_080002B4 - ldr r5, _08079D3C @ =gUnk_08007CAC - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 - mov r0, r8 - ldrb r4, [r0, #0x12] - adds r0, r6, #0 - movs r1, #2 - movs r2, #0 - bl sub_080002B4 - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 - ldrb r4, [r7, #0x12] - movs r1, #2 - rsbs r1, r1, #0 - adds r0, r6, #0 - movs r2, #0 - bl sub_080002B4 - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 -_08079D36: - movs r0, #1 - b _08079D42 - .align 2, 0 -_08079D3C: .4byte gUnk_08007CAC -_08079D40: - movs r0, #0 -_08079D42: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08079D48 -sub_08079D48: @ 0x08079D48 - push {r4, lr} - ldr r4, _08079D78 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_08079C30 - cmp r0, #0 - beq _08079D72 - bl sub_08008B22 - cmp r0, #0 - bne _08079D80 - adds r0, r4, #0 - bl sub_080002B8 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r1, _08079D7C @ =gUnk_0811C268 - bl sub_08007DD6 - cmp r0, #0 - bne _08079D80 -_08079D72: - movs r0, #1 - b _08079D82 - .align 2, 0 -_08079D78: .4byte gPlayerEntity -_08079D7C: .4byte gUnk_0811C268 -_08079D80: - movs r0, #0 -_08079D82: - pop {r4, pc} - - thumb_func_start sub_08079D84 -sub_08079D84: @ 0x08079D84 - push {lr} - ldr r3, _08079DC0 @ =gPlayerEntity - ldrb r0, [r3, #0xc] - cmp r0, #1 - beq _08079D92 - cmp r0, #0x18 - bne _08079DBE -_08079D92: - ldr r2, _08079DC4 @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #0x9c - strb r0, [r1] - adds r1, #1 - movs r0, #2 - strb r0, [r1] - adds r1, #1 - movs r0, #0x3c - strb r0, [r1] - movs r0, #0xe - strb r0, [r2, #0xc] - adds r1, r3, #0 - adds r1, #0x3d - movs r0, #0x7c - strb r0, [r1] - bl sub_08077B20 - ldr r0, _08079DC8 @ =0x00000193 - bl SoundReq -_08079DBE: - pop {pc} - .align 2, 0 -_08079DC0: .4byte gPlayerEntity -_08079DC4: .4byte gPlayerState -_08079DC8: .4byte 0x00000193 - - thumb_func_start sub_08079DCC -sub_08079DCC: @ 0x08079DCC - push {lr} - ldr r0, _08079DFC @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #1 - bne _08079DF8 - ldr r3, _08079E00 @ =gPlayerState - adds r1, r3, #0 - adds r1, #0x38 - movs r2, #0 - movs r0, #0xa0 - strb r0, [r1] - adds r1, #1 - movs r0, #3 - strb r0, [r1] - adds r0, r3, #0 - adds r0, #0x3a - strb r2, [r0] - movs r0, #0xe - strb r0, [r3, #0xc] - ldr r0, _08079E04 @ =0x00000193 - bl SoundReq -_08079DF8: - pop {pc} - .align 2, 0 -_08079DFC: .4byte gPlayerEntity -_08079E00: .4byte gPlayerState -_08079E04: .4byte 0x00000193 - - thumb_func_start UpdatePlayerMovement -UpdatePlayerMovement: @ 0x08079E08 - push {r4, lr} - ldr r0, _08079E50 @ =gPlayerEntity - ldrh r2, [r0, #0x24] - movs r3, #0x24 - ldrsh r1, [r0, r3] - adds r4, r0, #0 - cmp r1, #0 - beq _08079E2E - ldr r0, _08079E54 @ =gPlayerState - adds r0, #0x80 - ldrh r0, [r0] - adds r0, r2, r0 - strh r0, [r4, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x1f - bgt _08079E2E - movs r0, #0x20 - strh r0, [r4, #0x24] -_08079E2E: - adds r2, r4, #0 - ldrb r1, [r2, #0x15] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _08079E40 - ldrb r0, [r2, #0x15] - bl sub_08079E90 -_08079E40: - adds r0, r4, #0 - bl sub_0800857C - ldrb r0, [r4, #0x15] - bl sub_0807A5B8 - pop {r4, pc} - .align 2, 0 -_08079E50: .4byte gPlayerEntity -_08079E54: .4byte gPlayerState - - thumb_func_start sub_08079E58 -sub_08079E58: @ 0x08079E58 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r4, r1, #0 - ldr r5, _08079E8C @ =gPlayerEntity - ldrb r1, [r5, #0x15] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _08079E70 - adds r0, r4, #0 - bl sub_08079E90 -_08079E70: - adds r0, r5, #0 - bl sub_080085B0 - lsls r1, r6, #0x10 - asrs r1, r1, #0x10 - lsls r2, r4, #0x18 - lsrs r2, r2, #0x18 - adds r0, r5, #0 - bl sub_080027EA - adds r0, r4, #0 - bl sub_0807A5B8 - pop {r4, r5, r6, pc} - .align 2, 0 -_08079E8C: .4byte gPlayerEntity - - thumb_func_start sub_08079E90 -sub_08079E90: @ 0x08079E90 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov sb, r0 - ldr r1, _08079EBC @ =gPlayerEntity - ldrb r2, [r1, #0x15] - movs r0, #8 - ands r0, r2 - adds r7, r1, #0 - cmp r0, #0 - beq _08079ECA - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - beq _08079EC0 - ldr r0, [r7, #0x48] - ldrb r0, [r0, #2] - rsbs r0, r0, #0 - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 - b _08079EC4 - .align 2, 0 -_08079EBC: .4byte gPlayerEntity -_08079EC0: - ldr r0, [r7, #0x48] - ldrb r5, [r0, #2] -_08079EC4: - ldr r0, [r7, #0x48] - ldrb r4, [r0, #3] - b _08079EDE -_08079ECA: - ldr r0, [r7, #0x48] - ldrb r5, [r0, #4] - cmp r2, #0 - beq _08079ED6 - ldrb r4, [r0, #5] - b _08079EDE -_08079ED6: - ldrb r0, [r0, #5] - rsbs r0, r0, #0 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 -_08079EDE: - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - mov r8, r0 - lsls r0, r4, #0x10 - asrs r6, r0, #0x10 - adds r0, r7, #0 - mov r1, r8 - adds r2, r6, #0 - bl sub_080002CC - adds r1, r0, #0 - mov r0, sb - bl sub_08079F48 - cmp r0, #0 - bne _08079F3C - ldrb r1, [r7, #0x15] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08079F10 - rsbs r0, r6, #0 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - b _08079F18 -_08079F10: - mov r1, r8 - rsbs r0, r1, #0 - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 -_08079F18: - ldr r0, _08079F38 @ =gPlayerEntity - lsls r1, r5, #0x10 - asrs r1, r1, #0x10 - lsls r2, r4, #0x10 - asrs r2, r2, #0x10 - bl sub_080002CC - adds r1, r0, #0 - mov r0, sb - bl sub_08079F48 - cmp r0, #0 - bne _08079F3C - movs r0, #0 - b _08079F3E - .align 2, 0 -_08079F38: .4byte gPlayerEntity -_08079F3C: - movs r0, #1 -_08079F3E: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08079F48 -sub_08079F48: @ 0x08079F48 - push {lr} - ldr r3, _08079F60 @ =gUnk_0811C118 - lsrs r2, r0, #2 - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, r1 - bne _08079F68 - ldr r0, _08079F64 @ =gPlayerEntity - ldrb r1, [r0, #0x15] - adds r1, #4 - b _08079F7C - .align 2, 0 -_08079F60: .4byte gUnk_0811C118 -_08079F64: .4byte gPlayerEntity -_08079F68: - adds r0, r2, #1 - adds r0, r0, r3 - ldrb r0, [r0] - cmp r0, r1 - beq _08079F76 - movs r0, #0 - b _08079F84 -_08079F76: - ldr r0, _08079F88 @ =gPlayerEntity - ldrb r1, [r0, #0x15] - subs r1, #4 -_08079F7C: - movs r2, #0x1f - ands r1, r2 - strb r1, [r0, #0x15] - movs r0, #1 -_08079F84: - pop {pc} - .align 2, 0 -_08079F88: .4byte gPlayerEntity - - thumb_func_start sub_08079F8C -sub_08079F8C: @ 0x08079F8C - push {lr} - ldr r2, _08079FB4 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08079FB8 @ =0x22189B75 - ands r0, r1 - cmp r0, #0 - bne _08079FB0 - adds r0, r2, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08079FB0 - ldr r0, _08079FBC @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #3 - beq _08079FB0 - cmp r0, #0xb - bne _08079FC0 -_08079FB0: - movs r0, #0 - b _08079FC2 - .align 2, 0 -_08079FB4: .4byte gPlayerState -_08079FB8: .4byte 0x22189B75 -_08079FBC: .4byte gPlayerEntity -_08079FC0: - movs r0, #1 -_08079FC2: - pop {pc} - - thumb_func_start sub_08079FC4 -sub_08079FC4: @ 0x08079FC4 - push {lr} - adds r1, r0, #0 - ldr r0, _08079FD0 @ =gPlayerEntity - bl sub_08079FD4 - pop {pc} - .align 2, 0 -_08079FD0: .4byte gPlayerEntity - - thumb_func_start sub_08079FD4 -sub_08079FD4: @ 0x08079FD4 - push {r4, r5, r6, lr} - sub sp, #4 - adds r5, r0, #0 - movs r0, #0x2e - ldrsh r2, [r5, r0] - ldr r3, _0807A008 @ =gRoomControls - ldrh r0, [r3, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r4, #0x3f - ands r2, r4 - movs r6, #0x32 - ldrsh r0, [r5, r6] - ldrh r3, [r3, #8] - subs r0, r0, r3 - asrs r0, r0, #4 - ands r0, r4 - lsls r0, r0, #6 - orrs r2, r0 - lsls r2, r2, #1 - ldr r6, _0807A00C @ =gUnk_02027EB4 - cmp r1, #2 - bne _0807A004 - ldr r6, _0807A010 @ =gUnk_0200D654 -_0807A004: - movs r4, #0 - b _0807A028 - .align 2, 0 -_0807A008: .4byte gRoomControls -_0807A00C: .4byte gUnk_02027EB4 -_0807A010: .4byte gUnk_0200D654 -_0807A014: - cmp r1, #0x23 - beq _0807A028 - cmp r1, #0x27 - beq _0807A028 - ldr r0, _0807A04C @ =gUnk_080082DC - subs r1, #0x10 - adds r1, r1, r0 - ldrb r0, [r1] - cmp r0, #0 - beq _0807A046 -_0807A028: - adds r4, #1 - adds r0, r5, #0 - mov r1, sp - bl sub_08004202 - adds r2, r0, #0 - lsrs r0, r2, #1 - adds r0, r6, r0 - ldrb r1, [r0] - cmp r1, #0xe - bls _0807A046 - cmp r1, #0xf - bls _0807A028 - cmp r1, #0x1d - bne _0807A014 -_0807A046: - adds r0, r4, #0 - add sp, #4 - pop {r4, r5, r6, pc} - .align 2, 0 -_0807A04C: .4byte gUnk_080082DC - - thumb_func_start sub_0807A050 -sub_0807A050: @ 0x0807A050 - push {lr} - ldr r3, _0807A088 @ =gPlayerState - ldrb r2, [r3, #0xf] - cmp r2, #0 - beq _0807A06A - ldr r0, _0807A08C @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0807A06A - subs r0, r2, #1 - strb r0, [r3, #0xf] -_0807A06A: - movs r0, #0 - bl sub_0807A094 - adds r1, r0, #0 - ldr r0, _0807A088 @ =gPlayerState - adds r0, #0x83 - ldrb r2, [r0] - cmp r1, r2 - beq _0807A084 - strb r1, [r0] - ldr r0, _0807A090 @ =gPlayerEntity - bl ChangeObjPalette -_0807A084: - pop {pc} - .align 2, 0 -_0807A088: .4byte gPlayerState -_0807A08C: .4byte gMessage -_0807A090: .4byte gPlayerEntity - - thumb_func_start sub_0807A094 -sub_0807A094: @ 0x0807A094 - push {r4, r5, lr} - adds r3, r0, #0 - movs r2, #0x16 - ldr r0, _0807A0AC @ =gPlayerState - ldrb r0, [r0, #0xf] - cmp r0, #0 - beq _0807A0B0 - movs r2, #0x1b - cmp r0, #0x78 - bls _0807A104 - movs r2, #0x1a - b _0807A104 - .align 2, 0 -_0807A0AC: .4byte gPlayerState -_0807A0B0: - ldr r0, _0807A0F0 @ =gSave - adds r1, r0, #0 - adds r1, #0xb2 - ldrb r1, [r1] - adds r5, r0, #0 - cmp r1, #0 - beq _0807A104 - movs r4, #1 - cmp r3, #0 - bne _0807A0D6 - adds r0, #0xc4 - ldrh r1, [r0] - cmp r1, #0xb3 - bhi _0807A0D6 - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0807A0D6 - movs r4, #0 -_0807A0D6: - cmp r4, #0 - beq _0807A104 - adds r0, r5, #0 - adds r0, #0xb2 - ldrb r0, [r0] - cmp r0, #0x30 - beq _0807A102 - cmp r0, #0x30 - bgt _0807A0F4 - cmp r0, #0x2f - beq _0807A0FA - b _0807A102 - .align 2, 0 -_0807A0F0: .4byte gSave -_0807A0F4: - cmp r0, #0x31 - beq _0807A0FE - b _0807A102 -_0807A0FA: - movs r2, #0x18 - b _0807A104 -_0807A0FE: - movs r2, #0x17 - b _0807A104 -_0807A102: - movs r2, #0x19 -_0807A104: - adds r0, r2, #0 - pop {r4, r5, pc} - - thumb_func_start DeleteClones -DeleteClones: @ 0x0807A108 - push {lr} - ldr r1, _0807A148 @ =gPlayerClones - movs r0, #0 - str r0, [r1] - str r0, [r1, #4] - str r0, [r1, #8] - ldr r2, _0807A14C @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _0807A150 @ =0xFFBFFFFF - ands r0, r1 - str r0, [r2, #0x30] - ldr r0, _0807A154 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x17 - bne _0807A130 - adds r0, r2, #0 - adds r0, #0xa0 - ldrb r0, [r0] - cmp r0, #4 - beq _0807A144 -_0807A130: - adds r1, r2, #0 - adds r1, #0xa0 - ldrb r0, [r1] - subs r0, #4 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _0807A144 - movs r0, #1 - strb r0, [r1] -_0807A144: - pop {pc} - .align 2, 0 -_0807A148: .4byte gPlayerClones -_0807A14C: .4byte gPlayerState -_0807A150: .4byte 0xFFBFFFFF -_0807A154: .4byte gPlayerEntity - - thumb_func_start sub_0807A158 -sub_0807A158: @ 0x0807A158 - push {r4, lr} - ldr r4, _0807A178 @ =gSave - adds r0, r4, #0 - adds r0, #0xb4 - ldrb r0, [r0] - bl ItemIsSword - cmp r0, #0 - bne _0807A17C - adds r0, r4, #0 - adds r0, #0xb5 - ldrb r0, [r0] - bl ItemIsSword - b _0807A17E - .align 2, 0 -_0807A178: .4byte gSave -_0807A17C: - movs r0, #1 -_0807A17E: - pop {r4, pc} - - thumb_func_start sub_0807A180 -sub_0807A180: @ 0x0807A180 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - sub sp, #0x88 - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - mov r8, r3 - ldr r3, _0807A1B4 @ =0xFFFC0000 - mov r1, sp - movs r2, #0 - bl PositionRelative - mov r1, sp - ldrb r0, [r4, #0x14] - strb r0, [r1, #0x14] - mov r0, sp - adds r1, r5, #0 - adds r2, r6, #0 - mov r3, r8 - bl sub_08003FDE - add sp, #0x88 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_0807A1B4: .4byte 0xFFFC0000 - - thumb_func_start UpdateFloorType -UpdateFloorType: @ 0x0807A1B8 - push {r4, lr} - ldr r4, _0807A1DC @ =gPlayerEntity - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl GetSurfaceCalcType - ldr r1, _0807A1E0 @ =gPlayerState - strb r0, [r1, #0x12] - ldr r2, _0807A1E4 @ =gUnk_0811C120 - ldrb r0, [r1, #0x12] - lsls r0, r0, #2 - adds r0, r0, r2 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_0807A1DC: .4byte gPlayerEntity -_0807A1E0: .4byte gPlayerState -_0807A1E4: .4byte gUnk_0811C120 - - thumb_func_start GetSurfaceCalcType -GetSurfaceCalcType: @ 0x0807A1E8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - adds r6, r1, #0 - mov r8, r2 - movs r1, #0x2e - ldrsh r0, [r5, r1] - adds r0, r0, r6 - ldr r2, _0807A288 @ =gRoomControls - ldrh r1, [r2, #6] - subs r1, r0, r1 - lsrs r4, r1, #4 - movs r3, #0x3f - ands r4, r3 - movs r7, #0x32 - ldrsh r1, [r5, r7] - add r1, r8 - ldrh r2, [r2, #8] - subs r2, r1, r2 - asrs r2, r2, #4 - ands r2, r3 - lsls r2, r2, #6 - orrs r4, r2 - ldr r2, _0807A28C @ =gPlayerEntity - adds r2, #0x38 - ldrb r2, [r2] - bl GetTileTypeByPos - adds r2, r0, #0 - ldr r1, _0807A290 @ =gPlayerState - ldrh r0, [r1, #0x24] - cmp r2, r0 - beq _0807A23A - adds r3, r1, #0 - adds r3, #0x37 - movs r0, #0 - strb r0, [r3] - ldrh r7, [r1, #0x24] - cmp r2, r7 - bne _0807A242 -_0807A23A: - adds r3, r1, #0 - ldrh r0, [r3, #0x22] - cmp r4, r0 - beq _0807A24E -_0807A242: - ldr r0, _0807A290 @ =gPlayerState - movs r1, #0 - strh r4, [r0, #0x22] - strh r2, [r0, #0x24] - strb r1, [r0, #0x11] - adds r3, r0, #0 -_0807A24E: - adds r2, r3, #0 - ldrb r1, [r2, #0x11] - adds r0, r1, #0 - cmp r0, #0xff - beq _0807A25C - adds r0, r1, #1 - strb r0, [r2, #0x11] -_0807A25C: - adds r2, #0x37 - ldrb r1, [r2] - adds r0, r1, #0 - cmp r0, #0xff - beq _0807A26A - adds r0, r1, #1 - strb r0, [r2] -_0807A26A: - ldrb r0, [r3, #0x12] - strb r0, [r3, #0x13] - adds r0, r5, #0 - adds r1, r6, #0 - mov r2, r8 - bl sub_080002B4 - adds r2, r0, #0 - ldr r1, _0807A294 @ =gUnk_08007CAC - bl sub_08007DD6 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807A288: .4byte gRoomControls -_0807A28C: .4byte gPlayerEntity -_0807A290: .4byte gPlayerState -_0807A294: .4byte gUnk_08007CAC - - thumb_func_start EnablePlayerDraw -EnablePlayerDraw: @ 0x0807A298 - movs r1, #0 - strb r1, [r0, #0xb] - ldrb r1, [r0, #0x18] - movs r2, #3 - orrs r1, r2 - strb r1, [r0, #0x18] - ldr r2, _0807A2B4 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x41 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_0807A2B4: .4byte gPlayerState - - thumb_func_start sub_0807A2B8 -sub_0807A2B8: @ 0x0807A2B8 - push {lr} - bl sub_08008B22 - cmp r0, #0 - beq _0807A2C6 - movs r0, #1 - b _0807A2EC -_0807A2C6: - ldr r0, _0807A2F0 @ =gPlayerState - ldrb r1, [r0, #2] - movs r0, #0xc8 - ands r0, r1 - cmp r0, #0 - bne _0807A2EA - ldr r1, _0807A2F4 @ =gPlayerEntity - adds r0, r1, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - beq _0807A2EA - adds r0, r1, #0 - movs r1, #0x44 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent -_0807A2EA: - movs r0, #0 -_0807A2EC: - pop {pc} - .align 2, 0 -_0807A2F0: .4byte gPlayerState -_0807A2F4: .4byte gPlayerEntity - - thumb_func_start sub_0807A2F8 -sub_0807A2F8: @ 0x0807A2F8 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r4, r0, #0 - ldr r0, _0807A364 @ =gRoomControls - mov r8, r0 - ldrb r0, [r0, #4] - cmp r0, #8 - bne _0807A312 - b _0807A4F2 -_0807A312: - bl sub_08079778 - orrs r0, r4 - cmp r0, #0 - bne _0807A31E - b _0807A4F2 -_0807A31E: - ldr r7, _0807A368 @ =gPlayerEntity - ldrb r1, [r7, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0807A36C - movs r1, #0x2e - ldrsh r2, [r7, r1] - mov r6, r8 - ldrh r0, [r6, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r0, #0x32 - ldrsh r1, [r7, r0] - ldr r0, [r7, #0x48] - ldrb r5, [r0, #5] - adds r0, r1, r5 - ldrh r4, [r6, #8] - subs r0, r0, r4 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r0, r2 - lsls r7, r0, #1 - subs r1, r1, r5 - subs r1, r1, r4 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r2, r1 - lsls r6, r2, #1 - b _0807A3A2 - .align 2, 0 -_0807A364: .4byte gRoomControls -_0807A368: .4byte gPlayerEntity -_0807A36C: - movs r1, #0x2e - ldrsh r3, [r7, r1] - ldr r0, [r7, #0x48] - ldrb r6, [r0, #2] - adds r1, r3, r6 - mov r2, r8 - ldrh r5, [r2, #6] - subs r1, r1, r5 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r2, #0x32 - ldrsh r0, [r7, r2] - mov r7, r8 - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r4 - lsls r0, r0, #6 - orrs r1, r0 - lsls r7, r1, #1 - subs r3, r3, r6 - subs r3, r3, r5 - asrs r3, r3, #4 - ands r3, r4 - orrs r3, r0 - lsls r6, r3, #1 -_0807A3A2: - movs r0, #0 - mov sb, r0 - ldr r1, _0807A3F4 @ =gPlayerEntity - mov sl, r1 -_0807A3AA: - movs r2, #0 - mov r8, r2 - mov r0, sl - mov r1, sp - adds r2, r7, #0 - bl sub_08004202 - adds r7, r0, #0 - lsrs r4, r7, #1 - adds r0, r4, #0 - movs r1, #1 - bl sub_080002E0 - cmp r0, #0 - beq _0807A3FC - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - mov r1, sl - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002C8 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov r2, sl - ldrb r1, [r2, #0x14] - lsrs r1, r1, #1 - lsls r1, r1, #2 - ldr r2, _0807A3F8 @ =gUnk_0811C1D8 - adds r1, r1, r2 - ldr r1, [r1] - bl sub_08007DD6 - cmp r0, #0 - beq _0807A468 - b _0807A400 - .align 2, 0 -_0807A3F4: .4byte gPlayerEntity -_0807A3F8: .4byte gUnk_0811C1D8 -_0807A3FC: - movs r0, #1 - mov r8, r0 -_0807A400: - ldr r5, _0807A444 @ =gPlayerEntity - adds r0, r5, #0 - mov r1, sp - adds r2, r6, #0 - bl sub_08004202 - adds r6, r0, #0 - lsrs r4, r6, #1 - adds r0, r4, #0 - movs r1, #1 - bl sub_080002E0 - cmp r0, #0 - beq _0807A44C - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - adds r1, r5, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002C8 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r5, #0x14] - lsrs r1, r1, #1 - lsls r1, r1, #2 - ldr r2, _0807A448 @ =gUnk_0811C1D8 - adds r1, r1, r2 - ldr r1, [r1] - bl sub_08007DD6 - cmp r0, #0 - beq _0807A468 - b _0807A450 - .align 2, 0 -_0807A444: .4byte gPlayerEntity -_0807A448: .4byte gUnk_0811C1D8 -_0807A44C: - movs r0, #1 - add r8, r0 -_0807A450: - mov r1, r8 - cmp r1, #2 - bne _0807A45E - mov r2, sb - cmp r2, #0 - bne _0807A46E - b _0807A4F2 -_0807A45E: - movs r0, #1 - add sb, r0 - mov r1, sb - cmp r1, #1 - bls _0807A3AA -_0807A468: - mov r2, sb - cmp r2, #0 - beq _0807A4F2 -_0807A46E: - bl AreaIsDungeon - cmp r0, #0 - beq _0807A4B0 - ldr r4, _0807A4AC @ =gPlayerEntity - adds r0, r4, #0 - mov r1, sp - adds r2, r7, #0 - bl sub_08004202 - adds r7, r0, #0 - lsrs r0, r7, #1 - movs r1, #2 - bl sub_080002E0 - cmp r0, #0 - bne _0807A4F2 - adds r0, r4, #0 - mov r1, sp - adds r2, r6, #0 - bl sub_08004202 - adds r6, r0, #0 - lsrs r0, r6, #1 - movs r1, #2 -_0807A4A0: - bl sub_080002E0 - cmp r0, #0 - beq _0807A4EC - b _0807A4F2 - .align 2, 0 -_0807A4AC: .4byte gPlayerEntity -_0807A4B0: - mov r0, sb - cmp r0, #2 - bne _0807A4C2 - ldr r0, _0807A4E8 @ =gPlayerEntity - mov r1, sp - adds r2, r7, #0 - bl sub_08004202 - adds r7, r0, #0 -_0807A4C2: - lsrs r0, r7, #1 - movs r1, #1 - bl sub_080002E0 - cmp r0, #0 - bne _0807A4F2 - mov r1, sb - cmp r1, #2 - bne _0807A4E0 - ldr r0, _0807A4E8 @ =gPlayerEntity - mov r1, sp - adds r2, r6, #0 - bl sub_08004202 - adds r6, r0, #0 -_0807A4E0: - lsrs r0, r6, #1 - movs r1, #1 - b _0807A4A0 - .align 2, 0 -_0807A4E8: .4byte gPlayerEntity -_0807A4EC: - mov r0, sb - adds r0, #1 - b _0807A4F4 -_0807A4F2: - movs r0, #0 -_0807A4F4: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0807A500 -sub_0807A500: @ 0x0807A500 - push {r4, r5, r6, lr} - ldr r6, _0807A518 @ =gPlayerEntity - ldrb r0, [r6, #0x14] - lsrs r0, r0, #1 - cmp r0, #1 - beq _0807A574 - cmp r0, #1 - bgt _0807A51C - cmp r0, #0 - beq _0807A526 - b _0807A5B4 - .align 2, 0 -_0807A518: .4byte gPlayerEntity -_0807A51C: - cmp r0, #2 - beq _0807A554 - cmp r0, #3 - beq _0807A580 - b _0807A5B4 -_0807A526: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r5, _0807A550 @ =gRoomControls - ldrh r1, [r5, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r4, #0x3f - ands r0, r4 - movs r2, #0x32 - ldrsh r1, [r6, r2] - ldr r3, [r6, #0x48] - ldrb r2, [r3, #5] - subs r1, r1, r2 - movs r2, #1 - ldrsb r2, [r3, r2] - adds r1, r1, r2 - ldrh r2, [r5, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - b _0807A5AA - .align 2, 0 -_0807A550: .4byte gRoomControls -_0807A554: - movs r5, #0x2e - ldrsh r0, [r6, r5] - ldr r4, _0807A570 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - ldr r2, [r6, #0x48] - movs r5, #0x32 - ldrsh r1, [r6, r5] - ldrb r5, [r2, #5] - adds r1, r1, r5 - b _0807A59A - .align 2, 0 -_0807A570: .4byte gRoomControls -_0807A574: - ldr r2, [r6, #0x48] - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldrb r5, [r2, #2] - adds r0, r0, r5 - b _0807A58A -_0807A580: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r2, [r6, #0x48] - ldrb r1, [r2, #2] - subs r0, r0, r1 -_0807A58A: - ldr r4, _0807A5B0 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r6, r5] -_0807A59A: - ldrb r2, [r2, #1] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 -_0807A5AA: - lsls r1, r1, #6 - orrs r0, r1 - b _0807A5B6 - .align 2, 0 -_0807A5B0: .4byte gRoomControls -_0807A5B4: - movs r0, #0 -_0807A5B6: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0807A5B8 -sub_0807A5B8: @ 0x0807A5B8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov sb, r0 - ldr r2, _0807A5F8 @ =gPlayerState - ldrb r3, [r2, #2] - movs r4, #0x80 - adds r0, r4, #0 - ands r0, r3 - cmp r0, #0 - beq _0807A5D2 - b _0807A736 -_0807A5D2: - ldr r1, [r2, #0x30] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0807A5DE - b _0807A736 -_0807A5DE: - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _0807A5EA - b _0807A736 -_0807A5EA: - adds r0, r1, #0 - ands r0, r4 - cmp r0, #0 - beq _0807A600 - ldr r7, _0807A5FC @ =gUnk_0800833C - b _0807A63A - .align 2, 0 -_0807A5F8: .4byte gPlayerState -_0807A5FC: .4byte gUnk_0800833C -_0807A600: - movs r0, #0x80 - lsls r0, r0, #0x11 - ands r1, r0 - cmp r1, #0 - bne _0807A60E - cmp r3, #0 - beq _0807A618 -_0807A60E: - ldr r7, _0807A614 @ =gUnk_0800845C - b _0807A63A - .align 2, 0 -_0807A614: .4byte gUnk_0800845C -_0807A618: - ldrb r0, [r2, #5] - cmp r0, #0 - bne _0807A624 - ldrb r0, [r2, #0x1c] - cmp r0, #0 - beq _0807A62C -_0807A624: - ldr r7, _0807A628 @ =gUnk_080084BC - b _0807A63A - .align 2, 0 -_0807A628: .4byte gUnk_080084BC -_0807A62C: - adds r0, r2, #0 - adds r0, #0xaa - ldrb r0, [r0] - ldr r7, _0807A740 @ =gUnk_080082DC - cmp r0, #0 - beq _0807A63A - ldr r7, _0807A744 @ =gUnk_0800851C -_0807A63A: - mov r0, sb - cmp r0, #0 - beq _0807A6B8 - cmp r0, #0x10 - beq _0807A6B8 - ldr r6, _0807A748 @ =gPlayerEntity - ldr r2, [r6, #0x48] - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldrb r3, [r2, #2] - adds r0, r0, r3 - movs r1, #0 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - ldr r1, _0807A74C @ =gRoomControls - mov r8, r1 - ldrh r1, [r1, #6] - subs r5, r0, r1 - movs r3, #0x32 - ldrsh r0, [r6, r3] - movs r1, #1 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - mov r2, r8 - ldrh r1, [r2, #8] - subs r4, r0, r1 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl sub_080086B4 - cmp r0, #0 - beq _0807A688 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - movs r3, #1 - bl sub_0807A750 -_0807A688: - movs r3, #0x2e - ldrsh r1, [r6, r3] - ldr r2, [r6, #0x48] - ldrb r0, [r2, #2] - subs r1, r1, r0 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - mov r2, r8 - ldrh r0, [r2, #6] - subs r5, r1, r0 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl sub_080086B4 - cmp r0, #0 - beq _0807A6B8 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - movs r3, #3 - bl sub_0807A750 -_0807A6B8: - mov r3, sb - cmp r3, #8 - beq _0807A736 - cmp r3, #0x18 - beq _0807A736 - ldr r6, _0807A748 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, [r6, #0x48] - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - ldr r3, _0807A74C @ =gRoomControls - mov r8, r3 - ldrh r0, [r3, #6] - subs r5, r1, r0 - movs r1, #0x32 - ldrsh r0, [r6, r1] - ldrb r3, [r2, #5] - adds r0, r0, r3 - movs r1, #1 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - mov r2, r8 - ldrh r1, [r2, #8] - subs r4, r0, r1 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl sub_080086B4 - cmp r0, #0 - beq _0807A706 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - movs r3, #2 - bl sub_0807A750 -_0807A706: - movs r3, #0x32 - ldrsh r1, [r6, r3] - ldr r2, [r6, #0x48] - ldrb r0, [r2, #5] - subs r1, r1, r0 - movs r0, #1 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - mov r2, r8 - ldrh r0, [r2, #8] - subs r4, r1, r0 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl sub_080086B4 - cmp r0, #0 - beq _0807A736 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - movs r3, #0 - bl sub_0807A750 -_0807A736: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807A740: .4byte gUnk_080082DC -_0807A744: .4byte gUnk_0800851C -_0807A748: .4byte gPlayerEntity -_0807A74C: .4byte gRoomControls - - thumb_func_start sub_0807A750 -sub_0807A750: @ 0x0807A750 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - adds r6, r1, #0 - mov r8, r2 - adds r5, r3, #0 - movs r0, #1 - ands r0, r5 - cmp r0, #0 - bne _0807A76C - movs r4, #0xf - ands r4, r6 - b _0807A770 -_0807A76C: - movs r4, #0xf - ands r4, r7 -_0807A770: - cmp r4, #0 - bne _0807A776 - b _0807A88E -_0807A776: - cmp r4, #0xf - bne _0807A77C - b _0807A88E -_0807A77C: - lsrs r0, r7, #4 - movs r2, #0x3f - ands r0, r2 - lsrs r1, r6, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - ldr r1, _0807A7A8 @ =gPlayerEntity - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002E0 - adds r1, r0, #0 - cmp r1, #0xf - bls _0807A7AE - cmp r1, #0xff - beq _0807A7AC - mov r2, r8 - adds r0, r1, r2 - subs r0, #0x10 - ldrb r1, [r0] - b _0807A7AE - .align 2, 0 -_0807A7A8: .4byte gPlayerEntity -_0807A7AC: - movs r1, #0xf -_0807A7AE: - ldr r0, _0807A7D8 @ =gUnk_0800823C - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - movs r0, #1 - ands r0, r5 - cmp r0, #0 - bne _0807A824 - movs r0, #0xf - ands r0, r7 - movs r2, #0x80 - lsls r2, r2, #8 - asrs r2, r0 - cmp r5, #0 - bne _0807A7F4 - ldr r3, _0807A7DC @ =gPlayerEntity - cmp r4, #0xe - bgt _0807A7F0 - lsls r0, r4, #1 - adds r1, r0, r1 - b _0807A7E8 - .align 2, 0 -_0807A7D8: .4byte gUnk_0800823C -_0807A7DC: .4byte gPlayerEntity -_0807A7E0: - adds r1, #2 - adds r4, #1 - cmp r4, #0xe - bgt _0807A7F0 -_0807A7E8: - ldrh r0, [r1] - ands r0, r2 - cmp r0, #0 - bne _0807A7E0 -_0807A7F0: - subs r4, #1 - b _0807A816 -_0807A7F4: - ldr r3, _0807A800 @ =gPlayerEntity - cmp r4, #0 - ble _0807A814 - lsls r0, r4, #1 - adds r1, r0, r1 - b _0807A80C - .align 2, 0 -_0807A800: .4byte gPlayerEntity -_0807A804: - subs r1, #2 - subs r4, #1 - cmp r4, #0 - ble _0807A814 -_0807A80C: - ldrh r0, [r1] - ands r0, r2 - cmp r0, #0 - bne _0807A804 -_0807A814: - adds r4, #1 -_0807A816: - movs r0, #0xf - ands r0, r6 - subs r0, r4, r0 - ldrh r1, [r3, #0x32] - adds r0, r0, r1 - strh r0, [r3, #0x32] - b _0807A88E -_0807A824: - movs r3, #0xf - ands r6, r3 - lsls r0, r6, #1 - adds r0, r0, r1 - ldrh r2, [r0] - cmp r5, #1 - bne _0807A85C - subs r0, r3, r4 - lsrs r2, r0 - ldr r3, _0807A858 @ =gPlayerEntity - cmp r4, #0 - ble _0807A854 - ands r5, r2 - cmp r5, #0 - beq _0807A854 - movs r1, #1 -_0807A844: - lsrs r2, r2, #1 - subs r4, #1 - cmp r4, #0 - ble _0807A854 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _0807A844 -_0807A854: - adds r4, #1 - b _0807A882 - .align 2, 0 -_0807A858: .4byte gPlayerEntity -_0807A85C: - lsls r2, r4 - ldr r3, _0807A86C @ =gPlayerEntity - cmp r4, #0xe - bgt _0807A880 - movs r1, #0x80 - lsls r1, r1, #8 - b _0807A878 - .align 2, 0 -_0807A86C: .4byte gPlayerEntity -_0807A870: - lsls r2, r2, #1 - adds r4, #1 - cmp r4, #0xe - bgt _0807A880 -_0807A878: - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _0807A870 -_0807A880: - subs r4, #1 -_0807A882: - movs r0, #0xf - ands r0, r7 - subs r0, r4, r0 - ldrh r2, [r3, #0x2e] - adds r0, r0, r2 - strh r0, [r3, #0x2e] -_0807A88E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0807A894 -sub_0807A894: @ 0x0807A894 - push {lr} - ldrb r1, [r0, #0x15] - cmp r1, #8 - beq _0807A8BA - cmp r1, #8 - bgt _0807A8A6 - cmp r1, #0 - beq _0807A8B0 - b _0807A8C8 -_0807A8A6: - cmp r1, #0x10 - beq _0807A8B6 - cmp r1, #0x18 - beq _0807A8C0 - b _0807A8C8 -_0807A8B0: - movs r2, #8 - rsbs r2, r2, #0 - b _0807A8CA -_0807A8B6: - movs r2, #5 - b _0807A8CA -_0807A8BA: - movs r2, #0 - movs r1, #8 - b _0807A8CC -_0807A8C0: - movs r2, #0 - movs r1, #8 - rsbs r1, r1, #0 - b _0807A8CC -_0807A8C8: - movs r2, #0 -_0807A8CA: - movs r1, #0 -_0807A8CC: - bl sub_080002B4 - pop {pc} - .align 2, 0 - - thumb_func_start nullsub_505 -nullsub_505: @ 0x0807A8D4 - bx lr - .align 2, 0 - - thumb_func_start sub_0807A8D8 -sub_0807A8D8: @ 0x0807A8D8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - ldr r0, _0807AA5C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807A8F0 - b _0807A9F6 -_0807A8F0: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r7, _0807AA60 @ =gRoomControls - ldrh r1, [r7, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r6, #0x3f - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - adds r2, #1 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - ldr r1, _0807AA64 @ =gPlayerEntity - adds r1, #0x38 - mov sb, r1 - ldrb r1, [r1] - bl sub_080002EC - adds r4, r0, #0 - movs r0, #0x20 - mov r8, r0 - ands r4, r0 - cmp r4, #0 - beq _0807A94E - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - adds r2, #1 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A94E: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldrh r1, [r7, #6] - subs r1, #2 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - mov r2, sb - ldrb r1, [r2] - bl sub_080002EC - adds r4, r0, #0 - mov r0, r8 - ands r4, r0 - cmp r4, #0 - beq _0807A9A2 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - subs r0, #2 - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A9A2: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldrh r1, [r7, #6] - adds r1, #2 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - mov r2, sb - ldrb r1, [r2] - bl sub_080002EC - adds r4, r0, #0 - mov r0, r8 - ands r4, r0 - cmp r4, #0 - beq _0807A9F6 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - adds r0, #2 - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A9F6: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r7, _0807AA60 @ =gRoomControls - ldrh r1, [r7, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r6, #0x3f - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - ldr r1, _0807AA64 @ =gPlayerEntity - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002EC - adds r4, r0, #0 - movs r0, #0x20 - ands r0, r4 - cmp r0, #0 - beq _0807AA4C - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldrh r0, [r7, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807AA4C: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _0807AA68 - adds r0, r5, #0 - bl sub_0807AABC - b _0807AA76 - .align 2, 0 -_0807AA5C: .4byte gPlayerState -_0807AA60: .4byte gRoomControls -_0807AA64: .4byte gPlayerEntity -_0807AA68: - movs r0, #4 - ands r0, r4 - cmp r0, #0 - beq _0807AA76 - adds r0, r5, #0 - bl sub_0807AA80 -_0807AA76: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807AA80 -sub_0807AA80: @ 0x0807AA80 - push {lr} - adds r3, r0, #0 - ldr r0, _0807AAB8 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x40 - ands r0, r1 - cmp r0, #0 - bne _0807AAB6 - adds r0, r3, #0 - adds r0, #0x38 - movs r1, #2 - strb r1, [r0] - movs r1, #0x36 - ldrsh r0, [r3, r1] - cmp r0, #0 - bne _0807AAB6 - ldrb r2, [r3, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r3, #0x1b] - ldrb r0, [r3, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r3, #0x19] -_0807AAB6: - pop {pc} - .align 2, 0 -_0807AAB8: .4byte gPlayerState - - thumb_func_start sub_0807AABC -sub_0807AABC: @ 0x0807AABC - push {lr} - adds r3, r0, #0 - ldr r0, _0807AAF4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x40 - ands r0, r1 - cmp r0, #0 - bne _0807AAF2 - adds r0, r3, #0 - adds r0, #0x38 - movs r1, #1 - strb r1, [r0] - movs r1, #0x36 - ldrsh r0, [r3, r1] - cmp r0, #0 - bne _0807AAF2 - ldrb r2, [r3, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x80 - orrs r0, r2 - strb r0, [r3, #0x1b] - ldrb r0, [r3, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r3, #0x19] -_0807AAF2: - pop {pc} - .align 2, 0 -_0807AAF4: .4byte gPlayerState - - thumb_func_start sub_0807AAF8 -sub_0807AAF8: @ 0x0807AAF8 - push {r4, lr} - adds r3, r0, #0 - adds r2, r1, #0 - movs r1, #0x36 - ldrsh r0, [r3, r1] - cmp r0, #0 - bne _0807AB3C - adds r0, r3, #0 - adds r0, #0x38 - ldrb r0, [r0] - lsls r0, r0, #0x1e - orrs r2, r0 - movs r3, #0 - ldr r0, _0807AB40 @ =gPlayerState - ldr r1, [r0, #0x40] - adds r4, r0, #0 - cmp r1, r2 - beq _0807AB32 - adds r1, r4, #0 - adds r1, #0x40 -_0807AB20: - ldr r0, [r1] - stm r1!, {r2} - adds r2, r0, #0 - adds r3, #1 - cmp r3, #0xe - bhi _0807AB32 - ldr r0, [r1] - cmp r0, r2 - bne _0807AB20 -_0807AB32: - lsls r0, r3, #2 - adds r1, r4, #0 - adds r1, #0x40 - adds r0, r0, r1 - str r2, [r0] -_0807AB3C: - pop {r4, pc} - .align 2, 0 -_0807AB40: .4byte gPlayerState - - thumb_func_start sub_0807AB44 -sub_0807AB44: @ 0x0807AB44 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r6, r0, #0 - adds r7, r1, #0 - mov r8, r2 - movs r1, #0x2e - ldrsh r0, [r6, r1] - adds r0, r0, r7 - ldr r2, _0807ABF0 @ =gRoomControls - mov sb, r2 - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - mov sl, r3 - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r6, r5] - add r1, r8 - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r6, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - movs r1, #0xb - bl sub_0806FC50 - adds r5, r0, #0 - cmp r5, #0 - beq _0807AC44 - ldrh r0, [r5, #6] - cmp r0, #0x76 - bne _0807ABF4 - movs r0, #0x2a - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0807AC44 - lsls r2, r7, #0x10 - mov r0, r8 - lsls r3, r0, #0x10 - adds r0, r6, #0 - adds r1, r4, #0 - bl PositionRelative - adds r0, r4, #0 - bl sub_08004168 - ldrh r0, [r5, #6] - movs r2, #0x2e - ldrsh r1, [r4, r2] - mov r3, sb - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - mov r5, sl - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r4, r3] - mov r5, sb - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - mov r3, sl - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B7D8 - b _0807AC44 - .align 2, 0 -_0807ABF0: .4byte gRoomControls -_0807ABF4: - movs r0, #0x2a - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0807AC44 - lsls r2, r7, #0x10 - mov r0, r8 - lsls r3, r0, #0x10 - adds r0, r6, #0 - adds r1, r4, #0 - bl PositionRelative - str r5, [r4, #0x54] - ldr r0, _0807AC50 @ =0x0000404F - movs r2, #0x2e - ldrsh r1, [r4, r2] - mov r3, sb - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - mov r5, sl - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r4, r3] - mov r5, sb - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - mov r3, sl - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0807AC44: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807AC50: .4byte 0x0000404F - - thumb_func_start sub_0807AC54 -sub_0807AC54: @ 0x0807AC54 - push {lr} - adds r2, r0, #0 - ldr r0, _0807AC74 @ =gPlayerState - ldrb r1, [r0, #0x11] - adds r3, r0, #0 - cmp r1, #0 - beq _0807ACC6 - ldrb r0, [r3, #0x12] - cmp r0, #0x2a - beq _0807ACA8 - cmp r0, #0x2a - bgt _0807AC78 - cmp r0, #0x1e - beq _0807AC82 - b _0807ACC6 - .align 2, 0 -_0807AC74: .4byte gPlayerState -_0807AC78: - cmp r0, #0x2b - beq _0807AC90 - cmp r0, #0x2c - beq _0807ACB6 - b _0807ACC6 -_0807AC82: - ldrh r0, [r2, #0x2e] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strh r1, [r2, #0x2e] -_0807AC90: - movs r0, #0 - movs r1, #0x1d - strb r1, [r2, #0xc] - strb r0, [r2, #0xd] - strh r0, [r2, #0x30] - ldr r0, _0807ACA4 @ =0x000002CF - strh r0, [r3, #8] - movs r0, #1 - b _0807ACC8 - .align 2, 0 -_0807ACA4: .4byte 0x000002CF -_0807ACA8: - ldrh r0, [r2, #0x2e] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strh r1, [r2, #0x2e] -_0807ACB6: - movs r0, #0 - movs r1, #0x1d - strb r1, [r2, #0xc] - movs r1, #1 - strb r1, [r2, #0xd] - strh r0, [r2, #0x30] - movs r0, #1 - b _0807ACC8 -_0807ACC6: - movs r0, #0 -_0807ACC8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807ACCC -sub_0807ACCC: @ 0x0807ACCC - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - movs r0, #0x72 - bl GetInventoryValue - movs r1, #0xc0 - cmp r0, #1 - bne _0807ACF4 - adds r1, #0x40 -_0807ACF4: - movs r2, #0x24 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0807AD18 - strh r1, [r4, #0x24] - ldr r0, _0807AD14 @ =gPlayerState - ldrb r1, [r0, #0xd] - strb r1, [r4, #0x15] - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - bne _0807ADB4 - b _0807AD1E - .align 2, 0 -_0807AD14: .4byte gPlayerState -_0807AD18: - ldrh r0, [r4, #0x24] - subs r0, #4 - strh r0, [r4, #0x24] -_0807AD1E: - ldr r2, _0807AD3C @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x89 - ldrb r0, [r1] - cmp r0, #0 - bne _0807AD40 - adds r0, r4, #0 - bl sub_0807ADB8 - cmp r0, #0 - bne _0807AD74 - adds r0, r4, #0 - bl sub_0807AE20 - b _0807AD74 - .align 2, 0 -_0807AD3C: .4byte gPlayerState -_0807AD40: - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _0807AD52 - adds r0, r4, #0 - bl sub_0807ADB8 - b _0807AD74 -_0807AD52: - adds r2, #0x26 - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0807ADA0 @ =0x00000163 - bl SoundReq -_0807AD74: - ldr r0, _0807ADA4 @ =gPlayerState - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807ADA8 - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #4 - orrs r0, r1 - strb r0, [r2] - subs r2, #0x13 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - b _0807ADB2 - .align 2, 0 -_0807ADA0: .4byte 0x00000163 -_0807ADA4: .4byte gPlayerState -_0807ADA8: - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 -_0807ADB2: - strb r0, [r2] -_0807ADB4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807ADB8 -sub_0807ADB8: @ 0x0807ADB8 - push {r4, lr} - adds r2, r0, #0 - ldr r3, _0807ADF4 @ =gPlayerState - adds r0, r3, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0807AE1C - movs r0, #0x26 - adds r0, r0, r3 - mov ip, r0 - ldrb r0, [r0] - movs r1, #0x80 - eors r0, r1 - mov r1, ip - strb r0, [r1] - movs r1, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - beq _0807ADF8 - adds r1, r3, #0 - adds r1, #0x89 - movs r0, #0x78 - strb r0, [r1] - b _0807AE0E - .align 2, 0 -_0807ADF4: .4byte gPlayerState -_0807ADF8: - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - adds r0, r3, #0 - adds r0, #0x89 - strb r4, [r0] -_0807AE0E: - ldr r0, _0807AE18 @ =0x00000163 - bl SoundReq - movs r0, #1 - b _0807AE1E - .align 2, 0 -_0807AE18: .4byte 0x00000163 -_0807AE1C: - movs r0, #0 -_0807AE1E: - pop {r4, pc} - - thumb_func_start sub_0807AE20 -sub_0807AE20: @ 0x0807AE20 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0x17 - bne _0807AE32 - ldr r0, _0807AE58 @ =gPlayerState - ldrb r0, [r0, #0xa] - cmp r0, #0 - bne _0807AE74 -_0807AE32: - ldr r0, _0807AE5C @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _0807AE74 - ldr r0, _0807AE58 @ =gPlayerState - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0807AE74 - movs r0, #0x72 - bl GetInventoryValue - cmp r0, #1 - bne _0807AE60 - movs r0, #0xe0 - lsls r0, r0, #1 - b _0807AE64 - .align 2, 0 -_0807AE58: .4byte gPlayerState -_0807AE5C: .4byte gRoomControls -_0807AE60: - movs r0, #0xc0 - lsls r0, r0, #1 -_0807AE64: - strh r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_08079520 - movs r0, #0xb1 - lsls r0, r0, #1 - bl SoundReq -_0807AE74: - movs r0, #0x10 - bl sub_080793E4 - cmp r0, #0 - beq _0807AEA8 - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0x14 - strb r0, [r1] - adds r1, #5 - movs r0, #4 - strb r0, [r1] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - movs r0, #0x7a - bl SoundReq -_0807AEA8: - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807AECC - ldr r0, _0807AEC8 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0807AEDE - adds r0, r4, #0 - movs r1, #4 - bl CreateRandomWaterTrace - b _0807AEDE - .align 2, 0 -_0807AEC8: .4byte gRoomTransition -_0807AECC: - ldr r0, _0807AEE0 @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0807AEDE - adds r0, r4, #0 - bl CreateWaterTrace -_0807AEDE: - pop {r4, pc} - .align 2, 0 -_0807AEE0: .4byte gRoomTransition - - thumb_func_start UpdatePlayerSkills -UpdatePlayerSkills: @ 0x0807AEE4 - push {r4, lr} - ldr r0, _0807AFE4 @ =gPlayerState - adds r4, r0, #0 - adds r4, #0xac - movs r0, #0 - strh r0, [r4] - movs r0, #0x48 - bl GetInventoryValue - cmp r0, #1 - bne _0807AF02 - ldrh r0, [r4] - movs r1, #1 - orrs r0, r1 - strh r0, [r4] -_0807AF02: - movs r0, #0x49 - bl GetInventoryValue - cmp r0, #1 - bne _0807AF14 - ldrh r0, [r4] - movs r1, #2 - orrs r0, r1 - strh r0, [r4] -_0807AF14: - movs r0, #0x4a - bl GetInventoryValue - cmp r0, #1 - bne _0807AF26 - ldrh r0, [r4] - movs r1, #4 - orrs r0, r1 - strh r0, [r4] -_0807AF26: - movs r0, #0x4b - bl GetInventoryValue - cmp r0, #1 - bne _0807AF38 - ldrh r0, [r4] - movs r1, #8 - orrs r0, r1 - strh r0, [r4] -_0807AF38: - movs r0, #0x4c - bl GetInventoryValue - cmp r0, #1 - bne _0807AF4A - ldrh r0, [r4] - movs r1, #0x10 - orrs r0, r1 - strh r0, [r4] -_0807AF4A: - movs r0, #0x4d - bl GetInventoryValue - cmp r0, #1 - bne _0807AF5C - ldrh r0, [r4] - movs r1, #0x20 - orrs r0, r1 - strh r0, [r4] -_0807AF5C: - movs r0, #0x4e - bl GetInventoryValue - cmp r0, #1 - bne _0807AF6E - ldrh r0, [r4] - movs r1, #0x40 - orrs r0, r1 - strh r0, [r4] -_0807AF6E: - movs r0, #0x4f - bl GetInventoryValue - cmp r0, #1 - bne _0807AF80 - ldrh r0, [r4] - movs r1, #0x80 - orrs r0, r1 - strh r0, [r4] -_0807AF80: - movs r0, #6 - bl GetInventoryValue - cmp r0, #1 - bne _0807AF96 - ldrh r0, [r4] - movs r2, #0x80 - lsls r2, r2, #1 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r4] -_0807AF96: - movs r0, #0x73 - bl GetInventoryValue - cmp r0, #1 - bne _0807AFAC - ldrh r0, [r4] - movs r3, #0x80 - lsls r3, r3, #2 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r4] -_0807AFAC: - movs r0, #0x74 - bl GetInventoryValue - cmp r0, #1 - bne _0807AFC6 - ldr r0, _0807AFE4 @ =gPlayerState - adds r0, #0xac - ldrh r2, [r0] - movs r3, #0x80 - lsls r3, r3, #3 - adds r1, r3, #0 - orrs r1, r2 - strh r1, [r0] -_0807AFC6: - movs r0, #0x75 - bl GetInventoryValue - cmp r0, #1 - bne _0807AFE0 - ldr r0, _0807AFE4 @ =gPlayerState - adds r0, #0xac - ldrh r2, [r0] - movs r3, #0x80 - lsls r3, r3, #4 - adds r1, r3, #0 - orrs r1, r2 - strh r1, [r0] -_0807AFE0: - pop {r4, pc} - .align 2, 0 -_0807AFE4: .4byte gPlayerState - - thumb_func_start sub_0807AFE8 -sub_0807AFE8: @ 0x0807AFE8 - push {lr} - bl sub_08077B20 - ldr r0, _0807B00C @ =gPlayerEntity - movs r1, #0x43 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0807B004 - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] -_0807B004: - ldr r1, _0807B010 @ =gPlayerState - movs r0, #9 - strb r0, [r1, #0xc] - pop {pc} - .align 2, 0 -_0807B00C: .4byte gPlayerEntity -_0807B010: .4byte gPlayerState - - thumb_func_start sub_0807B014 -sub_0807B014: @ 0x0807B014 - push {lr} - ldr r2, _0807B03C @ =gPlayerState - adds r0, r2, #0 - adds r0, #0xac - ldrh r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0807B044 - ldr r0, _0807B040 @ =gSave - adds r1, r0, #0 - adds r1, #0xaa - adds r0, #0xab - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _0807B044 - movs r0, #0xf - b _0807B066 - .align 2, 0 -_0807B03C: .4byte gPlayerState -_0807B040: .4byte gSave -_0807B044: - adds r0, r2, #0 - adds r0, #0xac - ldrh r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807B064 - ldr r0, _0807B060 @ =gSave - adds r0, #0xaa - ldrb r0, [r0] - cmp r0, #8 - bhi _0807B064 - movs r0, #0x16 - b _0807B066 - .align 2, 0 -_0807B060: .4byte gSave -_0807B064: - movs r0, #0 -_0807B066: - pop {pc} - - thumb_func_start sub_0807B068 -sub_0807B068: @ 0x0807B068 - push {lr} - ldr r2, _0807B090 @ =gPlayerState - ldrb r1, [r2, #0x1e] - ldrb r0, [r2, #4] - orrs r0, r1 - cmp r0, #0 - bne _0807B0C2 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r1, [r0] - cmp r1, #0 - beq _0807B0A4 - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807B098 - ldr r0, _0807B094 @ =0x00000C1C - strh r0, [r2, #8] - b _0807B0C2 - .align 2, 0 -_0807B090: .4byte gPlayerState -_0807B094: .4byte 0x00000C1C -_0807B098: - ldr r0, _0807B0A0 @ =0x00000C0C - strh r0, [r2, #8] - b _0807B0C2 - .align 2, 0 -_0807B0A0: .4byte 0x00000C0C -_0807B0A4: - ldrb r1, [r2, #0xd] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807B0B8 - ldrh r0, [r2, #8] - ldr r1, _0807B0B4 @ =0x00000C18 - b _0807B0BC - .align 2, 0 -_0807B0B4: .4byte 0x00000C18 -_0807B0B8: - ldrh r0, [r2, #8] - ldr r1, _0807B0C4 @ =0x00000C04 -_0807B0BC: - cmp r0, r1 - beq _0807B0C2 - strh r1, [r2, #8] -_0807B0C2: - pop {pc} - .align 2, 0 -_0807B0C4: .4byte 0x00000C04 - - thumb_func_start sub_0807B0C8 -sub_0807B0C8: @ 0x0807B0C8 - push {r4, lr} - ldr r4, _0807B0F8 @ =gPlayerEntity - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl sub_0806FEBC - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl sub_0806FEBC - adds r0, r4, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_0806FEBC - adds r0, r4, #0 - movs r1, #3 - movs r2, #0 - bl sub_0806FEBC - pop {r4, pc} - .align 2, 0 -_0807B0F8: .4byte gPlayerEntity - - thumb_func_start PlayerWarp -PlayerWarp: @ 0x0807B0FC - push {lr} - ldr r2, _0807B110 @ =gUnk_0811C27C - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807B110: .4byte gUnk_0811C27C - - thumb_func_start sub_0807B114 -sub_0807B114: @ 0x0807B114 - movs r1, #1 - strb r1, [r0, #0xd] - ldr r1, _0807B124 @ =gPlayerState - adds r1, #0x38 - ldrb r1, [r1] - adds r0, #0x6c - strb r1, [r0] - bx lr - .align 2, 0 -_0807B124: .4byte gPlayerState - - thumb_func_start sub_0807B128 -sub_0807B128: @ 0x0807B128 - push {lr} - ldr r2, _0807B140 @ =gUnk_0811C284 - adds r1, r0, #0 - adds r1, #0x6c - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807B140: .4byte gUnk_0811C284 - - thumb_func_start sub_0807B144 -sub_0807B144: @ 0x0807B144 - push {lr} - ldrb r2, [r0, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #1 - orrs r1, r2 - strb r1, [r0, #0x18] - ldrb r1, [r0, #0x14] - lsls r1, r1, #2 - strb r1, [r0, #0x15] - movs r1, #0xa0 - strh r1, [r0, #0x24] - movs r1, #0x80 - lsls r1, r1, #0xb - str r1, [r0, #0x20] - ldr r1, _0807B170 @ =gPlayerState - movs r0, #0x81 - strb r0, [r1, #2] - bl SetPlayerActionNormal - pop {pc} - .align 2, 0 -_0807B170: .4byte gPlayerState - - thumb_func_start nullsub_506 -nullsub_506: @ 0x0807B174 - bx lr - .align 2, 0 - - thumb_func_start sub_0807B178 -sub_0807B178: @ 0x0807B178 - push {lr} - ldrb r2, [r0, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #1 - orrs r1, r2 - strb r1, [r0, #0x18] - movs r2, #0 - movs r1, #0x10 - strb r1, [r0, #0x15] - strh r2, [r0, #0x24] - movs r1, #0x80 - lsls r1, r1, #0xb - str r1, [r0, #0x20] - ldr r1, _0807B1A4 @ =gPlayerState - movs r0, #0x81 - strb r0, [r1, #2] - bl SetPlayerActionNormal - pop {pc} - .align 2, 0 -_0807B1A4: .4byte gPlayerState - - thumb_func_start sub_0807B1A8 -sub_0807B1A8: @ 0x0807B1A8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0807B1D4 @ =gUnk_0811C298 - adds r0, #0x6e - ldrb r0, [r0] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r0, _0807B1D8 @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0807B1D0 - adds r0, r4, #0 - bl CreateSparkle -_0807B1D0: - pop {r4, pc} - .align 2, 0 -_0807B1D4: .4byte gUnk_0811C298 -_0807B1D8: .4byte gRoomTransition - - thumb_func_start sub_0807B1DC -sub_0807B1DC: @ 0x0807B1DC - adds r2, r0, #0 - adds r2, #0x6e - ldrb r1, [r2] - adds r1, #1 - strb r1, [r2] - movs r1, #0x1e - strb r1, [r0, #0xe] - bx lr - - thumb_func_start sub_0807B1EC -sub_0807B1EC: @ 0x0807B1EC - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0807B212 - adds r1, r2, #0 - adds r1, #0x6e - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r0, #0x80 - lsls r0, r0, #9 - str r0, [r2, #0x20] - ldr r1, _0807B214 @ =gPlayerState - ldr r0, _0807B218 @ =0x000002C2 - strh r0, [r1, #8] -_0807B212: - pop {pc} - .align 2, 0 -_0807B214: .4byte gPlayerState -_0807B218: .4byte 0x000002C2 - - thumb_func_start sub_0807B21C -sub_0807B21C: @ 0x0807B21C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _0807B236 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r4, #0 - bl GravityUpdate - b _0807B240 -_0807B236: - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r4, #0 - bl GravityUpdate -_0807B240: - ldr r1, [r4, #0x20] - ldr r0, _0807B260 @ =0xFFFF8000 - cmp r1, r0 - bge _0807B25E - movs r1, #0 - movs r0, #0x78 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x6e - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldr r0, [r4, #0x34] - str r0, [r4, #0x68] -_0807B25E: - pop {r4, pc} - .align 2, 0 -_0807B260: .4byte 0xFFFF8000 - - thumb_func_start sub_0807B264 -sub_0807B264: @ 0x0807B264 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xf] - adds r0, #2 - strb r0, [r4, #0xf] - ldr r1, _0807B2B4 @ =gSineTable - ldrb r0, [r4, #0xf] - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r1, [r0, r2] - asrs r1, r1, #7 - lsls r1, r1, #0x10 - ldr r0, [r4, #0x68] - adds r0, r0, r1 - str r0, [r4, #0x34] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0807B2B0 - movs r0, #0x50 - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #8 - str r0, [r4, #0x20] - adds r1, r4, #0 - adds r1, #0x6e - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] -.ifndef EU - movs r0, #0xa9 - lsls r0, r0, #1 - bl SoundReq -.endif -_0807B2B0: - pop {r4, pc} - .align 2, 0 -_0807B2B4: .4byte gSineTable - - thumb_func_start sub_0807B2B8 -sub_0807B2B8: @ 0x0807B2B8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0807B2F0 @ =0xFFFFE000 - bl GravityUpdate - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0807B2EC - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0807B2EC - adds r0, r4, #0 - adds r0, #0x6d - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _0807B2F4 @ =gUnk_0813AD88 - adds r0, r0, r1 - bl DoExitTransition -_0807B2EC: - pop {r4, pc} - .align 2, 0 -_0807B2F0: .4byte 0xFFFFE000 -_0807B2F4: .4byte gUnk_0813AD88 - - thumb_func_start sub_0807B2F8 -sub_0807B2F8: @ 0x0807B2F8 - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x6e - ldrb r0, [r1] - cmp r0, #0 - bne _0807B310 - adds r0, #1 - strb r0, [r1] - adds r0, r2, #0 - bl sub_0809D738 -_0807B310: - pop {pc} - .align 2, 0 - - thumb_func_start SetTileType -SetTileType: @ 0x0807B314 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - ldr r0, _0807B3A0 @ =0x000007FF - cmp r5, r0 - bhi _0807B410 - adds r0, r4, #0 - adds r1, r6, #0 - bl DeleteLoadedTileEntity - adds r0, r6, #0 - bl GetLayerByIndex - adds r2, r0, #0 - lsls r1, r5, #1 - ldr r3, _0807B3A4 @ =0x00006004 - adds r0, r2, r3 - adds r0, r0, r1 - ldrh r0, [r0] - mov ip, r0 - lsls r1, r4, #1 - adds r0, r2, #4 - adds r0, r0, r1 - mov r1, ip - strh r1, [r0] - ldr r0, _0807B3A8 @ =gUnk_080B3E80 - adds r0, r5, r0 - ldrb r3, [r0] - ldr r1, _0807B3AC @ =0x00002004 - adds r0, r2, r1 - adds r0, r0, r4 - strb r3, [r0] - ldr r7, _0807B3B0 @ =gRoomControls - ldrb r1, [r7, #0xf] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0807B36C - ldr r0, _0807B3B4 @ =gMapBottom - ldr r1, _0807B3AC @ =0x00002004 - adds r0, r0, r1 - adds r0, r4, r0 - strb r3, [r0] -_0807B36C: - ldr r3, _0807B3B8 @ =0x0000B004 - adds r1, r2, r3 - adds r1, r1, r4 - ldr r0, _0807B3BC @ =gUnk_080B37A0 - adds r0, r5, r0 - ldrb r0, [r0] - strb r0, [r1] - ldrb r1, [r7, #0xf] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0807B430 - movs r1, #0x3f - ands r1, r4 - lsls r1, r1, #1 - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r4 - lsls r0, r0, #2 - adds r1, r1, r0 - cmp r6, #2 - beq _0807B3C4 - lsls r1, r1, #1 - ldr r0, _0807B3C0 @ =gUnk_02019EE0 - b _0807B3C8 - .align 2, 0 -_0807B3A0: .4byte 0x000007FF -_0807B3A4: .4byte 0x00006004 -_0807B3A8: .4byte gUnk_080B3E80 -_0807B3AC: .4byte 0x00002004 -_0807B3B0: .4byte gRoomControls -_0807B3B4: .4byte gMapBottom -_0807B3B8: .4byte 0x0000B004 -_0807B3BC: .4byte gUnk_080B37A0 -_0807B3C0: .4byte gUnk_02019EE0 -_0807B3C4: - lsls r1, r1, #1 - ldr r0, _0807B400 @ =gMapDataTopSpecial -_0807B3C8: - adds r3, r1, r0 - mov r1, ip - lsls r0, r1, #3 - ldr r1, _0807B404 @ =0x00007004 - adds r0, r0, r1 - adds r0, r2, r0 - ldrh r1, [r0] - strh r1, [r3] - ldrh r1, [r0, #2] - strh r1, [r3, #2] - movs r1, #0x80 - lsls r1, r1, #1 - adds r2, r3, r1 - ldrh r1, [r0, #4] - strh r1, [r2] - movs r2, #0x81 - lsls r2, r2, #1 - adds r1, r3, r2 - ldrh r0, [r0, #6] - strh r0, [r1] - ldr r0, _0807B408 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #1 - beq _0807B430 - ldr r1, _0807B40C @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - b _0807B430 - .align 2, 0 -_0807B400: .4byte gMapDataTopSpecial -_0807B404: .4byte 0x00007004 -_0807B408: .4byte gRoomControls -_0807B40C: .4byte gUpdateVisibleTiles -_0807B410: - ldr r0, _0807B424 @ =0x00003FFF - cmp r5, r0 - bls _0807B428 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r6, #0 - bl SetTile - b _0807B430 - .align 2, 0 -_0807B424: .4byte 0x00003FFF -_0807B428: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_0807BA8C -_0807B430: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807B434 -sub_0807B434: @ 0x0807B434 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl GetTileType - cmp r0, #0x37 - bhi _0807B44A - cmp r0, #0x36 - blo _0807B44A - movs r0, #0 - b _0807B462 -_0807B44A: - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - lsls r1, r5, #0x18 - lsrs r1, r1, #0x18 - bl sub_080002C8 - adds r1, r0, #0 - movs r0, #0xd - eors r1, r0 - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r0, r0, #0x1f -_0807B462: - pop {r4, r5, pc} - - thumb_func_start sub_0807B464 -sub_0807B464: @ 0x0807B464 - push {lr} - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - bl sub_080002C8 - movs r1, #0 - cmp r0, #0x56 - bne _0807B47A - movs r1, #1 -_0807B47A: - adds r0, r1, #0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807B480 -sub_0807B480: @ 0x0807B480 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r7, r1, #0 - movs r1, #2 - bl sub_0807B464 - cmp r0, #0 - beq _0807B558 - adds r0, r6, #0 - subs r0, #0x40 - movs r1, #2 - bl sub_0807B464 - adds r5, r0, #0 - adds r0, r6, #1 - movs r1, #2 - bl sub_0807B464 - lsls r0, r0, #1 - orrs r5, r0 - adds r4, r6, #0 - adds r4, #0x40 - adds r0, r4, #0 - movs r1, #2 - bl sub_0807B464 - lsls r0, r0, #2 - orrs r5, r0 - subs r0, r6, #1 - movs r1, #2 - bl sub_0807B464 - lsls r0, r0, #3 - orrs r5, r0 - adds r0, r6, #0 - adds r0, #0x41 - movs r1, #1 - bl sub_0807B464 - lsls r0, r0, #1 - orrs r5, r0 - adds r0, r6, #0 - adds r0, #0x3f - movs r1, #1 - bl sub_0807B464 - lsls r0, r0, #3 - orrs r5, r0 - adds r0, r4, #0 - movs r1, #2 - bl GetTileType - cmp r0, #0 - beq _0807B4FA - adds r0, r6, #0 - adds r0, #0x80 - movs r1, #1 - bl sub_0807B464 - lsls r0, r0, #2 - orrs r5, r0 -_0807B4FA: - ldr r0, _0807B514 @ =gUnk_0811C2CC - lsls r1, r5, #1 - adds r1, r1, r0 - ldrh r4, [r1] - adds r0, r6, #0 - movs r1, #2 - bl GetTileType - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r2, _0807B518 @ =gUnk_0811C2EC - movs r3, #0 - b _0807B51E - .align 2, 0 -_0807B514: .4byte gUnk_0811C2CC -_0807B518: .4byte gUnk_0811C2EC -_0807B51C: - adds r2, #6 -_0807B51E: - ldrh r1, [r2] - cmp r1, #0 - beq _0807B52A - cmp r0, r1 - bne _0807B51C - ldrh r3, [r2, #2] -_0807B52A: - movs r0, #1 - lsls r0, r7 - bics r3, r0 - ldr r2, _0807B534 @ =gUnk_0811C2EC - b _0807B53A - .align 2, 0 -_0807B534: .4byte gUnk_0811C2EC -_0807B538: - adds r2, #6 -_0807B53A: - ldrh r0, [r2] - cmp r0, #0 - beq _0807B54E - ldrh r0, [r2, #2] - cmp r3, r0 - bne _0807B538 - ldrh r0, [r2, #4] - cmp r5, r0 - bne _0807B538 - ldrh r4, [r2] -_0807B54E: - adds r0, r4, #0 - adds r1, r6, #0 - movs r2, #2 - bl SetTileType -_0807B558: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807B55C -sub_0807B55C: @ 0x0807B55C - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - adds r7, r2, #0 - bl sub_0807B464 - cmp r0, #0 - beq _0807B5AC - adds r0, r5, #0 - subs r0, #0x40 - adds r1, r6, #0 - bl sub_0807B464 - adds r4, r0, #0 - adds r0, r5, #1 - adds r1, r6, #0 - bl sub_0807B464 - lsls r0, r0, #1 - orrs r4, r0 - adds r0, r5, #0 - adds r0, #0x40 - adds r1, r6, #0 - bl sub_0807B464 - lsls r0, r0, #2 - orrs r4, r0 - subs r0, r5, #1 - adds r1, r6, #0 - bl sub_0807B464 - lsls r0, r0, #3 - orrs r0, r4 - lsls r0, r0, #1 - adds r0, r0, r7 - ldrh r0, [r0] - adds r1, r5, #0 - adds r2, r6, #0 - bl SetTileType -_0807B5AC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807B5B0 -sub_0807B5B0: @ 0x0807B5B0 - push {r4, r5, r6, r7, lr} - adds r3, r0, #0 - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldr r6, _0807B5F8 @ =gUnk_0811C456 - ldrb r1, [r3, #0x14] - movs r2, #6 - ands r2, r1 - lsls r1, r2, #1 - adds r1, r1, r6 - movs r4, #0 - ldrsh r1, [r1, r4] - adds r0, r0, r1 - ldr r5, _0807B5FC @ =gRoomControls - ldrh r1, [r5, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r4, #0x3f - ands r0, r4 - movs r7, #0x32 - ldrsh r1, [r3, r7] - adds r2, #1 - lsls r2, r2, #1 - adds r2, r2, r6 - movs r3, #0 - ldrsh r2, [r2, r3] - adds r1, r1, r2 - ldrh r2, [r5, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - lsls r1, r1, #6 - orrs r0, r1 - bl sub_0807B600 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807B5F8: .4byte gUnk_0811C456 -_0807B5FC: .4byte gRoomControls - - thumb_func_start sub_0807B600 -sub_0807B600: @ 0x0807B600 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r5, #0 - subs r6, #0x40 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - movs r1, #1 - bl sub_080002C8 - cmp r0, #0x56 - beq _0807B61A - movs r0, #0 - b _0807B76E -_0807B61A: - adds r0, r5, #0 - movs r1, #1 - bl GetTileType - adds r1, r0, #0 - ldr r0, _0807B634 @ =0x0000026A - cmp r1, r0 - bne _0807B638 - adds r0, r5, #0 - bl sub_0807B820 - b _0807B76C - .align 2, 0 -_0807B634: .4byte 0x0000026A -_0807B638: - ldr r0, _0807B648 @ =0x00000267 - cmp r1, r0 - bne _0807B64C - adds r0, r5, #0 - adds r0, #0x40 - bl sub_0807B820 - b _0807B76C - .align 2, 0 -_0807B648: .4byte 0x00000267 -_0807B64C: - ldr r0, _0807B65C @ =0x0000027A - cmp r1, r0 - bne _0807B660 - adds r0, r5, #0 - bl sub_0807B8A8 - b _0807B76C - .align 2, 0 -_0807B65C: .4byte 0x0000027A -_0807B660: - ldr r0, _0807B670 @ =0x00000277 - cmp r1, r0 - bne _0807B674 - adds r0, r5, #0 - adds r0, #0x40 - bl sub_0807B8A8 - b _0807B76C - .align 2, 0 -_0807B670: .4byte 0x00000277 -_0807B674: - ldr r0, _0807B684 @ =0x0000028A - cmp r1, r0 - bne _0807B688 - adds r0, r5, #0 - bl sub_0807B930 - b _0807B76C - .align 2, 0 -_0807B684: .4byte 0x0000028A -_0807B688: - ldr r0, _0807B698 @ =0x00000287 - cmp r1, r0 - bne _0807B69C - adds r0, r5, #0 - adds r0, #0x40 - bl sub_0807B930 - b _0807B76C - .align 2, 0 -_0807B698: .4byte 0x00000287 -_0807B69C: - adds r0, r5, #0 - movs r1, #2 - bl GetTileType - cmp r0, #0 - beq _0807B6EC - ldr r0, _0807B6E8 @ =0x000002F2 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - adds r0, r6, #0 - movs r1, #1 - bl sub_080002E0 - cmp r0, #3 - bne _0807B6CA - movs r0, #0xbd - lsls r0, r0, #2 - adds r1, r6, #0 - movs r2, #1 - bl SetTileType -_0807B6CA: - adds r0, r5, #0 - adds r0, #0x40 - movs r1, #1 - bl sub_080002E0 - cmp r0, #3 - bne _0807B6F8 - movs r0, #0xbd - lsls r0, r0, #2 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0807B6F8 - .align 2, 0 -_0807B6E8: .4byte 0x000002F2 -_0807B6EC: - movs r0, #0xbd - lsls r0, r0, #2 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0807B6F8: - adds r0, r6, #0 - movs r1, #2 - bl sub_0807B464 - cmp r0, #0 - beq _0807B748 - movs r0, #0 - adds r1, r6, #0 - movs r2, #2 - bl SetTileType - adds r0, r6, #0 - movs r1, #1 - bl GetTileType - ldr r1, _0807B770 @ =0x000002F2 - cmp r0, r1 - bne _0807B728 - movs r0, #0xbd - lsls r0, r0, #2 - adds r1, r6, #0 - movs r2, #1 - bl SetTileType -_0807B728: - adds r0, r5, #1 - ldr r4, _0807B774 @ =gUnk_0811C2AC - movs r1, #1 - adds r2, r4, #0 - bl sub_0807B55C - subs r0, r5, #1 - movs r1, #1 - adds r2, r4, #0 - bl sub_0807B55C - adds r0, r6, #0 - movs r1, #1 - adds r2, r4, #0 - bl sub_0807B55C -_0807B748: - adds r0, r6, #1 - movs r1, #3 - bl sub_0807B480 - subs r0, r6, #1 - movs r1, #1 - bl sub_0807B480 - adds r0, r6, #0 - adds r0, #0x40 - movs r1, #0 - bl sub_0807B480 - adds r0, r6, #0 - subs r0, #0x40 - movs r1, #2 - bl sub_0807B480 -_0807B76C: - movs r0, #1 -_0807B76E: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807B770: .4byte 0x000002F2 -_0807B774: .4byte gUnk_0811C2AC - - thumb_func_start sub_0807B778 -sub_0807B778: @ 0x0807B778 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - lsls r1, r6, #0x18 - lsrs r1, r1, #0x18 - bl sub_080002C8 - cmp r0, #0xd - bne _0807B7D0 - adds r0, r5, #0 - subs r0, #0x40 - adds r1, r6, #0 - bl sub_0807B434 - adds r4, r0, #0 - adds r0, r5, #1 - adds r1, r6, #0 - bl sub_0807B434 - lsls r0, r0, #1 - orrs r4, r0 - adds r0, r5, #0 - adds r0, #0x40 - adds r1, r6, #0 - bl sub_0807B434 - lsls r0, r0, #2 - orrs r4, r0 - subs r0, r5, #1 - adds r1, r6, #0 - bl sub_0807B434 - lsls r0, r0, #3 - orrs r0, r4 - ldr r1, _0807B7D4 @ =gUnk_0811C466 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - adds r1, r5, #0 - adds r2, r6, #0 - bl SetTileType -_0807B7D0: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807B7D4: .4byte gUnk_0811C466 diff --git a/asm/code_0807B9B8.s b/asm/code_0807B9B8.s deleted file mode 100644 index 0326f133..00000000 --- a/asm/code_0807B9B8.s +++ /dev/null @@ -1,1997 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0807B9B8 -sub_0807B9B8: @ 0x0807B9B8 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - adds r0, r4, #0 - adds r1, r6, #0 - bl DeleteLoadedTileEntity - adds r0, r6, #0 - bl GetLayerByIndex - adds r5, r0, #0 - lsls r1, r4, #1 - adds r0, r5, #4 - adds r0, r0, r1 - strh r7, [r0] - lsls r1, r7, #1 - ldr r2, _0807BA24 @ =0x00005004 - adds r0, r5, r2 - adds r0, r0, r1 - ldrh r2, [r0] - ldr r0, _0807BA28 @ =0x00002004 - adds r1, r5, r0 - adds r1, r1, r4 - ldr r0, _0807BA2C @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0807BA30 @ =0x0000B004 - adds r1, r5, r0 - adds r1, r1, r4 - ldr r0, _0807BA34 @ =gUnk_080B37A0 - adds r2, r2, r0 - ldrb r0, [r2] - strb r0, [r1] - ldr r0, _0807BA38 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0807BA78 - movs r1, #0x3f - ands r1, r4 - lsls r1, r1, #1 - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r4 - lsls r0, r0, #2 - adds r1, r1, r0 - cmp r6, #2 - beq _0807BA40 - lsls r1, r1, #1 - ldr r0, _0807BA3C @ =gUnk_02019EE0 - b _0807BA44 - .align 2, 0 -_0807BA24: .4byte 0x00005004 -_0807BA28: .4byte 0x00002004 -_0807BA2C: .4byte gUnk_080B3E80 -_0807BA30: .4byte 0x0000B004 -_0807BA34: .4byte gUnk_080B37A0 -_0807BA38: .4byte gRoomControls -_0807BA3C: .4byte gUnk_02019EE0 -_0807BA40: - lsls r1, r1, #1 - ldr r0, _0807BA7C @ =gMapDataTopSpecial -_0807BA44: - adds r3, r1, r0 - lsls r0, r7, #3 - ldr r1, _0807BA80 @ =0x00007004 - adds r0, r0, r1 - adds r0, r5, r0 - ldrh r1, [r0] - strh r1, [r3] - ldrh r1, [r0, #2] - strh r1, [r3, #2] - movs r1, #0x80 - lsls r1, r1, #1 - adds r2, r3, r1 - ldrh r1, [r0, #4] - strh r1, [r2] - movs r2, #0x81 - lsls r2, r2, #1 - adds r1, r3, r2 - ldrh r0, [r0, #6] - strh r0, [r1] - ldr r0, _0807BA84 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #1 - beq _0807BA78 - ldr r1, _0807BA88 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807BA78: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BA7C: .4byte gMapDataTopSpecial -_0807BA80: .4byte 0x00007004 -_0807BA84: .4byte gRoomControls -_0807BA88: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807BA8C -sub_0807BA8C: @ 0x0807BA8C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r7, r1, #0 - bl DeleteLoadedTileEntity - adds r0, r7, #0 - bl GetLayerByIndex - adds r5, r0, #0 - lsls r2, r4, #1 - adds r1, r5, #4 - adds r1, r1, r2 - ldr r3, _0807BAFC @ =0x00003004 - adds r0, r5, r3 - adds r0, r0, r2 - ldrh r6, [r0] - strh r6, [r1] - lsls r1, r6, #1 - ldr r2, _0807BB00 @ =0x00005004 - adds r0, r5, r2 - adds r0, r0, r1 - ldrh r2, [r0] - ldr r3, _0807BB04 @ =0x00002004 - adds r1, r5, r3 - adds r1, r1, r4 - ldr r0, _0807BB08 @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0807BB0C @ =0x0000B004 - adds r1, r5, r0 - adds r1, r1, r4 - ldr r0, _0807BB10 @ =gUnk_080B37A0 - adds r2, r2, r0 - ldrb r0, [r2] - strb r0, [r1] - ldr r0, _0807BB14 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0807BB54 - movs r1, #0x3f - ands r1, r4 - lsls r1, r1, #1 - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r4 - lsls r0, r0, #2 - adds r1, r1, r0 - cmp r7, #2 - beq _0807BB1C - lsls r1, r1, #1 - ldr r0, _0807BB18 @ =gUnk_02019EE0 - b _0807BB20 - .align 2, 0 -_0807BAFC: .4byte 0x00003004 -_0807BB00: .4byte 0x00005004 -_0807BB04: .4byte 0x00002004 -_0807BB08: .4byte gUnk_080B3E80 -_0807BB0C: .4byte 0x0000B004 -_0807BB10: .4byte gUnk_080B37A0 -_0807BB14: .4byte gRoomControls -_0807BB18: .4byte gUnk_02019EE0 -_0807BB1C: - lsls r1, r1, #1 - ldr r0, _0807BB58 @ =gMapDataTopSpecial -_0807BB20: - adds r3, r1, r0 - lsls r0, r6, #3 - ldr r1, _0807BB5C @ =0x00007004 - adds r0, r0, r1 - adds r0, r5, r0 - ldrh r1, [r0] - strh r1, [r3] - ldrh r1, [r0, #2] - strh r1, [r3, #2] - movs r1, #0x80 - lsls r1, r1, #1 - adds r2, r3, r1 - ldrh r1, [r0, #4] - strh r1, [r2] - movs r2, #0x81 - lsls r2, r2, #1 - adds r1, r3, r2 - ldrh r0, [r0, #6] - strh r0, [r1] - ldr r0, _0807BB60 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #1 - beq _0807BB54 - ldr r1, _0807BB64 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807BB54: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BB58: .4byte gMapDataTopSpecial -_0807BB5C: .4byte 0x00007004 -_0807BB60: .4byte gRoomControls -_0807BB64: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807BB68 -sub_0807BB68: @ 0x0807BB68 - 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 _0807BB96 - adds r7, r1, #0 -_0807BB7E: - ldrh r0, [r4] - movs r2, #2 - ldrsh r1, [r4, r2] - adds r1, r6, r1 - adds r2, r5, #0 - bl SetTileType - adds r4, #4 - movs r1, #0 - ldrsh r0, [r4, r1] - cmp r0, r7 - bne _0807BB7E -_0807BB96: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0807BB98 -sub_0807BB98: @ 0x0807BB98 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - mov sl, r1 - mov r8, r2 - mov sb, r3 - movs r0, #0 - cmp r0, sb - bhs _0807BBD4 -_0807BBB0: - movs r4, #0 - adds r7, r5, #0 - adds r7, #0x40 - adds r6, r0, #1 - cmp r4, r8 - bhs _0807BBCC -_0807BBBC: - adds r1, r5, r4 - ldr r0, _0807BBE0 @ =0x00004072 - mov r2, sl - bl SetTile - adds r4, #1 - cmp r4, r8 - blo _0807BBBC -_0807BBCC: - adds r5, r7, #0 - adds r0, r6, #0 - cmp r0, sb - blo _0807BBB0 -_0807BBD4: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BBE0: .4byte 0x00004072 - - thumb_func_start sub_0807BBE4 -sub_0807BBE4: @ 0x0807BBE4 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _0807BC28 @ =gMetatileTypesBottom - mov sl, r0 - ldr r0, _0807BC2C @ =gMetatileTypesTop - mov sb, r0 - ldr r5, _0807BC30 @ =0xFFFFB000 - add r5, sl - ldr r4, _0807BC30 @ =0xFFFFB000 - add r4, sb - ldr r2, _0807BC34 @ =0xFFFFD000 - add r2, sl - ldr r1, _0807BC34 @ =0xFFFFD000 - add r1, sb - movs r3, #0 - ldr r0, _0807BC38 @ =0x00003FFF - mov r8, r0 - ldr r0, _0807BC3C @ =gUnk_080B3E80 - mov ip, r0 - ldr r7, _0807BC40 @ =gUnk_080B79A7 - ldr r6, _0807BC44 @ =0xFFFFC000 -_0807BC14: - ldrh r0, [r5] - adds r5, #2 - cmp r0, r8 - bhi _0807BC48 - lsls r0, r0, #1 - add r0, sl - ldrh r0, [r0] - add r0, ip - b _0807BC4C - .align 2, 0 -_0807BC28: .4byte gMetatileTypesBottom -_0807BC2C: .4byte gMetatileTypesTop -_0807BC30: .4byte 0xFFFFB000 -_0807BC34: .4byte 0xFFFFD000 -_0807BC38: .4byte 0x00003FFF -_0807BC3C: .4byte gUnk_080B3E80 -_0807BC40: .4byte gUnk_080B79A7 -_0807BC44: .4byte 0xFFFFC000 -_0807BC48: - adds r0, r0, r6 - adds r0, r0, r7 -_0807BC4C: - ldrb r0, [r0] - strb r0, [r2] - adds r2, #1 - ldrh r0, [r4] - adds r4, #2 - cmp r0, r8 - bhi _0807BC64 - lsls r0, r0, #1 - add r0, sb - ldrh r0, [r0] - add r0, ip - b _0807BC68 -_0807BC64: - adds r0, r0, r6 - adds r0, r0, r7 -_0807BC68: - ldrb r0, [r0] - strb r0, [r1] - adds r1, #1 - adds r3, #1 - ldr r0, _0807BC80 @ =0x00000FFF - cmp r3, r0 - bls _0807BC14 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BC80: .4byte 0x00000FFF - - thumb_func_start sub_0807BC84 -sub_0807BC84: @ 0x0807BC84 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r1, _0807BD04 @ =gRoomControls - ldrh r0, [r1, #0x1e] - lsrs r2, r0, #4 - mov r8, r1 - cmp r2, #0x40 - bne _0807BC98 - movs r2, #0x3f -_0807BC98: - ldr r1, _0807BD08 @ =gUnk_02027EB4 - adds r3, r2, r1 - adds r6, r1, #0 - adds r6, #0x3f - ldr r0, _0807BD0C @ =gUnk_0200D654 - adds r2, r2, r0 - adds r5, r0, #0 - adds r5, #0x3f - movs r4, #0 - adds r7, r1, #0 - mov ip, r0 - movs r0, #0xff -_0807BCB0: - strb r0, [r3] - strb r0, [r6] - strb r0, [r2] - strb r0, [r5] - adds r3, #0x40 - adds r6, #0x40 - adds r2, #0x40 - adds r5, #0x40 - adds r4, #1 - cmp r4, #0x3f - bls _0807BCB0 - mov r0, r8 - ldrh r1, [r0, #0x20] - ldr r0, _0807BD10 @ =0x0000FFF0 - ands r0, r1 - lsls r0, r0, #2 - adds r3, r0, r7 - movs r1, #0xfc - lsls r1, r1, #4 - adds r6, r7, r1 - mov r1, ip - adds r2, r0, r1 - movs r5, #0xfc - lsls r5, r5, #4 - add r5, ip - movs r4, #0 - movs r0, #0xff -_0807BCE6: - strb r0, [r3] - adds r3, #1 - strb r0, [r6] - adds r6, #1 - strb r0, [r2] - adds r2, #1 - strb r0, [r5] - adds r5, #1 - adds r4, #1 - cmp r4, #0x3f - bls _0807BCE6 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BD04: .4byte gRoomControls -_0807BD08: .4byte gUnk_02027EB4 -_0807BD0C: .4byte gUnk_0200D654 -_0807BD10: .4byte 0x0000FFF0 - - thumb_func_start sub_0807BD14 -sub_0807BD14: @ 0x0807BD14 - push {r4, r5, lr} - adds r5, r1, #0 - movs r1, #0x2e - ldrsh r2, [r0, r1] - movs r3, #0x32 - ldrsh r1, [r0, r3] - adds r0, r2, #0 - adds r2, r5, #0 - bl sub_0807BEEC - adds r3, r0, #0 - cmp r3, #0xff - beq _0807BDB4 - ldr r1, _0807BD68 @ =gRoomControls - movs r2, #0 - movs r0, #2 - strb r0, [r1, #2] - strb r2, [r1, #3] - movs r4, #1 - strh r4, [r1] - strb r3, [r1, #5] - strb r5, [r1, #0x10] - bl GetCurrentRoomInfo - adds r2, r0, #0 - ldr r1, _0807BD6C @ =gArea - ldr r3, _0807BD70 @ =0x0000085C - adds r0, r1, r3 - str r2, [r0] - ldrb r0, [r1, #0xd] - ands r4, r0 - cmp r4, #0 - beq _0807BD98 - cmp r5, #1 - beq _0807BD7E - cmp r5, #1 - blo _0807BD74 - cmp r5, #2 - beq _0807BD86 - cmp r5, #3 - beq _0807BD90 - b _0807BD98 - .align 2, 0 -_0807BD68: .4byte gRoomControls -_0807BD6C: .4byte gArea -_0807BD70: .4byte 0x0000085C -_0807BD74: - ldrh r0, [r2, #6] - ldrh r1, [r2, #2] - subs r0, r0, r1 - strh r0, [r2, #6] - b _0807BD98 -_0807BD7E: - ldrh r0, [r2] - ldrh r1, [r2, #4] - adds r0, r0, r1 - b _0807BD96 -_0807BD86: - ldrh r0, [r2, #2] - ldrh r3, [r2, #6] - adds r0, r0, r3 - strh r0, [r2, #6] - b _0807BD98 -_0807BD90: - ldrh r0, [r2, #4] - ldrh r1, [r2] - subs r0, r0, r1 -_0807BD96: - strh r0, [r2, #4] -_0807BD98: - ldr r2, _0807BDB0 @ =gPlayerEntity - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2, #0x11] - bl SetInitializationPriority - movs r0, #1 - b _0807BDB6 - .align 2, 0 -_0807BDB0: .4byte gPlayerEntity -_0807BDB4: - movs r0, #0 -_0807BDB6: - pop {r4, r5, pc} - - thumb_func_start sub_0807BDB8 -sub_0807BDB8: @ 0x0807BDB8 - push {r4, r5, lr} - adds r3, r0, #0 - movs r5, #0xff - movs r0, #7 - ands r1, r0 - cmp r1, #7 - bls _0807BDC8 - b _0807BEE2 -_0807BDC8: - lsls r0, r1, #2 - ldr r1, _0807BDD4 @ =_0807BDD8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807BDD4: .4byte _0807BDD8 -_0807BDD8: @ jump table - .4byte _0807BDF8 @ case 0 - .4byte _0807BE10 @ case 1 - .4byte _0807BE30 @ case 2 - .4byte _0807BE4C @ case 3 - .4byte _0807BE78 @ case 4 - .4byte _0807BE94 @ case 5 - .4byte _0807BEB4 @ case 6 - .4byte _0807BEC4 @ case 7 -_0807BDF8: - movs r1, #0x32 - ldrsh r0, [r3, r1] - ldr r1, _0807BE0C @ =gRoomControls - ldrh r1, [r1, #8] - subs r0, r0, r1 - cmp r0, #9 - bhi _0807BEE2 - movs r5, #0 - b _0807BEE2 - .align 2, 0 -_0807BE0C: .4byte gRoomControls -_0807BE10: - movs r2, #0x32 - ldrsh r0, [r3, r2] - ldr r2, _0807BE2C @ =gRoomControls - ldrh r1, [r2, #8] - subs r0, r0, r1 - cmp r0, #9 - bhi _0807BE20 - movs r5, #0 -_0807BE20: - ldrh r0, [r2, #0x1e] - subs r0, #0xa - movs r4, #0x2e - ldrsh r1, [r3, r4] - ldrh r2, [r2, #6] - b _0807BE6A - .align 2, 0 -_0807BE2C: .4byte gRoomControls -_0807BE30: - ldr r1, _0807BE48 @ =gRoomControls - ldrh r2, [r1, #0x1e] - subs r2, #0xa - movs r4, #0x2e - ldrsh r0, [r3, r4] - ldrh r1, [r1, #6] - subs r0, r0, r1 - cmp r2, r0 - bhs _0807BEE2 - movs r5, #1 - b _0807BEE2 - .align 2, 0 -_0807BE48: .4byte gRoomControls -_0807BE4C: - ldr r4, _0807BE74 @ =gRoomControls - ldrh r0, [r4, #0x20] - subs r0, #0xa - movs r2, #0x32 - ldrsh r1, [r3, r2] - ldrh r2, [r4, #8] - subs r1, r1, r2 - cmp r0, r1 - bhs _0807BE60 - movs r5, #2 -_0807BE60: - ldrh r0, [r4, #0x1e] - subs r0, #0xa - movs r2, #0x2e - ldrsh r1, [r3, r2] - ldrh r2, [r4, #6] -_0807BE6A: - subs r1, r1, r2 - cmp r0, r1 - bhs _0807BEE2 - movs r5, #1 - b _0807BEE2 - .align 2, 0 -_0807BE74: .4byte gRoomControls -_0807BE78: - ldr r1, _0807BE90 @ =gRoomControls - ldrh r2, [r1, #0x20] - subs r2, #0xa - movs r4, #0x32 - ldrsh r0, [r3, r4] - ldrh r1, [r1, #8] - subs r0, r0, r1 - cmp r2, r0 - bhs _0807BEE2 - movs r5, #2 - b _0807BEE2 - .align 2, 0 -_0807BE90: .4byte gRoomControls -_0807BE94: - ldr r4, _0807BEB0 @ =gRoomControls - ldrh r0, [r4, #0x20] - subs r0, #0xa - movs r2, #0x32 - ldrsh r1, [r3, r2] - ldrh r2, [r4, #8] - subs r1, r1, r2 - cmp r0, r1 - bhs _0807BEA8 - movs r5, #2 -_0807BEA8: - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldrh r1, [r4, #6] - b _0807BEDA - .align 2, 0 -_0807BEB0: .4byte gRoomControls -_0807BEB4: - movs r2, #0x2e - ldrsh r0, [r3, r2] - ldr r1, _0807BEC0 @ =gRoomControls - ldrh r1, [r1, #6] - b _0807BEDA - .align 2, 0 -_0807BEC0: .4byte gRoomControls -_0807BEC4: - movs r4, #0x32 - ldrsh r0, [r3, r4] - ldr r2, _0807BEE8 @ =gRoomControls - ldrh r1, [r2, #8] - subs r0, r0, r1 - cmp r0, #9 - bhi _0807BED4 - movs r5, #0 -_0807BED4: - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldrh r1, [r2, #6] -_0807BEDA: - subs r0, r0, r1 - cmp r0, #9 - bhi _0807BEE2 - movs r5, #3 -_0807BEE2: - adds r0, r5, #0 - pop {r4, r5, pc} - .align 2, 0 -_0807BEE8: .4byte gRoomControls - - thumb_func_start sub_0807BEEC -sub_0807BEEC: @ 0x0807BEEC - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r7, r1, #0 - ldr r0, _0807BF04 @ =gArea - ldrb r1, [r0, #0xd] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0807BF0C - ldr r0, _0807BF08 @ =gRoomControls - ldrb r0, [r0, #5] - b _0807BF7C - .align 2, 0 -_0807BF04: .4byte gArea -_0807BF08: .4byte gRoomControls -_0807BF0C: - cmp r2, #1 - beq _0807BF2C - cmp r2, #1 - blo _0807BF1E - cmp r2, #2 - beq _0807BF40 - cmp r2, #3 - beq _0807BF58 - b _0807BF7A -_0807BF1E: - ldr r0, _0807BF28 @ =gRoomControls - ldrh r0, [r0, #8] - adds r7, r0, #0 - subs r7, #0x10 - b _0807BF60 - .align 2, 0 -_0807BF28: .4byte gRoomControls -_0807BF2C: - ldr r0, _0807BF3C @ =gRoomControls - ldrh r1, [r0, #6] - ldrh r0, [r0, #0x1e] - adds r1, r1, r0 - adds r6, r1, #0 - adds r6, #0x10 - b _0807BF60 - .align 2, 0 -_0807BF3C: .4byte gRoomControls -_0807BF40: - ldr r0, _0807BF50 @ =gRoomControls - ldrh r1, [r0, #8] - ldrh r0, [r0, #0x20] - adds r1, r1, r0 - adds r7, r1, #0 - adds r7, #0x10 - b _0807BF60 - .align 2, 0 -_0807BF50: .4byte gRoomControls -_0807BF54: - adds r0, r4, #0 - b _0807BF7C -_0807BF58: - ldr r0, _0807BF80 @ =gRoomControls - ldrh r0, [r0, #6] - adds r6, r0, #0 - subs r6, #0x10 -_0807BF60: - ldr r5, _0807BF84 @ =gUnk_02033ACC - movs r4, #0 -_0807BF64: - adds r0, r6, #0 - adds r1, r7, #0 - adds r2, r5, #0 - bl sub_0807BF88 - cmp r0, #0 - bne _0807BF54 - adds r4, #1 - adds r5, #0x20 - cmp r4, #0x3f - bls _0807BF64 -_0807BF7A: - movs r0, #0xff -_0807BF7C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807BF80: .4byte gRoomControls -_0807BF84: .4byte gUnk_02033ACC - - thumb_func_start sub_0807BF88 -sub_0807BF88: @ 0x0807BF88 - push {r4, lr} - adds r3, r2, #0 - ldrh r2, [r3, #4] - subs r0, r0, r2 - ldrh r2, [r3, #6] - subs r1, r1, r2 - movs r2, #0 - ldrh r4, [r3] - cmp r0, r4 - bhs _0807BFA4 - ldrh r3, [r3, #2] - cmp r1, r3 - bhs _0807BFA4 - movs r2, #1 -_0807BFA4: - adds r0, r2, #0 - pop {r4, pc} - - thumb_func_start sub_0807BFA8 -sub_0807BFA8: @ 0x0807BFA8 - ldr r2, _0807BFC4 @ =gRoomControls - ldr r0, _0807BFC8 @ =gArea - ldr r1, _0807BFCC @ =0x0000085C - adds r0, r0, r1 - ldr r1, [r0] - ldrh r0, [r1, #4] - strh r0, [r2, #6] - ldrh r0, [r1, #6] - strh r0, [r2, #8] - ldrh r0, [r1] - strh r0, [r2, #0x1e] - ldrh r0, [r1, #2] - strh r0, [r2, #0x20] - bx lr - .align 2, 0 -_0807BFC4: .4byte gRoomControls -_0807BFC8: .4byte gArea -_0807BFCC: .4byte 0x0000085C - - thumb_func_start sub_0807BFD0 -sub_0807BFD0: @ 0x0807BFD0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_0801B170 - bl sub_0807BFA8 - ldr r7, _0807C0B8 @ =0x0000FFFF - ldr r6, _0807C0BC @ =gMetatileTypesBottom - movs r0, #0x80 - lsls r0, r0, #5 - mov r8, r0 - adds r0, r7, #0 - adds r1, r6, #0 - mov r2, r8 - bl MemFill16 - movs r5, #0 - strh r5, [r6] - ldr r4, _0807C0C0 @ =gMetatileTypesTop - adds r0, r7, #0 - adds r1, r4, #0 - mov r2, r8 - bl MemFill16 - strh r5, [r4] - ldr r2, _0807C0C4 @ =gRoomControls - ldr r0, _0807C0C8 @ =gArea - ldr r1, _0807C0CC @ =0x0000085C - adds r4, r0, r1 - ldr r0, [r4] - ldr r1, [r2, #0x34] - ldr r0, [r0, #8] - cmp r1, r0 - beq _0807C01C - str r0, [r2, #0x34] - bl sub_080197D4 -_0807C01C: - ldr r0, [r4] - ldr r0, [r0, #0x10] - bl sub_080197D4 - ldr r1, _0807C0D0 @ =gPaletteBuffer - adds r0, r1, #0 - adds r0, #0x60 - movs r2, #0xa8 - lsls r2, r2, #2 - adds r1, r1, r2 - movs r2, #0x20 - bl MemCopy - ldr r2, _0807C0D4 @ =gUsedPalettes - ldr r0, [r2] - movs r1, #0x80 - lsls r1, r1, #0xe - orrs r0, r1 - str r0, [r2] - ldr r0, [r4] - ldr r0, [r0, #0x14] - cmp r0, #0 - beq _0807C04E - bl sub_0801B130 -_0807C04E: - adds r5, r6, #0 - movs r0, #0x80 - lsls r0, r0, #5 - adds r6, r5, r0 - adds r0, r7, #0 - adds r1, r6, #0 - mov r2, r8 - bl MemFill16 - movs r2, #0 - ldr r3, _0807C0D8 @ =0x000007FF - adds r4, r7, #0 -_0807C066: - ldrh r0, [r5] - cmp r0, r3 - bhi _0807C078 - lsls r0, r0, #1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, r4 - bne _0807C078 - strh r2, [r1] -_0807C078: - adds r2, #1 - adds r5, #2 - cmp r2, r3 - ble _0807C066 - movs r2, #0x80 - lsls r2, r2, #5 - ldr r5, _0807C0C0 @ =gMetatileTypesTop - adds r6, r5, r2 - ldr r4, _0807C0B8 @ =0x0000FFFF - adds r0, r4, #0 - adds r1, r6, #0 - bl MemFill16 - movs r2, #0 - ldr r3, _0807C0D8 @ =0x000007FF -_0807C096: - ldrh r0, [r5] - cmp r0, r3 - bhi _0807C0A8 - lsls r0, r0, #1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, r4 - bne _0807C0A8 - strh r2, [r1] -_0807C0A8: - adds r2, #1 - adds r5, #2 - cmp r2, r3 - ble _0807C096 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807C0B8: .4byte 0x0000FFFF -_0807C0BC: .4byte gMetatileTypesBottom -_0807C0C0: .4byte gMetatileTypesTop -_0807C0C4: .4byte gRoomControls -_0807C0C8: .4byte gArea -_0807C0CC: .4byte 0x0000085C -_0807C0D0: .4byte gPaletteBuffer -_0807C0D4: .4byte gUsedPalettes -_0807C0D8: .4byte 0x000007FF - - thumb_func_start LoadRoomGfx -LoadRoomGfx: @ 0x0807C0DC - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - bl sub_0807BFA8 - ldr r7, _0807C158 @ =gRoomControls - ldrb r1, [r7, #0xf] - movs r0, #0xfc - ands r0, r1 - strb r0, [r7, #0xf] - ldr r5, _0807C15C @ =gMapDataTop - movs r6, #0x80 - lsls r6, r6, #6 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear - adds r0, r5, r6 - movs r1, #0x80 - lsls r1, r1, #5 - bl MemClear - ldr r0, _0807C160 @ =gUnk_02019EE0 - movs r4, #0x80 - lsls r4, r4, #8 - adds r1, r4, #0 - bl MemClear - ldr r0, _0807C164 @ =gMapDataTopSpecial - adds r1, r4, #0 - bl MemClear - ldr r0, _0807C168 @ =gArea - ldr r1, _0807C16C @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0, #0xc] - bl sub_080197D4 - ldr r2, _0807C170 @ =gMapBottom - ldrh r1, [r2, #4] - ldr r0, _0807C174 @ =0x0000FFFF - cmp r1, r0 - beq _0807C178 - adds r0, r2, #4 - ldrh r1, [r7, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r7, #0x20] - lsrs r2, r2, #4 - bl sub_0807C8B0 - ldrh r1, [r7, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r7, #0x20] - lsrs r2, r2, #4 - adds r0, r5, #0 - bl sub_0807C8B0 - movs r2, #0 - mov sb, r2 - b _0807C184 - .align 2, 0 -_0807C158: .4byte gRoomControls -_0807C15C: .4byte gMapDataTop -_0807C160: .4byte gUnk_02019EE0 -_0807C164: .4byte gMapDataTopSpecial -_0807C168: .4byte gArea -_0807C16C: .4byte 0x0000085C -_0807C170: .4byte gMapBottom -_0807C174: .4byte 0x0000FFFF -_0807C178: - adds r0, r2, #4 - adds r1, r6, #0 - bl MemClear - movs r3, #1 - mov sb, r3 -_0807C184: - ldr r0, _0807C1B0 @ =gRoomTransition - adds r0, #0x2d - ldrb r0, [r0] - cmp r0, #0 - bne _0807C1BC - ldr r0, _0807C1B4 @ =gMapDataBottom - movs r2, #0xc0 - lsls r2, r2, #6 - adds r1, r0, r2 - movs r4, #0x80 - lsls r4, r4, #6 - adds r2, r4, #0 - bl MemCopy - ldr r0, _0807C1B8 @ =gMapDataTop - movs r3, #0xc0 - lsls r3, r3, #6 - adds r1, r0, r3 - adds r2, r4, #0 - bl MemCopy - b _0807C26C - .align 2, 0 -_0807C1B0: .4byte gRoomTransition -_0807C1B4: .4byte gMapDataBottom -_0807C1B8: .4byte gMapDataTop -_0807C1BC: - cmp r0, #2 - bne _0807C26C - ldr r4, _0807C278 @ =gMapDataBottom - movs r0, #0xb0 - lsls r0, r0, #8 - adds r0, r0, r4 - mov r8, r0 - movs r5, #0x80 - lsls r5, r5, #5 - adds r0, r4, #0 - mov r1, r8 - adds r2, r5, #0 - bl MemCopy - movs r1, #0xc0 - lsls r1, r1, #6 - adds r6, r4, r1 - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl MemCopy - mov r0, r8 - adds r1, r6, #0 - adds r2, r5, #0 - bl MemCopy - adds r6, r4, r5 - adds r0, r6, #0 - mov r1, r8 - adds r2, r5, #0 - bl MemCopy - movs r2, #0x80 - lsls r2, r2, #7 - adds r4, r4, r2 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl MemCopy - mov r0, r8 - adds r1, r4, #0 - adds r2, r5, #0 - bl MemCopy - ldr r4, _0807C27C @ =gMapDataTop - movs r3, #0xb0 - lsls r3, r3, #8 - adds r3, r3, r4 - mov r8, r3 - adds r0, r4, #0 - mov r1, r8 - adds r2, r5, #0 - bl MemCopy - movs r0, #0xc0 - lsls r0, r0, #6 - adds r6, r4, r0 - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl MemCopy - mov r0, r8 - adds r1, r6, #0 - adds r2, r5, #0 - bl MemCopy - adds r6, r4, r5 - adds r0, r6, #0 - mov r1, r8 - adds r2, r5, #0 - bl MemCopy - movs r1, #0x80 - lsls r1, r1, #7 - adds r4, r4, r1 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl MemCopy - mov r0, r8 - adds r1, r4, #0 - adds r2, r5, #0 - bl MemCopy -_0807C26C: - mov r2, sb - cmp r2, #0 - bne _0807C280 - bl sub_0807BBE4 - b _0807C2A0 - .align 2, 0 -_0807C278: .4byte gMapDataBottom -_0807C27C: .4byte gMapDataTop -_0807C280: - ldr r0, _0807C2CC @ =gUnk_02027EB4 - ldrh r1, [r7, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r7, #0x20] - lsrs r2, r2, #4 - bl sub_0807C69C - ldr r0, _0807C2D0 @ =gUnk_0200D654 - ldrh r1, [r7, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r7, #0x20] - lsrs r2, r2, #4 - bl sub_0807C69C - bl sub_0807C460 -_0807C2A0: - bl sub_0807BC84 - ldr r4, _0807C2D4 @ =gMapBottom - adds r0, r4, #0 - bl sub_08080B60 - ldr r5, _0807C2D8 @ =gMapTop - adds r0, r5, #0 - bl sub_08080B60 - mov r3, sb - cmp r3, #0 - bne _0807C2E4 - ldr r0, _0807C2DC @ =gUnk_02019EE0 - adds r1, r4, #0 - bl sub_0801AB08 - ldr r0, _0807C2E0 @ =gMapDataTopSpecial - adds r1, r5, #0 - bl sub_0801AB08 - b _0807C326 - .align 2, 0 -_0807C2CC: .4byte gUnk_02027EB4 -_0807C2D0: .4byte gUnk_0200D654 -_0807C2D4: .4byte gMapBottom -_0807C2D8: .4byte gMapTop -_0807C2DC: .4byte gUnk_02019EE0 -_0807C2E0: .4byte gMapDataTopSpecial -_0807C2E4: - ldr r4, _0807C34C @ =gUnk_02019EE0 - movs r0, #0x80 - lsls r0, r0, #7 - adds r5, r4, r0 - adds r6, r0, #0 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear - ldr r4, _0807C350 @ =gMapDataTopSpecial - adds r5, r4, r6 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear -_0807C326: - mov r1, sb - cmp r1, #0 - bne _0807C332 - ldrb r0, [r7, #4] - cmp r0, #0x71 - bne _0807C33A -_0807C332: - ldrb r1, [r7, #0xf] - movs r0, #1 - orrs r0, r1 - strb r0, [r7, #0xf] -_0807C33A: - ldrb r0, [r7, #4] - subs r0, #0x20 - cmp r0, #0x18 - bhi _0807C400 - lsls r0, r0, #2 - ldr r1, _0807C354 @ =_0807C358 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807C34C: .4byte gUnk_02019EE0 -_0807C350: .4byte gMapDataTopSpecial -_0807C354: .4byte _0807C358 -_0807C358: @ jump table - .4byte _0807C3BC @ case 0 - .4byte _0807C3E4 @ case 1 - .4byte _0807C3E4 @ case 2 - .4byte _0807C3E4 @ case 3 - .4byte _0807C3E4 @ case 4 - .4byte _0807C3E4 @ case 5 - .4byte _0807C400 @ case 6 - .4byte _0807C3E4 @ case 7 - .4byte _0807C3E4 @ case 8 - .4byte _0807C400 @ case 9 - .4byte _0807C400 @ case 10 - .4byte _0807C400 @ case 11 - .4byte _0807C400 @ case 12 - .4byte _0807C3BC @ case 13 - .4byte _0807C400 @ case 14 - .4byte _0807C400 @ case 15 - .4byte _0807C3E4 @ case 16 - .4byte _0807C400 @ case 17 - .4byte _0807C400 @ case 18 - .4byte _0807C400 @ case 19 - .4byte _0807C400 @ case 20 - .4byte _0807C400 @ case 21 - .4byte _0807C400 @ case 22 - .4byte _0807C400 @ case 23 - .4byte _0807C3E4 @ case 24 -_0807C3BC: - ldr r0, _0807C3D8 @ =gMapBottom - ldr r2, [r0] - cmp r2, #0 - beq _0807C3CC - ldrh r1, [r2] - movs r0, #0x80 - orrs r0, r1 - strh r0, [r2] -_0807C3CC: - ldr r2, _0807C3DC @ =gScreen - ldrh r1, [r2] - ldr r0, _0807C3E0 @ =0x0000FDFF - ands r0, r1 - strh r0, [r2] - b _0807C444 - .align 2, 0 -_0807C3D8: .4byte gMapBottom -_0807C3DC: .4byte gScreen -_0807C3E0: .4byte 0x0000FDFF -_0807C3E4: - ldr r0, _0807C3F8 @ =gMapTop - ldr r1, [r0] - cmp r1, #0 - beq _0807C3F2 - ldr r0, _0807C3FC @ =gUnk_080B77C0 - ldrh r0, [r0, #4] - strh r0, [r1] -_0807C3F2: - bl sub_0807C5B0 - b _0807C444 - .align 2, 0 -_0807C3F8: .4byte gMapTop -_0807C3FC: .4byte gUnk_080B77C0 -_0807C400: - ldr r0, _0807C44C @ =gMapBottom - ldr r1, [r0] - cmp r1, #0 - beq _0807C40E - ldr r0, _0807C450 @ =gUnk_080B77C0 - ldrh r0, [r0] - strh r0, [r1] -_0807C40E: - ldr r0, _0807C454 @ =gMapTop - ldr r1, [r0] - cmp r1, #0 - beq _0807C41C - ldr r0, _0807C450 @ =gUnk_080B77C0 - ldrh r0, [r0, #2] - strh r0, [r1] -_0807C41C: - ldr r2, _0807C458 @ =gScreen - ldrh r0, [r2] - movs r1, #0x80 - lsls r1, r1, #4 - ands r1, r0 - movs r3, #0xba - lsls r3, r3, #5 - adds r0, r3, #0 - movs r3, #0 - orrs r1, r0 - strh r1, [r2] - ldr r0, _0807C45C @ =gArea - ldrb r0, [r0, #0xc] - cmp r0, #0 - beq _0807C444 - movs r3, #0xa0 - lsls r3, r3, #8 - adds r0, r3, #0 - orrs r1, r0 - strh r1, [r2] -_0807C444: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807C44C: .4byte gMapBottom -_0807C450: .4byte gUnk_080B77C0 -_0807C454: .4byte gMapTop -_0807C458: .4byte gScreen -_0807C45C: .4byte gArea - - thumb_func_start sub_0807C460 -sub_0807C460: @ 0x0807C460 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - ldr r7, _0807C4E8 @ =gMapDataBottom - ldr r6, _0807C4EC @ =gMapDataTop - ldr r0, _0807C4F0 @ =gRoomControls - ldrh r1, [r0, #0x1e] - lsrs r3, r1, #4 - ldrh r0, [r0, #0x20] - lsrs r0, r0, #4 - str r0, [sp] - movs r4, #0 - movs r1, #0 - cmp r1, r0 - bhs _0807C4DC - movs r0, #0x40 - subs r0, r0, r3 - lsls r0, r0, #1 - mov sb, r0 -_0807C48C: - movs r5, #0 - adds r1, #1 - mov sl, r1 - cmp r5, r3 - bhs _0807C4CA - ldr r0, _0807C4F4 @ =0x00003FFF - mov r8, r0 -_0807C49A: - ldrh r0, [r7] - cmp r0, r8 - bls _0807C4AC - adds r1, r4, #0 - movs r2, #1 - str r3, [sp, #4] - bl SetTile - ldr r3, [sp, #4] -_0807C4AC: - ldrh r0, [r6] - cmp r0, r8 - bls _0807C4BE - adds r1, r4, #0 - movs r2, #2 - str r3, [sp, #4] - bl SetTile - ldr r3, [sp, #4] -_0807C4BE: - adds r7, #2 - adds r6, #2 - adds r4, #1 - adds r5, #1 - cmp r5, r3 - blo _0807C49A -_0807C4CA: - add r7, sb - add r6, sb - adds r0, r4, #0 - adds r0, #0x40 - subs r4, r0, r3 - mov r1, sl - ldr r0, [sp] - cmp r1, r0 - blo _0807C48C -_0807C4DC: - 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 -_0807C4E8: .4byte gMapDataBottom -_0807C4EC: .4byte gMapDataTop -_0807C4F0: .4byte gRoomControls -_0807C4F4: .4byte 0x00003FFF - - thumb_func_start sub_0807C4F8 -sub_0807C4F8: @ 0x0807C4F8 - push {r4, r5, r6, lr} - ldr r0, _0807C594 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x71 - beq _0807C592 - ldr r0, _0807C598 @ =gUnk_02019EE0 - movs r4, #0x80 - lsls r4, r4, #8 - adds r1, r4, #0 - bl MemClear - ldr r0, _0807C59C @ =gMapDataTopSpecial - adds r1, r4, #0 - bl MemClear - ldr r5, _0807C5A0 @ =gUnk_02022830 - ldr r0, _0807C5A4 @ =gArea - ldr r1, _0807C5A8 @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r4, [r0, #0xc] - subs r4, #0xc -_0807C524: - adds r4, #0xc - ldr r1, [r4, #4] - ldr r0, _0807C598 @ =gUnk_02019EE0 - cmp r1, r0 - beq _0807C534 - ldr r0, _0807C59C @ =gMapDataTopSpecial - cmp r1, r0 - bne _0807C54A -_0807C534: - ldr r0, [r4] - ldr r1, _0807C5AC @ =0x7FFFFFFF - ands r0, r1 - str r0, [r5] - ldr r0, [r4, #4] - str r0, [r5, #4] - ldr r0, [r4, #8] - str r0, [r5, #8] - adds r0, r5, #0 - bl sub_080197D4 -_0807C54A: - ldr r0, [r4] - cmp r0, #0 - blt _0807C524 - ldr r4, _0807C598 @ =gUnk_02019EE0 - movs r0, #0x80 - lsls r0, r0, #7 - adds r5, r4, r0 - adds r6, r0, #0 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear - ldr r4, _0807C59C @ =gMapDataTopSpecial - adds r5, r4, r6 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear -_0807C592: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807C594: .4byte gRoomControls -_0807C598: .4byte gUnk_02019EE0 -_0807C59C: .4byte gMapDataTopSpecial -_0807C5A0: .4byte gUnk_02022830 -_0807C5A4: .4byte gArea -_0807C5A8: .4byte 0x0000085C -_0807C5AC: .4byte 0x7FFFFFFF - - thumb_func_start sub_0807C5B0 -sub_0807C5B0: @ 0x0807C5B0 - push {r4, r5, r6, lr} - ldr r5, _0807C5E8 @ =gUnk_0200D654 - movs r4, #0x80 - lsls r4, r4, #5 - movs r3, #0 - ldr r6, _0807C5EC @ =gRoomControls - ldr r2, _0807C5F0 @ =gUnk_02027EB4 -_0807C5BE: - adds r0, r5, r3 - ldrb r0, [r0] - cmp r0, #0 - beq _0807C5D4 - cmp r0, #0xf - bhi _0807C5D2 - ldrb r1, [r2] - cmp r1, #0xf - bhi _0807C5D4 - orrs r0, r1 -_0807C5D2: - strb r0, [r2] -_0807C5D4: - adds r2, #1 - adds r3, #1 - cmp r3, r4 - blo _0807C5BE - ldrb r1, [r6, #0xf] - movs r0, #2 - orrs r0, r1 - strb r0, [r6, #0xf] - pop {r4, r5, r6, pc} - .align 2, 0 -_0807C5E8: .4byte gUnk_0200D654 -_0807C5EC: .4byte gRoomControls -_0807C5F0: .4byte gUnk_02027EB4 - - thumb_func_start sub_0807C5F4 -sub_0807C5F4: @ 0x0807C5F4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r2, r5, #0 - movs r0, #0x20 - ldr r6, _0807C698 @ =gRoomControls -_0807C5FE: - movs r3, #0 - subs r4, r0, #1 -_0807C602: - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - adds r3, #1 - cmp r3, #0x1f - bls _0807C602 - adds r2, #0xc0 - adds r0, r4, #0 - cmp r0, #0 - bne _0807C5FE - ldrh r0, [r6, #0x1e] - cmp r0, #0xff - bls _0807C63E - adds r2, r5, #0 - adds r2, #0x40 - movs r0, #0x20 -_0807C624: - movs r3, #0 - subs r4, r0, #1 -_0807C628: - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - adds r3, #1 - cmp r3, #0x1f - bls _0807C628 - adds r2, #0xc0 - adds r0, r4, #0 - cmp r0, #0 - bne _0807C624 -_0807C63E: - ldrh r0, [r6, #0x20] - cmp r0, #0xff - bls _0807C666 - movs r0, #0x80 - lsls r0, r0, #6 - adds r2, r5, r0 - movs r0, #0x20 -_0807C64C: - movs r3, #0 - subs r4, r0, #1 -_0807C650: - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - adds r3, #1 - cmp r3, #0x1f - bls _0807C650 - adds r2, #0xc0 - adds r0, r4, #0 - cmp r0, #0 - bne _0807C64C -_0807C666: - ldrh r0, [r6, #0x1e] - cmp r0, #0xff - bls _0807C694 - ldrh r0, [r6, #0x20] - cmp r0, #0xff - bls _0807C694 - movs r0, #0x81 - lsls r0, r0, #6 - adds r2, r5, r0 - movs r0, #0x20 -_0807C67A: - movs r3, #0 - subs r4, r0, #1 -_0807C67E: - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - adds r3, #1 - cmp r3, #0x1f - bls _0807C67E - adds r2, #0xc0 - adds r0, r4, #0 - cmp r0, #0 - bne _0807C67A -_0807C694: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807C698: .4byte gRoomControls - - thumb_func_start sub_0807C69C -sub_0807C69C: @ 0x0807C69C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov sb, r0 - adds r6, r1, #0 - mov r8, r2 - mov r0, r8 - muls r0, r6, r0 - add r0, sb - subs r2, r0, #1 - mov r0, r8 - subs r0, #1 - lsls r0, r0, #6 - add r0, sb - subs r1, r6, #1 - adds r4, r0, r1 - movs r5, #0 - cmp r5, r8 - bhs _0807C6EA -_0807C6C4: - movs r3, #0 - adds r7, r4, #0 - subs r7, #0x40 - subs r0, r2, r6 - mov ip, r0 - cmp r3, r6 - bhs _0807C6E0 -_0807C6D2: - subs r0, r4, r3 - subs r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r3, #1 - cmp r3, r6 - blo _0807C6D2 -_0807C6E0: - adds r4, r7, #0 - mov r2, ip - adds r5, #1 - cmp r5, r8 - blo _0807C6C4 -_0807C6EA: - movs r0, #0x40 - subs r7, r0, r6 - movs r5, #0 - mov r1, r8 - lsls r2, r1, #6 - mov r0, sb - adds r1, r0, r6 -_0807C6F8: - lsls r0, r5, #6 - adds r4, r1, r0 - movs r3, #0 - adds r6, r5, #1 - cmp r3, r7 - bhs _0807C710 - movs r5, #0 -_0807C706: - adds r0, r4, r3 - strb r5, [r0] - adds r3, #1 - cmp r3, r7 - blo _0807C706 -_0807C710: - adds r5, r6, #0 - cmp r5, #0x3f - bls _0807C6F8 - movs r0, #0x40 - mov r1, r8 - subs r7, r0, r1 - mov r0, sb - adds r4, r0, r2 - movs r5, #0 - cmp r5, r7 - bhs _0807C736 -_0807C726: - adds r0, r4, #0 - movs r1, #0x40 - bl MemClear - adds r4, #0x40 - adds r5, #1 - cmp r5, r7 - blo _0807C726 -_0807C736: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807C740 -sub_0807C740: @ 0x0807C740 - push {r4, r5, lr} - bl sub_0807BFD0 - bl LoadRoomGfx - ldr r4, _0807C780 @ =gRoomControls - ldr r2, [r4, #0x30] - cmp r2, #0 - beq _0807C788 - ldrh r1, [r2, #0x2e] - lsls r0, r1, #0x10 - cmp r0, #0 - bge _0807C764 - ldr r0, _0807C784 @ =0x00007FFF - ands r0, r1 - ldrh r1, [r4, #6] - subs r0, r0, r1 - strh r0, [r2, #0x2e] -_0807C764: - movs r0, #0x2e - ldrsh r3, [r2, r0] - ldrh r1, [r2, #0x32] - lsls r0, r1, #0x10 - cmp r0, #0 - bge _0807C77A - ldr r0, _0807C784 @ =0x00007FFF - ands r0, r1 - ldrh r1, [r4, #8] - subs r0, r0, r1 - strh r0, [r2, #0x32] -_0807C77A: - movs r0, #0x32 - ldrsh r5, [r2, r0] - b _0807C78C - .align 2, 0 -_0807C780: .4byte gRoomControls -_0807C784: .4byte 0x00007FFF -_0807C788: - movs r3, #0 - movs r5, #0 -_0807C78C: - cmp r3, #0x77 - bgt _0807C794 - movs r0, #0 - b _0807C7A2 -_0807C794: - ldrh r1, [r4, #0x1e] - adds r0, r1, #0 - subs r0, #0x78 - cmp r0, r3 - blt _0807C7A0 - adds r0, r3, #0 -_0807C7A0: - subs r0, #0x78 -_0807C7A2: - strh r0, [r4, #0xa] - ldrh r1, [r4, #6] - ldrh r2, [r4, #0xa] - adds r0, r1, r2 - strh r0, [r4, #0xa] - cmp r5, #0x4f - bgt _0807C7B4 - movs r0, #0 - b _0807C7C2 -_0807C7B4: - ldrh r2, [r4, #0x20] - adds r0, r2, #0 - subs r0, #0x50 - cmp r0, r5 - blt _0807C7C0 - adds r0, r5, #0 -_0807C7C0: - subs r0, #0x50 -_0807C7C2: - strh r0, [r4, #0xc] - ldrh r0, [r4, #8] - ldrh r3, [r4, #0xc] - adds r0, r0, r3 - strh r0, [r4, #0xc] - ldr r2, [r4, #0x30] - cmp r2, #0 - beq _0807C7FC - ldrh r3, [r2, #0x2e] - adds r0, r1, r3 - strh r0, [r2, #0x2e] - ldr r1, [r4, #0x30] - ldrh r0, [r4, #8] - ldrh r2, [r1, #0x32] - adds r0, r0, r2 - strh r0, [r1, #0x32] - ldr r0, _0807C80C @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0807C7FC - ldr r0, [r4, #0x30] - adds r0, #0x38 - movs r1, #1 - strb r1, [r0] - ldr r0, [r4, #0x30] - bl UpdateSpriteForCollisionLayer -_0807C7FC: - ldrb r1, [r4, #0xf] - movs r0, #0xfb - ands r0, r1 - strb r0, [r4, #0xf] - bl sub_08080BC4 - pop {r4, r5, pc} - .align 2, 0 -_0807C80C: .4byte gRoomControls - - thumb_func_start sub_0807C810 -sub_0807C810: @ 0x0807C810 - push {r4, r5, r6, lr} - bl sub_0807BFD0 - ldr r2, _0807C850 @ =gUnk_03004030 - ldr r6, _0807C854 @ =gPlayerEntity - ldr r4, _0807C858 @ =gRoomControls - ldr r3, [r2] - ldrh r1, [r3, #6] - movs r0, #0x3f - ands r0, r1 - lsls r0, r0, #4 - ldrh r1, [r4, #6] - adds r0, r0, r1 - ldrh r1, [r2, #4] - adds r1, r1, r0 - movs r5, #0 - strh r1, [r6, #0x2e] - ldrh r1, [r3, #6] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r1 - lsrs r0, r0, #2 - ldrh r4, [r4, #8] - adds r0, r0, r4 - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r6, #0x32] - bl sub_080809D4 - ldr r0, _0807C85C @ =gUpdateVisibleTiles - strb r5, [r0] - pop {r4, r5, r6, pc} - .align 2, 0 -_0807C850: .4byte gUnk_03004030 -_0807C854: .4byte gPlayerEntity -_0807C858: .4byte gRoomControls -_0807C85C: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807C860 -sub_0807C860: @ 0x0807C860 - push {r4, lr} - ldr r0, _0807C88C @ =gRoomTransition - adds r0, #0x2d - movs r1, #1 - strb r1, [r0] - ldr r0, _0807C890 @ =gMapDataBottom - movs r2, #0xc0 - lsls r2, r2, #6 - adds r1, r0, r2 - movs r4, #0x80 - lsls r4, r4, #6 - adds r2, r4, #0 - bl MemCopy - ldr r0, _0807C894 @ =gMapDataTop - movs r2, #0xc0 - lsls r2, r2, #6 - adds r1, r0, r2 - adds r2, r4, #0 - bl MemCopy - pop {r4, pc} - .align 2, 0 -_0807C88C: .4byte gRoomTransition -_0807C890: .4byte gMapDataBottom -_0807C894: .4byte gMapDataTop - - thumb_func_start sub_0807C898 -sub_0807C898: @ 0x0807C898 - push {r4, r5, lr} - ldr r4, _0807C8AC @ =gRoomTransition - adds r4, #0x2d - movs r5, #0 - movs r0, #2 - strb r0, [r4] - bl LoadRoomGfx - strb r5, [r4] - pop {r4, r5, pc} - .align 2, 0 -_0807C8AC: .4byte gRoomTransition - - thumb_func_start sub_0807C8B0 -sub_0807C8B0: @ 0x0807C8B0 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov r8, r0 - adds r4, r1, #0 - mov ip, r2 - mov r0, ip - muls r0, r4, r0 - lsls r0, r0, #1 - add r0, r8 - subs r7, r0, #2 - mov r0, ip - subs r0, #1 - lsls r0, r0, #7 - add r0, r8 - lsls r3, r4, #1 - subs r1, r3, #2 - adds r0, r0, r1 - movs r5, #0 - cmp r5, ip - bhs _0807C906 - mov sb, r3 -_0807C8DE: - movs r2, #0 - adds r6, r0, #0 - subs r6, #0x80 - cmp r2, r4 - bhs _0807C8FA - adds r1, r7, #0 - adds r3, r0, #0 -_0807C8EC: - ldrh r0, [r1] - strh r0, [r3] - subs r1, #2 - subs r3, #2 - adds r2, #1 - cmp r2, r4 - blo _0807C8EC -_0807C8FA: - adds r0, r6, #0 - mov r1, sb - subs r7, r7, r1 - adds r5, #1 - cmp r5, ip - blo _0807C8DE -_0807C906: - movs r0, #0x40 - subs r6, r0, r4 - movs r5, #0 - lsls r0, r4, #1 - mov r2, ip - lsls r7, r2, #7 - mov r2, r8 - adds r1, r2, r0 -_0807C916: - lsls r0, r5, #7 - adds r0, r1, r0 - movs r2, #0 - adds r3, r5, #1 - cmp r2, r6 - bhs _0807C92E - movs r4, #0 -_0807C924: - strh r4, [r0] - adds r0, #2 - adds r2, #1 - cmp r2, r6 - blo _0807C924 -_0807C92E: - adds r5, r3, #0 - cmp r5, #0x3f - bls _0807C916 - movs r0, #0x40 - mov r1, ip - subs r6, r0, r1 - mov r2, r8 - adds r0, r2, r7 - movs r5, #0 - cmp r5, r6 - bhs _0807C956 - adds r4, r0, #0 -_0807C946: - adds r0, r4, #0 - movs r1, #0x80 - bl MemClear - adds r4, #0x80 - adds r5, #1 - cmp r5, r6 - blo _0807C946 -_0807C956: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 diff --git a/asm/code_0807CAA0.s b/asm/code_0807CAA0.s deleted file mode 100644 index 96368728..00000000 --- a/asm/code_0807CAA0.s +++ /dev/null @@ -1,153 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0807CAA0 -sub_0807CAA0: @ 0x0807CAA0 - push {r4, lr} - adds r3, r0, #0 - lsrs r4, r3, #2 - ldr r0, _0807CAC4 @ =gUnk_02002B32 - adds r4, r4, r0 - movs r0, #3 - ands r3, r0 - lsls r3, r3, #1 - lsls r1, r3 - ldrb r2, [r4] - lsls r0, r3 - ands r0, r2 - eors r2, r0 - orrs r2, r1 - strb r2, [r4] - lsrs r0, r3 - pop {r4, pc} - .align 2, 0 -_0807CAC4: .4byte gUnk_02002B32 - - thumb_func_start sub_0807CAC8 -sub_0807CAC8: @ 0x0807CAC8 - ldr r2, _0807CAE0 @ =gSave - ldr r1, _0807CAE4 @ =gArea - ldr r3, _0807CAE8 @ =0x0000047C - adds r2, r2, r3 - ldrb r1, [r1, #3] - adds r2, r2, r1 - movs r1, #1 - lsls r1, r0 - ldrb r0, [r2] - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_0807CAE0: .4byte gSave -_0807CAE4: .4byte gArea -_0807CAE8: .4byte 0x0000047C - - thumb_func_start sub_0807CAEC -sub_0807CAEC: @ 0x0807CAEC - adds r2, r0, #0 - ldr r0, _0807CB04 @ =gSave - ldr r1, _0807CB08 @ =gArea - ldr r3, _0807CB0C @ =0x0000047C - adds r0, r0, r3 - ldrb r1, [r1, #3] - adds r0, r0, r1 - ldrb r0, [r0] - asrs r0, r2 - movs r1, #1 - ands r0, r1 - bx lr - .align 2, 0 -_0807CB04: .4byte gSave -_0807CB08: .4byte gArea -_0807CB0C: .4byte 0x0000047C - - thumb_func_start CheckLocalFlagByBank -CheckLocalFlagByBank: @ 0x0807CB10 - push {lr} - adds r2, r0, #0 - ldr r0, _0807CB20 @ =gGlobalFlags - adds r2, r2, r1 - adds r1, r2, #0 - bl ReadBit - pop {pc} - .align 2, 0 -_0807CB20: .4byte gGlobalFlags - - thumb_func_start sub_0807CB24 -sub_0807CB24: @ 0x0807CB24 - push {lr} - adds r2, r0, #0 - adds r3, r1, #0 - cmp r2, #0x11 - bhi _0807CB84 - lsls r0, r2, #2 - ldr r1, _0807CB38 @ =_0807CB3C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807CB38: .4byte _0807CB3C -_0807CB3C: @ jump table - .4byte _0807CB84 @ case 0 - .4byte _0807CB88 @ case 1 - .4byte _0807CB88 @ case 2 - .4byte _0807CB88 @ case 3 - .4byte _0807CB88 @ case 4 - .4byte _0807CB88 @ case 5 - .4byte _0807CB88 @ case 6 - .4byte _0807CB88 @ case 7 - .4byte _0807CB88 @ case 8 - .4byte _0807CB88 @ case 9 - .4byte _0807CB88 @ case 10 - .4byte _0807CB88 @ case 11 - .4byte _0807CB88 @ case 12 - .4byte _0807CB88 @ case 13 - .4byte _0807CB84 @ case 14 - .4byte _0807CBA0 @ case 15 - .4byte _0807CBAE @ case 16 - .4byte _0807CBBC @ case 17 -_0807CB84: - movs r1, #0 - b _0807CBCA -_0807CB88: - ldr r0, _0807CB9C @ =gLocalFlagBanks - lsls r1, r2, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r3, #0 - bl CheckLocalFlagByBank -_0807CB96: - adds r1, r0, #0 - b _0807CBCA - .align 2, 0 -_0807CB9C: .4byte gLocalFlagBanks -_0807CBA0: - adds r0, r3, #0 - bl GetInventoryValue - cmp r0, #0 - beq _0807CB96 - movs r0, #1 - b _0807CB96 -_0807CBAE: - adds r0, r3, #0 - bl GetInventoryValue - movs r1, #0 - cmp r0, #1 - bne _0807CBCA - b _0807CBC8 -_0807CBBC: - adds r0, r3, #0 - bl GetInventoryValue - movs r1, #0 - cmp r0, #2 - bne _0807CBCA -_0807CBC8: - movs r1, #1 -_0807CBCA: - adds r0, r1, #0 - pop {pc} - .align 2, 0 diff --git a/asm/enemy/code_080300AC.s b/asm/enemy/code_080300AC.s deleted file mode 100644 index c288eea4..00000000 --- a/asm/enemy/code_080300AC.s +++ /dev/null @@ -1,101 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080300E8 -sub_080300E8: @ 0x080300E8 - push {lr} - ldr r1, _08030110 @ =gRoomTransition - adds r3, r1, #0 - adds r3, #0xae - ldrh r0, [r3] - cmp r0, #0xff - beq _0803010C - lsls r0, r0, #2 - adds r1, #0x6c - adds r0, r0, r1 - ldr r2, _08030114 @ =gPlayerEntity - ldrh r1, [r0] - strh r1, [r2, #0x2e] - ldrh r0, [r0, #2] - adds r0, #0xc - strh r0, [r2, #0x32] - movs r0, #0xff - strh r0, [r3] -_0803010C: - pop {pc} - .align 2, 0 -_08030110: .4byte gRoomTransition -_08030114: .4byte gPlayerEntity - - thumb_func_start sub_08030118 -sub_08030118: @ 0x08030118 - push {lr} - adds r2, r0, #0 - ldr r0, _0803013C @ =gRoomTransition - adds r0, #0xac - ldrh r0, [r0] - asrs r0, r2 - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _08030140 - movs r0, #0xc0 - lsls r0, r0, #2 - adds r1, r2, #0 - adds r1, #0x67 - bl SetLocalFlagByBank - b _0803014C - .align 2, 0 -_0803013C: .4byte gRoomTransition -_08030140: - movs r0, #0xc0 - lsls r0, r0, #2 - adds r1, r2, #0 - adds r1, #0x67 - bl ClearLocalFlagByBank -_0803014C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08030150 -sub_08030150: @ 0x08030150 - push {r4, r5, lr} - mov ip, r0 - ldr r2, _08030194 @ =gRoomTransition - adds r5, r2, #0 - adds r5, #0xac - mov r3, ip - adds r3, #0x80 - ldrb r4, [r3] - movs r0, #1 - lsls r0, r4 - ldrh r1, [r5] - bics r1, r0 - mov r0, ip - adds r0, #0x84 - ldr r0, [r0] - lsls r0, r4 - orrs r1, r0 - strh r1, [r5] - ldrb r0, [r3] - lsls r0, r0, #2 - adds r2, #0x6c - adds r0, r0, r2 - mov r4, ip - ldrh r1, [r4, #0x2e] - strh r1, [r0] - ldrb r0, [r3] - lsls r0, r0, #1 - adds r0, #1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r1, [r4, #0x32] - strh r1, [r0] - pop {r4, r5, pc} - .align 2, 0 -_08030194: .4byte gRoomTransition diff --git a/asm/getInventoryValue.s b/asm/getInventoryValue.s deleted file mode 100644 index 9ea26622..00000000 --- a/asm/getInventoryValue.s +++ /dev/null @@ -1,23 +0,0 @@ - - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start GetInventoryValue -GetInventoryValue: @ 0x0807CA84 - adds r2, r0, #0 - lsrs r0, r2, #2 - ldr r1, _0807CA9C @ =gUnk_02002B32 - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #3 - ands r2, r1 - lsls r2, r2, #1 - asrs r0, r2 - ands r0, r1 - bx lr - .align 2, 0 -_0807CA9C: .4byte gUnk_02002B32 diff --git a/asm/macros/scripts.inc b/asm/macros/scripts.inc index 5da59cf1..3822f008 100644 --- a/asm/macros/scripts.inc +++ b/asm/macros/scripts.inc @@ -705,7 +705,7 @@ .2byte \s .endm -.macro _0807F078 a:req, b:req +.macro SetInventoryValue a:req, b:req .2byte 0x0c85 .2byte \a .2byte \b diff --git a/asm/non_matching/playerUtils/GetSurfaceCalcType.inc b/asm/non_matching/playerUtils/GetSurfaceCalcType.inc new file mode 100644 index 00000000..d79af792 --- /dev/null +++ b/asm/non_matching/playerUtils/GetSurfaceCalcType.inc @@ -0,0 +1,88 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r5, r0, #0 + adds r6, r1, #0 + mov r8, r2 + movs r1, #0x2e + ldrsh r0, [r5, r1] + adds r0, r0, r6 + ldr r2, _0807A288 @ =gRoomControls + ldrh r1, [r2, #6] + subs r1, r0, r1 + lsrs r4, r1, #4 + movs r3, #0x3f + ands r4, r3 + movs r7, #0x32 + ldrsh r1, [r5, r7] + add r1, r8 + ldrh r2, [r2, #8] + subs r2, r1, r2 + asrs r2, r2, #4 + ands r2, r3 + lsls r2, r2, #6 + orrs r4, r2 + ldr r2, _0807A28C @ =gPlayerEntity + adds r2, #0x38 + ldrb r2, [r2] + bl GetTileTypeByPos + adds r2, r0, #0 + ldr r1, _0807A290 @ =gPlayerState + ldrh r0, [r1, #0x24] + cmp r2, r0 + beq _0807A23A + adds r3, r1, #0 + adds r3, #0x37 + movs r0, #0 + strb r0, [r3] + ldrh r7, [r1, #0x24] + cmp r2, r7 + bne _0807A242 +_0807A23A: + adds r3, r1, #0 + ldrh r0, [r3, #0x22] + cmp r4, r0 + beq _0807A24E +_0807A242: + ldr r0, _0807A290 @ =gPlayerState + movs r1, #0 + strh r4, [r0, #0x22] + strh r2, [r0, #0x24] + strb r1, [r0, #0x11] + adds r3, r0, #0 +_0807A24E: + adds r2, r3, #0 + ldrb r1, [r2, #0x11] + adds r0, r1, #0 + cmp r0, #0xff + beq _0807A25C + adds r0, r1, #1 + strb r0, [r2, #0x11] +_0807A25C: + adds r2, #0x37 + ldrb r1, [r2] + adds r0, r1, #0 + cmp r0, #0xff + beq _0807A26A + adds r0, r1, #1 + strb r0, [r2] +_0807A26A: + ldrb r0, [r3, #0x12] + strb r0, [r3, #0x13] + adds r0, r5, #0 + adds r1, r6, #0 + mov r2, r8 + bl sub_080002B4 + adds r2, r0, #0 + ldr r1, _0807A294 @ =gUnk_08007CAC + bl sub_08007DD6 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807A288: .4byte gRoomControls +_0807A28C: .4byte gPlayerEntity +_0807A290: .4byte gPlayerState +_0807A294: .4byte gUnk_08007CAC + .syntax divided diff --git a/asm/non_matching/playerUtils/LoadRoomGfx.inc b/asm/non_matching/playerUtils/LoadRoomGfx.inc new file mode 100644 index 00000000..a905ad83 --- /dev/null +++ b/asm/non_matching/playerUtils/LoadRoomGfx.inc @@ -0,0 +1,383 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + bl sub_0807BFA8 + ldr r7, _0807C158 @ =gRoomControls + ldrb r1, [r7, #0xf] + movs r0, #0xfc + ands r0, r1 + strb r0, [r7, #0xf] + ldr r5, _0807C15C @ =gMapDataTop + movs r6, #0x80 + lsls r6, r6, #6 + adds r0, r5, #0 + adds r1, r6, #0 + bl MemClear + adds r0, r5, r6 + movs r1, #0x80 + lsls r1, r1, #5 + bl MemClear + ldr r0, _0807C160 @ =gUnk_02019EE0 + movs r4, #0x80 + lsls r4, r4, #8 + adds r1, r4, #0 + bl MemClear + ldr r0, _0807C164 @ =gMapDataTopSpecial + adds r1, r4, #0 + bl MemClear + ldr r0, _0807C168 @ =gArea + ldr r1, _0807C16C @ =0x0000085C + adds r0, r0, r1 + ldr r0, [r0] + ldr r0, [r0, #0xc] + bl sub_080197D4 + ldr r2, _0807C170 @ =gMapBottom + ldrh r1, [r2, #4] + ldr r0, _0807C174 @ =0x0000FFFF + cmp r1, r0 + beq _0807C178 + adds r0, r2, #4 + ldrh r1, [r7, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r7, #0x20] + lsrs r2, r2, #4 + bl sub_0807C8B0 + ldrh r1, [r7, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r7, #0x20] + lsrs r2, r2, #4 + adds r0, r5, #0 + bl sub_0807C8B0 + movs r2, #0 + mov sb, r2 + b _0807C184 + .align 2, 0 +_0807C158: .4byte gRoomControls +_0807C15C: .4byte gMapDataTop +_0807C160: .4byte gUnk_02019EE0 +_0807C164: .4byte gMapDataTopSpecial +_0807C168: .4byte gArea +_0807C16C: .4byte 0x0000085C +_0807C170: .4byte gMapBottom +_0807C174: .4byte 0x0000FFFF +_0807C178: + adds r0, r2, #4 + adds r1, r6, #0 + bl MemClear + movs r3, #1 + mov sb, r3 +_0807C184: + ldr r0, _0807C1B0 @ =gRoomTransition + adds r0, #0x2d + ldrb r0, [r0] + cmp r0, #0 + bne _0807C1BC + ldr r0, _0807C1B4 @ =gMapDataBottom + movs r2, #0xc0 + lsls r2, r2, #6 + adds r1, r0, r2 + movs r4, #0x80 + lsls r4, r4, #6 + adds r2, r4, #0 + bl MemCopy + ldr r0, _0807C1B8 @ =gMapDataTop + movs r3, #0xc0 + lsls r3, r3, #6 + adds r1, r0, r3 + adds r2, r4, #0 + bl MemCopy + b _0807C26C + .align 2, 0 +_0807C1B0: .4byte gRoomTransition +_0807C1B4: .4byte gMapDataBottom +_0807C1B8: .4byte gMapDataTop +_0807C1BC: + cmp r0, #2 + bne _0807C26C + ldr r4, _0807C278 @ =gMapDataBottom + movs r0, #0xb0 + lsls r0, r0, #8 + adds r0, r0, r4 + mov r8, r0 + movs r5, #0x80 + lsls r5, r5, #5 + adds r0, r4, #0 + mov r1, r8 + adds r2, r5, #0 + bl MemCopy + movs r1, #0xc0 + lsls r1, r1, #6 + adds r6, r4, r1 + adds r0, r6, #0 + adds r1, r4, #0 + adds r2, r5, #0 + bl MemCopy + mov r0, r8 + adds r1, r6, #0 + adds r2, r5, #0 + bl MemCopy + adds r6, r4, r5 + adds r0, r6, #0 + mov r1, r8 + adds r2, r5, #0 + bl MemCopy + movs r2, #0x80 + lsls r2, r2, #7 + adds r4, r4, r2 + adds r0, r4, #0 + adds r1, r6, #0 + adds r2, r5, #0 + bl MemCopy + mov r0, r8 + adds r1, r4, #0 + adds r2, r5, #0 + bl MemCopy + ldr r4, _0807C27C @ =gMapDataTop + movs r3, #0xb0 + lsls r3, r3, #8 + adds r3, r3, r4 + mov r8, r3 + adds r0, r4, #0 + mov r1, r8 + adds r2, r5, #0 + bl MemCopy + movs r0, #0xc0 + lsls r0, r0, #6 + adds r6, r4, r0 + adds r0, r6, #0 + adds r1, r4, #0 + adds r2, r5, #0 + bl MemCopy + mov r0, r8 + adds r1, r6, #0 + adds r2, r5, #0 + bl MemCopy + adds r6, r4, r5 + adds r0, r6, #0 + mov r1, r8 + adds r2, r5, #0 + bl MemCopy + movs r1, #0x80 + lsls r1, r1, #7 + adds r4, r4, r1 + adds r0, r4, #0 + adds r1, r6, #0 + adds r2, r5, #0 + bl MemCopy + mov r0, r8 + adds r1, r4, #0 + adds r2, r5, #0 + bl MemCopy +_0807C26C: + mov r2, sb + cmp r2, #0 + bne _0807C280 + bl sub_0807BBE4 + b _0807C2A0 + .align 2, 0 +_0807C278: .4byte gMapDataBottom +_0807C27C: .4byte gMapDataTop +_0807C280: + ldr r0, _0807C2CC @ =gUnk_02027EB4 + ldrh r1, [r7, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r7, #0x20] + lsrs r2, r2, #4 + bl sub_0807C69C + ldr r0, _0807C2D0 @ =gUnk_0200D654 + ldrh r1, [r7, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r7, #0x20] + lsrs r2, r2, #4 + bl sub_0807C69C + bl sub_0807C460 +_0807C2A0: + bl sub_0807BC84 + ldr r4, _0807C2D4 @ =gMapBottom + adds r0, r4, #0 + bl sub_08080B60 + ldr r5, _0807C2D8 @ =gMapTop + adds r0, r5, #0 + bl sub_08080B60 + mov r3, sb + cmp r3, #0 + bne _0807C2E4 + ldr r0, _0807C2DC @ =gUnk_02019EE0 + adds r1, r4, #0 + bl sub_0801AB08 + ldr r0, _0807C2E0 @ =gMapDataTopSpecial + adds r1, r5, #0 + bl sub_0801AB08 + b _0807C326 + .align 2, 0 +_0807C2CC: .4byte gUnk_02027EB4 +_0807C2D0: .4byte gUnk_0200D654 +_0807C2D4: .4byte gMapBottom +_0807C2D8: .4byte gMapTop +_0807C2DC: .4byte gUnk_02019EE0 +_0807C2E0: .4byte gMapDataTopSpecial +_0807C2E4: + ldr r4, _0807C34C @ =gUnk_02019EE0 + movs r0, #0x80 + lsls r0, r0, #7 + adds r5, r4, r0 + adds r6, r0, #0 + adds r0, r4, #0 + adds r1, r5, #0 + adds r2, r6, #0 + bl MemCopy + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_0807C5F4 + adds r0, r5, #0 + adds r1, r6, #0 + bl MemClear + ldr r4, _0807C350 @ =gMapDataTopSpecial + adds r5, r4, r6 + adds r0, r4, #0 + adds r1, r5, #0 + adds r2, r6, #0 + bl MemCopy + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_0807C5F4 + adds r0, r5, #0 + adds r1, r6, #0 + bl MemClear +_0807C326: + mov r1, sb + cmp r1, #0 + bne _0807C332 + ldrb r0, [r7, #4] + cmp r0, #0x71 + bne _0807C33A +_0807C332: + ldrb r1, [r7, #0xf] + movs r0, #1 + orrs r0, r1 + strb r0, [r7, #0xf] +_0807C33A: + ldrb r0, [r7, #4] + subs r0, #0x20 + cmp r0, #0x18 + bhi _0807C400 + lsls r0, r0, #2 + ldr r1, _0807C354 @ =_0807C358 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0807C34C: .4byte gUnk_02019EE0 +_0807C350: .4byte gMapDataTopSpecial +_0807C354: .4byte _0807C358 +_0807C358: @ jump table + .4byte _0807C3BC @ case 0 + .4byte _0807C3E4 @ case 1 + .4byte _0807C3E4 @ case 2 + .4byte _0807C3E4 @ case 3 + .4byte _0807C3E4 @ case 4 + .4byte _0807C3E4 @ case 5 + .4byte _0807C400 @ case 6 + .4byte _0807C3E4 @ case 7 + .4byte _0807C3E4 @ case 8 + .4byte _0807C400 @ case 9 + .4byte _0807C400 @ case 10 + .4byte _0807C400 @ case 11 + .4byte _0807C400 @ case 12 + .4byte _0807C3BC @ case 13 + .4byte _0807C400 @ case 14 + .4byte _0807C400 @ case 15 + .4byte _0807C3E4 @ case 16 + .4byte _0807C400 @ case 17 + .4byte _0807C400 @ case 18 + .4byte _0807C400 @ case 19 + .4byte _0807C400 @ case 20 + .4byte _0807C400 @ case 21 + .4byte _0807C400 @ case 22 + .4byte _0807C400 @ case 23 + .4byte _0807C3E4 @ case 24 +_0807C3BC: + ldr r0, _0807C3D8 @ =gMapBottom + ldr r2, [r0] + cmp r2, #0 + beq _0807C3CC + ldrh r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strh r0, [r2] +_0807C3CC: + ldr r2, _0807C3DC @ =gScreen + ldrh r1, [r2] + ldr r0, _0807C3E0 @ =0x0000FDFF + ands r0, r1 + strh r0, [r2] + b _0807C444 + .align 2, 0 +_0807C3D8: .4byte gMapBottom +_0807C3DC: .4byte gScreen +_0807C3E0: .4byte 0x0000FDFF +_0807C3E4: + ldr r0, _0807C3F8 @ =gMapTop + ldr r1, [r0] + cmp r1, #0 + beq _0807C3F2 + ldr r0, _0807C3FC @ =gUnk_080B77C0 + ldrh r0, [r0, #4] + strh r0, [r1] +_0807C3F2: + bl sub_0807C5B0 + b _0807C444 + .align 2, 0 +_0807C3F8: .4byte gMapTop +_0807C3FC: .4byte gUnk_080B77C0 +_0807C400: + ldr r0, _0807C44C @ =gMapBottom + ldr r1, [r0] + cmp r1, #0 + beq _0807C40E + ldr r0, _0807C450 @ =gUnk_080B77C0 + ldrh r0, [r0] + strh r0, [r1] +_0807C40E: + ldr r0, _0807C454 @ =gMapTop + ldr r1, [r0] + cmp r1, #0 + beq _0807C41C + ldr r0, _0807C450 @ =gUnk_080B77C0 + ldrh r0, [r0, #2] + strh r0, [r1] +_0807C41C: + ldr r2, _0807C458 @ =gScreen + ldrh r0, [r2] + movs r1, #0x80 + lsls r1, r1, #4 + ands r1, r0 + movs r3, #0xba + lsls r3, r3, #5 + adds r0, r3, #0 + movs r3, #0 + orrs r1, r0 + strh r1, [r2] + ldr r0, _0807C45C @ =gArea + ldrb r0, [r0, #0xc] + cmp r0, #0 + beq _0807C444 + movs r3, #0xa0 + lsls r3, r3, #8 + adds r0, r3, #0 + orrs r1, r0 + strh r1, [r2] +_0807C444: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807C44C: .4byte gMapBottom +_0807C450: .4byte gUnk_080B77C0 +_0807C454: .4byte gMapTop +_0807C458: .4byte gScreen +_0807C45C: .4byte gArea + .syntax divided diff --git a/asm/non_matching/playerUtils/ResolvePlayerAnimation.inc b/asm/non_matching/playerUtils/ResolvePlayerAnimation.inc new file mode 100644 index 00000000..466b80e3 --- /dev/null +++ b/asm/non_matching/playerUtils/ResolvePlayerAnimation.inc @@ -0,0 +1,268 @@ + .syntax unified + push {r4, lr} + ldr r3, _08079954 @ =gPlayerState + ldr r2, [r3, #0x30] + movs r0, #8 + ands r0, r2 + mov ip, r3 + cmp r0, #0 + beq _080799E4 + ldrb r0, [r3, #5] + cmp r0, #0 + beq _0807995C + ldr r4, _08079958 @ =0x0000092C + b _08079AD8 + .align 2, 0 +_08079954: .4byte gPlayerState +_08079958: .4byte 0x0000092C +_0807995C: + mov r0, ip + adds r0, #0x3d + mov r3, ip + ldrb r1, [r3, #0x1c] + ldrb r0, [r0] + orrs r0, r1 + cmp r0, #0 + beq _0807996E + b _08079B14 +_0807996E: + movs r0, #0x80 + lsls r0, r0, #0x12 + ands r0, r2 + cmp r0, #0 + bne _08079A1E + mov r4, ip + ldrb r0, [r4, #3] + cmp r0, #0 + beq _08079988 + ldr r4, _08079984 @ =0x00000414 + b _08079AD8 + .align 2, 0 +_08079984: .4byte 0x00000414 +_08079988: + mov r0, ip + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + bne _08079A5C + mov r0, ip + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _08079A6C + mov r0, ip + ldrb r1, [r0, #0x1b] + movs r0, #0x48 + ands r0, r1 + cmp r0, #0 + beq _080799AA + b _08079B14 +_080799AA: + cmp r1, #0 + beq _080799B0 + b _08079AA4 +_080799B0: + mov r1, ip + ldrb r0, [r1, #4] + cmp r0, #0 + beq _080799BA + b _08079B14 +_080799BA: + movs r0, #0x20 + ands r2, r0 + cmp r2, #0 + beq _080799D0 + ldr r0, _080799D8 @ =gArea + ldrb r0, [r0, #0x17] + cmp r0, #4 + bne _080799CC + b _08079AD4 +_080799CC: + cmp r0, #5 + bne _080799DC +_080799D0: + movs r4, #0x80 + lsls r4, r4, #3 + b _08079AD8 + .align 2, 0 +_080799D8: .4byte gArea +_080799DC: + ldr r4, _080799E0 @ =0x000002C2 + b _08079AD8 + .align 2, 0 +_080799E0: .4byte 0x000002C2 +_080799E4: + mov r4, ip + ldrb r0, [r4, #5] + cmp r0, #0 + beq _080799F2 + movs r4, #0xd4 + lsls r4, r4, #2 + b _08079AD8 +_080799F2: + mov r0, ip + adds r0, #0x3d + mov r4, ip + ldrb r1, [r4, #0x1c] + ldrb r0, [r0] + orrs r0, r1 + cmp r0, #0 + beq _08079A04 + b _08079B14 +_08079A04: + movs r0, #0x80 + lsls r0, r0, #0xc + ands r0, r2 + cmp r0, #0 + beq _08079A14 + movs r4, #0x8b + lsls r4, r4, #4 + b _08079AD8 +_08079A14: + movs r0, #0x80 + lsls r0, r0, #0x12 + ands r0, r2 + cmp r0, #0 + beq _08079A24 +_08079A1E: + movs r4, #0x81 + lsls r4, r4, #4 + b _08079AD8 +_08079A24: + mov r1, ip + ldrb r0, [r1, #0x1e] + cmp r0, #0 + beq _08079A32 + movs r4, #0xa6 + lsls r4, r4, #2 + b _08079AD8 +_08079A32: + movs r0, #0x80 + lsls r0, r0, #5 + ands r0, r2 + cmp r0, #0 + beq _08079A44 + ldr r4, _08079A40 @ =0x0000070C + b _08079AD8 + .align 2, 0 +_08079A40: .4byte 0x0000070C +_08079A44: + mov r4, ip + ldrb r0, [r4, #3] + cmp r0, #0 + beq _08079A52 + movs r4, #0xb2 + lsls r4, r4, #1 + b _08079AD8 +_08079A52: + mov r0, ip + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _08079A62 +_08079A5C: + movs r4, #0xa0 + lsls r4, r4, #2 + b _08079AD8 +_08079A62: + mov r0, ip + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08079A72 +_08079A6C: + movs r4, #0xa3 + lsls r4, r4, #2 + b _08079AD8 +_08079A72: + mov r0, ip + ldrb r1, [r0, #0x1b] + movs r0, #0x48 + ands r0, r1 + cmp r0, #0 + bne _08079B14 + movs r0, #0x20 + ands r2, r0 + cmp r2, #0 + beq _08079AA0 + ldr r0, _08079A98 @ =gArea + ldrb r0, [r0, #0x17] + ldr r4, _08079A9C @ =0x000002C2 + cmp r0, #4 + bne _08079AD8 + movs r4, #0xa6 + lsls r4, r4, #3 + b _08079AD8 + .align 2, 0 +_08079A98: .4byte gArea +_08079A9C: .4byte 0x000002C2 +_08079AA0: + cmp r1, #0 + beq _08079AAA +_08079AA4: + movs r4, #0xb4 + lsls r4, r4, #1 + b _08079AD8 +_08079AAA: + ldrb r0, [r3, #4] + cmp r0, #0 + bne _08079B14 + ldr r0, [r3, #0x30] + movs r1, #0x80 + lsls r1, r1, #0x10 + ands r0, r1 + cmp r0, #0 + beq _08079AD4 + ldr r0, _08079ACC @ =gUnk_03000B80 + adds r0, #0x63 + ldrb r0, [r0] + cmp r0, #0 + bne _08079B14 + ldr r4, _08079AD0 @ =0x00000604 + b _08079AD8 + .align 2, 0 +_08079ACC: .4byte gUnk_03000B80 +_08079AD0: .4byte 0x00000604 +_08079AD4: + movs r4, #0x80 + lsls r4, r4, #1 +_08079AD8: + mov r1, ip + strh r4, [r1, #8] + ldrb r0, [r1, #5] + cmp r0, #0 + bne _08079B10 + movs r3, #0 + movs r2, #0 + ldr r1, _08079B18 @ =gUnk_03000B80 +_08079AE8: + ldrb r0, [r1, #0xf] + cmp r0, r3 + bls _08079AF0 + adds r3, r0, #0 +_08079AF0: + adds r1, #0x1c + adds r2, #1 + cmp r2, #3 + bls _08079AE8 + mov r2, ip + ldrb r0, [r2, #0xe] + cmp r0, r3 + blo _08079B14 + lsls r0, r4, #0x18 + lsrs r0, r0, #0x18 + ldrb r3, [r2] + cmp r0, r3 + bne _08079B10 + ldr r0, _08079B1C @ =gPlayerEntity + bl UpdateAnimationSingleFrame +_08079B10: + ldr r0, _08079B20 @ =gPlayerState + strb r4, [r0] +_08079B14: + pop {r4, pc} + .align 2, 0 +_08079B18: .4byte gUnk_03000B80 +_08079B1C: .4byte gPlayerEntity +_08079B20: .4byte gPlayerState + .syntax divided diff --git a/asm/non_matching/playerUtils/RespawnPlayer.inc b/asm/non_matching/playerUtils/RespawnPlayer.inc new file mode 100644 index 00000000..b605a852 --- /dev/null +++ b/asm/non_matching/playerUtils/RespawnPlayer.inc @@ -0,0 +1,100 @@ + .syntax unified + push {r4, r5, lr} + ldr r4, _08079498 @ =gPlayerEntity + movs r1, #0 + movs r0, #0x19 + strb r0, [r4, #0xc] + str r1, [r4, #0x34] + str r1, [r4, #0x20] + adds r0, r4, #0 + adds r0, #0x42 + strb r1, [r0] + bl sub_08078EE4 + ldr r2, _0807949C @ =gPlayerState + ldr r1, [r2, #0x30] + movs r0, #0x80 + lsls r0, r0, #0xa + ands r0, r1 + cmp r0, #0 + bne _08079514 + movs r0, #0x80 + lsls r0, r0, #9 + ands r1, r0 + cmp r1, #0 + beq _080794E4 + adds r0, r2, #0 + adds r0, #0x84 + ldr r1, [r0] + ldrh r0, [r1, #0x2e] + strh r0, [r4, #0x2e] + ldrh r0, [r1, #0x32] + strh r0, [r4, #0x32] + b _08079514 + .align 2, 0 +_08079498: .4byte gPlayerEntity +_0807949C: .4byte gPlayerState +_080794A0: + ldr r2, _080794DC @ =gPlayerEntity + ldr r0, [r4] + lsrs r0, r0, #0x1e + adds r1, r2, #0 + adds r1, #0x38 + strb r0, [r1] + ldr r3, _080794E0 @ =gRoomControls + ldr r0, [r4] + movs r1, #0x3f + ands r0, r1 + lsls r0, r0, #4 + ldrh r1, [r3, #6] + adds r0, r0, r1 + adds r0, #8 + strh r0, [r2, #0x2e] + ldr r0, [r4] + movs r1, #0xfc + lsls r1, r1, #4 + ands r0, r1 + lsrs r0, r0, #2 + ldrh r3, [r3, #8] + adds r0, r0, r3 + adds r0, #8 + strh r0, [r2, #0x32] + ldrb r1, [r2, #0x10] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x10] + b _08079514 + .align 2, 0 +_080794DC: .4byte gPlayerEntity +_080794E0: .4byte gRoomControls +_080794E4: + movs r5, #0 + ldr r1, [r2, #0x40] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _08079514 + adds r4, r2, #0 + adds r4, #0x40 +_080794F4: + ldr r1, [r4] + ldrh r0, [r4] + lsrs r1, r1, #0x1e + bl sub_080002E0 + cmp r0, #0xf + bne _080794A0 + adds r4, #4 + adds r5, #1 + cmp r5, #0xf + bhi _08079514 + ldr r1, [r4] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _080794F4 +_08079514: + ldr r0, _0807951C @ =gPlayerEntity + bl UpdateSpriteForCollisionLayer + pop {r4, r5, pc} + .align 2, 0 +_0807951C: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/playerUtils/SetInventoryValue.inc b/asm/non_matching/playerUtils/SetInventoryValue.inc new file mode 100644 index 00000000..de8e3d40 --- /dev/null +++ b/asm/non_matching/playerUtils/SetInventoryValue.inc @@ -0,0 +1,21 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + lsrs r4, r3, #2 + ldr r0, _0807CAC4 @ =gUnk_02002B32 + adds r4, r4, r0 + movs r0, #3 + ands r3, r0 + lsls r3, r3, #1 + lsls r1, r3 + ldrb r2, [r4] + lsls r0, r3 + ands r0, r2 + eors r2, r0 + orrs r2, r1 + strb r2, [r4] + lsrs r0, r3 + pop {r4, pc} + .align 2, 0 +_0807CAC4: .4byte gUnk_02002B32 + .syntax divided diff --git a/asm/non_matching/playerUtils/SetTileType.inc b/asm/non_matching/playerUtils/SetTileType.inc new file mode 100644 index 00000000..77dd77f2 --- /dev/null +++ b/asm/non_matching/playerUtils/SetTileType.inc @@ -0,0 +1,135 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r4, r1, #0 + adds r6, r2, #0 + ldr r0, _0807B3A0 @ =0x000007FF + cmp r5, r0 + bhi _0807B410 + adds r0, r4, #0 + adds r1, r6, #0 + bl DeleteLoadedTileEntity + adds r0, r6, #0 + bl GetLayerByIndex + adds r2, r0, #0 + lsls r1, r5, #1 + ldr r3, _0807B3A4 @ =0x00006004 + adds r0, r2, r3 + adds r0, r0, r1 + ldrh r0, [r0] + mov ip, r0 + lsls r1, r4, #1 + adds r0, r2, #4 + adds r0, r0, r1 + mov r1, ip + strh r1, [r0] + ldr r0, _0807B3A8 @ =gUnk_080B3E80 + adds r0, r5, r0 + ldrb r3, [r0] + ldr r1, _0807B3AC @ =0x00002004 + adds r0, r2, r1 + adds r0, r0, r4 + strb r3, [r0] + ldr r7, _0807B3B0 @ =gRoomControls + ldrb r1, [r7, #0xf] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0807B36C + ldr r0, _0807B3B4 @ =gMapBottom + ldr r1, _0807B3AC @ =0x00002004 + adds r0, r0, r1 + adds r0, r4, r0 + strb r3, [r0] +_0807B36C: + ldr r3, _0807B3B8 @ =0x0000B004 + adds r1, r2, r3 + adds r1, r1, r4 + ldr r0, _0807B3BC @ =gUnk_080B37A0 + adds r0, r5, r0 + ldrb r0, [r0] + strb r0, [r1] + ldrb r1, [r7, #0xf] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0807B430 + movs r1, #0x3f + ands r1, r4 + lsls r1, r1, #1 + movs r0, #0xfc + lsls r0, r0, #4 + ands r0, r4 + lsls r0, r0, #2 + adds r1, r1, r0 + cmp r6, #2 + beq _0807B3C4 + lsls r1, r1, #1 + ldr r0, _0807B3C0 @ =gUnk_02019EE0 + b _0807B3C8 + .align 2, 0 +_0807B3A0: .4byte 0x000007FF +_0807B3A4: .4byte 0x00006004 +_0807B3A8: .4byte gUnk_080B3E80 +_0807B3AC: .4byte 0x00002004 +_0807B3B0: .4byte gRoomControls +_0807B3B4: .4byte gMapBottom +_0807B3B8: .4byte 0x0000B004 +_0807B3BC: .4byte gUnk_080B37A0 +_0807B3C0: .4byte gUnk_02019EE0 +_0807B3C4: + lsls r1, r1, #1 + ldr r0, _0807B400 @ =gMapDataTopSpecial +_0807B3C8: + adds r3, r1, r0 + mov r1, ip + lsls r0, r1, #3 + ldr r1, _0807B404 @ =0x00007004 + adds r0, r0, r1 + adds r0, r2, r0 + ldrh r1, [r0] + strh r1, [r3] + ldrh r1, [r0, #2] + strh r1, [r3, #2] + movs r1, #0x80 + lsls r1, r1, #1 + adds r2, r3, r1 + ldrh r1, [r0, #4] + strh r1, [r2] + movs r2, #0x81 + lsls r2, r2, #1 + adds r1, r3, r2 + ldrh r0, [r0, #6] + strh r0, [r1] + ldr r0, _0807B408 @ =gRoomControls + ldrh r0, [r0] + cmp r0, #1 + beq _0807B430 + ldr r1, _0807B40C @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] + b _0807B430 + .align 2, 0 +_0807B400: .4byte gMapDataTopSpecial +_0807B404: .4byte 0x00007004 +_0807B408: .4byte gRoomControls +_0807B40C: .4byte gUpdateVisibleTiles +_0807B410: + ldr r0, _0807B424 @ =0x00003FFF + cmp r5, r0 + bls _0807B428 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r6, #0 + bl SetTile + b _0807B430 + .align 2, 0 +_0807B424: .4byte 0x00003FFF +_0807B428: + adds r0, r4, #0 + adds r1, r6, #0 + bl sub_0807BA8C +_0807B430: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080777A0.inc b/asm/non_matching/playerUtils/sub_080777A0.inc new file mode 100644 index 00000000..f5813552 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080777A0.inc @@ -0,0 +1,118 @@ + .syntax unified + push {r4, lr} + ldr r3, _080777D0 @ =gPlayerState + adds r0, r3, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r4, #0x80 + adds r0, r4, #0 + ands r0, r1 + cmp r0, #0 + beq _08077870 + ldr r1, [r3, #0x30] + movs r0, #0x80 + lsls r0, r0, #0xf + ands r0, r1 + cmp r0, #0 + beq _080777D4 + adds r1, r3, #0 + adds r1, #0xa0 + movs r0, #1 + strb r0, [r1] + bl DeleteClones +_080777CC: + movs r0, #1 + b _0807787C + .align 2, 0 +_080777D0: .4byte gPlayerState +_080777D4: + ldr r2, _080777F4 @ =gArea + ldrb r0, [r2, #0x18] + cmp r0, #2 + beq _080777FC + cmp r0, #3 + beq _08077810 + ldr r0, _080777F8 @ =gUnk_0200AF00 + adds r0, #0x2c + ldrb r0, [r0] + cmp r0, #0xc + bne _0807787A + adds r2, r3, #0 + ldrb r0, [r2, #0x1c] + cmp r0, #0 + bne _0807787A + b _08077838 + .align 2, 0 +_080777F4: .4byte gArea +_080777F8: .4byte gUnk_0200AF00 +_080777FC: + ldrb r0, [r2, #0x1a] + cmp r0, #0 + bne _080777CC + ldr r1, _0807780C @ =gPlayerEntity + ldrb r0, [r1, #0xd] + adds r0, #1 + strb r0, [r1, #0xd] + b _080777CC + .align 2, 0 +_0807780C: .4byte gPlayerEntity +_08077810: + ldrb r0, [r2, #0x1a] + cmp r0, #0 + bne _0807787A + ands r1, r4 + cmp r1, #0 + beq _0807787A + ldr r0, _08077834 @ =gPlayerEntity + ldrb r1, [r0, #0xd] + adds r1, #1 + strb r1, [r0, #0xd] + ldrb r2, [r0, #0x10] + movs r1, #0x7f + ands r1, r2 + strb r1, [r0, #0x10] + movs r1, #0xb4 + bl RequestPriorityDuration + b _080777CC + .align 2, 0 +_08077834: .4byte gPlayerEntity +_08077838: + ldrb r0, [r2, #0x12] + cmp r0, #0x11 + beq _0807787A + adds r0, r2, #0 + adds r0, #0x90 + ldrh r1, [r0] + movs r0, #0xf0 + lsls r0, r0, #4 + ands r0, r1 + cmp r0, #0 + beq _0807787A + ldr r0, [r2, #0x30] + ldr r1, _0807786C @ =0x00040400 + ands r0, r1 + cmp r0, #0 + bne _0807787A + ldrb r0, [r2, #2] + cmp r0, #0 + bne _0807787A + ldrb r0, [r2, #4] + cmp r0, #0 + bne _0807787A + movs r0, #0x18 + strb r0, [r2, #0xc] + b _0807787A + .align 2, 0 +_0807786C: .4byte 0x00040400 +_08077870: + ldr r0, [r3, #0x30] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + bne _080777CC +_0807787A: + movs r0, #0 +_0807787C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08077880.inc b/asm/non_matching/playerUtils/sub_08077880.inc new file mode 100644 index 00000000..ee9a0c39 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08077880.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + adds r6, r1, #0 + subs r0, r4, #1 + cmp r0, #0x1e + bhi _080778C0 + lsls r0, r4, #1 + adds r0, r0, r4 + lsls r0, r0, #2 + ldr r1, _080778C4 @ =gUnk_0811BE48 + adds r5, r0, r1 + ldr r1, _080778C8 @ =gPlayerState + 0x90 + ldrb r0, [r5] + cmp r0, #0 + beq _080778A0 + adds r1, #2 +_080778A0: + ldrh r0, [r1] + ands r0, r6 + cmp r0, #0 + bne _080778AC + cmp r2, #0 + beq _080778C0 +_080778AC: + adds r0, r4, #0 + bl sub_0807794C + adds r1, r0, #0 + cmp r1, #0 + beq _080778C0 + ldrb r0, [r5, #1] + strb r0, [r1, #9] + strb r4, [r1, #1] + strb r6, [r1, #3] +_080778C0: + pop {r4, r5, r6, pc} + .align 2, 0 +_080778C4: .4byte gUnk_0811BE48 +_080778C8: .4byte gPlayerState + 0x90 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080778CC.inc b/asm/non_matching/playerUtils/sub_080778CC.inc new file mode 100644 index 00000000..6b0771ae --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080778CC.inc @@ -0,0 +1,64 @@ + .syntax unified + push {lr} + ldr r2, _08077920 @ =gPlayerState + ldr r0, [r2, #0x30] + ldr r1, _08077924 @ =0x000400A0 + ands r0, r1 + cmp r0, #0 + bne _0807791C + ldr r0, _08077928 @ =gPlayerEntity + adds r0, #0x79 + ldrb r0, [r0] + cmp r0, #0 + bne _080778FA + ldrb r0, [r2, #5] + cmp r0, #0 + bne _080778FA + adds r0, r2, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0807791C +_080778FA: + bl sub_080789A8 + cmp r0, #0 + bne _08077910 + ldr r0, _08077920 @ =gPlayerState + adds r0, #0x90 + ldrh r1, [r0] + ldr r0, _0807792C @ =0x00000F03 + ands r0, r1 + cmp r0, #0 + bne _0807791C +_08077910: + movs r0, #0x1b + bl sub_0807794C + adds r1, r0, #0 + cmp r1, #0 + bne _08077930 +_0807791C: + movs r0, #0 + b _08077940 + .align 2, 0 +_08077920: .4byte gPlayerState +_08077924: .4byte 0x000400A0 +_08077928: .4byte gPlayerEntity +_0807792C: .4byte 0x00000F03 +_08077930: + movs r0, #0x1b + strb r0, [r1, #1] + ldr r0, _08077944 @ =gUnk_0811BE48 + ldr r2, _08077948 @ =0x00000145 + adds r0, r0, r2 + ldrb r0, [r0] + strb r0, [r1, #9] + movs r0, #1 +_08077940: + pop {pc} + .align 2, 0 +_08077944: .4byte gUnk_0811BE48 +_08077948: .4byte 0x00000145 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078008.inc b/asm/non_matching/playerUtils/sub_08078008.inc new file mode 100644 index 00000000..2fb00238 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078008.inc @@ -0,0 +1,56 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r6, _08078060 @ =gSave + adds r5, r6, #0 + adds r5, #0xb4 + ldrb r0, [r5] + bl ItemIsSword + cmp r0, #0 + bne _0807802C + adds r5, r6, #0 + adds r5, #0xb5 + ldrb r0, [r5] + bl ItemIsSword + movs r2, #0 + cmp r0, #0 + beq _0807802E +_0807802C: + ldrb r2, [r5] +_0807802E: + subs r0, r2, #1 + cmp r0, #1 + bhi _08078036 + movs r2, #0 +_08078036: + cmp r2, #0 + beq _08078068 + ldr r0, _08078064 @ =gPlayerState + ldrb r1, [r0, #0x1b] + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _08078068 + ldrb r0, [r4, #1] + adds r0, #1 + strb r0, [r4, #1] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x14 + ble _0807806C + movs r0, #0xa + strb r0, [r4, #1] + movs r0, #3 + strb r0, [r4] + strb r2, [r4, #2] + b _0807806C + .align 2, 0 +_08078060: .4byte gSave +_08078064: .4byte gPlayerState +_08078068: + movs r0, #0 + strb r0, [r4, #1] +_0807806C: + movs r0, #0 + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078180.inc b/asm/non_matching/playerUtils/sub_08078180.inc new file mode 100644 index 00000000..ba6be0b6 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078180.inc @@ -0,0 +1,157 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r0, _080781C8 @ =gUnk_0200AF00 + adds r1, r0, #0 + adds r1, #0x2f + ldrb r1, [r1] + adds r6, r0, #0 + cmp r1, #0 + beq _08078192 + b _080782BC +_08078192: + movs r4, #0 + ldr r5, _080781CC @ =gPlayerState + ldrb r0, [r5, #2] + cmp r0, #0 + beq _0807819E + b _080782B6 +_0807819E: + ldr r0, [r5, #0x30] + ldr r1, _080781D0 @ =0x00104D00 + ands r0, r1 + cmp r0, #0 + beq _080781AA + b _080782B6 +_080781AA: + ldrb r0, [r5, #5] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bhi _080781D4 + adds r1, r6, #0 + adds r1, #0x2e + ldrb r0, [r1] + movs r4, #3 + cmp r0, #0 + bne _080781C4 + b _080782B6 +_080781C4: + adds r4, r0, #0 + b _080782B6 + .align 2, 0 +_080781C8: .4byte gUnk_0200AF00 +_080781CC: .4byte gPlayerState +_080781D0: .4byte 0x00104D00 +_080781D4: + adds r1, r6, #0 + adds r1, #0x2d + ldrb r0, [r1] + cmp r0, #0 + bne _080781C4 + bl sub_080784E4 + adds r1, r0, #0 + ldr r0, [r1, #8] + adds r0, #0x39 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08078278 + ldrb r0, [r1, #1] + subs r0, #1 + cmp r0, #9 + bhi _080782B6 + lsls r0, r0, #2 + ldr r1, _08078204 @ =_08078208 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08078204: .4byte _08078208 +_08078208: @ jump table + .4byte _08078230 @ case 0 + .4byte _080782B6 @ case 1 + .4byte _08078254 @ case 2 + .4byte _080782B6 @ case 3 + .4byte _08078254 @ case 4 + .4byte _08078254 @ case 5 + .4byte _08078230 @ case 6 + .4byte _0807823C @ case 7 + .4byte _08078260 @ case 8 + .4byte _0807826C @ case 9 +_08078230: + movs r4, #7 + ldr r6, _08078238 @ =gUnk_0200AF00 + b _080782B6 + .align 2, 0 +_08078238: .4byte gUnk_0200AF00 +_0807823C: + ldr r0, _0807824C @ =gRoomVars + ldrb r0, [r0, #6] + ldr r6, _08078250 @ =gUnk_0200AF00 + cmp r0, #0 + bne _080782B6 + movs r4, #9 + b _080782B6 + .align 2, 0 +_0807824C: .4byte gRoomVars +_08078250: .4byte gUnk_0200AF00 +_08078254: + movs r4, #6 + ldr r6, _0807825C @ =gUnk_0200AF00 + b _080782B6 + .align 2, 0 +_0807825C: .4byte gUnk_0200AF00 +_08078260: + movs r4, #5 + ldr r6, _08078268 @ =gUnk_0200AF00 + b _080782B6 + .align 2, 0 +_08078268: .4byte gUnk_0200AF00 +_0807826C: + movs r4, #2 + ldr r6, _08078274 @ =gUnk_0200AF00 + b _080782B6 + .align 2, 0 +_08078274: .4byte gUnk_0200AF00 +_08078278: + bl sub_080789A8 + cmp r0, #0 + beq _080782A4 + adds r0, r5, #0 + adds r0, #0xa8 + ldrb r0, [r0] + cmp r0, #0xe + beq _080782BC + ldr r1, _080782A0 @ =gUnk_03003BE0 + ldrb r0, [r1, #1] + movs r4, #9 + cmp r0, #2 + bne _080782B6 + ldr r0, [r1, #8] + ldrb r0, [r0, #0x16] + cmp r0, #1 + bne _080782B6 + movs r4, #8 + b _080782B6 + .align 2, 0 +_080782A0: .4byte gUnk_03003BE0 +_080782A4: + adds r0, r5, #0 + adds r0, #0xa8 + ldrb r0, [r0] + cmp r0, #1 + bne _080782B6 + ldrb r0, [r5, #0x1a] + cmp r0, #0 + bne _080782B6 + movs r4, #0xc +_080782B6: + adds r0, r6, #0 + adds r0, #0x2c + strb r4, [r0] +_080782BC: + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080782C0.inc b/asm/non_matching/playerUtils/sub_080782C0.inc new file mode 100644 index 00000000..bc836d54 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080782C0.inc @@ -0,0 +1,238 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r1, _080782D8 @ =gPlayerState + adds r2, r1, #0 + adds r2, #0xa8 + ldrb r0, [r2] + adds r4, r1, #0 + cmp r0, #0 + bne _080782DC + adds r0, r4, #0 + adds r0, #0xa9 + ldrb r0, [r0] + b _080782DE + .align 2, 0 +_080782D8: .4byte gPlayerState +_080782DC: + ldrb r0, [r2] +_080782DE: + subs r0, #2 + cmp r0, #0x14 + bhi _08078348 + lsls r0, r0, #2 + ldr r1, _080782F0 @ =_080782F4 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080782F0: .4byte _080782F4 +_080782F4: @ jump table + .4byte _080784AC @ case 0 + .4byte _080784AC @ case 1 + .4byte _08078348 @ case 2 + .4byte _08078348 @ case 3 + .4byte _08078348 @ case 4 + .4byte _08078348 @ case 5 + .4byte _08078348 @ case 6 + .4byte _08078348 @ case 7 + .4byte _08078348 @ case 8 + .4byte _08078348 @ case 9 + .4byte _080784AC @ case 10 + .4byte _08078348 @ case 11 + .4byte _08078348 @ case 12 + .4byte _08078348 @ case 13 + .4byte _08078348 @ case 14 + .4byte _08078348 @ case 15 + .4byte _080784AC @ case 16 + .4byte _08078348 @ case 17 + .4byte _08078348 @ case 18 + .4byte _080784AC @ case 19 + .4byte _080784AC @ case 20 +_08078348: + adds r0, r4, #0 + adds r0, #0x27 + adds r2, r4, #0 + adds r2, #0x26 + ldrb r1, [r0] + ldrb r0, [r2] + orrs r0, r1 + cmp r0, #0 + beq _0807835C + b _080784AC +_0807835C: + ldrb r0, [r4, #0x12] + cmp r0, #1 + bne _08078376 + ldrb r0, [r4, #0x14] + cmp r0, #0 + bne _0807836A + b _080784AC +_0807836A: + bl CanDispEzloMessage + cmp r0, #0 + beq _08078374 + b _080784C4 +_08078374: + b _080784AC +_08078376: + ldr r0, [r4, #0x30] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _08078384 + b _080784AC +_08078384: + bl CanDispEzloMessage + cmp r0, #0 + beq _0807838E + b _080784C4 +_0807838E: + bl sub_080784E4 + ldr r6, [r0, #8] + cmp r6, #0 + bne _0807839A + b _080784AC +_0807839A: + ldrb r0, [r4, #5] + cmp r0, #0 + beq _080783B6 + cmp r0, #4 + beq _080783A6 + b _080784AC +_080783A6: + ldr r0, _08078400 @ =gPlayerEntity + ldr r0, [r0, #0x74] + ldr r0, [r0, #0x54] + ldrh r1, [r0, #8] + ldr r0, _08078404 @ =0x00000206 + cmp r1, r0 + beq _080783B6 + b _080784AC +_080783B6: + ldr r2, _08078408 @ =gPlayerState + adds r0, r2, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #5 + ands r0, r1 + adds r4, r2, #0 + cmp r0, #0 + beq _0807842C + ldr r5, _0807840C @ =gUnk_03003DF0 + ldr r0, [r5, #4] + ldrb r0, [r0, #3] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x63 + bhi _0807842C + movs r0, #0 + bl sub_0801E738 + ldr r0, _08078410 @ =gSave + ldr r1, _08078414 @ =0x0000012B + adds r0, r0, r1 + ldrb r0, [r0] + cmp r0, #0 + beq _08078418 + ldr r1, [r5, #4] + ldrb r0, [r1, #3] + strb r0, [r5, #2] + ldr r0, [r1, #8] + adds r0, #0x39 + movs r1, #2 + strb r1, [r0] + movs r0, #7 + strb r0, [r4, #0xc] + b _08078420 + .align 2, 0 +_08078400: .4byte gPlayerEntity +_08078404: .4byte 0x00000206 +_08078408: .4byte gPlayerState +_0807840C: .4byte gUnk_03003DF0 +_08078410: .4byte gSave +_08078414: .4byte 0x0000012B +_08078418: + ldr r0, _08078428 @ =0x00000B65 + movs r1, #0 + bl CreateEzloHint +_08078420: + movs r0, #0x13 + bl ForceSetPlayerState + b _080784C4 + .align 2, 0 +_08078428: .4byte 0x00000B65 +_0807842C: + adds r0, r4, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #0x88 + ands r0, r1 + cmp r0, #0 + beq _080784AC + ldr r0, _08078450 @ =gUnk_03003DF0 + ldr r0, [r0, #4] + ldrb r0, [r0, #1] + cmp r0, #0xa + bhi _080784C4 + lsls r0, r0, #2 + ldr r1, _08078454 @ =_08078458 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08078450: .4byte gUnk_03003DF0 +_08078454: .4byte _08078458 +_08078458: @ jump table + .4byte _080784C4 @ case 0 + .4byte _08078484 @ case 1 + .4byte _080784C4 @ case 2 + .4byte _0807848E @ case 3 + .4byte _080784C4 @ case 4 + .4byte _0807848E @ case 5 + .4byte _08078484 @ case 6 + .4byte _0807848E @ case 7 + .4byte _080784A4 @ case 8 + .4byte _08078484 @ case 9 + .4byte _08078484 @ case 10 +_08078484: + movs r0, #7 + strb r0, [r4, #0xc] + movs r0, #0x13 + bl ForceSetPlayerState +_0807848E: + adds r1, r6, #0 + adds r1, #0x39 + movs r2, #0 + movs r0, #1 + strb r0, [r1] + ldr r0, _080784A0 @ =gUnk_03003DF0 + strb r2, [r0, #2] + b _080784C4 + .align 2, 0 +_080784A0: .4byte gUnk_03003DF0 +_080784A4: + ldr r2, _080784B0 @ =gRoomVars + ldrb r0, [r2, #6] + cmp r0, #0 + beq _080784B4 +_080784AC: + movs r0, #0 + b _080784C6 + .align 2, 0 +_080784B0: .4byte gRoomVars +_080784B4: + adds r1, r6, #0 + adds r1, #0x39 + movs r0, #1 + strb r0, [r1] + ldrb r0, [r6, #0xa] + strb r0, [r2, #6] + ldrb r0, [r6, #0xb] + strb r0, [r2, #7] +_080784C4: + movs r0, #1 +_080784C6: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080784E4.inc b/asm/non_matching/playerUtils/sub_080784E4.inc new file mode 100644 index 00000000..109b7fd3 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080784E4.inc @@ -0,0 +1,315 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _080784FC @ =gUnk_03003DF0 + ldrb r1, [r0] + mov r8, r0 + cmp r1, #0 + beq _08078500 + ldr r0, [r0, #4] + b _0807876A + .align 2, 0 +_080784FC: .4byte gUnk_03003DF0 +_08078500: + ldr r2, _08078528 @ =gPlayerState + adds r0, r2, #0 + adds r0, #0x27 + adds r3, r2, #0 + adds r3, #0x26 + ldrb r1, [r0] + ldrb r0, [r3] + orrs r0, r1 + cmp r0, #0 + bne _08078598 + adds r1, r2, #0 + adds r1, #0xa8 + ldrb r0, [r1] + cmp r0, #0 + bne _0807852C + adds r0, r2, #0 + adds r0, #0xa9 + ldrb r0, [r0] + b _0807852E + .align 2, 0 +_08078528: .4byte gPlayerState +_0807852C: + ldrb r0, [r1] +_0807852E: + subs r0, #2 + cmp r0, #0x14 + bhi _080785B0 + lsls r0, r0, #2 + ldr r1, _08078540 @ =_08078544 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08078540: .4byte _08078544 +_08078544: @ jump table + .4byte _08078598 @ case 0 + .4byte _08078598 @ case 1 + .4byte _080785B0 @ case 2 + .4byte _080785B0 @ case 3 + .4byte _080785B0 @ case 4 + .4byte _080785B0 @ case 5 + .4byte _080785B0 @ case 6 + .4byte _080785B0 @ case 7 + .4byte _080785B0 @ case 8 + .4byte _080785B0 @ case 9 + .4byte _080785B0 @ case 10 + .4byte _080785B0 @ case 11 + .4byte _080785B0 @ case 12 + .4byte _080785B0 @ case 13 + .4byte _080785B0 @ case 14 + .4byte _080785B0 @ case 15 + .4byte _08078598 @ case 16 + .4byte _080785B0 @ case 17 + .4byte _080785B0 @ case 18 + .4byte _08078598 @ case 19 + .4byte _08078598 @ case 20 +_08078598: + movs r0, #0xff + mov r1, r8 + strb r0, [r1, #3] + ldr r0, _080785AC @ =gUnk_0811C000 + str r0, [r1, #4] + movs r1, #1 + mov r2, r8 + strb r1, [r2] + b _0807876A + .align 2, 0 +_080785AC: .4byte gUnk_0811C000 +_080785B0: + ldr r0, [r2, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _080785F0 + bl HasDungeonMap + cmp r0, #0 + beq _080785C4 + movs r0, #1 +_080785C4: + adds r7, r0, #0 + bl HasDungeonCompass + cmp r0, #0 + beq _080785D2 + movs r0, #2 + orrs r7, r0 +_080785D2: + ldr r3, _080785E4 @ =gPlayerEntity + ldrb r0, [r3, #0x14] + movs r1, #6 + ands r1, r0 + ldr r0, _080785E8 @ =gUnk_0811C00C + adds r2, r1, r0 + ldr r5, _080785EC @ =gUnk_03003DF0 + mov r8, r5 + b _080785FE + .align 2, 0 +_080785E4: .4byte gPlayerEntity +_080785E8: .4byte gUnk_0811C00C +_080785EC: .4byte gUnk_03003DF0 +_080785F0: + ldr r3, _08078624 @ =gPlayerEntity + ldrb r0, [r3, #0x14] + movs r1, #6 + ands r1, r0 + ldr r0, _08078628 @ =gUnk_0811C014 + adds r2, r1, r0 + movs r7, #0 +_080785FE: + mov ip, r3 + mov r0, ip + movs r3, #0x2e + ldrsh r1, [r0, r3] + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + mov sl, r1 + mov r5, ip + movs r0, #0x32 + ldrsh r1, [r5, r0] + movs r0, #1 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + mov sb, r1 + movs r6, #0 + ldr r5, _0807862C @ =gUnk_03003DF8 + b _08078724 + .align 2, 0 +_08078624: .4byte gPlayerEntity +_08078628: .4byte gUnk_0811C014 +_0807862C: .4byte gUnk_03003DF8 +_08078630: + ldrb r1, [r5] + movs r3, #1 + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + bne _0807864E + mov r0, ip + adds r0, #0x38 + adds r1, r2, #0 + adds r1, #0x38 + ldrb r2, [r0] + ldrb r0, [r1] + ands r0, r2 + cmp r0, #0 + beq _08078714 +_0807864E: + ldrb r1, [r5, #2] + mov r2, ip + ldrb r0, [r2, #0x14] + lsrs r0, r0, #1 + asrs r1, r0 + ands r1, r3 + cmp r1, #0 + bne _08078714 + ldrb r0, [r5, #1] + cmp r0, #0xa + bhi _080786D4 + lsls r0, r0, #2 + ldr r1, _08078670 @ =_08078674 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08078670: .4byte _08078674 +_08078674: @ jump table + .4byte _08078714 @ case 0 + .4byte _080786A0 @ case 1 + .4byte _080786C4 @ case 2 + .4byte _080786A0 @ case 3 + .4byte _080786A0 @ case 4 + .4byte _080786C8 @ case 5 + .4byte _080786CC @ case 6 + .4byte _080786B4 @ case 7 + .4byte _080786A0 @ case 8 + .4byte _080786A0 @ case 9 + .4byte _080786D4 @ case 10 +_080786A0: + ldr r0, _080786B0 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08078714 + b _080786D4 + .align 2, 0 +_080786B0: .4byte gPlayerState +_080786B4: + ldr r0, _080786C0 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + b _080786D0 + .align 2, 0 +_080786C0: .4byte gPlayerState +_080786C4: + ldrb r0, [r5, #3] + b _080786D0 +_080786C8: + movs r0, #1 + b _080786CE +_080786CC: + movs r0, #2 +_080786CE: + ands r0, r7 +_080786D0: + cmp r0, #0 + beq _08078714 +_080786D4: + ldr r0, [r5, #8] + movs r1, #0x2e + ldrsh r3, [r0, r1] + movs r2, #0x32 + ldrsh r4, [r0, r2] + ldr r1, [r5, #4] + cmp r1, #0 + beq _080786F4 + movs r0, #0 + ldrsb r0, [r1, r0] + adds r3, r3, r0 + movs r0, #1 + ldrsb r0, [r1, r0] + adds r4, r4, r0 + adds r2, r1, #2 + b _080786F8 +_080786F4: + ldr r0, [r0, #0x48] + adds r2, r0, #6 +_080786F8: + ldrb r1, [r2] + mov r5, sl + adds r0, r1, r5 + subs r0, r0, r3 + lsls r1, r1, #1 + cmp r0, r1 + bhs _08078714 + ldrb r1, [r2, #1] + mov r2, sb + adds r0, r1, r2 + subs r0, r0, r4 + lsls r1, r1, #1 + cmp r0, r1 + blo _0807873A +_08078714: + adds r6, #1 + cmp r6, #0x1f + bhi _08078758 + lsls r0, r6, #1 + adds r0, r0, r6 + lsls r0, r0, #2 + ldr r3, _08078754 @ =gUnk_03003DF8 + adds r5, r0, r3 +_08078724: + ldr r2, [r5, #8] + cmp r2, #0 + beq _08078714 + adds r0, r2, #0 + adds r0, #0x39 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + blt _0807873A + b _08078630 +_0807873A: + cmp r6, #0x1f + bhi _08078758 + mov r5, r8 + strb r6, [r5, #3] + lsls r0, r6, #1 + adds r0, r0, r6 + lsls r0, r0, #2 + mov r1, r8 + adds r1, #8 + adds r0, r0, r1 + str r0, [r5, #4] + b _08078762 + .align 2, 0 +_08078754: .4byte gUnk_03003DF8 +_08078758: + movs r0, #0xff + mov r1, r8 + strb r0, [r1, #3] + ldr r0, _08078774 @ =gUnk_0811C000 + str r0, [r1, #4] +_08078762: + movs r0, #1 + mov r2, r8 + strb r0, [r2] + ldr r0, [r2, #4] +_0807876A: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08078774: .4byte gUnk_0811C000 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078930.inc b/asm/non_matching/playerUtils/sub_08078930.inc new file mode 100644 index 00000000..8e5c252f --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078930.inc @@ -0,0 +1,20 @@ + .syntax unified + push {lr} + adds r3, r0, #0 + ldr r2, _08078950 @ =gUnk_03003BE0 + ldrb r0, [r2, #2] + cmp r0, #0x1f + bhi _0807894C + lsls r0, r0, #2 + adds r1, r2, #0 + adds r1, #0xc + adds r0, r0, r1 + str r3, [r0] + ldrb r0, [r2, #2] + adds r0, #1 + strb r0, [r2, #2] +_0807894C: + pop {pc} + .align 2, 0 +_08078950: .4byte gUnk_03003BE0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078954.inc b/asm/non_matching/playerUtils/sub_08078954.inc new file mode 100644 index 00000000..57002a64 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078954.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + movs r4, #0 + ldr r0, _08078970 @ =gUnk_03003BE0 + ldrb r1, [r0, #2] + adds r2, r0, #0 + cmp r4, r1 + bhs _080789A6 + ldr r0, [r2, #0xc] + cmp r0, r5 + bne _08078974 + subs r0, r1, #1 + b _0807898C + .align 2, 0 +_08078970: .4byte gUnk_03003BE0 +_08078974: + adds r4, #1 + ldrb r3, [r2, #2] + cmp r4, r3 + bhs _080789A6 + lsls r0, r4, #2 + adds r1, r2, #0 + adds r1, #0xc + adds r0, r0, r1 + ldr r0, [r0] + cmp r0, r5 + bne _08078974 + subs r0, r3, #1 +_0807898C: + strb r0, [r2, #2] + ldrb r0, [r2, #2] + cmp r4, r0 + bhs _080789A6 + lsls r0, r4, #2 + adds r0, #0xc + adds r1, r0, r2 +_0807899A: + ldr r0, [r1, #4] + stm r1!, {r0} + adds r4, #1 + ldrb r0, [r2, #2] + cmp r4, r0 + blo _0807899A +_080789A6: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080789A8.inc b/asm/non_matching/playerUtils/sub_080789A8.inc new file mode 100644 index 00000000..7f8c60d6 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080789A8.inc @@ -0,0 +1,116 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r1, _080789BC @ =gUnk_03003BE0 + ldrb r0, [r1] + cmp r0, #0 + beq _080789C0 + ldrb r0, [r1, #1] + b _08078A88 + .align 2, 0 +_080789BC: .4byte gUnk_03003BE0 +_080789C0: + ldr r0, _08078A5C @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08078A56 + ldr r0, _08078A60 @ =gPlayerEntity + bl sub_080002D0 + adds r4, r0, #0 + cmp r4, #0xf + bls _080789E6 + ldr r0, _08078A64 @ =gUnk_080084BC + adds r1, r4, #0 + subs r1, #0x10 + adds r1, r1, r0 + ldrb r0, [r1] + cmp r0, #0xf + beq _08078A56 +_080789E6: + ldr r0, _08078A5C @ =gPlayerState + ldrb r0, [r0, #0x12] + cmp r0, #0x12 + beq _08078A56 + ldr r3, _08078A68 @ =gUnk_03003BE0 + movs r0, #1 + strb r0, [r3] + ldrb r4, [r3, #2] + cmp r4, #0 + beq _08078A2E + ldr r2, _08078A60 @ =gPlayerEntity + ldrb r1, [r2, #0x14] + movs r0, #6 + ands r0, r1 + ldr r1, _08078A6C @ =gUnk_0811BFE0 + adds r6, r0, r1 + adds r7, r2, #0 + adds r3, #8 + mov r8, r3 +_08078A0C: + lsls r0, r4, #2 + mov r1, r8 + adds r5, r0, r1 + ldr r1, [r5] + cmp r1, #0 + beq _08078A26 + ldrb r2, [r6] + ldrb r3, [r6, #1] + adds r0, r7, #0 + bl sub_0807A180 + cmp r0, #0 + bne _08078A74 +_08078A26: + subs r4, #1 + ldr r7, _08078A60 @ =gPlayerEntity + cmp r4, #0 + bne _08078A0C +_08078A2E: + ldr r0, _08078A60 @ =gPlayerEntity + ldrb r1, [r0, #0x14] + movs r2, #6 + ands r2, r1 + ldr r1, _08078A70 @ =gUnk_08007DF4 + adds r2, r2, r1 + movs r1, #0 + ldrsb r1, [r2, r1] + ldrb r2, [r2, #1] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + bl sub_0800029C + ldr r4, _08078A68 @ =gUnk_03003BE0 + strh r0, [r4, #4] + movs r1, #6 + bl sub_0806FC24 + cmp r0, #0 + bne _08078A84 +_08078A56: + movs r0, #0 + b _08078A88 + .align 2, 0 +_08078A5C: .4byte gPlayerState +_08078A60: .4byte gPlayerEntity +_08078A64: .4byte gUnk_080084BC +_08078A68: .4byte gUnk_03003BE0 +_08078A6C: .4byte gUnk_0811BFE0 +_08078A70: .4byte gUnk_08007DF4 +_08078A74: + mov r0, r8 + subs r0, #8 + ldr r1, [r5] + str r1, [r0, #8] + movs r1, #2 + strb r1, [r0, #1] + movs r0, #2 + b _08078A88 +_08078A84: + movs r0, #1 + strb r0, [r4, #1] +_08078A88: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078CD0.inc b/asm/non_matching/playerUtils/sub_08078CD0.inc new file mode 100644 index 00000000..806d1494 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078CD0.inc @@ -0,0 +1,73 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r4, [r5, #0x70] + ldrh r0, [r5, #0x36] + subs r0, #1 + strh r0, [r4, #0x36] + ldrb r1, [r5, #0x1b] + lsrs r1, r1, #6 + lsls r1, r1, #6 + ldrb r2, [r4, #0x1b] + movs r0, #0x3f + ands r0, r2 + orrs r0, r1 + strb r0, [r4, #0x1b] + adds r0, r5, #0 + adds r0, #0x38 + ldrb r1, [r0] + adds r0, r4, #0 + adds r0, #0x38 + strb r1, [r0] + ldr r1, _08078D28 @ =gUnk_0811C01C + ldr r0, _08078D2C @ =gPlayerState + ldr r0, [r0, #0x2c] + ldrb r0, [r0, #0x1e] + adds r0, r0, r1 + ldrb r2, [r0] + ldr r3, _08078D30 @ =gUnk_0811C0B0 + ldrb r1, [r4, #0x1c] + movs r0, #0x30 + ands r0, r1 + lsrs r0, r0, #2 + adds r0, r0, r3 + lsls r2, r2, #1 + ldr r0, [r0] + adds r2, r0, r2 + ldrb r0, [r5, #0x18] + lsls r0, r0, #0x19 + cmp r0, #0 + bge _08078D34 + movs r1, #0 + ldrsb r1, [r2, r1] + ldrh r0, [r5, #0x2e] + subs r0, r0, r1 + b _08078D3C + .align 2, 0 +_08078D28: .4byte gUnk_0811C01C +_08078D2C: .4byte gPlayerState +_08078D30: .4byte gUnk_0811C0B0 +_08078D34: + movs r0, #0 + ldrsb r0, [r2, r0] + ldrh r1, [r5, #0x2e] + adds r0, r0, r1 +_08078D3C: + strh r0, [r4, #0x2e] + movs r0, #1 + ldrsb r0, [r2, r0] + ldrh r1, [r5, #0x32] + adds r0, r0, r1 + strh r0, [r4, #0x32] + adds r0, r5, #0 + movs r1, #0 + adds r2, r4, #0 + bl sub_0806FEBC + ldr r1, [r4, #0x50] + cmp r1, #0 + beq _08078D5E + adds r0, r4, #0 + bl CopyPosition +_08078D5E: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078D60.inc b/asm/non_matching/playerUtils/sub_08078D60.inc new file mode 100644 index 00000000..2ffb6b39 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078D60.inc @@ -0,0 +1,152 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r1, _08078DCC @ =gPlayerEntity + ldr r0, [r1, #0x74] + ldr r4, [r0, #0x54] + ldrb r0, [r4, #0xc] + adds r6, r1, #0 + cmp r0, #2 + beq _08078D72 + b _08078E82 +_08078D72: + adds r0, r6, #0 + adds r0, #0x63 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldrh r1, [r6, #0x36] + adds r0, r0, r1 + strh r0, [r4, #0x36] + ldrb r1, [r6, #0x1b] + lsrs r1, r1, #6 + lsls r1, r1, #6 + ldrb r2, [r4, #0x1b] + movs r0, #0x3f + ands r0, r2 + orrs r0, r1 + strb r0, [r4, #0x1b] + adds r0, r6, #0 + adds r0, #0x38 + ldrb r1, [r0] + adds r0, r4, #0 + adds r0, #0x38 + strb r1, [r0] + adds r0, r6, #0 + adds r0, #0x5a + ldrb r0, [r0] + movs r2, #0x7f + ands r2, r0 + ldr r1, _08078DD0 @ =gUnk_0811C0E8 + ldrb r0, [r4, #0x16] + lsrs r0, r0, #4 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + ldrb r0, [r6, #0x18] + lsls r0, r0, #0x19 + cmp r0, #0 + bge _08078DD4 + adds r2, r1, r2 + movs r1, #0 + ldrsb r1, [r2, r1] + ldrh r0, [r6, #0x2e] + subs r0, r0, r1 + strh r0, [r4, #0x2e] + adds r1, r2, #0 + b _08078DE0 + .align 2, 0 +_08078DCC: .4byte gPlayerEntity +_08078DD0: .4byte gUnk_0811C0E8 +_08078DD4: + adds r1, r1, r2 + movs r0, #0 + ldrsb r0, [r1, r0] + ldrh r2, [r6, #0x2e] + adds r0, r0, r2 + strh r0, [r4, #0x2e] +_08078DE0: + movs r0, #1 + ldrsb r0, [r1, r0] + ldrh r1, [r4, #0x36] + adds r0, r0, r1 + strh r0, [r4, #0x36] + adds r5, r6, #0 + ldrh r0, [r5, #0x32] + strh r0, [r4, #0x32] + adds r0, r5, #0 + adds r1, r4, #0 + bl SortEntityAbove + ldr r0, _08078E34 @ =gPlayerState + ldrb r0, [r0, #5] + cmp r0, #4 + bne _08078E4C + ldrb r1, [r5, #0x19] + lsrs r1, r1, #6 + lsls r1, r1, #6 + ldrb r2, [r4, #0x19] + movs r0, #0x3f + ands r0, r2 + orrs r0, r1 + strb r0, [r4, #0x19] + adds r0, r4, #0 + bl sub_0806F8DC + ldrb r1, [r4, #0x16] + movs r0, #0xf + ands r0, r1 + cmp r0, #2 + bne _08078E82 + ldr r0, _08078E38 @ =gRoomTransition + ldr r1, [r0] + movs r0, #3 + ands r1, r0 + cmp r1, #1 + beq _08078E3C + cmp r1, #3 + beq _08078E44 + b _08078E82 + .align 2, 0 +_08078E34: .4byte gPlayerState +_08078E38: .4byte gRoomTransition +_08078E3C: + ldrh r0, [r4, #0x2e] + adds r0, #1 + strh r0, [r4, #0x2e] + b _08078E82 +_08078E44: + ldrh r0, [r4, #0x2e] + subs r0, #1 + strh r0, [r4, #0x2e] + b _08078E82 +_08078E4C: + ldrb r0, [r5, #0x14] + lsrs r0, r0, #1 + cmp r0, #0 + beq _08078E62 + adds r0, r5, #0 + adds r0, #0x29 + ldrb r1, [r0] + lsls r1, r1, #0x1d + lsrs r1, r1, #0x1d + subs r1, #1 + b _08078E6E +_08078E62: + adds r0, r6, #0 + adds r0, #0x29 + ldrb r1, [r0] + lsls r1, r1, #0x1d + lsrs r1, r1, #0x1d + adds r1, #1 +_08078E6E: + adds r3, r4, #0 + adds r3, #0x29 + movs r0, #7 + ands r1, r0 + ldrb r2, [r3] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] +_08078E82: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08078FB0.inc b/asm/non_matching/playerUtils/sub_08078FB0.inc new file mode 100644 index 00000000..4dc70f0c --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08078FB0.inc @@ -0,0 +1,99 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r5, _08078FE0 @ =gPlayerState + ldrb r1, [r5, #6] + movs r6, #0x80 + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _08078FCA + adds r1, r5, #0 + adds r1, #0x35 + movs r0, #0xff + strb r0, [r1] +_08078FCA: + adds r0, r4, #0 + bl sub_08079064 + ldr r1, [r5, #0x30] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08078FE4 + movs r2, #0x58 + b _08078FFA + .align 2, 0 +_08078FE0: .4byte gPlayerState +_08078FE4: + ands r1, r6 + cmp r1, #0 + beq _08078FEE + movs r2, #0x18 + b _08078FFA +_08078FEE: + ldrh r0, [r5, #8] + lsrs r0, r0, #8 + movs r2, #0xb8 + cmp r0, #7 + bne _08078FFA + movs r2, #0x34 +_08078FFA: + ldr r0, _08079014 @ =gPlayerState + adds r3, r0, #0 + ldrb r1, [r0, #8] + cmp r2, r1 + bls _08079040 + ldrb r0, [r4, #0x14] + adds r2, r0, #0 + cmp r2, #4 + bls _08079018 + ldrb r0, [r4, #0x18] + movs r1, #0x40 + orrs r0, r1 + b _08079020 + .align 2, 0 +_08079014: .4byte gPlayerState +_08079018: + ldrb r1, [r4, #0x18] + movs r0, #0x41 + rsbs r0, r0, #0 + ands r0, r1 +_08079020: + strb r0, [r4, #0x18] + ldr r0, [r3, #0x30] + movs r1, #0x80 + lsls r1, r1, #0xc + ands r0, r1 + cmp r0, #0 + beq _08079036 + ldrh r1, [r3, #8] + ldrb r0, [r4, #0x14] + adds r2, r1, r0 + b _08079042 +_08079036: + lsls r0, r2, #0x18 + lsrs r0, r0, #0x19 + ldrh r3, [r3, #8] + adds r2, r0, r3 + b _08079042 +_08079040: + ldrh r2, [r0, #8] +_08079042: + ldrh r0, [r4, #0x12] + lsls r0, r0, #8 + adds r1, r4, #0 + adds r1, #0x58 + ldrb r1, [r1] + orrs r0, r1 + cmp r2, r0 + beq _08079062 + lsrs r0, r2, #8 + strh r0, [r4, #0x12] + movs r0, #0xff + ands r2, r0 + adds r0, r4, #0 + adds r1, r2, #0 + bl InitAnimationForceUpdate +_08079062: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08079064.inc b/asm/non_matching/playerUtils/sub_08079064.inc new file mode 100644 index 00000000..3261523d --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079064.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r6, r0, #0 + ldr r0, _0807909C @ =gPlayerState + ldr r1, [r0, #0x30] + ldr r2, _080790A0 @ =0x00100080 + ands r1, r2 + adds r5, r0, #0 + cmp r1, #0 + bne _080790DE + movs r3, #0 + movs r2, #0 + ldr r1, _080790A4 @ =gUnk_03000B80 +_0807907C: + ldrb r0, [r1, #0xf] + cmp r0, r3 + bls _08079086 + adds r3, r0, #0 + ldrh r4, [r1, #0x10] +_08079086: + adds r1, #0x1c + adds r2, #1 + cmp r2, #3 + bls _0807907C + adds r2, r5, #0 + ldrb r0, [r2, #0xe] + cmp r0, r3 + bhs _080790A8 + strh r4, [r2, #8] + b _080790DE + .align 2, 0 +_0807909C: .4byte gPlayerState +_080790A0: .4byte 0x00100080 +_080790A4: .4byte gUnk_03000B80 +_080790A8: + adds r0, r2, #0 + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080790C0 + ldr r0, _080790BC @ =0x000002BE + strh r0, [r2, #8] + b _080790DE + .align 2, 0 +_080790BC: .4byte 0x000002BE +_080790C0: + ldrh r1, [r5, #8] + movs r0, #0xc1 + lsls r0, r0, #3 + cmp r1, r0 + beq _080790D8 + movs r0, #0x82 + lsls r0, r0, #1 + cmp r1, r0 + beq _080790D8 + ldr r0, _080790E0 @ =0x00000404 + cmp r1, r0 + bne _080790DE +_080790D8: + adds r0, r6, #0 + bl sub_080790E4 +_080790DE: + pop {r4, r5, r6, pc} + .align 2, 0 +_080790E0: .4byte 0x00000404 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080792D8.inc b/asm/non_matching/playerUtils/sub_080792D8.inc new file mode 100644 index 00000000..7d6186df --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080792D8.inc @@ -0,0 +1,139 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r5, _08079344 @ =gPlayerEntity + adds r3, r5, #0 + adds r3, #0x42 + ldrb r0, [r3] + cmp r0, #0 + beq _080793E0 + ldrb r2, [r5, #0xc] + cmp r2, #0xb + beq _08079338 + ldr r0, _08079348 @ =gPlayerState + ldrb r1, [r0, #0x1e] + adds r6, r0, #0 + cmp r1, #0 + bne _08079338 + ldrb r0, [r6, #5] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _08079338 + ldrb r0, [r6, #2] + cmp r0, #0 + bne _08079338 + ldrb r0, [r6, #0x12] + cmp r0, #0xff + beq _08079338 + ldrb r1, [r6, #7] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08079338 + adds r0, r6, #0 + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #0xf + ands r0, r1 + subs r0, #1 + cmp r0, #0 + bgt _08079338 + cmp r2, #3 + beq _08079338 + ldr r1, [r6, #0x30] + movs r0, #0x80 + lsls r0, r0, #0xb + ands r1, r0 + cmp r1, #0 + beq _0807934C +_08079338: + adds r1, r5, #0 + adds r1, #0x42 + movs r0, #0 + strb r0, [r1] + b _080793E0 + .align 2, 0 +_08079344: .4byte gPlayerEntity +_08079348: .4byte gPlayerState +_0807934C: + cmp r2, #0x1d + bne _0807935E + adds r0, r5, #0 + adds r0, #0x3e + ldrb r0, [r0] + cmp r0, #0x10 + beq _0807935E + strb r1, [r3] + b _080793E0 +_0807935E: + adds r0, r5, #0 + adds r0, #0x42 + ldrb r3, [r0] + movs r1, #0 + ldrsb r1, [r0, r1] + adds r2, r0, #0 + cmp r1, #0 + ble _08079372 + subs r0, r3, #1 + b _08079374 +_08079372: + adds r0, r3, #1 +_08079374: + strb r0, [r2] + ldrb r0, [r2] + cmp r0, #0 + beq _080793E0 + adds r4, r6, #0 + ldrb r0, [r4, #7] + movs r1, #0xdf + ands r1, r0 + strb r1, [r4, #7] + adds r0, r5, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + ble _080793CA + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _080793CA + ldr r0, [r4, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _080793CA + ldrb r0, [r4, #2] + cmp r0, #0 + bne _080793CA + bl ResetPlayer + ldr r0, [r4, #0x30] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + bne _080793C4 + movs r0, #0x8a + lsls r0, r0, #1 + strh r0, [r4, #8] + b _080793CA +_080793C4: + movs r0, #0x83 + lsls r0, r0, #3 + strh r0, [r6, #8] +_080793CA: + movs r1, #0xa0 + lsls r1, r1, #2 + adds r4, r5, #0 + adds r4, #0x3e + ldrb r2, [r4] + adds r0, r5, #0 + bl sub_080027EA + ldrb r0, [r4] + bl sub_0807A5B8 +_080793E0: + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080793E4.inc b/asm/non_matching/playerUtils/sub_080793E4.inc new file mode 100644 index 00000000..d4b5ab99 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080793E4.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r0, _080793FC @ =gPlayerState + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _08079408 + ldr r1, _08079400 @ =gUnk_0811C0F8 + ldr r0, _08079404 @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + b _08079410 + .align 2, 0 +_080793FC: .4byte gPlayerState +_08079400: .4byte gUnk_0811C0F8 +_08079404: .4byte gPlayerEntity +_08079408: + ldr r1, _08079448 @ =gUnk_0811C0F8 + ldr r0, _0807944C @ =gPlayerEntity + ldrb r0, [r0, #0x15] + lsrs r0, r0, #2 +_08079410: + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r4, [r0] + bl sub_08079778 + cmp r0, #0 + beq _08079454 + ldr r0, _08079450 @ =gPlayerState + adds r0, #0x90 + ldrh r0, [r0] + ands r0, r4 + cmp r0, #0 + beq _08079454 + cmp r5, #0 + beq _08079442 + bl sub_0807A500 + ldr r1, _0807944C @ =gPlayerEntity + adds r1, #0x38 + ldrb r1, [r1] + adds r2, r5, #0 + bl sub_080002F0 + cmp r0, #0 + beq _08079454 +_08079442: + movs r0, #1 + b _08079456 + .align 2, 0 +_08079448: .4byte gUnk_0811C0F8 +_0807944C: .4byte gPlayerEntity +_08079450: .4byte gPlayerState +_08079454: + movs r0, #0 +_08079456: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08079550.inc b/asm/non_matching/playerUtils/sub_08079550.inc new file mode 100644 index 00000000..ef542711 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079550.inc @@ -0,0 +1,218 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r0, _080795A8 @ =gUnk_03004030 + ldrb r0, [r0, #8] + cmp r0, #0 + beq _08079562 + b _080796FC +_08079562: + ldr r2, _080795AC @ =gPlayerState + ldrb r0, [r2, #0x1e] + cmp r0, #0 + beq _08079576 + ldr r0, [r2, #0x30] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080795B4 +_08079576: + adds r0, r2, #0 + adds r0, #0x26 + ldrb r0, [r0] + ldr r1, _080795B0 @ =gPlayerEntity + mov r8, r1 + cmp r0, #0 + bne _080795A0 + ldrb r1, [r2, #0x1b] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + bne _080795A0 + mov r3, r8 + ldrb r1, [r3, #0x15] + ldrb r2, [r2, #0xd] + cmp r1, r2 + bne _080795A0 + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080795B4 +_080795A0: + movs r0, #0 + mov r5, r8 + strb r0, [r5, #0xf] + b _080796FE + .align 2, 0 +_080795A8: .4byte gUnk_03004030 +_080795AC: .4byte gPlayerState +_080795B0: .4byte gPlayerEntity +_080795B4: + bl sub_08079778 + cmp r0, #0 + bne _080795BE + b _080796FC +_080795BE: + ldr r3, _08079610 @ =gPlayerEntity + ldrb r2, [r3, #0x14] + movs r0, #6 + ands r0, r2 + ldr r1, _08079614 @ =gUnk_0811C100 + adds r1, r0, r1 + movs r0, #2 + ands r0, r2 + mov r8, r3 + cmp r0, #0 + beq _0807961C + movs r6, #0x2e + ldrsh r2, [r3, r6] + movs r0, #0 + ldrsb r0, [r1, r0] + adds r2, r2, r0 + ldr r4, _08079618 @ =gRoomControls + ldrh r0, [r4, #6] + subs r2, r2, r0 + asrs r2, r2, #4 + movs r3, #0x3f + ands r2, r3 + mov r0, r8 + movs r5, #0x32 + ldrsh r1, [r0, r5] + ldr r0, [r0, #0x48] + ldrb r5, [r0, #3] + adds r0, r1, r5 + ldrh r4, [r4, #8] + subs r0, r0, r4 + asrs r0, r0, #4 + ands r0, r3 + lsls r7, r0, #6 + orrs r7, r2 + subs r1, r1, r5 + subs r1, r1, r4 + asrs r1, r1, #4 + ands r1, r3 + lsls r4, r1, #6 + orrs r4, r2 + b _0807965E + .align 2, 0 +_08079610: .4byte gPlayerEntity +_08079614: .4byte gUnk_0811C100 +_08079618: .4byte gRoomControls +_0807961C: + mov r6, r8 + movs r0, #0x2e + ldrsh r2, [r6, r0] + ldr r0, [r6, #0x48] + ldrb r0, [r0, #4] + mov ip, r0 + adds r0, r2, r0 + ldr r4, _080796EC @ =gRoomControls + ldrh r3, [r4, #6] + mov sb, r3 + subs r0, r0, r3 + asrs r7, r0, #4 + movs r3, #0x3f + ands r7, r3 + movs r5, #0x32 + ldrsh r0, [r6, r5] + ldrb r1, [r1, #1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + ldrh r1, [r4, #8] + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r3 + lsls r0, r0, #6 + orrs r7, r0 + mov r6, ip + subs r2, r2, r6 + mov r1, sb + subs r2, r2, r1 + asrs r4, r2, #4 + ands r4, r3 + orrs r4, r0 +_0807965E: + adds r0, r7, #0 + mov r5, r8 + adds r5, #0x38 + ldrb r1, [r5] + bl sub_080002C8 + adds r3, r0, #0 + ldr r6, _080796F0 @ =gUnk_0811C1E8 + mov r1, r8 + ldrb r0, [r1, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r1, [r0] + adds r0, r3, #0 + bl sub_08007DD6 + adds r3, r0, #0 + cmp r3, #0 + beq _080796FC + adds r0, r4, #0 + ldrb r1, [r5] + bl sub_080002C8 + adds r3, r0, #0 + mov r5, r8 + ldrb r0, [r5, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r1, [r0] + adds r0, r3, #0 + bl sub_08007DD6 + adds r3, r0, #0 + cmp r3, #0 + beq _080796FC + ldr r1, _080796F4 @ =gPlayerState + ldrb r2, [r1, #6] + movs r0, #0x80 + orrs r0, r2 + strb r0, [r1, #6] + ldrb r0, [r1, #0x1e] + adds r4, r1, #0 + cmp r0, #0 + bne _080796C8 + ldrb r0, [r5, #0xf] + adds r0, #1 + strb r0, [r5, #0xf] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #5 + bls _080796FC +_080796C8: + ldr r0, _080796F8 @ =gPlayerEntity + subs r1, r3, #1 + movs r2, #0 + strb r1, [r0, #0x14] + movs r1, #4 + strb r1, [r0, #0xc] + strb r2, [r0, #0xd] + ldrb r2, [r0, #0x10] + movs r1, #0x7f + ands r1, r2 + strb r1, [r0, #0x10] + movs r1, #0x81 + strb r1, [r4, #2] + bl DoPlayerAction + movs r0, #1 + b _080796FE + .align 2, 0 +_080796EC: .4byte gRoomControls +_080796F0: .4byte gUnk_0811C1E8 +_080796F4: .4byte gPlayerState +_080796F8: .4byte gPlayerEntity +_080796FC: + movs r0, #0 +_080796FE: + 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/playerUtils/sub_08079778.inc b/asm/non_matching/playerUtils/sub_08079778.inc new file mode 100644 index 00000000..825cfb5c --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079778.inc @@ -0,0 +1,38 @@ + .syntax unified + push {lr} + ldr r0, _08079790 @ =gPlayerState + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _0807979C + ldr r2, _08079794 @ =gUnk_0811C108 + ldr r1, _08079798 @ =gPlayerEntity + ldrb r0, [r1, #0x14] + lsrs r0, r0, #1 + b _080797A4 + .align 2, 0 +_08079790: .4byte gPlayerState +_08079794: .4byte gUnk_0811C108 +_08079798: .4byte gPlayerEntity +_0807979C: + ldr r2, _080797BC @ =gUnk_0811C108 + ldr r1, _080797C0 @ =gPlayerEntity + ldrb r0, [r1, #0x15] + lsrs r0, r0, #2 +_080797A4: + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r2, [r0] + movs r3, #0 + ldrh r0, [r1, #0x2a] + ands r0, r2 + cmp r2, r0 + bne _080797B6 + movs r3, #1 +_080797B6: + adds r0, r3, #0 + pop {pc} + .align 2, 0 +_080797BC: .4byte gUnk_0811C108 +_080797C0: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080797C4.inc b/asm/non_matching/playerUtils/sub_080797C4.inc new file mode 100644 index 00000000..5d1afc60 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080797C4.inc @@ -0,0 +1,22 @@ + .syntax unified + push {lr} + ldr r1, _080797E4 @ =gUnk_0811C110 + ldr r2, _080797E8 @ =gPlayerEntity + ldrb r0, [r2, #0x15] + lsrs r0, r0, #3 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] + movs r3, #0 + ldrh r0, [r2, #0x2a] + ands r0, r1 + cmp r1, r0 + bne _080797E0 + movs r3, #1 +_080797E0: + adds r0, r3, #0 + pop {pc} + .align 2, 0 +_080797E4: .4byte gUnk_0811C110 +_080797E8: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_080797EC.inc b/asm/non_matching/playerUtils/sub_080797EC.inc new file mode 100644 index 00000000..9b1cc46e --- /dev/null +++ b/asm/non_matching/playerUtils/sub_080797EC.inc @@ -0,0 +1,178 @@ + .syntax unified + push {r4, r5, lr} + ldr r4, _08079804 @ =gPlayerState + ldr r1, [r4, #0x30] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0807985C + ldrb r0, [r4, #5] + cmp r0, #0 + beq _0807980C + ldr r5, _08079808 @ =0x00000934 + b _0807991E + .align 2, 0 +_08079804: .4byte gPlayerState +_08079808: .4byte 0x00000934 +_0807980C: + ldrb r0, [r4, #3] + cmp r0, #0 + beq _08079818 + movs r5, #0x82 + lsls r5, r5, #3 + b _0807991E +_08079818: + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + bne _080798A0 + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + movs r5, #0xa4 + lsls r5, r5, #2 + cmp r0, #0 + bne _0807991E + movs r5, #0xb6 + lsls r5, r5, #1 + ldrb r1, [r4, #0x1b] + movs r0, #0x48 + ands r0, r1 + cmp r0, #0 + bne _080798C2 + lsls r0, r1, #0x18 + cmp r0, #0 + bne _080798CE + adds r1, r4, #0 + adds r1, #0xa8 + ldrb r0, [r1] + cmp r0, #0 + bne _08079852 + movs r0, #1 + strb r0, [r1] +_08079852: + ldr r5, _08079858 @ =0x00000404 + b _0807991E + .align 2, 0 +_08079858: .4byte 0x00000404 +_0807985C: + ldrb r0, [r4, #0x1c] + cmp r0, #0 + bne _0807992E + ldrb r0, [r4, #5] + cmp r0, #0 + beq _0807986E + movs r5, #0xd2 + lsls r5, r5, #2 + b _0807991E +_0807986E: + ldrb r0, [r4, #0x1e] + cmp r0, #0 + beq _0807987A + movs r5, #0xa6 + lsls r5, r5, #2 + b _0807991E +_0807987A: + movs r0, #0x80 + lsls r0, r0, #5 + ands r1, r0 + cmp r1, #0 + beq _0807988A + movs r5, #0xe2 + lsls r5, r5, #3 + b _0807991E +_0807988A: + ldrb r0, [r4, #3] + cmp r0, #0 + beq _08079896 + movs r5, #0xb0 + lsls r5, r5, #1 + b _0807991E +_08079896: + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _080798A6 +_080798A0: + movs r5, #0xa1 + lsls r5, r5, #2 + b _0807991E +_080798A6: + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + movs r5, #0xa4 + lsls r5, r5, #2 + cmp r0, #0 + bne _0807991E + movs r5, #0xb6 + lsls r5, r5, #1 + ldrb r1, [r4, #0x1b] + movs r0, #0x48 + ands r0, r1 + cmp r0, #0 + beq _080798C8 +_080798C2: + movs r0, #0x6c + strb r0, [r4] + b _0807992E +_080798C8: + lsls r0, r1, #0x18 + cmp r0, #0 + beq _080798FC +_080798CE: + movs r0, #0 + bl sub_080793E4 + cmp r0, #0 + beq _0807991E + bl sub_0807A500 + ldr r1, _080798F8 @ =gPlayerEntity + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002E0 + cmp r0, #0xff + beq _0807991E + ldrb r1, [r4, #0x1b] + movs r0, #0xf7 + ands r0, r1 + strb r0, [r4, #0x1b] + movs r5, #0xb8 + lsls r5, r5, #1 + b _0807991E + .align 2, 0 +_080798F8: .4byte gPlayerEntity +_080798FC: + adds r1, r4, #0 + adds r1, #0xa8 + ldrb r0, [r1] + cmp r0, #0 + bne _0807990A + movs r0, #1 + strb r0, [r1] +_0807990A: + ldr r0, [r4, #0x30] + movs r1, #0x80 + lsls r1, r1, #0x10 + ands r0, r1 + movs r5, #0x82 + lsls r5, r5, #1 + cmp r0, #0 + beq _0807991E + movs r5, #0xc1 + lsls r5, r5, #3 +_0807991E: + ldr r0, _08079930 @ =gPlayerState + strh r5, [r0, #8] + ldrb r0, [r0, #3] + cmp r0, #0 + bne _0807992E + ldr r0, _08079934 @ =gPlayerEntity + bl UpdateAnimationSingleFrame +_0807992E: + pop {r4, r5, pc} + .align 2, 0 +_08079930: .4byte gPlayerState +_08079934: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08079B24.inc b/asm/non_matching/playerUtils/sub_08079B24.inc new file mode 100644 index 00000000..be804555 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079B24.inc @@ -0,0 +1,92 @@ + .syntax unified + push {r4, r5, lr} + ldr r2, _08079B60 @ =gPlayerEntity + ldrb r0, [r2, #0xc] + cmp r0, #0xa + beq _08079BD4 + adds r0, r2, #0 + adds r0, #0x45 + ldrb r3, [r0] + cmp r3, #0 + bne _08079BD4 + ldr r4, _08079B64 @ =gPlayerState + ldr r1, [r4, #0x30] + ldr r0, _08079B68 @ =0xFEFFFFFF + ands r1, r0 + str r1, [r4, #0x30] + adds r0, r2, #0 + adds r0, #0x42 + strb r3, [r0] + ldrb r0, [r4, #7] + cmp r0, #0 + bne _08079BD4 + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08079B6C + bl RespawnPlayer + b _08079BC0 + .align 2, 0 +_08079B60: .4byte gPlayerEntity +_08079B64: .4byte gPlayerState +_08079B68: .4byte 0xFEFFFFFF +_08079B6C: + ldrb r0, [r4, #0x14] + cmp r0, #0 + bne _08079BC0 + movs r3, #0x80 + lsls r3, r3, #5 + ands r3, r1 + cmp r3, #0 + bne _08079BC0 + movs r5, #0x36 + ldrsh r0, [r2, r5] + cmp r0, #0 + bge _08079BA6 + ldr r0, [r2, #0x20] + cmp r0, #0 + ble _08079B8C + str r3, [r2, #0x20] +_08079B8C: + ldrb r1, [r4, #2] + movs r3, #0x41 + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + bne _08079BD4 + strb r3, [r4, #2] + movs r0, #0xff + strb r0, [r2, #0x15] + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r4, #0xd] + b _08079BD4 +_08079BA6: + movs r0, #2 + ands r1, r0 + cmp r1, #0 + bne _08079BC0 + bl sub_08079D48 + cmp r0, #0 + bne _08079BC0 + ldrb r0, [r4, #0xa] + movs r1, #0x10 + orrs r0, r1 + strb r0, [r4, #0xa] + b _08079BD4 +_08079BC0: + ldr r2, _08079BD0 @ =gPlayerEntity + ldrb r1, [r2, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2, #0x10] + movs r0, #0 + b _08079BD6 + .align 2, 0 +_08079BD0: .4byte gPlayerEntity +_08079BD4: + movs r0, #1 +_08079BD6: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08079C30.inc b/asm/non_matching/playerUtils/sub_08079C30.inc new file mode 100644 index 00000000..69011dfd --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079C30.inc @@ -0,0 +1,110 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + ldr r0, _08079C68 @ =gPlayerState + ldrb r1, [r0, #0x14] + adds r7, r0, #0 + cmp r1, #0 + beq _08079C44 + b _08079D40 +_08079C44: + ldr r1, [r7, #0x30] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _08079D40 + movs r0, #0x80 + ands r1, r0 + cmp r1, #0 + bne _08079D36 + ldrb r0, [r7, #0x13] + subs r0, #0xd + cmp r0, #0x1d + bhi _08079CE8 + lsls r0, r0, #2 + ldr r1, _08079C6C @ =_08079C70 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08079C68: .4byte gPlayerState +_08079C6C: .4byte _08079C70 +_08079C70: @ jump table + .4byte _08079D36 @ case 0 + .4byte _08079D36 @ case 1 + .4byte _08079D36 @ case 2 + .4byte _08079D36 @ case 3 + .4byte _08079CE8 @ case 4 + .4byte _08079CE8 @ case 5 + .4byte _08079CE8 @ case 6 + .4byte _08079D36 @ case 7 + .4byte _08079CE8 @ case 8 + .4byte _08079CE8 @ case 9 + .4byte _08079D36 @ case 10 + .4byte _08079CE8 @ case 11 + .4byte _08079CE8 @ case 12 + .4byte _08079CE8 @ case 13 + .4byte _08079CE8 @ case 14 + .4byte _08079CE8 @ case 15 + .4byte _08079CE8 @ case 16 + .4byte _08079CE8 @ case 17 + .4byte _08079CE8 @ case 18 + .4byte _08079CE8 @ case 19 + .4byte _08079CE8 @ case 20 + .4byte _08079CE8 @ case 21 + .4byte _08079CE8 @ case 22 + .4byte _08079CE8 @ case 23 + .4byte _08079CE8 @ case 24 + .4byte _08079CE8 @ case 25 + .4byte _08079CE8 @ case 26 + .4byte _08079CE8 @ case 27 + .4byte _08079CE8 @ case 28 + .4byte _08079D36 @ case 29 +_08079CE8: + mov r8, r7 + mov r0, r8 + ldrb r4, [r0, #0x12] + movs r2, #1 + rsbs r2, r2, #0 + adds r0, r6, #0 + movs r1, #0 + bl sub_080002B4 + ldr r5, _08079D3C @ =gUnk_08007CAC + adds r1, r5, #0 + bl sub_08007DD6 + cmp r4, r0 + bne _08079D40 + mov r0, r8 + ldrb r4, [r0, #0x12] + adds r0, r6, #0 + movs r1, #2 + movs r2, #0 + bl sub_080002B4 + adds r1, r5, #0 + bl sub_08007DD6 + cmp r4, r0 + bne _08079D40 + ldrb r4, [r7, #0x12] + movs r1, #2 + rsbs r1, r1, #0 + adds r0, r6, #0 + movs r2, #0 + bl sub_080002B4 + adds r1, r5, #0 + bl sub_08007DD6 + cmp r4, r0 + bne _08079D40 +_08079D36: + movs r0, #1 + b _08079D42 + .align 2, 0 +_08079D3C: .4byte gUnk_08007CAC +_08079D40: + movs r0, #0 +_08079D42: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08079E90.inc b/asm/non_matching/playerUtils/sub_08079E90.inc new file mode 100644 index 00000000..3e329dca --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079E90.inc @@ -0,0 +1,98 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov sb, r0 + ldr r1, _08079EBC @ =gPlayerEntity + ldrb r2, [r1, #0x15] + movs r0, #8 + ands r0, r2 + adds r7, r1, #0 + cmp r0, #0 + beq _08079ECA + movs r0, #0x10 + ands r0, r2 + cmp r0, #0 + beq _08079EC0 + ldr r0, [r7, #0x48] + ldrb r0, [r0, #2] + rsbs r0, r0, #0 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + b _08079EC4 + .align 2, 0 +_08079EBC: .4byte gPlayerEntity +_08079EC0: + ldr r0, [r7, #0x48] + ldrb r5, [r0, #2] +_08079EC4: + ldr r0, [r7, #0x48] + ldrb r4, [r0, #3] + b _08079EDE +_08079ECA: + ldr r0, [r7, #0x48] + ldrb r5, [r0, #4] + cmp r2, #0 + beq _08079ED6 + ldrb r4, [r0, #5] + b _08079EDE +_08079ED6: + ldrb r0, [r0, #5] + rsbs r0, r0, #0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 +_08079EDE: + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + mov r8, r0 + lsls r0, r4, #0x10 + asrs r6, r0, #0x10 + adds r0, r7, #0 + mov r1, r8 + adds r2, r6, #0 + bl sub_080002CC + adds r1, r0, #0 + mov r0, sb + bl sub_08079F48 + cmp r0, #0 + bne _08079F3C + ldrb r1, [r7, #0x15] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _08079F10 + rsbs r0, r6, #0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + b _08079F18 +_08079F10: + mov r1, r8 + rsbs r0, r1, #0 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 +_08079F18: + ldr r0, _08079F38 @ =gPlayerEntity + lsls r1, r5, #0x10 + asrs r1, r1, #0x10 + lsls r2, r4, #0x10 + asrs r2, r2, #0x10 + bl sub_080002CC + adds r1, r0, #0 + mov r0, sb + bl sub_08079F48 + cmp r0, #0 + bne _08079F3C + movs r0, #0 + b _08079F3E + .align 2, 0 +_08079F38: .4byte gPlayerEntity +_08079F3C: + movs r0, #1 +_08079F3E: + 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/playerUtils/sub_08079FD4.inc b/asm/non_matching/playerUtils/sub_08079FD4.inc new file mode 100644 index 00000000..9a5f0296 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_08079FD4.inc @@ -0,0 +1,65 @@ + .syntax unified + push {r4, r5, r6, lr} + sub sp, #4 + adds r5, r0, #0 + movs r0, #0x2e + ldrsh r2, [r5, r0] + ldr r3, _0807A008 @ =gRoomControls + ldrh r0, [r3, #6] + subs r2, r2, r0 + asrs r2, r2, #4 + movs r4, #0x3f + ands r2, r4 + movs r6, #0x32 + ldrsh r0, [r5, r6] + ldrh r3, [r3, #8] + subs r0, r0, r3 + asrs r0, r0, #4 + ands r0, r4 + lsls r0, r0, #6 + orrs r2, r0 + lsls r2, r2, #1 + ldr r6, _0807A00C @ =gUnk_02027EB4 + cmp r1, #2 + bne _0807A004 + ldr r6, _0807A010 @ =gUnk_0200D654 +_0807A004: + movs r4, #0 + b _0807A028 + .align 2, 0 +_0807A008: .4byte gRoomControls +_0807A00C: .4byte gUnk_02027EB4 +_0807A010: .4byte gUnk_0200D654 +_0807A014: + cmp r1, #0x23 + beq _0807A028 + cmp r1, #0x27 + beq _0807A028 + ldr r0, _0807A04C @ =gUnk_080082DC + subs r1, #0x10 + adds r1, r1, r0 + ldrb r0, [r1] + cmp r0, #0 + beq _0807A046 +_0807A028: + adds r4, #1 + adds r0, r5, #0 + mov r1, sp + bl sub_08004202 + adds r2, r0, #0 + lsrs r0, r2, #1 + adds r0, r6, r0 + ldrb r1, [r0] + cmp r1, #0xe + bls _0807A046 + cmp r1, #0xf + bls _0807A028 + cmp r1, #0x1d + bne _0807A014 +_0807A046: + adds r0, r4, #0 + add sp, #4 + pop {r4, r5, r6, pc} + .align 2, 0 +_0807A04C: .4byte gUnk_080082DC + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A094.inc b/asm/non_matching/playerUtils/sub_0807A094.inc new file mode 100644 index 00000000..54e5f680 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A094.inc @@ -0,0 +1,66 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + movs r2, #0x16 + ldr r0, _0807A0AC @ =gPlayerState + ldrb r0, [r0, #0xf] + cmp r0, #0 + beq _0807A0B0 + movs r2, #0x1b + cmp r0, #0x78 + bls _0807A104 + movs r2, #0x1a + b _0807A104 + .align 2, 0 +_0807A0AC: .4byte gPlayerState +_0807A0B0: + ldr r0, _0807A0F0 @ =gSave + adds r1, r0, #0 + adds r1, #0xb2 + ldrb r1, [r1] + adds r5, r0, #0 + cmp r1, #0 + beq _0807A104 + movs r4, #1 + cmp r3, #0 + bne _0807A0D6 + adds r0, #0xc4 + ldrh r1, [r0] + cmp r1, #0xb3 + bhi _0807A0D6 + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0807A0D6 + movs r4, #0 +_0807A0D6: + cmp r4, #0 + beq _0807A104 + adds r0, r5, #0 + adds r0, #0xb2 + ldrb r0, [r0] + cmp r0, #0x30 + beq _0807A102 + cmp r0, #0x30 + bgt _0807A0F4 + cmp r0, #0x2f + beq _0807A0FA + b _0807A102 + .align 2, 0 +_0807A0F0: .4byte gSave +_0807A0F4: + cmp r0, #0x31 + beq _0807A0FE + b _0807A102 +_0807A0FA: + movs r2, #0x18 + b _0807A104 +_0807A0FE: + movs r2, #0x17 + b _0807A104 +_0807A102: + movs r2, #0x19 +_0807A104: + adds r0, r2, #0 + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A2F8.inc b/asm/non_matching/playerUtils/sub_0807A2F8.inc new file mode 100644 index 00000000..9742b353 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A2F8.inc @@ -0,0 +1,257 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + adds r4, r0, #0 + ldr r0, _0807A364 @ =gRoomControls + mov r8, r0 + ldrb r0, [r0, #4] + cmp r0, #8 + bne _0807A312 + b _0807A4F2 +_0807A312: + bl sub_08079778 + orrs r0, r4 + cmp r0, #0 + bne _0807A31E + b _0807A4F2 +_0807A31E: + ldr r7, _0807A368 @ =gPlayerEntity + ldrb r1, [r7, #0x14] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0807A36C + movs r1, #0x2e + ldrsh r2, [r7, r1] + mov r6, r8 + ldrh r0, [r6, #6] + subs r2, r2, r0 + asrs r2, r2, #4 + movs r3, #0x3f + ands r2, r3 + movs r0, #0x32 + ldrsh r1, [r7, r0] + ldr r0, [r7, #0x48] + ldrb r5, [r0, #5] + adds r0, r1, r5 + ldrh r4, [r6, #8] + subs r0, r0, r4 + asrs r0, r0, #4 + ands r0, r3 + lsls r0, r0, #6 + orrs r0, r2 + lsls r7, r0, #1 + subs r1, r1, r5 + subs r1, r1, r4 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r2, r1 + lsls r6, r2, #1 + b _0807A3A2 + .align 2, 0 +_0807A364: .4byte gRoomControls +_0807A368: .4byte gPlayerEntity +_0807A36C: + movs r1, #0x2e + ldrsh r3, [r7, r1] + ldr r0, [r7, #0x48] + ldrb r6, [r0, #2] + adds r1, r3, r6 + mov r2, r8 + ldrh r5, [r2, #6] + subs r1, r1, r5 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r2, #0x32 + ldrsh r0, [r7, r2] + mov r7, r8 + ldrh r2, [r7, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r4 + lsls r0, r0, #6 + orrs r1, r0 + lsls r7, r1, #1 + subs r3, r3, r6 + subs r3, r3, r5 + asrs r3, r3, #4 + ands r3, r4 + orrs r3, r0 + lsls r6, r3, #1 +_0807A3A2: + movs r0, #0 + mov sb, r0 + ldr r1, _0807A3F4 @ =gPlayerEntity + mov sl, r1 +_0807A3AA: + movs r2, #0 + mov r8, r2 + mov r0, sl + mov r1, sp + adds r2, r7, #0 + bl sub_08004202 + adds r7, r0, #0 + lsrs r4, r7, #1 + adds r0, r4, #0 + movs r1, #1 + bl sub_080002E0 + cmp r0, #0 + beq _0807A3FC + lsls r0, r4, #0x10 + lsrs r0, r0, #0x10 + mov r1, sl + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002C8 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r2, sl + ldrb r1, [r2, #0x14] + lsrs r1, r1, #1 + lsls r1, r1, #2 + ldr r2, _0807A3F8 @ =gUnk_0811C1D8 + adds r1, r1, r2 + ldr r1, [r1] + bl sub_08007DD6 + cmp r0, #0 + beq _0807A468 + b _0807A400 + .align 2, 0 +_0807A3F4: .4byte gPlayerEntity +_0807A3F8: .4byte gUnk_0811C1D8 +_0807A3FC: + movs r0, #1 + mov r8, r0 +_0807A400: + ldr r5, _0807A444 @ =gPlayerEntity + adds r0, r5, #0 + mov r1, sp + adds r2, r6, #0 + bl sub_08004202 + adds r6, r0, #0 + lsrs r4, r6, #1 + adds r0, r4, #0 + movs r1, #1 + bl sub_080002E0 + cmp r0, #0 + beq _0807A44C + lsls r0, r4, #0x10 + lsrs r0, r0, #0x10 + adds r1, r5, #0 + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002C8 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + ldrb r1, [r5, #0x14] + lsrs r1, r1, #1 + lsls r1, r1, #2 + ldr r2, _0807A448 @ =gUnk_0811C1D8 + adds r1, r1, r2 + ldr r1, [r1] + bl sub_08007DD6 + cmp r0, #0 + beq _0807A468 + b _0807A450 + .align 2, 0 +_0807A444: .4byte gPlayerEntity +_0807A448: .4byte gUnk_0811C1D8 +_0807A44C: + movs r0, #1 + add r8, r0 +_0807A450: + mov r1, r8 + cmp r1, #2 + bne _0807A45E + mov r2, sb + cmp r2, #0 + bne _0807A46E + b _0807A4F2 +_0807A45E: + movs r0, #1 + add sb, r0 + mov r1, sb + cmp r1, #1 + bls _0807A3AA +_0807A468: + mov r2, sb + cmp r2, #0 + beq _0807A4F2 +_0807A46E: + bl AreaIsDungeon + cmp r0, #0 + beq _0807A4B0 + ldr r4, _0807A4AC @ =gPlayerEntity + adds r0, r4, #0 + mov r1, sp + adds r2, r7, #0 + bl sub_08004202 + adds r7, r0, #0 + lsrs r0, r7, #1 + movs r1, #2 + bl sub_080002E0 + cmp r0, #0 + bne _0807A4F2 + adds r0, r4, #0 + mov r1, sp + adds r2, r6, #0 + bl sub_08004202 + adds r6, r0, #0 + lsrs r0, r6, #1 + movs r1, #2 +_0807A4A0: + bl sub_080002E0 + cmp r0, #0 + beq _0807A4EC + b _0807A4F2 + .align 2, 0 +_0807A4AC: .4byte gPlayerEntity +_0807A4B0: + mov r0, sb + cmp r0, #2 + bne _0807A4C2 + ldr r0, _0807A4E8 @ =gPlayerEntity + mov r1, sp + adds r2, r7, #0 + bl sub_08004202 + adds r7, r0, #0 +_0807A4C2: + lsrs r0, r7, #1 + movs r1, #1 + bl sub_080002E0 + cmp r0, #0 + bne _0807A4F2 + mov r1, sb + cmp r1, #2 + bne _0807A4E0 + ldr r0, _0807A4E8 @ =gPlayerEntity + mov r1, sp + adds r2, r6, #0 + bl sub_08004202 + adds r6, r0, #0 +_0807A4E0: + lsrs r0, r6, #1 + movs r1, #1 + b _0807A4A0 + .align 2, 0 +_0807A4E8: .4byte gPlayerEntity +_0807A4EC: + mov r0, sb + adds r0, #1 + b _0807A4F4 +_0807A4F2: + movs r0, #0 +_0807A4F4: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A500.inc b/asm/non_matching/playerUtils/sub_0807A500.inc new file mode 100644 index 00000000..e2cde890 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A500.inc @@ -0,0 +1,103 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r6, _0807A518 @ =gPlayerEntity + ldrb r0, [r6, #0x14] + lsrs r0, r0, #1 + cmp r0, #1 + beq _0807A574 + cmp r0, #1 + bgt _0807A51C + cmp r0, #0 + beq _0807A526 + b _0807A5B4 + .align 2, 0 +_0807A518: .4byte gPlayerEntity +_0807A51C: + cmp r0, #2 + beq _0807A554 + cmp r0, #3 + beq _0807A580 + b _0807A5B4 +_0807A526: + movs r1, #0x2e + ldrsh r0, [r6, r1] + ldr r5, _0807A550 @ =gRoomControls + ldrh r1, [r5, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r4, #0x3f + ands r0, r4 + movs r2, #0x32 + ldrsh r1, [r6, r2] + ldr r3, [r6, #0x48] + ldrb r2, [r3, #5] + subs r1, r1, r2 + movs r2, #1 + ldrsb r2, [r3, r2] + adds r1, r1, r2 + ldrh r2, [r5, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + b _0807A5AA + .align 2, 0 +_0807A550: .4byte gRoomControls +_0807A554: + movs r5, #0x2e + ldrsh r0, [r6, r5] + ldr r4, _0807A570 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + ldr r2, [r6, #0x48] + movs r5, #0x32 + ldrsh r1, [r6, r5] + ldrb r5, [r2, #5] + adds r1, r1, r5 + b _0807A59A + .align 2, 0 +_0807A570: .4byte gRoomControls +_0807A574: + ldr r2, [r6, #0x48] + movs r1, #0x2e + ldrsh r0, [r6, r1] + ldrb r5, [r2, #2] + adds r0, r0, r5 + b _0807A58A +_0807A580: + movs r1, #0x2e + ldrsh r0, [r6, r1] + ldr r2, [r6, #0x48] + ldrb r1, [r2, #2] + subs r0, r0, r1 +_0807A58A: + ldr r4, _0807A5B0 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + movs r5, #0x32 + ldrsh r1, [r6, r5] +_0807A59A: + ldrb r2, [r2, #1] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldrh r2, [r4, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 +_0807A5AA: + lsls r1, r1, #6 + orrs r0, r1 + b _0807A5B6 + .align 2, 0 +_0807A5B0: .4byte gRoomControls +_0807A5B4: + movs r0, #0 +_0807A5B6: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A5B8.inc b/asm/non_matching/playerUtils/sub_0807A5B8.inc new file mode 100644 index 00000000..2b26569e --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A5B8.inc @@ -0,0 +1,204 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov sb, r0 + ldr r2, _0807A5F8 @ =gPlayerState + ldrb r3, [r2, #2] + movs r4, #0x80 + adds r0, r4, #0 + ands r0, r3 + cmp r0, #0 + beq _0807A5D2 + b _0807A736 +_0807A5D2: + ldr r1, [r2, #0x30] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0807A5DE + b _0807A736 +_0807A5DE: + adds r0, r2, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _0807A5EA + b _0807A736 +_0807A5EA: + adds r0, r1, #0 + ands r0, r4 + cmp r0, #0 + beq _0807A600 + ldr r7, _0807A5FC @ =gUnk_0800833C + b _0807A63A + .align 2, 0 +_0807A5F8: .4byte gPlayerState +_0807A5FC: .4byte gUnk_0800833C +_0807A600: + movs r0, #0x80 + lsls r0, r0, #0x11 + ands r1, r0 + cmp r1, #0 + bne _0807A60E + cmp r3, #0 + beq _0807A618 +_0807A60E: + ldr r7, _0807A614 @ =gUnk_0800845C + b _0807A63A + .align 2, 0 +_0807A614: .4byte gUnk_0800845C +_0807A618: + ldrb r0, [r2, #5] + cmp r0, #0 + bne _0807A624 + ldrb r0, [r2, #0x1c] + cmp r0, #0 + beq _0807A62C +_0807A624: + ldr r7, _0807A628 @ =gUnk_080084BC + b _0807A63A + .align 2, 0 +_0807A628: .4byte gUnk_080084BC +_0807A62C: + adds r0, r2, #0 + adds r0, #0xaa + ldrb r0, [r0] + ldr r7, _0807A740 @ =gUnk_080082DC + cmp r0, #0 + beq _0807A63A + ldr r7, _0807A744 @ =gUnk_0800851C +_0807A63A: + mov r0, sb + cmp r0, #0 + beq _0807A6B8 + cmp r0, #0x10 + beq _0807A6B8 + ldr r6, _0807A748 @ =gPlayerEntity + ldr r2, [r6, #0x48] + movs r1, #0x2e + ldrsh r0, [r6, r1] + ldrb r3, [r2, #2] + adds r0, r0, r3 + movs r1, #0 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + ldr r1, _0807A74C @ =gRoomControls + mov r8, r1 + ldrh r1, [r1, #6] + subs r5, r0, r1 + movs r3, #0x32 + ldrsh r0, [r6, r3] + movs r1, #1 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + mov r2, r8 + ldrh r1, [r2, #8] + subs r4, r0, r1 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + bl sub_080086B4 + cmp r0, #0 + beq _0807A688 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + movs r3, #1 + bl sub_0807A750 +_0807A688: + movs r3, #0x2e + ldrsh r1, [r6, r3] + ldr r2, [r6, #0x48] + ldrb r0, [r2, #2] + subs r1, r1, r0 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + mov r2, r8 + ldrh r0, [r2, #6] + subs r5, r1, r0 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + bl sub_080086B4 + cmp r0, #0 + beq _0807A6B8 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + movs r3, #3 + bl sub_0807A750 +_0807A6B8: + mov r3, sb + cmp r3, #8 + beq _0807A736 + cmp r3, #0x18 + beq _0807A736 + ldr r6, _0807A748 @ =gPlayerEntity + movs r0, #0x2e + ldrsh r1, [r6, r0] + ldr r2, [r6, #0x48] + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + ldr r3, _0807A74C @ =gRoomControls + mov r8, r3 + ldrh r0, [r3, #6] + subs r5, r1, r0 + movs r1, #0x32 + ldrsh r0, [r6, r1] + ldrb r3, [r2, #5] + adds r0, r0, r3 + movs r1, #1 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + mov r2, r8 + ldrh r1, [r2, #8] + subs r4, r0, r1 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + bl sub_080086B4 + cmp r0, #0 + beq _0807A706 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + movs r3, #2 + bl sub_0807A750 +_0807A706: + movs r3, #0x32 + ldrsh r1, [r6, r3] + ldr r2, [r6, #0x48] + ldrb r0, [r2, #5] + subs r1, r1, r0 + movs r0, #1 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + mov r2, r8 + ldrh r0, [r2, #8] + subs r4, r1, r0 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + bl sub_080086B4 + cmp r0, #0 + beq _0807A736 + adds r0, r5, #0 + adds r1, r4, #0 + adds r2, r7, #0 + movs r3, #0 + bl sub_0807A750 +_0807A736: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807A740: .4byte gUnk_080082DC +_0807A744: .4byte gUnk_0800851C +_0807A748: .4byte gPlayerEntity +_0807A74C: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A750.inc b/asm/non_matching/playerUtils/sub_0807A750.inc new file mode 100644 index 00000000..44accb6a --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A750.inc @@ -0,0 +1,184 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r7, r0, #0 + adds r6, r1, #0 + mov r8, r2 + adds r5, r3, #0 + movs r0, #1 + ands r0, r5 + cmp r0, #0 + bne _0807A76C + movs r4, #0xf + ands r4, r6 + b _0807A770 +_0807A76C: + movs r4, #0xf + ands r4, r7 +_0807A770: + cmp r4, #0 + bne _0807A776 + b _0807A88E +_0807A776: + cmp r4, #0xf + bne _0807A77C + b _0807A88E +_0807A77C: + lsrs r0, r7, #4 + movs r2, #0x3f + ands r0, r2 + lsrs r1, r6, #4 + ands r1, r2 + lsls r1, r1, #6 + orrs r0, r1 + ldr r1, _0807A7A8 @ =gPlayerEntity + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002E0 + adds r1, r0, #0 + cmp r1, #0xf + bls _0807A7AE + cmp r1, #0xff + beq _0807A7AC + mov r2, r8 + adds r0, r1, r2 + subs r0, #0x10 + ldrb r1, [r0] + b _0807A7AE + .align 2, 0 +_0807A7A8: .4byte gPlayerEntity +_0807A7AC: + movs r1, #0xf +_0807A7AE: + ldr r0, _0807A7D8 @ =gUnk_0800823C + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + movs r0, #1 + ands r0, r5 + cmp r0, #0 + bne _0807A824 + movs r0, #0xf + ands r0, r7 + movs r2, #0x80 + lsls r2, r2, #8 + asrs r2, r0 + cmp r5, #0 + bne _0807A7F4 + ldr r3, _0807A7DC @ =gPlayerEntity + cmp r4, #0xe + bgt _0807A7F0 + lsls r0, r4, #1 + adds r1, r0, r1 + b _0807A7E8 + .align 2, 0 +_0807A7D8: .4byte gUnk_0800823C +_0807A7DC: .4byte gPlayerEntity +_0807A7E0: + adds r1, #2 + adds r4, #1 + cmp r4, #0xe + bgt _0807A7F0 +_0807A7E8: + ldrh r0, [r1] + ands r0, r2 + cmp r0, #0 + bne _0807A7E0 +_0807A7F0: + subs r4, #1 + b _0807A816 +_0807A7F4: + ldr r3, _0807A800 @ =gPlayerEntity + cmp r4, #0 + ble _0807A814 + lsls r0, r4, #1 + adds r1, r0, r1 + b _0807A80C + .align 2, 0 +_0807A800: .4byte gPlayerEntity +_0807A804: + subs r1, #2 + subs r4, #1 + cmp r4, #0 + ble _0807A814 +_0807A80C: + ldrh r0, [r1] + ands r0, r2 + cmp r0, #0 + bne _0807A804 +_0807A814: + adds r4, #1 +_0807A816: + movs r0, #0xf + ands r0, r6 + subs r0, r4, r0 + ldrh r1, [r3, #0x32] + adds r0, r0, r1 + strh r0, [r3, #0x32] + b _0807A88E +_0807A824: + movs r3, #0xf + ands r6, r3 + lsls r0, r6, #1 + adds r0, r0, r1 + ldrh r2, [r0] + cmp r5, #1 + bne _0807A85C + subs r0, r3, r4 + lsrs r2, r0 + ldr r3, _0807A858 @ =gPlayerEntity + cmp r4, #0 + ble _0807A854 + ands r5, r2 + cmp r5, #0 + beq _0807A854 + movs r1, #1 +_0807A844: + lsrs r2, r2, #1 + subs r4, #1 + cmp r4, #0 + ble _0807A854 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _0807A844 +_0807A854: + adds r4, #1 + b _0807A882 + .align 2, 0 +_0807A858: .4byte gPlayerEntity +_0807A85C: + lsls r2, r4 + ldr r3, _0807A86C @ =gPlayerEntity + cmp r4, #0xe + bgt _0807A880 + movs r1, #0x80 + lsls r1, r1, #8 + b _0807A878 + .align 2, 0 +_0807A86C: .4byte gPlayerEntity +_0807A870: + lsls r2, r2, #1 + adds r4, #1 + cmp r4, #0xe + bgt _0807A880 +_0807A878: + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _0807A870 +_0807A880: + subs r4, #1 +_0807A882: + movs r0, #0xf + ands r0, r7 + subs r0, r4, r0 + ldrh r2, [r3, #0x2e] + adds r0, r0, r2 + strh r0, [r3, #0x2e] +_0807A88E: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A894.inc b/asm/non_matching/playerUtils/sub_0807A894.inc new file mode 100644 index 00000000..6ef6f1f7 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A894.inc @@ -0,0 +1,41 @@ + .syntax unified + push {lr} + ldrb r1, [r0, #0x15] + cmp r1, #8 + beq _0807A8BA + cmp r1, #8 + bgt _0807A8A6 + cmp r1, #0 + beq _0807A8B0 + b _0807A8C8 +_0807A8A6: + cmp r1, #0x10 + beq _0807A8B6 + cmp r1, #0x18 + beq _0807A8C0 + b _0807A8C8 +_0807A8B0: + movs r2, #8 + rsbs r2, r2, #0 + b _0807A8CA +_0807A8B6: + movs r2, #5 + b _0807A8CA +_0807A8BA: + movs r2, #0 + movs r1, #8 + b _0807A8CC +_0807A8C0: + movs r2, #0 + movs r1, #8 + rsbs r1, r1, #0 + b _0807A8CC +_0807A8C8: + movs r2, #0 +_0807A8CA: + movs r1, #0 +_0807A8CC: + bl sub_080002B4 + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A8D8.inc b/asm/non_matching/playerUtils/sub_0807A8D8.inc new file mode 100644 index 00000000..96e5b289 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807A8D8.inc @@ -0,0 +1,209 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r5, r0, #0 + ldr r0, _0807AA5C @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0807A8F0 + b _0807A9F6 +_0807A8F0: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldr r7, _0807AA60 @ =gRoomControls + ldrh r1, [r7, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r6, #0x3f + ands r0, r6 + movs r2, #0x32 + ldrsh r1, [r5, r2] + ldrh r2, [r7, #8] + adds r2, #1 + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r6 + lsls r1, r1, #6 + orrs r0, r1 + ldr r1, _0807AA64 @ =gPlayerEntity + adds r1, #0x38 + mov sb, r1 + ldrb r1, [r1] + bl sub_080002EC + adds r4, r0, #0 + movs r0, #0x20 + mov r8, r0 + ands r4, r0 + cmp r4, #0 + beq _0807A94E + movs r2, #0x2e + ldrsh r1, [r5, r2] + ldrh r0, [r7, #6] + subs r1, r1, r0 + asrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r5, r2] + ldrh r2, [r7, #8] + adds r2, #1 + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r1, r0 + adds r0, r5, #0 + bl sub_0807AAF8 +_0807A94E: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldrh r1, [r7, #6] + subs r1, #2 + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r6 + movs r2, #0x32 + ldrsh r1, [r5, r2] + ldrh r2, [r7, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r6 + lsls r1, r1, #6 + orrs r0, r1 + mov r2, sb + ldrb r1, [r2] + bl sub_080002EC + adds r4, r0, #0 + mov r0, r8 + ands r4, r0 + cmp r4, #0 + beq _0807A9A2 + movs r2, #0x2e + ldrsh r1, [r5, r2] + ldrh r0, [r7, #6] + subs r0, #2 + subs r1, r1, r0 + asrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r5, r2] + ldrh r2, [r7, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r1, r0 + adds r0, r5, #0 + bl sub_0807AAF8 +_0807A9A2: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldrh r1, [r7, #6] + adds r1, #2 + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r6 + movs r2, #0x32 + ldrsh r1, [r5, r2] + ldrh r2, [r7, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r6 + lsls r1, r1, #6 + orrs r0, r1 + mov r2, sb + ldrb r1, [r2] + bl sub_080002EC + adds r4, r0, #0 + mov r0, r8 + ands r4, r0 + cmp r4, #0 + beq _0807A9F6 + movs r2, #0x2e + ldrsh r1, [r5, r2] + ldrh r0, [r7, #6] + adds r0, #2 + subs r1, r1, r0 + asrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r5, r2] + ldrh r2, [r7, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r1, r0 + adds r0, r5, #0 + bl sub_0807AAF8 +_0807A9F6: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldr r7, _0807AA60 @ =gRoomControls + ldrh r1, [r7, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r6, #0x3f + ands r0, r6 + movs r2, #0x32 + ldrsh r1, [r5, r2] + ldrh r2, [r7, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r6 + lsls r1, r1, #6 + orrs r0, r1 + ldr r1, _0807AA64 @ =gPlayerEntity + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002EC + adds r4, r0, #0 + movs r0, #0x20 + ands r0, r4 + cmp r0, #0 + beq _0807AA4C + movs r0, #0x2e + ldrsh r1, [r5, r0] + ldrh r0, [r7, #6] + subs r1, r1, r0 + asrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r5, r2] + ldrh r2, [r7, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r1, r0 + adds r0, r5, #0 + bl sub_0807AAF8 +_0807AA4C: + movs r0, #2 + ands r0, r4 + cmp r0, #0 + beq _0807AA68 + adds r0, r5, #0 + bl sub_0807AABC + b _0807AA76 + .align 2, 0 +_0807AA5C: .4byte gPlayerState +_0807AA60: .4byte gRoomControls +_0807AA64: .4byte gPlayerEntity +_0807AA68: + movs r0, #4 + ands r0, r4 + cmp r0, #0 + beq _0807AA76 + adds r0, r5, #0 + bl sub_0807AA80 +_0807AA76: + 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/playerUtils/sub_0807AAF8.inc b/asm/non_matching/playerUtils/sub_0807AAF8.inc new file mode 100644 index 00000000..e65e42ec --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807AAF8.inc @@ -0,0 +1,42 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + adds r2, r1, #0 + movs r1, #0x36 + ldrsh r0, [r3, r1] + cmp r0, #0 + bne _0807AB3C + adds r0, r3, #0 + adds r0, #0x38 + ldrb r0, [r0] + lsls r0, r0, #0x1e + orrs r2, r0 + movs r3, #0 + ldr r0, _0807AB40 @ =gPlayerState + ldr r1, [r0, #0x40] + adds r4, r0, #0 + cmp r1, r2 + beq _0807AB32 + adds r1, r4, #0 + adds r1, #0x40 +_0807AB20: + ldr r0, [r1] + stm r1!, {r2} + adds r2, r0, #0 + adds r3, #1 + cmp r3, #0xe + bhi _0807AB32 + ldr r0, [r1] + cmp r0, r2 + bne _0807AB20 +_0807AB32: + lsls r0, r3, #2 + adds r1, r4, #0 + adds r1, #0x40 + adds r0, r0, r1 + str r2, [r0] +_0807AB3C: + pop {r4, pc} + .align 2, 0 +_0807AB40: .4byte gPlayerState + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807AB44.inc b/asm/non_matching/playerUtils/sub_0807AB44.inc new file mode 100644 index 00000000..728e9f5a --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807AB44.inc @@ -0,0 +1,129 @@ + .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 + adds r7, r1, #0 + mov r8, r2 + movs r1, #0x2e + ldrsh r0, [r6, r1] + adds r0, r0, r7 + ldr r2, _0807ABF0 @ =gRoomControls + mov sb, r2 + ldrh r1, [r2, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + mov sl, r3 + ands r0, r3 + movs r5, #0x32 + ldrsh r1, [r6, r5] + add r1, r8 + ldrh r2, [r2, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r0, r1 + adds r1, r6, #0 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + movs r1, #0xb + bl sub_0806FC50 + adds r5, r0, #0 + cmp r5, #0 + beq _0807AC44 + ldrh r0, [r5, #6] + cmp r0, #0x76 + bne _0807ABF4 + movs r0, #0x2a + movs r1, #1 + movs r2, #0 + bl CreateObject + adds r4, r0, #0 + cmp r4, #0 + beq _0807AC44 + lsls r2, r7, #0x10 + mov r0, r8 + lsls r3, r0, #0x10 + adds r0, r6, #0 + adds r1, r4, #0 + bl PositionRelative + adds r0, r4, #0 + bl sub_08004168 + ldrh r0, [r5, #6] + movs r2, #0x2e + ldrsh r1, [r4, r2] + mov r3, sb + ldrh r2, [r3, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + mov r5, sl + ands r1, r5 + movs r3, #0x32 + ldrsh r2, [r4, r3] + mov r5, sb + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + mov r3, sl + ands r2, r3 + lsls r2, r2, #6 + orrs r1, r2 + adds r2, r4, #0 + adds r2, #0x38 + ldrb r2, [r2] + bl sub_0807B7D8 + b _0807AC44 + .align 2, 0 +_0807ABF0: .4byte gRoomControls +_0807ABF4: + movs r0, #0x2a + movs r1, #2 + movs r2, #0 + bl CreateObject + adds r4, r0, #0 + cmp r4, #0 + beq _0807AC44 + lsls r2, r7, #0x10 + mov r0, r8 + lsls r3, r0, #0x10 + adds r0, r6, #0 + adds r1, r4, #0 + bl PositionRelative + str r5, [r4, #0x54] + ldr r0, _0807AC50 @ =0x0000404F + movs r2, #0x2e + ldrsh r1, [r4, r2] + mov r3, sb + ldrh r2, [r3, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + mov r5, sl + ands r1, r5 + movs r3, #0x32 + ldrsh r2, [r4, r3] + mov r5, sb + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + mov r3, sl + ands r2, r3 + lsls r2, r2, #6 + orrs r1, r2 + adds r2, r4, #0 + adds r2, #0x38 + ldrb r2, [r2] + bl SetTile +_0807AC44: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807AC50: .4byte 0x0000404F + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807AC54.inc b/asm/non_matching/playerUtils/sub_0807AC54.inc new file mode 100644 index 00000000..2b4b638f --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807AC54.inc @@ -0,0 +1,67 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldr r0, _0807AC74 @ =gPlayerState + ldrb r1, [r0, #0x11] + adds r3, r0, #0 + cmp r1, #0 + beq _0807ACC6 + ldrb r0, [r3, #0x12] + cmp r0, #0x2a + beq _0807ACA8 + cmp r0, #0x2a + bgt _0807AC78 + cmp r0, #0x1e + beq _0807AC82 + b _0807ACC6 + .align 2, 0 +_0807AC74: .4byte gPlayerState +_0807AC78: + cmp r0, #0x2b + beq _0807AC90 + cmp r0, #0x2c + beq _0807ACB6 + b _0807ACC6 +_0807AC82: + ldrh r0, [r2, #0x2e] + movs r1, #0x10 + rsbs r1, r1, #0 + ands r1, r0 + movs r0, #8 + orrs r1, r0 + strh r1, [r2, #0x2e] +_0807AC90: + movs r0, #0 + movs r1, #0x1d + strb r1, [r2, #0xc] + strb r0, [r2, #0xd] + strh r0, [r2, #0x30] + ldr r0, _0807ACA4 @ =0x000002CF + strh r0, [r3, #8] + movs r0, #1 + b _0807ACC8 + .align 2, 0 +_0807ACA4: .4byte 0x000002CF +_0807ACA8: + ldrh r0, [r2, #0x2e] + movs r1, #0x10 + rsbs r1, r1, #0 + ands r1, r0 + movs r0, #8 + orrs r1, r0 + strh r1, [r2, #0x2e] +_0807ACB6: + movs r0, #0 + movs r1, #0x1d + strb r1, [r2, #0xc] + movs r1, #1 + strb r1, [r2, #0xd] + strh r0, [r2, #0x30] + movs r0, #1 + b _0807ACC8 +_0807ACC6: + movs r0, #0 +_0807ACC8: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807ACCC.inc b/asm/non_matching/playerUtils/sub_0807ACCC.inc new file mode 100644 index 00000000..419f3a09 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807ACCC.inc @@ -0,0 +1,121 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #0x39 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r2] + adds r1, r4, #0 + adds r1, #0x42 + movs r0, #0 + strb r0, [r1] + movs r0, #0x72 + bl GetInventoryValue + movs r1, #0xc0 + cmp r0, #1 + bne _0807ACF4 + adds r1, #0x40 +_0807ACF4: + movs r2, #0x24 + ldrsh r0, [r4, r2] + cmp r1, r0 + ble _0807AD18 + strh r1, [r4, #0x24] + ldr r0, _0807AD14 @ =gPlayerState + ldrb r1, [r0, #0xd] + strb r1, [r4, #0x15] + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #0xf + ands r0, r1 + cmp r0, #1 + bne _0807ADB4 + b _0807AD1E + .align 2, 0 +_0807AD14: .4byte gPlayerState +_0807AD18: + ldrh r0, [r4, #0x24] + subs r0, #4 + strh r0, [r4, #0x24] +_0807AD1E: + ldr r2, _0807AD3C @ =gPlayerState + adds r1, r2, #0 + adds r1, #0x89 + ldrb r0, [r1] + cmp r0, #0 + bne _0807AD40 + adds r0, r4, #0 + bl sub_0807ADB8 + cmp r0, #0 + bne _0807AD74 + adds r0, r4, #0 + bl sub_0807AE20 + b _0807AD74 + .align 2, 0 +_0807AD3C: .4byte gPlayerState +_0807AD40: + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + beq _0807AD52 + adds r0, r4, #0 + bl sub_0807ADB8 + b _0807AD74 +_0807AD52: + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] + ldr r0, _0807ADA0 @ =0x00000163 + bl SoundReq +_0807AD74: + ldr r0, _0807ADA4 @ =gPlayerState + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0807ADA8 + adds r2, r4, #0 + adds r2, #0x3c + ldrb r1, [r2] + movs r0, #4 + orrs r0, r1 + strb r0, [r2] + subs r2, #0x13 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #6 + orrs r0, r1 + b _0807ADB2 + .align 2, 0 +_0807ADA0: .4byte 0x00000163 +_0807ADA4: .4byte gPlayerState +_0807ADA8: + adds r2, r4, #0 + adds r2, #0x3c + ldrb r1, [r2] + movs r0, #0xfb + ands r0, r1 +_0807ADB2: + strb r0, [r2] +_0807ADB4: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807ADB8.inc b/asm/non_matching/playerUtils/sub_0807ADB8.inc new file mode 100644 index 00000000..e0ebea74 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807ADB8.inc @@ -0,0 +1,56 @@ + .syntax unified + push {r4, lr} + adds r2, r0, #0 + ldr r3, _0807ADF4 @ =gPlayerState + adds r0, r3, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _0807AE1C + movs r0, #0x26 + adds r0, r0, r3 + mov ip, r0 + ldrb r0, [r0] + movs r1, #0x80 + eors r0, r1 + mov r1, ip + strb r0, [r1] + movs r1, #0x80 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #0 + beq _0807ADF8 + adds r1, r3, #0 + adds r1, #0x89 + movs r0, #0x78 + strb r0, [r1] + b _0807AE0E + .align 2, 0 +_0807ADF4: .4byte gPlayerState +_0807ADF8: + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] + adds r0, r3, #0 + adds r0, #0x89 + strb r4, [r0] +_0807AE0E: + ldr r0, _0807AE18 @ =0x00000163 + bl SoundReq + movs r0, #1 + b _0807AE1E + .align 2, 0 +_0807AE18: .4byte 0x00000163 +_0807AE1C: + movs r0, #0 +_0807AE1E: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807AE20.inc b/asm/non_matching/playerUtils/sub_0807AE20.inc new file mode 100644 index 00000000..fd809dea --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807AE20.inc @@ -0,0 +1,98 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0x17 + bne _0807AE32 + ldr r0, _0807AE58 @ =gPlayerState + ldrb r0, [r0, #0xa] + cmp r0, #0 + bne _0807AE74 +_0807AE32: + ldr r0, _0807AE5C @ =gRoomControls + ldrh r0, [r0] + cmp r0, #0 + bne _0807AE74 + ldr r0, _0807AE58 @ =gPlayerState + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0807AE74 + movs r0, #0x72 + bl GetInventoryValue + cmp r0, #1 + bne _0807AE60 + movs r0, #0xe0 + lsls r0, r0, #1 + b _0807AE64 + .align 2, 0 +_0807AE58: .4byte gPlayerState +_0807AE5C: .4byte gRoomControls +_0807AE60: + movs r0, #0xc0 + lsls r0, r0, #1 +_0807AE64: + strh r0, [r4, #0x24] + adds r0, r4, #0 + bl sub_08079520 + movs r0, #0xb1 + lsls r0, r0, #1 + bl SoundReq +_0807AE74: + movs r0, #0x10 + bl sub_080793E4 + cmp r0, #0 + beq _0807AEA8 + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0x14 + strb r0, [r1] + adds r1, #5 + movs r0, #4 + strb r0, [r1] + ldrb r0, [r4, #0x14] + lsls r0, r0, #2 + movs r1, #0x10 + eors r0, r1 + adds r1, r4, #0 + adds r1, #0x3e + strb r0, [r1] + movs r0, #2 + rsbs r0, r0, #0 + bl ModHealth + movs r0, #0x7a + bl SoundReq +_0807AEA8: + ldrb r1, [r4, #0x15] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0807AECC + ldr r0, _0807AEC8 @ =gRoomTransition + ldr r0, [r0] + movs r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _0807AEDE + adds r0, r4, #0 + movs r1, #4 + bl CreateRandomWaterTrace + b _0807AEDE + .align 2, 0 +_0807AEC8: .4byte gRoomTransition +_0807AECC: + ldr r0, _0807AEE0 @ =gRoomTransition + ldr r0, [r0] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _0807AEDE + adds r0, r4, #0 + bl CreateWaterTrace +_0807AEDE: + pop {r4, pc} + .align 2, 0 +_0807AEE0: .4byte gRoomTransition + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B480.inc b/asm/non_matching/playerUtils/sub_0807B480.inc new file mode 100644 index 00000000..5b5a93f5 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B480.inc @@ -0,0 +1,108 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r6, r0, #0 + adds r7, r1, #0 + movs r1, #2 + bl sub_0807B464 + cmp r0, #0 + beq _0807B558 + adds r0, r6, #0 + subs r0, #0x40 + movs r1, #2 + bl sub_0807B464 + adds r5, r0, #0 + adds r0, r6, #1 + movs r1, #2 + bl sub_0807B464 + lsls r0, r0, #1 + orrs r5, r0 + adds r4, r6, #0 + adds r4, #0x40 + adds r0, r4, #0 + movs r1, #2 + bl sub_0807B464 + lsls r0, r0, #2 + orrs r5, r0 + subs r0, r6, #1 + movs r1, #2 + bl sub_0807B464 + lsls r0, r0, #3 + orrs r5, r0 + adds r0, r6, #0 + adds r0, #0x41 + movs r1, #1 + bl sub_0807B464 + lsls r0, r0, #1 + orrs r5, r0 + adds r0, r6, #0 + adds r0, #0x3f + movs r1, #1 + bl sub_0807B464 + lsls r0, r0, #3 + orrs r5, r0 + adds r0, r4, #0 + movs r1, #2 + bl GetTileType + cmp r0, #0 + beq _0807B4FA + adds r0, r6, #0 + adds r0, #0x80 + movs r1, #1 + bl sub_0807B464 + lsls r0, r0, #2 + orrs r5, r0 +_0807B4FA: + ldr r0, _0807B514 @ =gUnk_0811C2CC + lsls r1, r5, #1 + adds r1, r1, r0 + ldrh r4, [r1] + adds r0, r6, #0 + movs r1, #2 + bl GetTileType + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + ldr r2, _0807B518 @ =gUnk_0811C2EC + movs r3, #0 + b _0807B51E + .align 2, 0 +_0807B514: .4byte gUnk_0811C2CC +_0807B518: .4byte gUnk_0811C2EC +_0807B51C: + adds r2, #6 +_0807B51E: + ldrh r1, [r2] + cmp r1, #0 + beq _0807B52A + cmp r0, r1 + bne _0807B51C + ldrh r3, [r2, #2] +_0807B52A: + movs r0, #1 + lsls r0, r7 + bics r3, r0 + ldr r2, _0807B534 @ =gUnk_0811C2EC + b _0807B53A + .align 2, 0 +_0807B534: .4byte gUnk_0811C2EC +_0807B538: + adds r2, #6 +_0807B53A: + ldrh r0, [r2] + cmp r0, #0 + beq _0807B54E + ldrh r0, [r2, #2] + cmp r3, r0 + bne _0807B538 + ldrh r0, [r2, #4] + cmp r5, r0 + bne _0807B538 + ldrh r4, [r2] +_0807B54E: + adds r0, r4, #0 + adds r1, r6, #0 + movs r2, #2 + bl SetTileType +_0807B558: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B55C.inc b/asm/non_matching/playerUtils/sub_0807B55C.inc new file mode 100644 index 00000000..80c33c7f --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B55C.inc @@ -0,0 +1,39 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r6, r1, #0 + adds r7, r2, #0 + bl sub_0807B464 + cmp r0, #0 + beq _0807B5AC + adds r0, r5, #0 + subs r0, #0x40 + adds r1, r6, #0 + bl sub_0807B464 + adds r4, r0, #0 + adds r0, r5, #1 + adds r1, r6, #0 + bl sub_0807B464 + lsls r0, r0, #1 + orrs r4, r0 + adds r0, r5, #0 + adds r0, #0x40 + adds r1, r6, #0 + bl sub_0807B464 + lsls r0, r0, #2 + orrs r4, r0 + subs r0, r5, #1 + adds r1, r6, #0 + bl sub_0807B464 + lsls r0, r0, #3 + orrs r0, r4 + lsls r0, r0, #1 + adds r0, r0, r7 + ldrh r0, [r0] + adds r1, r5, #0 + adds r2, r6, #0 + bl SetTileType +_0807B5AC: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B5B0.inc b/asm/non_matching/playerUtils/sub_0807B5B0.inc new file mode 100644 index 00000000..e2555d37 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B5B0.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r3, r0, #0 + movs r1, #0x2e + ldrsh r0, [r3, r1] + ldr r6, _0807B5F8 @ =gUnk_0811C456 + ldrb r1, [r3, #0x14] + movs r2, #6 + ands r2, r1 + lsls r1, r2, #1 + adds r1, r1, r6 + movs r4, #0 + ldrsh r1, [r1, r4] + adds r0, r0, r1 + ldr r5, _0807B5FC @ =gRoomControls + ldrh r1, [r5, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r4, #0x3f + ands r0, r4 + movs r7, #0x32 + ldrsh r1, [r3, r7] + adds r2, #1 + lsls r2, r2, #1 + adds r2, r2, r6 + movs r3, #0 + ldrsh r2, [r2, r3] + adds r1, r1, r2 + ldrh r2, [r5, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + lsls r1, r1, #6 + orrs r0, r1 + bl sub_0807B600 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807B5F8: .4byte gUnk_0811C456 +_0807B5FC: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B600.inc b/asm/non_matching/playerUtils/sub_0807B600.inc new file mode 100644 index 00000000..8bb7be0b --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B600.inc @@ -0,0 +1,173 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + adds r6, r5, #0 + subs r6, #0x40 + lsls r0, r5, #0x10 + lsrs r0, r0, #0x10 + movs r1, #1 + bl sub_080002C8 + cmp r0, #0x56 + beq _0807B61A + movs r0, #0 + b _0807B76E +_0807B61A: + adds r0, r5, #0 + movs r1, #1 + bl GetTileType + adds r1, r0, #0 + ldr r0, _0807B634 @ =0x0000026A + cmp r1, r0 + bne _0807B638 + adds r0, r5, #0 + bl sub_0807B820 + b _0807B76C + .align 2, 0 +_0807B634: .4byte 0x0000026A +_0807B638: + ldr r0, _0807B648 @ =0x00000267 + cmp r1, r0 + bne _0807B64C + adds r0, r5, #0 + adds r0, #0x40 + bl sub_0807B820 + b _0807B76C + .align 2, 0 +_0807B648: .4byte 0x00000267 +_0807B64C: + ldr r0, _0807B65C @ =0x0000027A + cmp r1, r0 + bne _0807B660 + adds r0, r5, #0 + bl sub_0807B8A8 + b _0807B76C + .align 2, 0 +_0807B65C: .4byte 0x0000027A +_0807B660: + ldr r0, _0807B670 @ =0x00000277 + cmp r1, r0 + bne _0807B674 + adds r0, r5, #0 + adds r0, #0x40 + bl sub_0807B8A8 + b _0807B76C + .align 2, 0 +_0807B670: .4byte 0x00000277 +_0807B674: + ldr r0, _0807B684 @ =0x0000028A + cmp r1, r0 + bne _0807B688 + adds r0, r5, #0 + bl sub_0807B930 + b _0807B76C + .align 2, 0 +_0807B684: .4byte 0x0000028A +_0807B688: + ldr r0, _0807B698 @ =0x00000287 + cmp r1, r0 + bne _0807B69C + adds r0, r5, #0 + adds r0, #0x40 + bl sub_0807B930 + b _0807B76C + .align 2, 0 +_0807B698: .4byte 0x00000287 +_0807B69C: + adds r0, r5, #0 + movs r1, #2 + bl GetTileType + cmp r0, #0 + beq _0807B6EC + ldr r0, _0807B6E8 @ =0x000002F2 + adds r1, r5, #0 + movs r2, #1 + bl SetTileType + adds r0, r6, #0 + movs r1, #1 + bl sub_080002E0 + cmp r0, #3 + bne _0807B6CA + movs r0, #0xbd + lsls r0, r0, #2 + adds r1, r6, #0 + movs r2, #1 + bl SetTileType +_0807B6CA: + adds r0, r5, #0 + adds r0, #0x40 + movs r1, #1 + bl sub_080002E0 + cmp r0, #3 + bne _0807B6F8 + movs r0, #0xbd + lsls r0, r0, #2 + adds r1, r5, #0 + movs r2, #1 + bl SetTileType + b _0807B6F8 + .align 2, 0 +_0807B6E8: .4byte 0x000002F2 +_0807B6EC: + movs r0, #0xbd + lsls r0, r0, #2 + adds r1, r5, #0 + movs r2, #1 + bl SetTileType +_0807B6F8: + adds r0, r6, #0 + movs r1, #2 + bl sub_0807B464 + cmp r0, #0 + beq _0807B748 + movs r0, #0 + adds r1, r6, #0 + movs r2, #2 + bl SetTileType + adds r0, r6, #0 + movs r1, #1 + bl GetTileType + ldr r1, _0807B770 @ =0x000002F2 + cmp r0, r1 + bne _0807B728 + movs r0, #0xbd + lsls r0, r0, #2 + adds r1, r6, #0 + movs r2, #1 + bl SetTileType +_0807B728: + adds r0, r5, #1 + ldr r4, _0807B774 @ =gUnk_0811C2AC + movs r1, #1 + adds r2, r4, #0 + bl sub_0807B55C + subs r0, r5, #1 + movs r1, #1 + adds r2, r4, #0 + bl sub_0807B55C + adds r0, r6, #0 + movs r1, #1 + adds r2, r4, #0 + bl sub_0807B55C +_0807B748: + adds r0, r6, #1 + movs r1, #3 + bl sub_0807B480 + subs r0, r6, #1 + movs r1, #1 + bl sub_0807B480 + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + bl sub_0807B480 + adds r0, r6, #0 + subs r0, #0x40 + movs r1, #2 + bl sub_0807B480 +_0807B76C: + movs r0, #1 +_0807B76E: + pop {r4, r5, r6, pc} + .align 2, 0 +_0807B770: .4byte 0x000002F2 +_0807B774: .4byte gUnk_0811C2AC + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B778.inc b/asm/non_matching/playerUtils/sub_0807B778.inc new file mode 100644 index 00000000..44e3790c --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B778.inc @@ -0,0 +1,44 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + adds r6, r1, #0 + lsls r0, r5, #0x10 + lsrs r0, r0, #0x10 + lsls r1, r6, #0x18 + lsrs r1, r1, #0x18 + bl sub_080002C8 + cmp r0, #0xd + bne _0807B7D0 + adds r0, r5, #0 + subs r0, #0x40 + adds r1, r6, #0 + bl sub_0807B434 + adds r4, r0, #0 + adds r0, r5, #1 + adds r1, r6, #0 + bl sub_0807B434 + lsls r0, r0, #1 + orrs r4, r0 + adds r0, r5, #0 + adds r0, #0x40 + adds r1, r6, #0 + bl sub_0807B434 + lsls r0, r0, #2 + orrs r4, r0 + subs r0, r5, #1 + adds r1, r6, #0 + bl sub_0807B434 + lsls r0, r0, #3 + orrs r0, r4 + ldr r1, _0807B7D4 @ =gUnk_0811C466 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + adds r1, r5, #0 + adds r2, r6, #0 + bl SetTileType +_0807B7D0: + pop {r4, r5, r6, pc} + .align 2, 0 +_0807B7D4: .4byte gUnk_0811C466 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807B9B8.inc b/asm/non_matching/playerUtils/sub_0807B9B8.inc new file mode 100644 index 00000000..6e2f118f --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807B9B8.inc @@ -0,0 +1,99 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r7, r0, #0 + adds r4, r1, #0 + adds r6, r2, #0 + adds r0, r4, #0 + adds r1, r6, #0 + bl DeleteLoadedTileEntity + adds r0, r6, #0 + bl GetLayerByIndex + adds r5, r0, #0 + lsls r1, r4, #1 + adds r0, r5, #4 + adds r0, r0, r1 + strh r7, [r0] + lsls r1, r7, #1 + ldr r2, _0807BA24 @ =0x00005004 + adds r0, r5, r2 + adds r0, r0, r1 + ldrh r2, [r0] + ldr r0, _0807BA28 @ =0x00002004 + adds r1, r5, r0 + adds r1, r1, r4 + ldr r0, _0807BA2C @ =gUnk_080B3E80 + adds r0, r2, r0 + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0807BA30 @ =0x0000B004 + adds r1, r5, r0 + adds r1, r1, r4 + ldr r0, _0807BA34 @ =gUnk_080B37A0 + adds r2, r2, r0 + ldrb r0, [r2] + strb r0, [r1] + ldr r0, _0807BA38 @ =gRoomControls + ldrb r1, [r0, #0xf] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0807BA78 + movs r1, #0x3f + ands r1, r4 + lsls r1, r1, #1 + movs r0, #0xfc + lsls r0, r0, #4 + ands r0, r4 + lsls r0, r0, #2 + adds r1, r1, r0 + cmp r6, #2 + beq _0807BA40 + lsls r1, r1, #1 + ldr r0, _0807BA3C @ =gUnk_02019EE0 + b _0807BA44 + .align 2, 0 +_0807BA24: .4byte 0x00005004 +_0807BA28: .4byte 0x00002004 +_0807BA2C: .4byte gUnk_080B3E80 +_0807BA30: .4byte 0x0000B004 +_0807BA34: .4byte gUnk_080B37A0 +_0807BA38: .4byte gRoomControls +_0807BA3C: .4byte gUnk_02019EE0 +_0807BA40: + lsls r1, r1, #1 + ldr r0, _0807BA7C @ =gMapDataTopSpecial +_0807BA44: + adds r3, r1, r0 + lsls r0, r7, #3 + ldr r1, _0807BA80 @ =0x00007004 + adds r0, r0, r1 + adds r0, r5, r0 + ldrh r1, [r0] + strh r1, [r3] + ldrh r1, [r0, #2] + strh r1, [r3, #2] + movs r1, #0x80 + lsls r1, r1, #1 + adds r2, r3, r1 + ldrh r1, [r0, #4] + strh r1, [r2] + movs r2, #0x81 + lsls r2, r2, #1 + adds r1, r3, r2 + ldrh r0, [r0, #6] + strh r0, [r1] + ldr r0, _0807BA84 @ =gRoomControls + ldrh r0, [r0] + cmp r0, #1 + beq _0807BA78 + ldr r1, _0807BA88 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807BA78: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807BA7C: .4byte gMapDataTopSpecial +_0807BA80: .4byte 0x00007004 +_0807BA84: .4byte gRoomControls +_0807BA88: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BA8C.inc b/asm/non_matching/playerUtils/sub_0807BA8C.inc new file mode 100644 index 00000000..d7a45a8c --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BA8C.inc @@ -0,0 +1,101 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + adds r7, r1, #0 + bl DeleteLoadedTileEntity + adds r0, r7, #0 + bl GetLayerByIndex + adds r5, r0, #0 + lsls r2, r4, #1 + adds r1, r5, #4 + adds r1, r1, r2 + ldr r3, _0807BAFC @ =0x00003004 + adds r0, r5, r3 + adds r0, r0, r2 + ldrh r6, [r0] + strh r6, [r1] + lsls r1, r6, #1 + ldr r2, _0807BB00 @ =0x00005004 + adds r0, r5, r2 + adds r0, r0, r1 + ldrh r2, [r0] + ldr r3, _0807BB04 @ =0x00002004 + adds r1, r5, r3 + adds r1, r1, r4 + ldr r0, _0807BB08 @ =gUnk_080B3E80 + adds r0, r2, r0 + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0807BB0C @ =0x0000B004 + adds r1, r5, r0 + adds r1, r1, r4 + ldr r0, _0807BB10 @ =gUnk_080B37A0 + adds r2, r2, r0 + ldrb r0, [r2] + strb r0, [r1] + ldr r0, _0807BB14 @ =gRoomControls + ldrb r1, [r0, #0xf] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0807BB54 + movs r1, #0x3f + ands r1, r4 + lsls r1, r1, #1 + movs r0, #0xfc + lsls r0, r0, #4 + ands r0, r4 + lsls r0, r0, #2 + adds r1, r1, r0 + cmp r7, #2 + beq _0807BB1C + lsls r1, r1, #1 + ldr r0, _0807BB18 @ =gUnk_02019EE0 + b _0807BB20 + .align 2, 0 +_0807BAFC: .4byte 0x00003004 +_0807BB00: .4byte 0x00005004 +_0807BB04: .4byte 0x00002004 +_0807BB08: .4byte gUnk_080B3E80 +_0807BB0C: .4byte 0x0000B004 +_0807BB10: .4byte gUnk_080B37A0 +_0807BB14: .4byte gRoomControls +_0807BB18: .4byte gUnk_02019EE0 +_0807BB1C: + lsls r1, r1, #1 + ldr r0, _0807BB58 @ =gMapDataTopSpecial +_0807BB20: + adds r3, r1, r0 + lsls r0, r6, #3 + ldr r1, _0807BB5C @ =0x00007004 + adds r0, r0, r1 + adds r0, r5, r0 + ldrh r1, [r0] + strh r1, [r3] + ldrh r1, [r0, #2] + strh r1, [r3, #2] + movs r1, #0x80 + lsls r1, r1, #1 + adds r2, r3, r1 + ldrh r1, [r0, #4] + strh r1, [r2] + movs r2, #0x81 + lsls r2, r2, #1 + adds r1, r3, r2 + ldrh r0, [r0, #6] + strh r0, [r1] + ldr r0, _0807BB60 @ =gRoomControls + ldrh r0, [r0] + cmp r0, #1 + beq _0807BB54 + ldr r1, _0807BB64 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807BB54: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807BB58: .4byte gMapDataTopSpecial +_0807BB5C: .4byte 0x00007004 +_0807BB60: .4byte gRoomControls +_0807BB64: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BBE4.inc b/asm/non_matching/playerUtils/sub_0807BBE4.inc new file mode 100644 index 00000000..343f9ae3 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BBE4.inc @@ -0,0 +1,79 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _0807BC28 @ =gMetatileTypesBottom + mov sl, r0 + ldr r0, _0807BC2C @ =gMetatileTypesTop + mov sb, r0 + ldr r5, _0807BC30 @ =0xFFFFB000 + add r5, sl + ldr r4, _0807BC30 @ =0xFFFFB000 + add r4, sb + ldr r2, _0807BC34 @ =0xFFFFD000 + add r2, sl + ldr r1, _0807BC34 @ =0xFFFFD000 + add r1, sb + movs r3, #0 + ldr r0, _0807BC38 @ =0x00003FFF + mov r8, r0 + ldr r0, _0807BC3C @ =gUnk_080B3E80 + mov ip, r0 + ldr r7, _0807BC40 @ =gUnk_080B79A7 + ldr r6, _0807BC44 @ =0xFFFFC000 +_0807BC14: + ldrh r0, [r5] + adds r5, #2 + cmp r0, r8 + bhi _0807BC48 + lsls r0, r0, #1 + add r0, sl + ldrh r0, [r0] + add r0, ip + b _0807BC4C + .align 2, 0 +_0807BC28: .4byte gMetatileTypesBottom +_0807BC2C: .4byte gMetatileTypesTop +_0807BC30: .4byte 0xFFFFB000 +_0807BC34: .4byte 0xFFFFD000 +_0807BC38: .4byte 0x00003FFF +_0807BC3C: .4byte gUnk_080B3E80 +_0807BC40: .4byte gUnk_080B79A7 +_0807BC44: .4byte 0xFFFFC000 +_0807BC48: + adds r0, r0, r6 + adds r0, r0, r7 +_0807BC4C: + ldrb r0, [r0] + strb r0, [r2] + adds r2, #1 + ldrh r0, [r4] + adds r4, #2 + cmp r0, r8 + bhi _0807BC64 + lsls r0, r0, #1 + add r0, sb + ldrh r0, [r0] + add r0, ip + b _0807BC68 +_0807BC64: + adds r0, r0, r6 + adds r0, r0, r7 +_0807BC68: + ldrb r0, [r0] + strb r0, [r1] + adds r1, #1 + adds r3, #1 + ldr r0, _0807BC80 @ =0x00000FFF + cmp r3, r0 + bls _0807BC14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807BC80: .4byte 0x00000FFF + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BC84.inc b/asm/non_matching/playerUtils/sub_0807BC84.inc new file mode 100644 index 00000000..27fac6e1 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BC84.inc @@ -0,0 +1,73 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r1, _0807BD04 @ =gRoomControls + ldrh r0, [r1, #0x1e] + lsrs r2, r0, #4 + mov r8, r1 + cmp r2, #0x40 + bne _0807BC98 + movs r2, #0x3f +_0807BC98: + ldr r1, _0807BD08 @ =gUnk_02027EB4 + adds r3, r2, r1 + adds r6, r1, #0 + adds r6, #0x3f + ldr r0, _0807BD0C @ =gUnk_0200D654 + adds r2, r2, r0 + adds r5, r0, #0 + adds r5, #0x3f + movs r4, #0 + adds r7, r1, #0 + mov ip, r0 + movs r0, #0xff +_0807BCB0: + strb r0, [r3] + strb r0, [r6] + strb r0, [r2] + strb r0, [r5] + adds r3, #0x40 + adds r6, #0x40 + adds r2, #0x40 + adds r5, #0x40 + adds r4, #1 + cmp r4, #0x3f + bls _0807BCB0 + mov r0, r8 + ldrh r1, [r0, #0x20] + ldr r0, _0807BD10 @ =0x0000FFF0 + ands r0, r1 + lsls r0, r0, #2 + adds r3, r0, r7 + movs r1, #0xfc + lsls r1, r1, #4 + adds r6, r7, r1 + mov r1, ip + adds r2, r0, r1 + movs r5, #0xfc + lsls r5, r5, #4 + add r5, ip + movs r4, #0 + movs r0, #0xff +_0807BCE6: + strb r0, [r3] + adds r3, #1 + strb r0, [r6] + adds r6, #1 + strb r0, [r2] + adds r2, #1 + strb r0, [r5] + adds r5, #1 + adds r4, #1 + cmp r4, #0x3f + bls _0807BCE6 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807BD04: .4byte gRoomControls +_0807BD08: .4byte gUnk_02027EB4 +_0807BD0C: .4byte gUnk_0200D654 +_0807BD10: .4byte 0x0000FFF0 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BD14.inc b/asm/non_matching/playerUtils/sub_0807BD14.inc new file mode 100644 index 00000000..4055abd2 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BD14.inc @@ -0,0 +1,87 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r1, #0 + movs r1, #0x2e + ldrsh r2, [r0, r1] + movs r3, #0x32 + ldrsh r1, [r0, r3] + adds r0, r2, #0 + adds r2, r5, #0 + bl sub_0807BEEC + adds r3, r0, #0 + cmp r3, #0xff + beq _0807BDB4 + ldr r1, _0807BD68 @ =gRoomControls + movs r2, #0 + movs r0, #2 + strb r0, [r1, #2] + strb r2, [r1, #3] + movs r4, #1 + strh r4, [r1] + strb r3, [r1, #5] + strb r5, [r1, #0x10] + bl GetCurrentRoomInfo + adds r2, r0, #0 + ldr r1, _0807BD6C @ =gArea + ldr r3, _0807BD70 @ =0x0000085C + adds r0, r1, r3 + str r2, [r0] + ldrb r0, [r1, #0xd] + ands r4, r0 + cmp r4, #0 + beq _0807BD98 + cmp r5, #1 + beq _0807BD7E + cmp r5, #1 + blo _0807BD74 + cmp r5, #2 + beq _0807BD86 + cmp r5, #3 + beq _0807BD90 + b _0807BD98 + .align 2, 0 +_0807BD68: .4byte gRoomControls +_0807BD6C: .4byte gArea +_0807BD70: .4byte 0x0000085C +_0807BD74: + ldrh r0, [r2, #6] + ldrh r1, [r2, #2] + subs r0, r0, r1 + strh r0, [r2, #6] + b _0807BD98 +_0807BD7E: + ldrh r0, [r2] + ldrh r1, [r2, #4] + adds r0, r0, r1 + b _0807BD96 +_0807BD86: + ldrh r0, [r2, #2] + ldrh r3, [r2, #6] + adds r0, r0, r3 + strh r0, [r2, #6] + b _0807BD98 +_0807BD90: + ldrh r0, [r2, #4] + ldrh r1, [r2] + subs r0, r0, r1 +_0807BD96: + strh r0, [r2, #4] +_0807BD98: + ldr r2, _0807BDB0 @ =gPlayerEntity + ldrb r1, [r2, #0x11] + movs r0, #0x10 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #6 + orrs r0, r1 + strb r0, [r2, #0x11] + bl SetInitializationPriority + movs r0, #1 + b _0807BDB6 + .align 2, 0 +_0807BDB0: .4byte gPlayerEntity +_0807BDB4: + movs r0, #0 +_0807BDB6: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BDB8.inc b/asm/non_matching/playerUtils/sub_0807BDB8.inc new file mode 100644 index 00000000..af04a053 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BDB8.inc @@ -0,0 +1,159 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + movs r5, #0xff + movs r0, #7 + ands r1, r0 + cmp r1, #7 + bls _0807BDC8 + b _0807BEE2 +_0807BDC8: + lsls r0, r1, #2 + ldr r1, _0807BDD4 @ =_0807BDD8 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0807BDD4: .4byte _0807BDD8 +_0807BDD8: @ jump table + .4byte _0807BDF8 @ case 0 + .4byte _0807BE10 @ case 1 + .4byte _0807BE30 @ case 2 + .4byte _0807BE4C @ case 3 + .4byte _0807BE78 @ case 4 + .4byte _0807BE94 @ case 5 + .4byte _0807BEB4 @ case 6 + .4byte _0807BEC4 @ case 7 +_0807BDF8: + movs r1, #0x32 + ldrsh r0, [r3, r1] + ldr r1, _0807BE0C @ =gRoomControls + ldrh r1, [r1, #8] + subs r0, r0, r1 + cmp r0, #9 + bhi _0807BEE2 + movs r5, #0 + b _0807BEE2 + .align 2, 0 +_0807BE0C: .4byte gRoomControls +_0807BE10: + movs r2, #0x32 + ldrsh r0, [r3, r2] + ldr r2, _0807BE2C @ =gRoomControls + ldrh r1, [r2, #8] + subs r0, r0, r1 + cmp r0, #9 + bhi _0807BE20 + movs r5, #0 +_0807BE20: + ldrh r0, [r2, #0x1e] + subs r0, #0xa + movs r4, #0x2e + ldrsh r1, [r3, r4] + ldrh r2, [r2, #6] + b _0807BE6A + .align 2, 0 +_0807BE2C: .4byte gRoomControls +_0807BE30: + ldr r1, _0807BE48 @ =gRoomControls + ldrh r2, [r1, #0x1e] + subs r2, #0xa + movs r4, #0x2e + ldrsh r0, [r3, r4] + ldrh r1, [r1, #6] + subs r0, r0, r1 + cmp r2, r0 + bhs _0807BEE2 + movs r5, #1 + b _0807BEE2 + .align 2, 0 +_0807BE48: .4byte gRoomControls +_0807BE4C: + ldr r4, _0807BE74 @ =gRoomControls + ldrh r0, [r4, #0x20] + subs r0, #0xa + movs r2, #0x32 + ldrsh r1, [r3, r2] + ldrh r2, [r4, #8] + subs r1, r1, r2 + cmp r0, r1 + bhs _0807BE60 + movs r5, #2 +_0807BE60: + ldrh r0, [r4, #0x1e] + subs r0, #0xa + movs r2, #0x2e + ldrsh r1, [r3, r2] + ldrh r2, [r4, #6] +_0807BE6A: + subs r1, r1, r2 + cmp r0, r1 + bhs _0807BEE2 + movs r5, #1 + b _0807BEE2 + .align 2, 0 +_0807BE74: .4byte gRoomControls +_0807BE78: + ldr r1, _0807BE90 @ =gRoomControls + ldrh r2, [r1, #0x20] + subs r2, #0xa + movs r4, #0x32 + ldrsh r0, [r3, r4] + ldrh r1, [r1, #8] + subs r0, r0, r1 + cmp r2, r0 + bhs _0807BEE2 + movs r5, #2 + b _0807BEE2 + .align 2, 0 +_0807BE90: .4byte gRoomControls +_0807BE94: + ldr r4, _0807BEB0 @ =gRoomControls + ldrh r0, [r4, #0x20] + subs r0, #0xa + movs r2, #0x32 + ldrsh r1, [r3, r2] + ldrh r2, [r4, #8] + subs r1, r1, r2 + cmp r0, r1 + bhs _0807BEA8 + movs r5, #2 +_0807BEA8: + movs r1, #0x2e + ldrsh r0, [r3, r1] + ldrh r1, [r4, #6] + b _0807BEDA + .align 2, 0 +_0807BEB0: .4byte gRoomControls +_0807BEB4: + movs r2, #0x2e + ldrsh r0, [r3, r2] + ldr r1, _0807BEC0 @ =gRoomControls + ldrh r1, [r1, #6] + b _0807BEDA + .align 2, 0 +_0807BEC0: .4byte gRoomControls +_0807BEC4: + movs r4, #0x32 + ldrsh r0, [r3, r4] + ldr r2, _0807BEE8 @ =gRoomControls + ldrh r1, [r2, #8] + subs r0, r0, r1 + cmp r0, #9 + bhi _0807BED4 + movs r5, #0 +_0807BED4: + movs r1, #0x2e + ldrsh r0, [r3, r1] + ldrh r1, [r2, #6] +_0807BEDA: + subs r0, r0, r1 + cmp r0, #9 + bhi _0807BEE2 + movs r5, #3 +_0807BEE2: + adds r0, r5, #0 + pop {r4, r5, pc} + .align 2, 0 +_0807BEE8: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BEEC.inc b/asm/non_matching/playerUtils/sub_0807BEEC.inc new file mode 100644 index 00000000..9f6d0405 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BEEC.inc @@ -0,0 +1,84 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r6, r0, #0 + adds r7, r1, #0 + ldr r0, _0807BF04 @ =gArea + ldrb r1, [r0, #0xd] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0807BF0C + ldr r0, _0807BF08 @ =gRoomControls + ldrb r0, [r0, #5] + b _0807BF7C + .align 2, 0 +_0807BF04: .4byte gArea +_0807BF08: .4byte gRoomControls +_0807BF0C: + cmp r2, #1 + beq _0807BF2C + cmp r2, #1 + blo _0807BF1E + cmp r2, #2 + beq _0807BF40 + cmp r2, #3 + beq _0807BF58 + b _0807BF7A +_0807BF1E: + ldr r0, _0807BF28 @ =gRoomControls + ldrh r0, [r0, #8] + adds r7, r0, #0 + subs r7, #0x10 + b _0807BF60 + .align 2, 0 +_0807BF28: .4byte gRoomControls +_0807BF2C: + ldr r0, _0807BF3C @ =gRoomControls + ldrh r1, [r0, #6] + ldrh r0, [r0, #0x1e] + adds r1, r1, r0 + adds r6, r1, #0 + adds r6, #0x10 + b _0807BF60 + .align 2, 0 +_0807BF3C: .4byte gRoomControls +_0807BF40: + ldr r0, _0807BF50 @ =gRoomControls + ldrh r1, [r0, #8] + ldrh r0, [r0, #0x20] + adds r1, r1, r0 + adds r7, r1, #0 + adds r7, #0x10 + b _0807BF60 + .align 2, 0 +_0807BF50: .4byte gRoomControls +_0807BF54: + adds r0, r4, #0 + b _0807BF7C +_0807BF58: + ldr r0, _0807BF80 @ =gRoomControls + ldrh r0, [r0, #6] + adds r6, r0, #0 + subs r6, #0x10 +_0807BF60: + ldr r5, _0807BF84 @ =gUnk_02033ACC + movs r4, #0 +_0807BF64: + adds r0, r6, #0 + adds r1, r7, #0 + adds r2, r5, #0 + bl sub_0807BF88 + cmp r0, #0 + bne _0807BF54 + adds r4, #1 + adds r5, #0x20 + cmp r4, #0x3f + bls _0807BF64 +_0807BF7A: + movs r0, #0xff +_0807BF7C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807BF80: .4byte gRoomControls +_0807BF84: .4byte gUnk_02033ACC + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BF88.inc b/asm/non_matching/playerUtils/sub_0807BF88.inc new file mode 100644 index 00000000..e7c6537e --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BF88.inc @@ -0,0 +1,19 @@ + .syntax unified + push {r4, lr} + adds r3, r2, #0 + ldrh r2, [r3, #4] + subs r0, r0, r2 + ldrh r2, [r3, #6] + subs r1, r1, r2 + movs r2, #0 + ldrh r4, [r3] + cmp r0, r4 + bhs _0807BFA4 + ldrh r3, [r3, #2] + cmp r1, r3 + bhs _0807BFA4 + movs r2, #1 +_0807BFA4: + adds r0, r2, #0 + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807BFD0.inc b/asm/non_matching/playerUtils/sub_0807BFD0.inc new file mode 100644 index 00000000..0b1a9373 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807BFD0.inc @@ -0,0 +1,123 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + bl sub_0801B170 + bl sub_0807BFA8 + ldr r7, _0807C0B8 @ =0x0000FFFF + ldr r6, _0807C0BC @ =gMetatileTypesBottom + movs r0, #0x80 + lsls r0, r0, #5 + mov r8, r0 + adds r0, r7, #0 + adds r1, r6, #0 + mov r2, r8 + bl MemFill16 + movs r5, #0 + strh r5, [r6] + ldr r4, _0807C0C0 @ =gMetatileTypesTop + adds r0, r7, #0 + adds r1, r4, #0 + mov r2, r8 + bl MemFill16 + strh r5, [r4] + ldr r2, _0807C0C4 @ =gRoomControls + ldr r0, _0807C0C8 @ =gArea + ldr r1, _0807C0CC @ =0x0000085C + adds r4, r0, r1 + ldr r0, [r4] + ldr r1, [r2, #0x34] + ldr r0, [r0, #8] + cmp r1, r0 + beq _0807C01C + str r0, [r2, #0x34] + bl sub_080197D4 +_0807C01C: + ldr r0, [r4] + ldr r0, [r0, #0x10] + bl sub_080197D4 + ldr r1, _0807C0D0 @ =gPaletteBuffer + adds r0, r1, #0 + adds r0, #0x60 + movs r2, #0xa8 + lsls r2, r2, #2 + adds r1, r1, r2 + movs r2, #0x20 + bl MemCopy + ldr r2, _0807C0D4 @ =gUsedPalettes + ldr r0, [r2] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r2] + ldr r0, [r4] + ldr r0, [r0, #0x14] + cmp r0, #0 + beq _0807C04E + bl sub_0801B130 +_0807C04E: + adds r5, r6, #0 + movs r0, #0x80 + lsls r0, r0, #5 + adds r6, r5, r0 + adds r0, r7, #0 + adds r1, r6, #0 + mov r2, r8 + bl MemFill16 + movs r2, #0 + ldr r3, _0807C0D8 @ =0x000007FF + adds r4, r7, #0 +_0807C066: + ldrh r0, [r5] + cmp r0, r3 + bhi _0807C078 + lsls r0, r0, #1 + adds r1, r0, r6 + ldrh r0, [r1] + cmp r0, r4 + bne _0807C078 + strh r2, [r1] +_0807C078: + adds r2, #1 + adds r5, #2 + cmp r2, r3 + ble _0807C066 + movs r2, #0x80 + lsls r2, r2, #5 + ldr r5, _0807C0C0 @ =gMetatileTypesTop + adds r6, r5, r2 + ldr r4, _0807C0B8 @ =0x0000FFFF + adds r0, r4, #0 + adds r1, r6, #0 + bl MemFill16 + movs r2, #0 + ldr r3, _0807C0D8 @ =0x000007FF +_0807C096: + ldrh r0, [r5] + cmp r0, r3 + bhi _0807C0A8 + lsls r0, r0, #1 + adds r1, r0, r6 + ldrh r0, [r1] + cmp r0, r4 + bne _0807C0A8 + strh r2, [r1] +_0807C0A8: + adds r2, #1 + adds r5, #2 + cmp r2, r3 + ble _0807C096 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807C0B8: .4byte 0x0000FFFF +_0807C0BC: .4byte gMetatileTypesBottom +_0807C0C0: .4byte gMetatileTypesTop +_0807C0C4: .4byte gRoomControls +_0807C0C8: .4byte gArea +_0807C0CC: .4byte 0x0000085C +_0807C0D0: .4byte gPaletteBuffer +_0807C0D4: .4byte gUsedPalettes +_0807C0D8: .4byte 0x000007FF + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C460.inc b/asm/non_matching/playerUtils/sub_0807C460.inc new file mode 100644 index 00000000..a0800f86 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C460.inc @@ -0,0 +1,79 @@ + .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 r7, _0807C4E8 @ =gMapDataBottom + ldr r6, _0807C4EC @ =gMapDataTop + ldr r0, _0807C4F0 @ =gRoomControls + ldrh r1, [r0, #0x1e] + lsrs r3, r1, #4 + ldrh r0, [r0, #0x20] + lsrs r0, r0, #4 + str r0, [sp] + movs r4, #0 + movs r1, #0 + cmp r1, r0 + bhs _0807C4DC + movs r0, #0x40 + subs r0, r0, r3 + lsls r0, r0, #1 + mov sb, r0 +_0807C48C: + movs r5, #0 + adds r1, #1 + mov sl, r1 + cmp r5, r3 + bhs _0807C4CA + ldr r0, _0807C4F4 @ =0x00003FFF + mov r8, r0 +_0807C49A: + ldrh r0, [r7] + cmp r0, r8 + bls _0807C4AC + adds r1, r4, #0 + movs r2, #1 + str r3, [sp, #4] + bl SetTile + ldr r3, [sp, #4] +_0807C4AC: + ldrh r0, [r6] + cmp r0, r8 + bls _0807C4BE + adds r1, r4, #0 + movs r2, #2 + str r3, [sp, #4] + bl SetTile + ldr r3, [sp, #4] +_0807C4BE: + adds r7, #2 + adds r6, #2 + adds r4, #1 + adds r5, #1 + cmp r5, r3 + blo _0807C49A +_0807C4CA: + add r7, sb + add r6, sb + adds r0, r4, #0 + adds r0, #0x40 + subs r4, r0, r3 + mov r1, sl + ldr r0, [sp] + cmp r1, r0 + blo _0807C48C +_0807C4DC: + 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 +_0807C4E8: .4byte gMapDataBottom +_0807C4EC: .4byte gMapDataTop +_0807C4F0: .4byte gRoomControls +_0807C4F4: .4byte 0x00003FFF + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C4F8.inc b/asm/non_matching/playerUtils/sub_0807C4F8.inc new file mode 100644 index 00000000..7ddf21ad --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C4F8.inc @@ -0,0 +1,83 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r0, _0807C594 @ =gRoomControls + ldrb r0, [r0, #4] + cmp r0, #0x71 + beq _0807C592 + ldr r0, _0807C598 @ =gUnk_02019EE0 + movs r4, #0x80 + lsls r4, r4, #8 + adds r1, r4, #0 + bl MemClear + ldr r0, _0807C59C @ =gMapDataTopSpecial + adds r1, r4, #0 + bl MemClear + ldr r5, _0807C5A0 @ =gUnk_02022830 + ldr r0, _0807C5A4 @ =gArea + ldr r1, _0807C5A8 @ =0x0000085C + adds r0, r0, r1 + ldr r0, [r0] + ldr r4, [r0, #0xc] + subs r4, #0xc +_0807C524: + adds r4, #0xc + ldr r1, [r4, #4] + ldr r0, _0807C598 @ =gUnk_02019EE0 + cmp r1, r0 + beq _0807C534 + ldr r0, _0807C59C @ =gMapDataTopSpecial + cmp r1, r0 + bne _0807C54A +_0807C534: + ldr r0, [r4] + ldr r1, _0807C5AC @ =0x7FFFFFFF + ands r0, r1 + str r0, [r5] + ldr r0, [r4, #4] + str r0, [r5, #4] + ldr r0, [r4, #8] + str r0, [r5, #8] + adds r0, r5, #0 + bl sub_080197D4 +_0807C54A: + ldr r0, [r4] + cmp r0, #0 + blt _0807C524 + ldr r4, _0807C598 @ =gUnk_02019EE0 + movs r0, #0x80 + lsls r0, r0, #7 + adds r5, r4, r0 + adds r6, r0, #0 + adds r0, r4, #0 + adds r1, r5, #0 + adds r2, r6, #0 + bl MemCopy + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_0807C5F4 + adds r0, r5, #0 + adds r1, r6, #0 + bl MemClear + ldr r4, _0807C59C @ =gMapDataTopSpecial + adds r5, r4, r6 + adds r0, r4, #0 + adds r1, r5, #0 + adds r2, r6, #0 + bl MemCopy + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_0807C5F4 + adds r0, r5, #0 + adds r1, r6, #0 + bl MemClear +_0807C592: + pop {r4, r5, r6, pc} + .align 2, 0 +_0807C594: .4byte gRoomControls +_0807C598: .4byte gUnk_02019EE0 +_0807C59C: .4byte gMapDataTopSpecial +_0807C5A0: .4byte gUnk_02022830 +_0807C5A4: .4byte gArea +_0807C5A8: .4byte 0x0000085C +_0807C5AC: .4byte 0x7FFFFFFF + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C5B0.inc b/asm/non_matching/playerUtils/sub_0807C5B0.inc new file mode 100644 index 00000000..ea4867e2 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C5B0.inc @@ -0,0 +1,36 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r5, _0807C5E8 @ =gUnk_0200D654 + movs r4, #0x80 + lsls r4, r4, #5 + movs r3, #0 + ldr r6, _0807C5EC @ =gRoomControls + ldr r2, _0807C5F0 @ =gUnk_02027EB4 +_0807C5BE: + adds r0, r5, r3 + ldrb r0, [r0] + cmp r0, #0 + beq _0807C5D4 + cmp r0, #0xf + bhi _0807C5D2 + ldrb r1, [r2] + cmp r1, #0xf + bhi _0807C5D4 + orrs r0, r1 +_0807C5D2: + strb r0, [r2] +_0807C5D4: + adds r2, #1 + adds r3, #1 + cmp r3, r4 + blo _0807C5BE + ldrb r1, [r6, #0xf] + movs r0, #2 + orrs r0, r1 + strb r0, [r6, #0xf] + pop {r4, r5, r6, pc} + .align 2, 0 +_0807C5E8: .4byte gUnk_0200D654 +_0807C5EC: .4byte gRoomControls +_0807C5F0: .4byte gUnk_02027EB4 + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C5F4.inc b/asm/non_matching/playerUtils/sub_0807C5F4.inc new file mode 100644 index 00000000..d0995a9f --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C5F4.inc @@ -0,0 +1,96 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + adds r2, r5, #0 + movs r0, #0x20 + ldr r6, _0807C698 @ =gRoomControls +_0807C5FE: + movs r3, #0 + subs r4, r0, #1 +_0807C602: + ldrh r0, [r1] + strh r0, [r2] + adds r1, #2 + adds r2, #2 + adds r3, #1 + cmp r3, #0x1f + bls _0807C602 + adds r2, #0xc0 + adds r0, r4, #0 + cmp r0, #0 + bne _0807C5FE + ldrh r0, [r6, #0x1e] + cmp r0, #0xff + bls _0807C63E + adds r2, r5, #0 + adds r2, #0x40 + movs r0, #0x20 +_0807C624: + movs r3, #0 + subs r4, r0, #1 +_0807C628: + ldrh r0, [r1] + strh r0, [r2] + adds r1, #2 + adds r2, #2 + adds r3, #1 + cmp r3, #0x1f + bls _0807C628 + adds r2, #0xc0 + adds r0, r4, #0 + cmp r0, #0 + bne _0807C624 +_0807C63E: + ldrh r0, [r6, #0x20] + cmp r0, #0xff + bls _0807C666 + movs r0, #0x80 + lsls r0, r0, #6 + adds r2, r5, r0 + movs r0, #0x20 +_0807C64C: + movs r3, #0 + subs r4, r0, #1 +_0807C650: + ldrh r0, [r1] + strh r0, [r2] + adds r1, #2 + adds r2, #2 + adds r3, #1 + cmp r3, #0x1f + bls _0807C650 + adds r2, #0xc0 + adds r0, r4, #0 + cmp r0, #0 + bne _0807C64C +_0807C666: + ldrh r0, [r6, #0x1e] + cmp r0, #0xff + bls _0807C694 + ldrh r0, [r6, #0x20] + cmp r0, #0xff + bls _0807C694 + movs r0, #0x81 + lsls r0, r0, #6 + adds r2, r5, r0 + movs r0, #0x20 +_0807C67A: + movs r3, #0 + subs r4, r0, #1 +_0807C67E: + ldrh r0, [r1] + strh r0, [r2] + adds r1, #2 + adds r2, #2 + adds r3, #1 + cmp r3, #0x1f + bls _0807C67E + adds r2, #0xc0 + adds r0, r4, #0 + cmp r0, #0 + bne _0807C67A +_0807C694: + pop {r4, r5, r6, pc} + .align 2, 0 +_0807C698: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C69C.inc b/asm/non_matching/playerUtils/sub_0807C69C.inc new file mode 100644 index 00000000..e5a39eba --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C69C.inc @@ -0,0 +1,92 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov sb, r0 + adds r6, r1, #0 + mov r8, r2 + mov r0, r8 + muls r0, r6, r0 + add r0, sb + subs r2, r0, #1 + mov r0, r8 + subs r0, #1 + lsls r0, r0, #6 + add r0, sb + subs r1, r6, #1 + adds r4, r0, r1 + movs r5, #0 + cmp r5, r8 + bhs _0807C6EA +_0807C6C4: + movs r3, #0 + adds r7, r4, #0 + subs r7, #0x40 + subs r0, r2, r6 + mov ip, r0 + cmp r3, r6 + bhs _0807C6E0 +_0807C6D2: + subs r0, r4, r3 + subs r1, r2, r3 + ldrb r1, [r1] + strb r1, [r0] + adds r3, #1 + cmp r3, r6 + blo _0807C6D2 +_0807C6E0: + adds r4, r7, #0 + mov r2, ip + adds r5, #1 + cmp r5, r8 + blo _0807C6C4 +_0807C6EA: + movs r0, #0x40 + subs r7, r0, r6 + movs r5, #0 + mov r1, r8 + lsls r2, r1, #6 + mov r0, sb + adds r1, r0, r6 +_0807C6F8: + lsls r0, r5, #6 + adds r4, r1, r0 + movs r3, #0 + adds r6, r5, #1 + cmp r3, r7 + bhs _0807C710 + movs r5, #0 +_0807C706: + adds r0, r4, r3 + strb r5, [r0] + adds r3, #1 + cmp r3, r7 + blo _0807C706 +_0807C710: + adds r5, r6, #0 + cmp r5, #0x3f + bls _0807C6F8 + movs r0, #0x40 + mov r1, r8 + subs r7, r0, r1 + mov r0, sb + adds r4, r0, r2 + movs r5, #0 + cmp r5, r7 + bhs _0807C736 +_0807C726: + adds r0, r4, #0 + movs r1, #0x40 + bl MemClear + adds r4, #0x40 + adds r5, #1 + cmp r5, r7 + blo _0807C726 +_0807C736: + 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/playerUtils/sub_0807C740.inc b/asm/non_matching/playerUtils/sub_0807C740.inc new file mode 100644 index 00000000..afd175a7 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C740.inc @@ -0,0 +1,111 @@ + .syntax unified + push {r4, r5, lr} + bl sub_0807BFD0 + bl LoadRoomGfx + ldr r4, _0807C780 @ =gRoomControls + ldr r2, [r4, #0x30] + cmp r2, #0 + beq _0807C788 + ldrh r1, [r2, #0x2e] + lsls r0, r1, #0x10 + cmp r0, #0 + bge _0807C764 + ldr r0, _0807C784 @ =0x00007FFF + ands r0, r1 + ldrh r1, [r4, #6] + subs r0, r0, r1 + strh r0, [r2, #0x2e] +_0807C764: + movs r0, #0x2e + ldrsh r3, [r2, r0] + ldrh r1, [r2, #0x32] + lsls r0, r1, #0x10 + cmp r0, #0 + bge _0807C77A + ldr r0, _0807C784 @ =0x00007FFF + ands r0, r1 + ldrh r1, [r4, #8] + subs r0, r0, r1 + strh r0, [r2, #0x32] +_0807C77A: + movs r0, #0x32 + ldrsh r5, [r2, r0] + b _0807C78C + .align 2, 0 +_0807C780: .4byte gRoomControls +_0807C784: .4byte 0x00007FFF +_0807C788: + movs r3, #0 + movs r5, #0 +_0807C78C: + cmp r3, #0x77 + bgt _0807C794 + movs r0, #0 + b _0807C7A2 +_0807C794: + ldrh r1, [r4, #0x1e] + adds r0, r1, #0 + subs r0, #0x78 + cmp r0, r3 + blt _0807C7A0 + adds r0, r3, #0 +_0807C7A0: + subs r0, #0x78 +_0807C7A2: + strh r0, [r4, #0xa] + ldrh r1, [r4, #6] + ldrh r2, [r4, #0xa] + adds r0, r1, r2 + strh r0, [r4, #0xa] + cmp r5, #0x4f + bgt _0807C7B4 + movs r0, #0 + b _0807C7C2 +_0807C7B4: + ldrh r2, [r4, #0x20] + adds r0, r2, #0 + subs r0, #0x50 + cmp r0, r5 + blt _0807C7C0 + adds r0, r5, #0 +_0807C7C0: + subs r0, #0x50 +_0807C7C2: + strh r0, [r4, #0xc] + ldrh r0, [r4, #8] + ldrh r3, [r4, #0xc] + adds r0, r0, r3 + strh r0, [r4, #0xc] + ldr r2, [r4, #0x30] + cmp r2, #0 + beq _0807C7FC + ldrh r3, [r2, #0x2e] + adds r0, r1, r3 + strh r0, [r2, #0x2e] + ldr r1, [r4, #0x30] + ldrh r0, [r4, #8] + ldrh r2, [r1, #0x32] + adds r0, r0, r2 + strh r0, [r1, #0x32] + ldr r0, _0807C80C @ =gRoomControls + ldrb r1, [r0, #0xf] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0807C7FC + ldr r0, [r4, #0x30] + adds r0, #0x38 + movs r1, #1 + strb r1, [r0] + ldr r0, [r4, #0x30] + bl UpdateSpriteForCollisionLayer +_0807C7FC: + ldrb r1, [r4, #0xf] + movs r0, #0xfb + ands r0, r1 + strb r0, [r4, #0xf] + bl sub_08080BC4 + pop {r4, r5, pc} + .align 2, 0 +_0807C80C: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C810.inc b/asm/non_matching/playerUtils/sub_0807C810.inc new file mode 100644 index 00000000..1e6842fe --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C810.inc @@ -0,0 +1,37 @@ + .syntax unified + push {r4, r5, r6, lr} + bl sub_0807BFD0 + ldr r2, _0807C850 @ =gUnk_03004030 + ldr r6, _0807C854 @ =gPlayerEntity + ldr r4, _0807C858 @ =gRoomControls + ldr r3, [r2] + ldrh r1, [r3, #6] + movs r0, #0x3f + ands r0, r1 + lsls r0, r0, #4 + ldrh r1, [r4, #6] + adds r0, r0, r1 + ldrh r1, [r2, #4] + adds r1, r1, r0 + movs r5, #0 + strh r1, [r6, #0x2e] + ldrh r1, [r3, #6] + movs r0, #0xfc + lsls r0, r0, #4 + ands r0, r1 + lsrs r0, r0, #2 + ldrh r4, [r4, #8] + adds r0, r0, r4 + ldrh r1, [r2, #6] + adds r1, r1, r0 + strh r1, [r6, #0x32] + bl sub_080809D4 + ldr r0, _0807C85C @ =gUpdateVisibleTiles + strb r5, [r0] + pop {r4, r5, r6, pc} + .align 2, 0 +_0807C850: .4byte gUnk_03004030 +_0807C854: .4byte gPlayerEntity +_0807C858: .4byte gRoomControls +_0807C85C: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807C8B0.inc b/asm/non_matching/playerUtils/sub_0807C8B0.inc new file mode 100644 index 00000000..90f1d5db --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807C8B0.inc @@ -0,0 +1,98 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov r8, r0 + adds r4, r1, #0 + mov ip, r2 + mov r0, ip + muls r0, r4, r0 + lsls r0, r0, #1 + add r0, r8 + subs r7, r0, #2 + mov r0, ip + subs r0, #1 + lsls r0, r0, #7 + add r0, r8 + lsls r3, r4, #1 + subs r1, r3, #2 + adds r0, r0, r1 + movs r5, #0 + cmp r5, ip + bhs _0807C906 + mov sb, r3 +_0807C8DE: + movs r2, #0 + adds r6, r0, #0 + subs r6, #0x80 + cmp r2, r4 + bhs _0807C8FA + adds r1, r7, #0 + adds r3, r0, #0 +_0807C8EC: + ldrh r0, [r1] + strh r0, [r3] + subs r1, #2 + subs r3, #2 + adds r2, #1 + cmp r2, r4 + blo _0807C8EC +_0807C8FA: + adds r0, r6, #0 + mov r1, sb + subs r7, r7, r1 + adds r5, #1 + cmp r5, ip + blo _0807C8DE +_0807C906: + movs r0, #0x40 + subs r6, r0, r4 + movs r5, #0 + lsls r0, r4, #1 + mov r2, ip + lsls r7, r2, #7 + mov r2, r8 + adds r1, r2, r0 +_0807C916: + lsls r0, r5, #7 + adds r0, r1, r0 + movs r2, #0 + adds r3, r5, #1 + cmp r2, r6 + bhs _0807C92E + movs r4, #0 +_0807C924: + strh r4, [r0] + adds r0, #2 + adds r2, #1 + cmp r2, r6 + blo _0807C924 +_0807C92E: + adds r5, r3, #0 + cmp r5, #0x3f + bls _0807C916 + movs r0, #0x40 + mov r1, ip + subs r6, r0, r1 + mov r2, r8 + adds r0, r2, r7 + movs r5, #0 + cmp r5, r6 + bhs _0807C956 + adds r4, r0, #0 +_0807C946: + adds r0, r4, #0 + movs r1, #0x80 + bl MemClear + adds r4, #0x80 + adds r5, #1 + cmp r5, r6 + blo _0807C946 +_0807C956: + 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/playerUtils/sub_0807CAC8.inc b/asm/non_matching/playerUtils/sub_0807CAC8.inc new file mode 100644 index 00000000..3ee32207 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807CAC8.inc @@ -0,0 +1,18 @@ + .syntax unified + ldr r2, _0807CAE0 @ =gSave + ldr r1, _0807CAE4 @ =gArea + ldr r3, _0807CAE8 @ =0x0000047C + adds r2, r2, r3 + ldrb r1, [r1, #3] + adds r2, r2, r1 + movs r1, #1 + lsls r1, r0 + ldrb r0, [r2] + orrs r1, r0 + strb r1, [r2] + bx lr + .align 2, 0 +_0807CAE0: .4byte gSave +_0807CAE4: .4byte gArea +_0807CAE8: .4byte 0x0000047C + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807CAEC.inc b/asm/non_matching/playerUtils/sub_0807CAEC.inc new file mode 100644 index 00000000..3b284ee5 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807CAEC.inc @@ -0,0 +1,18 @@ + .syntax unified + adds r2, r0, #0 + ldr r0, _0807CB04 @ =gSave + ldr r1, _0807CB08 @ =gArea + ldr r3, _0807CB0C @ =0x0000047C + adds r0, r0, r3 + ldrb r1, [r1, #3] + adds r0, r0, r1 + ldrb r0, [r0] + asrs r0, r2 + movs r1, #1 + ands r0, r1 + bx lr + .align 2, 0 +_0807CB04: .4byte gSave +_0807CB08: .4byte gArea +_0807CB0C: .4byte 0x0000047C + .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807CB24.inc b/asm/non_matching/playerUtils/sub_0807CB24.inc new file mode 100644 index 00000000..13d60790 --- /dev/null +++ b/asm/non_matching/playerUtils/sub_0807CB24.inc @@ -0,0 +1,74 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + adds r3, r1, #0 + cmp r2, #0x11 + bhi _0807CB84 + lsls r0, r2, #2 + ldr r1, _0807CB38 @ =_0807CB3C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0807CB38: .4byte _0807CB3C +_0807CB3C: @ jump table + .4byte _0807CB84 @ case 0 + .4byte _0807CB88 @ case 1 + .4byte _0807CB88 @ case 2 + .4byte _0807CB88 @ case 3 + .4byte _0807CB88 @ case 4 + .4byte _0807CB88 @ case 5 + .4byte _0807CB88 @ case 6 + .4byte _0807CB88 @ case 7 + .4byte _0807CB88 @ case 8 + .4byte _0807CB88 @ case 9 + .4byte _0807CB88 @ case 10 + .4byte _0807CB88 @ case 11 + .4byte _0807CB88 @ case 12 + .4byte _0807CB88 @ case 13 + .4byte _0807CB84 @ case 14 + .4byte _0807CBA0 @ case 15 + .4byte _0807CBAE @ case 16 + .4byte _0807CBBC @ case 17 +_0807CB84: + movs r1, #0 + b _0807CBCA +_0807CB88: + ldr r0, _0807CB9C @ =gLocalFlagBanks + lsls r1, r2, #1 + adds r1, r1, r0 + ldrh r0, [r1] + adds r1, r3, #0 + bl CheckLocalFlagByBank +_0807CB96: + adds r1, r0, #0 + b _0807CBCA + .align 2, 0 +_0807CB9C: .4byte gLocalFlagBanks +_0807CBA0: + adds r0, r3, #0 + bl GetInventoryValue + cmp r0, #0 + beq _0807CB96 + movs r0, #1 + b _0807CB96 +_0807CBAE: + adds r0, r3, #0 + bl GetInventoryValue + movs r1, #0 + cmp r0, #1 + bne _0807CBCA + b _0807CBC8 +_0807CBBC: + adds r0, r3, #0 + bl GetInventoryValue + movs r1, #0 + cmp r0, #2 + bne _0807CBCA +_0807CBC8: + movs r1, #1 +_0807CBCA: + adds r0, r1, #0 + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/object/objectB.s b/asm/object/objectB.s index 4e8097ef..df46ef44 100644 --- a/asm/object/objectB.s +++ b/asm/object/objectB.s @@ -296,7 +296,7 @@ _08083DC4: .4byte gSave _08083DC8: ldrb r0, [r4, #0xa] movs r1, #2 - bl sub_0807CAA0 + bl SetInventoryValue _08083DD0: bl DeleteThisEntity _08083DD4: diff --git a/asm/object/waterfallOpening.s b/asm/object/waterfallOpening.s index b75c7cb1..aa7eb186 100644 --- a/asm/object/waterfallOpening.s +++ b/asm/object/waterfallOpening.s @@ -118,7 +118,7 @@ _0809F88C: bne _0809F8AE movs r0, #3 strb r0, [r4, #0xd] - ldr r1, _0809F8B8 @ =gChooseFileState + ldr r1, _0809F8B8 @ =gMenu ldrb r0, [r1, #6] adds r0, #1 strb r0, [r1, #6] @@ -129,7 +129,7 @@ _0809F8AE: bl sub_080A00B0 b _0809F8FE .align 2, 0 -_0809F8B8: .4byte gChooseFileState +_0809F8B8: .4byte gMenu _0809F8BC: ldrb r0, [r4, #0xa] cmp r0, #0 diff --git a/asm/playerUtils.s b/asm/playerUtils.s deleted file mode 100644 index b9a53489..00000000 --- a/asm/playerUtils.s +++ /dev/null @@ -1,638 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08077698 -sub_08077698: @ 0x08077698 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _0807771C @ =gPlayerState - ldrb r1, [r2, #3] - movs r0, #0xfe - ands r0, r1 - strb r0, [r2, #3] - ldrb r1, [r2, #4] - movs r0, #0xf - ands r0, r1 - strb r0, [r2, #4] - ldrb r0, [r2, #7] - ldrb r3, [r2, #2] - orrs r0, r3 - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08077700 - movs r0, #0x40 - ands r0, r3 - cmp r0, #0 - bne _08077700 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _08077700 - adds r0, r4, #0 - bl sub_08077758 - cmp r0, #0 - beq _08077700 - bl sub_080777A0 - cmp r0, #0 - bne _08077700 - ldr r4, _08077720 @ =gSave - adds r0, r4, #0 - adds r0, #0xb4 - ldrb r0, [r0] - movs r1, #1 - movs r2, #0 - bl sub_08077880 - adds r4, #0xb5 - ldrb r0, [r4] - movs r1, #2 - movs r2, #0 - bl sub_08077880 - bl sub_080778CC -_08077700: - movs r5, #0 - ldr r4, _08077724 @ =gUnk_03000B80 -_08077704: - ldrb r0, [r4, #9] - cmp r0, #0 - beq _08077712 - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_080752E8 -_08077712: - adds r4, #0x1c - adds r5, #1 - cmp r5, #3 - bls _08077704 - pop {r4, r5, pc} - .align 2, 0 -_0807771C: .4byte gPlayerState -_08077720: .4byte gSave -_08077724: .4byte gUnk_03000B80 - - thumb_func_start sub_08077728 -sub_08077728: @ 0x08077728 - push {lr} - cmp r0, #0 - bne _08077744 - ldr r0, _08077740 @ =gSave - adds r0, #0xb4 - ldrb r0, [r0] - movs r1, #1 - movs r2, #1 - bl sub_08077880 - b _08077752 - .align 2, 0 -_08077740: .4byte gSave -_08077744: - ldr r0, _08077754 @ =gSave - adds r0, #0xb5 - ldrb r0, [r0] - movs r1, #2 - movs r2, #1 - bl sub_08077880 -_08077752: - pop {pc} - .align 2, 0 -_08077754: .4byte gSave - - thumb_func_start sub_08077758 -sub_08077758: @ 0x08077758 - push {lr} - adds r3, r0, #0 - ldr r2, _08077794 @ =gPlayerState - ldr r1, [r2, #0x30] - movs r0, #0x80 - lsls r0, r0, #7 - ands r0, r1 - cmp r0, #0 - bne _0807779C - movs r0, #0xd5 - lsls r0, r0, #4 - ands r1, r0 - cmp r1, #0 - bne _08077798 - ldrb r0, [r2, #0x1e] - ldrb r1, [r2, #0x1a] - orrs r1, r0 - adds r0, r3, #0 - adds r0, #0x7a - ldrh r0, [r0] - orrs r1, r0 - cmp r1, #0 - bne _0807779C - adds r0, r3, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - bne _0807779C - movs r0, #1 - b _0807779E - .align 2, 0 -_08077794: .4byte gPlayerState -_08077798: - bl DeleteClones -_0807779C: - movs r0, #0 -_0807779E: - pop {pc} - - thumb_func_start sub_080777A0 -sub_080777A0: @ 0x080777A0 - push {r4, lr} - ldr r3, _080777D0 @ =gPlayerState - adds r0, r3, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r4, #0x80 - adds r0, r4, #0 - ands r0, r1 - cmp r0, #0 - beq _08077870 - ldr r1, [r3, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xf - ands r0, r1 - cmp r0, #0 - beq _080777D4 - adds r1, r3, #0 - adds r1, #0xa0 - movs r0, #1 - strb r0, [r1] - bl DeleteClones -_080777CC: - movs r0, #1 - b _0807787C - .align 2, 0 -_080777D0: .4byte gPlayerState -_080777D4: - ldr r2, _080777F4 @ =gArea - ldrb r0, [r2, #0x18] - cmp r0, #2 - beq _080777FC - cmp r0, #3 - beq _08077810 - ldr r0, _080777F8 @ =gUnk_0200AF00 - adds r0, #0x2c - ldrb r0, [r0] - cmp r0, #0xc - bne _0807787A - adds r2, r3, #0 - ldrb r0, [r2, #0x1c] - cmp r0, #0 - bne _0807787A - b _08077838 - .align 2, 0 -_080777F4: .4byte gArea -_080777F8: .4byte gUnk_0200AF00 -_080777FC: - ldrb r0, [r2, #0x1a] - cmp r0, #0 - bne _080777CC - ldr r1, _0807780C @ =gPlayerEntity - ldrb r0, [r1, #0xd] - adds r0, #1 - strb r0, [r1, #0xd] - b _080777CC - .align 2, 0 -_0807780C: .4byte gPlayerEntity -_08077810: - ldrb r0, [r2, #0x1a] - cmp r0, #0 - bne _0807787A - ands r1, r4 - cmp r1, #0 - beq _0807787A - ldr r0, _08077834 @ =gPlayerEntity - ldrb r1, [r0, #0xd] - adds r1, #1 - strb r1, [r0, #0xd] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #0xb4 - bl RequestPriorityDuration - b _080777CC - .align 2, 0 -_08077834: .4byte gPlayerEntity -_08077838: - ldrb r0, [r2, #0x12] - cmp r0, #0x11 - beq _0807787A - adds r0, r2, #0 - adds r0, #0x90 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - beq _0807787A - ldr r0, [r2, #0x30] - ldr r1, _0807786C @ =0x00040400 - ands r0, r1 - cmp r0, #0 - bne _0807787A - ldrb r0, [r2, #2] - cmp r0, #0 - bne _0807787A - ldrb r0, [r2, #4] - cmp r0, #0 - bne _0807787A - movs r0, #0x18 - strb r0, [r2, #0xc] - b _0807787A - .align 2, 0 -_0807786C: .4byte 0x00040400 -_08077870: - ldr r0, [r3, #0x30] - movs r1, #0x20 - ands r0, r1 - cmp r0, #0 - bne _080777CC -_0807787A: - movs r0, #0 -_0807787C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08077880 -sub_08077880: @ 0x08077880 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - subs r0, r4, #1 - cmp r0, #0x1e - bhi _080778C0 - lsls r0, r4, #1 - adds r0, r0, r4 - lsls r0, r0, #2 - ldr r1, _080778C4 @ =gUnk_0811BE48 - adds r5, r0, r1 - ldr r1, _080778C8 @ =gPlayerState + 0x90 - ldrb r0, [r5] - cmp r0, #0 - beq _080778A0 - adds r1, #2 -_080778A0: - ldrh r0, [r1] - ands r0, r6 - cmp r0, #0 - bne _080778AC - cmp r2, #0 - beq _080778C0 -_080778AC: - adds r0, r4, #0 - bl sub_0807794C - adds r1, r0, #0 - cmp r1, #0 - beq _080778C0 - ldrb r0, [r5, #1] - strb r0, [r1, #9] - strb r4, [r1, #1] - strb r6, [r1, #3] -_080778C0: - pop {r4, r5, r6, pc} - .align 2, 0 -_080778C4: .4byte gUnk_0811BE48 -_080778C8: .4byte gPlayerState + 0x90 - - thumb_func_start sub_080778CC -sub_080778CC: @ 0x080778CC - push {lr} - ldr r2, _08077920 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08077924 @ =0x000400A0 - ands r0, r1 - cmp r0, #0 - bne _0807791C - ldr r0, _08077928 @ =gPlayerEntity - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #0 - bne _080778FA - ldrb r0, [r2, #5] - cmp r0, #0 - bne _080778FA - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0807791C -_080778FA: - bl sub_080789A8 - cmp r0, #0 - bne _08077910 - ldr r0, _08077920 @ =gPlayerState - adds r0, #0x90 - ldrh r1, [r0] - ldr r0, _0807792C @ =0x00000F03 - ands r0, r1 - cmp r0, #0 - bne _0807791C -_08077910: - movs r0, #0x1b - bl sub_0807794C - adds r1, r0, #0 - cmp r1, #0 - bne _08077930 -_0807791C: - movs r0, #0 - b _08077940 - .align 2, 0 -_08077920: .4byte gPlayerState -_08077924: .4byte 0x000400A0 -_08077928: .4byte gPlayerEntity -_0807792C: .4byte 0x00000F03 -_08077930: - movs r0, #0x1b - strb r0, [r1, #1] - ldr r0, _08077944 @ =gUnk_0811BE48 - ldr r2, _08077948 @ =0x00000145 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r1, #9] - movs r0, #1 -_08077940: - pop {pc} - .align 2, 0 -_08077944: .4byte gUnk_0811BE48 -_08077948: .4byte 0x00000145 - - thumb_func_start sub_0807794C -sub_0807794C: @ 0x0807794C - push {lr} - adds r2, r0, #0 - ldr r0, _080779B8 @ =gPlayerState - ldrb r1, [r0, #0xc] - adds r3, r0, #0 - cmp r1, #0x18 - bne _0807795E - cmp r2, #0x1b - bne _080779B2 -_0807795E: - ldr r0, [r3, #0x30] - movs r1, #0x88 - lsls r1, r1, #0xf - ands r0, r1 - cmp r0, #0 - beq _0807796E - cmp r2, #6 - bhi _080779B2 -_0807796E: - ldrb r0, [r3, #2] - cmp r0, #0 - bne _0807797C - ldr r0, _080779BC @ =gPlayerEntity - ldr r0, [r0, #0x34] - cmp r0, #0 - beq _08077980 -_0807797C: - cmp r2, #6 - bhi _080779B2 -_08077980: - ldr r0, [r3, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807799A - ldr r0, _080779C0 @ =gUnk_0811BE48 - lsls r1, r2, #1 - adds r1, r1, r2 - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r1, #8] - cmp r0, #0 - beq _080779B2 -_0807799A: - ldrb r0, [r3, #0x12] - cmp r0, #0x11 - bne _080779C4 - adds r0, r3, #0 - adds r0, #0x37 - ldrb r0, [r0] - cmp r0, #0 - beq _080779C4 - adds r0, r2, #0 - subs r0, #0x14 - cmp r0, #1 - bls _080779C4 -_080779B2: - movs r0, #0 - b _080779DE - .align 2, 0 -_080779B8: .4byte gPlayerState -_080779BC: .4byte gPlayerEntity -_080779C0: .4byte gUnk_0811BE48 -_080779C4: - ldr r1, _080779E0 @ =gUnk_0811BE48 - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #2] - ldr r1, _080779E4 @ =gUnk_0811BFC8 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl _call_via_r1 -_080779DE: - pop {pc} - .align 2, 0 -_080779E0: .4byte gUnk_0811BE48 -_080779E4: .4byte gUnk_0811BFC8 - - thumb_func_start sub_080779E8 -sub_080779E8: @ 0x080779E8 - movs r0, #0 - bx lr - - thumb_func_start sub_080779EC -sub_080779EC: @ 0x080779EC - push {lr} - ldr r1, _08077A00 @ =gUnk_03000B80 - adds r0, r1, #0 - adds r0, #0x25 - ldrb r0, [r0] - cmp r0, #0 - bne _08077A04 - adds r0, r1, #0 - adds r0, #0x1c - b _08077A16 - .align 2, 0 -_08077A00: .4byte gUnk_03000B80 -_08077A04: - adds r0, r1, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0 - beq _08077A12 - movs r0, #0 - b _08077A16 -_08077A12: - adds r0, r1, #0 - adds r0, #0x38 -_08077A16: - pop {pc} - - thumb_func_start sub_08077A18 -sub_08077A18: @ 0x08077A18 - push {lr} - adds r1, r0, #0 - ldr r0, _08077A3C @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #0 - bne _08077A44 - ldr r0, _08077A40 @ =gUnk_03000B80 - ldrb r2, [r0, #0x1d] - cmp r1, r2 - beq _08077A44 - adds r0, #0x39 - ldrb r0, [r0] - cmp r1, r0 - beq _08077A44 - adds r0, r1, #0 - bl sub_080779EC - b _08077A46 - .align 2, 0 -_08077A3C: .4byte gPlayerState -_08077A40: .4byte gUnk_03000B80 -_08077A44: - movs r0, #0 -_08077A46: - pop {pc} - - thumb_func_start sub_08077A48 -sub_08077A48: @ 0x08077A48 - push {r4, r5, r6, lr} - adds r2, r0, #0 - ldr r6, _08077A88 @ =gPlayerState - ldrb r0, [r6, #5] - cmp r0, #0 - bne _08077A94 - ldrb r1, [r6, #2] - movs r0, #0x20 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _08077A94 - ldr r0, _08077A8C @ =gUnk_0811BE48 - lsls r1, r2, #1 - adds r1, r1, r2 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r5, _08077A90 @ =gUnk_03000B80 - ldrb r0, [r1, #1] - ldrb r1, [r5, #9] - cmp r0, r1 - blo _08077A94 - adds r0, r5, #0 - movs r1, #0 - bl sub_08077E78 - strb r4, [r6, #1] - strb r4, [r6, #0x1c] - strb r4, [r6, #0x1b] - adds r0, r5, #0 - b _08077A96 - .align 2, 0 -_08077A88: .4byte gPlayerState -_08077A8C: .4byte gUnk_0811BE48 -_08077A90: .4byte gUnk_03000B80 -_08077A94: - movs r0, #0 -_08077A96: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08077A98 -sub_08077A98: @ 0x08077A98 - push {lr} - ldr r0, _08077AB8 @ =gSave - adds r0, #0xac - ldrb r0, [r0] - cmp r0, #0 - beq _08077AC4 - ldr r0, _08077ABC @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #0 - bne _08077AC4 - ldr r1, _08077AC0 @ =gUnk_03000B80 - ldrb r0, [r1, #9] - cmp r0, #0 - bne _08077AC4 - adds r0, r1, #0 - b _08077AC6 - .align 2, 0 -_08077AB8: .4byte gSave -_08077ABC: .4byte gPlayerState -_08077AC0: .4byte gUnk_03000B80 -_08077AC4: - movs r0, #0 -_08077AC6: - pop {pc} - - thumb_func_start sub_08077AC8 -sub_08077AC8: @ 0x08077AC8 - push {lr} - movs r2, #0 - ldr r1, _08077AD8 @ =gUnk_03000B80 -_08077ACE: - ldrb r0, [r1, #9] - cmp r0, #0 - beq _08077ADC - movs r0, #0 - b _08077AE6 - .align 2, 0 -_08077AD8: .4byte gUnk_03000B80 -_08077ADC: - adds r1, #0x1c - adds r2, #1 - cmp r2, #3 - bls _08077ACE - ldr r0, _08077AE8 @ =gUnk_03000BD4 -_08077AE6: - pop {pc} - .align 2, 0 -_08077AE8: .4byte gUnk_03000BD4 - - thumb_func_start sub_08077AEC -sub_08077AEC: @ 0x08077AEC - push {lr} - ldr r0, _08077B14 @ =gUnk_03000BD4 - movs r1, #3 - bl sub_08077E78 - ldr r2, _08077B18 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08077B1C @ =0xFF7FFFFF - ands r0, r1 - str r0, [r2, #0x30] - movs r0, #0x10 - bl IsItemEquipped - adds r1, r0, #0 - cmp r1, #2 - beq _08077B12 - movs r0, #0xf - bl ForceEquipItem -_08077B12: - pop {pc} - .align 2, 0 -_08077B14: .4byte gUnk_03000BD4 -_08077B18: .4byte gPlayerState -_08077B1C: .4byte 0xFF7FFFFF - - thumb_func_start sub_08077B20 -sub_08077B20: @ 0x08077B20 - push {lr} - bl ResetPlayer - bl sub_08077AEC - pop {pc} diff --git a/data/data_0811BE38.s b/data/data_0811BE38.s index eb7ed5ab..175dc403 100644 --- a/data/data_0811BE38.s +++ b/data/data_0811BE38.s @@ -29,7 +29,7 @@ gUnk_0811BFC8:: @ 0811BFC8 gUnk_0811BFE0:: @ 0811BFE0 .incbin "data_0811BE38/gUnk_0811BFE0.bin" -gUnk_0811BFE8:: @ 0811BFE8 +gPlayerChargeActions:: @ 0811BFE8 .4byte sub_08078008 .4byte sub_08078124 .4byte sub_08078140 diff --git a/data/scripts/cutscene/introAssembly/script_PlayerGetSword.inc b/data/scripts/cutscene/introAssembly/script_PlayerGetSword.inc index 009478ee..09f52543 100644 --- a/data/scripts/cutscene/introAssembly/script_PlayerGetSword.inc +++ b/data/scripts/cutscene/introAssembly/script_PlayerGetSword.inc @@ -1,6 +1,6 @@ @ Intro Assembly Player gets Sword SCRIPT_START script_PlayerGetSword - _0807F078 0x0001, 0x0001 + SetInventoryValue 0x0001, 0x0001 CallWithArg PutItemAnySlot, 0x00000001 PlaySound SFX_109 CallWithArg SetPlayerAnimation2, 0x0000045f diff --git a/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc b/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc index a25fa93f..46e39e17 100644 --- a/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc +++ b/data/scripts/cutscene/introCeremony/script_Npc4EMonsters.inc @@ -27,7 +27,7 @@ SCRIPT_START script_Npc4EMonsters WaitForFadeFinish CallWithArg DeleteManager36, 0x00000002 _0807F0C8 0x0000, 0x0000 - Call sub_0806DC3C + Call NPC4E_SaveEquippedItems Call SetPlayerActionNormal CallWithArg EquipItem, 0x0000000d CallWithArg sub_0807F29C, gUnk_080049F6 @@ -42,7 +42,7 @@ SCRIPT_START script_Npc4EMonsters SetSyncFlag 0x20000000 Wait 0x0078 CallWithArg sub_0807F29C, 0x00000000 - Call sub_0806DC58 + Call NPC4E_RestoreEquippedItems SetSyncFlag 0x40000000 SetSyncFlag 0x00000010 SetSyncFlag 0x00000100 diff --git a/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc b/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc index c969f3bb..02d18eba 100644 --- a/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc +++ b/data/scripts/cutscene/introCeremony/script_Npc4EVaatiAttacking.inc @@ -7,7 +7,7 @@ SCRIPT_START script_Npc4EVaatiAttacking WaitForSyncFlagAndClear 0x00000400 MessageFromTargetPos 0x1047, 0x0000 WaitUntilTextboxCloses - Call sub_0806DC3C + Call NPC4E_SaveEquippedItems Call SetPlayerActionNormal CallWithArg EquipItem, 0x0000000d CallWithArg sub_0807F29C, gUnk_080049F6 @@ -15,7 +15,7 @@ SCRIPT_START script_Npc4EVaatiAttacking SetSyncFlag 0x00000100 WaitForSyncFlagAndClear 0x00000200 CallWithArg sub_0807F29C, 0x00000000 - Call sub_0806DC58 + Call NPC4E_RestoreEquippedItems Wait 0x003c SetSyncFlag 0x08000000 PlaySound SFX_125 diff --git a/data/scripts/cutscene/introTown/script_Npc4EIntroCastle.inc b/data/scripts/cutscene/introTown/script_Npc4EIntroCastle.inc index 9e1c5a94..44fa21f2 100644 --- a/data/scripts/cutscene/introTown/script_Npc4EIntroCastle.inc +++ b/data/scripts/cutscene/introTown/script_Npc4EIntroCastle.inc @@ -5,7 +5,7 @@ SCRIPT_START script_Npc4EIntroCastle Call sub_0807DF28 StartPlayerScript script_PlayerIntroCastle WaitForSyncFlagAndClear 0x00000400 - _0807F078 0x0034, 0x0002 + SetInventoryValue 0x0034, 0x0002 MessageFromTargetPos 0x1036, 0x000c WaitUntilTextboxCloses SetSyncFlag 0x00000010 diff --git a/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc b/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc index 0f8cf461..10f3eef7 100644 --- a/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc +++ b/data/scripts/cutscene/introTown/script_Npc4EIntroTown.inc @@ -159,7 +159,7 @@ SCRIPT_START script_Npc4EIntroTown @ Give the shield to the player GivePlayerItem 0x000d WaitPlayerGetItem - Call sub_0806DC3C + Call NPC4E_SaveEquippedItems Call SetPlayerActionNormal CallWithArg EquipItem, 0x0000000d SetIntVariable 0x000000ff @@ -172,7 +172,7 @@ SCRIPT_START script_Npc4EIntroTown WaitUntilTextboxCloses @ Give control back to the player CallWithArg sub_0807F29C, 0x00000000 - Call sub_0806DC58 + Call NPC4E_RestoreEquippedItems _0807F0B4 0x0004 CameraTargetPlayer Wait 0x000a diff --git a/data/scripts/graveyard/script_DampeInside.inc b/data/scripts/graveyard/script_DampeInside.inc index c722ae55..42ebf439 100644 --- a/data/scripts/graveyard/script_DampeInside.inc +++ b/data/scripts/graveyard/script_DampeInside.inc @@ -13,7 +13,7 @@ SCRIPT_START script_DampeInside MessageFromTarget 0x053c WaitPlayerGetItem WaitUntilTextboxCloses - _0807F078 0x003c, 0x0001 + SetInventoryValue 0x003c, 0x0001 script_08009622: EnablePlayerControl DoPostScriptAction 0x0000 diff --git a/data/scripts/graveyard/script_DampeOuside.inc b/data/scripts/graveyard/script_DampeOuside.inc index 653e1ee5..21ea8e95 100644 --- a/data/scripts/graveyard/script_DampeOuside.inc +++ b/data/scripts/graveyard/script_DampeOuside.inc @@ -28,7 +28,7 @@ script_08009660: JumpIfNot script_0800968E PlaySound SFX_111 PlaySound SFX_SECRET - _0807F078 0x003c, 0x0002 + SetInventoryValue 0x003c, 0x0002 Call sub_0806BEFC script_0800968E: EnablePlayerControl diff --git a/data/scripts/graveyard/script_Object69CrowStealingKey.inc b/data/scripts/graveyard/script_Object69CrowStealingKey.inc index 47cf61f9..420f5f94 100644 --- a/data/scripts/graveyard/script_Object69CrowStealingKey.inc +++ b/data/scripts/graveyard/script_Object69CrowStealingKey.inc @@ -17,7 +17,7 @@ SCRIPT_START script_Object69CrowStealingKey WaitForSyncFlagAndClear 0x00000010 SetSyncFlag 0x00000020 WaitForSyncFlagAndClear 0x00000040 - _0807F078 0x003c, 0x0000 + SetInventoryValue 0x003c, 0x0000 SetGlobalFlag 0x0020 _0807E8E4_3 Wait 0x001e diff --git a/data/scripts/mtCrenel/script_PlayerGetWhiteSword.inc b/data/scripts/mtCrenel/script_PlayerGetWhiteSword.inc index 6c1f1237..1ebd20e1 100644 --- a/data/scripts/mtCrenel/script_PlayerGetWhiteSword.inc +++ b/data/scripts/mtCrenel/script_PlayerGetWhiteSword.inc @@ -1,6 +1,6 @@ @ Mines Player get white sword SCRIPT_START script_PlayerGetWhiteSword - _0807F078 0x0002, 0x0001 + SetInventoryValue 0x0002, 0x0001 CallWithArg PutItemAnySlot, 0x00000002 PlaySound SFX_109 CallWithArg SetPlayerAnimation2, 0x000001e2 diff --git a/data/scripts/sanctuary/script_Npc4EPedestal.inc b/data/scripts/sanctuary/script_Npc4EPedestal.inc index 6abf95dc..6900e574 100644 --- a/data/scripts/sanctuary/script_Npc4EPedestal.inc +++ b/data/scripts/sanctuary/script_Npc4EPedestal.inc @@ -52,9 +52,9 @@ script_080134F8: Wait 0x003c StartPlayerScript script_PlayerPickUpSword SetSyncFlag 0x00000080 - _0807F078 0x0003, 0x0001 - Call sub_0806DC3C - Call sub_0806DC58 + SetInventoryValue 0x0003, 0x0001 + Call NPC4E_SaveEquippedItems + Call NPC4E_RestoreEquippedItems Call WaitForPlayerFrameHiBit Wait 0x003c SetFadeTime 0x0004 diff --git a/data/scripts/sanctuary/script_Npc4ESecondSanctuary.inc b/data/scripts/sanctuary/script_Npc4ESecondSanctuary.inc index e36bf5f1..4b069913 100644 --- a/data/scripts/sanctuary/script_Npc4ESecondSanctuary.inc +++ b/data/scripts/sanctuary/script_Npc4ESecondSanctuary.inc @@ -55,9 +55,9 @@ script_0801373C: Wait 0x003c StartPlayerScript script_PlayerPickUpSword SetSyncFlag 0x00000080 - _0807F078 0x0004, 0x0001 - Call sub_0806DC3C - Call sub_0806DC58 + SetInventoryValue 0x0004, 0x0001 + Call NPC4E_SaveEquippedItems + Call NPC4E_RestoreEquippedItems Call WaitForPlayerFrameHiBit Wait 0x003c SetFadeTime 0x0004 diff --git a/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc b/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc index ae46129d..3e97485d 100644 --- a/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc +++ b/data/scripts/sanctuary/script_Npc4EThirdSanctuary.inc @@ -59,10 +59,10 @@ script_080138D0: Wait 0x003c StartPlayerScript script_PlayerPickUpFinalSword SetSyncFlag 0x00000080 - _0807F078 0x0006, 0x0001 + SetInventoryValue 0x0006, 0x0001 Call UpdatePlayerSkills - Call sub_0806DC3C - Call sub_0806DC58 + Call NPC4E_SaveEquippedItems + Call NPC4E_RestoreEquippedItems Call WaitForPlayerFrameHiBit Wait 0x003c SetFadeTime 0x0004 @@ -83,12 +83,12 @@ script_080138D0: SetEntityPositionRelative 0x00e8, 0x00d8 CameraTargetEntity .endif - Call sub_0806DC3C + Call NPC4E_SaveEquippedItems CallWithArg EquipItem, 0x00010001 CallWithArg sub_0807F29C, gUnk_080049FE Wait 0x00c8 CallWithArg sub_0807F29C, 0x00000000 - Call sub_0806DC58 + Call NPC4E_RestoreEquippedItems script_08013A8E: .ifndef EU CheckRoomFlag 0x0004 diff --git a/data/scripts/unused/script_08016482.inc b/data/scripts/unused/script_08016482.inc index 2e4770e6..9ceb5e3a 100644 --- a/data/scripts/unused/script_08016482.inc +++ b/data/scripts/unused/script_08016482.inc @@ -71,7 +71,7 @@ SCRIPT_START script_08016482 GiveKinstone 0x0001 GivePlayerItem 0x0001 GetInventoryValue 0x0001 - _0807F078 0x0001, 0x0002 + SetInventoryValue 0x0001, 0x0002 _0807F088 0x0001 CameraTargetEntity CameraTargetPlayer diff --git a/data/scripts/veilFalls/script_BigGoronMirrorShield.inc b/data/scripts/veilFalls/script_BigGoronMirrorShield.inc index c0d457c7..77923ffd 100644 --- a/data/scripts/veilFalls/script_BigGoronMirrorShield.inc +++ b/data/scripts/veilFalls/script_BigGoronMirrorShield.inc @@ -21,8 +21,8 @@ SCRIPT_START script_BigGoronMirrorShield .endif Call sub_0806D620 Wait 0x003c - WaitPlayerGetItem - FaceAwayFromPlayer + WaitPlayerGetItem + FaceAwayFromPlayer MessageNoOverlap 0x1d0c WaitUntilTextboxCloses Wait 0x000a diff --git a/include/asm.h b/include/asm.h index c0aaa344..13c25019 100644 --- a/include/asm.h +++ b/include/asm.h @@ -7,7 +7,7 @@ extern u32 Random(void); extern void sub_08000152(u32, u32, u32); extern u32 GetTileTypeByEntity(struct Entity_*); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); -extern u32 GetTileType(u32 pos, u32 layer); +extern u32 GetTileType(u32 position, u32 layer); extern void SetTile(u32 index, u32 position, u32 layer); extern void UpdateScrollVram(void); extern u32 sub_080002D0(struct Entity_*); diff --git a/include/flags.h b/include/flags.h index f0e2056a..1ee02ce7 100644 --- a/include/flags.h +++ b/include/flags.h @@ -30,8 +30,6 @@ extern u32 CheckBits(void*, u32, u32); extern u32 WriteBit(void*, u32); extern u32 ClearBit(void*, u32); -extern u32 gGlobalFlags; - extern const u16 gLocalFlagBanks[]; enum LocalFlagOffsets { diff --git a/include/functions.h b/include/functions.h index 7b55c2d6..b89a1a80 100644 --- a/include/functions.h +++ b/include/functions.h @@ -20,7 +20,11 @@ extern void CopyOAM(void); extern void CreateChestSpawner(Entity*); extern void CreateItemOnGround(Entity*); extern void CreateMagicSparkles(u32, u32, u32); -extern void CreateRandomItemDrop(Entity*, s32); +extern void CreateMinishEntrance(u32 tile); +extern Entity* CreatePlayerBomb(ItemBehavior*, u32); +extern u32 CreateRandomItemDrop(Entity*, u32); +extern void CreateSparkle(Entity*); +extern void DoPlayerAction(Entity*); extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4 extern void DrawEntities(void); extern void DrawOAMCmd(void); @@ -32,6 +36,8 @@ extern LayerStruct* GetLayerByIndex(u32); extern u32 GetRandomByWeight(const u8*); extern u32 GetTileIndex(u32, u32); extern void GiveItem(u32, u32); +extern void HandlePlayerLife(Entity*); +extern bool32 HasSwordEquipped(); extern bool32 IsColliding(Entity*, Entity*); extern bool32 IsCollidingPlayer(Entity*); extern bool32 IsProjectileOffScreen(Entity*); @@ -39,8 +45,10 @@ extern bool32 IsTileCollision(u8*, s32, s32, u32); extern void LinearMoveAngle(Entity*, u32, u32); extern void LinearMoveDirection(Entity*, u32, u32); extern bool32 LoadFixedGFX(Entity*, u32); +extern void LoadResources(void); extern bool32 LoadSwapGFX(Entity*, u16, u32); extern void MenuFadeIn(u32, u32); +extern void ModBombs(s32); extern u32 PlayerInRange(Entity*, u32, u32); extern bool32 ProcessMovement1(Entity*); extern bool32 ProcessMovement12(Entity*); @@ -51,10 +59,14 @@ extern bool32 ProcessMovement5(Entity*); extern bool32 ProcessMovement6(Entity*); extern bool32 ProcessMovementInternal(Entity*, s32, s32, u32); extern void SetDirtTile(u32); +/** @see Item */ +extern void SetInventoryValue(u32, u32); extern void SoundReqClipped(Entity*, u32); extern void TryLoadPrologueHyruleTown(void); extern void UnloadOBJPalette(Entity*); +extern void UpdateDisplayControls(void); extern void UpdateItemAnim(ItemBehavior*); +extern void UpdatePlayerMovement(void); // Unidentified extern void sub_08000148(u32, u32, u32); @@ -69,6 +81,8 @@ extern u32 sub_080002E0(u32, u32); extern s32 sub_080012DC(Entity*); extern void sub_08001318(Entity*); extern u32 sub_0800132C(Entity*, Entity*); +extern void sub_080027EA(Entity*, u32, u32); +extern void sub_080028E0(Entity*); extern u32 sub_080040A2(Entity*); extern u32 sub_080040D8(Entity*, u8*, s32, s32); extern void sub_08004168(Entity*); @@ -85,10 +99,12 @@ extern void sub_08004542(Entity*); extern void sub_080085B0(Entity*); extern void sub_08008796(Entity*, u32, u32, u32); extern void sub_08016AD2(Entity*); +extern void sub_080171F0(void); extern u32 sub_0801766C(Entity*); extern void sub_0801AF18(u8*, u32, u32); extern void sub_0801AFE4(void); extern void sub_0801C1D4(void); +extern void sub_0801C25C(void); extern void sub_0801E104(void); extern void sub_08027870(Entity*); extern void sub_08030118(u32); @@ -130,6 +146,8 @@ extern u32* sub_0805F25C(u32); extern u32 sub_0805F7A0(u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); extern u32 sub_0805F8F8(u32); +extern void sub_080600F0(Entity*); +extern void sub_08060158(Entity*); extern void sub_0806D02C(Entity*); extern void sub_0806D0B0(Entity*); extern void sub_0806F4E8(Entity*); @@ -144,16 +162,22 @@ extern void sub_0806FD3C(Entity*); extern bool32 sub_0806FDA0(Entity*); extern void sub_0806FEBC(Entity*, u32, Entity*); extern void sub_080751E8(u32, u32, void*); +extern void sub_08077B98(ItemBehavior*); extern void sub_08077BB8(ItemBehavior*); extern Entity* sub_08077C0C(ItemBehavior*, u32); extern Entity* sub_08077C94(ItemBehavior*, u32); extern void sub_08077D38(ItemBehavior*, u32); extern void sub_08077DF4(ItemBehavior*, u32); +extern void sub_08077E3C(ItemBehavior*, u32); extern void sub_08077E54(ItemBehavior*); extern void sub_08077E78(ItemBehavior*, u32); +extern bool32 sub_08077EC8(ItemBehavior*); extern bool32 sub_08077EFC(ItemBehavior*); +extern bool32 sub_08077F10(ItemBehavior*); extern bool32 sub_08077F24(ItemBehavior*, u32); -extern void sub_08077F50(ItemBehavior* beh, u32 arg1); +extern void sub_08077F50(ItemBehavior*, u32); +extern bool32 sub_08077FEC(u32); +extern void sub_08078180(void); extern void sub_080784C8(); extern void sub_08078790(Entity*, u32); extern void sub_080787CC(Entity*); @@ -167,33 +191,43 @@ extern void sub_08078954(Entity*); extern void sub_08078AC0(u32, u32, u32); extern void sub_08078B48(void); extern void sub_08078E84(Entity*, Entity*); +extern void sub_08078FB0(Entity*); extern void sub_08079184(); extern void sub_0807919C(); extern void sub_0807921C(); extern void sub_080792BC(s32, u32, u32); extern u32 sub_0807953C(void); +extern void sub_08079708(Entity*); +extern u32 sub_08079B24(void); extern void sub_08079BD8(Entity*); extern u32 sub_08079D48(); extern void sub_08079D84(void); extern u32 sub_08079F8C(void); extern u32 sub_08079FC4(u32); +extern void sub_0807A050(void); extern void sub_0807A5B8(u32); +extern u32 sub_0807A894(Entity*); +extern void sub_0807A8D8(Entity*); extern void sub_0807AA80(Entity*); extern void sub_0807AABC(Entity*); extern void sub_0807ACCC(Entity*); +extern u32 sub_0807B014(); +extern void sub_0807B0C8(void); extern void sub_0807B7D8(u32, u32, u32); extern void sub_0807B9B8(s32, s32, s32); extern void sub_0807BA8C(u32, u32); -extern void sub_0807BB68(u32*, u32, u32); +extern void sub_0807BB68(s16*, u32, u32); extern bool32 sub_0807BD14(Entity*, u32); -extern void sub_0807CAA0(u32, u32); extern bool32 sub_080806BC(u32, u32, u32, u32); extern void sub_0808091C(const ScreenTransitionData*, u32); extern void sub_080809D4(void); extern void sub_08080CB4(Entity*); extern u32 sub_0808288C(Entity*, u32, u32, u32); -extern bool32 sub_08083734(Entity*, u32); // lockedDoor +extern bool32 sub_08083734(Entity*, u32); extern void sub_08095C48(Entity*); +extern void sub_0809E918(Entity*); +extern void sub_0809E96C(Entity*); +extern u32 sub_0809E9A0(void); extern void sub_0809EABC(Entity*); extern void sub_0809EAD8(Entity*); extern void sub_0809EB30(Entity*); @@ -206,6 +240,7 @@ extern void sub_080A2CC0(Entity*, Entity**, u16*); extern void sub_080A57F4(void); extern void sub_080A71C4(u32, u32, u32, u32); extern void sub_080A7C18(u32, u32, u32); +extern void sub_080ADD70(void); extern void sub_080AE068(Entity*); extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern void sub_080AE58C(Entity*, u32, u32); diff --git a/include/kinstone.h b/include/kinstone.h index 2af4508b..c8a7b580 100644 --- a/include/kinstone.h +++ b/include/kinstone.h @@ -5,13 +5,6 @@ extern void sub_08018C58(u32); -typedef struct { - u8 unk[4]; - u8* unk2; - u8 unk4[4]; -} Unk_struct; -extern Unk_struct gUnk_03003DF0[]; - typedef struct { u8 _0; u8 action; diff --git a/include/new_player.h b/include/new_player.h index fc7a47a9..2d5ba1b1 100644 --- a/include/new_player.h +++ b/include/new_player.h @@ -4,9 +4,16 @@ typedef struct { /*0x00*/ Entity base; - /*0x68*/ u8 unk_68[0xc]; + /*0x68*/ u32 unk_68; + /*0x6c*/ u8 unk_6c; + /*0x6d*/ u8 unk_6d; + /*0x6e*/ u8 unk_6e; + /*0x6f*/ u8 unk_6f; + /*0x70*/ Entity* unk_70; /*0x74*/ Entity* unk_74; - /*0x78*/ u8 unk_78[0x4]; + /*0x78*/ u8 unk_78; + /*0x79*/ u8 unk_79; + /*0x7a*/ u16 unk_7a; /*0x7c*/ u32 unk_7c; /*0x80*/ u8 unk_80[8]; } PlayerEntity; diff --git a/include/player.h b/include/player.h index 50f96c02..4ff7bc59 100644 --- a/include/player.h +++ b/include/player.h @@ -174,6 +174,31 @@ enum SurfaceType { SURFACE_2C, }; +typedef enum { + SKILL_NONE = 0, + SKILL_SPIN_ATTACK = 1, + SKILL_ROLL_ATTACK = 2, + SKILL_DASH_ATTACK = 4, + SKILL_ROCK_BREAKER = 8, + SKILL_SWORD_BEAM = 0x10, + SKILL_GREAT_SPIN = 0x20, + SKILL_DOWN_THRUST = 0x40, + SKILL_PERIL_BEAM = 0x80, + SKILL_FOURSWORD = 0x100, + SKILL_FAST_SPIN = 0x200, + SKILL_FAST_SPLIT = 0x400, + SKILL_LONG_SPIN = 0x800 +} PlayerSkill; + +typedef struct { + /*0x00*/ u8 action; + /*0x01*/ s8 preChargeTimer; + /*0x02*/ u8 swordType; + /*0x03*/ u8 unk_3; + /*0x04*/ s16 chargeTimer; + /*0x06*/ u8 unk_6[2]; +} ChargeState; + typedef struct { /*0x00*/ u8 field_0x0[2]; /*0x02*/ u8 jump_status; @@ -207,7 +232,8 @@ typedef struct { /*0x27*/ u8 field_0x27[5]; /*0x2c*/ Entity* item; /*0x30*/ u32 flags; - /*0x34*/ u8 field_0x34[2]; + /*0x34*/ u8 field_0x34; + /*0x35*/ u8 field_0x35; /*0x36*/ u8 field_0x36; /*0x37*/ u8 field_0x37; /*0x38*/ u8 field_0x38; @@ -231,12 +257,12 @@ typedef struct { /*0x98*/ u16 field_0x98; /*0x9a*/ u16 field_0x9a; /*0x9c*/ u32 field_0x9c; - /*0xa0*/ u8 field_0xa0[8]; + /*0xa0*/ ChargeState chargeState; /*0xa8*/ u8 framestate; /*0xa9*/ u8 framestate_last; /*0xaa*/ u8 field_0xaa; /*0xab*/ u8 field_0xab; - /*0xac*/ u16 field_0xac; + /*0xac*/ u16 skills; /**< Bitfield of skills @see PlayerSkill */ /*0xae*/ u16 field_0xae; } PlayerState; @@ -275,7 +301,8 @@ typedef struct { /*0x4*/ u8 stateID; /*0x5*/ u8 field_0x5[10]; /*0xf*/ u8 field_0xf; - /*0x10*/ u8 field_0x10[8]; + /*0x10*/ u16 field_0x10; + /*0x12*/ u8 field_0x12[6]; /*0x18*/ u32 field_0x18; } ItemBehavior; @@ -304,7 +331,9 @@ void RegisterPlayerHitbox(void); void UpdateFloorType(void); void CreateEzloHint(u32, u32); +/** @see Item */ u32 IsItemEquipped(u32); +/** @see Item */ u32 GetInventoryValue(u32); s32 ModHealth(s32 delta); void ModRupees(s32 delta); diff --git a/include/structures.h b/include/structures.h index a9c77886..d2762da5 100644 --- a/include/structures.h +++ b/include/structures.h @@ -151,4 +151,41 @@ typedef struct { union SplitWord _4; } struct_020227E8; +typedef struct { + /*0x00*/ u8 unk_0; + /*0x01*/ u8 unk_1; + /*0x02*/ u8 unk_2; + /*0x03*/ u8 unk_3; + /*0x04*/ u8* unk_4; + /*0x08*/ Entity* entity; +} struct_03003DF8; + +typedef struct { + /*0x00*/ u8 unk_0; + /*0x01*/ u8 unk_1; + /*0x02*/ u8 unk_2; + /*0x03*/ u8 unk_3; + /*0x04*/ u8* unk_4; + /*0x08*/ struct_03003DF8 array[0x20]; +} struct_03003DF0; + +static_assert(sizeof(struct_03003DF0) == 0x188); + +extern struct_03003DF0 gUnk_03003DF0; + +typedef struct { + u8 numTiles; + u8 unk_1; + u16 firstTileIndex; +} SpriteFrame; + +typedef struct { + void* animations; + SpriteFrame* frames; + void* ptr; + u32 pad; +} SpritePtr; + +extern SpritePtr gSpritePtrs[]; + #endif diff --git a/linker.ld b/linker.ld index 66ec5c34..dce98966 100644 --- a/linker.ld +++ b/linker.ld @@ -39,7 +39,6 @@ SECTIONS { . = 0x00002C01; gUnk_02002C01 = .; . = 0x00002C81; gUnk_02002C81 = .; . = 0x00002C8E; gUnk_02002C8E = .; - . = 0x00002C9C; gGlobalFlags = .; . = 0x00002F00; gMapDataTopSpecial = .; . = 0x00006F00; gUnk_02006F00 = .; . = 0x0000AF00; gUnk_0200AF00 = .; @@ -364,8 +363,6 @@ SECTIONS { src/enemy/wizzrobeWind.o(.text); src/enemy/wizzrobeFire.o(.text); src/enemy/wizzrobeIce.o(.text); - src/enemy/code_080300AC.o(.text); - asm/enemy/code_080300AC.o(.text); src/enemy/armos.o(.text); src/enemy/eyegore.o(.text); src/enemy/rope.o(.text); @@ -507,8 +504,7 @@ SECTIONS { src/manager/manager38.o(.text); src/manager/manager39.o(.text); src/entity.o(.text); - src/code_0805EC04.o(.text); - asm/code_0805EC04.o(.text); /* objaffine? */ + src/code_0805EC04.o(.text); /* objaffine? */ asm/text.o(.text); src/text.o(.text); src/debug.o(.text); diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c index ecac5cfb..37996780 100644 --- a/src/code_0805EC04.c +++ b/src/code_0805EC04.c @@ -1,6 +1,8 @@ #include "entity.h" #include "player.h" #include "structures.h" +#include "room.h" +#include "common.h" bool32 sub_0805EC04(Entity* this) { u32 i = 1; @@ -48,3 +50,41 @@ void sub_0805ED14(u32 param_1) { gPlayerState.field_0x98 = 0; gPlayerState.field_0x9a = 0; } + +ASM_FUNC("asm/non_matching/code_0805EC04/sub_0805ED30.inc", void sub_0805ED30()) + +u32 sub_0805EE04(u32 param_1) { + u32 result = (s32) - (param_1 & 0x200) >> 0x1f & 0x1000; + if ((param_1 & 0x100) != 0) { + result |= 0x20; + result |= 0x8000; + result |= 0x80; + } + if ((param_1 & 1) != 0) { + result |= 0x8; + result |= 0x41; + } + if ((param_1 & 2) != 0) { + result |= 0x10; + result |= 0x2; + } + if ((param_1 & 0x10) != 0) { + result |= 0x100; + } + if ((param_1 & 0x20) != 0) { + result |= 0x200; + } + if ((param_1 & 0x40) != 0) { + result |= 0x400; + } + if ((param_1 & 0x80) != 0) { + result |= 0x800; + } + return result; +} + +void sub_0805EE88(void) { + if ((gRoomTransition.field_0x2c[3] != 0) && ((gRoomTransition.frameCount & 3) == 0)) { + LoadPaletteGroup((((u32)gRoomTransition.frameCount & 0xc) >> 2) + 0x2f); + } +} diff --git a/src/code_08077B98.c b/src/code_08077B98.c deleted file mode 100644 index 970644d3..00000000 --- a/src/code_08077B98.c +++ /dev/null @@ -1,287 +0,0 @@ -#include "functions.h" -#include "object.h" -#include "save.h" - -typedef struct { - u8 unk0[4]; - u16 unk4; - u8 unk6[6]; -} struct_0811BE48; - -typedef struct { - u8 field_0x0; - u8 field_0x1; -} UnkItemStruct; - -void* sub_08077C54(UnkItemStruct* unk); -Entity* CreatePlayerBomb(ItemBehavior*, u32); -extern Entity* sub_0805E744(); - -extern struct_0811BE48 gUnk_0811BE48[]; - -void sub_08077B98(UnkItemStruct* unk) { - if ((gPlayerState.item == NULL) || (gPlayerState.item->id != 1)) { - gPlayerState.item = sub_08077C54(unk); - } -} - -void sub_08077BB8(ItemBehavior* beh) { - UnkItemStruct* unk = (UnkItemStruct*)beh; // @nocheckin - Entity* temp = sub_08077C54(unk); - if (temp != NULL) { - temp->flags = ENT_PERSIST; - } - gPlayerState.item = temp; -} - -Entity* sub_08077BD4(ItemBehavior* beh) { - if (sub_08077C94(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]) != 0) { - return NULL; - } else { - return CreatePlayerBomb(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]); - } -} - -Entity* sub_08077C0C(ItemBehavior* beh, u32 arg1) { - u8 bVar1; - Entity* pEVar3; - - bVar1 = gUnk_0811BE48[arg1].unk0[3]; - - if (sub_08077C94(beh, bVar1) != 0) { - return NULL; - } else { - return CreatePlayerBomb(beh, bVar1); - } -} - -Entity* CreatePlayerBomb(ItemBehavior* beh, u32 subtype) { - Entity* pEVar1; - - pEVar1 = CreatePlayerItem(subtype, 0, 0, beh->behaviorID); - if (pEVar1 != NULL) { - *(ItemBehavior**)&pEVar1->parent = beh; - } - return pEVar1; -} - -void* sub_08077C54(UnkItemStruct* unk) { - Entity* item; - - item = sub_0805E744(); - if (item != NULL) { - item->id = gUnk_0811BE48[unk->field_0x1].unk0[3]; - item->kind = PLAYER_ITEM; - item->flags = 0xa0; - item->parent = (Entity*)unk; - item->field_0x68.HALF.LO = unk->field_0x1; - AppendEntityToList(item, 2); - } - return item; -} - -Entity* sub_08077C94(ItemBehavior* arg0, u32 arg1) { - Entity* iVar1; - - iVar1 = FindEntityByID(PLAYER_ITEM, gUnk_0811BE48[arg1].unk0[3], 2); - if (iVar1 == NULL) { - return NULL; - } - return iVar1; -} - -Entity* CreatePlayerItem(u32 subtype, u32 form, u32 parameter, u32 unk) { - Entity* ent; - - ent = GetEmptyEntity(); - if (ent != NULL) { - ent->flags = ENT_COLLIDE; - ent->kind = PLAYER_ITEM; - ent->id = subtype; - ent->type = form; - ent->type2 = parameter; - ent->field_0x68.HALF.LO = unk; - AppendEntityToList(ent, 2); - } - return ent; -} - -Entity* sub_08077CF8(u32 subtype, u32 form, u32 parameter, u32 unk) { - Entity* ent; - - ent = sub_0805E744(); - if (ent != NULL) { - ent->flags = ENT_COLLIDE; - ent->kind = PLAYER_ITEM; - ent->id = subtype; - ent->type = form; - ent->type2 = parameter; - ent->field_0x68.HALF.LO = unk; - AppendEntityToList(ent, 2); - } - return ent; -} - -void sub_08077D38(ItemBehavior* beh, u32 arg2) { - u32 r6; - struct_0811BE48* ptr; - - gPlayerState.field_0xa |= 8 >> arg2; - gPlayerState.keepFacing |= 8 >> arg2; - beh->field_0x5[5] = gPlayerEntity.animationState; - if (beh->stateID == 0) { - beh->stateID++; - } - - ptr = &gUnk_0811BE48[beh->behaviorID]; - if (ptr->unk4) { - if ((gPlayerState.flags & PL_NO_CAP)) { - switch (beh->behaviorID) { - case 0x1b: - r6 = 0x948; - break; - case 1: - r6 = 0x408; - break; - case 0xd: - r6 = 0x40c; - break; - } - sub_08077DF4(beh, r6); - } else { - sub_08077DF4(beh, ptr->unk4); - } - } - - beh->field_0xf = ptr->unk6[0]; - if (ptr->unk6[1]) { - gPlayerState.field_0x3[1] |= (8 >> arg2) | ((8 >> arg2) << 4); - } -} - -typedef struct { - u8 b0 : 4; - u8 b1 : 4; -} PACKED Unk_bitfield; - -typedef struct { - u8 unk[16]; -} Unk_struct; - -void sub_08077DF4(ItemBehavior* beh, u32 arg1) { - Entity* ent = (Entity*)beh; // @nocheckin - *(u16*)&ent->flags = arg1; - if ((arg1 & 0xff) > 0xb8) { - arg1 += ent->type >> 1; - } - gPlayerEntity.spriteIndex = (short)(arg1 >> 8); - InitAnimationForceUpdate(&gPlayerEntity, (u8)arg1); - sub_08077E54(beh); -} - -void UpdateItemAnim(ItemBehavior* beh) { - UpdateAnimationSingleFrame(&gPlayerEntity); - sub_08077E54(beh); -} - -void sub_08077E3C(ItemBehavior* ent, u32 idx) { - sub_080042BA(&gPlayerEntity, idx); - sub_08077E54(ent); -} - -void sub_08077E54(ItemBehavior* beh) { - Entity* ent = (Entity*)beh; // @nocheckin - ent->action = gPlayerEntity.animIndex; - *(u8*)&ent->spriteIndex = gPlayerEntity.frameIndex; - ent->subAction = gPlayerEntity.frameDuration; - ent->actionDelay = gPlayerEntity.frame; -} - -void sub_08077E78(ItemBehavior* arg0, u32 bits) { - u32 not ; - - if (bits == 0) { - if (gPlayerState.item != NULL) { - ((Unk_bitfield*)gPlayerState.item)[0x11].b0 = 6; - gPlayerState.item = NULL; - } else { - gPlayerState.item = NULL; - } - } - - not = (8 >> bits); - gPlayerState.field_0x3[1] &= ~((u8)((8 >> bits) << 4) | not ); - not = ~not ; - gPlayerState.field_0xa &= not ; - gPlayerState.keepFacing &= not ; - MemClear(arg0, 0x1c); -} - -u32 sub_08077EC8(ItemBehavior* beh) { - Unk_struct* arg0 = (Unk_struct*)beh; // @nocheckin - - if ((gPlayerState.sword_state & 8) != 0) { - sub_08077DF4(beh, 0x170); - arg0->unk[7] = 0x28; - arg0->unk[4] = 7; - arg0->unk[15] = 6; - return 1; - } else { - return 0; - } -} - -bool32 sub_08077EFC(ItemBehavior* arg0) { - return sub_08077F24(arg0, (u16)gPlayerState.field_0x90); -} - -bool32 sub_08077F10(ItemBehavior* arg0) { - return sub_08077F24(arg0, (u16)gPlayerState.field_0x92); -} - -bool32 sub_08077F24(ItemBehavior* beh, u32 arg1) { - u32 val; - Stats* stats = &gSave.stats; - u32 id = beh->behaviorID; - if (stats->itemButtons[SLOT_A] == id) { - val = 1; - } else if (stats->itemButtons[SLOT_B] == id) { - val = 2; - } else { - val = 0; - } - - return (val & arg1) ? 1 : 0; -} - -void sub_08077F50(ItemBehavior* beh, u32 arg1) { - sub_08079184(); - sub_08077E78(beh, arg1); -} - -u32 sub_08077F64(ItemBehavior* arg0, u32 unk) { - u32 temp; - if (gPlayerState.heldObject == 0) { - sub_08077F50(arg0, unk); - temp = 0; - } else { - temp = 1; - } - return temp; -} - -void sub_08077F84(void) { - Entity* obj; - - if (((gPlayerEntity.collisionLayer & 2) == 0) && - GetTileTypeByPos(gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI - 0xc, 2) - 0x343U < 4) { - sub_0807AA80(&gPlayerEntity); - gPlayerState.jump_status |= 8; - obj = CreateObject(OBJECT_44, 0, 0); - if (obj != NULL) { - obj->x = gPlayerEntity.x; - obj->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0xc; - gPlayerEntity.y.HALF.HI -= 0xc; - } - } -} diff --git a/src/code_08078778.c b/src/code_08078778.c deleted file mode 100644 index 6e282c0b..00000000 --- a/src/code_08078778.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "global.h" -#include "entity.h" -#include "functions.h" -#include "kinstone.h" - -void sub_08078778(Entity* ent) { - sub_0807887C(ent, 1, 0); -} - -void sub_08078784(Entity* ent, u32 arg1) { - sub_0807887C(ent, 1, arg1); -} - -void sub_08078790(Entity* ent, u32 arg1) { - sub_0807887C(ent, 2, arg1); -} - -void sub_0807879C(Entity* ent) { - sub_0807887C(ent, 7, 0); -} - -void sub_080787A8(Entity* ent, u32 arg1) { - sub_0807887C(ent, 7, arg1); -} - -void sub_080787B4(Entity* ent) { - sub_0807887C(ent, 9, 0); -} - -void sub_080787C0(Entity* ent) { - sub_0807887C(ent, 10, 0); -} - -void sub_080787CC(Entity* ent) { - sub_0807887C(ent, 5, 0); -} - -s32 sub_080787D8(Entity* ent) { - s32 iVar1; - - iVar1 = sub_0807887C(ent, 8, 0); - if (iVar1 >= 0) { - gUnk_03003DF0[iVar1].unk[10] = 0xbe; - } - return iVar1; -} - -s32 sub_08078800(Entity* ent) { - s32 iVar1; - - iVar1 = sub_0807887C(ent, 6, 0); - if (iVar1 >= 0) { - gUnk_03003DF0[iVar1].unk[10] = 0xbe; - } - return iVar1; -} - -s32 sub_08078828(Entity* ent) { - s32 iVar1; - - iVar1 = sub_0807887C(ent, 3, 0); - if (iVar1 >= 0) { - gUnk_03003DF0[iVar1].unk[10] = 0xbe; - } - return iVar1; -} - -void sub_08078850(Entity* arg0, u32 arg1, u32 arg2, void* arg3) { - s32 iVar1; - - iVar1 = sub_08078904(); - if (iVar1 >= 0) { - gUnk_03003DF0[iVar1].unk[8] = arg1; - gUnk_03003DF0[iVar1].unk[10] = arg2; - *((u32*)&gUnk_03003DF0[iVar1].unk4 + 1) = (u32)arg3; - } -} diff --git a/src/common.c b/src/common.c index be03807d..412bd202 100644 --- a/src/common.c +++ b/src/common.c @@ -431,7 +431,7 @@ void sub_0801DFB4(Entity* entity, u32 a2, u32 a3, u32 a4) { gFuseInfo._8 = a3; gFuseInfo._a = a4; gFuseInfo.ent = entity; - gFuseInfo._3 = gUnk_03003DF0[0].unk[2]; + gFuseInfo._3 = gUnk_03003DF0.unk_2; if (entity != NULL) { gFuseInfo._4 = entity->updatePriority; entity->updatePriority = 2; diff --git a/src/coord.c b/src/coord.c index 0bce952b..0114ba8d 100644 --- a/src/coord.c +++ b/src/coord.c @@ -13,14 +13,11 @@ const u8 gSpriteSortBelowTable[]; const u8 gUnk_08114F58[]; const u8 gUnk_08114F38[]; -extern u32 gSpritePtrs[]; - extern u16 gExtraFrameOffsets[]; extern s8 gUnk_08126EE4[]; extern const u16 gUnk_080046A4[]; extern const u16 gUnk_080047F6[]; -void sub_080027EA(Entity*, u32, u32); u32 sub_0806F58C(Entity*, Entity*); u32 sub_0806FCA0(Entity*, Entity*); void UnloadHitbox(Entity*); @@ -662,7 +659,7 @@ bool32 sub_0807007C(struct_gUnk_020000C0* this, u32 param_2) { if (ptr1->unk_01 == 0xff) return 0; - spritePtr = &gSpritePtrs[ptr1->unk_02 * 4]; + spritePtr = &((u32*)gSpritePtrs)[ptr1->unk_02 * 4]; ptr2 = (u8*)(spritePtr[1]); if (ptr2 == 0) return 0; diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c index 7b92aec0..2d2fdd81 100644 --- a/src/enemy/acroBandits.c +++ b/src/enemy/acroBandits.c @@ -254,7 +254,7 @@ void sub_08031C58(Entity* this) { void sub_08031D70(Entity* this) { GetNextFrame(this); - if (--this->actionDelay == '\0') { + if (--this->actionDelay == 0) { this->action = 7; COLLISION_OFF(this); this->actionDelay = 5; diff --git a/src/enemy/armos.c b/src/enemy/armos.c index d07bc9f0..829e195d 100644 --- a/src/enemy/armos.c +++ b/src/enemy/armos.c @@ -10,6 +10,8 @@ #include "enemy.h" #include "functions.h" #include "hitbox.h" +#include "common.h" +#include "flags.h" typedef struct { /*0x00*/ Entity base; @@ -48,6 +50,41 @@ bool32 sub_080305BC(ArmosEntity*); void sub_080307D4(ArmosEntity*); void sub_08030590(ArmosEntity*); +void ClearArmosData(void) { + MemClear(&gRoomTransition.armos_data, sizeof(gRoomTransition.armos_data)); + gRoomTransition.armos_data.field_0xae = 0xff; +} + +void sub_080300C4(void) { + if (gRoomTransition.armos_data.field_0xae == 0xff) { + gRoomTransition.armos_data.field_0xac = 0; + MemClear(&gRoomTransition.armos_data.data, sizeof(gRoomTransition.armos_data.data)); + } +} +void sub_080300E8(void) { + if (gRoomTransition.armos_data.field_0xae != 0xff) { + const u16* ptr = &gRoomTransition.armos_data.data[gRoomTransition.armos_data.field_0xae * 2]; + gPlayerEntity.x.HALF.HI = ptr[0]; + gPlayerEntity.y.HALF.HI = ptr[1] + 0xc; + gRoomTransition.armos_data.field_0xae = 0xff; + } +} + +void sub_08030118(u32 param_1) { + if (((s32)(u32)gRoomTransition.armos_data.field_0xac >> (param_1)&1) != 0) { + SetLocalFlagByBank(0x300, param_1 + 0x67); + } else { + ClearLocalFlagByBank(0x300, param_1 + 0x67); + } +} + +void sub_08030150(ArmosEntity* this) { + gRoomTransition.armos_data.field_0xac = + (gRoomTransition.armos_data.field_0xac & ~(1 << this->unk_80)) | (this->unk_84 << this->unk_80); + gRoomTransition.armos_data.data[(u32)this->unk_80 * 2] = super->x.HALF.HI; + gRoomTransition.armos_data.data[(u32)this->unk_80 * 2 + 1] = super->y.HALF.HI; +} + void Armos(ArmosEntity* this) { EnemyFunctionHandler(super, (EntityActionArray)&gUnk_080CE124); SetChildOffset(super, 0, 1, -0x10); diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index b473854c..939381b0 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -39,7 +39,7 @@ struct SalesOffering { u16 price; u16 field_0x4; u16 field_0x6; - u8 field_0x8; + u8 offeredItem; /**< @see Item */ u8 field_0x9; u16 field_0xa; }; @@ -261,7 +261,7 @@ void sub_08028CE8(Entity* this) { subtype = gUnk_080CC9C0[Random() & 7]; } - CreateItemEntity(offer->field_0x8, subtype, 0); + CreateItemEntity(offer->offeredItem, subtype, 0); this->action = 6; this->actionDelay = 4; @@ -272,12 +272,12 @@ void sub_08028CE8(Entity* this) { #endif return; case 1: - CreateItemEntity(offer->field_0x8, offer->field_0x9, 0); + CreateItemEntity(offer->offeredItem, offer->field_0x9, 0); this->actionDelay = 4; sub_0802922C(this); return; case 2: - CreateItemEntity(offer->field_0x8, offer->field_0x9, 0); + CreateItemEntity(offer->offeredItem, offer->field_0x9, 0); this->actionDelay = 8; sub_0802922C(this); return; @@ -466,18 +466,18 @@ void sub_080290FC(Entity* this) { bool32 sub_0802915C(Entity* this) { const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD; - switch (offer->field_0x8) { - case 0x44: - if (GetInventoryValue(0x44) == 0) + switch (offer->offeredItem) { + case ITEM_GRIP_RING: + if (GetInventoryValue(ITEM_GRIP_RING) == 0) return TRUE; break; - case 0x1c: + case ITEM_BOTTLE1: if (CheckGlobalFlag(AKINDO_BOTTLE_SELL) == 0) return TRUE; break; - case 0x5c: - case 0x6c: - case 0x6f: + case ITEM_KINSTONE: + case ITEM_BOMBS10: + case ITEM_ARROWS30: return TRUE; } return FALSE; @@ -487,13 +487,13 @@ bool32 sub_08029198(const struct SalesOffering* offer) { u32 tmp; if ((offer->field_0x0 & 0xfc) != 0xc) { - switch (offer->field_0x8) { - case 0x1c: + switch (offer->offeredItem) { + case ITEM_BOTTLE1: tmp = CheckGlobalFlag(AKINDO_BOTTLE_SELL); break; - case 0x9: - case 0x44: - tmp = GetInventoryValue(offer->field_0x8); + case ITEM_BOW: + case ITEM_GRIP_RING: + tmp = GetInventoryValue(offer->offeredItem); break; default: return 0; @@ -512,12 +512,12 @@ bool32 sub_08029198(const struct SalesOffering* offer) { bool32 sub_080291DC(Entity* this) { const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD; - switch (offer->field_0x8) { - case 0x6c: + switch (offer->offeredItem) { + case ITEM_BOMBS10: if (gBombBagSizes[gSave.stats.bombBagType] <= gSave.stats.bombCount) return TRUE; break; - case 0x6f: + case ITEM_ARROWS30: if (gQuiverSizes[gSave.stats.quiverType] <= gSave.stats.arrowCount) return TRUE; break; @@ -532,8 +532,8 @@ NONMATCH("asm/non_matching/businessScrub/sub_0802922C.inc", void sub_0802922C(En this->action = 6; this->field_0x80.HALF.HI = 0; - switch (offer->field_0x8) { - case 0x1c: + switch (offer->offeredItem) { + case ITEM_BOTTLE1: SetGlobalFlag(AKINDO_BOTTLE_SELL); break; } diff --git a/src/enemy/code_080300AC.c b/src/enemy/code_080300AC.c deleted file mode 100644 index ef851cc2..00000000 --- a/src/enemy/code_080300AC.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "global.h" -#include "common.h" -#include "functions.h" - -void ClearArmosData(void) { - MemClear(&gRoomTransition.armos_data, sizeof(gRoomTransition.armos_data)); - gRoomTransition.armos_data.field_0xae = 0xff; -} - -void sub_080300C4(void) { - if (gRoomTransition.armos_data.field_0xae == 0xff) { - gRoomTransition.armos_data.field_0xac = 0; - MemClear(&gRoomTransition.armos_data.data, sizeof(gRoomTransition.armos_data.data)); - } -} diff --git a/src/enemy/likeLike.c b/src/enemy/likeLike.c index 4ddac95d..867ce963 100644 --- a/src/enemy/likeLike.c +++ b/src/enemy/likeLike.c @@ -233,20 +233,21 @@ END_NONMATCH void sub_080281A0(Entity* this) { this->field_0xf = 0x19; - if (sub_080281E0(0xe)) { - this->field_0x80.HALF.LO = 0xe; + if (sub_080281E0(ITEM_MIRROR_SHIELD)) { + this->field_0x80.HALF.LO = ITEM_MIRROR_SHIELD; MessageFromTarget(0x578); - } else if (sub_080281E0(0xd)) { - this->field_0x80.HALF.LO = 0xd; + } else if (sub_080281E0(ITEM_SHIELD)) { + this->field_0x80.HALF.LO = ITEM_SHIELD; MessageFromTarget(0x578); } else { ModHealth(-1); } } -bool32 sub_080281E0(u32 param_1) { +/** Can steal item */ +bool32 sub_080281E0(u32 item) { bool32 ret = FALSE; - if (GetInventoryValue(param_1) == 1) { + if (GetInventoryValue(item) == 1) { if (ItemIsShield(gSave.stats.itemButtons[SLOT_A])) { gSave.stats.itemButtons[SLOT_A] = 0; } @@ -255,18 +256,19 @@ bool32 sub_080281E0(u32 param_1) { gSave.stats.itemButtons[SLOT_B] = 0; } - sub_0807CAA0(param_1, 0); + SetInventoryValue(item, 0); ret = TRUE; } return ret; } -void sub_08028224(u32 param_1) { +/** Return stolen item */ +void sub_08028224(u32 item) { #ifdef EU - CreateItemEntity(param_1, 0, 1); + CreateItemEntity(item, 0, 1); #else - sub_080A7C18(param_1, 0, 1); + sub_080A7C18(item, 0, 1); #endif MessageFromTarget(0x579); } diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c index d8707764..f1d8bad4 100644 --- a/src/enemy/rockChuchu.c +++ b/src/enemy/rockChuchu.c @@ -41,7 +41,7 @@ void RockChuchu_OnCollision(Entity* this) { case 0x18: case 0x19: case 0x1a: - if ((gPlayerState.field_0xac & 8) == 0) + if ((gPlayerState.skills & SKILL_ROCK_BREAKER) == 0) break; case 0x16: case 0x1c: diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c index a402319a..53412903 100644 --- a/src/enemy/spearMoblin.c +++ b/src/enemy/spearMoblin.c @@ -252,7 +252,7 @@ NONMATCH("asm/non_matching/spearMoblin/sub_08028604.inc", void sub_08028604(Enti } else { u32 iVar3 = sub_08049EE4(this); u32 uVar1; - if (this->field_0x82.HALF.HI == '\0') { + if (this->field_0x82.HALF.HI == 0) { uVar1 = gUnk_080CC7C0[Random() & 0xf]; } else { uVar1 = gUnk_080CC7C0[Random() & 7]; diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c index 1049ffa4..e73445eb 100644 --- a/src/enemy/spinyBeetle.c +++ b/src/enemy/spinyBeetle.c @@ -371,7 +371,7 @@ void sub_08033E1C(SpinyBeetleEntity* this) { } void SpinyBeetle_SetHitType(SpinyBeetleEntity* this) { - if ((gPlayerState.field_0xac & 8)) { + if ((gPlayerState.skills & SKILL_ROCK_BREAKER)) { super->hitType = 0x95; } else { super->hitType = 0x63; diff --git a/src/enemy/treeItem.c b/src/enemy/treeItem.c index 3e5eca1e..47264fdd 100644 --- a/src/enemy/treeItem.c +++ b/src/enemy/treeItem.c @@ -8,6 +8,7 @@ #include "global.h" #include "enemy.h" #include "object.h" +#include "item.h" static bool32 ShouldSpawnTreeItem(Entity*); @@ -42,7 +43,7 @@ void TreeItem(Entity* this) { if (this->field_0x68.HALF.LO > FAIRY_INDEX) { DeleteThisEntity(); } - if (this->field_0x68.HALF.LO < FAIRY_INDEX && GetInventoryValue(0x67 /*KinstoneBag*/) == 0) { + if (this->field_0x68.HALF.LO < FAIRY_INDEX && GetInventoryValue(ITEM_KINSTONE_BAG) == 0) { this->field_0x68.HALF.LO = FAIRY_INDEX; } } diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c index 6de1a8ae..7ca2f6d7 100644 --- a/src/enemy/vaatiTransfigured.c +++ b/src/enemy/vaatiTransfigured.c @@ -1078,7 +1078,7 @@ void sub_080409B0(Entity* this) { InitScreenShake(0xc, 1); SoundReq(SFX_BOSS_HIT); } - if ((this->bitfield == 0x8a) && (gPlayerState.field_0xa0[0] == 5)) { + if ((this->bitfield == 0x8a) && (gPlayerState.chargeState.action == 5)) { this->health = 0xc0; } } diff --git a/src/fileselect.c b/src/fileselect.c index 129bd6da..ba0dc554 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -14,6 +14,7 @@ #include "object.h" #include "functions.h" #include "subtask.h" +#include "item.h" // copy, erase, start #define NUM_FILE_OPERATIONS 3 @@ -485,7 +486,7 @@ void sub_08050A64(u32 idx) { gOamCmd._8 = 0x400; // Draw the save file's obtained elements. - if (GetInventoryValue(0x40)) { + if (GetInventoryValue(ITEM_EARTH_ELEMENT)) { gOamCmd.x = 0xA2; gOamCmd.y = 0x36; #ifdef EU @@ -494,7 +495,7 @@ void sub_08050A64(u32 idx) { DrawDirect(0x145, 0x24); #endif } - if (GetInventoryValue(0x41)) { + if (GetInventoryValue(ITEM_FIRE_ELEMENT)) { gOamCmd.x = 0x96; gOamCmd.y = 0x3D; #ifdef EU @@ -503,7 +504,7 @@ void sub_08050A64(u32 idx) { DrawDirect(0x145, 0x22); #endif } - if (GetInventoryValue(0x42)) { + if (GetInventoryValue(ITEM_WATER_ELEMENT)) { gOamCmd.x = 0xAE; gOamCmd.y = 0x3D; #ifdef EU @@ -512,7 +513,7 @@ void sub_08050A64(u32 idx) { DrawDirect(0x145, 0x23); #endif } - if (GetInventoryValue(0x43)) { + if (GetInventoryValue(ITEM_WIND_ELEMENT)) { gOamCmd.x = 0xA2; gOamCmd.y = 0x44; #ifdef EU diff --git a/src/flags.c b/src/flags.c index 57f49892..3a7cc906 100644 --- a/src/flags.c +++ b/src/flags.c @@ -2,6 +2,7 @@ #include "room.h" #include "flags.h" #include "area.h" +#include "save.h" const u16 gLocalFlagBanks[] = { FLAG_BANK_G, FLAG_BANK_0, FLAG_BANK_1, FLAG_BANK_2, FLAG_BANK_3, FLAG_BANK_4, FLAG_BANK_5, @@ -40,7 +41,7 @@ u32 CheckRoomFlag(u32 flag) { } u32 CheckLocalFlagsByBank(u32 offset, u32 flag, u32 length) { - return CheckBits(&gGlobalFlags, offset + flag, length); + return CheckBits(gSave.flags, offset + flag, length); } u32 CheckLocalFlags(u32 flag, u32 length) { @@ -57,7 +58,7 @@ u32 CheckRoomFlags(u32 flag, u32 length) { void SetLocalFlagByBank(u32 offset, u32 flag) { if (flag != 0) { - WriteBit(&gGlobalFlags, offset + flag); + WriteBit(gSave.flags, offset + flag); } } @@ -95,7 +96,7 @@ void SetRoomFlag(u32 flag) { } void ClearLocalFlagByBank(u32 offset, u32 flag) { - ClearBit(&gGlobalFlags, offset + flag); + ClearBit(gSave.flags, offset + flag); } void ClearLocalFlag(u32 flag) { diff --git a/src/interrupts.c b/src/interrupts.c index cf3c3f1d..fe96466e 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -14,29 +14,10 @@ extern u8 gUnk_03003DE0; extern u8 gUnk_03000C30; extern u8 gUpdateVisibleTiles; -extern u8 gUnk_03003DF0[]; extern Entity gUnk_03003BE0; extern Entity* gPlayerClones[3]; extern u16 gUnk_080B2CD8[]; -extern void sub_080ADD70(void); -extern void sub_0801C25C(void); -extern void UpdateDisplayControls(void); -extern void LoadResources(void); -extern void HandlePlayerLife(Entity*); -extern void DoPlayerAction(Entity*); -extern void sub_080171F0(void); -extern void sub_08078FB0(Entity*); -extern void sub_0807A050(void); -extern u32 sub_08079B24(void); -extern void sub_08079708(Entity*); -extern void CreateSparkle(Entity*); -extern void sub_080028E0(Entity*); -extern void sub_08078180(void); -extern void sub_0807B0C8(void); -extern void sub_0807A8D8(Entity*); -extern void sub_08077FEC(u32); - void gIntrMain(void); struct { @@ -256,12 +237,12 @@ void HandlePlayerLife(Entity* this) { gPlayerState.flags &= ~(0x2000000 | PL_FALLING); if (gPlayerState.flags & PL_BURNING) ResetPlayer(); - if ((gPlayerState.flags & PL_CLONING) && !gPlayerState.field_0xa0[0]) + if ((gPlayerState.flags & PL_CLONING) && gPlayerState.chargeState.action == 0) DeleteClones(); if (sub_08079B24() == 0) sub_08079708(this); - gUnk_03003DF0[0] = 0; + gUnk_03003DF0.unk_0 = 0; if (gPlayerState.field_0x27[0] != 0) gPlayerState.field_0x27[0]--; diff --git a/src/item/itemBomb.c b/src/item/itemBomb.c index 4154e1f6..96d8585e 100644 --- a/src/item/itemBomb.c +++ b/src/item/itemBomb.c @@ -3,12 +3,11 @@ #include "sound.h" #include "functions.h" #include "playeritem.h" +#include "functions.h" extern void (*const gUnk_0811BD98[])(ItemBehavior*, u32); -extern Entity* CreatePlayerBomb(); extern s8 gUnk_0811BDAC[]; -extern void ModBombs(s32); void ItemBomb(ItemBehavior* this, u32 arg1) { gUnk_0811BD98[this->stateID](this, arg1); diff --git a/src/item/itemBow.c b/src/item/itemBow.c index c4c29947..87e4544d 100644 --- a/src/item/itemBow.c +++ b/src/item/itemBow.c @@ -4,8 +4,6 @@ extern void (*const gUnk_0811BD80[])(ItemBehavior*, u32); -extern void sub_08077E3C(ItemBehavior*, u32); - void ItemBow(ItemBehavior* this, u32 arg1) { gUnk_0811BD80[this->stateID](this, arg1); } @@ -78,7 +76,7 @@ void sub_08075F38(ItemBehavior* this, u32 arg1) { void sub_08075F84(ItemBehavior* this, u32 arg1) { if (((gPlayerState.field_0x3[1] & 0x80) == 0) && (gPlayerState.field_0x1f[2] != 0)) { - if (GetInventoryValue(0x70) == 1) { + if (GetInventoryValue(ITEM_ARROW_BUTTERFLY) == 1) { sub_08077E3C(this, 5); } else { UpdateItemAnim(this); diff --git a/src/item/itemGustJar.c b/src/item/itemGustJar.c index 60d9bb89..7393229f 100644 --- a/src/item/itemGustJar.c +++ b/src/item/itemGustJar.c @@ -4,8 +4,6 @@ #include "functions.h" void (*const ItemGustJar_StateFunctions[])(ItemBehavior* beh, u32); -extern u32 sub_0807A894(Entity*); -extern void UpdatePlayerMovement(void); void ItemGustJar(ItemBehavior* this, u32 arg1) { gPlayerState.framestate = PL_STATE_GUSTJAR; diff --git a/src/item/itemLantern.c b/src/item/itemLantern.c index 87c7389b..625e66b8 100644 --- a/src/item/itemLantern.c +++ b/src/item/itemLantern.c @@ -24,9 +24,9 @@ void sub_08075A0C(ItemBehavior* this, u32 arg1) { itemSlot = IsItemEquipped(this->behaviorID); if (gPlayerState.heldObject != 0 || gPlayerState.queued_action == PLAYER_ROLL || gPlayerState.jump_status != 0 || gPlayerState.item != NULL || (gPlayerState.flags & PL_MINISH) != 0) { - ForceEquipItem(0xf, itemSlot); + ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); gPlayerState.flags &= ~PL_USE_LANTERN; - ForceEquipItem(0xf, itemSlot); + ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); sub_08077E78(this, arg1); } else { this->field_0x5[4] |= 0x80; @@ -77,7 +77,7 @@ void sub_08075B54(ItemBehavior* this, u32 arg1) { if ((gPlayerState.flags & (PL_CAPTURED | PL_DISABLE_ITEMS)) == 0) { itemSlot = IsItemEquipped(this->behaviorID); if (!(((sub_08077F10(this) == 0) && (itemSlot < 2)) || (gPlayerState.jump_status != 0))) { - ForceEquipItem(0xf, itemSlot); + ForceEquipItem(ITEM_LANTERN_OFF, itemSlot); gPlayerState.flags &= ~PL_USE_LANTERN; sub_08077E78(this, arg1); SoundReq(SFX_ITEM_LANTERN_OFF); diff --git a/src/item/itemPacciCane.c b/src/item/itemPacciCane.c index 524ae645..4ea479f5 100644 --- a/src/item/itemPacciCane.c +++ b/src/item/itemPacciCane.c @@ -1,14 +1,7 @@ #include "global.h" #include "entity.h" #include "item.h" - -// TODO include correct headers? -extern void UpdateItemAnim(ItemBehavior*); -extern void CreatePlayerBomb(ItemBehavior*, u32); -extern void sub_08077E78(ItemBehavior*, u32); -extern void sub_08077BB8(ItemBehavior*); -extern void sub_0806F948(Entity*); -extern void sub_08077D38(ItemBehavior*, u32); +#include "functions.h" extern void (*const gUnk_0811BDE0[])(ItemBehavior* beh, u32); diff --git a/src/item/itemPegasusBoots.c b/src/item/itemPegasusBoots.c index 6a2c3782..b361f0fe 100644 --- a/src/item/itemPegasusBoots.c +++ b/src/item/itemPegasusBoots.c @@ -9,8 +9,6 @@ void sub_08076964(ItemBehavior*, u32); void sub_080768F8(ItemBehavior*, u32); void sub_08076A88(ItemBehavior*, u32); -extern bool32 sub_0807A158(); -extern Entity* CreatePlayerBomb(ItemBehavior*, u32); extern u16 gUnk_0800275C[]; extern u8 gUnk_0811BE38[]; @@ -103,7 +101,8 @@ void sub_08076964(ItemBehavior* this, u32 arg1) { gPlayerState.dash_state = 0x40; gPlayerState.field_0xa &= ~(8 >> arg1); this->stateID++; - if (sub_0807A158() && (gPlayerState.flags & PL_MINISH) == 0 && (gPlayerState.field_0xac & 4) != 0) { + if (HasSwordEquipped() && (gPlayerState.flags & PL_MINISH) == 0 && + (gPlayerState.skills & SKILL_DASH_ATTACK) != 0) { gPlayerState.field_0xab = 3; sub_08077DF4(this, 0x298); bombEntity = CreatePlayerBomb(this, 0xc); @@ -145,7 +144,7 @@ void sub_08076A88(ItemBehavior* this, u32 arg1) { uVar2 = gUnk_0800275C[(gPlayerEntity.animationState & 0xe) * 4]; if (uVar2 == (gPlayerEntity.collisions & uVar2)) { if (this->field_0x5[3] != 0) { - gPlayerEntity.action = 6; + gPlayerEntity.action = PLAYER_BOUNCE; gPlayerEntity.subAction = 0; COLLISION_OFF(&gPlayerEntity); gPlayerState.field_0x38 = 0; diff --git a/src/item/itemShield.c b/src/item/itemShield.c index 4da81cbe..6c5a0866 100644 --- a/src/item/itemShield.c +++ b/src/item/itemShield.c @@ -2,15 +2,7 @@ #include "entity.h" #include "item.h" #include "sound.h" - -// TODO include correct headers? -extern void sub_08077E78(ItemBehavior*, u32); -extern void SoundReq(u32); -extern void UpdateItemAnim(ItemBehavior*); -extern u32 sub_08077EFC(ItemBehavior*); -extern void sub_08077BB8(ItemBehavior*); -extern void sub_08077D38(ItemBehavior*, u32); -extern void sub_0806F948(Entity*); +#include "functions.h" extern void (*const gUnk_0811BDE8[])(ItemBehavior* beh, u32); diff --git a/src/item/itemSword.c b/src/item/itemSword.c index ae15069d..cce1e02f 100644 --- a/src/item/itemSword.c +++ b/src/item/itemSword.c @@ -5,19 +5,12 @@ #include "playeritem.h" extern void (*const gUnk_0811BD44[])(ItemBehavior*, u32); -extern void sub_08077B98(ItemBehavior*); -extern void UpdatePlayerMovement(void); -extern u32 sub_0807B014(); -extern Entity* CreatePlayerBomb(ItemBehavior*, u32); -extern bool32 sub_08077F10(ItemBehavior*); void sub_080759B8(ItemBehavior*, u32); void sub_080754B8(ItemBehavior*, u32); void sub_08075898(ItemBehavior*, u32); void sub_08075580(ItemBehavior*, u32); -extern u32 sub_08077EC8(ItemBehavior*); - void sub_08075694(ItemBehavior* this, u32 arg1); void ItemSword(ItemBehavior* this, u32 arg1) { @@ -38,7 +31,7 @@ void sub_08075338(ItemBehavior* this, u32 arg1) { if (gPlayerState.jump_status) { if ((gPlayerState.jump_status & 7) != 3) { if ((gPlayerState.jump_status & 0x78) == 0 && (u32)gPlayerEntity.zVelocity <= 0x17fff && - (gPlayerState.field_0xac & 0x40) && gPlayerEntity.z.WORD) { + (gPlayerState.skills & SKILL_DOWN_THRUST) && gPlayerEntity.z.WORD) { gPlayerState.jump_status |= 0x20; gPlayerState.field_0xab = 7; gPlayerState.field_0x3[1] |= (8 >> arg1) | ((8 >> arg1) << 4); @@ -58,13 +51,14 @@ void sub_08075338(ItemBehavior* this, u32 arg1) { } if (gPlayerState.flags & PL_ROLLING) { - if ((gPlayerState.field_0xac & 2) == 0) { + if ((gPlayerState.skills & SKILL_ROLL_ATTACK) == 0) { if (gPlayerState.item == NULL) return; DeleteEntity(gPlayerState.item); gPlayerState.item = NULL; return; } + // Do the roll attack. sub_08077D38(this, arg1); sub_08077B98(this); @@ -123,7 +117,7 @@ void sub_080754B8(ItemBehavior* this, u32 arg1) { } if ((this->field_0x5[9] & 0x80) != 0) { - if (((gPlayerState.flags & 0x80) != 0) || ((gPlayerState.field_0xac & 1) == 0)) { + if (((gPlayerState.flags & 0x80) != 0) || ((gPlayerState.skills & SKILL_SPIN_ATTACK) == 0)) { sub_080759B8(this, arg1); } else { sub_08075580(this, arg1); @@ -141,8 +135,8 @@ void sub_08075580(ItemBehavior* this, u32 arg1) { gPlayerState.item->hurtType = 0xd; this->field_0xf = 0; this->stateID = 2; - if ((gPlayerState.field_0xac & 0x200) != 0) { - this->field_0x5[2] = 0x28; + if ((gPlayerState.skills & SKILL_FAST_SPIN) != 0) { + this->field_0x5[2] = 0x28; // TODO spin speed? } else { this->field_0x5[2] = 0x50; } @@ -197,8 +191,8 @@ void sub_08075694(ItemBehavior* this, u32 arg1) { gPlayerEntity.hurtType = 0x1e; gPlayerState.sword_state |= 0x40; gPlayerState.sword_state &= 0xdf; - if ((gPlayerState.field_0xa0[0] == 0x04) && ((gPlayerState.flags & PL_CLONING) == 0)) { - gPlayerState.field_0xa0[0] = 0x01; + if ((gPlayerState.chargeState.action == 4) && ((gPlayerState.flags & PL_CLONING) == 0)) { + gPlayerState.chargeState.action = 1; DeleteClones(); } SoundReq(SFX_PLY_VO2); @@ -223,7 +217,7 @@ void sub_08075738(ItemBehavior* this, u32 arg1) { gPlayerEntity.speed = 0x180; if ((this->field_0x5[9] & 0x80) != 0) { bVar6 = 10; - if ((gPlayerState.field_0xac & 0x800) != 0) { + if ((gPlayerState.skills & SKILL_LONG_SPIN) != 0) { bVar6 = 0xf; } @@ -233,7 +227,7 @@ void sub_08075738(ItemBehavior* this, u32 arg1) { } } else { if (((((gPlayerEntity.frameSpriteSettings & 1) != 0) && ((gPlayerState.sword_state & 0x80) == 0)) && - ((gPlayerState.field_0xac & 0x100) != 0))) { + ((gPlayerState.skills & SKILL_FOURSWORD) != 0))) { Entity* bombEnt = CreatePlayerBomb(this, 0x14); if (bombEnt) { bombEnt->animationState = (gPlayerEntity.animationState & 6) | 0x80; @@ -241,7 +235,7 @@ void sub_08075738(ItemBehavior* this, u32 arg1) { } if ((((gPlayerEntity.frameSpriteSettings & 2) != 0) && ((gPlayerState.sword_state & 0x80) == 0)) && - (((gPlayerState.field_0xac & 0x20) != 0 && (--this->field_0x5[2] != 0)))) { + (((gPlayerState.skills & SKILL_GREAT_SPIN) != 0 && (--this->field_0x5[2] != 0)))) { gPlayerState.sword_state |= 0x10; gPlayerState.field_0xab = 6; this->field_0x5[6] = gPlayerEntity.animationState << 2; diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 1c3bd127..60b9b064 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -404,7 +404,7 @@ void sub_080594DC(ManagerF* this) { this->manager.action = 1; // fall through case 1: - if (!GetInventoryValue(6)) + if (!GetInventoryValue(ITEM_FOURSWORD)) return; if (CheckLocalFlagByBank(0x8c0, 0x85)) return; diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c index 890ac05e..4089eaca 100644 --- a/src/menu/kinstone_menu.c +++ b/src/menu/kinstone_menu.c @@ -587,8 +587,8 @@ u32 sub_080A4418(u32 param_1, u32 param_2) { } void KinstoneMenu_080A4468(void) { - gUnk_03003DF0[0].unk[2] = 0; - gUnk_03003DF0[0].unk2[3] = 0; + gUnk_03003DF0.unk_2 = 0; + gUnk_03003DF0.unk_4[3] = 0; sub_0801E6C8(gFuseInfo._3); sub_0801E798(gKinstoneMenu.unk2a); } diff --git a/src/message.c b/src/message.c index 6f2ba45b..b10d00a1 100644 --- a/src/message.c +++ b/src/message.c @@ -247,14 +247,14 @@ NONMATCH("asm/non_matching/textbox/MsgInit.inc", /*static*/ u32 MsgInit(void)) { for (i = 0; i < FILENAME_LENGTH; ++i) { char c = gSave.name[i]; - if (c == '\0') + if (c == 0) break; *dest++ = c; } dest[0] = 2; dest[1] = 0xf; // White text color - dest[2] = '\0'; + dest[2] = 0; sub_08056FBC(&gTextRender); gTextRender.curToken._c = &gUnk_08107BE0; gTextRender._50.unk8 = gTextGfxBuffer; @@ -477,7 +477,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo if (gMessage.unk == 0) { gMessage.unk = 0x80; } - this->curToken.extended = '\0'; + this->curToken.extended = 0; if (chr >> 8 == 7) { this->_90 = this->_8f | 0x80; PaletteChange(this, 0); diff --git a/src/npc/beedle.c b/src/npc/beedle.c index 41c81f2f..c2c75cc8 100644 --- a/src/npc/beedle.c +++ b/src/npc/beedle.c @@ -51,7 +51,7 @@ void sub_08063314(Entity* this) { if (((++this->field_0xf & 0xF) == 0) && (offset = sub_080633C8(this), this->animIndex != offset)) { InitializeAnimation(this, offset); } - if (this->interactType != '\0') { + if (this->interactType != 0) { MessageFromTarget(this->actionDelay + 0xA01); this->action++; } diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index 2f515dba..b98646b3 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -2,6 +2,7 @@ #include "functions.h" #include "screen.h" #include "hitbox.h" +#include "item.h" extern void (*gUnk_081140D4[])(Entity*); @@ -315,11 +316,11 @@ void sub_0806D5D4(void) { u32 itemSlot; InitBiggoronTimer(); - itemSlot = IsItemEquipped(0xd); + itemSlot = IsItemEquipped(ITEM_SHIELD); if (itemSlot != 2) { gSave.stats.itemButtons[itemSlot] = 0; } - sub_0807CAA0(0xd, 0); + SetInventoryValue(ITEM_SHIELD, 0); } void sub_0806D600(Entity* this, ScriptExecutionContext* context) { @@ -327,8 +328,8 @@ void sub_0806D600(Entity* this, ScriptExecutionContext* context) { } void sub_0806D620(void) { - sub_0807CAA0(0xd, 0); - sub_080A7C18(0xe, 0, 0); + SetInventoryValue(ITEM_SHIELD, 0); + sub_080A7C18(ITEM_MIRROR_SHIELD, 0, 0); } void sub_0806D638(Entity* this) { diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index 63bc4310..38cb9276 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -9,6 +9,7 @@ #include "npc.h" #include "functions.h" #include "game.h" +#include "item.h" extern void (*gUnk_081115C0[])(Entity*); extern void (*gUnk_081115D0[])(Entity*); @@ -123,7 +124,7 @@ void sub_08068b2c(Entity* this) { if (this->interactType == '\x02') { this->action = 2; - this->interactType = '\0'; + this->interactType = 0; uVar1 = sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)); InitAnimationForceUpdate(this, uVar1); sub_0806F118(this); @@ -175,11 +176,11 @@ static void sub_08068BEC(Entity* this, u32 unused) { void sub_08068C28(Entity* this) { this->actionDelay = gUnk_08111623[this->type]; if (this->type == 1) { - if (GetInventoryValue(0x48)) { // spin attack - if (!GetInventoryValue(0x4b)) { // rock breaker + if (GetInventoryValue(ITEM_SKILL_SPIN_ATTACK)) { + if (!GetInventoryValue(ITEM_SKILL_ROCK_BREAKER)) { this->actionDelay = 1; } else { - if (!GetInventoryValue(0x4a)) { // dash attack + if (!GetInventoryValue(ITEM_SKILL_DASH_ATTACK)) { this->actionDelay = 2; } else { this->actionDelay = 3; @@ -205,19 +206,19 @@ void sub_08068CA0(Entity* this, ScriptExecutionContext* context) { bVar1 = this->type; if (bVar1 == 1) { context->condition = bVar1; - uVar2 = GetInventoryValue(0x48); // spin attack + uVar2 = GetInventoryValue(ITEM_SKILL_SPIN_ATTACK); if (uVar2 == 0) { context->condition = 0; } - uVar2 = GetInventoryValue(0x4b); // rock breaker + uVar2 = GetInventoryValue(ITEM_SKILL_ROCK_BREAKER); if (uVar2 == 0) { context->condition = 0; } - uVar2 = GetInventoryValue(0x4a); // dash attack + uVar2 = GetInventoryValue(ITEM_SKILL_DASH_ATTACK); if (uVar2 == 0) { context->condition = 0; } - uVar2 = GetInventoryValue(0x4e); // down thrust + uVar2 = GetInventoryValue(ITEM_SKILL_DOWN_THRUST); if (uVar2 != 0) { return; } @@ -262,34 +263,28 @@ void sub_08068CFC(Entity* this, ScriptExecutionContext* context) { return; goto switchD_08068d12_caseD_0; case 7: - uVar2 = GetInventoryValue(0x48); // spin attack - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_SPIN_ATTACK) == 0) { return; } - uVar2 = GetInventoryValue(0x49); // roll attack - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_ROLL_ATTACK) == 0) { return; } - uVar2 = GetInventoryValue(0x4a); // dash attack - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_DASH_ATTACK) == 0) { return; } - uVar2 = GetInventoryValue(0x4b); // rock breaker - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_ROCK_BREAKER) == 0) { return; } - uVar2 = GetInventoryValue(0x4c); // sword beam - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_SWORD_BEAM) == 0) { return; } - uVar2 = GetInventoryValue(0x4e); // down thrust - if (uVar2 == 0) { + if (GetInventoryValue(ITEM_SKILL_DOWN_THRUST) == 0) { return; } - itemID = 0x4f; // peril beam + itemID = ITEM_SKILL_PERIL_BEAM; break; case 10: - itemID = 0x4d; // great spin + itemID = ITEM_SKILL_GREAT_SPIN; } uVar2 = GetInventoryValue(itemID); LABEL1: @@ -341,8 +336,9 @@ void sub_08068E78(Entity* this) { } void sub_08068E90(Entity* this) { + // Learn a skill. PlayerState* s = &gPlayerState; - *(u16*)&s->field_0xac = (1 << (gUnk_08111740[this->actionDelay] - 1)) | *(u16*)&s->field_0xac; + *(u16*)&s->skills = (1 << (gUnk_08111740[this->actionDelay] - 1)) | *(u16*)&s->skills; } void sub_08068EB4(void) { diff --git a/src/npc/carpenter.c b/src/npc/carpenter.c index aa016c84..eae33283 100644 --- a/src/npc/carpenter.c +++ b/src/npc/carpenter.c @@ -2,6 +2,7 @@ #include "entity.h" #include "player.h" #include "npc.h" +#include "item.h" extern SpriteLoadData gUnk_08110CA8[]; @@ -68,7 +69,7 @@ void sub_080672B0(Entity* this, ScriptExecutionContext* context) { void sub_080672C8(Entity* this) { u32 dialog = 0; u32 tmp; - if (GetInventoryValue(0x11) == 0) { + if (GetInventoryValue(ITEM_GUST_JAR) == 0) { if (CheckGlobalFlag(TABIDACHI)) { dialog = 1; } diff --git a/src/npc/dampe.c b/src/npc/dampe.c index 5c22a331..cd6ee87c 100644 --- a/src/npc/dampe.c +++ b/src/npc/dampe.c @@ -5,6 +5,7 @@ #include "flags.h" #include "message.h" #include "npc.h" +#include "item.h" extern u16 gUnk_08113344[]; extern u16 gUnk_0811334A[]; @@ -61,7 +62,7 @@ void sub_0806BE84(Entity* this, ScriptExecutionContext* context) { context->condition = 1; } // Graveyard key - if (GetInventoryValue(0x3C) >= 2) { + if (GetInventoryValue(ITEM_QST_GRAVEYARD_KEY) >= 2) { msgIndex = 2; } MessageNoOverlap(gUnk_08113344[msgIndex], this); @@ -73,7 +74,7 @@ void sub_0806BEC8(Entity* this, ScriptExecutionContext* context) { msgIndex = 0; context->condition = 0; - hasGraveyardKey = GetInventoryValue(0x3C); + hasGraveyardKey = GetInventoryValue(ITEM_QST_GRAVEYARD_KEY); if (hasGraveyardKey == 1) { msgIndex = 1; context->condition = 1; diff --git a/src/npc/dog.c b/src/npc/dog.c index 525a0539..b5924d68 100644 --- a/src/npc/dog.c +++ b/src/npc/dog.c @@ -1,6 +1,7 @@ #include "entity.h" #include "functions.h" #include "npc.h" +#include "item.h" extern void (*gUnk_08111D88[])(Entity*); void sub_08069FE8(Entity*); @@ -65,7 +66,8 @@ void sub_08069B44(Entity* this) { if ((this->flags & ENT_SCRIPTED) != 0) { sub_0807DD50(this); } - if (((this->type == 0) && ((gPlayerState.flags & PL_MINISH) == 0)) && (GetInventoryValue(0x36) != 2)) { + if (((this->type == 0) && ((gPlayerState.flags & PL_MINISH) == 0)) && + (GetInventoryValue(ITEM_QST_DOGFOOD) != 2)) { this->action = 4; } #if defined(JP) || defined(EU) || defined(DEMO_JP) @@ -204,7 +206,7 @@ void sub_08069E50(Entity* this) { if (this->animIndex != this->field_0x6a.HALF.HI + this->animationState) { InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI + this->animationState); } - if (GetInventoryValue(0x36) == 2) { + if (GetInventoryValue(ITEM_QST_DOGFOOD) == 2) { this->action = 7; InitAnimationForceUpdate(this, 0x29); sub_080788E0(this); @@ -216,7 +218,7 @@ void sub_08069E50(Entity* this) { void sub_08069ECC(Entity* this) { if (UpdateFuseInteraction(this) != 0) { #ifdef EU - if (GetInventoryValue(0x36) != 2) { + if (GetInventoryValue(ITEM_QST_DOGFOOD) != 2) { this->action = 5; } else { this->action = 1; @@ -340,7 +342,7 @@ void sub_0806A144(Entity* this) { s32 dialog = 4; if (gPlayerState.flags & PL_MINISH) { dialog = 3; - if (GetInventoryValue(0x46) == 0 && CheckGlobalFlag(MIZUKAKI_START)) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0 && CheckGlobalFlag(MIZUKAKI_START)) { if (CheckLocalFlag(0x85) == 0) { dialog = 1; } else { diff --git a/src/npc/drLeft.c b/src/npc/drLeft.c index 0cd15668..d4798164 100644 --- a/src/npc/drLeft.c +++ b/src/npc/drLeft.c @@ -1,5 +1,7 @@ #include "npc.h" #include "functions.h" +#include "item.h" + extern u32 gUnk_081133B4; void sub_0806BFD8(Entity* this); @@ -56,8 +58,8 @@ void sub_0806C038(Entity* this) { if (index != 0) { index = 0; } - if (GetInventoryValue(0x46) == 0) { - if (GetInventoryValue(0x3a) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { + if (GetInventoryValue(ITEM_QST_BOOK2) == 0) { index = 6; if (CheckLocalFlag(LEFT_TALK) == 0) { index = 5; @@ -65,7 +67,7 @@ void sub_0806C038(Entity* this) { } } else { index = 7; - if (GetInventoryValue(0x3a) > 1) { + if (GetInventoryValue(ITEM_QST_BOOK2) > 1) { index = 0; } } diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index e31cb80d..3de83cc3 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -2,10 +2,7 @@ #include "object.h" #include "functions.h" #include "playeritem.h" - -extern void sub_080600F0(Entity*); -extern void sub_08060158(Entity*); -extern void ModBombs(s32); +#include "item.h" extern SpriteLoadData gUnk_0810A348; extern u8* gUnk_08109D18[]; @@ -150,18 +147,15 @@ void sub_08060208(Entity* this) { void sub_0806021C(Entity* this) { u32 uVar2 = 0; - // jabber nut - if (GetInventoryValue(0x5B)) { + if (GetInventoryValue(ITEM_JABBERNUT)) { uVar2 = 1; } - // earth element - if (GetInventoryValue(0x40)) { + if (GetInventoryValue(ITEM_EARTH_ELEMENT)) { uVar2 = 2; } - // mole mitts - if (GetInventoryValue(0x13)) { + if (GetInventoryValue(ITEM_MOLE_MITTS)) { uVar2 = 3; } ShowNPCDialogue(this, gUnk_08109DC8 + this->type2 * 0x4 + uVar2); @@ -174,8 +168,7 @@ void sub_0806025C(Entity* this) { void sub_08060270(Entity* this) { u32 index; - // flippers - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { index = 1; if (CheckGlobalFlag(MIZUKAKI_START) == 0) { index = 0; @@ -194,8 +187,7 @@ void sub_08060270(Entity* this) { void sub_080602BC(Entity* this) { u32 index; - // spin attack - if (GetInventoryValue(0x48) != 0) { + if (GetInventoryValue(ITEM_SKILL_SPIN_ATTACK) != 0) { index = (Random() & 1) + 2; } else { if (gSave.stats.bombCount < gBombBagSizes[gSave.stats.bombBagType]) { diff --git a/src/npc/kingDaltus.c b/src/npc/kingDaltus.c index 5fa29df2..d716d951 100644 --- a/src/npc/kingDaltus.c +++ b/src/npc/kingDaltus.c @@ -2,6 +2,7 @@ #include "script.h" #include "functions.h" #include "npc.h" +#include "item.h" extern u16 gUnk_081104F8[]; @@ -81,9 +82,9 @@ void sub_0806673C(Entity* this) { u32 index; if (CheckGlobalFlag(2) == 0) { index = 0; - } else if (GetInventoryValue(2) == 0) { + } else if (GetInventoryValue(ITEM_GREEN_SWORD) == 0) { index = 1; - } else if (GetInventoryValue(3) == 0) { + } else if (GetInventoryValue(ITEM_RED_SWORD) == 0) { index = 2; } else { index = 3; diff --git a/src/npc/librari.c b/src/npc/librari.c index f3cb382c..a0d1cb45 100644 --- a/src/npc/librari.c +++ b/src/npc/librari.c @@ -1,6 +1,7 @@ #include "global.h" #include "entity.h" #include "npc.h" +#include "item.h" extern u16 gUnk_08112D48[]; @@ -37,8 +38,7 @@ void sub_0806B260(Entity* this, ScriptExecutionContext* context) { u32 index; context->condition = 0; - // flippers - if (!GetInventoryValue(0x46)) { + if (!GetInventoryValue(ITEM_FLIPPERS)) { if (CheckGlobalFlag(MIZUKAKI_START)) { index = 2; context->condition = 1; diff --git a/src/npc/librarians.c b/src/npc/librarians.c index 6013594c..9ff8ab14 100644 --- a/src/npc/librarians.c +++ b/src/npc/librarians.c @@ -4,6 +4,7 @@ #include "flags.h" #include "message.h" #include "sound.h" +#include "item.h" extern u16 gUnk_08113078[]; @@ -15,33 +16,32 @@ ASM_FUNC("asm/non_matching/librarians/sub_0806BA34.inc", void sub_0806BA34(Entity* this, ScriptExecutionContext* context)) void sub_0806BB1C(Entity* this, ScriptExecutionContext* context) { - s32 tmp; - - tmp = 0xffffffff; - if (GetInventoryValue(0x39) == 1) { - tmp = 0x39; - } else if (GetInventoryValue(0x3a) == 1) { - tmp = 0x3a; + s32 item = 0xffffffff; + if (GetInventoryValue(ITEM_QST_BOOK1) == 1) { + item = ITEM_QST_BOOK1; + } else if (GetInventoryValue(ITEM_QST_BOOK2) == 1) { + item = ITEM_QST_BOOK2; } else { - if (GetInventoryValue(0x3b) == 1) { - tmp = 0x3b; + if (GetInventoryValue(ITEM_QST_BOOK3) == 1) { + item = ITEM_QST_BOOK3; } - if (tmp < 1) { + if (item < 1) { return; } } if (context->intVariable == 0) { - sub_08095BE0(this, tmp); + sub_08095BE0(this, item); InitializeAnimation(this, 0xc); SoundReq(SFX_TASK_COMPLETE); } else { - sub_0807CAA0(tmp, 2); + SetInventoryValue(item, 2); } } void sub_0806BB7C(Entity* this, ScriptExecutionContext* context) { context->condition = 0; - if ((GetInventoryValue(0x39) == 2) && (GetInventoryValue(0x3a) == 2) && (GetInventoryValue(0x3b) == 2)) { + if ((GetInventoryValue(ITEM_QST_BOOK1) == 2) && (GetInventoryValue(ITEM_QST_BOOK2) == 2) && + (GetInventoryValue(ITEM_QST_BOOK3) == 2)) { SetLocalFlag(0x73); context->condition = 1; } @@ -50,7 +50,7 @@ void sub_0806BB7C(Entity* this, ScriptExecutionContext* context) { void sub_0806BBB0(Entity* this) { u32 tmp; - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { if (CheckGlobalFlag(0x29)) { tmp = 1; } else { diff --git a/src/npc/marcy.c b/src/npc/marcy.c index c187fd76..bc49dab1 100644 --- a/src/npc/marcy.c +++ b/src/npc/marcy.c @@ -2,6 +2,7 @@ #include "functions.h" #include "flags.h" #include "message.h" +#include "item.h" extern u16 gUnk_0810C34C[]; @@ -16,25 +17,25 @@ void Marcy(Entity* this) { void sub_08062D18(Entity* this, ScriptExecutionContext* context) { u8 tmp = 0; - if ((GetInventoryValue(0x4f) != 0) && (CheckLocalFlag(0x26) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_PERIL_BEAM) != 0) && (CheckLocalFlag(0x26) == 0)) { tmp = 7; } - if ((GetInventoryValue(0x4e) != 0) && (CheckLocalFlag(0x25) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_DOWN_THRUST) != 0) && (CheckLocalFlag(0x25) == 0)) { tmp = 6; } - if ((GetInventoryValue(0x4d) != 0) && (CheckLocalFlag(0x24) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_GREAT_SPIN) != 0) && (CheckLocalFlag(0x24) == 0)) { tmp = 5; } - if ((GetInventoryValue(0x4c) != 0) && (CheckLocalFlag(0x23) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_SWORD_BEAM) != 0) && (CheckLocalFlag(0x23) == 0)) { tmp = 4; } - if ((GetInventoryValue(0x4b) != 0) && (CheckLocalFlag(0x22) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_ROCK_BREAKER) != 0) && (CheckLocalFlag(0x22) == 0)) { tmp = 3; } - if ((GetInventoryValue(0x4a) != 0) && (CheckLocalFlag(0x21) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_DASH_ATTACK) != 0) && (CheckLocalFlag(0x21) == 0)) { tmp = 2; } - if ((GetInventoryValue(0x49) != 0) && (CheckLocalFlag(0x20) == 0)) { + if ((GetInventoryValue(ITEM_SKILL_ROLL_ATTACK) != 0) && (CheckLocalFlag(0x20) == 0)) { tmp = 1; } this->type2 = tmp; diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c index 0fad2970..1c2bfd5e 100644 --- a/src/npc/mayorHagen.c +++ b/src/npc/mayorHagen.c @@ -4,6 +4,7 @@ #include "flags.h" #include "npc.h" #include "functions.h" +#include "item.h" extern u32 gUnk_08113F44; extern Dialog gUnk_08113F48[]; @@ -50,8 +51,7 @@ void sub_0806CE80(Entity* this) { u32 v2; v = gSave.global_progress; if (v == 5) { - // flippers - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { if (CheckLocalFlag(0x70) != 0) { v2 = CheckLocalFlag(MIZUKAKI_HINT3_MAYOR); if (v2 == 0) { diff --git a/src/npc/melari.c b/src/npc/melari.c index 4bdae9d3..5fe4a280 100644 --- a/src/npc/melari.c +++ b/src/npc/melari.c @@ -1,5 +1,6 @@ #include "npc.h" #include "functions.h" +#include "item.h" extern void sub_08068780(Entity*); @@ -134,8 +135,8 @@ void sub_08068910(Entity* this) { } void sub_08068964(Entity* this) { - sub_080A7C18(53, 0, 3); - sub_0807CAA0(53, 2); + sub_080A7C18(ITEM_QST_BROKEN_SWORD, 0, 3); + SetInventoryValue(ITEM_QST_BROKEN_SWORD, 2); } void Melari_Fusion(Entity* this) { diff --git a/src/npc/ministerPotho.c b/src/npc/ministerPotho.c index e86bca42..b0a94bed 100644 --- a/src/npc/ministerPotho.c +++ b/src/npc/ministerPotho.c @@ -2,6 +2,7 @@ #include "flags.h" #include "message.h" #include "npc.h" +#include "item.h" extern void (*const gUnk_08110644[])(Entity*); void sub_08066864(Entity*); @@ -83,9 +84,9 @@ void sub_08066904(Entity* this) { u32 index; if (CheckGlobalFlag(2) == 0) { index = 0; - } else if (GetInventoryValue(2) == 0) { + } else if (GetInventoryValue(ITEM_GREEN_SWORD) == 0) { index = 1; - } else if (GetInventoryValue(3) == 0) { + } else if (GetInventoryValue(ITEM_RED_SWORD) == 0) { index = 2; } else { index = 3; diff --git a/src/npc/mountainMinish.c b/src/npc/mountainMinish.c index 224b4972..1e7ee149 100644 --- a/src/npc/mountainMinish.c +++ b/src/npc/mountainMinish.c @@ -4,6 +4,7 @@ #include "message.h" #include "flags.h" #include "npc.h" +#include "item.h" const u8 gUnk_08111284[][0x20] = { { 0x8, 0x1, 0x9, 0x1, 0xa, 0x1, 0xb, 0x83, 0xc, 0x83, 0xd, 0x83, 0xe, 0x83, 0xf, 0x80, @@ -226,10 +227,10 @@ void sub_08068190(Entity* this) { if (CheckLocalFlag(0x7e)) { uVar2 = 1; } - if (GetInventoryValue(0x41) != 0) { + if (GetInventoryValue(ITEM_FIRE_ELEMENT) != 0) { uVar2 = 2; } - if (GetInventoryValue(2) != 0) { + if (GetInventoryValue(ITEM_GREEN_SWORD) != 0) { uVar2 = 3; } diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c index d314de7e..1427f124 100644 --- a/src/npc/mutoh.c +++ b/src/npc/mutoh.c @@ -4,6 +4,7 @@ #include "flags.h" #include "message.h" #include "npc.h" +#include "item.h" extern SpriteLoadData gUnk_08110C00; extern u16 gUnk_08110C0C[]; @@ -51,7 +52,7 @@ void sub_080670B4(Entity* this) { u32 uVar2; uVar2 = 0; - if (GetInventoryValue(0x11) == 0) { + if (GetInventoryValue(ITEM_GUST_JAR) == 0) { if (CheckGlobalFlag(TABIDACHI)) { uVar2 = 1; } diff --git a/src/npc/npc4E.c b/src/npc/npc4E.c index 3ace0253..a2505d27 100644 --- a/src/npc/npc4E.c +++ b/src/npc/npc4E.c @@ -8,6 +8,7 @@ #include "npc.h" #include "game.h" #include "hitbox.h" +#include "item.h" typedef struct { u32 unk_00; @@ -155,30 +156,30 @@ u32 sub_0806DBF4(u32 param_1) { case 3: case 4: case 6: - param_1 = 1; - if (GetInventoryValue(2) != 0) { - param_1 = 2; + param_1 = ITEM_SMITH_SWORD; + if (GetInventoryValue(ITEM_GREEN_SWORD) != 0) { + param_1 = ITEM_GREEN_SWORD; } - if (GetInventoryValue(3) != 0) { - param_1 = 3; + if (GetInventoryValue(ITEM_RED_SWORD) != 0) { + param_1 = ITEM_RED_SWORD; } - if (GetInventoryValue(4) != 0) { - param_1 = 4; + if (GetInventoryValue(ITEM_BLUE_SWORD) != 0) { + param_1 = ITEM_BLUE_SWORD; } - if (GetInventoryValue(6) != 0) { - param_1 = 6; + if (GetInventoryValue(ITEM_FOURSWORD) != 0) { + param_1 = ITEM_FOURSWORD; } break; } return param_1; } -void sub_0806DC3C(Entity* this) { +void NPC4E_SaveEquippedItems(Entity* this) { this->field_0x68.HALF.LO = gSave.stats.itemButtons[SLOT_A]; this->field_0x68.HALF.HI = gSave.stats.itemButtons[SLOT_B]; } -void sub_0806DC58(Entity* this) { +void NPC4E_RestoreEquippedItems(Entity* this) { ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.LO), 0); ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.HI), 1); } diff --git a/src/npc/pita.c b/src/npc/pita.c index 1f1f2308..49529a98 100644 --- a/src/npc/pita.c +++ b/src/npc/pita.c @@ -1,5 +1,6 @@ #include "functions.h" #include "npc.h" +#include "item.h" extern Hitbox gUnk_0810C428; @@ -23,11 +24,12 @@ void Pita(Entity* this) { } } +/** Reset the players baked goods? */ void sub_08062EB8(void) { - sub_0807CAA0(0x68, 0); - sub_0807CAA0(0x69, 0); - sub_0807CAA0(0x6a, 0); - sub_0807CAA0(0x6b, 0); + SetInventoryValue(ITEM_BRIOCHE, 0); + SetInventoryValue(ITEM_CROISSANT, 0); + SetInventoryValue(ITEM_PIE, 0); + SetInventoryValue(ITEM_CAKE, 0); } bool32 sub_08062EDC(Entity* this, ScriptExecutionContext* context) { @@ -35,16 +37,16 @@ bool32 sub_08062EDC(Entity* this, ScriptExecutionContext* context) { u32 tmp2; //! @bug: tmp is uninitialized, in practice player must have an item here - if (GetInventoryValue(0x68) != 0) { + if (GetInventoryValue(ITEM_BRIOCHE) != 0) { tmp = 0; } - if (GetInventoryValue(0x69) != 0) { + if (GetInventoryValue(ITEM_CROISSANT) != 0) { tmp = 1; } - if (GetInventoryValue(0x6a) != 0) { + if (GetInventoryValue(ITEM_PIE) != 0) { tmp = 2; } - if (GetInventoryValue(0x6b) != 0) { + if (GetInventoryValue(ITEM_CAKE) != 0) { tmp = 3; } if (CheckLocalFlag(SHOP03_PAN_1ST) == 0) { diff --git a/src/npc/sturgeon.c b/src/npc/sturgeon.c index 13ef24ab..e0045afc 100644 --- a/src/npc/sturgeon.c +++ b/src/npc/sturgeon.c @@ -2,6 +2,7 @@ #include "functions.h" #include "npc.h" #include "object.h" +#include "item.h" extern u16 gUnk_0810FA54[]; @@ -93,7 +94,7 @@ void sub_08064CC0(Entity* this) { void sub_08064CD8(Entity* this) { u32 flag; u32 tmp = 2; - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { if (CheckLocalFlag(0x73)) { tmp = 1; } else { diff --git a/src/npc/talon.c b/src/npc/talon.c index 075e4df4..4d8fddd2 100644 --- a/src/npc/talon.c +++ b/src/npc/talon.c @@ -1,5 +1,6 @@ #include "npc.h" #include "functions.h" +#include "item.h" extern void (*gUnk_0810FEC4[])(Entity* this); extern void (*gUnk_0810FEBC[])(Entity* this); @@ -102,7 +103,7 @@ void sub_080656D4(Entity* this) { goto label; } else { if (this->interactType != 0) { - if (GetInventoryValue(0x37) != 0) { // keyLonLon + if (GetInventoryValue(ITEM_QST_LONLON_KEY) != 0) { StartCutscene(this, (u16*)&script_TalonGotKey); goto label2; } else { diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index fecc3747..2a461c64 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -2,6 +2,7 @@ #include "entity.h" #include "npc.h" #include "functions.h" +#include "item.h" extern u32 sub_080002C0(u32, u32, u32); extern void sub_0806ACC4(Entity*); @@ -250,7 +251,7 @@ void sub_0806B004(Entity* this, ScriptExecutionContext* context) { if (CheckGlobalFlag(MIZUKAKI_START)) { if (CheckLocalFlag(0x73)) { - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { idx = 3; if (CheckLocalFlag(KHOUSE51_00) == 0) { idx = 2; @@ -283,7 +284,7 @@ void sub_0806B064(Entity* this) { void sub_0806B098(Entity* this) { int idx = 2; - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { idx = 1; if (CheckGlobalFlag(MIZUKAKI_START)) { if (!CheckGlobalFlag(MIZUKAKI_HARIFALL)) { @@ -308,7 +309,7 @@ void sub_0806B0E0(Entity* this) { void sub_0806B134(Entity* this) { int idx; - if (GetInventoryValue(0x45)) { + if (GetInventoryValue(ITEM_POWER_BRACELETS)) { idx = 2; if (CheckLocalFlag(KHOUSE42_00) == 0) { idx = 1; diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index 3de73499..a529c80a 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -1,5 +1,6 @@ #include "npc.h" #include "functions.h" +#include "item.h" typedef struct { u8 frame1; @@ -252,7 +253,7 @@ void sub_0806200C(Entity* this) { if ((CheckGlobalFlag(MIZUKAKI_START) != 0) && (CheckLocalFlag(0x6b))) { // hyrule bestiary - if (GetInventoryValue(0x39) == 2) { + if (GetInventoryValue(ITEM_QST_BOOK1) == 2) { index = 2; } else { index = 1; diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c index b342616e..c4087885 100644 --- a/src/npc/windTribespeople.c +++ b/src/npc/windTribespeople.c @@ -50,7 +50,7 @@ void sub_0806C7D4(Entity* this) { if (this->interactType == '\x02') { this->action = 3; - this->interactType = '\0'; + this->interactType = 0; sub_0806F118(this); } else { sub_0807DD94(this, NULL); diff --git a/src/object/bigVortex.c b/src/object/bigVortex.c index 1a3d8229..69260c5b 100644 --- a/src/object/bigVortex.c +++ b/src/object/bigVortex.c @@ -67,8 +67,8 @@ void sub_08098DC4(Entity* this) { gPlayerEntity.collisionLayer = 1; SortEntityAbove(this, &gPlayerEntity); gPlayerState.queued_action = PLAYER_PARACHUTE; - gPlayerState.field_0x34[4] = 1; - gPlayerState.field_0x34[5] = this->type2; + gPlayerState.field_0x38 = 1; + gPlayerState.field_0x39 = this->type2; this->action = 4; if (this->type2 == 1) { SetGlobalFlag(TATSUMAKI); diff --git a/src/object/book.c b/src/object/book.c index 3cea262b..f42b2f1d 100644 --- a/src/object/book.c +++ b/src/object/book.c @@ -17,7 +17,7 @@ void Book(Entity* this) { void sub_0809B3C4(Entity* this) { u32 obtained; - obtained = GetInventoryValue(this->type + 0x39); + obtained = GetInventoryValue(this->type + ITEM_QST_BOOK1); if (this->type2 != 3) { if (obtained) { DeleteThisEntity(); @@ -188,7 +188,7 @@ void sub_0809B5EC(Entity* this) { break; } case 0: { - if (GetInventoryValue(this->type + 0x39) == 2) { + if (GetInventoryValue(this->type + ITEM_QST_BOOK1) == 2) { this->subAction = 1; } break; diff --git a/src/object/button.c b/src/object/button.c index 240fc4e3..fd2f968d 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -65,7 +65,7 @@ void sub_08081BE0(Entity* this) { if (!sub_08081D28(this)) { this->action = 4; this->field_0xf = 1; - if ((gPlayerState.heldObject == 2) || (!(gPlayerState.field_0x34[1] & 0x80))) { + if ((gPlayerState.heldObject == 2) || (!(gPlayerState.field_0x35 & 0x80))) { this->actionDelay = 0x18; } else { this->actionDelay = 0x8; diff --git a/src/object/cloud.c b/src/object/cloud.c index dcf64e9b..fbd9e1b1 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -13,7 +13,7 @@ extern void (*gUnk_081247AC[])(Entity*); extern void* gUnk_080DD750; extern u8 gUnk_081247C0[]; extern u16 gUnk_081247C8[]; -extern u32 gUnk_081247D0; +extern u16 gUnk_081247D0; void Cloud(Entity* this) { gUnk_08124798[this->type](this); diff --git a/src/object/itemForSale.c b/src/object/itemForSale.c index a6db8323..a89ec4d4 100644 --- a/src/object/itemForSale.c +++ b/src/object/itemForSale.c @@ -159,7 +159,7 @@ void sub_080819B4(ItemForSaleEntity* this) { void sub_08081A5C(ItemForSaleEntity* this) { u32 tmp = sub_080787D8(super); if (super->actionDelay == 1) { - gUnk_03003DF0[tmp].unk4[2] = 0; + gUnk_03003DF0.array[tmp].unk_2 = 0; } } diff --git a/src/object/object43.c b/src/object/object43.c index f123d0bc..fdf67abc 100644 --- a/src/object/object43.c +++ b/src/object/object43.c @@ -51,7 +51,7 @@ void Object43_Init(Object43Entity* this) { super->actionDelay = 0x28; } else { super->spriteSettings.draw = 1; - if ((gPlayerState.field_0xac & 0x200) != 0) { + if ((gPlayerState.skills & SKILL_FAST_SPIN) != 0) { super->actionDelay = 0x28; } else { super->actionDelay = 0x50; @@ -102,7 +102,7 @@ void Object43_Action1(Object43Entity* this) { if (super->actionDelay != 0) { super->actionDelay--; tmp2 = 3; - if ((super->type2 == 0) && ((gPlayerState.field_0xac & 0x200) == 0)) { + if ((super->type2 == 0) && ((gPlayerState.skills & SKILL_FAST_SPIN) == 0)) { tmp2 = 7; } if ((super->actionDelay & tmp2) == 0) { diff --git a/src/object/object6A.c b/src/object/object6A.c index 3879baeb..c46bcf30 100644 --- a/src/object/object6A.c +++ b/src/object/object6A.c @@ -402,7 +402,7 @@ void sub_08094FA8(Object6AEntity* this) { } break; case 2: - if (GetInventoryValue(54) == 2) { + if (GetInventoryValue(ITEM_QST_DOGFOOD) == 2) { super->action = 3; super->spriteSettings.draw = 1; } @@ -437,7 +437,7 @@ void sub_08095088(Object6AEntity* this) { switch (super->action) { case 0: - if (GetInventoryValue(91)) + if (GetInventoryValue(ITEM_JABBERNUT)) DeleteThisEntity(); super->action = 1; super->spritePriority.b0 = 7; diff --git a/src/object/object86.c b/src/object/object86.c index 38692deb..57151a05 100644 --- a/src/object/object86.c +++ b/src/object/object86.c @@ -1,4 +1,5 @@ #include "object.h" +#include "item.h" void sub_08099ECC(Entity*); extern void sub_0805B390(u32); @@ -14,7 +15,7 @@ void sub_08099DD0(Entity* this) { this->spriteRendering.b3 = 3; this->spritePriority.b0 = 7; this->subAction = 0; - if (GetInventoryValue(0x46)) { + if (GetInventoryValue(ITEM_FLIPPERS)) { this->action = 4; this->frameIndex = 0; } else { @@ -68,6 +69,6 @@ void sub_08099ECC(Entity* this) { this->subAction = 1; CopyPosition(this, &gPlayerEntity); gPlayerState.queued_action = PLAYER_FALL; - gPlayerState.field_0x34[4] = 0; + gPlayerState.field_0x38 = 0; gPlayerState.flags |= PL_FLAGS8000; } diff --git a/src/object/objectOnSpinyBeetle.c b/src/object/objectOnSpinyBeetle.c index 56336a0d..e986348f 100644 --- a/src/object/objectOnSpinyBeetle.c +++ b/src/object/objectOnSpinyBeetle.c @@ -107,7 +107,7 @@ void ObjectOnSpinyBeetle_Action1(ObjectOnSpinyBeetleEntity* this) { case 0x18: case 0x19: case 0x1a: - if (super->type == 0 || (gPlayerState.field_0xac & 8) != 0) { + if (super->type == 0 || (gPlayerState.skills & SKILL_ROCK_BREAKER) != 0) { sub_080989C0(this); } break; diff --git a/src/object/treeHidingPortal.c b/src/object/treeHidingPortal.c index fa58b1c3..aa450002 100644 --- a/src/object/treeHidingPortal.c +++ b/src/object/treeHidingPortal.c @@ -7,12 +7,6 @@ #include "functions.h" #include "effects.h" -extern void sub_0809E96C(Entity*); -extern void CreateSparkle(Entity*); -extern u32 sub_0809E9A0(void); -extern void sub_0809E918(Entity*); -extern void CreateMinishEntrance(u32 tile); - extern void (*const gUnk_08124354[])(Entity*); extern s16 gUnk_08124364[]; diff --git a/src/player.c b/src/player.c index 36a82e9f..48e00eab 100644 --- a/src/player.c +++ b/src/player.c @@ -271,7 +271,6 @@ extern void sub_08079258(void); extern void EnablePlayerDraw(Entity*); extern u32 sub_08079B24(void); extern void sub_08079708(Entity*); -extern Entity* CreatePlayerBomb(Entity*, u32); extern u32 sub_0806F854(Entity*, s32, s32); extern u32 UpdatePlayerCollision(void); extern void sub_08079744(Entity*); @@ -1640,7 +1639,7 @@ static void sub_08071DD0(Entity* this) { } static void sub_08071E04(Entity* this) { - if ((this->z.WORD != 0) && (gPlayerState.field_0x14 == '\0')) { + if ((this->z.WORD != 0) && (gPlayerState.field_0x14 == 0)) { UpdateFloorType(); if (gPlayerState.floor_type == SURFACE_PIT) { gPlayerState.field_0x11 = 7; @@ -1689,7 +1688,7 @@ static void PlayerEmptyBottleInit(Entity* this) { Entity* ent; ResetPlayer(); - ent = CreatePlayerBomb(this, 0xe); + ent = CreatePlayerBomb((ItemBehavior*)this, 0xe); if (ent != NULL) { ent->field_0x68.HALF.LO = gPlayerState.field_0x38; this->subAction++; @@ -1702,7 +1701,7 @@ static void PlayerEmptyBottleInit(Entity* this) { break; default: gPlayerState.animation = 0x610; - sub_0807CAA0(gPlayerState.field_0x38, 2); + SetInventoryValue(gPlayerState.field_0x38, 2); break; } } @@ -3472,7 +3471,7 @@ void SurfaceAction_14(Entity* this) { } void SurfaceAction_CloneTile(Entity* this) { - if (gPlayerState.field_0xa0[0] == 4) { + if (gPlayerState.chargeState.action == 4) { u32 item, n, i; if (ItemIsSword(gSave.stats.itemButtons[SLOT_A])) { item = gSave.stats.itemButtons[SLOT_A]; @@ -3533,7 +3532,7 @@ void SurfaceAction_16(Entity* this) { } void SurfaceAction_Ice(Entity* this) { - if (!sub_080741C4() && ((gPlayerState.field_0x34[1] & 0x80) == 0 || this->knockbackDuration != 0)) { + if (!sub_080741C4() && ((gPlayerState.field_0x35 & 0x80) == 0 || this->knockbackDuration != 0)) { ResetPlayerVelocity(); } } diff --git a/src/playerItem/playerItem3.c b/src/playerItem/playerItem3.c index ba880166..b0d44d66 100644 --- a/src/playerItem/playerItem3.c +++ b/src/playerItem/playerItem3.c @@ -2,6 +2,7 @@ #include "sound.h" #include "functions.h" #include "asm.h" +#include "item.h" void sub_0801B804(Entity*); Entity* sub_0801B864(Entity*); @@ -206,7 +207,7 @@ void sub_0801B804(Entity* this) { u32 itemSlot; u32 uVar1; - itemSlot = IsItemEquipped(0xc); + itemSlot = IsItemEquipped(ITEM_MAGIC_BOOMERANG); switch (itemSlot) { case 0: uVar1 = 1; diff --git a/src/playerItem/playerItemC.c b/src/playerItem/playerItemC.c index d1e857ff..2ca10e84 100644 --- a/src/playerItem/playerItemC.c +++ b/src/playerItem/playerItemC.c @@ -78,7 +78,7 @@ void sub_0801B938(Entity* this) { this->hitbox = (Hitbox*)&gUnk_080B7850[this->animationState >> 1]; ptr = &gUnk_080B7848[(this->animationState >> 1) * 2]; - sub_08008782(this, -(gPlayerState.field_0xac & 8) != 0, ptr[0], ptr[1]); + sub_08008782(this, -(gPlayerState.skills & SKILL_ROCK_BREAKER) != 0, ptr[0], ptr[1]); sub_08078E84(this, &gPlayerEntity); } diff --git a/src/playerUtils.c b/src/playerUtils.c new file mode 100644 index 00000000..b254f4bc --- /dev/null +++ b/src/playerUtils.c @@ -0,0 +1,1873 @@ +#define NENT_DEPRECATED +#include "global.h" +#include "area.h" +#include "asm.h" +#include "common.h" +#include "entity.h" +#include "functions.h" +#include "game.h" +#include "kinstone.h" +#include "object.h" +#include "player.h" +#include "room.h" +#include "save.h" +#include "new_player.h" +#include "item.h" +#include "message.h" + +extern void sub_080752E8(ItemBehavior* behavior, u32 arg1); // item.c +extern void sub_0800857C(Entity*); +extern void sub_0805E374(Entity*); +extern void DoPlayerAction(Entity*); +extern Entity* sub_0805E744(); +extern void sub_0809D738(Entity*); +extern s32 Mod(s32, s32); +extern void sub_08003FDE(Entity*, u32, u32, u32); +extern u32 sub_080002EC(u32, u32); +extern u32 sub_08007DD6(u32, const u16*); + +typedef struct { + u8 unk0[4]; + u16 unk4; + u8 unk6[6]; +} struct_0811BE48; + +extern void gMapDataBottom; // 0x2000 +extern void gMapDataTop; // 0x2000 +extern u16 gMetatilesBottom[]; +extern u16 gMetatilesTop[]; +extern u8 gMapData; +extern const u8 gUnk_020176E0[]; +extern const ScreenTransitionData gUnk_0813AD88[]; +extern u8 gUnk_02002B32[]; + +bool32 sub_08077758(PlayerEntity*); +bool32 sub_080777A0(); +void sub_08077880(u32, u32, u32); +bool32 sub_080778CC(); +ItemBehavior* sub_0807794C(u32); +u32 sub_080789A8(void); +ItemBehavior* sub_080779EC(u32); +void sub_08077E78(ItemBehavior*, u32); +void sub_08077AEC(void); +bool32 sub_08079E90(u32); +void sub_08079258(void); +void sub_08078D60(void); +void* sub_08077C54(ItemBehavior*); +u32 sub_08079FD4(Entity*, u32); +void LoadRoomGfx(void); +bool32 sub_080793E4(u32); +u32 sub_0807A094(u32); +u32 GetSurfaceCalcType(Entity*, u32, u32); +void sub_0807AAF8(Entity*, u32); +bool32 sub_08079C30(Entity*); + +extern struct_0811BE48 gUnk_0811BE48[]; +extern void (*const gUnk_0811C27C[])(Entity*); +extern void (*const gUnk_0811C284[])(PlayerEntity*); +extern void (*const gUnk_0811C298[])(PlayerEntity*); +extern bool32 (*const gPlayerChargeActions[])(ChargeState*); +extern u8 gUnk_0811C000[]; +extern const u8 gUnk_0811C118[]; +extern void (*const gUnk_0811C120[])(Entity*); +extern u16 gUnk_0811C268[]; +extern ItemBehavior* (*const gUnk_0811BFC8[])(u32); + +void sub_08077698(PlayerEntity* this) { + ItemBehavior* puVar2; + u32 uVar3; + + gPlayerState.field_0x3[0] &= 0xfe; + gPlayerState.field_0x3[1] &= 0xf; + if ((((((gPlayerState.field_0x7 | gPlayerState.jump_status) & 0x80) == 0) && + ((gPlayerState.jump_status & 0x40) == 0)) && + (gPlayerState.swim_state == 0)) && + ((sub_08077758(this) && (sub_080777A0() == 0)))) { + sub_08077880(gSave.stats.itemButtons[0], 1, 0); + sub_08077880(gSave.stats.itemButtons[1], 2, 0); + sub_080778CC(); + } + uVar3 = 0; + puVar2 = gUnk_03000B80; + do { + if (puVar2->field_0x5[4] != 0) { + sub_080752E8(puVar2, uVar3); + } + puVar2++; + uVar3++; + } while (uVar3 < 4); +} + +void sub_08077728(u32 param_1) { + if (param_1 == 0) { + sub_08077880(gSave.stats.itemButtons[0], 1, 1); + } else { + sub_08077880(gSave.stats.itemButtons[1], 2, 1); + } +} + +bool32 sub_08077758(PlayerEntity* this) { + if ((gPlayerState.flags & PL_DRUGGED) == 0) { + if ((gPlayerState.flags & (PL_CAPTURED | PL_HIDDEN | PL_DISABLE_ITEMS | PL_BURNING | PL_FROZEN)) == 0) { + if ((((gPlayerState.dash_state | gPlayerState.mobility) | this->unk_7a) == 0) && + (super->knockbackDuration == 0)) { + return TRUE; + } + } else { + DeleteClones(); + } + } + return FALSE; +} + +NONMATCH("asm/non_matching/playerUtils/sub_080777A0.inc", bool32 sub_080777A0(void)) { + if ((gPlayerState.field_0x92 & 0x80) != 0) { + if ((gPlayerState.flags & PL_CLONING) != 0) { + gPlayerState.chargeState.action = 1; + DeleteClones(); + } else { + if (gArea.field_0x18 != 2) { + if (gArea.field_0x18 == 3) { + if ((gArea.unk1A == 0) && ((gPlayerState.flags & PL_MINISH) != 0)) { + gPlayerEntity.subAction += 1; + gPlayerEntity.flags &= ~ENT_COLLIDE; + RequestPriorityDuration(&gPlayerEntity, 0xb4); + return TRUE; + } + } else if ((((gUnk_0200AF00.filler25[7] == 0xc) && (gPlayerState.field_0x1c == 0)) && + (gPlayerState.floor_type != 0x11)) && + ((((gPlayerState.field_0x90 & 0xf00) != 0 && + ((gPlayerState.flags & (PL_BURNING | PL_ROLLING)) == 0)) && + ((gPlayerState.jump_status == 0 && (gPlayerState.field_0x3[1] == 0)))))) { + gPlayerState.queued_action = 0x18; + } + return FALSE; + } + if (gArea.unk1A == 0) { + gPlayerEntity.subAction += 1; + } + } + } else { + if ((gPlayerState.flags & PL_USE_PORTAL) == 0) { + return FALSE; + } + } + return TRUE; +} +END_NONMATCH + +NONMATCH("asm/non_matching/playerUtils/sub_08077880.inc", void sub_08077880(u32 param_1, u32 param_2, u32 param_3)) { + ItemBehavior* item; + u16* puVar2; + + if (param_1 - 1 < 0x1f) { + if (gUnk_0811BE48[param_1].unk0[0] != 0) { + puVar2 = &gPlayerState.field_0x92; + } else { + puVar2 = &gPlayerState.field_0x90; + } + if (((*puVar2 & param_2) != 0) || (param_3 != 0)) { + item = sub_0807794C(param_1); + if (item != NULL) { + item->field_0x5[4] = gUnk_0811BE48[param_1].unk0[1]; + item->behaviorID = (u8)param_1; + item->field_0x2[1] = (u8)param_2; + } + } + } +} +END_NONMATCH + +NONMATCH("asm/non_matching/playerUtils/sub_080778CC.inc", bool32 sub_080778CC(void)) { + s32 iVar1; + ItemBehavior* pIVar2; + + if (!((((gPlayerState.flags & (PL_USE_PORTAL | PL_MINISH | PL_ROLLING)) == 0) && + (((gNewPlayerEntity.unk_79 != 0 || (gPlayerState.heldObject != 0)) || + ((gPlayerState.field_0x92 & 0x8000) != 0)))) && + (((sub_080789A8() != 0 || ((gPlayerState.field_0x90 & 0xf03) == 0)))))) { + return FALSE; + } + pIVar2 = sub_0807794C(0x1b); + if (pIVar2 == NULL) { + return FALSE; + } else { + pIVar2->behaviorID = 0x1b; + pIVar2->field_0x5[4] = 2; + return TRUE; + } +} +END_NONMATCH + +ItemBehavior* sub_0807794C(u32 param_1) { + if (((((gPlayerState.queued_action == PLAYER_ROLL) && (param_1 != 0x1b)) || + (((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (6 < param_1)))) || + ((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (6 < param_1)) || + (((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[param_1].unk6[2] == 0)))))) || + ((gPlayerState.floor_type == 0x11 && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) { + return NULL; + } else { + u32 tmp = gUnk_0811BE48[param_1].unk0[2]; + return gUnk_0811BFC8[tmp](param_1); + } +} + +u32 sub_080779E8(void) { + return 0; +} + +ItemBehavior* sub_080779EC(u32 param_1) { + if (gUnk_03000B80[1].field_0x5[4] == 0) { + return gUnk_03000B80 + 1; + } else if (gUnk_03000B80[2].field_0x5[4] == 0) { + return gUnk_03000B80 + 2; + } else { + return NULL; + } +} + +ItemBehavior* sub_08077A18(u32 param_1) { + ItemBehavior* pIVar1; + + if (((gPlayerState.heldObject == 0) && (param_1 != gUnk_03000B80[1].behaviorID)) && + (param_1 != gUnk_03000B80[2].behaviorID)) { + return sub_080779EC(param_1); + } else { + return NULL; + } +} + +ItemBehavior* sub_08077A48(s32 param_1) { + if (gPlayerState.heldObject == 0) { + u32 tmp = gPlayerState.jump_status & 0x20; + if ((((gPlayerState.jump_status & 0x20) == 0)) && + (gUnk_0811BE48[param_1].unk0[1] >= gUnk_03000B80[0].field_0x5[4])) { + sub_08077E78(gUnk_03000B80, 0); + gPlayerState.field_0x0[1] = tmp; + gPlayerState.field_0x1c = tmp; + gPlayerState.sword_state = tmp; + return gUnk_03000B80; + } + } + return NULL; +} + +ItemBehavior* sub_08077A98(void) { + if (!(((gSave.stats.bombCount == 0) || (gPlayerState.heldObject != 0)) || (gUnk_03000B80[0].field_0x5[4] != 0))) { + return gUnk_03000B80; + } else { + return NULL; + } +} + +ItemBehavior* sub_08077AC8(void) { + ItemBehavior* pIVar1; + u32 index; + + index = 0; + pIVar1 = gUnk_03000B80; + while (index < 4) { + if (pIVar1->field_0x5[4] != 0) { + return NULL; + } + pIVar1 += 1; + index += 1; + } + return gUnk_03000B80 + 3; +} + +void sub_08077AEC(void) { + u32 slot; + + sub_08077E78(gUnk_03000B80 + 3, 3); + gPlayerState.flags &= ~PL_USE_LANTERN; + slot = IsItemEquipped(ITEM_LANTERN_ON); + if (slot != 2) { + ForceEquipItem(ITEM_LANTERN_OFF, slot); + } +} + +void sub_08077B20(void) { + ResetPlayer(); + sub_08077AEC(); +} + +void ResetPlayer() { + u32 index = 0; + ItemBehavior* ptr = gUnk_03000B80; + do { + sub_08077E78(ptr, index); + ptr++; + index++; + } while (index <= 2); + + gPlayerState.field_0x3c[1] = 0; + gPlayerState.field_0x1c = 0; + gPlayerState.field_0x1f[2] = 0; + gPlayerState.field_0x0[1] = 0; + gPlayerState.field_0xe = 0; + gPlayerState.dash_state = 0; + gPlayerState.sword_state = 0; + gPlayerState.field_0x3[0] = 0; + gPlayerState.heldObject = 0; + gPlayerState.flags &= ~(PL_ROLLING | PL_SWORD_THRUST); + + gNewPlayerEntity.unk_70 = NULL; + + if ((gPlayerState.jump_status & 0xc0) == 0) { + gPlayerState.jump_status = 0; + } + + switch (gPlayerState.framestate) { + case 2: + case 3: + case 4: { + gPlayerState.framestate = PL_STATE_IDLE; + break; + } + } +} + +void sub_08077B98(ItemBehavior* unk) { + if ((gPlayerState.item == NULL) || (gPlayerState.item->id != 1)) { + gPlayerState.item = sub_08077C54(unk); + } +} + +void sub_08077BB8(ItemBehavior* beh) { + Entity* temp = sub_08077C54(beh); + if (temp != NULL) { + temp->flags = ENT_PERSIST; + } + gPlayerState.item = temp; +} + +Entity* sub_08077BD4(ItemBehavior* beh) { + if (sub_08077C94(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]) != 0) { + return NULL; + } else { + return CreatePlayerBomb(beh, gUnk_0811BE48[beh->behaviorID].unk0[3]); + } +} + +Entity* sub_08077C0C(ItemBehavior* beh, u32 arg1) { + u8 bVar1; + Entity* pEVar3; + + bVar1 = gUnk_0811BE48[arg1].unk0[3]; + + if (sub_08077C94(beh, bVar1) != 0) { + return NULL; + } else { + return CreatePlayerBomb(beh, bVar1); + } +} + +Entity* CreatePlayerBomb(ItemBehavior* beh, u32 subtype) { + Entity* pEVar1; + + pEVar1 = CreatePlayerItem(subtype, 0, 0, beh->behaviorID); + if (pEVar1 != NULL) { + *(ItemBehavior**)&pEVar1->parent = beh; + } + return pEVar1; +} + +void* sub_08077C54(ItemBehavior* unk) { + GenericEntity* item; + + item = (GenericEntity*)sub_0805E744(); + if (item != NULL) { + item->base.id = gUnk_0811BE48[unk->behaviorID].unk0[3]; + item->base.kind = PLAYER_ITEM; + item->base.flags = 0xa0; + item->base.parent = (Entity*)unk; + item->field_0x68.HALF.LO = unk->behaviorID; + AppendEntityToList(&item->base, 2); + } + return item; +} + +Entity* sub_08077C94(ItemBehavior* arg0, u32 arg1) { + Entity* iVar1; + + iVar1 = FindEntityByID(PLAYER_ITEM, gUnk_0811BE48[arg1].unk0[3], 2); + if (iVar1 == NULL) { + return NULL; + } + return iVar1; +} + +Entity* CreatePlayerItem(u32 subtype, u32 form, u32 parameter, u32 unk) { + GenericEntity* ent; + + ent = (GenericEntity*)GetEmptyEntity(); + if (ent != NULL) { + ent->base.flags = ENT_COLLIDE; + ent->base.kind = PLAYER_ITEM; + ent->base.id = subtype; + ent->base.type = form; + ent->base.type2 = parameter; + ent->field_0x68.HALF.LO = unk; + AppendEntityToList(&ent->base, 2); + } + return &ent->base; +} + +Entity* sub_08077CF8(u32 subtype, u32 form, u32 parameter, u32 unk) { + GenericEntity* ent; + + ent = (GenericEntity*)sub_0805E744(); + if (ent != NULL) { + ent->base.flags = ENT_COLLIDE; + ent->base.kind = PLAYER_ITEM; + ent->base.id = subtype; + ent->base.type = form; + ent->base.type2 = parameter; + ent->field_0x68.HALF.LO = unk; + AppendEntityToList(&ent->base, 2); + } + return &ent->base; +} + +void sub_08077D38(ItemBehavior* beh, u32 arg2) { + u32 r6; + struct_0811BE48* ptr; + + gPlayerState.field_0xa |= 8 >> arg2; + gPlayerState.keepFacing |= 8 >> arg2; + beh->field_0x5[5] = gPlayerEntity.animationState; + if (beh->stateID == 0) { + beh->stateID++; + } + + ptr = &gUnk_0811BE48[beh->behaviorID]; + if (ptr->unk4) { + if ((gPlayerState.flags & PL_NO_CAP)) { + switch (beh->behaviorID) { + case 0x1b: + r6 = 0x948; + break; + case 1: + r6 = 0x408; + break; + case 0xd: + r6 = 0x40c; + break; + } + sub_08077DF4(beh, r6); + } else { + sub_08077DF4(beh, ptr->unk4); + } + } + + beh->field_0xf = ptr->unk6[0]; + if (ptr->unk6[1]) { + gPlayerState.field_0x3[1] |= (8 >> arg2) | ((8 >> arg2) << 4); + } +} + +typedef struct { + u8 b0 : 4; + u8 b1 : 4; +} PACKED Unk_bitfield; + +typedef struct { + u8 unk[16]; +} Unk_struct_in_08077EC8; + +void sub_08077DF4(ItemBehavior* beh, u32 arg1) { + beh->field_0x10 = arg1; + if ((arg1 & 0xff) > 0xb8) { + arg1 += beh->field_0x5[5] >> 1; + } + gPlayerEntity.spriteIndex = (short)(arg1 >> 8); + InitAnimationForceUpdate(&gPlayerEntity, (u8)arg1); + sub_08077E54(beh); +} + +void UpdateItemAnim(ItemBehavior* beh) { + UpdateAnimationSingleFrame(&gPlayerEntity); + sub_08077E54(beh); +} + +void sub_08077E3C(ItemBehavior* ent, u32 idx) { + sub_080042BA(&gPlayerEntity, idx); + sub_08077E54(ent); +} + +void sub_08077E54(ItemBehavior* beh) { + beh->field_0x5[7] = gPlayerEntity.animIndex; + beh->field_0x12[0] = gPlayerEntity.frameIndex; + beh->field_0x5[8] = gPlayerEntity.frameDuration; + beh->field_0x5[9] = gPlayerEntity.frame; +} + +void sub_08077E78(ItemBehavior* arg0, u32 bits) { + u32 not ; + + if (bits == 0) { + if (gPlayerState.item != NULL) { + ((Unk_bitfield*)gPlayerState.item)[0x11].b0 = 6; + gPlayerState.item = NULL; + } else { + gPlayerState.item = NULL; + } + } + + not = (8 >> bits); + gPlayerState.field_0x3[1] &= ~((u8)((8 >> bits) << 4) | not ); + not = ~not ; + gPlayerState.field_0xa &= not ; + gPlayerState.keepFacing &= not ; + MemClear(arg0, 0x1c); +} + +bool32 sub_08077EC8(ItemBehavior* beh) { + if ((gPlayerState.sword_state & 8) != 0) { + sub_08077DF4(beh, 0x170); + beh->field_0x5[2] = 0x28; + beh->stateID = 7; + beh->field_0xf = 6; + return TRUE; + } else { + return FALSE; + } +} + +bool32 sub_08077EFC(ItemBehavior* arg0) { + return sub_08077F24(arg0, (u16)gPlayerState.field_0x90); +} + +bool32 sub_08077F10(ItemBehavior* arg0) { + return sub_08077F24(arg0, (u16)gPlayerState.field_0x92); +} + +bool32 sub_08077F24(ItemBehavior* beh, u32 arg1) { + u32 val; + Stats* stats = &gSave.stats; + u32 id = beh->behaviorID; + if (stats->itemButtons[SLOT_A] == id) { + val = 1; + } else if (stats->itemButtons[SLOT_B] == id) { + val = 2; + } else { + val = 0; + } + + return (val & arg1) ? 1 : 0; +} + +void sub_08077F50(ItemBehavior* beh, u32 arg1) { + sub_08079184(); + sub_08077E78(beh, arg1); +} + +u32 sub_08077F64(ItemBehavior* arg0, u32 unk) { + u32 temp; + if (gPlayerState.heldObject == 0) { + sub_08077F50(arg0, unk); + temp = 0; + } else { + temp = 1; + } + return temp; +} + +void sub_08077F84(void) { + Entity* obj; + + if (((gPlayerEntity.collisionLayer & 2) == 0) && + GetTileTypeByPos(gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI - 0xc, 2) - 0x343U < 4) { + sub_0807AA80(&gPlayerEntity); + gPlayerState.jump_status |= 8; + obj = CreateObject(OBJECT_44, 0, 0); + if (obj != NULL) { + obj->x = gPlayerEntity.x; + obj->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0xc; + gPlayerEntity.y.HALF.HI -= 0xc; + } + } +} + +bool32 sub_08077FEC(u32 action) { + ChargeState* state = &gPlayerState.chargeState; + return gPlayerChargeActions[state->action](state); +} + +NONMATCH("asm/non_matching/playerUtils/sub_08078008.inc", bool32 sub_08078008(ChargeState* state)) { + u32 swordType; + if (ItemIsSword(gSave.stats.itemButtons[0]) == 0) { + if (ItemIsSword(gSave.stats.itemButtons[1]) != 0) { + swordType = gSave.stats.itemButtons[1]; + } else { + swordType = 0; + } + } else { + swordType = gSave.stats.itemButtons[0]; + } + if (swordType - 1 < 2) { + swordType = 0; + } + if ((swordType != 0) && ((gPlayerState.sword_state & 0x20) != 0)) { + if (++state->preChargeTimer > 0x14) { + state->preChargeTimer = 10; + state->action = 3; + state->swordType = swordType; + } + } else { + state->preChargeTimer = 0; + } + return FALSE; +} +END_NONMATCH + +bool32 sub_08078070(ChargeState* state) { + if ((gPlayerState.sword_state & 0x20) != 0) { + if ((gPlayerState.skills & SKILL_FAST_SPLIT) != SKILL_NONE) { + state->chargeTimer += 0xc; + } else { + state->chargeTimer += 6; + } + if (state->chargeTimer >= 800) { + state->chargeTimer = 800; + state->action = 4; + SoundReq(SFX_ITEM_SWORD_CHARGE_FINISH); + } else { + if (Mod(state->chargeTimer, 0x14) == 0) { + SoundReq(SFX_ITEM_SWORD_CHARGE); + } + } + } else { + state->action = 1; + } + return TRUE; +} + +bool32 sub_080780E0(ChargeState* state) { + if ((gPlayerState.sword_state & 0x40) != 0) { + state->action = 5; + } else { + if ((gPlayerState.sword_state & 0x20) == 0) { + state->action = 1; + } + } + return TRUE; +} + +bool32 sub_08078108(ChargeState* state) { + if (--state->chargeTimer * 0x10000 < 0) { + state->chargeTimer = 0; + state->action = 2; + } + return TRUE; +} + +bool32 sub_08078124(ChargeState* state) { + if ((state->chargeTimer -= 0x10) * 0x10000 < 0) { + state->chargeTimer = 0; + state->action = 2; + } + return TRUE; +} + +bool32 sub_08078140(ChargeState* info) { + if (--info->preChargeTimer * 0x1000000 < 0) { + info->preChargeTimer = 0; + info->action = 0; + return TRUE; + } + return FALSE; +} + +void ForceSetPlayerState(u32 framestate) { + gPlayerState.framestate = framestate; + gPlayerEntity.flags &= ~ENT_COLLIDE; + sub_08078B48(); +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078180.inc", void sub_08078180()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_080782C0.inc", void sub_080782C0()) + +void sub_080784C8(void) { + MemClear(&gUnk_03003DF0, 0x188); + gUnk_03003DF0.unk_4 = (u8*)gUnk_0811C000; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_080784E4.inc", void sub_080784E4()) + +void sub_08078778(Entity* ent) { + sub_0807887C(ent, 1, 0); +} + +void sub_08078784(Entity* ent, u32 arg1) { + sub_0807887C(ent, 1, arg1); +} + +void sub_08078790(Entity* ent, u32 arg1) { + sub_0807887C(ent, 2, arg1); +} + +void sub_0807879C(Entity* ent) { + sub_0807887C(ent, 7, 0); +} + +void sub_080787A8(Entity* ent, u32 arg1) { + sub_0807887C(ent, 7, arg1); +} + +void sub_080787B4(Entity* ent) { + sub_0807887C(ent, 9, 0); +} + +void sub_080787C0(Entity* ent) { + sub_0807887C(ent, 10, 0); +} + +void sub_080787CC(Entity* ent) { + sub_0807887C(ent, 5, 0); +} + +s32 sub_080787D8(Entity* ent) { + s32 iVar1; + + iVar1 = sub_0807887C(ent, 8, 0); + if (iVar1 >= 0) { + gUnk_03003DF0.array[iVar1].unk_2 = 0xbe; + } + return iVar1; +} + +s32 sub_08078800(Entity* ent) { + s32 iVar1; + + iVar1 = sub_0807887C(ent, 6, 0); + if (iVar1 >= 0) { + gUnk_03003DF0.array[iVar1].unk_2 = 0xbe; + } + return iVar1; +} + +s32 sub_08078828(Entity* ent) { + s32 iVar1; + + iVar1 = sub_0807887C(ent, 3, 0); + if (iVar1 >= 0) { + gUnk_03003DF0.array[iVar1].unk_2 = 0xbe; + } + return iVar1; +} + +void sub_08078850(Entity* arg0, u32 arg1, u32 arg2, void* arg3) { + s32 iVar1; + + iVar1 = sub_08078904(arg0); + if (iVar1 >= 0) { + gUnk_03003DF0.array[iVar1].unk_0 = arg1; + gUnk_03003DF0.array[iVar1].unk_2 = arg2; + gUnk_03003DF0.array[iVar1].unk_4 = arg3; + } +} + +s32 sub_0807887C(Entity* entity, u32 param_2, u32 param_3) { + s32 index; + entity->interactType = 0; + index = sub_08078904(entity); + if (index < 0) { + index = sub_08078904(0); + } + if (index >= 0) { + gUnk_03003DF0.array[index].entity = entity; + gUnk_03003DF0.array[index].unk_1 = param_2; + gUnk_03003DF0.array[index].unk_3 = param_3; + } + if (param_3 != 0) { + Entity* entity = FindEntityByID(OBJECT, OBJECT_9, 6); + if (entity == NULL) { + CreateObject(OBJECT_9, 0, 0); + } + } + return index; +} + +/** Clear entry for Entity. */ +void sub_080788E0(Entity* entity) { + s32 index = sub_08078904(entity); + if (index > -1) { + MemClear(&gUnk_03003DF0.array[index], 0xc); + } +} + +/** Find entry for Entity. */ +s32 sub_08078904(Entity* entity) { + u32 index; + for (index = 0; index < 0x20; index++) { + if (entity == gUnk_03003DF0.array[index].entity) { + return index; + } + } + return -1; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078930.inc", void sub_08078930(Entity* a)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078954.inc", void sub_08078954(Entity* a)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_080789A8.inc", u32 sub_080789A8()) + +void SetPlayerControl(PlayerControlMode mode) { + if (gPlayerState.controlMode != CONTROL_DISABLED) { + gPlayerState.controlMode = mode; + } +} + +void CreateEzloHint(u32 hintId, u32 hintHeight) { + gPlayerState.queued_action = PLAYER_TALKEZLO; + gRoomTransition.hint_idx = hintId; +#if defined(EU) || defined(JP) + // TODO what fields of the room transition are switched in these variants? + gRoomTransition.field_0x2c[8] = hintHeight; +#else + gRoomTransition.hint_height = hintHeight; +#endif +} + +void sub_08078AC0(u32 param_1, u32 param_2, u32 param_3) { + gPlayerState.queued_action = PLAYER_080720DC; + gPlayerState.field_0x38 = param_1; + gPlayerState.field_0x39 = param_2 != 0; + gPlayerState.field_0x3a = param_3 != 0; +} + +/** Set up player states for getting the item? */ +void sub_08078AF0(Entity* item, u8 param_2, u8 param_3) { + gPlayerState.field_0x38 = param_2; + gPlayerState.field_0x39 = param_3; + gPlayerState.field_0x3a = 0; + gPlayerState.queued_action = PLAYER_ITEMGET; + gPlayerState.framestate = 0x15; + gPlayerState.swim_state = 0; + gPlayerState.field_0x14 = 1; + gPlayerEntity.child = item; + gPlayerEntity.flags &= ~ENT_COLLIDE; + gPlayerEntity.updatePriority = 2; + DeleteClones(); +} + +void sub_08078B48(void) { + gPlayerState.field_0x7 |= 0x80; + gPlayerState.keepFacing |= 0x80; + gPlayerState.field_0xa |= 0x80; + gPlayerState.field_0x27[0] = 2; + switch (gPlayerState.framestate) { + case 4: + case 5: + case 0x19: + case 0x1a: + case 0x1d: + break; + case 9: + gPlayerState.flags &= ~PL_ROLLING; + // fallthrough + default: + if (gRoomVars.shopItemType == 0) { + gPlayerState.mobility = 1; + } + break; + } + gPlayerEntity.iframes = -2; + gPlayerState.field_0x82[8] = 2; +} + +void sub_08078C24(void) { + gPlayerState.field_0x0[0] = 0; + gPlayerState.field_0x0[1] = 0; + gPlayerState.jump_status = 0; + gPlayerState.field_0x3[0] = 0; + gPlayerState.field_0x3[1] = 0; + gPlayerState.heldObject = 0; + gPlayerState.pushedObject = 0; + gPlayerState.field_0x7 = 0; + gPlayerState.animation = 0; + gPlayerState.field_0xa = 0; + gPlayerState.keepFacing = 0; + gPlayerState.field_0x35 = 0; + gPlayerState.field_0x36 = 0; + gPlayerState.queued_action = PLAYER_INIT; + gPlayerState.field_0xd = 0; + gPlayerState.field_0xe = 0; + gPlayerState.field_0x11 = 0; + gPlayerState.floor_type = 0; + gPlayerState.floor_type_last = 0; + gPlayerState.field_0x14 = 0; + gPlayerState.sword_state = 0; + gPlayerState.dash_state = 0; + gPlayerState.field_0x1f[0] = 0; + gPlayerState.field_0x1f[1] = 0; + gPlayerState.field_0x1f[2] = 0; + gPlayerState.field_0x22[0] = 0; + gPlayerState.field_0x22[1] = 0; + gPlayerState.swim_state = 0; + gPlayerState.item = NULL; + gPlayerState.speed_modifier = 0; + gPlayerState.field_0x35 = 0; + gPlayerState.flags = 0; + gPlayerState.field_0x38 = 0; + gPlayerState.field_0x39 = 0; + gPlayerState.field_0x3a = 0; + gPlayerState.field_0x3f = 0; + gPlayerState.field_0x3c[0] = 0; + MemFill32(0xffffffff, gPlayerState.path_memory, 0x40); + MemClear(&gUnk_03003DF0, 0x188); +} + +void UpdateCarriedObject(void) { + if ((u8)(gPlayerState.heldObject - 3) < 2) { + sub_08078D60(); + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078CD0.inc", void sub_08078CD0()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078D60.inc", void sub_08078D60()) + +void sub_08078E84(Entity* param_1, Entity* param_2) { + SpriteFrame* frame; + if (param_2 == &gPlayerEntity) { + sub_08079BD8(param_1); + param_1->spriteOffsetX = gPlayerEntity.spriteOffsetX; + param_1->spriteOffsetY = gPlayerEntity.spriteOffsetY; + } + frame = &gSpritePtrs[(u16)param_2->spriteIndex].frames[param_2->frameIndex]; + if (frame->unk_1 != 0) { + sub_0806FEBC(param_2, 1, param_1); + } else { + sub_0806FEBC(param_2, 3, param_1); + } +} + +void sub_08078EE4(void) { + gPlayerEntity.x.HALF.HI = gPlayerState.startPosX; + gPlayerEntity.y.HALF.HI = gPlayerState.startPosY; +} + +bool32 RunQueuedAction(void) { + if (gPlayerState.queued_action == 0) { + return FALSE; + } else { + gPlayerEntity.action = gPlayerState.queued_action; + gPlayerEntity.subAction = 0; + gPlayerState.queued_action = 0; + DoPlayerAction(&gPlayerEntity); + return TRUE; + } +} + +void sub_08078F24(void) { + u32 angle = gPlayerState.field_0xd; + if ((angle & 0x80) != 0) { + ResetPlayerVelocity(); + } else { + gPlayerState.vel_x = gSineTable[angle * 8]; + gPlayerState.vel_y = -gSineTable[angle * 8 + 0x40]; + } +} + +void ResetPlayerVelocity(void) { + gPlayerState.vel_x = 0; + gPlayerState.vel_y = 0; +} + +bool32 sub_08078F74(Entity* this) { + if ((gArea.field_0x18 == 3) && (gPlayerState.field_0x35 != 0xff)) { + gPlayerState.jump_status = 0x81; + this->action = 0x15; + this->subAction = 0; + this->zVelocity = 0x20000; + return TRUE; + } else { + return FALSE; + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08078FB0.inc", void sub_08078FB0(Entity* a)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079064.inc", void sub_08079064()) + +void sub_080790E4(Entity* this) { + if (gPlayerState.keepFacing != 0) { + return; + } + if (sub_080793E4(0x10)) { + this->iframes = 0x14; + this->knockbackDuration = 4; + this->knockbackDirection = this->animationState << 2 ^ 0x10; + ModHealth(-2); + SoundReq(SFX_PLY_VO6); + return; + } + if ((gPlayerState.pushedObject & 0x80) != 0) { + return; + } + if (gPlayerState.pushedObject == 0) { + if (sub_080793E4(1)) { + if (this->field_0xf <= 5) { + this->field_0xf++; + return; + } + } else { + this->field_0xf = 0; + return; + } + } else { + gPlayerState.pushedObject--; + } + gPlayerState.field_0x35 = this->animationState; + gPlayerState.framestate = 0x19; + if ((gPlayerState.flags & PL_NO_CAP) != 0) { + gPlayerState.animation = 0x93c; + } else { + gPlayerState.animation = 0x33c; + } +} + +void sub_08079184(void) { + gPlayerState.heldObject = 0; + gPlayerState.field_0x0[1] = 0; + gNewPlayerEntity.unk_74 = NULL; +} + +void sub_0807919C(void) { + if ((gPlayerState.flags & PL_MINISH) == 0) { + SetPlayerActionNormal(); + } else { + sub_08079258(); + } +} + +void SetPlayerActionNormal(void) { + gPlayerEntity.action = PLAYER_NORMAL; + gPlayerEntity.subAction = 0; + gPlayerEntity.field_0xf = 0; +} + +void ResetPlayerAnimationAndAction(void) { + if ((gPlayerState.flags & PL_HIDDEN) == 0) { + gPlayerEntity.spriteSettings.draw = 3; + } + if ((gPlayerState.flags & PL_MINISH) == 0) { + gPlayerEntity.spritePriority.b1 = 1; + sub_0807921C(); + } else { + sub_08079258(); + } +} + +void sub_0807921C(void) { + gPlayerEntity.flags |= ENT_COLLIDE; + gPlayerEntity.spriteSettings.draw = 3; + gPlayerState.flags &= ~(PL_BUSY | PL_DROWNING | PL_DISABLE_ITEMS | PL_FROZEN | PL_ROLLING | PL_IN_HOLE | + PL_MOLDWORM_RELEASED | PL_PARACHUTE); + ResolvePlayerAnimation(); + SetPlayerActionNormal(); + sub_0805E374(&gPlayerEntity); +} + +void sub_08079258(void) { + if ((gPlayerState.flags & PL_HIDDEN) == 0) { + gPlayerEntity.flags |= ENT_COLLIDE; + gPlayerEntity.spriteSettings.draw = 3; + } + gPlayerEntity.action = PLAYER_MINISH; + gPlayerEntity.subAction = 1; + gPlayerEntity.field_0x3c &= 0xfb; + gPlayerState.animation = 0xc18; + gPlayerState.flags &= + ~(PL_BUSY | PL_DROWNING | PL_DISABLE_ITEMS | PL_IN_HOLE | PL_MOLDWORM_RELEASED | PL_PARACHUTE); + gPlayerState.swim_state = 0; + gPlayerState.queued_action = 0; + sub_0805E374(&gPlayerEntity); +} + +void sub_080792BC(s32 speed, u32 direction, u32 field_0x38) { + gPlayerState.queued_action = PLAYER_08072454; + gPlayerState.field_0x38 = field_0x38; + gPlayerEntity.speed = speed; + gPlayerEntity.direction = direction; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_080792D8.inc", void sub_080792D8()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_080793E4.inc", bool32 sub_080793E4(u32 a)) + +ASM_FUNC("asm/non_matching/playerUtils/RespawnPlayer.inc", void RespawnPlayer()) + +void sub_08079520(Entity* this) { + s32 tmp = gPlayerState.field_0xd; + if (tmp < 0x80) { + this->direction = gPlayerState.field_0xd; + } else { + this->direction = (this->animationState >> 1) << 3; + } +} + +u32 sub_0807953C(void) { + u32 tmp = 0xf38; + return gPlayerState.field_0x92 & tmp; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079550.inc", void sub_08079550()) + +void sub_08079708(Entity* this) { + gPlayerState.framestate = 0x12; + gPlayerState.field_0x3c[0] = 0xff; + this->flags &= ~ENT_COLLIDE; + this->action = 0xa; + this->subAction = 0; + sub_080085B0(this); + if ((gPlayerState.flags & (PL_CAPTURED | PL_DISABLE_ITEMS)) == 0) { + SetPlayerEventPriority(); + } +} + +void sub_08079744(Entity* this) { + s32 tmp; + tmp = this->x.HALF.HI & 0xf; + if (tmp != 8) { + if (tmp > 8) { + this->x.HALF.HI--; + } else { + this->x.HALF.HI++; + } + } + tmp = this->y.HALF.HI & 0xf; + if (tmp != 8) { + if (tmp > 8) { + this->y.HALF.HI--; + } else { + this->y.HALF.HI++; + } + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079778.inc", void sub_08079778()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_080797C4.inc", void sub_080797C4()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_080797EC.inc", void sub_080797EC()) + +ASM_FUNC("asm/non_matching/playerUtils/ResolvePlayerAnimation.inc", void ResolvePlayerAnimation()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079B24.inc", u32 sub_08079B24()) + +void sub_08079BD8(Entity* this) { + this->x = gPlayerEntity.x; + this->y = gPlayerEntity.y; + this->z = gPlayerEntity.z; + this->collisionLayer = gPlayerEntity.collisionLayer; + this->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; + this->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + this->spritePriority.b0 = gPlayerEntity.spritePriority.b0; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079C30.inc", bool32 sub_08079C30(Entity* a)) + +bool32 sub_08079D48(void) { + if (!sub_08079C30(&gPlayerEntity)) { + return TRUE; + } else { + if (!sub_08008B22()) { + if (!sub_08007DD6((u16)sub_080002B8(&gPlayerEntity), gUnk_0811C268)) { + return TRUE; + } + } + } + return FALSE; +} + +void sub_08079D84(void) { + if ((gPlayerEntity.action == PLAYER_NORMAL) || (gPlayerEntity.action == PLAYER_ROLL)) { + gPlayerState.field_0x38 = 0x9c; + gPlayerState.field_0x39 = 2; + gPlayerState.field_0x3a = 0x3c; + gPlayerState.queued_action = PLAYER_0807204C; + gPlayerEntity.iframes = 0x7c; + sub_08077B20(); + SoundReq(SFX_193); + } +} + +void sub_08079DCC(void) { + if (gPlayerEntity.action == 1) { + gPlayerState.field_0x38 = 0xa0; + gPlayerState.field_0x39 = 3; + gPlayerState.field_0x3a = 0; + gPlayerState.queued_action = PLAYER_0807204C; + SoundReq(SFX_193); + } +} + +void UpdatePlayerMovement(void) { + if ((gPlayerEntity.speed != 0) && + (gPlayerEntity.speed += gPlayerState.speed_modifier, gPlayerEntity.speed < 0x20)) { + gPlayerEntity.speed = 0x20; + } + if ((gPlayerEntity.direction & 4) == 0) { + sub_08079E90(gPlayerEntity.direction); + } + sub_0800857C(&gPlayerEntity); + sub_0807A5B8(gPlayerEntity.direction); +} + +void sub_08079E58(s32 speed, u32 direction) { + if ((gPlayerEntity.direction & 4) == 0) { + sub_08079E90(direction); + } + sub_080085B0(&gPlayerEntity); + sub_080027EA(&gPlayerEntity, (s16)speed, (u8)direction); + sub_0807A5B8(direction); +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079E90.inc", bool32 sub_08079E90(u32 a)) + +bool32 sub_08079F48(u32 param_1, u32 param_2) { + if (gUnk_0811C118[param_1 >> 2] == param_2) { + gPlayerEntity.direction = (gPlayerEntity.direction + 4) & 0x1f; + } else { + if (gUnk_0811C118[(param_1 >> 2) + 1] != param_2) { + return FALSE; + } + gPlayerEntity.direction = (gPlayerEntity.direction - 4) & 0x1f; + } + + return TRUE; +} + +bool32 sub_08079F8C(void) { + if ((gPlayerState.flags & 0x22189b75) != 0 || gPlayerState.field_0x3c[0] != 0 || gPlayerEntity.action == 3 || + gPlayerEntity.action == 0xb) { + return FALSE; + } else { + return TRUE; + } +} + +u32 sub_08079FC4(u32 param_1) { + return sub_08079FD4(&gPlayerEntity, param_1); +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_08079FD4.inc", u32 sub_08079FD4(Entity* a, u32 b)) + +void sub_0807A050(void) { + u32 palette; + if ((gPlayerState.hurtBlinkSpeed != 0) && ((gMessage.doTextBox & 0x7f) == 0)) { + gPlayerState.hurtBlinkSpeed--; + } + palette = sub_0807A094(0); + if (palette != gPlayerState.field_0x82[1]) { + gPlayerState.field_0x82[1] = palette; + ChangeObjPalette(&gPlayerEntity, palette); + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A094.inc", u32 sub_0807A094(u32 a)) + +void DeleteClones(void) { + gPlayerClones[0] = NULL; + gPlayerClones[1] = NULL; + gPlayerClones[2] = NULL; + gPlayerState.flags &= ~PL_CLONING; + if (((gPlayerEntity.action != 0x17) || (gPlayerState.chargeState.action != 4)) && + ((u8)(gPlayerState.chargeState.action - 4) < 2)) { + gPlayerState.chargeState.action = 1; + } +} + +bool32 HasSwordEquipped(void) { + if (ItemIsSword((u32)gSave.stats.itemButtons[0]) != 0) { + return TRUE; + } else { + return ItemIsSword((u32)gSave.stats.itemButtons[1]); + } +} + +void sub_0807A180(Entity* param_1, u32 param_2, u32 param_3, u32 param_4) { + GenericEntity stackEntity; + PositionRelative(param_1, &stackEntity.base, 0, -0x40000); + stackEntity.base.animationState = param_1->animationState; + sub_08003FDE(&stackEntity.base, param_2, param_3, param_4); +} + +void UpdateFloorType(void) { + gPlayerState.floor_type = GetSurfaceCalcType(&gPlayerEntity, 0, 0); + gUnk_0811C120[gPlayerState.floor_type](&gPlayerEntity); +} + +ASM_FUNC("asm/non_matching/playerUtils/GetSurfaceCalcType.inc", u32 GetSurfaceCalcType(Entity* a, u32 b, u32 c)) + +void EnablePlayerDraw(Entity* this) { + this->type2 = 0; + this->spriteSettings.draw = 3; + gPlayerState.flags &= ~PL_HIDDEN; +} + +bool32 sub_0807A2B8(void) { + if (sub_08008B22()) { + return TRUE; + } else { + if (((gPlayerState.jump_status & 200) == 0) && (gPlayerEntity.collisionLayer != 1)) { + CreateObjectWithParent(&gPlayerEntity, OBJECT_44, 0, 0); + } + return FALSE; + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A2F8.inc", void sub_0807A2F8()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A500.inc", void sub_0807A500()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A5B8.inc", void sub_0807A5B8(u32 a)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A750.inc", void sub_0807A750()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807A894.inc", u32 sub_0807A894(Entity* a)) + +void nullsub_505(void) { +} + +NONMATCH("asm/non_matching/playerUtils/sub_0807A8D8.inc", void sub_0807A8D8(Entity* this)) { + u32 tmp; + + if ((gPlayerState.flags & PL_MINISH) == 0) { + tmp = sub_080002EC(COORD_TO_TILE_OFFSET(this, 0, 1), gPlayerEntity.collisionLayer) & 0x20; + if (tmp != 0) { + sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 0, 1)); + } + tmp = sub_080002EC(COORD_TO_TILE_OFFSET(this, -2, 0), gPlayerEntity.collisionLayer) & 0x20; + if (tmp != 0) { + sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, -2, 0)); + } + tmp = sub_080002EC(COORD_TO_TILE_OFFSET(this, 2, 0), gPlayerEntity.collisionLayer) & 0x20; + if (tmp != 0) { + sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 2, 0)); + } + } + tmp = sub_080002EC(COORD_TO_TILE(this), gPlayerEntity.collisionLayer); + if ((tmp & 0x20) != 0) { + sub_0807AAF8(this, COORD_TO_TILE(this)); + } + if ((tmp & 2) != 0) { + sub_0807AABC(this); + } else { + if ((tmp & 4) != 0) { + sub_0807AA80(this); + } + } +} +END_NONMATCH + +void sub_0807AA80(Entity* this) { + if (((gPlayerState.flags & PL_HIDDEN) == 0) && (this->collisionLayer = 2, this->z.HALF.HI == 0)) { + this->spriteOrientation.flipY = 1; + this->spriteRendering.b3 = 1; + } +} + +void sub_0807AABC(Entity* this) { + if (((gPlayerState.flags & PL_HIDDEN) == 0) && (this->collisionLayer = 1, this->z.HALF.HI == 0)) { + this->spriteOrientation.flipY = 2; + this->spriteRendering.b3 = 2; + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807AAF8.inc", void sub_0807AAF8(Entity* a, u32 b)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807AB44.inc", void sub_0807AB44()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807AC54.inc", void sub_0807AC54()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807ACCC.inc", void sub_0807ACCC(Entity* a)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807ADB8.inc", void sub_0807ADB8()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807AE20.inc", void sub_0807AE20()) + +void UpdatePlayerSkills(void) { + gPlayerState.skills = SKILL_NONE; + if (GetInventoryValue(ITEM_SKILL_SPIN_ATTACK) == 1) { + gPlayerState.skills |= SKILL_SPIN_ATTACK; + } + if (GetInventoryValue(ITEM_SKILL_ROLL_ATTACK) == 1) { + gPlayerState.skills |= SKILL_ROLL_ATTACK; + } + if (GetInventoryValue(ITEM_SKILL_DASH_ATTACK) == 1) { + gPlayerState.skills |= SKILL_DASH_ATTACK; + } + if (GetInventoryValue(ITEM_SKILL_ROCK_BREAKER) == 1) { + gPlayerState.skills |= SKILL_ROCK_BREAKER; + } + if (GetInventoryValue(ITEM_SKILL_SWORD_BEAM) == 1) { + gPlayerState.skills |= SKILL_SWORD_BEAM; + } + if (GetInventoryValue(ITEM_SKILL_GREAT_SPIN) == 1) { + gPlayerState.skills |= SKILL_GREAT_SPIN; + } + if (GetInventoryValue(ITEM_SKILL_DOWN_THRUST) == 1) { + gPlayerState.skills |= SKILL_DOWN_THRUST; + } + if (GetInventoryValue(ITEM_SKILL_PERIL_BEAM) == 1) { + gPlayerState.skills |= SKILL_PERIL_BEAM; + } + if (GetInventoryValue(ITEM_FOURSWORD) == 1) { + gPlayerState.skills |= SKILL_FOURSWORD; + } + if (GetInventoryValue(ITEM_SKILL_FAST_SPIN) == 1) { + gPlayerState.skills |= SKILL_FAST_SPIN; + } + if (GetInventoryValue(ITEM_SKILL_FAST_SPLIT) == 1) { + gPlayerState.skills |= SKILL_FAST_SPLIT; + } + if (GetInventoryValue(ITEM_SKILL_LONG_SPIN) == 1) { + gPlayerState.skills |= SKILL_LONG_SPIN; + } +} + +void sub_0807AFE8(void) { + Entity* effect; + sub_08077B20(); + effect = CreateFx(&gPlayerEntity, FX_BIG_EXPLOSION2, 0); + if (effect != NULL) { + effect->y.HALF.HI++; + } + gPlayerState.queued_action = PLAYER_MINISH; +} + +/** Returns which kind of sword projectile is created. */ +u32 sub_0807B014(void) { + if (((gPlayerState.skills & SKILL_SWORD_BEAM) != 0) && gSave.stats.health == gSave.stats.maxHealth) { + return 0xf; + } else { + if ((gPlayerState.skills & SKILL_PERIL_BEAM) != SKILL_NONE && gSave.stats.health <= 8) { + return 0x16; + } else { + return 0; + } + } +} + +void sub_0807B068(void) { + if ((gPlayerState.dash_state | gPlayerState.field_0x3[1]) == 0) { + if (gPlayerState.swim_state != 0) { + if ((gPlayerState.swim_state & 0x80) != 0) { + gPlayerState.animation = 0xc1c; + } else { + gPlayerState.animation = 0xc0c; + } + } else { + if ((gPlayerState.field_0xd & 0x80) != 0) { + if (gPlayerState.animation != 0xc18) { + gPlayerState.animation = 0xc18; + } + } else { + if (gPlayerState.animation != 0xc04) { + gPlayerState.animation = 0xc04; + } + } + } + } +} + +void sub_0807B0C8(void) { + sub_0806FEBC(&gPlayerEntity, 0, 0); + sub_0806FEBC(&gPlayerEntity, 1, 0); + sub_0806FEBC(&gPlayerEntity, 2, &gPlayerEntity); + sub_0806FEBC(&gPlayerEntity, 3, 0); +} + +void PlayerWarp(Entity* player) { + gUnk_0811C27C[player->subAction](player); +} + +void sub_0807B114(PlayerEntity* this) { + super->subAction = 1; + this->unk_6c = gPlayerState.field_0x38; +} + +void sub_0807B128(PlayerEntity* this) { + gUnk_0811C284[this->unk_6c](this); +} + +void sub_0807B144(PlayerEntity* this) { + super->spriteSettings.draw = 1; + super->direction = super->animationState << 2; + super->speed = 0xa0; + super->zVelocity = 0x40000; + gPlayerState.jump_status = 0x81; + SetPlayerActionNormal(); +} + +void nullsub_506(void) { +} + +void sub_0807B178(PlayerEntity* this) { + super->spriteSettings.draw = 1; + super->direction = 0x10; + super->speed = 0; + super->zVelocity = 0x40000; + gPlayerState.jump_status = 0x81; + SetPlayerActionNormal(); +} + +void sub_0807B1A8(PlayerEntity* this) { + gUnk_0811C298[this->unk_6e](this); + if ((gRoomTransition.frameCount & 7) == 0) { + CreateSparkle(super); + } +} + +void sub_0807B1DC(PlayerEntity* this) { + this->unk_6e++; + super->actionDelay = 0x1e; +} + +void sub_0807B1EC(PlayerEntity* this) { + if (--super->actionDelay == 0) { + this->unk_6e++; + super->zVelocity = 0x10000; + gPlayerState.animation = 0x2c2; + } +} + +void sub_0807B21C(PlayerEntity* this) { + UpdateAnimationSingleFrame(super); + if (super->zVelocity < 0) { + GravityUpdate(super, 0x400); + } else { + GravityUpdate(super, 0x800); + } + if (super->zVelocity < -0x8000) { + super->actionDelay = 0x78; + super->field_0xf = 0; + this->unk_6e++; + this->unk_68 = super->z.WORD; + } +} + +void sub_0807B264(PlayerEntity* this) { + s32 tmp; + UpdateAnimationSingleFrame(super); + super->field_0xf += 2; + tmp = gSineTable[super->field_0xf]; + tmp >>= 7; + tmp <<= 0x10; + super->z.WORD = this->unk_68 + tmp; + if (--super->actionDelay == 0) { + super->actionDelay = 0x50; + super->zVelocity = 0x8000; + this->unk_6e++; +#ifndef EU + SoundReq(SFX_NEAR_PORTAL); +#endif + } +} + +void sub_0807B2B8(PlayerEntity* this) { + GravityUpdate(super, -0x2000); + UpdateAnimationSingleFrame(super); + if (super->actionDelay != 0 && --super->actionDelay == 0) { + DoExitTransition(&gUnk_0813AD88[this->unk_6d]); + } +} + +void sub_0807B2F8(PlayerEntity* this) { + if (this->unk_6e == 0) { + this->unk_6e += 1; + sub_0809D738(super); + } +} + +ASM_FUNC("asm/non_matching/playerUtils/SetTileType.inc", void SetTileType(u32 a, u32 b, u32 c)) + +bool32 sub_0807B434(u32 position, u32 layer) { + switch (GetTileType(position, layer)) { + case 0x36: + case 0x37: + return FALSE; + default: + return sub_080002C8(position, layer) != 0xd; + } +} + +bool32 sub_0807B464(u32 param_1, u32 param_2) { + return sub_080002C8(param_1, param_2) == 0x56; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B480.inc", void sub_0807B480()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B55C.inc", void sub_0807B55C()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B5B0.inc", void sub_0807B5B0()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B600.inc", void sub_0807B600()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B778.inc", void sub_0807B778(u32 a, u32 b)) + +void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { + if (param_1 == 53) { + sub_08000152(53, param_2, param_3); + sub_0807B778(param_2, param_3); + sub_0807B778(param_2 + 1, param_3); + sub_0807B778(param_2 - 1, param_3); + sub_0807B778(param_2 + 64, param_3); + sub_0807B778(param_2 - 64, param_3); + } else { + SetTileType(param_1, param_2, param_3); + } +} + +void sub_0807B820(u32 param_1) { + SetTileType(620, param_1 - 65, 1); + SetTileType(627, param_1 - 65, 2); + SetTileType(621, param_1 - 64, 1); + SetTileType(628, param_1 - 64, 2); + SetTileType(622, param_1 - 63, 1); + SetTileType(629, param_1 - 63, 2); + SetTileType(623, param_1 - 1, 1); + SetTileType(624, param_1, 1); + SetTileType(626, param_1 + 1, 1); +} + +void sub_0807B8A8(u32 param_1) { + SetTileType(636, param_1 - 65, 1); + SetTileType(643, param_1 - 65, 2); + SetTileType(637, param_1 - 64, 1); + SetTileType(644, param_1 - 64, 2); + SetTileType(638, param_1 - 63, 1); + SetTileType(645, param_1 - 63, 2); + SetTileType(639, param_1 - 1, 1); + SetTileType(640, param_1, 1); + SetTileType(642, param_1 + 1, 1); +} + +void sub_0807B930(int param_1) { + SetTileType(652, param_1 - 65, 1); + SetTileType(659, param_1 - 65, 2); + SetTileType(653, param_1 - 64, 1); + SetTileType(660, param_1 - 64, 2); + SetTileType(654, param_1 - 63, 1); + SetTileType(661, param_1 - 63, 2); + SetTileType(655, param_1 - 1, 1); + SetTileType(656, param_1, 1); + SetTileType(658, param_1 + 1, 1); +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807B9B8.inc", void sub_0807B9B8(s32 a, s32 b, s32 c)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BA8C.inc", void sub_0807BA8C(u32 a, u32 b)) + +void sub_0807BB68(s16* param_1, u32 param_2, u32 param_3) { + while (param_1[0] != -1) { + SetTileType((u16)param_1[0], param_2 + param_1[1], param_3); + param_1 += 2; + } +} + +void sub_0807BB98(s32 basePosition, u32 layer, u32 width, u32 height) { + u32 y; + u32 x; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + SetTile(0x4072, basePosition + x, layer); + } + basePosition += 0x40; + } +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BBE4.inc", void sub_0807BBE4()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BC84.inc", void sub_0807BC84()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BD14.inc", bool32 sub_0807BD14(Entity* a, u32 b)) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BDB8.inc", void sub_0807BDB8()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BEEC.inc", void sub_0807BEEC()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BF88.inc", void sub_0807BF88()) + +void sub_0807BFA8(void) { + gRoomControls.origin_x = (gArea.pCurrentRoomInfo)->map_x; + gRoomControls.origin_y = (gArea.pCurrentRoomInfo)->map_y; + gRoomControls.width = (gArea.pCurrentRoomInfo)->pixel_width; + gRoomControls.height = (gArea.pCurrentRoomInfo)->pixel_height; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807BFD0.inc", void sub_0807BFD0()) + +ASM_FUNC("asm/non_matching/playerUtils/LoadRoomGfx.inc", void LoadRoomGfx()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C460.inc", void sub_0807C460()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C4F8.inc", void sub_0807C4F8()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C5B0.inc", void sub_0807C5B0()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C5F4.inc", void sub_0807C5F4()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C69C.inc", void sub_0807C69C()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C740.inc", void sub_0807C740()) + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C810.inc", void sub_0807C810()) + +void sub_0807C860(void) { + gRoomTransition.field_0x2c[1] = 1; + MemCopy(&gMapDataBottom, &gMapDataBottom + 0x3000, 0x2000); + MemCopy(&gMapDataTop, &gMapDataTop + 0x3000, 0x2000); +} + +void sub_0807C898(void) { + gRoomTransition.field_0x2c[1] = 2; + LoadRoomGfx(); + gRoomTransition.field_0x2c[1] = 0; +} + +ASM_FUNC("asm/non_matching/playerUtils/sub_0807C8B0.inc", void sub_0807C8B0()) + +void LoadCompressedMapData(void* dest, u32 offset) { + void* src; + + if (offset != -1) { + src = &gMapData + (offset & 0x7fffffff); + if ((u32)dest >> 0x18 == 6) { + LZ77UnCompVram(src, (void*)dest); + } else { + LZ77UnCompWram(src, (void*)dest); + } + } +} + +void sub_0807C998(u32* a1) { + LoadCompressedMapData(gMetatilesBottom, a1[0]); + LoadCompressedMapData(gMetatilesBottom - 0x1000, a1[1]); + LoadCompressedMapData(gMetatilesTop, a1[2]); + LoadCompressedMapData(gMetatilesTop - 0x1000, a1[3]); +} + +void sub_0807C9D8(u32* a1) { + u32* v1; // r5@1 + + v1 = a1; + LoadCompressedMapData((u8*)0x6004000, *a1); + LoadCompressedMapData((u8*)0x6000000, v1[1]); + LoadCompressedMapData((u8*)0x6008000, v1[2]); + LoadCompressedMapData((u8*)gUnk_020176E0, v1[3]); + LoadPalettes(gUnk_020176E0, 2, 13); +} + +u32 FinalizeSave(void) { + if (gSave.invalid || gSave.initialized != 1) { + gSave.invalid = 0; + gSave.initialized = 1; + gSave.global_progress = 1; + gSave.stats.health = 24; + gSave.stats.maxHealth = 24; + gSave.saved_status.area_next = 0x22; + gSave.saved_status.room_next = 0x15; // links room + gSave.saved_status.start_anim = 0; + gSave.saved_status.spawn_type = PL_SPAWN_DEFAULT; + gSave.saved_status.layer = 1; + gSave.saved_status.start_pos_x = 0x90; + gSave.saved_status.start_pos_y = 0x38; + } + if (gSave.name[0] == 0) { + MemCopy(gUnk_0811E470, &gSave.name, FILENAME_LENGTH - 1); + } +#ifdef DEMO_USA + { + const u8* tmp; + MemCopy(demoPointers[gSaveHeader->saveFileId], &gSave, 0x4B4); + if (gSaveHeader->language == 0) { + gSave.name[0] = 0x97; + gSave.name[1] = 0x7F; + gSave.name[2] = 0xDD; + gSave.name[3] = 0; + } + ModHealth(0xA0); + ModRupees(-9999); + tmp = demoUnknown1 + gUnk_02000010.field_0x7 * 3; + gSave.demo_timer = tmp[gSaveHeader->saveFileId] * 3600; + } +#endif + return 1; +} + +u32 GetInventoryValue(u32 item) { + u32 tmp = item / 4; + return gUnk_02002B32[tmp] >> ((item & 3) << 1) & 3; +} + +ASM_FUNC("asm/non_matching/playerUtils/SetInventoryValue.inc", void SetInventoryValue(u32 a, u32 b)) + +NONMATCH("asm/non_matching/playerUtils/sub_0807CAC8.inc", void sub_0807CAC8(u32 param_1)) { + gSave.unk46C[gArea.dungeon_idx + 0x10] |= (1 << param_1); +} +END_NONMATCH + +NONMATCH("asm/non_matching/playerUtils/sub_0807CAEC.inc", u32 sub_0807CAEC(u32 param_1)) { + return gSave.unk46C[gArea.dungeon_idx + 0x10] >> param_1 & 1; +} +END_NONMATCH + +u32 CheckLocalFlagByBank(u32 bank, u32 flag) { + return ReadBit(gSave.flags, bank + flag); +} + +NONMATCH("asm/non_matching/playerUtils/sub_0807CB24.inc", bool32 sub_0807CB24(s32 param_1, u32 param_2)) { + bool32 result = TRUE; + switch (param_1) { + case 0: + default: + result = FALSE; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 0xb: + case 0xc: + case 0xd: + result = CheckLocalFlagByBank(gLocalFlagBanks[param_1], param_2); + break; + case 0xf: + if (GetInventoryValue(param_2) == 0) { + result = FALSE; + } else { + result = TRUE; + } + break; + case 0x10: + if (GetInventoryValue(param_2) == 1) { + result = TRUE; + } else { + result = FALSE; + } + break; + case 0x11: + if (GetInventoryValue(param_2) == 2) { + result = TRUE; + } else { + result = FALSE; + } + break; + } + return result; +} +END_NONMATCH diff --git a/src/respawnPlayer.c b/src/respawnPlayer.c deleted file mode 100644 index 08b6f330..00000000 --- a/src/respawnPlayer.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "player.h" -#include "functions.h" - -void ResetPlayer() { - u32 index = 0; - ItemBehavior* ptr = gUnk_03000B80; - do { - sub_08077E78(ptr, index); - ptr++; - index++; - } while (index <= 2); - - gPlayerState.field_0x3c[1] = 0; - gPlayerState.field_0x1c = 0; - gPlayerState.field_0x1f[2] = 0; - gPlayerState.field_0x0[1] = 0; - gPlayerState.field_0xe = 0; - gPlayerState.dash_state = 0; - gPlayerState.sword_state = 0; - gPlayerState.field_0x3[0] = 0; - gPlayerState.heldObject = 0; - gPlayerState.flags &= ~(PL_ROLLING | PL_SWORD_THRUST); - - gPlayerEntity.field_0x70.WORD = 0; - - if ((gPlayerState.jump_status & 0xc0) == 0) { - gPlayerState.jump_status = 0; - } - - switch (gPlayerState.framestate) { - case 2: - case 3: - case 4: { - gPlayerState.framestate = PL_STATE_IDLE; - break; - } - } -} diff --git a/src/roomInit.c b/src/roomInit.c index a3b3d970..daadea73 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -169,7 +169,7 @@ u32 sub_unk3_CrenelMinishPaths_MelarisMine(void) { void sub_StateChange_CrenelMinishPaths_MelarisMine(void) { sub_080580B0(0x22); // white sword - if (GetInventoryValue(0x2)) + if (GetInventoryValue(ITEM_GREEN_SWORD)) SetGlobalFlag(WHITE_SWORD_END); } @@ -341,8 +341,7 @@ extern EntityData gUnk_080D6558; extern EntityData gUnk_080D6618; void sub_StateChange_HouseInteriors1_Library2F(void) { - // flippers - if (GetInventoryValue(0x46) == 0) { + if (GetInventoryValue(ITEM_FLIPPERS) == 0) { LoadRoomEntityList(&gUnk_080D6578); if (CheckLocalFlag(MIZUKAKI_BOOK_ALLBACK) == 0) { LoadRoomEntityList(&gUnk_080D6638); @@ -366,8 +365,7 @@ void sub_StateChange_HouseInteriors1_Library1F(void) { if (gSave.global_progress > 4) { LoadRoomEntityList(&gUnk_080D6714); } - // flippers - if (!GetInventoryValue(0x46) && CheckGlobalFlag(MIZUKAKI_START) && CheckLocalFlag(MIZUKAKI_KOBITO)) { + if (!GetInventoryValue(ITEM_FLIPPERS) && CheckGlobalFlag(MIZUKAKI_START) && CheckLocalFlag(MIZUKAKI_KOBITO)) { LoadRoomEntityList(&gUnk_additional_9_HouseInteriors1_Library1F); } else { LoadRoomEntityList(&gUnk_additional_8_HouseInteriors1_Library1F); @@ -807,8 +805,7 @@ u32 sub_unk3_GreatFairies_Exit(void) { extern EntityData gUnk_080D7D34; void sub_StateChange_GreatFairies_Exit(void) { - // four sword - if (GetInventoryValue(0x6)) { + if (GetInventoryValue(ITEM_FOURSWORD)) { SetTile(0x4072, 0x14d, 1); SetTile(0x4072, 0x10c, 1); SetTile(0x4090, 0x14c, 1); @@ -942,9 +939,9 @@ extern EntityData gUnk_080D8A34; extern EntityData gUnk_080D8A04; extern EntityData gUnk_080D89E4; -extern u32 gUnk_080D8BBC; -extern u32 gUnk_080D8BFA; -extern u32 gUnk_080D8C68; +extern u16 gUnk_080D8BBC; +extern u16 gUnk_080D8BFA; +extern u16 gUnk_080D8C68; void sub_StateChange_GoronCave_Main(void) { if (!CheckLocalFlag(GORON_DOUKUTU_APPEAR)) @@ -974,7 +971,7 @@ void sub_StateChange_GoronCave_Main(void) { } typedef struct { - u32* a; + u16* a; u16 x, y; u16 entCnt; u16 shakeTime, shakeMag, sfx; @@ -990,7 +987,7 @@ void sub_0804BF38(Entity* this, ScriptExecutionContext* context) { u32 xOff; struct_080D8E54* ptr; u32 xtile, ytile; - u32* a; + u16* a; iVar2 = context->intVariable; ptr = &gUnk_080D8E50[iVar2]; @@ -4822,7 +4819,7 @@ void sub_StateChange_HouseInteriors2_Julietta(void) { LoadRoomEntityList(&gUnk_080F2570); break; } - if (!GetInventoryValue(0x39)) { + if (!GetInventoryValue(ITEM_QST_BOOK1)) { LoadRoomEntityList(&gUnk_080F25C0); } } else { @@ -5412,7 +5409,7 @@ extern EntityData gUnk_080F5788; void sub_StateChange_HouseInteriors3_StockwellShop(void) { LoadRoomEntityList(&gUnk_080F5758); - if (!GetInventoryValue(0x36) && CheckLocalFlagByBank(0x200, 0x8f)) { + if (!GetInventoryValue(ITEM_QST_DOGFOOD) && CheckLocalFlagByBank(0x200, 0x8f)) { LoadRoomEntityList(&gUnk_080F57E8); } if (!CheckLocalFlag(0x55)) { @@ -5459,7 +5456,7 @@ extern EntityData gUnk_080F5B3C; void sub_StateChange_HouseInteriors3_RemShoeShop(void) { #ifndef EU - if (GetInventoryValue(0x38) == 1) { + if (GetInventoryValue(ITEM_QST_MUSHROOM) == 1) { LoadRoomEntityList(&gUnk_080F5B3C); } #endif @@ -5828,14 +5825,14 @@ extern u32 gUnk_080F7C80; extern void sub_0804F4E4(void); u32 sub_unk3_HyruleField_OutsideCastle(void) { - if (CheckGlobalFlag(TABIDACHI) && !GetInventoryValue(0x11)) { + if (CheckGlobalFlag(TABIDACHI) && !GetInventoryValue(ITEM_GUST_JAR)) { gRoomVars.field_0x6c[0] = &gUnk_080F7CD0; gRoomVars.field_0x6c[7] = sub_0804F5E8; } #if defined(JP) || defined(EU) || defined(DEMO_JP) - if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8a)) { + if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(ITEM_RED_SWORD) && !CheckLocalFlag(0x8a)) { #else - if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8c)) { + if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(ITEM_RED_SWORD) && !CheckLocalFlag(0x8c)) { #endif gRoomVars.field_0x6c[0] = &gUnk_080F7C80; gRoomVars.field_0x6c[7] = sub_0804F4E4; @@ -6087,7 +6084,7 @@ void sub_StateChange_Caves_Boomerang(void) { } else { LoadRoomEntityList(&gUnk_080F85F8); } - if (!GetInventoryValue(0xc)) { + if (!GetInventoryValue(ITEM_MAGIC_BOOMERANG)) { ClearLocalFlag(8); } } @@ -6682,7 +6679,7 @@ void sub_StateChange_MtCrenel_CaveOfFlamesEntrance(void) { if ((gSave.windcrests & 0x1000000) == 0) { LoadRoomEntityList(&gUnk_080FB004); } - if (GetInventoryValue(0x2)) { + if (GetInventoryValue(ITEM_GREEN_SWORD)) { SetGlobalFlag(WHITE_SWORD_END); } } diff --git a/src/script.c b/src/script.c index d633841e..03701249 100644 --- a/src/script.c +++ b/src/script.c @@ -3,12 +3,11 @@ #include "screen.h" #include "area.h" #include "game.h" - #include "object.h" #include "npc.h" #include "kinstone.h" - #include "functions.h" +#include "item.h" void InitScriptForEntity(Entity*, ScriptExecutionContext*, u16*); void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script); @@ -146,7 +145,7 @@ void ScriptCommand_IncreaseMaxHealth(Entity* entity, ScriptExecutionContext* con void ScriptCommand_GivePlayerItem(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_GiveKinstone(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_GetInventoryValue(Entity* entity, ScriptExecutionContext* context); -void ScriptCommand_0807F078(Entity* entity, ScriptExecutionContext* context); +void ScriptCommand_SetInventoryValue(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_0807F088(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_CameraTargetEntity(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_CameraTargetPlayer(Entity* entity, ScriptExecutionContext* context); @@ -596,7 +595,7 @@ void ExecuteScript(Entity* entity, ScriptExecutionContext* context) { ScriptCommand_GivePlayerItem, ScriptCommand_GiveKinstone, ScriptCommand_GetInventoryValue, - ScriptCommand_0807F078, + ScriptCommand_SetInventoryValue, ScriptCommand_0807F088, ScriptCommand_CameraTargetEntity, ScriptCommand_CameraTargetPlayer, @@ -1502,8 +1501,8 @@ void ScriptCommand_GetInventoryValue(Entity* entity, ScriptExecutionContext* con context->condition = context->intVariable != 0; } -void ScriptCommand_0807F078(Entity* entity, ScriptExecutionContext* context) { - sub_0807CAA0(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); +void ScriptCommand_SetInventoryValue(Entity* entity, ScriptExecutionContext* context) { + SetInventoryValue(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); } void ScriptCommand_0807F088(Entity* entity, ScriptExecutionContext* context) { @@ -1615,21 +1614,21 @@ void EquipItem(Entity* entity, ScriptExecutionContext* context) { slot = context->intVariable >> 0x10; item &= 0xFFFF; switch (item) { - case 1: - case 2: - case 3: - case 4: - case 6: + case ITEM_SMITH_SWORD: + case ITEM_GREEN_SWORD: + case ITEM_RED_SWORD: + case ITEM_BLUE_SWORD: + case ITEM_FOURSWORD: // Pick greatest sword unlocked - item = 1; - if (GetInventoryValue(2)) - item = 2; - if (GetInventoryValue(3)) - item = 3; - if (GetInventoryValue(4)) - item = 4; - if (GetInventoryValue(6)) - item = 6; + item = ITEM_SMITH_SWORD; + if (GetInventoryValue(ITEM_GREEN_SWORD)) + item = ITEM_GREEN_SWORD; + if (GetInventoryValue(ITEM_RED_SWORD)) + item = ITEM_RED_SWORD; + if (GetInventoryValue(ITEM_BLUE_SWORD)) + item = ITEM_BLUE_SWORD; + if (GetInventoryValue(ITEM_FOURSWORD)) + item = ITEM_FOURSWORD; break; } ForceEquipItem(item, slot); diff --git a/src/sub_0807B820.c b/src/sub_0807B820.c deleted file mode 100644 index 6d3f516b..00000000 --- a/src/sub_0807B820.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "asm.h" -#include "room.h" - -extern void sub_0807B778(u32, u32); - -void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { - if (param_1 == 53) { - sub_08000152(53, param_2, param_3); - sub_0807B778(param_2, param_3); - sub_0807B778(param_2 + 1, param_3); - sub_0807B778(param_2 - 1, param_3); - sub_0807B778(param_2 + 64, param_3); - sub_0807B778(param_2 - 64, param_3); - } else { - SetTileType(param_1, param_2, param_3); - } -} - -void sub_0807B820(u32 param_1) { - SetTileType(620, param_1 - 65, 1); - SetTileType(627, param_1 - 65, 2); - SetTileType(621, param_1 - 64, 1); - SetTileType(628, param_1 - 64, 2); - SetTileType(622, param_1 - 63, 1); - SetTileType(629, param_1 - 63, 2); - SetTileType(623, param_1 - 1, 1); - SetTileType(624, param_1, 1); - SetTileType(626, param_1 + 1, 1); -} - -void sub_0807B8A8(u32 param_1) { - SetTileType(636, param_1 - 65, 1); - SetTileType(643, param_1 - 65, 2); - SetTileType(637, param_1 - 64, 1); - SetTileType(644, param_1 - 64, 2); - SetTileType(638, param_1 - 63, 1); - SetTileType(645, param_1 - 63, 2); - SetTileType(639, param_1 - 1, 1); - SetTileType(640, param_1, 1); - SetTileType(642, param_1 + 1, 1); -} - -void sub_0807B930(int param_1) { - SetTileType(652, param_1 - 65, 1); - SetTileType(659, param_1 - 65, 2); - SetTileType(653, param_1 - 64, 1); - SetTileType(660, param_1 - 64, 2); - SetTileType(654, param_1 - 63, 1); - SetTileType(661, param_1 - 63, 2); - SetTileType(655, param_1 - 1, 1); - SetTileType(656, param_1, 1); - SetTileType(658, param_1 + 1, 1); -} diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c deleted file mode 100644 index 675fa831..00000000 --- a/src/sub_0807CA18.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "global.h" -#include "save.h" -#include "common.h" - -extern u16 gMetatilesBottom[]; -extern u16 gMetatilesTop[]; -extern u8 gMapData; - -extern const u8 gUnk_020176E0[]; - -void sub_0807C960(void* dest, u32 offset) { - void* src; - - if (offset != -1) { - src = &gMapData + (offset & 0x7fffffff); - if ((u32)dest >> 0x18 == 6) { - LZ77UnCompVram(src, (void*)dest); - } else { - LZ77UnCompWram(src, (void*)dest); - } - } -} - -void sub_0807C998(u32* a1) { - sub_0807C960(gMetatilesBottom, a1[0]); - sub_0807C960(gMetatilesBottom - 0x1000, a1[1]); - sub_0807C960(gMetatilesTop, a1[2]); - sub_0807C960(gMetatilesTop - 0x1000, a1[3]); -} - -void sub_0807C9D8(u32* a1) { - u32* v1; // r5@1 - - v1 = a1; - sub_0807C960((u8*)0x6004000, *a1); - sub_0807C960((u8*)0x6000000, v1[1]); - sub_0807C960((u8*)0x6008000, v1[2]); - sub_0807C960((u8*)gUnk_020176E0, v1[3]); - LoadPalettes(gUnk_020176E0, 2, 13); -} - -u32 FinalizeSave(void) { - if (gSave.invalid || gSave.initialized != 1) { - gSave.invalid = 0; - gSave.initialized = 1; - gSave.global_progress = 1; - gSave.stats.health = 24; - gSave.stats.maxHealth = 24; - gSave.saved_status.area_next = 0x22; - gSave.saved_status.room_next = 0x15; // links room - gSave.saved_status.start_anim = 0; - gSave.saved_status.spawn_type = PL_SPAWN_DEFAULT; - gSave.saved_status.layer = 1; - gSave.saved_status.start_pos_x = 0x90; - gSave.saved_status.start_pos_y = 0x38; - } - if (gSave.name[0] == '\0') { - MemCopy(gUnk_0811E470, &gSave.name, FILENAME_LENGTH - 1); - } -#ifdef DEMO_USA - { - const u8* tmp; - MemCopy(demoPointers[gSaveHeader->saveFileId], &gSave, 0x4B4); - if (gSaveHeader->language == 0) { - gSave.name[0] = 0x97; - gSave.name[1] = 0x7F; - gSave.name[2] = 0xDD; - gSave.name[3] = 0; - } - ModHealth(0xA0); - ModRupees(-9999); - tmp = demoUnknown1 + gUnk_02000010.field_0x7 * 3; - gSave.demo_timer = tmp[gSaveHeader->saveFileId] * 3600; - } -#endif - return 1; -} From 7bedfbf033583ce38a35999d448bf42e2e372c82 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:03:35 +0100 Subject: [PATCH 2/5] Decompile subtask --- asm/code_08054C04.s | 2368 ------------------------------------------- linker.ld | 2 +- src/subtask.c | 864 ++++++++++++++++ 3 files changed, 865 insertions(+), 2369 deletions(-) delete mode 100644 asm/code_08054C04.s create mode 100644 src/subtask.c diff --git a/asm/code_08054C04.s b/asm/code_08054C04.s deleted file mode 100644 index e8a02905..00000000 --- a/asm/code_08054C04.s +++ /dev/null @@ -1,2368 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08054C04 -sub_08054C04: @ 0x08054C04 - push {lr} - ldr r1, _08054C18 @ =gUnk_080FEEB8 - ldr r0, _08054C1C @ =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 -_08054C18: .4byte gUnk_080FEEB8 -_08054C1C: .4byte gMenu - - thumb_func_start sub_08054C20 -sub_08054C20: @ 0x08054C20 - push {r4, lr} - ldr r4, _08054C50 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #4] - movs r1, #0 - bl sub_0801876C - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08054C54 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08054C50: .4byte gMenu -_08054C54: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08054C58 -sub_08054C58: @ 0x08054C58 - push {lr} - ldr r0, _08054C80 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08054C7C - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08054C7C - movs r0, #7 - movs r1, #0x10 - bl SetFade - ldr r1, _08054C84 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08054C7C: - pop {pc} - .align 2, 0 -_08054C80: .4byte gFadeControl -_08054C84: .4byte gMenu - - thumb_func_start sub_08054C88 -sub_08054C88: @ 0x08054C88 - push {r4, lr} - ldr r0, _08054CB8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08054CB4 - ldr r4, _08054CBC @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - bl sub_08054974 - movs r0, #6 - movs r1, #0x10 - bl SetFade - movs r0, #0x73 - bl SoundReq - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_08054CB4: - pop {r4, pc} - .align 2, 0 -_08054CB8: .4byte gFadeControl -_08054CBC: .4byte gMenu - - thumb_func_start sub_08054CC0 -sub_08054CC0: @ 0x08054CC0 - push {lr} - ldr r0, _08054CE0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08054CDE - ldr r1, _08054CE4 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08054CDE - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08054CDE: - pop {pc} - .align 2, 0 -_08054CE0: .4byte gFadeControl -_08054CE4: .4byte gMenu - - thumb_func_start sub_08054CE8 -sub_08054CE8: @ 0x08054CE8 - push {lr} - ldr r1, _08054CFC @ =gUnk_080FEEC8 - ldr r0, _08054D00 @ =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 -_08054CFC: .4byte gUnk_080FEEC8 -_08054D00: .4byte gMenu - - thumb_func_start sub_08054D04 -sub_08054D04: @ 0x08054D04 - push {r4, lr} - ldr r4, _08054D34 @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08054D38 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08054D34: .4byte gMenu -_08054D38: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08054D3C -sub_08054D3C: @ 0x08054D3C - push {r4, lr} - ldr r0, _08054D6C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08054D6A - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08054D6A - ldr r4, _08054D70 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r4, #4] - bl sub_080553E0 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_08054D6A: - pop {r4, pc} - .align 2, 0 -_08054D6C: .4byte gFadeControl -_08054D70: .4byte gMenu - - thumb_func_start sub_08054D74 -sub_08054D74: @ 0x08054D74 - push {lr} - ldr r1, _08054D8C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08054D8A - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08054D8A: - pop {pc} - .align 2, 0 -_08054D8C: .4byte gMenu - - thumb_func_start sub_08054D90 -sub_08054D90: @ 0x08054D90 - push {lr} - ldr r1, _08054DA4 @ =gUnk_080FEF34 - ldr r0, _08054DA8 @ =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 -_08054DA4: .4byte gUnk_080FEF34 -_08054DA8: .4byte gMenu - - thumb_func_start sub_08054DAC -sub_08054DAC: @ 0x08054DAC - push {r4, lr} - ldr r4, _08054DF0 @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _08054DF4 @ =gUnk_080FEED4 - bl LoadRoomEntityList - movs r0, #2 - bl sub_0805B4D0 - movs r0, #0 - bl sub_0806D0B0 - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08054DF8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08054DF0: .4byte gMenu -_08054DF4: .4byte gUnk_080FEED4 -_08054DF8: .4byte gUpdateVisibleTiles - - thumb_func_start nullsub_484 -nullsub_484: @ 0x08054DFC - bx lr - .align 2, 0 - - thumb_func_start sub_08054E00 -sub_08054E00: @ 0x08054E00 - push {lr} - ldr r1, _08054E14 @ =gUnk_080FEF3C - ldr r0, _08054E18 @ =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 -_08054E14: .4byte gUnk_080FEF3C -_08054E18: .4byte gMenu - - thumb_func_start sub_08054E1C -sub_08054E1C: @ 0x08054E1C - push {r4, r5, lr} - ldr r5, _08054E54 @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #2] - ldrb r1, [r4, #3] - bl sub_0804B0B0 - ldrb r0, [r4, #2] - ldrb r1, [r4, #3] - bl sub_0804B0E8 - ldrb r0, [r5, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - ldr r1, _08054E58 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, r5, pc} - .align 2, 0 -_08054E54: .4byte gMenu -_08054E58: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08054E5C -sub_08054E5C: @ 0x08054E5C - push {r4, lr} - ldr r0, _08054E94 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08054E92 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08054E92 - ldr r4, _08054E98 @ =gMenu - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0xb4 - strh r0, [r4, #8] - movs r0, #6 - movs r1, #0x10 - bl SetFade - ldrb r0, [r4, #4] - bl sub_080553E0 - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C -_08054E92: - pop {r4, pc} - .align 2, 0 -_08054E94: .4byte gFadeControl -_08054E98: .4byte gMenu - - thumb_func_start sub_08054E9C -sub_08054E9C: @ 0x08054E9C - push {lr} - ldr r1, _08054EB4 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08054EB2 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08054EB2: - pop {pc} - .align 2, 0 -_08054EB4: .4byte gMenu - - thumb_func_start sub_08054EB8 -sub_08054EB8: @ 0x08054EB8 - push {r4, lr} - adds r4, r0, #0 - bl GetEmptyManager - adds r3, r0, #0 - cmp r3, #0 - beq _08054EF6 - movs r0, #9 - strb r0, [r3, #8] - movs r0, #0x24 - strb r0, [r3, #9] - ldr r2, _08054EF8 @ =gRoomControls - ldrh r0, [r4, #0x2e] - ldrh r1, [r2, #6] - subs r0, r0, r1 - strh r0, [r3, #0x38] - ldrh r0, [r4, #0x32] - ldrh r1, [r2, #8] - subs r0, r0, r1 - subs r0, #0x10 - strh r0, [r3, #0x3a] - adds r1, r3, #0 - adds r1, #0x35 - movs r0, #1 - strb r0, [r1] -.ifdef JP - movs r0, #0x77 -.else -.ifdef EU - movs r0, #0x77 -.else -.ifdef DEMO_JP - movs r0, #0x77 @ TODO deduplicate -.else - movs r0, #0x79 -.endif -.endif -.endif - strh r0, [r3, #0x3e] - adds r0, r3, #0 - movs r1, #6 - bl AppendEntityToList -_08054EF6: - pop {r4, pc} - .align 2, 0 -_08054EF8: .4byte gRoomControls - - thumb_func_start sub_08054EFC -sub_08054EFC: @ 0x08054EFC - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _08054F5C @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - subs r1, #0x40 - ldr r0, _08054F60 @ =0x00004074 - movs r2, #1 - bl SetTile - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - movs r1, #0x35 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08054F54 - ldrh r0, [r1, #0x32] - subs r0, #0x10 - strh r0, [r1, #0x32] - adds r0, r4, #0 - bl SortEntityBelow -_08054F54: - movs r0, #0xfd - bl SoundReq - pop {r4, r5, pc} - .align 2, 0 -_08054F5C: .4byte gRoomControls -_08054F60: .4byte 0x00004074 - - thumb_func_start sub_08054F64 -sub_08054F64: @ 0x08054F64 - push {lr} - ldrb r0, [r0, #0xb] - ldr r3, _08054F7C @ =gActiveScriptInfo - ldr r2, [r3] - adds r1, r2, #0 - ands r1, r0 - cmp r1, r0 - beq _08054F80 - movs r0, #0 - strb r0, [r3, #6] - b _08054F8C - .align 2, 0 -_08054F7C: .4byte gActiveScriptInfo -_08054F80: - bics r2, r1 - str r2, [r3] - ldrb r1, [r3, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r3, #7] -_08054F8C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08054F90 -sub_08054F90: @ 0x08054F90 - push {lr} - ldr r1, _08054FA4 @ =gUnk_080FF120 - ldr r0, _08054FA8 @ =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 -_08054FA4: .4byte gUnk_080FF120 -_08054FA8: .4byte gMenu - - thumb_func_start sub_08054FAC -sub_08054FAC: @ 0x08054FAC - push {r4, r5, r6, lr} - ldr r6, _08055008 @ =gMenu - ldr r5, [r6, #0xc] - ldr r1, _0805500C @ =gUnk_080FF108 - ldrb r0, [r5, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl LoadRoomEntityList - ldrb r0, [r5, #1] - movs r1, #0 - cmp r0, #0 - beq _08054FCA - movs r1, #3 -_08054FCA: - ldrb r0, [r6, #4] - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r6, #6] - adds r0, #1 - movs r4, #0 - strb r0, [r6, #6] - ldr r1, _08055010 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - strh r4, [r6, #0xa] - movs r0, #0x80 - lsls r0, r0, #3 - movs r1, #0x77 - bl CheckLocalFlagByBank - cmp r0, #0 - beq _08055004 - ldrb r0, [r5, #2] - cmp r0, #0x2f - bne _08055004 - movs r0, #1 - strh r0, [r6, #0xa] -_08055004: - pop {r4, r5, r6, pc} - .align 2, 0 -_08055008: .4byte gMenu -_0805500C: .4byte gUnk_080FF108 -_08055010: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055014 -sub_08055014: @ 0x08055014 - push {lr} - ldr r1, _08055030 @ =gMenu - ldrh r0, [r1, #0xa] - cmp r0, #0 - beq _0805502C - movs r0, #0 - strh r0, [r1, #0xa] - ldr r1, _08055034 @ =0x00000407 - movs r0, #0x74 - movs r2, #1 - bl SetTileType -_0805502C: - pop {pc} - .align 2, 0 -_08055030: .4byte gMenu -_08055034: .4byte 0x00000407 - - thumb_func_start sub_08055038 -sub_08055038: @ 0x08055038 - push {lr} - ldr r1, _0805504C @ =gUnk_080FF148 - ldr r0, _08055050 @ =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 -_0805504C: .4byte gUnk_080FF148 -_08055050: .4byte gMenu - - thumb_func_start sub_08055054 -sub_08055054: @ 0x08055054 - push {r4, lr} - ldr r0, _08055080 @ =gUnk_080FF128 - bl LoadRoomEntityList - ldr r4, _08055084 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #2 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055088 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055080: .4byte gUnk_080FF128 -_08055084: .4byte gMenu -_08055088: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0805508C -sub_0805508C: @ 0x0805508C - bx lr - .align 2, 0 - - thumb_func_start sub_08055090 -sub_08055090: @ 0x08055090 - bx lr - .align 2, 0 - - thumb_func_start sub_08055094 -sub_08055094: @ 0x08055094 - push {lr} - ldr r1, _080550A8 @ =gUnk_080FF174 - ldr r0, _080550AC @ =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 -_080550A8: .4byte gUnk_080FF174 -_080550AC: .4byte gMenu - - thumb_func_start sub_080550B0 -sub_080550B0: @ 0x080550B0 - push {r4, lr} - ldr r4, _080550E8 @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _080550EC @ =gUnk_080FF154 - bl LoadRoomEntityList - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _080550F0 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080550E8: .4byte gMenu -_080550EC: .4byte gUnk_080FF154 -_080550F0: .4byte gUpdateVisibleTiles - - thumb_func_start nullsub_487 -nullsub_487: @ 0x080550F4 - bx lr - .align 2, 0 - - thumb_func_start sub_080550F8 -sub_080550F8: @ 0x080550F8 - push {lr} - ldr r1, _0805510C @ =gUnk_080FF1CC - ldr r0, _08055110 @ =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 -_0805510C: .4byte gUnk_080FF1CC -_08055110: .4byte gMenu - - thumb_func_start sub_08055114 -sub_08055114: @ 0x08055114 - push {r4, lr} - ldr r0, _08055150 @ =gUnk_080FF17C - bl LoadRoomEntityList - ldr r0, _08055154 @ =gSave - ldrb r0, [r0, #8] - cmp r0, #9 - beq _0805512A - ldr r0, _08055158 @ =0x00000DB4 - bl sub_08018C58 -_0805512A: - ldr r4, _0805515C @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055160 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055150: .4byte gUnk_080FF17C -_08055154: .4byte gSave -_08055158: .4byte 0x00000DB4 -_0805515C: .4byte gMenu -_08055160: .4byte gUpdateVisibleTiles - - thumb_func_start nullsub_488 -nullsub_488: @ 0x08055164 - bx lr - .align 2, 0 - - thumb_func_start sub_08055168 -sub_08055168: @ 0x08055168 - push {lr} - ldr r1, _0805517C @ =gUnk_080FF1F4 - ldr r0, _08055180 @ =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 -_0805517C: .4byte gUnk_080FF1F4 -_08055180: .4byte gMenu - - thumb_func_start sub_08055184 -sub_08055184: @ 0x08055184 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - ldr r5, _0805520C @ =gMenu - ldr r0, [r5, #0xc] - ldrb r1, [r0, #1] - movs r0, #0xf - ands r0, r1 - lsls r4, r0, #1 - adds r4, r4, r0 - lsls r4, r4, #1 - ldr r0, _08055210 @ =gUnk_080FF1D4 - adds r4, r4, r0 - movs r1, #0 - ldrsh r0, [r4, r1] - bl LoadGfxGroup - ldr r2, _08055214 @ =gScreen - ldrh r0, [r4, #2] - movs r6, #0 - movs r3, #0 - mov r8, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #4] - strh r0, [r2, #0x30] - ldr r0, _08055218 @ =0x00001E05 - strh r0, [r2, #0x2c] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _0805521C @ =0x00003648 - strh r0, [r1] - adds r1, #2 - movs r0, #0x10 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldrb r0, [r5, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r5, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - strb r6, [r5, #7] - movs r0, #0x3c - strh r0, [r5, #8] - mov r0, r8 - strh r0, [r5, #0xa] - ldr r1, _08055220 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_0805520C: .4byte gMenu -_08055210: .4byte gUnk_080FF1D4 -_08055214: .4byte gScreen -_08055218: .4byte 0x00001E05 -_0805521C: .4byte 0x00003648 -_08055220: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055224 -sub_08055224: @ 0x08055224 - push {lr} - ldr r0, _08055244 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055240 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055240 - ldr r1, _08055248 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08055240: - pop {pc} - .align 2, 0 -_08055244: .4byte gFadeControl -_08055248: .4byte gMenu - - thumb_func_start sub_0805524C -sub_0805524C: @ 0x0805524C - push {r4, lr} - ldr r3, _08055270 @ =gMenu - ldrb r0, [r3, #7] - cmp r0, #0 - bne _08055274 - ldrh r0, [r3, #8] - subs r0, #1 - strh r0, [r3, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080552D6 - ldrb r0, [r3, #7] - adds r0, #1 - strb r0, [r3, #7] - movs r0, #0xf6 - bl SoundReq - b _080552D6 - .align 2, 0 -_08055270: .4byte gMenu -_08055274: - ldr r0, _080552A4 @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080552D6 - ldr r4, _080552A8 @ =gUnk_080FF204 - ldrh r2, [r3, #0xa] - lsls r0, r2, #1 - adds r0, r0, r4 - ldrh r1, [r0] - ldr r0, _080552AC @ =0x0000FFFF - cmp r1, r0 - beq _080552B4 - ldr r1, _080552B0 @ =gScreen - adds r0, r2, #1 - strh r0, [r3, #0xa] - lsls r0, r2, #1 - adds r0, r0, r4 - ldrh r0, [r0] - adds r1, #0x68 - strh r0, [r1] - b _080552D6 - .align 2, 0 -_080552A4: .4byte gRoomTransition -_080552A8: .4byte gUnk_080FF204 -_080552AC: .4byte 0x0000FFFF -_080552B0: .4byte gScreen -_080552B4: - ldr r1, _080552D8 @ =gScreen - ldrh r2, [r1] - ldr r0, _080552DC @ =0x0000F7FF - ands r0, r2 - strh r0, [r1] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - movs r0, #0x78 - strh r0, [r3, #8] - ldrb r0, [r3, #6] - adds r0, #1 - strb r0, [r3, #6] -.ifndef EU - movs r0, #0x73 - bl SoundReq -.endif -_080552D6: - pop {r4, pc} - .align 2, 0 -_080552D8: .4byte gScreen -_080552DC: .4byte 0x0000F7FF - - thumb_func_start sub_080552E0 -sub_080552E0: @ 0x080552E0 - push {lr} - ldr r1, _080552F8 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080552F6 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_080552F6: - pop {pc} - .align 2, 0 -_080552F8: .4byte gMenu - - thumb_func_start sub_080552FC -sub_080552FC: @ 0x080552FC - push {lr} - ldr r1, _08055310 @ =gUnk_080FF228 - ldr r0, _08055314 @ =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 -_08055310: .4byte gUnk_080FF228 -_08055314: .4byte gMenu - - thumb_func_start sub_08055318 -sub_08055318: @ 0x08055318 - push {r4, lr} - ldr r4, _08055348 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #4] - movs r1, #0 - bl sub_0801876C - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _0805534C @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055348: .4byte gMenu -_0805534C: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055350 -sub_08055350: @ 0x08055350 - push {lr} - ldr r0, _08055378 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055374 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055374 - movs r0, #7 - movs r1, #0x10 - bl SetFade - ldr r1, _0805537C @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08055374: - pop {pc} - .align 2, 0 -_08055378: .4byte gFadeControl -_0805537C: .4byte gMenu - - thumb_func_start sub_08055380 -sub_08055380: @ 0x08055380 - push {r4, lr} - ldr r0, _080553B0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080553AC - ldr r4, _080553B4 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - bl sub_08054974 - movs r0, #6 - movs r1, #0x10 - bl SetFade - movs r0, #0x73 - bl SoundReq - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_080553AC: - pop {r4, pc} - .align 2, 0 -_080553B0: .4byte gFadeControl -_080553B4: .4byte gMenu - - thumb_func_start sub_080553B8 -sub_080553B8: @ 0x080553B8 - push {lr} - ldr r0, _080553D8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080553D6 - ldr r1, _080553DC @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080553D6 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_080553D6: - pop {pc} - .align 2, 0 -_080553D8: .4byte gFadeControl -_080553DC: .4byte gMenu - - thumb_func_start sub_080553E0 -sub_080553E0: @ 0x080553E0 - push {r4, lr} - ldr r0, _0805540C @ =gMenu - ldr r4, [r0, #0xc] - movs r0, #0xf - movs r1, #0x43 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08055408 - ldr r0, _08055410 @ =gRoomControls - ldrh r1, [r0, #6] - ldrh r3, [r4, #8] - adds r1, r1, r3 - strh r1, [r2, #0x2e] - ldrh r0, [r0, #8] - ldrh r4, [r4, #0xa] - adds r0, r0, r4 - strh r0, [r2, #0x32] -_08055408: - pop {r4, pc} - .align 2, 0 -_0805540C: .4byte gMenu -_08055410: .4byte gRoomControls - - thumb_func_start sub_08055414 -sub_08055414: @ 0x08055414 - push {lr} - ldr r1, _08055428 @ =gUnk_080FF238 - ldr r0, _0805542C @ =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 -_08055428: .4byte gUnk_080FF238 -_0805542C: .4byte gMenu - - thumb_func_start sub_08055430 -sub_08055430: @ 0x08055430 - push {r4, lr} - ldr r4, _08055460 @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0E8 - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055464 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055460: .4byte gMenu -_08055464: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055468 -sub_08055468: @ 0x08055468 - push {lr} - ldr r0, _08055490 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805548C - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _0805548C - movs r0, #7 - movs r1, #0x10 - bl SetFade - ldr r1, _08055494 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_0805548C: - pop {pc} - .align 2, 0 -_08055490: .4byte gFadeControl -_08055494: .4byte gMenu - - thumb_func_start sub_08055498 -sub_08055498: @ 0x08055498 - push {r4, lr} - ldr r0, _080554CC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080554CA - ldr r4, _080554D0 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r4, #4] - bl sub_080553E0 - movs r0, #6 - movs r1, #0x10 - bl SetFade - movs r0, #0x73 - bl SoundReq - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_080554CA: - pop {r4, pc} - .align 2, 0 -_080554CC: .4byte gFadeControl -_080554D0: .4byte gMenu - - thumb_func_start sub_080554D4 -sub_080554D4: @ 0x080554D4 - push {lr} - ldr r0, _080554F4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080554F2 - ldr r1, _080554F8 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080554F2 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_080554F2: - pop {pc} - .align 2, 0 -_080554F4: .4byte gFadeControl -_080554F8: .4byte gMenu - - thumb_func_start sub_080554FC -sub_080554FC: @ 0x080554FC - push {lr} - ldr r1, _08055510 @ =gUnk_080FF248 - ldr r0, _08055514 @ =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 -_08055510: .4byte gUnk_080FF248 -_08055514: .4byte gMenu - - thumb_func_start sub_08055518 -sub_08055518: @ 0x08055518 - push {r4, lr} - ldr r4, _08055540 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055544 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055540: .4byte gMenu -_08055544: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055548 -sub_08055548: @ 0x08055548 - push {r4, lr} - ldr r0, _08055578 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055576 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055576 - ldr r4, _0805557C @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r4, #4] - bl sub_080553E0 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0xb4 - strh r0, [r4, #8] -_08055576: - pop {r4, pc} - .align 2, 0 -_08055578: .4byte gFadeControl -_0805557C: .4byte gMenu - - thumb_func_start sub_08055580 -sub_08055580: @ 0x08055580 - push {lr} - ldr r1, _08055598 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055596 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055596: - pop {pc} - .align 2, 0 -_08055598: .4byte gMenu - - thumb_func_start sub_0805559C -sub_0805559C: @ 0x0805559C - push {lr} - ldr r1, _080555B0 @ =gUnk_080FF254 - ldr r0, _080555B4 @ =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 -_080555B0: .4byte gUnk_080FF254 -_080555B4: .4byte gMenu - - thumb_func_start sub_080555B8 -sub_080555B8: @ 0x080555B8 - push {r4, r5, lr} - ldr r5, _08055600 @ =gMenu - ldr r4, [r5, #0xc] - ldr r1, _08055604 @ =gLocalFlagBanks - ldrb r0, [r4, #0x11] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r4, #0x12] - bl SetLocalFlagByBank - ldrb r0, [r4, #2] - ldrb r1, [r4, #3] - bl sub_0804B0E8 - movs r0, #0x11 - bl LoadGfxGroup - ldrb r0, [r5, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - ldr r1, _08055608 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, r5, pc} - .align 2, 0 -_08055600: .4byte gMenu -_08055604: .4byte gLocalFlagBanks -_08055608: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0805560C -sub_0805560C: @ 0x0805560C - push {lr} - ldr r0, _0805562C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055628 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055628 - ldr r1, _08055630 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08055628: - pop {pc} - .align 2, 0 -_0805562C: .4byte gFadeControl -_08055630: .4byte gMenu - - thumb_func_start sub_08055634 -sub_08055634: @ 0x08055634 - push {r4, r5, lr} - ldr r4, _0805566C @ =gMenu - ldr r5, [r4, #0xc] - movs r0, #0x2c - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805565C - ldr r0, _08055670 @ =gRoomControls - ldrh r1, [r5, #8] - ldrh r3, [r0, #6] - adds r1, r1, r3 - strh r1, [r2, #0x2e] - ldrh r1, [r5, #0xa] - ldrh r0, [r0, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] -_0805565C: - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0xc3 - lsls r0, r0, #1 - strh r0, [r4, #8] - pop {r4, r5, pc} - .align 2, 0 -_0805566C: .4byte gMenu -_08055670: .4byte gRoomControls - - thumb_func_start sub_08055674 -sub_08055674: @ 0x08055674 - push {lr} - ldr r1, _0805568C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805568A - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_0805568A: - pop {pc} - .align 2, 0 -_0805568C: .4byte gMenu - - thumb_func_start sub_08055690 -sub_08055690: @ 0x08055690 - push {lr} - ldr r1, _080556A4 @ =gUnk_080FF284 - ldr r0, _080556A8 @ =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 -_080556A4: .4byte gUnk_080FF284 -_080556A8: .4byte gMenu - - thumb_func_start sub_080556AC -sub_080556AC: @ 0x080556AC - push {r4, lr} - ldr r4, _080556E4 @ =gMenu - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _080556E8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _080556EC @ =gUnk_080FF264 - bl LoadRoomEntityList - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080556E4: .4byte gMenu -_080556E8: .4byte gUpdateVisibleTiles -_080556EC: .4byte gUnk_080FF264 - - thumb_func_start nullsub_489 -nullsub_489: @ 0x080556F0 - bx lr - .align 2, 0 - - thumb_func_start sub_080556F4 -sub_080556F4: @ 0x080556F4 - push {lr} - ldr r1, _08055708 @ =gUnk_080FF28C - ldr r0, _0805570C @ =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 -_08055708: .4byte gUnk_080FF28C -_0805570C: .4byte gMenu - - thumb_func_start sub_08055710 -sub_08055710: @ 0x08055710 - push {r4, lr} - ldr r4, _0805575C @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _08055760 @ =gUnk_080FEE48 - bl LoadRoomEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08055734 - movs r0, #2 - strb r0, [r1, #0xb] - adds r1, #0x86 - ldr r0, _08055764 @ =0x000080FF - strh r0, [r1] -_08055734: - ldrb r0, [r4, #4] - bl sub_08054A14 - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055768 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_0805575C: .4byte gMenu -_08055760: .4byte gUnk_080FEE48 -_08055764: .4byte 0x000080FF -_08055768: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0805576C -sub_0805576C: @ 0x0805576C - push {lr} - ldr r0, _08055790 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805578C - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _0805578C - ldr r0, _08055794 @ =gMenu - ldrb r1, [r0, #6] - adds r1, #1 - strb r1, [r0, #6] - movs r1, #0x78 - strh r1, [r0, #8] -_0805578C: - pop {pc} - .align 2, 0 -_08055790: .4byte gFadeControl -_08055794: .4byte gMenu - - thumb_func_start sub_08055798 -sub_08055798: @ 0x08055798 - push {lr} - ldr r1, _080557B0 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080557AE - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_080557AE: - pop {pc} - .align 2, 0 -_080557B0: .4byte gMenu - - thumb_func_start sub_080557B4 -sub_080557B4: @ 0x080557B4 - push {lr} - ldr r1, _080557C8 @ =gUnk_080FF2B8 - ldr r0, _080557CC @ =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 -_080557C8: .4byte gUnk_080FF2B8 -_080557CC: .4byte gMenu - - thumb_func_start sub_080557D0 -sub_080557D0: @ 0x080557D0 - push {r4, lr} - ldr r4, _08055808 @ =gMenu - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _0805580C @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _08055810 @ =gUnk_080FF298 - bl LoadRoomEntityList - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055808: .4byte gMenu -_0805580C: .4byte gUpdateVisibleTiles -_08055810: .4byte gUnk_080FF298 - - thumb_func_start nullsub_490 -nullsub_490: @ 0x08055814 - bx lr - .align 2, 0 - - thumb_func_start sub_08055818 -sub_08055818: @ 0x08055818 - push {lr} - ldr r1, _0805582C @ =gUnk_080FF300 - ldr r0, _08055830 @ =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 -_0805582C: .4byte gUnk_080FF300 -_08055830: .4byte gMenu - - thumb_func_start sub_08055834 -sub_08055834: @ 0x08055834 - push {r4, lr} - ldr r0, _08055870 @ =gUnk_080FF2C0 - bl LoadRoomEntityList - ldr r0, _08055874 @ =gSave - ldrb r0, [r0, #8] - cmp r0, #9 - beq _0805584A - ldr r0, _08055878 @ =0x00000DB4 - bl sub_08018C58 -_0805584A: - ldr r4, _0805587C @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055880 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055870: .4byte gUnk_080FF2C0 -_08055874: .4byte gSave -_08055878: .4byte 0x00000DB4 -_0805587C: .4byte gMenu -_08055880: .4byte gUpdateVisibleTiles - - thumb_func_start nullsub_491 -nullsub_491: @ 0x08055884 - bx lr - .align 2, 0 - - thumb_func_start sub_08055888 -sub_08055888: @ 0x08055888 - push {lr} - ldr r1, _0805589C @ =gUnk_080FF328 - ldr r0, _080558A0 @ =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 -_0805589C: .4byte gUnk_080FF328 -_080558A0: .4byte gMenu - - thumb_func_start sub_080558A4 -sub_080558A4: @ 0x080558A4 - push {r4, lr} - ldr r4, _080558DC @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldr r0, _080558E0 @ =gUnk_080FF308 - bl LoadRoomEntityList - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _080558E4 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080558DC: .4byte gMenu -_080558E0: .4byte gUnk_080FF308 -_080558E4: .4byte gUpdateVisibleTiles - - thumb_func_start nullsub_492 -nullsub_492: @ 0x080558E8 - bx lr - .align 2, 0 - - thumb_func_start sub_080558EC -sub_080558EC: @ 0x080558EC - push {lr} - ldr r1, _08055900 @ =gUnk_080FF330 - ldr r0, _08055904 @ =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 -_08055900: .4byte gUnk_080FF330 -_08055904: .4byte gMenu - - thumb_func_start sub_08055908 -sub_08055908: @ 0x08055908 - push {r4, r5, lr} - ldr r5, _08055940 @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #2] - ldrb r1, [r4, #3] - bl sub_0804B0B0 - ldrb r0, [r4, #2] - ldrb r1, [r4, #3] - bl sub_0804B0E8 - ldrb r0, [r5, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - ldr r1, _08055944 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, r5, pc} - .align 2, 0 -_08055940: .4byte gMenu -_08055944: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055948 -sub_08055948: @ 0x08055948 - push {lr} - ldr r0, _08055970 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805596C - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _0805596C - bl sub_08055994 - ldr r0, _08055974 @ =gMenu - ldrb r1, [r0, #6] - adds r1, #1 - strb r1, [r0, #6] - movs r1, #0x78 - strh r1, [r0, #8] -_0805596C: - pop {pc} - .align 2, 0 -_08055970: .4byte gFadeControl -_08055974: .4byte gMenu - - thumb_func_start sub_08055978 -sub_08055978: @ 0x08055978 - push {lr} - ldr r1, _08055990 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805598E - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_0805598E: - pop {pc} - .align 2, 0 -_08055990: .4byte gMenu - - thumb_func_start sub_08055994 -sub_08055994: @ 0x08055994 - push {r4, lr} - ldr r4, _080559D8 @ =gMenu - ldrb r0, [r4, #4] - lsls r0, r0, #3 - ldr r1, _080559DC @ =gUnk_080FEAC8 - adds r0, r0, r1 - ldrb r1, [r0, #6] - movs r0, #1 - ands r0, r1 - movs r3, #1 - cmp r0, #0 - beq _080559AE - movs r3, #2 -_080559AE: - ldr r0, [r4, #0xc] - ldrh r1, [r0, #8] - lsrs r1, r1, #4 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r0, #0xa] - lsrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - movs r0, #0x73 - adds r2, r3, #0 - bl SetTileType - ldrb r0, [r4, #4] - bl sub_080553E0 - movs r0, #0x73 - bl SoundReq - pop {r4, pc} - .align 2, 0 -_080559D8: .4byte gMenu -_080559DC: .4byte gUnk_080FEAC8 - - thumb_func_start sub_080559E0 -sub_080559E0: @ 0x080559E0 - push {lr} - ldr r1, _080559F4 @ =gUnk_080FF35C - ldr r0, _080559F8 @ =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 -_080559F4: .4byte gUnk_080FF35C -_080559F8: .4byte gMenu - - thumb_func_start sub_080559FC -sub_080559FC: @ 0x080559FC - push {r4, lr} - ldr r4, _08055A30 @ =gMenu - ldr r0, [r4, #0xc] - ldrb r0, [r0, #1] - cmp r0, #0 - beq _08055A0E - ldr r0, _08055A34 @ =gUnk_080FF33C - bl LoadRoomEntityList -_08055A0E: - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055A38 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055A30: .4byte gMenu -_08055A34: .4byte gUnk_080FF33C -_08055A38: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055A3C -sub_08055A3C: @ 0x08055A3C - push {lr} - ldr r0, _08055A64 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055A60 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055A60 - movs r0, #7 - movs r1, #0x10 - bl SetFade - ldr r1, _08055A68 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08055A60: - pop {pc} - .align 2, 0 -_08055A64: .4byte gFadeControl -_08055A68: .4byte gMenu - - thumb_func_start sub_08055A6C -sub_08055A6C: @ 0x08055A6C - push {r4, lr} - ldr r0, _08055AA0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055A9E - ldr r4, _08055AA4 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r4, #4] - bl sub_080553E0 - movs r0, #6 - movs r1, #0x10 - bl SetFade - movs r0, #0x73 - bl SoundReq - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_08055A9E: - pop {r4, pc} - .align 2, 0 -_08055AA0: .4byte gFadeControl -_08055AA4: .4byte gMenu - - thumb_func_start sub_08055AA8 -sub_08055AA8: @ 0x08055AA8 - push {lr} - ldr r0, _08055AC8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055AC6 - ldr r1, _08055ACC @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055AC6 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055AC6: - pop {pc} - .align 2, 0 -_08055AC8: .4byte gFadeControl -_08055ACC: .4byte gMenu - - thumb_func_start sub_08055AD0 -sub_08055AD0: @ 0x08055AD0 - push {lr} - ldr r1, _08055AE4 @ =gUnk_080FF36C - ldr r0, _08055AE8 @ =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 -_08055AE4: .4byte gUnk_080FF36C -_08055AE8: .4byte gMenu - - thumb_func_start sub_08055AEC -sub_08055AEC: @ 0x08055AEC - push {r4, lr} - ldr r4, _08055B2C @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldr r0, [r4, #0xc] - ldrb r0, [r0, #1] - lsls r0, r0, #4 - ldr r1, _08055B30 @ =gUnk_080FED18 - adds r0, r0, r1 - bl LoadRoomEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08055B14 - movs r0, #1 - strb r0, [r1, #0xb] -_08055B14: - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055B34 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055B2C: .4byte gMenu -_08055B30: .4byte gUnk_080FED18 -_08055B34: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055B38 -sub_08055B38: @ 0x08055B38 - push {lr} - ldr r0, _08055B4C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055B48 - ldr r1, _08055B50 @ =gMenu - movs r0, #0x78 - strh r0, [r1, #8] -_08055B48: - pop {pc} - .align 2, 0 -_08055B4C: .4byte gFadeControl -_08055B50: .4byte gMenu - - thumb_func_start sub_08055B54 -sub_08055B54: @ 0x08055B54 - push {lr} - ldr r1, _08055B6C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055B6A - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055B6A: - pop {pc} - .align 2, 0 -_08055B6C: .4byte gMenu - - thumb_func_start sub_08055B70 -sub_08055B70: @ 0x08055B70 - push {r4, r5, r6, lr} - adds r0, r1, #0 - adds r5, r2, #0 - adds r6, r3, #0 - ldr r1, _08055BA4 @ =gMenu - ldr r4, [r1, #0xc] - lsls r0, r0, #4 - ldr r1, _08055BA8 @ =gUnk_080FF378 - adds r0, r0, r1 - bl LoadRoomEntity - adds r3, r0, #0 - cmp r3, #0 - beq _08055BA2 - ldrh r0, [r4, #8] - ldr r1, _08055BAC @ =gRoomControls - adds r0, r0, r5 - ldrh r2, [r1, #6] - adds r0, r0, r2 - strh r0, [r3, #0x2e] - ldrh r0, [r4, #0xa] - adds r0, r0, r6 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r3, #0x32] -_08055BA2: - pop {r4, r5, r6, pc} - .align 2, 0 -_08055BA4: .4byte gMenu -_08055BA8: .4byte gUnk_080FF378 -_08055BAC: .4byte gRoomControls - - thumb_func_start sub_08055BB0 -sub_08055BB0: @ 0x08055BB0 - push {lr} - ldr r1, _08055BC4 @ =gUnk_080FF3C8 - ldr r0, _08055BC8 @ =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 -_08055BC4: .4byte gUnk_080FF3C8 -_08055BC8: .4byte gMenu - - thumb_func_start sub_08055BCC -sub_08055BCC: @ 0x08055BCC - push {r4, lr} - ldr r4, _08055BFC @ =gMenu - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #4] - movs r1, #0 - bl sub_0801876C - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055C00 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055BFC: .4byte gMenu -_08055C00: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055C04 -sub_08055C04: @ 0x08055C04 - push {lr} - ldr r0, _08055C2C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055C28 - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055C28 - movs r0, #7 - movs r1, #0x10 - bl SetFade - ldr r1, _08055C30 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08055C28: - pop {pc} - .align 2, 0 -_08055C2C: .4byte gFadeControl -_08055C30: .4byte gMenu - - thumb_func_start sub_08055C34 -sub_08055C34: @ 0x08055C34 - push {r4, r5, lr} - sub sp, #4 - ldr r0, _08055C64 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055CA6 - ldr r5, _08055C68 @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r5, #4] - bl sub_080553E0 - ldrb r1, [r4, #1] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - beq _08055C6C - ldrb r0, [r5, #4] - movs r1, #0 - bl sub_08054974 - b _08055C8C - .align 2, 0 -_08055C64: .4byte gFadeControl -_08055C68: .4byte gMenu -_08055C6C: - str r0, [sp] - movs r0, #6 - movs r1, #0x9e - movs r2, #6 - movs r3, #0 - bl FindEntity - adds r4, r0, #0 - cmp r4, #0 - beq _08055C8C - ldr r0, [r4, #0x54] - bl DeleteEntity - adds r0, r4, #0 - bl DeleteEntity -_08055C8C: - movs r0, #6 - movs r1, #0x10 - bl SetFade - movs r0, #0x73 - bl SoundReq - ldr r0, _08055CAC @ =gMenu - ldrb r1, [r0, #6] - adds r1, #1 - strb r1, [r0, #6] - movs r1, #0x78 - strh r1, [r0, #8] -_08055CA6: - add sp, #4 - pop {r4, r5, pc} - .align 2, 0 -_08055CAC: .4byte gMenu - - thumb_func_start sub_08055CB0 -sub_08055CB0: @ 0x08055CB0 - push {lr} - ldr r0, _08055CD0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055CCE - ldr r1, _08055CD4 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055CCE - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055CCE: - pop {pc} - .align 2, 0 -_08055CD0: .4byte gFadeControl -_08055CD4: .4byte gMenu - - thumb_func_start sub_08055CD8 -sub_08055CD8: @ 0x08055CD8 - push {lr} - ldr r1, _08055CEC @ =gUnk_080FF3E8 - ldr r0, _08055CF0 @ =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 -_08055CEC: .4byte gUnk_080FF3E8 -_08055CF0: .4byte gMenu - - thumb_func_start sub_08055CF4 -sub_08055CF4: @ 0x08055CF4 - push {r4, lr} - ldr r4, _08055D24 @ =gMenu - ldr r1, [r4, #0xc] - ldrb r0, [r1, #2] - ldrb r1, [r1, #3] - bl sub_0804B0B0 - ldrb r0, [r4, #4] - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl sub_08055B70 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _08055D28 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08055D24: .4byte gMenu -_08055D28: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055D2C -sub_08055D2C: @ 0x08055D2C - push {r4, lr} - ldr r0, _08055D5C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055D5A - movs r0, #0xff - bl CheckRoomFlag - cmp r0, #0 - beq _08055D5A - ldr r4, _08055D60 @ =gMenu - ldrb r0, [r4, #4] - movs r1, #1 - bl sub_0801876C - ldrb r0, [r4, #4] - bl sub_080553E0 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x78 - strh r0, [r4, #8] -_08055D5A: - pop {r4, pc} - .align 2, 0 -_08055D5C: .4byte gFadeControl -_08055D60: .4byte gMenu - - thumb_func_start sub_08055D64 -sub_08055D64: @ 0x08055D64 - push {lr} - ldr r1, _08055D7C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055D7A - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055D7A: - pop {pc} - .align 2, 0 -_08055D7C: .4byte gMenu - - thumb_func_start sub_08055D80 -sub_08055D80: @ 0x08055D80 - push {lr} - ldr r1, _08055D94 @ =gUnk_080FF3F4 - ldr r0, _08055D98 @ =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 -_08055D94: .4byte gUnk_080FF3F4 -_08055D98: .4byte gMenu - - thumb_func_start sub_08055D9C -sub_08055D9C: @ 0x08055D9C - push {lr} - ldr r1, _08055DB8 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08055DBC @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {pc} - .align 2, 0 -_08055DB8: .4byte gMenu -_08055DBC: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08055DC0 -sub_08055DC0: @ 0x08055DC0 - push {lr} - ldr r0, _08055DE0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08055DDC - ldr r0, _08055DE4 @ =0x00000A01 - bl MessageFromTarget - ldr r1, _08055DE8 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #0x78 - strh r0, [r1, #8] -_08055DDC: - pop {pc} - .align 2, 0 -_08055DE0: .4byte gFadeControl -_08055DE4: .4byte 0x00000A01 -_08055DE8: .4byte gMenu - - thumb_func_start sub_08055DEC -sub_08055DEC: @ 0x08055DEC - push {lr} - ldr r1, _08055E04 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08055E02 - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08055E02: - pop {pc} - .align 2, 0 -_08055E04: .4byte gMenu diff --git a/linker.ld b/linker.ld index dce98966..7518f5c6 100644 --- a/linker.ld +++ b/linker.ld @@ -442,7 +442,7 @@ SECTIONS { src/code_0805436C.o(.text); asm/code_0805436C.o(.text); /* game.c */ src/playerItem/playerItemLantern.o(.text); - asm/code_08054C04.o(.text); /* subtask */ + src/subtask.o(.text); src/sub_08055E08.o(.text); src/main.o(.text); src/message.o(.text); diff --git a/src/subtask.c b/src/subtask.c new file mode 100644 index 00000000..9209a2c5 --- /dev/null +++ b/src/subtask.c @@ -0,0 +1,864 @@ +#include "global.h" +#include "menu.h" +#include "fade.h" +#include "flags.h" +#include "sound.h" +#include "room.h" +#include "functions.h" +#include "effects.h" +#include "asm.h" +#include "save.h" +#include "kinstone.h" +#include "screen.h" +#include "common.h" +#include "object.h" +#include "message.h" + +extern void (*const gUnk_080FEEB8[])(void); + +extern void sub_0801876C(u32, u32); + +extern u8 gUpdateVisibleTiles; +void sub_08055B70(u32, u32, u32, u32); + +extern void sub_08054974(u32, u32); + +extern void (*const gUnk_080FEEC8[])(void); + +void sub_080553E0(u32); + +extern void (*const gUnk_080FEF34[])(void); + +extern EntityData gUnk_080FEED4[]; + +extern void (*const gUnk_080FEF3C[])(void); + +extern void sub_0804B0E8(u32, u32); + +extern void (*const gUnk_080FF120[])(void); + +extern EntityData* gUnk_080FF108[]; + +extern void (*const gUnk_080FF148[])(void); + +extern EntityData gUnk_080FF128[]; + +extern void (*const gUnk_080FF174[])(void); + +extern EntityData gUnk_080FF154[]; + +extern void (*const gUnk_080FF1CC[])(void); + +extern EntityData gUnk_080FF17C[]; + +extern void (*const gUnk_080FF1F4[])(void); + +extern const s16 gUnk_080FF1D4[]; + +extern const u16 gUnk_080FF204[]; + +extern void (*const gUnk_080FF228[])(void); + +extern void (*const gUnk_080FF238[])(void); + +extern void (*const gUnk_080FF254[])(void); + +extern void (*const gUnk_080FF284[])(void); + +extern const EntityData gUnk_080FF264[]; + +extern void (*const gUnk_080FF28C[])(void); + +extern Entity* LoadRoomEntity(EntityData*); +extern void sub_08054A14(u32); + +extern const EntityData gUnk_080FEE48[]; + +extern void (*const gUnk_080FF2B8[])(void); + +extern const EntityData gUnk_080FF298[]; + +extern void (*const gUnk_080FF300[])(void); + +extern const EntityData gUnk_080FF2C0[]; + +extern void (*const gUnk_080FF328[])(void); + +extern const EntityData gUnk_080FF308[]; + +extern void (*const gUnk_080FF330[])(void); + +void sub_08055994(void); + +typedef struct { + u8 unk_0[6]; + u8 unk_6; + u8 unk_7; +} struct_080FEAC8; +extern struct_080FEAC8 gUnk_080FEAC8[]; + +extern void (*const gUnk_080FF35C[])(void); + +extern const EntityData gUnk_080FF33C[]; + +extern void (*const gUnk_080FF36C[])(void); + +extern const EntityData gUnk_080FED18[]; + +extern const EntityData gUnk_080FF378[]; + +extern void (*const gUnk_080FF3F4[])(void); + +void sub_08054C04(void) { + gUnk_080FEEB8[gMenu.overlayType](); +} + +void sub_08054C20(void) { + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + sub_0801876C(gMenu.field_0x4, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08054C58(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + SetFade(7, 0x10); + gMenu.overlayType++; + } +} + +void sub_08054C88(void) { + if (gFadeControl.active == 0) { + sub_08054974(gMenu.field_0x4, 0); + SetFade(6, 0x10); + SoundReq(SFX_SECRET_BIG); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08054CC0(void) { + if ((gFadeControl.active == 0) && (--gMenu.transitionTimer == 0)) { + gMenu.menuType++; + } +} + +void sub_08054CE8(void) { + gUnk_080FEEC8[gMenu.overlayType](); +} + +void sub_08054D04(void) { + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08054D3C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + sub_0801876C(gMenu.field_0x4, 1); + sub_080553E0(gMenu.field_0x4); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08054D74(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08054D90(void) { + gUnk_080FEF34[gMenu.overlayType](); +} + +void sub_08054DAC(void) { + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + LoadRoomEntityList(gUnk_080FEED4); + sub_0805B4D0(2); + sub_0806D0B0(NULL); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void nullsub_484(void) { +} + +void sub_08054E00(void) { + gUnk_080FEF3C[gMenu.overlayType](); +} + +void sub_08054E1C(void) { + u8* ptr = gMenu.field_0xc; + sub_0804B0B0(ptr[2], ptr[3]); + sub_0804B0E8(ptr[2], ptr[3]); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08054E5C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + gMenu.overlayType++; + gMenu.transitionTimer = 0xb4; + SetFade(6, 0x10); + sub_080553E0(gMenu.field_0x4); + sub_0801876C(gMenu.field_0x4, 1); + } +} + +void sub_08054E9C(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08054EB8(Entity* this, ScriptExecutionContext* context) { + Manager24* manager = (Manager24*)GetEmptyManager(); + if (manager != NULL) { + (manager->manager).type = 9; + (manager->manager).subtype = 0x24; + manager->x = this->x.HALF.HI - gRoomControls.origin_x; + manager->y = (this->y.HALF.HI - gRoomControls.origin_y) - 0x10; + manager->field_0x35 = 1; +#if defined(EU) || defined(JP) || defined(DEMO_JP) + manager->field_0x3e = 0x77; +#else + manager->field_0x3e = 0x79; +#endif + AppendEntityToList((Entity*)manager, 6); + } +} + +void sub_08054EFC(Entity* this) { + Entity* effect; + u32 tmp = COORD_TO_TILE(this) - 0x40; + SetTile(0x4074, tmp, 1); + this->collisionLayer = 2; + UpdateSpriteForCollisionLayer(this); + effect = CreateFx(this, FX_BIG_EXPLOSION, 0); + if (effect != NULL) { + effect->y.HALF.HI -= 0x10; + SortEntityBelow(this, effect); + } + SoundReq(SFX_ITEM_BOMB_EXPLODE); +} + +void sub_08054F64(Entity* this, ScriptExecutionContext* context) { + u32 tmp = this->type2; + if ((gActiveScriptInfo.syncFlags & tmp) != tmp) { + gActiveScriptInfo.commandSize = 0; + } else { + gActiveScriptInfo.syncFlags &= ~tmp; + gActiveScriptInfo.flags |= 1; + } +} + +void sub_08054F90(void) { + gUnk_080FF120[gMenu.overlayType](); +} + +void sub_08054FAC(void) { + u8* ptr; + u32 tmp; + + ptr = gMenu.field_0xc; + LoadRoomEntityList(gUnk_080FF108[ptr[1]]); + if (ptr[1] != 0) { + tmp = 3; + } else { + tmp = 0; + } + sub_08055B70(gMenu.field_0x4, tmp, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); + gMenu.field_0xa = 0; + if (CheckLocalFlagByBank(0x400, 0x77) && (ptr[2] == 0x2f)) { + gMenu.field_0xa = 1; + } +} + +void sub_08055014(void) { + if (gMenu.field_0xa != 0) { + gMenu.field_0xa = 0; + SetTileType(0x74, 0x407, 1); + } +} + +void sub_08055038(void) { + gUnk_080FF148[gMenu.overlayType](); +} + +void sub_08055054(void) { + LoadRoomEntityList(gUnk_080FF128); + sub_08055B70(gMenu.field_0x4, 2, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_0805508C(void) { +} + +void sub_08055090(void) { +} + +void sub_08055094(void) { + gUnk_080FF174[gMenu.overlayType](); +} + +void sub_080550B0(void) { + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + LoadRoomEntityList(gUnk_080FF154); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void nullsub_487(void) { +} + +void sub_080550F8(void) { + gUnk_080FF1CC[gMenu.overlayType](); +} + +void sub_08055114(void) { + LoadRoomEntityList(gUnk_080FF17C); + if (gSave.global_progress != 9) { + sub_08018C58(0xdb4); + } + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void nullsub_488(void) { +} + +void sub_08055168(void) { + gUnk_080FF1F4[gMenu.overlayType](); +} + +void sub_08055184(void) { + const s16* ptr = &gUnk_080FF1D4[(gMenu.field_0xc[1] & 0xf) * 3]; + LoadGfxGroup(ptr[0]); + gScreen.bg3.xOffset = ptr[1]; + gScreen.bg3.yOffset = ptr[2]; + gScreen.bg3.control = 0x1e05; + gScreen.controls.layerFXControl = 0x3648; + gScreen.controls.alphaBlend = 0x10; + gScreen.lcd.displayControl |= 0x800; + sub_0801876C(gMenu.field_0x4, 1); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gMenu.storyPanelIndex = 0; + gMenu.transitionTimer = 0x3c; + gMenu.field_0xa = 0; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055224(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + gMenu.overlayType++; + } +} + +void sub_0805524C(void) { + if (gMenu.storyPanelIndex == 0) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + u32 tmp = gMenu.storyPanelIndex; + gMenu.storyPanelIndex = tmp + 1; + SoundReq(SFX_EVAPORATE); + } + } else if ((gRoomTransition.frameCount & 7U) == 0) { + if (gUnk_080FF204[gMenu.field_0xa] != 0xffff) { + gScreen.controls.alphaBlend = gUnk_080FF204[gMenu.field_0xa++]; + } else { + gScreen.lcd.displayControl &= 0xf7ff; + gScreen.controls.alphaBlend = 0x1000; + gMenu.transitionTimer = 0x78; + gMenu.overlayType++; +#ifndef EU + SoundReq(SFX_SECRET_BIG); +#endif + } + } +} + +void sub_080552E0(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_080552FC(void) { + gUnk_080FF228[gMenu.overlayType](); +} + +void sub_08055318(void) { + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + sub_0801876C(gMenu.field_0x4, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055350(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + SetFade(7, 0x10); + gMenu.overlayType++; + } +} + +void sub_08055380(void) { + if (gFadeControl.active == 0) { + sub_08054974(gMenu.field_0x4, 0); + SetFade(6, 0x10); + SoundReq(SFX_SECRET_BIG); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_080553B8(void) { + if ((gFadeControl.active == 0) && (--gMenu.transitionTimer == 0)) { + gMenu.menuType++; + } +} + +void sub_080553E0(u32 param_1) { + u8* ptr = gMenu.field_0xc; + Entity* effect = CreateObject(SPECIAL_FX, FX_BIG_EXPLOSION2, 0); + if (effect != NULL) { + effect->x.HALF.HI = *(s16*)(ptr + 8) + gRoomControls.origin_x; + effect->y.HALF.HI = *(s16*)(ptr + 10) + gRoomControls.origin_y; + } +} + +void sub_08055414(void) { + gUnk_080FF238[gMenu.overlayType](); +} + +void sub_08055430(void) { + sub_0804B0E8(gMenu.field_0xc[2], gMenu.field_0xc[3]); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055468(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + SetFade(7, 0x10); + gMenu.overlayType++; + } +} + +void sub_08055498(void) { + if (gFadeControl.active == 0) { + sub_0801876C(gMenu.field_0x4, 1); + sub_080553E0(gMenu.field_0x4); + SetFade(6, 0x10); + SoundReq(SFX_SECRET_BIG); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_080554D4(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_080554FC(void) { + extern void (*const gUnk_080FF248[])(void); + gUnk_080FF248[gMenu.overlayType](); +} + +void sub_08055518(void) { + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055548(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + sub_0801876C(gMenu.field_0x4, 1); + sub_080553E0(gMenu.field_0x4); + gMenu.overlayType++; + gMenu.transitionTimer = 0xb4; + } +} + +void sub_08055580(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_0805559C(void) { + gUnk_080FF254[gMenu.overlayType](); +} + +void sub_080555B8(void) { + u8* ptr = gMenu.field_0xc; + SetLocalFlagByBank(gLocalFlagBanks[gMenu.field_0xc[0x11]], (u32) * (u16*)(gMenu.field_0xc + 0x12)); + sub_0804B0E8(ptr[2], ptr[3]); + LoadGfxGroup(0x11); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_0805560C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + gMenu.overlayType++; + } +} + +void sub_08055634(void) { + u8* ptr = gMenu.field_0xc; + Entity* obj = CreateObject(BEANSTALK, 0, 0); + if (obj != NULL) { + obj->x.HALF.HI = gRoomControls.origin_x + *(s16*)(ptr + 8); + obj->y.HALF.HI = gRoomControls.origin_y + *(s16*)(ptr + 10); + } + gMenu.overlayType++; + gMenu.transitionTimer = 0x186; +} + +void sub_08055674(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055690(void) { + gUnk_080FF284[gMenu.overlayType](); +} + +void sub_080556AC(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + LoadRoomEntityList((EntityData*)gUnk_080FF264); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + SetFade(4, 0x10); +} + +void nullsub_489(void) { +} + +void sub_080556F4(void) { + gUnk_080FF28C[gMenu.overlayType](); +} + +void sub_08055710(void) { + Entity* entity; + + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + entity = LoadRoomEntity((EntityData*)gUnk_080FEE48); + if (entity != NULL) { + entity->type2 = 2; + entity->field_0x86.HWORD = 0x80ff; + } + sub_08054A14(gMenu.field_0x4); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_0805576C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055798(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_080557B4(void) { + gUnk_080FF2B8[gMenu.overlayType](); +} + +void sub_080557D0(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_0804B0B0((u32)gMenu.field_0xc[2], gMenu.field_0xc[3]); + LoadRoomEntityList((EntityData*)gUnk_080FF298); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + SetFade(4, 0x10); +} + +void nullsub_490(void) { +} + +void sub_08055818(void) { + gUnk_080FF300[gMenu.overlayType](); +} + +void sub_08055834(void) { + LoadRoomEntityList((EntityData*)gUnk_080FF2C0); + if (gSave.global_progress != 9) { + sub_08018C58(0xdb4); + } + sub_08055B70(gMenu.field_0x4, 1, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void nullsub_491(void) { +} + +void sub_08055888(void) { + gUnk_080FF328[gMenu.overlayType](); +} + +void sub_080558A4(void) { + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + LoadRoomEntityList((EntityData*)gUnk_080FF308); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void nullsub_492(void) { +} + +void sub_080558EC(void) { + gUnk_080FF330[gMenu.overlayType](); +} + +void sub_08055908(void) { + u8* ptr = gMenu.field_0xc; + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + sub_0804B0E8(ptr[2], ptr[3]); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055948(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + sub_08055994(); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055978(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055994(void) { + u32 layer; + struct_080FEAC8* ptr = &gUnk_080FEAC8[gMenu.field_0x4]; + if ((ptr->unk_6 & 1) != 0) { + layer = 2; + } else { + layer = 1; + } + SetTileType(0x73, (*(u16*)(gMenu.field_0xc + 8) >> 4 & 0x3f) | (*(u16*)(gMenu.field_0xc + 10) >> 4 & 0x3f) << 6, + layer); + sub_080553E0((u32)gMenu.field_0x4); + SoundReq(SFX_SECRET_BIG); +} + +void sub_080559E0(void) { + gUnk_080FF35C[gMenu.overlayType](); +} + +void sub_080559FC(void) { + if (gMenu.field_0xc[1] != 0) { + LoadRoomEntityList((EntityData*)gUnk_080FF33C); + } + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055A3C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + SetFade(7, 0x10); + gMenu.overlayType++; + } +} + +void sub_08055A6C(void) { + if (gFadeControl.active == 0) { + sub_0801876C(gMenu.field_0x4, 1); + sub_080553E0(gMenu.field_0x4); + SetFade(6, 0x10); + SoundReq(SFX_SECRET_BIG); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055AA8(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055AD0(void) { + gUnk_080FF36C[gMenu.overlayType](); +} + +void sub_08055AEC(void) { + Entity* entity; + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + entity = LoadRoomEntity((EntityData*)&gUnk_080FED18[gMenu.field_0xc[1]]); + if (entity != NULL) { + entity->type2 = 1; + } + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055B38(void) { + if (gFadeControl.active == 0) { + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055B54(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055B70(u32 param_1, u32 param_2, u32 param_3, u32 param_4) { + u8* ptr = gMenu.field_0xc; + Entity* entity = LoadRoomEntity((EntityData*)&gUnk_080FF378[param_2]); + if (entity != NULL) { + entity->x.HALF.HI = *(s16*)(ptr + 8) + param_3 + gRoomControls.origin_x; + entity->y.HALF.HI = *(s16*)(ptr + 10) + param_4 + gRoomControls.origin_y; + } +} + +void sub_08055BB0(void) { + extern void (*const gUnk_080FF3C8[])(void); + gUnk_080FF3C8[gMenu.overlayType](); +} + +void sub_08055BCC(void) { + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + sub_0801876C(gMenu.field_0x4, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055C04(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + SetFade(7, 0x10); + gMenu.overlayType++; + } +} + +void sub_08055C34(void) { + u8* ptr; + Entity* entity; + if (gFadeControl.active == 0) { + ptr = gMenu.field_0xc; + sub_080553E0((u32)gMenu.field_0x4); + if ((ptr[1] & 0x80) != 0) { + sub_08054974(gMenu.field_0x4, 0); + } else { + entity = FindEntity(OBJECT, TREE_THORNS, 6, 0, ptr[1] & 0x80); + if (entity != NULL) { + DeleteEntity(entity->child); + DeleteEntity(entity); + } + } + SetFade(6, 0x10); + SoundReq(SFX_SECRET_BIG); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055CB0(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055CD8(void) { + extern void (*const gUnk_080FF3E8[])(void); + gUnk_080FF3E8[gMenu.overlayType](); +} + +void sub_08055CF4(void) { + sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]); + sub_08055B70(gMenu.field_0x4, 0, 0, 0); + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055D2C(void) { + if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) { + sub_0801876C(gMenu.field_0x4, 1); + sub_080553E0(gMenu.field_0x4); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055D64(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08055D80(void) { + gUnk_080FF3F4[gMenu.overlayType](); +} + +void sub_08055D9C(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + SetFade(4, 0x10); +} + +void sub_08055DC0(void) { + if (gFadeControl.active == 0) { + MessageFromTarget(0xa01); + gMenu.overlayType++; + gMenu.transitionTimer = 0x78; + } +} + +void sub_08055DEC(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} From e7d77d9a6f35d322c01f9cb9bd1b74ee0bcc5422 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:03:37 +0100 Subject: [PATCH 3/5] Merge and split subtask2 --- asm/non_matching/demoScreen/sub_080A2FD0.inc | 14 +- asm/non_matching/demoScreen/sub_080A30AC.inc | 4 +- asm/non_matching/subtask2/Subtask_FadeIn.inc | 87 + asm/non_matching/subtask2/Subtask_FadeOut.inc | 117 + .../subtask2/Subtask_LocalMapHint.inc | 33 + asm/non_matching/subtask2/Subtask_MapHint.inc | 25 + asm/non_matching/subtask2/sub_080A5594.inc | 133 + asm/non_matching/subtask2/sub_080A56A0.inc | 236 + asm/non_matching/subtask2/sub_080A57F4.inc | 411 ++ asm/non_matching/subtask2/sub_080A59C8.inc | 72 + asm/non_matching/subtask2/sub_080A5A90.inc | 40 + asm/non_matching/subtask2/sub_080A5AD8.inc | 14 + asm/non_matching/subtask2/sub_080A5AF4.inc | 48 + asm/non_matching/subtask2/sub_080A5B34.inc | 68 + asm/non_matching/subtask2/sub_080A5BB8.inc | 26 + asm/non_matching/subtask2/sub_080A5BF0.inc | 38 + asm/non_matching/subtask2/sub_080A5C9C.inc | 47 + asm/non_matching/subtask2/sub_080A5D1C.inc | 513 ++ asm/non_matching/subtask2/sub_080A5F48.inc | 94 + asm/non_matching/subtask2/sub_080A6044.inc | 75 + asm/non_matching/subtask2/sub_080A612C.inc | 42 + asm/non_matching/subtask2/sub_080A617C.inc | 234 + asm/non_matching/subtask2/sub_080A6290.inc | 32 + asm/non_matching/subtask2/sub_080A62E0.inc | 81 + asm/non_matching/subtask2/sub_080A6378.inc | 180 + asm/non_matching/subtask2/sub_080A6438.inc | 97 + asm/non_matching/subtask2/sub_080A6498.inc | 97 + asm/non_matching/subtask2/sub_080A6534.inc | 50 + asm/non_matching/subtask2/sub_080A65AC.inc | 47 + asm/non_matching/subtask2/sub_080A6608.inc | 32 + asm/non_matching/subtask2/sub_080A6650.inc | 18 + asm/non_matching/subtask2/sub_080A667C.inc | 44 + asm/non_matching/subtask2/sub_080A66D0.inc | 248 + asm/non_matching/subtask2/sub_080A67C4.inc | 132 + asm/non_matching/subtask2/sub_080A68D4.inc | 174 + asm/non_matching/subtask2/sub_080A698C.inc | 42 + asm/non_matching/subtask2/sub_080A69E0.inc | 85 + asm/non_matching/subtask2/sub_080A6A80.inc | 34 + asm/non_matching/subtask2/sub_080A6B04.inc | 128 + asm/non_matching/subtask2/sub_080A6C1C.inc | 45 + asm/non_matching/subtask2/sub_080A6CD8.inc | 82 + asm/non_matching/subtask2/sub_080A6D74.inc | 51 + asm/non_matching/subtask2/sub_080A6DD0.inc | 29 + asm/non_matching/subtask2/sub_080A6E70.inc | 110 + asm/non_matching/subtask2/sub_080A6EE0.inc | 46 + asm/non_matching/subtask2/sub_080A6F40.inc | 24 + asm/non_matching/subtask2/sub_080A6F6C.inc | 34 + asm/non_matching/subtask2/sub_080A6FB4.inc | 69 + asm/non_matching/subtask2/sub_080A7040.inc | 47 + asm/non_matching/subtask2/sub_080A70AC.inc | 53 + asm/subtask2.s | 5147 ----------------- linker.ld | 2 +- src/subtask2.c | 412 ++ 53 files changed, 4886 insertions(+), 5157 deletions(-) create mode 100644 asm/non_matching/subtask2/Subtask_FadeIn.inc create mode 100644 asm/non_matching/subtask2/Subtask_FadeOut.inc create mode 100644 asm/non_matching/subtask2/Subtask_LocalMapHint.inc create mode 100644 asm/non_matching/subtask2/Subtask_MapHint.inc create mode 100644 asm/non_matching/subtask2/sub_080A5594.inc create mode 100644 asm/non_matching/subtask2/sub_080A56A0.inc create mode 100644 asm/non_matching/subtask2/sub_080A57F4.inc create mode 100644 asm/non_matching/subtask2/sub_080A59C8.inc create mode 100644 asm/non_matching/subtask2/sub_080A5A90.inc create mode 100644 asm/non_matching/subtask2/sub_080A5AD8.inc create mode 100644 asm/non_matching/subtask2/sub_080A5AF4.inc create mode 100644 asm/non_matching/subtask2/sub_080A5B34.inc create mode 100644 asm/non_matching/subtask2/sub_080A5BB8.inc create mode 100644 asm/non_matching/subtask2/sub_080A5BF0.inc create mode 100644 asm/non_matching/subtask2/sub_080A5C9C.inc create mode 100644 asm/non_matching/subtask2/sub_080A5D1C.inc create mode 100644 asm/non_matching/subtask2/sub_080A5F48.inc create mode 100644 asm/non_matching/subtask2/sub_080A6044.inc create mode 100644 asm/non_matching/subtask2/sub_080A612C.inc create mode 100644 asm/non_matching/subtask2/sub_080A617C.inc create mode 100644 asm/non_matching/subtask2/sub_080A6290.inc create mode 100644 asm/non_matching/subtask2/sub_080A62E0.inc create mode 100644 asm/non_matching/subtask2/sub_080A6378.inc create mode 100644 asm/non_matching/subtask2/sub_080A6438.inc create mode 100644 asm/non_matching/subtask2/sub_080A6498.inc create mode 100644 asm/non_matching/subtask2/sub_080A6534.inc create mode 100644 asm/non_matching/subtask2/sub_080A65AC.inc create mode 100644 asm/non_matching/subtask2/sub_080A6608.inc create mode 100644 asm/non_matching/subtask2/sub_080A6650.inc create mode 100644 asm/non_matching/subtask2/sub_080A667C.inc create mode 100644 asm/non_matching/subtask2/sub_080A66D0.inc create mode 100644 asm/non_matching/subtask2/sub_080A67C4.inc create mode 100644 asm/non_matching/subtask2/sub_080A68D4.inc create mode 100644 asm/non_matching/subtask2/sub_080A698C.inc create mode 100644 asm/non_matching/subtask2/sub_080A69E0.inc create mode 100644 asm/non_matching/subtask2/sub_080A6A80.inc create mode 100644 asm/non_matching/subtask2/sub_080A6B04.inc create mode 100644 asm/non_matching/subtask2/sub_080A6C1C.inc create mode 100644 asm/non_matching/subtask2/sub_080A6CD8.inc create mode 100644 asm/non_matching/subtask2/sub_080A6D74.inc create mode 100644 asm/non_matching/subtask2/sub_080A6DD0.inc create mode 100644 asm/non_matching/subtask2/sub_080A6E70.inc create mode 100644 asm/non_matching/subtask2/sub_080A6EE0.inc create mode 100644 asm/non_matching/subtask2/sub_080A6F40.inc create mode 100644 asm/non_matching/subtask2/sub_080A6F6C.inc create mode 100644 asm/non_matching/subtask2/sub_080A6FB4.inc create mode 100644 asm/non_matching/subtask2/sub_080A7040.inc create mode 100644 asm/non_matching/subtask2/sub_080A70AC.inc delete mode 100644 asm/subtask2.s create mode 100644 src/subtask2.c diff --git a/asm/non_matching/demoScreen/sub_080A2FD0.inc b/asm/non_matching/demoScreen/sub_080A2FD0.inc index 590274c2..e6c50bb3 100644 --- a/asm/non_matching/demoScreen/sub_080A2FD0.inc +++ b/asm/non_matching/demoScreen/sub_080A2FD0.inc @@ -26,7 +26,7 @@ _080A2FFC: bgt _080A3052 cmp r0, #0x20 bne _080A3052 - ldr r1, _080A301C @ =gChooseFileState + ldr r1, _080A301C @ =gMenu ldrb r0, [r1] cmp r0, #0 bne _080A3052 @@ -36,9 +36,9 @@ _080A2FFC: movs r0, #0xfc b _080A302E .align 2, 0 -_080A301C: .4byte gChooseFileState +_080A301C: .4byte gMenu _080A3020: - ldr r1, _080A3038 @ =gChooseFileState + ldr r1, _080A3038 @ =gMenu ldrb r0, [r1] cmp r0, #0 bne _080A3052 @@ -51,9 +51,9 @@ _080A302E: bl SoundReq b _080A3052 .align 2, 0 -_080A3038: .4byte gChooseFileState +_080A3038: .4byte gMenu _080A303C: - ldr r0, _080A3090 @ =gChooseFileState + ldr r0, _080A3090 @ =gMenu ldrb r2, [r0] cmp r2, #0 bne _080A3052 @@ -72,7 +72,7 @@ _080A3052: movs r1, #3 bl __modsi3 strb r0, [r4, #4] - ldr r5, _080A3090 @ =gChooseFileState + ldr r5, _080A3090 @ =gMenu movs r0, #0x10 ldrsh r2, [r5, r0] ldrb r1, [r4, #4] @@ -94,7 +94,7 @@ _080A3052: movs r0, #1 b _080A309A .align 2, 0 -_080A3090: .4byte gChooseFileState +_080A3090: .4byte gMenu _080A3094: .4byte gMain _080A3098: movs r0, #0 diff --git a/asm/non_matching/demoScreen/sub_080A30AC.inc b/asm/non_matching/demoScreen/sub_080A30AC.inc index 08be1526..fca71712 100644 --- a/asm/non_matching/demoScreen/sub_080A30AC.inc +++ b/asm/non_matching/demoScreen/sub_080A30AC.inc @@ -13,7 +13,7 @@ strh r0, [r4, #8] movs r0, #0x40 strh r0, [r4, #2] - ldr r0, _080A318C @ =gChooseFileState + ldr r0, _080A318C @ =gMenu movs r1, #0x10 ldrsh r6, [r0, r1] ldr r1, _080A3190 @ =0xFFFFFED8 @@ -101,7 +101,7 @@ pop {r4, r5, r6, pc} .align 2, 0 _080A3188: .4byte gOamCmd -_080A318C: .4byte gChooseFileState +_080A318C: .4byte gMenu _080A3190: .4byte 0xFFFFFED8 _080A3194: .4byte gUnk_08A068BF .syntax divided diff --git a/asm/non_matching/subtask2/Subtask_FadeIn.inc b/asm/non_matching/subtask2/Subtask_FadeIn.inc new file mode 100644 index 00000000..041a2026 --- /dev/null +++ b/asm/non_matching/subtask2/Subtask_FadeIn.inc @@ -0,0 +1,87 @@ + .syntax unified + push {r4, lr} + ldr r0, _080A72E8 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A72E4 + ldr r0, _080A72EC @ =gScreen + ldr r1, _080A72F0 @ =gUnk_03001020 + movs r2, #0x7c + bl MemCopy + ldr r0, _080A72F4 @ =gPaletteBuffer + ldr r1, _080A72F8 @ =gUnk_02024090 + movs r2, #0x80 + lsls r2, r2, #3 + bl MemCopy + ldr r0, _080A72FC @ =gGFXSlots + ldr r4, _080A7300 @ =gUnk_02032F14 + movs r2, #0x85 + lsls r2, r2, #2 + adds r1, r4, #0 + bl MemCopy + ldr r0, _080A7304 @ =gPaletteList + movs r2, #0x85 + lsls r2, r2, #2 + adds r1, r4, r2 + movs r2, #0x40 + bl MemCopy + ldr r0, _080A7308 @ =gRoomControls + adds r1, r4, #0 + subs r1, #0x38 + movs r2, #0x38 + bl MemCopy + ldr r0, _080A730C @ =gUnk_03000420 + movs r2, #0x95 + lsls r2, r2, #2 + adds r1, r4, r2 + movs r2, #0x80 + lsls r2, r2, #1 + bl MemCopy + ldr r0, _080A7310 @ =gActiveScriptInfo + movs r2, #0xd5 + lsls r2, r2, #2 + adds r1, r4, r2 + movs r2, #0xc + bl MemCopy + bl sub_0805E958 + adds r1, r4, #0 + subs r1, #0x54 + ldr r0, _080A7314 @ =gRoomTransition + adds r0, #0x2f + ldrb r0, [r0] + strb r0, [r1, #0xd] + ldr r0, _080A7318 @ =gPlayerState + adds r0, #0x8b + ldrb r0, [r0] + strb r0, [r1, #0xc] + ldr r0, _080A731C @ =gCurrentRoomProperties + ldr r0, [r0] + str r0, [r1, #0x10] + ldr r0, _080A7320 @ =gMapBottom + ldr r0, [r0] + str r0, [r1, #0x14] + ldr r0, _080A7324 @ =gMapTop + ldr r0, [r0] + str r0, [r1, #0x18] + movs r0, #1 + strb r0, [r1] +_080A72E4: + pop {r4, pc} + .align 2, 0 +_080A72E8: .4byte gFadeControl +_080A72EC: .4byte gScreen +_080A72F0: .4byte gUnk_03001020 +_080A72F4: .4byte gPaletteBuffer +_080A72F8: .4byte gUnk_02024090 +_080A72FC: .4byte gGFXSlots +_080A7300: .4byte gUnk_02032F14 +_080A7304: .4byte gPaletteList +_080A7308: .4byte gRoomControls +_080A730C: .4byte gUnk_03000420 +_080A7310: .4byte gActiveScriptInfo +_080A7314: .4byte gRoomTransition +_080A7318: .4byte gPlayerState +_080A731C: .4byte gCurrentRoomProperties +_080A7320: .4byte gMapBottom +_080A7324: .4byte gMapTop + .syntax divided diff --git a/asm/non_matching/subtask2/Subtask_FadeOut.inc b/asm/non_matching/subtask2/Subtask_FadeOut.inc new file mode 100644 index 00000000..f95878fa --- /dev/null +++ b/asm/non_matching/subtask2/Subtask_FadeOut.inc @@ -0,0 +1,117 @@ + .syntax unified + push {r4, r5, lr} + ldr r0, _080A7468 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + beq _080A73B4 + b _080A74BC +_080A73B4: + bl DeleteAllEntities + bl sub_0805E974 + ldr r1, _080A746C @ =gCurrentRoomProperties + ldr r5, _080A7470 @ =gUnk_02032EC0 + ldr r0, [r5, #0x10] + str r0, [r1] + ldr r0, _080A7474 @ =gPlayerState + ldrb r1, [r5, #0xc] + adds r0, #0x8b + strb r1, [r0] + ldr r1, _080A7478 @ =gMapBottom + ldr r0, [r5, #0x14] + str r0, [r1] + ldr r1, _080A747C @ =gMapTop + ldr r0, [r5, #0x18] + str r0, [r1] + movs r1, #0xea + lsls r1, r1, #2 + adds r0, r5, r1 + ldr r1, _080A7480 @ =gActiveScriptInfo + movs r2, #0xc + bl MemCopy + movs r1, #0xaa + lsls r1, r1, #2 + adds r0, r5, r1 + ldr r1, _080A7484 @ =gUnk_03000420 + movs r2, #0x80 + lsls r2, r2, #1 + bl MemCopy + movs r1, #0x9a + lsls r1, r1, #2 + adds r0, r5, r1 + ldr r1, _080A7488 @ =gPaletteList + movs r2, #0x40 + bl MemCopy + adds r0, r5, #0 + adds r0, #0x54 + ldr r1, _080A748C @ =gGFXSlots + movs r2, #0x85 + lsls r2, r2, #2 + bl MemCopy + adds r0, r5, #0 + adds r0, #0x1c + ldr r4, _080A7490 @ =gRoomControls + adds r1, r4, #0 + movs r2, #0x38 + bl MemCopy + ldr r0, _080A7494 @ =gUnk_03001020 + ldr r1, _080A7498 @ =gScreen + movs r2, #0x7c + bl MemCopy + ldrb r0, [r4, #4] + bl GetFlagBankOffset + ldr r4, _080A749C @ =gArea + strh r0, [r4, #4] + bl GetCurrentRoomInfo + ldr r1, _080A74A0 @ =0x0000085C + adds r4, r4, r1 + str r0, [r4] + ldrb r0, [r5, #6] + bl RestoreGameTask + ldrb r1, [r5, #0xd] + rsbs r0, r1, #0 + orrs r0, r1 + lsrs r0, r0, #0x1f + bl sub_0801D000 + bl sub_080A74F4 + ldrh r1, [r5, #8] + ldr r0, _080A74A4 @ =0x0000FFFF + cmp r1, r0 + beq _080A74A8 + adds r0, r1, #0 + ldrh r1, [r5, #0xa] + bl SetFade + b _080A74AE + .align 2, 0 +_080A7468: .4byte gFadeControl +_080A746C: .4byte gCurrentRoomProperties +_080A7470: .4byte gUnk_02032EC0 +_080A7474: .4byte gPlayerState +_080A7478: .4byte gMapBottom +_080A747C: .4byte gMapTop +_080A7480: .4byte gActiveScriptInfo +_080A7484: .4byte gUnk_03000420 +_080A7488: .4byte gPaletteList +_080A748C: .4byte gGFXSlots +_080A7490: .4byte gRoomControls +_080A7494: .4byte gUnk_03001020 +_080A7498: .4byte gScreen +_080A749C: .4byte gArea +_080A74A0: .4byte 0x0000085C +_080A74A4: .4byte 0x0000FFFF +_080A74A8: + ldrh r0, [r5, #0xa] + bl SetFadeInverted +_080A74AE: + ldr r1, _080A74C0 @ =gUnk_02032EC0 + movs r2, #0 + movs r0, #4 + strb r0, [r1] + ldr r0, _080A74C4 @ =gRoomTransition + adds r0, #0x30 + strb r2, [r0] +_080A74BC: + pop {r4, r5, pc} + .align 2, 0 +_080A74C0: .4byte gUnk_02032EC0 +_080A74C4: .4byte gRoomTransition + .syntax divided diff --git a/asm/non_matching/subtask2/Subtask_LocalMapHint.inc b/asm/non_matching/subtask2/Subtask_LocalMapHint.inc new file mode 100644 index 00000000..a0840e43 --- /dev/null +++ b/asm/non_matching/subtask2/Subtask_LocalMapHint.inc @@ -0,0 +1,33 @@ + .syntax unified + push {r4, lr} + bl FlushSprites + ldr r1, _080A6AF4 @ =gUnk_08128F1C + ldr r4, _080A6AF8 @ =gMenu + ldrb r0, [r4, #5] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl _call_via_r0 + ldrb r1, [r4, #3] + lsls r1, r1, #3 + ldr r0, _080A6AFC @ =gUnk_08128E94 + adds r1, r1, r0 + ldr r2, _080A6B00 @ =gScreen + movs r0, #5 + ldrsb r0, [r1, r0] + rsbs r0, r0, #0 + strh r0, [r2, #0x18] + ldrb r1, [r1, #6] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + ldrh r0, [r4, #0xa] + subs r0, r0, r1 + strh r0, [r2, #0x24] + bl CopyOAM + pop {r4, pc} + .align 2, 0 +_080A6AF4: .4byte gUnk_08128F1C +_080A6AF8: .4byte gMenu +_080A6AFC: .4byte gUnk_08128E94 +_080A6B00: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/subtask2/Subtask_MapHint.inc b/asm/non_matching/subtask2/Subtask_MapHint.inc new file mode 100644 index 00000000..9b2b6641 --- /dev/null +++ b/asm/non_matching/subtask2/Subtask_MapHint.inc @@ -0,0 +1,25 @@ + .syntax unified + push {r4, lr} + bl FlushSprites + ldr r1, _080A652C @ =gUnk_08128E70 + ldr r4, _080A6530 @ =gMenu + ldrb r0, [r4, #5] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl _call_via_r0 + adds r4, #0x2c + ldrb r1, [r4] + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _080A6522 + bl sub_080A6438 +_080A6522: + bl sub_080A6498 + bl CopyOAM + pop {r4, pc} + .align 2, 0 +_080A652C: .4byte gUnk_08128E70 +_080A6530: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5594.inc b/asm/non_matching/subtask2/sub_080A5594.inc new file mode 100644 index 00000000..15b3e7b9 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5594.inc @@ -0,0 +1,133 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + ldr r4, _080A5620 @ =gMenu + ldr r0, _080A5624 @ =gUnk_08128C00 + str r0, [r4, #0xc] + ldr r0, _080A5628 @ =gUnk_08128C04 + bl sub_080A70AC + movs r6, #6 + movs r5, #0x34 + adds r7, r4, #0 + adds r7, #0x10 +_080A55AA: + adds r0, r5, #0 + bl GetInventoryValue + cmp r0, #1 + bne _080A55EA + ldr r1, _080A562C @ =gItemMetaData + lsls r0, r5, #3 + adds r0, r0, r1 + ldrb r1, [r0] + cmp r1, #3 + bne _080A55C8 + ldrb r0, [r4, #0x13] + cmp r0, #0 + beq _080A55C8 + movs r1, #0x63 +_080A55C8: + cmp r1, #0x63 + beq _080A55EA + cmp r1, #1 + bne _080A55D8 + adds r1, r6, #0 + cmp r1, #7 + bhi _080A55D8 + adds r6, r1, #1 +_080A55D8: + adds r0, r1, r7 + strb r5, [r0] + lsls r1, r1, #3 + movs r0, #0xe0 + lsls r0, r0, #2 + adds r1, r1, r0 + adds r0, r5, #0 + bl sub_080A5F48 +_080A55EA: + adds r5, #1 + cmp r5, #0x46 + bls _080A55AA + movs r0, #0x3d + bl GetInventoryValue + cmp r0, #0 + bne _080A564A + movs r5, #0 + movs r0, #0x67 + bl GetInventoryValue + cmp r0, #0 + beq _080A5646 + movs r4, #0 + ldr r1, _080A5630 @ =gUnk_02002B6B +_080A560A: + adds r0, r4, r1 + ldrb r0, [r0] + adds r5, r5, r0 + adds r4, #1 + cmp r4, #0x12 + bls _080A560A + cmp r5, #0x4f + ble _080A5634 + movs r5, #4 + b _080A5646 + .align 2, 0 +_080A5620: .4byte gMenu +_080A5624: .4byte gUnk_08128C00 +_080A5628: .4byte gUnk_08128C04 +_080A562C: .4byte gItemMetaData +_080A5630: .4byte gUnk_02002B6B +_080A5634: + cmp r5, #0x27 + ble _080A563C + movs r5, #3 + b _080A5646 +_080A563C: + cmp r5, #9 + ble _080A5644 + movs r5, #2 + b _080A5646 +_080A5644: + movs r5, #1 +_080A5646: + ldr r0, _080A5698 @ =gMenu + strb r5, [r0, #0x10] +_080A564A: + ldr r0, _080A5698 @ =gMenu + ldr r1, _080A569C @ =gSave + adds r1, #0xa9 + ldrb r1, [r1] + adds r1, #1 + strb r1, [r0, #0x11] + movs r5, #0 + movs r4, #0x48 +_080A565A: + adds r0, r4, #0 + bl GetInventoryValue + cmp r0, #0 + beq _080A5666 + adds r5, #1 +_080A5666: + adds r4, #1 + cmp r4, #0x4f + bls _080A565A + ldr r4, _080A5698 @ =gMenu + strb r5, [r4, #0x12] + movs r0, #0x3e + bl GetInventoryValue + cmp r0, #0 + bne _080A5688 + movs r0, #0x3f + bl GetInventoryValue + cmp r0, #0 + beq _080A5688 + movs r0, #0x3f + strb r0, [r4, #0x13] +_080A5688: + ldr r1, _080A5698 @ =gMenu + movs r0, #1 + strb r0, [r1, #0x14] + strb r0, [r1, #0x15] + bl SetMenuType + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5698: .4byte gMenu +_080A569C: .4byte gSave + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A56A0.inc b/asm/non_matching/subtask2/sub_080A56A0.inc new file mode 100644 index 00000000..99c82ab7 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A56A0.inc @@ -0,0 +1,236 @@ + .syntax unified + push {r4, lr} + bl sub_080A51F4 + cmp r0, #0 + bne _080A56AC + b _080A57F0 +_080A56AC: + ldr r2, _080A56D0 @ =gMenu + ldr r0, _080A56D4 @ =gUnk_08128C00 + str r0, [r2, #0xc] + ldrb r0, [r2, #3] + lsls r0, r0, #3 + ldr r1, _080A56D8 @ =gUnk_08128C14 + adds r4, r0, r1 + movs r3, #0xff + ldr r0, _080A56DC @ =gInput + ldrh r1, [r0, #4] + cmp r1, #0x20 + beq _080A56F2 + cmp r1, #0x20 + bgt _080A56E0 + cmp r1, #0x10 + beq _080A56F6 + b _080A56F8 + .align 2, 0 +_080A56D0: .4byte gMenu +_080A56D4: .4byte gUnk_08128C00 +_080A56D8: .4byte gUnk_08128C14 +_080A56DC: .4byte gInput +_080A56E0: + cmp r1, #0x40 + beq _080A56EA + cmp r1, #0x80 + beq _080A56EE + b _080A56F8 +_080A56EA: + ldrb r3, [r4] + b _080A56F8 +_080A56EE: + ldrb r3, [r4, #1] + b _080A56F8 +_080A56F2: + ldrb r3, [r4, #2] + b _080A56F8 +_080A56F6: + ldrb r3, [r4, #3] +_080A56F8: + cmp r3, #0xff + beq _080A570C + ldr r0, _080A5708 @ =gMenu + strb r3, [r0, #3] + movs r0, #0x69 + bl SoundReq + b _080A575E + .align 2, 0 +_080A5708: .4byte gMenu +_080A570C: + ldrh r0, [r0, #2] + cmp r0, #1 + bne _080A575E + ldrb r3, [r2, #3] + .ifdef DEMO_USA + movs r4, #0 + .else + .ifdef DEMO_JP + movs r4, #0 + .else + movs r1, #0 + .endif + .endif + cmp r3, #2 + beq _080A572E + cmp r3, #2 + bhi _080A5724 + cmp r3, #0 + beq _080A572E + b _080A574E +_080A5724: + cmp r3, #4 + beq _080A5748 + cmp r3, #5 + beq _080A574C + b _080A574E +_080A572E: + ldr r0, _080A5744 @ =gMenu + adds r0, #0x10 + adds r0, r3, r0 + ldrb r0, [r0] + cmp r0, #0 + beq _080A574E + .ifdef DEMO_USA + movs r4, #8 + .else + .ifdef DEMO_JP + movs r4, #8 + .else + movs r1, #8 + .endif + .endif + cmp r3, #0 + bne _080A574E + .ifdef DEMO_USA + movs r4, #7 + .else + .ifdef DEMO_JP + movs r4, #7 + .else + movs r1, #7 + .endif + .endif + b _080A5752 + .align 2, 0 +_080A5744: .4byte gMenu +_080A5748: +.ifdef DEMO_USA + movs r0, #0x6d + bl SoundReq + b _080A574E +_080A574C: + movs r0, #0x6d + bl SoundReq +.else +.ifdef DEMO_JP + movs r0, #0x6d + bl SoundReq + b _080A574E +_080A574C: + movs r0, #0x6d + bl SoundReq +.else + movs r1, #9 + b _080A5752 +_080A574C: + movs r1, #0xa +.endif +.endif +_080A574E: + .ifdef DEMO_USA + cmp r4, #0 + .else + .ifdef DEMO_JP + cmp r4, #0 + .else + cmp r1, #0 + .endif + .endif + beq _080A575E +_080A5752: + .ifdef DEMO_USA + adds r0, r4, #0 + .else + .ifdef DEMO_JP + adds r0, r4, #0 + .else + adds r0, r1, #0 + .endif + .endif + bl sub_080A4E84 + movs r0, #0x6a + bl SoundReq +_080A575E: + ldr r0, _080A5780 @ =gMenu + ldrb r1, [r0, #3] + adds r2, r0, #0 + cmp r1, #0 + beq _080A576C + cmp r1, #2 + bne _080A5788 +_080A576C: + adds r0, r2, #0 + adds r0, #0x10 + adds r0, r1, r0 + ldrb r0, [r0] + cmp r0, #0 + beq _080A5788 + ldr r1, _080A5784 @ =gUnk_0200AF00 + movs r0, #0x10 + b _080A578C + .align 2, 0 +_080A5780: .4byte gMenu +_080A5784: .4byte gUnk_0200AF00 +_080A5788: + ldr r1, _080A57AC @ =gUnk_0200AF00 + ldr r0, _080A57B0 @ =0x0000FFF0 +_080A578C: + strh r0, [r1, #0x1c] + ldrb r3, [r2, #3] + adds r0, r2, #0 + adds r0, #0x10 + adds r0, r3, r0 + ldrb r2, [r0] + cmp r2, #0 + beq _080A57E6 + cmp r3, #5 + bhi _080A57E6 + lsls r0, r3, #2 + ldr r1, _080A57B4 @ =_080A57B8 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080A57AC: .4byte gUnk_0200AF00 +_080A57B0: .4byte 0x0000FFF0 +_080A57B4: .4byte _080A57B8 +_080A57B8: @ jump table + .4byte _080A57D0 @ case 0 + .4byte _080A57D8 @ case 1 + .4byte _080A57DC @ case 2 + .4byte _080A57E6 @ case 3 + .4byte _080A57E0 @ case 4 + .4byte _080A57E4 @ case 5 +_080A57D0: + cmp r2, #0x3d + beq _080A57E6 + movs r2, #0x67 + b _080A57E6 +_080A57D8: + movs r2, #0x63 + b _080A57E6 +_080A57DC: + movs r2, #0x70 + b _080A57E6 +_080A57E0: + movs r2, #0x74 + b _080A57E6 +_080A57E4: + movs r2, #0x73 +_080A57E6: + movs r0, #0x80 + lsls r0, r0, #3 + adds r0, r2, r0 + bl sub_080A6F6C +_080A57F0: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A57F4.inc b/asm/non_matching/subtask2/sub_080A57F4.inc new file mode 100644 index 00000000..21e6c76d --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A57F4.inc @@ -0,0 +1,411 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r2, _080A50A8 @ =gOamCmd + movs r1, #0 + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r2, #4] + strh r1, [r2, #6] + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + ldr r1, _080A50AC @ =gUnk_08128C94 + mov sb, r1 + cmp r0, #0 + bne _080A502E + ldr r3, _080A50B0 @ =gUnk_08128C14 + mov sb, r3 +_080A502E: + ldr r0, _080A50B4 @ =gMenu + ldrb r0, [r0, #3] + lsls r0, r0, #3 + mov r1, sb + adds r3, r1, r0 + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r2, #8] + ldrb r0, [r3, #6] + strh r0, [r2] + ldrb r0, [r3, #7] + strh r0, [r2, #2] + ldrb r2, [r3, #4] + ldr r0, _080A50B8 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x10 + ands r0, r1 + adds r1, r2, #0 + adds r1, #0xa + cmp r0, #0 + bne _080A505A + adds r1, #1 +_080A505A: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect + movs r3, #0 + mov r8, r3 + mov r7, sb + adds r7, #5 +_080A506A: + ldr r0, _080A50B4 @ =gMenu + adds r0, #0x10 + mov r1, r8 + adds r6, r1, r0 + ldrb r1, [r6] + cmp r1, #0 + beq _080A50FA + mov r3, r8 + lsls r5, r3, #3 + mov r0, sb + adds r3, r0, r5 + ldr r4, _080A50A8 @ =gOamCmd + ldrb r0, [r7, #1] + strh r0, [r4] + ldrb r2, [r7, #2] + strh r2, [r4, #2] + movs r0, #0xe8 + lsls r0, r0, #8 + strh r0, [r4, #8] + cmp r1, #0x33 + bhi _080A50CA + mov r1, r8 + cmp r1, #2 + bne _080A50BC + ldrb r0, [r7] + adds r1, r0, #0 + adds r1, #0xa + movs r0, #0xfd + lsls r0, r0, #1 + b _080A50F6 + .align 2, 0 +_080A50A8: .4byte gOamCmd +_080A50AC: .4byte gUnk_08128C94 +_080A50B0: .4byte gUnk_08128C14 +_080A50B4: .4byte gMenu +_080A50B8: .4byte gMain +_080A50BC: + ldrb r0, [r6] + adds r0, #9 + ldrb r3, [r3, #5] + adds r1, r0, r3 + movs r0, #0xfd + lsls r0, r0, #1 + b _080A50F6 +_080A50CA: + ldr r3, _080A50E0 @ =0x0000EB80 + adds r0, r5, r3 + strh r0, [r4, #8] + cmp r1, #0x3d + beq _080A50E4 + cmp r1, #0x3e + bne _080A50EA + adds r0, r2, #0 + adds r0, #8 + b _080A50E8 + .align 2, 0 +_080A50E0: .4byte 0x0000EB80 +_080A50E4: + adds r0, r2, #0 + adds r0, #0xd +_080A50E8: + strh r0, [r4, #2] +_080A50EA: + ldr r0, _080A5190 @ =gSpriteAnimations_322 + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r0, [r1] + ldrb r1, [r0] + ldr r0, _080A5194 @ =0x00000141 +_080A50F6: + bl DrawDirect +_080A50FA: + adds r7, #8 + movs r0, #1 + add r8, r0 + mov r1, r8 + cmp r1, #0xf + bls _080A506A + ldr r4, _080A5198 @ =gMenu + ldrb r0, [r4, #0x12] + cmp r0, #0 + beq _080A5132 + ldr r2, _080A519C @ =gOamCmd + movs r3, #0x80 + lsls r3, r3, #4 + adds r1, r3, #0 + adds r0, r0, r1 + strh r0, [r2, #8] + mov r3, sb + adds r3, #0x10 + ldrb r0, [r3, #6] + adds r0, #9 + strh r0, [r2] + ldrb r0, [r3, #7] + adds r0, #7 + strh r0, [r2, #2] + movs r0, #0 + movs r1, #1 + bl DrawDirect +_080A5132: + ldrb r0, [r4, #0x13] + cmp r0, #0x3f + bne _080A5188 + mov r3, sb + adds r3, #0x18 + ldr r1, _080A519C @ =gOamCmd + ldrb r0, [r3, #6] + adds r0, #8 + strh r0, [r1] + ldrb r0, [r3, #7] + adds r0, #8 + strh r0, [r1, #2] + ldr r0, _080A51A0 @ =gSave + adds r0, #0xc2 + ldrh r4, [r0] + movs r0, #0 + mov r8, r0 + adds r5, r1, #0 +_080A5156: + adds r0, r4, #0 + movs r1, #0xa + bl __modsi3 + movs r1, #0x80 + lsls r1, r1, #4 + adds r0, r0, r1 + strh r0, [r5, #8] + movs r0, #0 + movs r1, #1 + bl DrawDirect + adds r0, r4, #0 + movs r1, #0xa + bl __divsi3 + adds r4, r0, #0 + ldrh r0, [r5] + subs r0, #8 + strh r0, [r5] + movs r3, #1 + add r8, r3 + mov r0, r8 + cmp r0, #2 + bls _080A5156 +_080A5188: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5190: .4byte gSpriteAnimations_322 +_080A5194: .4byte 0x00000141 +_080A5198: .4byte gMenu +_080A519C: .4byte gOamCmd +_080A51A0: .4byte gSave +.else + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r2, _080A5890 @ =gOamCmd + movs r1, #0 + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r2, #4] + strh r1, [r2, #6] + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + ldr r1, _080A5894 @ =gUnk_08128C94 + mov sb, r1 + cmp r0, #0 + bne _080A581A + ldr r3, _080A5898 @ =gUnk_08128C14 + mov sb, r3 +_080A581A: + ldr r0, _080A589C @ =gMenu + ldrb r0, [r0, #3] + lsls r0, r0, #3 + mov r1, sb + adds r3, r1, r0 + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r2, #8] + ldrb r0, [r3, #6] + strh r0, [r2] + ldrb r0, [r3, #7] + strh r0, [r2, #2] + ldrb r2, [r3, #4] + ldr r0, _080A58A0 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x10 + ands r0, r1 + adds r1, r2, #0 + adds r1, #0xa + cmp r0, #0 + bne _080A5846 + adds r1, #1 +_080A5846: + ldr r0, _080A58A4 @ =0x000001FB + bl DrawDirect + movs r3, #0 + mov r8, r3 + mov r7, sb + adds r7, #5 +_080A5854: + ldr r0, _080A589C @ =gMenu + adds r0, #0x10 + mov r1, r8 + adds r6, r1, r0 + ldrb r1, [r6] + cmp r1, #0 + beq _080A58E8 + mov r3, r8 + lsls r5, r3, #3 + mov r0, sb + adds r3, r0, r5 + ldr r4, _080A5890 @ =gOamCmd + ldrb r0, [r7, #1] + strh r0, [r4] + ldrb r2, [r7, #2] + strh r2, [r4, #2] + movs r0, #0xe8 + lsls r0, r0, #8 + strh r0, [r4, #8] + cmp r1, #0x33 + bhi _080A58B8 + mov r1, r8 + cmp r1, #2 + bne _080A58A8 + ldrb r0, [r7] + adds r1, r0, #0 + adds r1, #0xa + ldr r0, _080A58A4 @ =0x000001FB + b _080A58E4 + .align 2, 0 +_080A5890: .4byte gOamCmd +_080A5894: .4byte gUnk_08128C94 +_080A5898: .4byte gUnk_08128C14 +_080A589C: .4byte gMenu +_080A58A0: .4byte gMain +_080A58A4: .4byte 0x000001FB +_080A58A8: + ldrb r0, [r6] + adds r0, #9 + ldrb r3, [r3, #5] + adds r1, r0, r3 + ldr r0, _080A58B4 @ =0x000001FB + b _080A58E4 + .align 2, 0 +_080A58B4: .4byte 0x000001FB +_080A58B8: + ldr r3, _080A58CC @ =0x0000EB80 + adds r0, r5, r3 + strh r0, [r4, #8] + cmp r1, #0x3d + beq _080A58D0 + cmp r1, #0x3e + bne _080A58D6 + adds r0, r2, #0 + adds r0, #8 + b _080A58D4 + .align 2, 0 +_080A58CC: .4byte 0x0000EB80 +_080A58D0: + adds r0, r2, #0 + adds r0, #0xd +_080A58D4: + strh r0, [r4, #2] +_080A58D6: + ldr r0, _080A5980 @ =gSpriteAnimations_322 + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r0, [r1] + ldrb r1, [r0] + movs r0, #0xa1 + lsls r0, r0, #1 +_080A58E4: + bl DrawDirect +_080A58E8: + adds r7, #8 + movs r0, #1 + add r8, r0 + mov r1, r8 + cmp r1, #0xf + bls _080A5854 + ldr r4, _080A5984 @ =gMenu + ldrb r0, [r4, #0x12] + cmp r0, #0 + beq _080A5920 + ldr r2, _080A5988 @ =gOamCmd + movs r3, #0x80 + lsls r3, r3, #4 + adds r1, r3, #0 + adds r0, r0, r1 + strh r0, [r2, #8] + mov r3, sb + adds r3, #0x10 + ldrb r0, [r3, #6] + adds r0, #9 + strh r0, [r2] + ldrb r0, [r3, #7] + adds r0, #7 + strh r0, [r2, #2] + movs r0, #0 + movs r1, #1 + bl DrawDirect +_080A5920: + ldrb r0, [r4, #0x13] + cmp r0, #0x3f + bne _080A5976 + mov r3, sb + adds r3, #0x18 + ldr r1, _080A5988 @ =gOamCmd + ldrb r0, [r3, #6] + adds r0, #8 + strh r0, [r1] + ldrb r0, [r3, #7] + adds r0, #8 + strh r0, [r1, #2] + ldr r0, _080A598C @ =gSave + adds r0, #0xc2 + ldrh r4, [r0] + movs r0, #0 + mov r8, r0 + adds r5, r1, #0 +_080A5944: + adds r0, r4, #0 + movs r1, #0xa + bl __modsi3 + movs r1, #0x80 + lsls r1, r1, #4 + adds r0, r0, r1 + strh r0, [r5, #8] + movs r0, #0 + movs r1, #1 + bl DrawDirect + adds r0, r4, #0 + movs r1, #0xa + bl __divsi3 + adds r4, r0, #0 + ldrh r0, [r5] + subs r0, #8 + strh r0, [r5] + movs r3, #1 + add r8, r3 + mov r0, r8 + cmp r0, #2 + bls _080A5944 +_080A5976: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5980: .4byte gSpriteAnimations_322 +_080A5984: .4byte gMenu +_080A5988: .4byte gOamCmd +_080A598C: .4byte gSave +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A59C8.inc b/asm/non_matching/subtask2/sub_080A59C8.inc new file mode 100644 index 00000000..028c4e2a --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A59C8.inc @@ -0,0 +1,72 @@ + .syntax unified + push {lr} + bl sub_080A51F4 + cmp r0, #0 + beq _080A5A52 + ldr r1, _080A59EC @ =gMenu + ldrb r2, [r1, #3] + movs r3, #0 + ldr r0, _080A59F0 @ =gInput + ldrh r0, [r0, #2] + cmp r0, #2 + beq _080A5A02 + cmp r0, #2 + bgt _080A59F4 + cmp r0, #1 + beq _080A5A0A + b _080A5A0C + .align 2, 0 +_080A59EC: .4byte gMenu +_080A59F0: .4byte gInput +_080A59F4: + cmp r0, #0x40 + beq _080A59FE + cmp r0, #0x80 + beq _080A5A06 + b _080A5A0C +_080A59FE: + movs r2, #0 + b _080A5A0C +_080A5A02: + cmp r2, #0 + bne _080A5A10 +_080A5A06: + movs r2, #1 + b _080A5A0C +_080A5A0A: + movs r3, #1 +_080A5A0C: + cmp r3, #0 + beq _080A5A3C +_080A5A10: + movs r0, #0xff + strh r0, [r1, #8] + cmp r2, #0 + bne _080A5A2E + movs r0, #8 + movs r1, #0 + bl CreateDialogBox + movs r0, #2 + bl SetMenuType + movs r0, #0x6a + bl SoundReq + b _080A5A52 +_080A5A2E: + movs r0, #3 + bl SetMenuType + movs r0, #0x6c + bl SoundReq + b _080A5A52 +_080A5A3C: + ldrb r0, [r1, #3] + cmp r0, r2 + beq _080A5A52 + strb r2, [r1, #3] + movs r0, #0 + adds r1, r2, #0 + bl SetPopupState + movs r0, #0x69 + bl SoundReq +_080A5A52: + pop {pc} + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5A90.inc b/asm/non_matching/subtask2/sub_080A5A90.inc new file mode 100644 index 00000000..03c9de07 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5A90.inc @@ -0,0 +1,40 @@ + .syntax unified + push {lr} + ldr r2, _080A5AA4 @ =gMenu + ldrh r0, [r2, #8] + cmp r0, #0 + beq _080A5AA8 + cmp r0, #0xff + beq _080A5AC0 + subs r0, #1 + strh r0, [r2, #8] + b _080A5AD2 + .align 2, 0 +_080A5AA4: .4byte gMenu +_080A5AA8: + ldr r0, _080A5ABC @ =gInput + ldrh r1, [r0, #2] + movs r0, #0xb + ands r0, r1 + cmp r0, #0 + beq _080A5AD2 + movs r0, #0xff + strh r0, [r2, #8] + b _080A5AD2 + .align 2, 0 +_080A5ABC: .4byte gInput +_080A5AC0: + ldr r0, _080A5AD4 @ =gUnk_02034490 + ldrb r0, [r0, #1] + movs r1, #1 + cmp r0, #0xa + bne _080A5ACC + movs r1, #2 +_080A5ACC: + adds r0, r1, #0 + bl sub_080A4E84 +_080A5AD2: + pop {pc} + .align 2, 0 +_080A5AD4: .4byte gUnk_02034490 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5AD8.inc b/asm/non_matching/subtask2/sub_080A5AD8.inc new file mode 100644 index 00000000..d5cbe09d --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5AD8.inc @@ -0,0 +1,14 @@ + .syntax unified + push {lr} + ldr r1, _080A5AEC @ =gUnk_08128D24 + ldr r0, _080A5AF0 @ =gMenu + ldrb r0, [r0, #5] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl _call_via_r0 + pop {pc} + .align 2, 0 +_080A5AEC: .4byte gUnk_08128D24 +_080A5AF0: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5AF4.inc b/asm/non_matching/subtask2/sub_080A5AF4.inc new file mode 100644 index 00000000..5d3d6723 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5AF4.inc @@ -0,0 +1,48 @@ + .syntax unified +.ifdef EU + push {lr} + ldr r1, _080A5B18 @ =gMenu + movs r0, #0 + strb r0, [r1, #3] +.else + push {r4, lr} + ldr r0, _080A5B18 @ =gMenu + movs r4, #0 + strb r4, [r0, #3] +.endif + movs r0, #2 + movs r1, #0 + bl SetPopupState +.ifndef EU + movs r0, #0x80 + lsls r0, r0, #0x12 + ldrb r0, [r0, #7] + cmp r0, #0 + bne _080A5B24 + ldr r1, _080A5B1C @ =gScreen + ldr r0, _080A5B20 @ =0x0000FFFC + strh r0, [r1, #0x18] + b _080A5B28 + .align 2, 0 +_080A5B18: .4byte gMenu +_080A5B1C: .4byte gScreen +_080A5B20: .4byte 0x0000FFFC +_080A5B24: + ldr r0, _080A5B30 @ =gScreen + strh r4, [r0, #0x18] +.endif +_080A5B28: + movs r0, #1 + bl SetMenuType +.ifdef EU + pop {pc} +.else + pop {r4, pc} +.endif + .align 2, 0 +.ifdef EU +_080A5B18: .4byte gMenu +.else +_080A5B30: .4byte gScreen +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5B34.inc b/asm/non_matching/subtask2/sub_080A5B34.inc new file mode 100644 index 00000000..ddef33a6 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5B34.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, r5, r6, lr} + bl sub_080A51F4 + cmp r0, #0 + beq _080A5BB6 + ldr r1, _080A5B58 @ =gMenu + ldrb r4, [r1, #3] + movs r5, #0 + ldr r0, _080A5B5C @ =gInput + ldrh r0, [r0, #2] + adds r6, r1, #0 + cmp r0, #2 + beq _080A5B6C + cmp r0, #2 + bgt _080A5B60 + cmp r0, #1 + beq _080A5B74 + b _080A5B76 + .align 2, 0 +_080A5B58: .4byte gMenu +_080A5B5C: .4byte gInput +_080A5B60: + cmp r0, #0x10 + beq _080A5B70 + cmp r0, #0x20 + bne _080A5B76 + movs r4, #0 + b _080A5B76 +_080A5B6C: + cmp r4, #0 + bne _080A5B74 +_080A5B70: + movs r4, #1 + b _080A5B76 +_080A5B74: + movs r5, #1 +_080A5B76: + adds r1, r6, #0 + ldrb r0, [r1, #3] + cmp r0, r4 + beq _080A5B8E + strb r4, [r1, #3] + movs r0, #2 + adds r1, r4, #0 + bl SetPopupState + movs r0, #0x69 + bl SoundReq +_080A5B8E: + cmp r5, #0 + beq _080A5BB6 + cmp r4, #0 + bne _080A5BAA + movs r0, #7 + movs r1, #0x20 + bl SetFade + movs r0, #0x3c + strh r0, [r6, #8] + movs r0, #2 + bl SetMenuType + b _080A5BB6 +_080A5BAA: + movs r0, #0x6c + bl SoundReq + movs r0, #2 + bl sub_080A4E84 +_080A5BB6: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5BB8.inc b/asm/non_matching/subtask2/sub_080A5BB8.inc new file mode 100644 index 00000000..b1778bc3 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5BB8.inc @@ -0,0 +1,26 @@ + .syntax unified + push {lr} + ldr r0, _080A5BE4 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A5BE2 + bl sub_08050384 + ldr r1, _080A5BE8 @ =gMain + ldrb r0, [r1, #1] + movs r0, #1 + strb r0, [r1, #1] + movs r0, #6 + movs r1, #8 + bl SetFade + movs r0, #2 + bl sub_080A4E84 + ldr r1, _080A5BEC @ =gUnk_02034490 + movs r0, #0x10 + strb r0, [r1, #0x16] +_080A5BE2: + pop {pc} + .align 2, 0 +_080A5BE4: .4byte gFadeControl +_080A5BE8: .4byte gMain +_080A5BEC: .4byte gUnk_02034490 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5BF0.inc b/asm/non_matching/subtask2/sub_080A5BF0.inc new file mode 100644 index 00000000..33bc2c30 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5BF0.inc @@ -0,0 +1,38 @@ + .syntax unified + push {r4, r5, lr} + ldr r1, _080A5C30 @ =gUnk_08128D30 + ldr r0, _080A5C34 @ =gMenu + ldrb r0, [r0, #5] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl _call_via_r0 + bl sub_080A5D1C + ldr r0, _080A5C38 @ =gMain + ldrh r0, [r0, #0xc] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _080A5C2E + ldr r4, _080A5C3C @ =gUnk_02017830 + ldrh r5, [r4] + adds r0, r4, #2 + adds r1, r4, #0 + movs r2, #0xe + bl MemCopy + strh r5, [r4, #0xe] + ldr r2, _080A5C40 @ =gUsedPalettes + ldr r0, [r2] + movs r1, #0x80 + lsls r1, r1, #5 + orrs r0, r1 + str r0, [r2] +_080A5C2E: + pop {r4, r5, pc} + .align 2, 0 +_080A5C30: .4byte gUnk_08128D30 +_080A5C34: .4byte gMenu +_080A5C38: .4byte gMain +_080A5C3C: .4byte gUnk_02017830 +_080A5C40: .4byte gUsedPalettes + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5C9C.inc b/asm/non_matching/subtask2/sub_080A5C9C.inc new file mode 100644 index 00000000..85900078 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5C9C.inc @@ -0,0 +1,47 @@ + .syntax unified + push {lr} + bl sub_080A51F4 + cmp r0, #0 + beq _080A5CFA + ldr r0, _080A5CC4 @ =gArea + ldrb r0, [r0, #3] + lsls r0, r0, #2 + ldr r1, _080A5CC8 @ =gUnk_080C9C6C + adds r3, r0, r1 + ldr r1, _080A5CCC @ =gMenu + ldrb r2, [r1, #3] + ldr r0, _080A5CD0 @ =gInput + ldrh r0, [r0, #2] + cmp r0, #0x40 + beq _080A5CD4 + cmp r0, #0x80 + beq _080A5CDC + b _080A5CE6 + .align 2, 0 +_080A5CC4: .4byte gArea +_080A5CC8: .4byte gUnk_080C9C6C +_080A5CCC: .4byte gMenu +_080A5CD0: .4byte gInput +_080A5CD4: + cmp r2, #0 + ble _080A5CE6 + subs r2, #1 + b _080A5CE6 +_080A5CDC: + ldrb r0, [r3] + subs r0, #1 + cmp r0, r2 + ble _080A5CE6 + adds r2, #1 +_080A5CE6: + ldrb r0, [r1, #3] + cmp r0, r2 + beq _080A5CFA + strb r2, [r1, #3] + adds r0, r2, #0 + bl sub_080A5CFC + movs r0, #0x69 + bl SoundReq +_080A5CFA: + pop {pc} + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5D1C.inc b/asm/non_matching/subtask2/sub_080A5D1C.inc new file mode 100644 index 00000000..2ceb19ca --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5D1C.inc @@ -0,0 +1,513 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _080A5690 @ =gArea + ldrb r0, [r0, #3] + lsls r0, r0, #2 + ldr r1, _080A5694 @ =gUnk_080C9C6C + adds r7, r0, r1 + ldr r1, _080A5698EU @ =gUnk_08128D3C + ldrb r0, [r7] + adds r0, r0, r1 + ldrb r6, [r0] + bl sub_0801DB94 + mov r8, r0 + ldr r5, _080A569CEU @ =gOamCmd + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r5, #4] + movs r0, #0 + strh r0, [r5, #6] + strh r0, [r5, #8] + movs r0, #0x34 + strh r0, [r5] + ldr r0, _080A56A0 @ =gMenu + ldrb r1, [r0, #3] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + ldr r1, _080A56A4 @ =gMain + mov sl, r1 + ldrh r1, [r1, #0xc] + movs r0, #0x10 + ands r0, r1 + movs r1, #0x74 + cmp r0, #0 + bne _080A5560 + movs r1, #0x75 +_080A5560: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect + movs r0, #0x20 + mov sb, r0 + mov r1, sb + strh r1, [r5] + mov r1, r8 + lsls r0, r1, #1 + add r0, r8 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + mov r0, sl + ldrh r1, [r0, #0xc] + mov r0, sb + ands r0, r1 + movs r1, #0x79 + cmp r0, #0 + beq _080A558C + movs r1, #0x78 +_080A558C: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect + movs r0, #0x7e + strh r0, [r5, #2] + movs r0, #0x87 + lsls r0, r0, #7 + strh r0, [r5, #8] + bl HasDungeonSmallKey + cmp r0, #0 + beq _080A55BE + movs r0, #0x18 + strh r0, [r5] + ldr r0, _080A56A8 @ =gSpriteAnimations_322 + movs r1, #0xa0 + lsls r1, r1, #1 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r4, [r0] + ldr r0, _080A56ACEU @ =0x00000143 + adds r1, r4, #0 + bl DrawDirect +_080A55BE: + bl HasDungeonCompass + cmp r0, #0 + beq _080A55DE + movs r0, #0x2e + strh r0, [r5] + ldr r0, _080A56A8 @ =gSpriteAnimations_322 + movs r1, #0xa4 + lsls r1, r1, #1 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r4, [r0] + ldr r0, _080A56ACEU @ =0x00000143 + adds r1, r4, #0 + bl DrawDirect +_080A55DE: + bl HasDungeonBigKey + cmp r0, #0 + beq _080A563CEU + movs r0, #0x45 + strh r0, [r5] + movs r0, #0xe0 + lsls r0, r0, #2 + strh r0, [r5, #8] + ldr r0, _080A56A8 @ =gSpriteAnimations_322 + movs r1, #0xa2 + lsls r1, r1, #1 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r4, [r0] + ldr r0, _080A56ACEU @ =0x00000143 + adds r1, r4, #0 + bl DrawDirect + bl sub_080A5F24 + cmp r0, #0 + beq _080A563CEU + movs r0, #0 + strh r0, [r5, #8] + movs r0, #0x46 + strh r0, [r5] + ldrb r1, [r7, #1] + ldrb r0, [r7, #2] + subs r1, r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + mov r0, sl + ldrh r1, [r0, #0xc] + mov r0, sb + ands r0, r1 + movs r1, #0x7b + cmp r0, #0 + beq _080A5634EU + movs r1, #0x7a +_080A5634EU: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect +_080A563CEU: + ldr r1, _080A569CEU @ =gOamCmd + movs r0, #0 + strh r0, [r1, #8] + movs r0, #0x34 + strh r0, [r1] + strh r6, [r1, #2] + ldrb r0, [r7, #1] + adds r4, r0, #0 + adds r4, #0x82 + movs r5, #0 + ldrb r0, [r7] + cmp r5, r0 + bhs _080A5672 + adds r6, r1, #0 +_080A5658: + movs r0, #0xfd + lsls r0, r0, #1 + adds r1, r4, #0 + bl DrawDirect + subs r4, #1 + ldrh r0, [r6, #2] + adds r0, #0xc + strh r0, [r6, #2] + adds r5, #1 + ldrb r1, [r7] + cmp r5, r1 + blo _080A5658 +_080A5672: + ldr r5, _080A56B0 @ =gUnk_02019EE0 + ldrb r0, [r5] + cmp r0, #0 + beq _080A570E + ldr r7, _080A569CEU @ =gOamCmd + ldr r6, _080A56B4 @ =gScreen +_080A567E: + ldrb r0, [r5] + cmp r0, #2 + beq _080A56D4EU + cmp r0, #2 + bgt _080A56B8 + cmp r0, #1 + beq _080A56C2 + b _080A56E6 + .align 2, 0 +_080A5690: .4byte gArea +_080A5694: .4byte gUnk_080C9C6C +_080A5698EU: .4byte gUnk_08128D3C +_080A569CEU: .4byte gOamCmd +_080A56A0: .4byte gMenu +_080A56A4: .4byte gMain +_080A56A8: .4byte gSpriteAnimations_322 +_080A56ACEU: .4byte 0x00000143 +_080A56B0: .4byte gUnk_02019EE0 +_080A56B4: .4byte gScreen +_080A56B8: + cmp r0, #3 + beq _080A56D8EU + cmp r0, #4 + beq _080A56DCEU + b _080A56E6 +_080A56C2: + movs r4, #0x7d + ldr r0, _080A56D0EU @ =gMenu + ldrb r0, [r0, #3] + cmp r8, r0 + beq _080A56E8 + movs r4, #0x7e + b _080A56E8 + .align 2, 0 +_080A56D0EU: .4byte gMenu +_080A56D4EU: + movs r4, #0x80 + b _080A56E8 +_080A56D8EU: + movs r4, #0x81 + b _080A56E8 +_080A56DCEU: + bl sub_080A5F24 + movs r4, #0x7f + cmp r0, #0 + bne _080A56E8 +_080A56E6: + movs r4, #0xff +_080A56E8: + ldrb r0, [r5, #1] + adds r0, #0x50 + ldrh r1, [r6, #0x16] + subs r0, r0, r1 + strh r0, [r7] + ldrb r0, [r5, #2] + adds r0, #0x10 + ldrh r1, [r6, #0x18] + subs r0, r0, r1 + strh r0, [r7, #2] + movs r0, #0xfd + lsls r0, r0, #1 + adds r1, r4, #0 + bl DrawDirect + adds r5, #3 + ldrb r0, [r5] + cmp r0, #0 + bne _080A567E +_080A570E: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} +.else + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _080A5E98 @ =gArea + ldrb r0, [r0, #3] + lsls r0, r0, #2 + ldr r1, _080A5E9C @ =gUnk_080C9C6C + adds r7, r0, r1 + ldr r1, _080A5EA0 @ =gUnk_08128D3C + ldrb r0, [r7] + adds r0, r0, r1 + ldrb r6, [r0] + bl sub_0801DB94 + mov r8, r0 + ldr r5, _080A5EA4 @ =gOamCmd + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r5, #4] + movs r0, #0 + strh r0, [r5, #6] + strh r0, [r5, #8] + movs r0, #0x34 + strh r0, [r5] + ldr r0, _080A5EA8 @ =gMenu + ldrb r1, [r0, #3] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + ldr r1, _080A5EAC @ =gMain + mov sl, r1 + ldrh r1, [r1, #0xc] + movs r0, #0x10 + ands r0, r1 + movs r1, #0x74 + cmp r0, #0 + bne _080A5D70 + movs r1, #0x75 +_080A5D70: + ldr r0, _080A5EB0 @ =0x000001FB + bl DrawDirect + movs r0, #0x20 + mov sb, r0 + mov r1, sb + strh r1, [r5] + mov r1, r8 + lsls r0, r1, #1 + add r0, r8 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + mov r0, sl + ldrh r1, [r0, #0xc] + mov r0, sb + ands r0, r1 + movs r1, #0x79 + cmp r0, #0 + beq _080A5D9A + movs r1, #0x78 +_080A5D9A: + ldr r0, _080A5EB0 @ =0x000001FB + bl DrawDirect + movs r0, #0x7e + strh r0, [r5, #2] + movs r0, #0x87 + lsls r0, r0, #7 + strh r0, [r5, #8] + bl HasDungeonSmallKey + cmp r0, #0 + beq _080A5DCC + movs r0, #0x18 + strh r0, [r5] + ldr r0, _080A5EB4 @ =gSpriteAnimations_322 + movs r1, #0xa0 + lsls r1, r1, #1 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r4, [r0] + movs r0, #0xa2 + lsls r0, r0, #1 + adds r1, r4, #0 + bl DrawDirect +_080A5DCC: + bl HasDungeonCompass + cmp r0, #0 + beq _080A5DEE + movs r0, #0x2e + strh r0, [r5] + ldr r0, _080A5EB4 @ =gSpriteAnimations_322 + movs r1, #0xa4 + lsls r1, r1, #1 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r4, [r0] + movs r0, #0xa2 + lsls r0, r0, #1 + adds r1, r4, #0 + bl DrawDirect +_080A5DEE: + bl HasDungeonBigKey + cmp r0, #0 + beq _080A5E48 + movs r0, #0x45 + strh r0, [r5] + movs r0, #0xe0 + lsls r0, r0, #2 + strh r0, [r5, #8] + ldr r1, _080A5EB4 @ =gSpriteAnimations_322 + movs r0, #0xa2 + lsls r0, r0, #1 + adds r1, r1, r0 + ldr r1, [r1] + ldrb r4, [r1] + adds r1, r4, #0 + bl DrawDirect + bl sub_080A5F24 + cmp r0, #0 + beq _080A5E48 + movs r0, #0 + strh r0, [r5, #8] + movs r0, #0x46 + strh r0, [r5] + ldrb r1, [r7, #1] + ldrb r0, [r7, #2] + subs r1, r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r6, r0 + strh r0, [r5, #2] + mov r0, sl + ldrh r1, [r0, #0xc] + mov r0, sb + ands r0, r1 + movs r1, #0x7b + cmp r0, #0 + beq _080A5E42 + movs r1, #0x7a +_080A5E42: + ldr r0, _080A5EB0 @ =0x000001FB + bl DrawDirect +_080A5E48: + ldr r1, _080A5EA4 @ =gOamCmd + movs r0, #0 + strh r0, [r1, #8] + movs r0, #0x34 + strh r0, [r1] + strh r6, [r1, #2] + ldrb r0, [r7, #1] + adds r4, r0, #0 + adds r4, #0x82 + movs r5, #0 + ldrb r0, [r7] + cmp r5, r0 + bhs _080A5E7C + adds r6, r1, #0 +_080A5E64: + ldr r0, _080A5EB0 @ =0x000001FB + adds r1, r4, #0 + bl DrawDirect + subs r4, #1 + ldrh r0, [r6, #2] + adds r0, #0xc + strh r0, [r6, #2] + adds r5, #1 + ldrb r1, [r7] + cmp r5, r1 + blo _080A5E64 +_080A5E7C: + ldr r5, _080A5EB8 @ =gUnk_02019EE0 + ldrb r0, [r5] + cmp r0, #0 + beq _080A5F14 + ldr r7, _080A5EA4 @ =gOamCmd + ldr r6, _080A5EBC @ =gScreen +_080A5E88: + ldrb r0, [r5] + cmp r0, #2 + beq _080A5EDC + cmp r0, #2 + bgt _080A5EC0 + cmp r0, #1 + beq _080A5ECA + b _080A5EEE + .align 2, 0 +_080A5E98: .4byte gArea +_080A5E9C: .4byte gUnk_080C9C6C +_080A5EA0: .4byte gUnk_08128D3C +_080A5EA4: .4byte gOamCmd +_080A5EA8: .4byte gMenu +_080A5EAC: .4byte gMain +_080A5EB0: .4byte 0x000001FB +_080A5EB4: .4byte gSpriteAnimations_322 +_080A5EB8: .4byte gUnk_02019EE0 +_080A5EBC: .4byte gScreen +_080A5EC0: + cmp r0, #3 + beq _080A5EE0 + cmp r0, #4 + beq _080A5EE4 + b _080A5EEE +_080A5ECA: + movs r4, #0x7d + ldr r0, _080A5ED8 @ =gMenu + ldrb r0, [r0, #3] + cmp r8, r0 + beq _080A5EF0 + movs r4, #0x7e + b _080A5EF0 + .align 2, 0 +_080A5ED8: .4byte gMenu +_080A5EDC: + movs r4, #0x80 + b _080A5EF0 +_080A5EE0: + movs r4, #0x81 + b _080A5EF0 +_080A5EE4: + bl sub_080A5F24 + movs r4, #0x7f + cmp r0, #0 + bne _080A5EF0 +_080A5EEE: + movs r4, #0xff +_080A5EF0: + ldrb r0, [r5, #1] + adds r0, #0x50 + ldrh r1, [r6, #0x16] + subs r0, r0, r1 + strh r0, [r7] + ldrb r0, [r5, #2] + adds r0, #0x10 + ldrh r1, [r6, #0x18] + subs r0, r0, r1 + strh r0, [r7, #2] + ldr r0, _080A5F20 @ =0x000001FB + adds r1, r4, #0 + bl DrawDirect + adds r5, #3 + ldrb r0, [r5] + cmp r0, #0 + bne _080A5E88 +_080A5F14: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5F20: .4byte 0x000001FB +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A5F48.inc b/asm/non_matching/subtask2/sub_080A5F48.inc new file mode 100644 index 00000000..50fad184 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A5F48.inc @@ -0,0 +1,94 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + cmp r4, #0x1f + bhi _080A5F5C + cmp r4, #0x1c + blo _080A5F5C + ldr r0, _080A5F9C @ =gSave + adds r0, r0, r4 + adds r0, #0x9a + ldrb r4, [r0] +_080A5F5C: + lsls r0, r1, #5 + ldr r1, _080A5FA0 @ =0x06010000 + adds r5, r0, r1 + ldr r1, _080A5FA4 @ =gSpriteAnimations_322 + lsls r0, r4, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldrb r1, [r0] + ldr r3, _080A5FA8 @ =gMoreSpritePtrs + lsls r1, r1, #2 + ldr r0, [r3, #4] + adds r0, r0, r1 + ldr r2, _080A5FAC @ =0x040000D4 + ldrh r1, [r0, #2] + lsls r1, r1, #5 + ldr r0, [r3, #8] + adds r0, r0, r1 + str r0, [r2] + str r5, [r2, #4] + ldr r0, _080A5FB0 @ =0x84000040 + str r0, [r2, #8] + ldr r0, [r2, #8] + movs r0, #1 + rsbs r0, r0, #0 + cmp r4, #7 + blo _080A5FBE + cmp r4, #8 + bhi _080A5FB4 + ldr r0, _080A5F9C @ =gSave + adds r0, #0xac + b _080A5FBC + .align 2, 0 +_080A5F9C: .4byte gSave +_080A5FA0: .4byte 0x06010000 +_080A5FA4: .4byte gSpriteAnimations_322 +_080A5FA8: .4byte gMoreSpritePtrs +_080A5FAC: .4byte 0x040000D4 +_080A5FB0: .4byte 0x84000040 +_080A5FB4: + cmp r4, #0xa + bhi _080A5FBE + ldr r0, _080A5FF8 @ =gSave + adds r0, #0xad +_080A5FBC: + ldrb r0, [r0] +_080A5FBE: + cmp r0, #0 + blt _080A5FF6 + movs r1, #0xa + bl Div + adds r4, r1, #0 + cmp r0, #9 + ble _080A5FD0 + movs r0, #9 +_080A5FD0: + ldr r1, _080A5FFC @ =0x040000D4 + lsls r0, r0, #5 + ldr r2, _080A6000 @ =gUnk_085C4620 + adds r0, r0, r2 + str r0, [r1] + str r5, [r1, #4] + ldr r3, _080A6004 @ =0x84000008 + str r3, [r1, #8] + ldr r0, [r1, #8] + adds r0, r4, #0 + adds r0, #0xa + lsls r0, r0, #5 + adds r0, r0, r2 + str r0, [r1] + adds r0, r5, #0 + adds r0, #0x20 + str r0, [r1, #4] + str r3, [r1, #8] + ldr r0, [r1, #8] +_080A5FF6: + pop {r4, r5, pc} + .align 2, 0 +_080A5FF8: .4byte gSave +_080A5FFC: .4byte 0x040000D4 +_080A6000: .4byte gUnk_085C4620 +_080A6004: .4byte 0x84000008 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6044.inc b/asm/non_matching/subtask2/sub_080A6044.inc new file mode 100644 index 00000000..01a29afa --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6044.inc @@ -0,0 +1,75 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + bl sub_080A51F4 + cmp r0, #0 + beq _080A60C2 + ldr r0, _080A60CC @ =gMenu + ldr r1, _080A60D0 @ =gUnk_08128D51 + str r1, [r0, #0xc] + ldr r1, _080A60D4 @ =gOamCmd + movs r0, #0 + strh r0, [r1, #4] + strh r0, [r1, #6] + movs r5, #0 + movs r4, #0 + ldr r0, _080A60D8 @ =gSave + movs r2, #0x8c + lsls r2, r2, #1 + adds r3, r0, r2 + ldrb r2, [r3] + cmp r2, #0 + beq _080A60C2 + adds r6, r1, #0 + movs r1, #0 + mov sb, r1 + adds r7, r0, #0 + mov r8, r3 +_080A607E: + movs r1, #3 + ands r1, r5 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + adds r0, #0x2b + strh r0, [r6] + lsrs r1, r5, #2 + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, #0x34 + strh r0, [r6, #2] + ldr r3, _080A60DC @ =0x0000012B + adds r0, r7, r3 + adds r0, r4, r0 + ldrb r1, [r0] + ldr r0, _080A60CC @ =gMenu + mov r3, sb + strb r3, [r0, #1] + adds r0, r2, #0 + bl sub_080A42E0 + adds r5, #1 + cmp r5, #0xa + bhi _080A60C2 + adds r4, #1 + cmp r4, #0x11 + bhi _080A60C2 + mov r1, r8 + adds r0, r4, r1 + ldrb r2, [r0] + cmp r2, #0 + bne _080A607E +_080A60C2: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A60CC: .4byte gMenu +_080A60D0: .4byte gUnk_08128D51 +_080A60D4: .4byte gOamCmd +_080A60D8: .4byte gSave +_080A60DC: .4byte 0x0000012B + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A612C.inc b/asm/non_matching/subtask2/sub_080A612C.inc new file mode 100644 index 00000000..ae8c6e9f --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A612C.inc @@ -0,0 +1,42 @@ + .syntax unified + push {lr} + bl sub_080A51F4 + cmp r0, #0 + beq _080A6178 + ldr r1, _080A614C @ =gMenu + ldrb r2, [r1, #3] + ldr r0, _080A6150 @ =gInput + ldrh r0, [r0, #2] + cmp r0, #0x10 + beq _080A6154 + cmp r0, #0x20 + bne _080A6156 + subs r2, #1 + b _080A6156 + .align 2, 0 +_080A614C: .4byte gMenu +_080A6150: .4byte gInput +_080A6154: + adds r2, #1 +_080A6156: + adds r3, r2, #0 + adds r3, #8 + adds r0, r3, #0 + cmp r3, #0 + bge _080A6164 + adds r0, r2, #0 + adds r0, #0xf +_080A6164: + asrs r2, r0, #3 + lsls r0, r2, #3 + subs r2, r3, r0 + ldrb r0, [r1, #3] + cmp r0, r2 + beq _080A6178 + strb r2, [r1, #3] + movs r0, #0x69 + bl SoundReq +_080A6178: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A617C.inc b/asm/non_matching/subtask2/sub_080A617C.inc new file mode 100644 index 00000000..7c4e8fe6 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A617C.inc @@ -0,0 +1,234 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r6, _080A5A50 @ =gOamCmd + movs r0, #0 + strh r0, [r6, #4] + strh r0, [r6, #6] + movs r7, #0xc0 + lsls r7, r7, #4 + strh r7, [r6, #8] + movs r0, #0x2f + mov r8, r0 + mov r2, r8 + strh r2, [r6, #2] + ldr r4, _080A5A54 @ =gMenu + ldrb r1, [r4, #3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + subs r0, r0, r1 + adds r0, #0x1a + strh r0, [r6] + ldr r0, _080A5A58 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x20 + ands r0, r1 + movs r1, #9 + cmp r0, #0 + beq _080A59AC + movs r1, #8 +_080A59AC: + ldr r5, _080A5A5C @ =0x000001FB + adds r0, r5, #0 + bl DrawDirect + ldrb r0, [r4, #3] + lsls r0, r0, #3 + ldr r1, _080A5A60 @ =gUnk_08128D70 + adds r4, r0, r1 + ldrb r0, [r4] + bl GetInventoryValue + cmp r0, #0 + beq _080A5A0E + strh r7, [r6, #8] + movs r0, #0xcc + strh r0, [r6] + movs r0, #0x88 + strh r0, [r6, #2] + adds r0, r5, #0 + movs r1, #0xb + bl DrawDirect + movs r0, #0x30 + strh r0, [r6] + movs r0, #0x6c + strh r0, [r6, #2] + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + movs r2, #0xd8 + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r6, #8] + ldrb r1, [r4, #2] + adds r0, r5, #0 + bl DrawDirect + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + orrs r0, r7 + strh r0, [r6, #8] + movs r0, #0x78 + strh r0, [r6] + movs r0, #0x68 + strh r0, [r6, #2] + adds r0, r5, #0 + movs r1, #0xc + bl DrawDirect +_080A5A0E: + mov r0, r8 + strh r0, [r6, #2] + movs r5, #0 + adds r7, r6, #0 + movs r6, #0x18 +_080A5A18: + lsls r1, r5, #3 + ldr r0, _080A5A60 @ =gUnk_08128D70 + adds r4, r1, r0 + ldrb r0, [r4] + bl GetInventoryValue + cmp r0, #0 + beq _080A5A40 + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + movs r2, #0xc0 + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r7, #8] + strh r6, [r7] + ldr r0, _080A5A5C @ =0x000001FB + movs r1, #0xa + bl DrawDirect +_080A5A40: + adds r6, #0x1b + adds r5, #1 + cmp r5, #7 + bls _080A5A18 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5A50: .4byte gOamCmd +_080A5A54: .4byte gMenu +_080A5A58: .4byte gMain +_080A5A5C: .4byte 0x000001FB +_080A5A60: .4byte gUnk_08128D70 +.else + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r6, _080A6260 @ =gOamCmd + movs r0, #0 + strh r0, [r6, #4] + strh r0, [r6, #6] + movs r7, #0xc0 + lsls r7, r7, #4 + strh r7, [r6, #8] + movs r0, #0x2f + mov r8, r0 + mov r2, r8 + strh r2, [r6, #2] + ldr r4, _080A6264 @ =gMenu + ldrb r1, [r4, #3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + subs r0, r0, r1 + adds r0, #0x1a + strh r0, [r6] + ldr r0, _080A6268 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x20 + ands r0, r1 + movs r1, #9 + cmp r0, #0 + beq _080A61B8 + movs r1, #8 +_080A61B8: + movs r5, #0xfe + lsls r5, r5, #1 + adds r0, r5, #0 + bl DrawDirect + ldrb r0, [r4, #3] + lsls r0, r0, #3 + ldr r1, _080A626C @ =gUnk_08128D70 + adds r4, r0, r1 + ldrb r0, [r4] + bl GetInventoryValue + cmp r0, #0 + beq _080A621C + strh r7, [r6, #8] + movs r0, #0xcc + strh r0, [r6] + movs r0, #0x88 + strh r0, [r6, #2] + adds r0, r5, #0 + movs r1, #0xb + bl DrawDirect + movs r0, #0x30 + strh r0, [r6] + movs r0, #0x6c + strh r0, [r6, #2] + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + movs r2, #0xd8 + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r6, #8] + ldrb r1, [r4, #2] + adds r0, r5, #0 + bl DrawDirect + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + orrs r0, r7 + strh r0, [r6, #8] + movs r0, #0x78 + strh r0, [r6] + movs r0, #0x68 + strh r0, [r6, #2] + adds r0, r5, #0 + movs r1, #0xc + bl DrawDirect +_080A621C: + mov r0, r8 + strh r0, [r6, #2] + movs r5, #0 + adds r7, r6, #0 + movs r6, #0x18 +_080A6226: + lsls r1, r5, #3 + ldr r0, _080A626C @ =gUnk_08128D70 + adds r4, r1, r0 + ldrb r0, [r4] + bl GetInventoryValue + cmp r0, #0 + beq _080A6250 + ldrb r0, [r4, #1] + lsls r0, r0, #0xc + movs r2, #0xc0 + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r7, #8] + strh r6, [r7] + movs r0, #0xfe + lsls r0, r0, #1 + movs r1, #0xa + bl DrawDirect +_080A6250: + adds r6, #0x1b + adds r5, #1 + cmp r5, #7 + bls _080A6226 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A6260: .4byte gOamCmd +_080A6264: .4byte gMenu +_080A6268: .4byte gMain +_080A626C: .4byte gUnk_08128D70 +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6290.inc b/asm/non_matching/subtask2/sub_080A6290.inc new file mode 100644 index 00000000..c8e9b217 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6290.inc @@ -0,0 +1,32 @@ + .syntax unified + push {r4, lr} + ldr r0, _080A62C4 @ =gUnk_08128DD8 + bl sub_080A70AC + ldr r4, _080A62C8 @ =gMenu + ldr r0, _080A62CC @ =gUnk_08128DD4 + str r0, [r4, #0xc] + movs r0, #0x81 + bl LoadGfxGroup + ldr r1, _080A62D0 @ =gScreen + ldr r0, _080A62D4 @ =0x0000FFFC + strh r0, [r1, #0x18] + strh r0, [r1, #0x24] + ldr r2, _080A62D8 @ =gSave + ldr r0, [r2, #0x40] + ldr r1, _080A62DC @ =0x00010780 + orrs r0, r1 + str r0, [r2, #0x40] + bl sub_080A6F40 + strh r0, [r4, #0x10] + movs r0, #1 + strb r0, [r4, #5] + pop {r4, pc} + .align 2, 0 +_080A62C4: .4byte gUnk_08128DD8 +_080A62C8: .4byte gMenu +_080A62CC: .4byte gUnk_08128DD4 +_080A62D0: .4byte gScreen +_080A62D4: .4byte 0x0000FFFC +_080A62D8: .4byte gSave +_080A62DC: .4byte 0x00010780 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A62E0.inc b/asm/non_matching/subtask2/sub_080A62E0.inc new file mode 100644 index 00000000..1855ca71 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A62E0.inc @@ -0,0 +1,81 @@ + .syntax unified + push {r4, lr} + bl sub_080A51F4 + cmp r0, #0 + beq _080A6372 + ldr r0, _080A6310 @ =gMenu + ldrb r3, [r0, #3] + lsls r1, r3, #3 + ldr r0, _080A6314 @ =gUnk_08128DE8 + adds r1, r1, r0 + movs r4, #1 + rsbs r4, r4, #0 + ldr r0, _080A6318 @ =gInput + ldrh r2, [r0, #2] + cmp r2, #0x20 + beq _080A634E + cmp r2, #0x20 + bgt _080A631C + cmp r2, #1 + beq _080A6326 + cmp r2, #0x10 + beq _080A6354 + b _080A635A + .align 2, 0 +_080A6310: .4byte gMenu +_080A6314: .4byte gUnk_08128DE8 +_080A6318: .4byte gInput +_080A631C: + cmp r2, #0x40 + beq _080A6344 + cmp r2, #0x80 + beq _080A634A + b _080A635A +_080A6326: + ldr r0, _080A6340 @ =gSave + lsls r2, r3 + ldr r0, [r0, #0x40] + ands r0, r2 + cmp r0, #0 + beq _080A635A + movs r0, #0x6a + bl SoundReq + movs r0, #6 + bl sub_080A4E84 + b _080A635A + .align 2, 0 +_080A6340: .4byte gSave +_080A6344: + ldrb r0, [r1] + lsls r0, r0, #0x1b + b _080A6358 +_080A634A: + ldrh r0, [r1] + b _080A6356 +_080A634E: + ldrb r0, [r1, #2] + lsls r0, r0, #0x1b + b _080A6358 +_080A6354: + ldrh r0, [r1, #2] +_080A6356: + lsls r0, r0, #0x16 +_080A6358: + lsrs r4, r0, #0x1b +_080A635A: + cmp r4, #0 + blt _080A6368 + ldr r0, _080A6374 @ =gMenu + strb r4, [r0, #3] + movs r0, #0x69 + bl SoundReq +_080A6368: + ldr r0, _080A6374 @ =gMenu + ldrb r0, [r0, #3] + movs r1, #0 + bl sub_080A6FB4 +_080A6372: + pop {r4, pc} + .align 2, 0 +_080A6374: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6378.inc b/asm/non_matching/subtask2/sub_080A6378.inc new file mode 100644 index 00000000..2b5b18ef --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6378.inc @@ -0,0 +1,180 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, lr} + ldr r0, _080A5C18 @ =gMenu + adds r4, r0, #0 + adds r4, #0x2c + ldrb r0, [r4] + adds r0, #1 + strb r0, [r4] + movs r6, #0x20 + ands r0, r6 + cmp r0, #0 + beq _080A5B86 + bl sub_080A6438 +_080A5B86: + ldr r5, _080A5C1C @ =gOamCmd + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r5, #4] + movs r0, #0 + strh r0, [r5, #6] + movs r0, #0xe0 + lsls r0, r0, #7 + strh r0, [r5, #8] + ldrb r1, [r4] + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _080A5BE0 + ldr r4, _080A5C20 @ =gRoomTransition + ldrh r1, [r4, #0x20] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #5 + movs r1, #0xf9 + lsls r1, r1, #4 + bl __divsi3 + adds r0, #0x28 + strh r0, [r5] + ldrh r0, [r4, #0x22] + lsls r0, r0, #7 + movs r1, #0xc6 + lsls r1, r1, #4 + bl __divsi3 + adds r0, #0xc + strh r0, [r5, #2] + ldr r0, _080A5C24 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #8 + ands r0, r1 + movs r1, #0x59 + cmp r0, #0 + beq _080A5BD8 + movs r1, #0x5a +_080A5BD8: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect +_080A5BE0: + ldr r3, _080A5C18 @ =gMenu + ldrb r0, [r3, #3] + lsls r0, r0, #3 + ldr r1, _080A5C28 @ =gUnk_08128DE8 + adds r0, r0, r1 + ldr r2, _080A5C1C @ =gOamCmd + ldrb r1, [r0, #6] + strh r1, [r2] + ldrb r0, [r0, #7] + strh r0, [r2, #2] + ldrb r0, [r3, #3] + lsls r2, r0, #1 + adds r2, r2, r0 + adds r2, #0x26 + adds r3, #0x2c + ldrb r1, [r3] + lsrs r1, r1, #4 + movs r0, #1 + bics r0, r1 + adds r1, r2, r0 + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect + bl sub_080A6498 + pop {r4, r5, r6, pc} + .align 2, 0 +_080A5C18: .4byte gMenu +_080A5C1C: .4byte gOamCmd +_080A5C20: .4byte gRoomTransition +_080A5C24: .4byte gPlayerState +_080A5C28: .4byte gUnk_08128DE8 +.else + push {r4, r5, r6, lr} + ldr r0, _080A6420 @ =gMenu + adds r4, r0, #0 + adds r4, #0x2c + ldrb r0, [r4] + adds r0, #1 + strb r0, [r4] + movs r6, #0x20 + ands r0, r6 + cmp r0, #0 + beq _080A6392 + bl sub_080A6438 +_080A6392: + ldr r5, _080A6424 @ =gOamCmd + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r5, #4] + movs r0, #0 + strh r0, [r5, #6] + movs r0, #0xe0 + lsls r0, r0, #7 + strh r0, [r5, #8] + ldrb r1, [r4] + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _080A63EA + ldr r4, _080A6428 @ =gRoomTransition + ldrh r1, [r4, #0x20] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #5 + movs r1, #0xf9 + lsls r1, r1, #4 + bl __divsi3 + adds r0, #0x28 + strh r0, [r5] + ldrh r0, [r4, #0x22] + lsls r0, r0, #7 + movs r1, #0xc6 + lsls r1, r1, #4 + bl __divsi3 + adds r0, #0xc + strh r0, [r5, #2] + ldr r0, _080A642C @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #8 + ands r0, r1 + movs r1, #0x59 + cmp r0, #0 + beq _080A63E4 + movs r1, #0x5a +_080A63E4: + ldr r0, _080A6430 @ =0x000001FB + bl DrawDirect +_080A63EA: + ldr r3, _080A6420 @ =gMenu + ldrb r0, [r3, #3] + lsls r0, r0, #3 + ldr r1, _080A6434 @ =gUnk_08128DE8 + adds r0, r0, r1 + ldr r2, _080A6424 @ =gOamCmd + ldrb r1, [r0, #6] + strh r1, [r2] + ldrb r0, [r0, #7] + strh r0, [r2, #2] + ldrb r0, [r3, #3] + lsls r2, r0, #1 + adds r2, r2, r0 + adds r2, #0x26 + adds r3, #0x2c + ldrb r1, [r3] + lsrs r1, r1, #4 + movs r0, #1 + bics r0, r1 + adds r1, r2, r0 + ldr r0, _080A6430 @ =0x000001FB + bl DrawDirect + bl sub_080A6498 + pop {r4, r5, r6, pc} + .align 2, 0 +_080A6420: .4byte gMenu +_080A6424: .4byte gOamCmd +_080A6428: .4byte gRoomTransition +_080A642C: .4byte gPlayerState +_080A6430: .4byte 0x000001FB +_080A6434: .4byte gUnk_08128DE8 +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6438.inc b/asm/non_matching/subtask2/sub_080A6438.inc new file mode 100644 index 00000000..7ace4eb4 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6438.inc @@ -0,0 +1,97 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + ldr r2, _080A5C7C @ =gOamCmd + movs r1, #0 + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r2, #4] + strh r1, [r2, #6] + strh r1, [r2, #8] + ldr r0, _080A5C80 @ =gSave + ldr r1, _080A5C84 @ =gMenu + ldrh r0, [r0, #0x20] + ldrh r5, [r1, #0x10] + ands r5, r0 + ldr r4, _080A5C88EU @ =gUnk_08128F58 + movs r6, #0 + ldrb r0, [r4] + cmp r0, #0 + beq _080A5C78 + adds r7, r2, #0 +_080A5C52: + movs r0, #1 + lsls r0, r6 + ands r0, r5 + cmp r0, #0 + beq _080A5C6E + ldrb r0, [r4, #1] + strh r0, [r7] + ldrb r0, [r4, #2] + strh r0, [r7, #2] + ldrb r1, [r4] + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect +_080A5C6E: + adds r6, #1 + adds r4, #8 + ldrb r0, [r4] + cmp r0, #0 + bne _080A5C52 +_080A5C78: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5C7C: .4byte gOamCmd +_080A5C80: .4byte gSave +_080A5C84: .4byte gMenu +_080A5C88EU: .4byte gUnk_08128F58 +.else + push {r4, r5, r6, r7, lr} + ldr r2, _080A6484 @ =gOamCmd + movs r1, #0 + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r2, #4] + strh r1, [r2, #6] + strh r1, [r2, #8] + ldr r0, _080A6488 @ =gSave + ldr r1, _080A648C @ =gMenu + ldrh r0, [r0, #0x20] + ldrh r5, [r1, #0x10] + ands r5, r0 + ldr r4, _080A6490 @ =gUnk_08128F58 + movs r6, #0 + ldrb r0, [r4] + cmp r0, #0 + beq _080A6482 + adds r7, r2, #0 +_080A645E: + movs r0, #1 + lsls r0, r6 + ands r0, r5 + cmp r0, #0 + beq _080A6478 + ldrb r0, [r4, #1] + strh r0, [r7] + ldrb r0, [r4, #2] + strh r0, [r7, #2] + ldrb r1, [r4] + ldr r0, _080A6494 @ =0x000001FB + bl DrawDirect +_080A6478: + adds r6, #1 + adds r4, #8 + ldrb r0, [r4] + cmp r0, #0 + bne _080A645E +_080A6482: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A6484: .4byte gOamCmd +_080A6488: .4byte gSave +_080A648C: .4byte gMenu +_080A6490: .4byte gUnk_08128F58 +_080A6494: .4byte 0x000001FB +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6498.inc b/asm/non_matching/subtask2/sub_080A6498.inc new file mode 100644 index 00000000..b5f8a3ac --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6498.inc @@ -0,0 +1,97 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + ldr r0, _080A5CDCEU @ =gOamCmd + movs r2, #0 + movs r1, #0x80 + lsls r1, r1, #4 + strh r1, [r0, #4] + strh r2, [r0, #6] + strh r2, [r0, #8] + movs r4, #0 + ldr r7, _080A5CE0 @ =gSave + adds r6, r0, #0 + movs r5, #0x28 +_080A5CA4: + movs r1, #1 + lsls r1, r4 + ldr r0, [r7, #0x40] + ands r0, r1 + cmp r0, #0 + bne _080A5CC8EU + lsls r1, r4, #3 + ldr r0, _080A5CE4 @ =gUnk_08128DE8 + adds r1, r1, r0 + ldrb r0, [r1, #6] + strh r0, [r6] + ldrb r0, [r1, #7] + strh r0, [r6, #2] + movs r0, #0xfd + lsls r0, r0, #1 + adds r1, r5, #0 + bl DrawDirect +_080A5CC8EU: + adds r5, #3 + adds r4, #1 + cmp r4, #0x10 + bls _080A5CA4 + ldr r0, _080A5CE8 @ =gScreen + adds r0, #0x62 + ldr r1, _080A5CEC @ =0x00003D3F + strh r1, [r0] + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A5CDCEU: .4byte gOamCmd +_080A5CE0: .4byte gSave +_080A5CE4: .4byte gUnk_08128DE8 +_080A5CE8: .4byte gScreen +_080A5CEC: .4byte 0x00003D3F +.else + push {r4, r5, r6, r7, lr} + ldr r0, _080A64E4 @ =gOamCmd + movs r2, #0 + movs r1, #0x80 + lsls r1, r1, #4 + strh r1, [r0, #4] + strh r2, [r0, #6] + strh r2, [r0, #8] + movs r4, #0 + ldr r7, _080A64E8 @ =gSave + adds r6, r0, #0 + movs r5, #0x28 +_080A64B0: + movs r1, #1 + lsls r1, r4 + ldr r0, [r7, #0x40] + ands r0, r1 + cmp r0, #0 + bne _080A64D2 + lsls r1, r4, #3 + ldr r0, _080A64EC @ =gUnk_08128DE8 + adds r1, r1, r0 + ldrb r0, [r1, #6] + strh r0, [r6] + ldrb r0, [r1, #7] + strh r0, [r6, #2] + ldr r0, _080A64F0 @ =0x000001FB + adds r1, r5, #0 + bl DrawDirect +_080A64D2: + adds r5, #3 + adds r4, #1 + cmp r4, #0x10 + bls _080A64B0 + ldr r0, _080A64F4 @ =gScreen + adds r0, #0x62 + ldr r1, _080A64F8 @ =0x00003D3F + strh r1, [r0] + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A64E4: .4byte gOamCmd +_080A64E8: .4byte gSave +_080A64EC: .4byte gUnk_08128DE8 +_080A64F0: .4byte 0x000001FB +_080A64F4: .4byte gScreen +_080A64F8: .4byte 0x00003D3F +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6534.inc b/asm/non_matching/subtask2/sub_080A6534.inc new file mode 100644 index 00000000..9f2cae7d --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6534.inc @@ -0,0 +1,50 @@ + .syntax unified + push {r4, lr} + bl sub_080A4D34 + movs r0, #4 + bl sub_080A4DB8 + bl sub_080A6290 + ldr r2, _080A6590 @ =gScreen + ldrh r1, [r2] + ldr r0, _080A6594 @ =0x0000F7FF + ands r0, r1 + movs r4, #0 + strh r0, [r2] + ldr r0, _080A6598 @ =gPaletteBuffer + adds r0, #0xa2 + ldrh r1, [r0] + movs r0, #0 + bl SetColor + ldr r1, _080A659C @ =gUnk_08128F4C + ldr r0, _080A65A0 @ =gUnk_02032EC0 + ldrb r0, [r0, #3] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r2, [r0] + ldr r3, _080A65A4 @ =gSave + ldrh r1, [r3, #0x20] + adds r0, r2, #0 + orrs r0, r1 + strh r0, [r3, #0x20] + ldr r1, _080A65A8 @ =gMenu + ldrh r0, [r1, #0x10] + ands r2, r0 + strh r2, [r1, #0x12] + strh r4, [r1, #0x10] + movs r0, #0x3c + strh r0, [r1, #8] + movs r0, #1 + bl SetMenuType + movs r0, #4 + movs r1, #8 + bl SetFade + pop {r4, pc} + .align 2, 0 +_080A6590: .4byte gScreen +_080A6594: .4byte 0x0000F7FF +_080A6598: .4byte gPaletteBuffer +_080A659C: .4byte gUnk_08128F4C +_080A65A0: .4byte gUnk_02032EC0 +_080A65A4: .4byte gSave +_080A65A8: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A65AC.inc b/asm/non_matching/subtask2/sub_080A65AC.inc new file mode 100644 index 00000000..af942a59 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A65AC.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, lr} + ldr r0, _080A65E4 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A6600 + ldr r4, _080A65E8 @ =gMenu + adds r1, r4, #0 + adds r1, #0x2c + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldrh r0, [r4, #8] + cmp r0, #0 + beq _080A65EC + cmp r0, #0x1e + bne _080A65DA + ldrh r0, [r4, #0x12] + strh r0, [r4, #0x10] + movs r0, #0x20 + strb r0, [r1] + adds r0, #0xe3 + bl SoundReq +_080A65DA: + ldrh r0, [r4, #8] + subs r0, #1 + strh r0, [r4, #8] + b _080A6600 + .align 2, 0 +_080A65E4: .4byte gFadeControl +_080A65E8: .4byte gMenu +_080A65EC: + ldr r0, _080A6604 @ =gInput + ldrh r0, [r0, #2] + cmp r0, #1 + blt _080A6600 + cmp r0, #2 + ble _080A65FC + cmp r0, #8 + bne _080A6600 +_080A65FC: + bl Subtask_Exit +_080A6600: + pop {r4, pc} + .align 2, 0 +_080A6604: .4byte gInput + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6608.inc b/asm/non_matching/subtask2/sub_080A6608.inc new file mode 100644 index 00000000..49ba94c3 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6608.inc @@ -0,0 +1,32 @@ + .syntax unified + push {r4, lr} + ldr r1, _080A6640 @ =gUnk_08128E78 + ldr r4, _080A6644 @ =gMenu + ldrb r0, [r4, #5] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl _call_via_r0 + ldrb r1, [r4, #3] + lsls r1, r1, #3 + ldr r0, _080A6648 @ =gUnk_08128E94 + adds r1, r1, r0 + ldr r2, _080A664C @ =gScreen + movs r0, #5 + ldrsb r0, [r1, r0] + rsbs r0, r0, #0 + strh r0, [r2, #0x18] + ldrb r1, [r1, #6] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + ldrh r0, [r4, #0xa] + subs r0, r0, r1 + strh r0, [r2, #0x24] + bl sub_080A66D0 + pop {r4, pc} + .align 2, 0 +_080A6640: .4byte gUnk_08128E78 +_080A6644: .4byte gMenu +_080A6648: .4byte gUnk_08128E94 +_080A664C: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6650.inc b/asm/non_matching/subtask2/sub_080A6650.inc new file mode 100644 index 00000000..fc42e7f5 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6650.inc @@ -0,0 +1,18 @@ + .syntax unified + push {lr} + ldr r0, _080A6670 @ =gUnk_08128E84 + bl sub_080A70AC + ldr r0, _080A6674 @ =gUnk_02034490 + ldrb r0, [r0, #6] + ldr r1, _080A6678 @ =gMenu + strb r0, [r1, #3] + bl sub_080A67C4 + bl sub_080A68D4 + movs r0, #1 + bl SetMenuType + pop {pc} + .align 2, 0 +_080A6670: .4byte gUnk_08128E84 +_080A6674: .4byte gUnk_02034490 +_080A6678: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A667C.inc b/asm/non_matching/subtask2/sub_080A667C.inc new file mode 100644 index 00000000..208923f0 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A667C.inc @@ -0,0 +1,44 @@ + .syntax unified + push {lr} + ldr r2, _080A669C @ =gMenu + ldr r0, _080A66A0 @ =gUnk_08128E80 + str r0, [r2, #0xc] + ldrb r0, [r2, #3] + lsls r0, r0, #3 + ldr r1, _080A66A4 @ =gUnk_08128E94 + adds r3, r0, r1 + ldrh r1, [r2, #0xa] + ldr r0, _080A66A8 @ =gInput + ldrh r0, [r0] + cmp r0, #0x40 + beq _080A66AC + cmp r0, #0x80 + beq _080A66B4 + b _080A66C2 + .align 2, 0 +_080A669C: .4byte gMenu +_080A66A0: .4byte gUnk_08128E80 +_080A66A4: .4byte gUnk_08128E94 +_080A66A8: .4byte gInput +_080A66AC: + cmp r1, #0 + beq _080A66C2 + subs r1, #2 + b _080A66C2 +_080A66B4: + ldrb r0, [r3, #2] + cmp r0, r1 + bls _080A66BC + adds r1, #2 +_080A66BC: + cmp r0, r1 + bhs _080A66C2 + adds r1, r0, #0 +_080A66C2: + strh r1, [r2, #0xa] + ldrb r0, [r2, #3] + movs r1, #0 + bl sub_080A6FB4 + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A66D0.inc b/asm/non_matching/subtask2/sub_080A66D0.inc new file mode 100644 index 00000000..58a88f15 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A66D0.inc @@ -0,0 +1,248 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r6, _080A5F74 @ =gOamCmd + movs r0, #0 + strh r0, [r6, #4] + strh r0, [r6, #6] + movs r0, #0x78 + strh r0, [r6] + ldr r4, _080A5F78 @ =gMenu + ldrb r0, [r4, #3] + lsls r0, r0, #3 + ldr r1, _080A5F7C @ =gUnk_08128E94 + adds r5, r0, r1 + adds r1, r4, #0 + adds r1, #0x2c + ldrb r0, [r1] + adds r2, r0, #1 + strb r2, [r1] + adds r0, r4, #0 + adds r0, #0x2b + ldrb r0, [r0] + cmp r0, #1 + beq _080A5F30 + movs r0, #0x10 + ands r2, r0 + cmp r2, #0 + beq _080A5F30 + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r6, #8] + ldrh r0, [r4, #0xa] + cmp r0, #0 + beq _080A5F1A + movs r0, #0xc + strh r0, [r6, #2] + movs r0, #0xfd + lsls r0, r0, #1 + movs r1, #0x71 + bl DrawDirect +_080A5F1A: + ldrb r0, [r5, #2] + ldrh r4, [r4, #0xa] + cmp r0, r4 + bls _080A5F30 + movs r0, #0x84 + strh r0, [r6, #2] + movs r0, #0xfd + lsls r0, r0, #1 + movs r1, #0x72 + bl DrawDirect +_080A5F30: + ldrb r0, [r5, #7] + mov sl, r0 + ldrb r5, [r5, #3] + mov sb, r5 + ldr r1, _080A5F78 @ =gMenu + ldrh r0, [r1, #0xa] + mov r8, r0 + ldr r2, _080A5F74 @ =gOamCmd + movs r0, #0 + strh r0, [r2, #4] + strh r0, [r2, #6] + movs r0, #0xc0 + lsls r0, r0, #4 + strh r0, [r2, #8] + adds r1, #0x2c + ldrb r1, [r1] + movs r0, #0x20 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + ldr r4, _080A5F80 @ =gUnk_02019EE0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _080A5FAE + rsbs r5, r6, #0 + orrs r5, r6 + adds r7, r2, #0 +_080A5F66: + movs r1, #0 + ldrb r0, [r4] + cmp r0, #1 + bne _080A5F84 + lsrs r1, r5, #0x1f + b _080A5F8A + .align 2, 0 +_080A5F74: .4byte gOamCmd +_080A5F78: .4byte gMenu +_080A5F7C: .4byte gUnk_08128E94 +_080A5F80: .4byte gUnk_02019EE0 +_080A5F84: + cmp r6, #0 + bne _080A5F8A + movs r1, #1 +_080A5F8A: + cmp r1, #0 + beq _080A5FA6 + ldrh r0, [r4, #4] + add r0, sl + strh r0, [r7] + ldrh r0, [r4, #6] + add r0, sb + mov r1, r8 + subs r0, r0, r1 + strh r0, [r7, #2] + ldrh r0, [r4, #2] + ldrb r1, [r4, #1] + bl DrawDirect +_080A5FA6: + adds r4, #8 + ldrh r0, [r4, #2] + cmp r0, #0 + bne _080A5F66 +_080A5FAE: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} +.else + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r6, _080A677C @ =gOamCmd + movs r0, #0 + strh r0, [r6, #4] + strh r0, [r6, #6] + movs r0, #0x78 + strh r0, [r6] + ldr r4, _080A6780 @ =gMenu + ldrb r0, [r4, #3] + lsls r0, r0, #3 + ldr r1, _080A6784 @ =gUnk_08128E94 + adds r5, r0, r1 + adds r1, r4, #0 + adds r1, #0x2c + ldrb r0, [r1] + adds r2, r0, #1 + strb r2, [r1] + adds r0, r4, #0 + adds r0, #0x2b + ldrb r0, [r0] + cmp r0, #1 + beq _080A6738 + movs r0, #0x10 + ands r2, r0 + cmp r2, #0 + beq _080A6738 + movs r0, #0x80 + lsls r0, r0, #4 + strh r0, [r6, #8] + ldrh r0, [r4, #0xa] + cmp r0, #0 + beq _080A6724 + movs r0, #0xc + strh r0, [r6, #2] + ldr r0, _080A6788 @ =0x000001FB + movs r1, #0x71 + bl DrawDirect +_080A6724: + ldrb r0, [r5, #2] + ldrh r4, [r4, #0xa] + cmp r0, r4 + bls _080A6738 + movs r0, #0x84 + strh r0, [r6, #2] + ldr r0, _080A6788 @ =0x000001FB + movs r1, #0x72 + bl DrawDirect +_080A6738: + ldrb r0, [r5, #7] + mov sl, r0 + ldrb r5, [r5, #3] + mov sb, r5 + ldr r1, _080A6780 @ =gMenu + ldrh r0, [r1, #0xa] + mov r8, r0 + ldr r2, _080A677C @ =gOamCmd + movs r0, #0 + strh r0, [r2, #4] + strh r0, [r2, #6] + movs r0, #0xc0 + lsls r0, r0, #4 + strh r0, [r2, #8] + adds r1, #0x2c + ldrb r1, [r1] + movs r0, #0x20 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + ldr r4, _080A678C @ =gUnk_02019EE0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _080A67BA + rsbs r5, r6, #0 + orrs r5, r6 + adds r7, r2, #0 +_080A676E: + movs r1, #0 + ldrb r0, [r4] + cmp r0, #1 + bne _080A6790 + lsrs r1, r5, #0x1f + b _080A6796 + .align 2, 0 +_080A677C: .4byte gOamCmd +_080A6780: .4byte gMenu +_080A6784: .4byte gUnk_08128E94 +_080A6788: .4byte 0x000001FB +_080A678C: .4byte gUnk_02019EE0 +_080A6790: + cmp r6, #0 + bne _080A6796 + movs r1, #1 +_080A6796: + cmp r1, #0 + beq _080A67B2 + ldrh r0, [r4, #4] + add r0, sl + strh r0, [r7] + ldrh r0, [r4, #6] + add r0, sb + mov r1, r8 + subs r0, r0, r1 + strh r0, [r7, #2] + ldrh r0, [r4, #2] + ldrb r1, [r4, #1] + bl DrawDirect +_080A67B2: + adds r4, #8 + ldrh r0, [r4, #2] + cmp r0, #0 + bne _080A676E +_080A67BA: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A67C4.inc b/asm/non_matching/subtask2/sub_080A67C4.inc new file mode 100644 index 00000000..9b7939a1 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A67C4.inc @@ -0,0 +1,132 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + adds r0, #0xba + bl LoadPaletteGroup + adds r5, r4, #0 + adds r5, #0x5f + cmp r4, #0xb + beq _080A67F4 + cmp r4, #0xb + bhi _080A67E0 + cmp r4, #9 + beq _080A67E6 + b _080A6822 +_080A67E0: + cmp r4, #0xe + beq _080A6802 + b _080A6822 +_080A67E6: + movs r0, #0x18 + bl CheckGlobalFlag + cmp r0, #0 + beq _080A6822 + movs r5, #0x70 + b _080A6822 +_080A67F4: + movs r0, #0xe + bl CheckKinstoneFused + cmp r0, #0 + beq _080A6822 + movs r5, #0x71 + b _080A6822 +_080A6802: + ldr r1, _080A68AC @ =gUnk_02032EC0 + adds r0, r1, #0 + adds r0, #0x20 + ldrb r0, [r0] + cmp r0, #8 + bne _080A6822 + adds r0, r1, #0 + adds r0, #0x21 + ldrb r0, [r0] + movs r1, #3 + bl __modsi3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + adds r5, r0, #0 + adds r5, #0x72 +_080A6822: + adds r0, r5, #0 + bl LoadGfxGroup + lsls r1, r4, #3 + ldr r0, _080A68B0 @ =gUnk_08128E94 + adds r4, r1, r0 + ldr r0, _080A68B4 @ =gUnk_03003DE4 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _080A68B8 @ =gUnk_02017AA0 + adds r1, r0, r1 + ldr r2, _080A68BC @ =0x00001E0A + adds r0, r2, #0 + movs r2, #7 +_080A6842: + strh r0, [r1] + adds r1, #2 + subs r2, #1 + cmp r2, #0 + bge _080A6842 + movs r2, #8 + movs r0, #5 + ldrsb r0, [r4, r0] + ldrb r3, [r4, #4] + adds r0, r0, r3 + ldr r5, _080A68B4 @ =gUnk_03003DE4 + ldr r6, _080A68B8 @ =gUnk_02017AA0 + cmp r2, r0 + bge _080A6874 + ldr r7, _080A68C0 @ =0x00001E0B + adds r3, r7, #0 +_080A6862: + strh r3, [r1] + adds r1, #2 + adds r2, #1 + movs r0, #5 + ldrsb r0, [r4, r0] + ldrb r7, [r4, #4] + adds r0, r0, r7 + cmp r2, r0 + blt _080A6862 +_080A6874: + cmp r2, #0x9f + bgt _080A6886 + ldr r3, _080A68BC @ =0x00001E0A + adds r0, r3, #0 +_080A687C: + strh r0, [r1] + adds r1, #2 + adds r2, #1 + cmp r2, #0x9f + ble _080A687C +_080A6886: + ldrb r1, [r5] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + adds r0, r0, r6 + ldr r1, _080A68C4 @ =0x0400000E + ldr r2, _080A68C8 @ =0xA2600001 + bl sub_0805622C + ldr r1, _080A68CC @ =gMenu + ldrb r0, [r4, #2] + lsrs r0, r0, #1 + strh r0, [r1, #0xa] + ldr r0, _080A68D0 @ =gUnk_02019EE0 + movs r1, #0x80 + lsls r1, r1, #3 + bl MemClear + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A68AC: .4byte gUnk_02032EC0 +_080A68B0: .4byte gUnk_08128E94 +_080A68B4: .4byte gUnk_03003DE4 +_080A68B8: .4byte gUnk_02017AA0 +_080A68BC: .4byte 0x00001E0A +_080A68C0: .4byte 0x00001E0B +_080A68C4: .4byte 0x0400000E +_080A68C8: .4byte 0xA2600001 +_080A68CC: .4byte gMenu +_080A68D0: .4byte gUnk_02019EE0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A68D4.inc b/asm/non_matching/subtask2/sub_080A68D4.inc new file mode 100644 index 00000000..6028772c --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A68D4.inc @@ -0,0 +1,174 @@ + .syntax unified +.ifdef EU + push {r4, r5, r6, lr} + ldr r0, _080A6100EU @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #8 + ands r0, r1 + movs r4, #0x64 + cmp r0, #0 + beq _080A60DA + movs r4, #0x65 +_080A60DA: + ldr r1, _080A6104EU @ =gRoomTransition + ldrh r0, [r1, #0x20] + ldrh r1, [r1, #0x22] + movs r2, #0xfd + lsls r2, r2, #1 + movs r3, #0x80 + lsls r3, r3, #1 + adds r3, r4, r3 + bl sub_080A698C + bl sub_080A6F40 + adds r6, r0, #0 + ldr r0, _080A6108 @ =gSave + ldrh r0, [r0, #0x20] + ands r6, r0 + ldr r4, _080A610C @ =gUnk_08128F58 + movs r5, #0 + b _080A612C + .align 2, 0 +_080A6100EU: .4byte gPlayerState +_080A6104EU: .4byte gRoomTransition +_080A6108: .4byte gSave +_080A610C: .4byte gUnk_08128F58 +_080A6110: + movs r0, #1 + lsls r0, r5 + ands r0, r6 + cmp r0, #0 + beq _080A6128EU + ldrh r0, [r4, #4] + ldrh r1, [r4, #6] + ldrb r3, [r4, #3] + movs r2, #0xfd + lsls r2, r2, #1 + bl sub_080A698C +_080A6128EU: + adds r5, #1 + adds r4, #8 +_080A612C: + ldrb r0, [r4] + cmp r0, #0 + bne _080A6110 + movs r5, #0xa +_080A6134: + adds r0, r5, #0 + bl CheckKinstoneFused + cmp r0, #0 + beq _080A616A + adds r0, r5, #0 + bl sub_0801E810 + cmp r0, #0 + bne _080A616A + ldr r1, _080A6174 @ =gUnk_080C9CBC + lsls r0, r5, #3 + adds r0, r0, r1 + ldrb r3, [r0, #7] + ldrb r0, [r0, #4] + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _080A6178EU @ =gUnk_080FE320 + adds r1, r1, r0 + ldrh r0, [r1, #0xc] + ldrh r1, [r1, #0xe] + adds r3, #0x64 + movs r2, #0xfd + lsls r2, r2, #1 + bl sub_080A698C +_080A616A: + adds r5, #1 + cmp r5, #0x64 + bls _080A6134 + pop {r4, r5, r6, pc} + .align 2, 0 +_080A6174: .4byte gUnk_080C9CBC +_080A6178EU: .4byte gUnk_080FE320 +.else + push {r4, r5, r6, lr} + ldr r0, _080A690C @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #8 + ands r0, r1 + movs r4, #0x64 + cmp r0, #0 + beq _080A68E6 + movs r4, #0x65 +_080A68E6: + ldr r1, _080A6910 @ =gRoomTransition + ldrh r0, [r1, #0x20] + ldrh r1, [r1, #0x22] + ldr r2, _080A6914 @ =0x000001FB + movs r3, #0x80 + lsls r3, r3, #1 + adds r3, r4, r3 + bl sub_080A698C + bl sub_080A6F40 + adds r6, r0, #0 + ldr r0, _080A6918 @ =gSave + ldrh r0, [r0, #0x20] + ands r6, r0 + ldr r4, _080A691C @ =gUnk_08128F58 + movs r5, #0 + b _080A693A + .align 2, 0 +_080A690C: .4byte gPlayerState +_080A6910: .4byte gRoomTransition +_080A6914: .4byte 0x000001FB +_080A6918: .4byte gSave +_080A691C: .4byte gUnk_08128F58 +_080A6920: + movs r0, #1 + lsls r0, r5 + ands r0, r6 + cmp r0, #0 + beq _080A6936 + ldrh r0, [r4, #4] + ldrh r1, [r4, #6] + ldrb r3, [r4, #3] + ldr r2, _080A6980 @ =0x000001FB + bl sub_080A698C +_080A6936: + adds r5, #1 + adds r4, #8 +_080A693A: + ldrb r0, [r4] + cmp r0, #0 + bne _080A6920 + movs r5, #0xa +_080A6942: + adds r0, r5, #0 + bl CheckKinstoneFused + cmp r0, #0 + beq _080A6976 + adds r0, r5, #0 + bl sub_0801E810 + cmp r0, #0 + bne _080A6976 + ldr r1, _080A6984 @ =gUnk_080C9CBC + lsls r0, r5, #3 + adds r0, r0, r1 + ldrb r3, [r0, #7] + ldrb r0, [r0, #4] + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _080A6988 @ =gUnk_080FE320 + adds r1, r1, r0 + ldrh r0, [r1, #0xc] + ldrh r1, [r1, #0xe] + adds r3, #0x64 + ldr r2, _080A6980 @ =0x000001FB + bl sub_080A698C +_080A6976: + adds r5, #1 + cmp r5, #0x64 + bls _080A6942 + pop {r4, r5, r6, pc} + .align 2, 0 +_080A6980: .4byte 0x000001FB +_080A6984: .4byte gUnk_080C9CBC +_080A6988: .4byte gUnk_080FE320 +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A698C.inc b/asm/non_matching/subtask2/sub_080A698C.inc new file mode 100644 index 00000000..887c54fe --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A698C.inc @@ -0,0 +1,42 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r6, r2, #0 + adds r5, r3, #0 + bl sub_080A69E0 + adds r4, r0, #0 + cmp r4, #0 + ble _080A69D4 + ldr r2, _080A69D8 @ =gMenu + adds r2, #0x2d + ldrb r0, [r2] + lsls r0, r0, #3 + ldr r3, _080A69DC @ =gUnk_02019EE0 + adds r0, r0, r3 + lsrs r1, r5, #8 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #3 + adds r0, r0, r3 + strb r5, [r0, #1] + ldrb r0, [r2] + lsls r0, r0, #3 + adds r0, r0, r3 + strh r6, [r0, #2] + ldrb r0, [r2] + lsls r0, r0, #3 + adds r0, r0, r3 + strh r4, [r0, #4] + ldrb r0, [r2] + lsls r0, r0, #3 + adds r0, r0, r3 + asrs r1, r4, #0x10 + strh r1, [r0, #6] + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] +_080A69D4: + pop {r4, r5, r6, pc} + .align 2, 0 +_080A69D8: .4byte gMenu +_080A69DC: .4byte gUnk_02019EE0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A69E0.inc b/asm/non_matching/subtask2/sub_080A69E0.inc new file mode 100644 index 00000000..0ebae9ae --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A69E0.inc @@ -0,0 +1,85 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + sub sp, #4 + adds r7, r0, #0 + adds r6, r1, #0 + orrs r0, r6 + cmp r0, #0 + beq _080A6A06 + adds r0, r7, #0 + adds r1, r6, #0 + bl sub_080A6A80 + adds r3, r0, #0 + cmp r3, #0 + beq _080A6A06 + ldr r0, _080A6A0C @ =gMenu + ldrb r1, [r0, #3] + ldrb r2, [r3, #4] + cmp r1, r2 + beq _080A6A10 +_080A6A06: + movs r0, #1 + rsbs r0, r0, #0 + b _080A6A74 + .align 2, 0 +_080A6A0C: .4byte gMenu +_080A6A10: + ldrb r1, [r0, #3] + cmp r1, #7 + beq _080A6A26 + cmp r1, #7 + bgt _080A6A20 + cmp r1, #4 + beq _080A6A26 + b _080A6A48 +_080A6A20: + cmp r1, #0xf + beq _080A6A44 + b _080A6A48 +_080A6A26: + ldrb r0, [r0, #3] + movs r2, #7 + cmp r0, #4 + bne _080A6A30 + movs r2, #9 +_080A6A30: + ldr r1, _080A6A40 @ =gAreaRoomHeaders + lsls r0, r2, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldrh r0, [r0, #2] + subs r6, r6, r0 + b _080A6A48 + .align 2, 0 +_080A6A40: .4byte gAreaRoomHeaders +_080A6A44: + ldr r0, _080A6A78 @ =0xFFFFFEF8 + adds r7, r7, r0 +_080A6A48: + ldrb r0, [r3] + lsls r0, r0, #4 + subs r0, r7, r0 + movs r4, #0x64 + muls r0, r4, r0 + ldr r5, _080A6A7C @ =0x0000023A + adds r1, r5, #0 + str r3, [sp] + bl __divsi3 + adds r7, r0, #0 + ldr r3, [sp] + ldrb r0, [r3, #1] + lsls r0, r0, #4 + subs r0, r6, r0 + muls r0, r4, r0 + adds r1, r5, #0 + bl __divsi3 + adds r6, r0, #0 + lsls r0, r6, #0x10 + orrs r0, r7 +_080A6A74: + add sp, #4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A6A78: .4byte 0xFFFFFEF8 +_080A6A7C: .4byte 0x0000023A + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6A80.inc b/asm/non_matching/subtask2/sub_080A6A80.inc new file mode 100644 index 00000000..6fa64c28 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6A80.inc @@ -0,0 +1,34 @@ + .syntax unified + push {lr} + adds r3, r0, #0 + lsrs r3, r3, #4 + lsrs r1, r1, #4 + ldr r2, _080A6A8C @ =gUnk_08127F94 + b _080A6AAE + .align 2, 0 +_080A6A8C: .4byte gUnk_08127F94 +_080A6A90: + ldrb r0, [r2] + cmp r0, r3 + bhi _080A6AAC + ldrb r0, [r2, #2] + cmp r0, r3 + blo _080A6AAC + ldrb r0, [r2, #1] + cmp r0, r1 + bhi _080A6AAC + ldrb r0, [r2, #3] + cmp r0, r1 + blo _080A6AAC + adds r0, r2, #0 + b _080A6AB6 +_080A6AAC: + adds r2, #8 +_080A6AAE: + ldrb r0, [r2] + cmp r0, #0xff + bne _080A6A90 + movs r0, #0 +_080A6AB6: + pop {pc} + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6B04.inc b/asm/non_matching/subtask2/sub_080A6B04.inc new file mode 100644 index 00000000..67aac9ec --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6B04.inc @@ -0,0 +1,128 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + bl sub_080A4D34 + movs r0, #6 + bl sub_080A4DB8 + ldr r0, _080A6BF0 @ =gFuseInfo + ldrb r2, [r0, #3] + lsls r2, r2, #3 + ldr r0, _080A6BF4 @ =gUnk_080C9CBC + adds r2, r2, r0 + ldrb r1, [r2, #4] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080A6BF8 @ =gUnk_080FE320 + adds r0, r0, r1 + ldrb r2, [r2, #7] + mov r8, r2 + ldrh r6, [r0, #0xc] + ldrh r5, [r0, #0xe] + adds r0, r6, #0 + adds r1, r5, #0 + bl sub_080A6A80 + ldrb r4, [r0, #4] + ldr r7, _080A6BFC @ =gMenu + strb r4, [r7, #3] + adds r1, r7, #0 + adds r1, #0x2b + movs r0, #1 + strb r0, [r1] + adds r0, r4, #0 + bl sub_080A67C4 + adds r0, r4, #0 + movs r1, #2 + bl sub_080A6FB4 + ldr r4, _080A6C00 @ =0x0000475F + movs r0, #0 + adds r1, r4, #0 + bl SetColor + movs r0, #0x5f + adds r1, r4, #0 + bl SetColor + ldr r0, _080A6C04 @ =0x00005001 + ldr r1, _080A6C08 @ =gBG3Buffer + movs r2, #0x80 + lsls r2, r2, #5 + bl MemFill16 + ldr r0, _080A6C0C @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #8 + ands r0, r1 + movs r2, #0x64 + cmp r0, #0 + beq _080A6B84 + movs r2, #0x65 +_080A6B84: + ldr r1, _080A6C10 @ =gRoomTransition + ldrh r0, [r1, #0x20] + ldrh r1, [r1, #0x22] +.ifdef EU + movs r4, #0xfd + lsls r4, r4, #0x1 +.else + ldr r4, _080A6C14 @ =0x000001FB +.endif + movs r3, #0x80 + lsls r3, r3, #1 + adds r3, r2, r3 + adds r2, r4, #0 + bl sub_080A698C + mov r3, r8 + adds r3, #0x64 + adds r0, r6, #0 + adds r1, r5, #0 + adds r2, r4, #0 + bl sub_080A698C + adds r0, r6, #0 + adds r1, r5, #0 + bl sub_080A69E0 + asrs r5, r0, #0x10 + ldrb r0, [r7, #3] + lsls r0, r0, #3 + ldr r1, _080A6C18 @ =gUnk_08128E94 + adds r1, r0, r1 + movs r0, #0 + strh r0, [r7, #0xa] + ldrb r0, [r1, #2] + cmp r0, #0 + beq _080A6BD4 + adds r0, r5, #0 + subs r0, #0x3c + cmp r0, #0 + ble _080A6BD4 + ldrb r1, [r1, #2] + cmp r1, r0 + bge _080A6BD2 + adds r0, r1, #0 +_080A6BD2: + strh r0, [r7, #0xa] +_080A6BD4: + ldr r1, _080A6BFC @ =gMenu + movs r0, #0x1e + strh r0, [r1, #8] + movs r0, #1 + bl SetMenuType + movs r0, #4 + movs r1, #8 + bl SetFade + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080A6BF0: .4byte gFuseInfo +_080A6BF4: .4byte gUnk_080C9CBC +_080A6BF8: .4byte gUnk_080FE320 +_080A6BFC: .4byte gMenu +_080A6C00: .4byte 0x0000475F +_080A6C04: .4byte 0x00005001 +_080A6C08: .4byte gBG3Buffer +_080A6C0C: .4byte gPlayerState +_080A6C10: .4byte gRoomTransition +.ifndef EU +_080A6C14: .4byte 0x000001FB +.endif +_080A6C18: .4byte gUnk_08128E94 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6C1C.inc b/asm/non_matching/subtask2/sub_080A6C1C.inc new file mode 100644 index 00000000..911bd37a --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6C1C.inc @@ -0,0 +1,45 @@ + .syntax unified + push {lr} + ldr r0, _080A6C34 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A6C6A + ldr r0, _080A6C38 @ =gMenu + ldrh r0, [r0, #8] + cmp r0, #0 + beq _080A6C3C + cmp r0, #1 + beq _080A6C5C + b _080A6C62 + .align 2, 0 +_080A6C34: .4byte gFadeControl +_080A6C38: .4byte gMenu +_080A6C3C: + bl sub_080A66D0 + ldr r0, _080A6C58 @ =gInput + ldrh r0, [r0, #2] + cmp r0, #1 + blt _080A6C6A + cmp r0, #2 + ble _080A6C50 + cmp r0, #8 + bne _080A6C6A +_080A6C50: + bl Subtask_Exit + b _080A6C6A + .align 2, 0 +_080A6C58: .4byte gInput +_080A6C5C: + ldr r0, _080A6C6C @ =0x00000103 + bl SoundReq +_080A6C62: + ldr r1, _080A6C70 @ =gMenu + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] +_080A6C6A: + pop {pc} + .align 2, 0 +_080A6C6C: .4byte 0x00000103 +_080A6C70: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6CD8.inc b/asm/non_matching/subtask2/sub_080A6CD8.inc new file mode 100644 index 00000000..305a151e --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6CD8.inc @@ -0,0 +1,82 @@ + .syntax unified + push {r4, lr} + ldr r0, _080A6D08 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080A6D6E + ldr r1, _080A6D0C @ =gMenu + movs r0, #1 + strb r0, [r1] + movs r4, #0 + ldr r0, _080A6D10 @ =gInput + ldrh r0, [r0, #2] + adds r2, r1, #0 + cmp r0, #0x10 + beq _080A6D34 + cmp r0, #0x10 + bgt _080A6D1A + cmp r0, #2 + beq _080A6D4C + cmp r0, #2 + bgt _080A6D14 + cmp r0, #1 + beq _080A6D38 + b _080A6D54 + .align 2, 0 +_080A6D08: .4byte gFadeControl +_080A6D0C: .4byte gMenu +_080A6D10: .4byte gInput +_080A6D14: + cmp r0, #8 + beq _080A6D38 + b _080A6D54 +_080A6D1A: + cmp r0, #0x40 + beq _080A6D2E + cmp r0, #0x40 + bgt _080A6D28 + cmp r0, #0x20 + beq _080A6D2E + b _080A6D54 +_080A6D28: + cmp r0, #0x80 + beq _080A6D34 + b _080A6D54 +_080A6D2E: + movs r4, #1 + rsbs r4, r4, #0 + b _080A6D58 +_080A6D34: + movs r4, #1 + b _080A6D58 +_080A6D38: + movs r0, #2 + strb r0, [r2] + bl SetMenuType + ldr r0, _080A6D48 @ =0x00000704 + bl MessageFromTarget + b _080A6D54 + .align 2, 0 +_080A6D48: .4byte 0x00000704 +_080A6D4C: + movs r0, #3 + strb r0, [r1] + bl SetMenuType +_080A6D54: + cmp r4, #0 + beq _080A6D6E +_080A6D58: + adds r0, r4, #0 + bl sub_080A6D74 + ldr r1, _080A6D70 @ =gMenu + ldrb r2, [r1, #3] + cmp r0, r2 + beq _080A6D6E + strb r0, [r1, #3] + movs r0, #0x69 + bl SoundReq +_080A6D6E: + pop {r4, pc} + .align 2, 0 +_080A6D70: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6D74.inc b/asm/non_matching/subtask2/sub_080A6D74.inc new file mode 100644 index 00000000..a4d336c1 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6D74.inc @@ -0,0 +1,51 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + ldr r0, _080A6DA4 @ =gSave + ldr r0, [r0, #0x40] + lsrs r2, r0, #0x18 + ldr r0, _080A6DA8 @ =gMenu + ldrb r1, [r0, #3] + cmp r3, #0 + bne _080A6DAC + movs r1, #0 + movs r0, #1 + ands r0, r2 + cmp r0, #0 + bne _080A6DC6 + movs r3, #1 +_080A6D92: + adds r1, #1 + cmp r1, #7 + bhi _080A6DC6 + adds r0, r3, #0 + lsls r0, r1 + ands r0, r2 + cmp r0, #0 + beq _080A6D92 + b _080A6DC6 + .align 2, 0 +_080A6DA4: .4byte gSave +_080A6DA8: .4byte gMenu +_080A6DAC: + cmp r2, #0 + beq _080A6DC6 + movs r4, #7 + movs r5, #1 +_080A6DB4: + adds r0, r1, r3 + adds r1, r0, #0 + adds r1, #8 + ands r1, r4 + adds r0, r5, #0 + lsls r0, r1 + ands r0, r2 + cmp r0, #0 + beq _080A6DB4 +_080A6DC6: + movs r0, #7 + ands r1, r0 + adds r0, r1, #0 + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6DD0.inc b/asm/non_matching/subtask2/sub_080A6DD0.inc new file mode 100644 index 00000000..bcec3f0e --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6DD0.inc @@ -0,0 +1,29 @@ + .syntax unified + push {lr} + bl sub_08056338 + cmp r0, #0 + beq _080A65CC + cmp r0, #1 + beq _080A65D8 + b _080A65EA +_080A65CC: + ldr r1, _080A65D4 @ =gMenu + movs r0, #2 + b _080A65DC + .align 2, 0 +_080A65D4: .4byte gMenu +_080A65D8: + ldr r1, _080A65ECEU @ =gMenu + movs r0, #3 +_080A65DC: + strb r0, [r1] + movs r0, #1 + cmp r0, #0 + beq _080A65EA + movs r0, #3 + bl SetMenuType +_080A65EA: + pop {pc} + .align 2, 0 +_080A65ECEU: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6E70.inc b/asm/non_matching/subtask2/sub_080A6E70.inc new file mode 100644 index 00000000..707c8fe8 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6E70.inc @@ -0,0 +1,110 @@ + .syntax unified +.ifdef EU + push {r4, r5, lr} + ldr r1, _080A66CC @ =gOamCmd + movs r0, #0 + strh r0, [r1, #4] + strh r0, [r1, #6] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r1, #8] + ldr r1, _080A66D0 @ =gMenu + adds r4, r1, #0 + adds r4, #0x2c + ldrb r0, [r4] + adds r0, #1 + strb r0, [r4] + ldrb r0, [r1, #3] + bl sub_080A6EE0 + ldrb r1, [r4] + movs r0, #0x10 + ands r0, r1 + movs r1, #0x5e + cmp r0, #0 + beq _080A6698 + movs r1, #0x5d +_080A6698: + movs r0, #0xfd + lsls r0, r0, #1 + bl DrawDirect + movs r4, #0 + ldr r5, _080A66D4 @ =gSave +_080A66A4EU: + adds r0, r4, #0 + adds r0, #0x18 + movs r1, #1 + lsls r1, r0 + ldr r0, [r5, #0x40] + ands r0, r1 + cmp r0, #0 + beq _080A66C4 + adds r0, r4, #0 + bl sub_080A6EE0 + movs r0, #0xfd + lsls r0, r0, #1 + movs r1, #0x5c + bl DrawDirect +_080A66C4: + adds r4, #1 + cmp r4, #7 + bls _080A66A4EU + pop {r4, r5, pc} + .align 2, 0 +_080A66CC: .4byte gOamCmd +_080A66D0: .4byte gMenu +_080A66D4: .4byte gSave +.else + push {r4, r5, lr} + ldr r1, _080A6ED0 @ =gOamCmd + movs r0, #0 + strh r0, [r1, #4] + strh r0, [r1, #6] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r1, #8] + ldr r1, _080A6ED4 @ =gMenu + adds r4, r1, #0 + adds r4, #0x2c + ldrb r0, [r4] + adds r0, #1 + strb r0, [r4] + ldrb r0, [r1, #3] + bl sub_080A6EE0 + ldrb r1, [r4] + movs r0, #0x10 + ands r0, r1 + movs r1, #0x5e + cmp r0, #0 + beq _080A6EA0 + movs r1, #0x5d +_080A6EA0: + ldr r0, _080A6ED8 @ =0x000001FB + bl DrawDirect + movs r4, #0 + ldr r5, _080A6EDC @ =gSave +_080A6EAA: + adds r0, r4, #0 + adds r0, #0x18 + movs r1, #1 + lsls r1, r0 + ldr r0, [r5, #0x40] + ands r0, r1 + cmp r0, #0 + beq _080A6EC8 + adds r0, r4, #0 + bl sub_080A6EE0 + ldr r0, _080A6ED8 @ =0x000001FB + movs r1, #0x5c + bl DrawDirect +_080A6EC8: + adds r4, #1 + cmp r4, #7 + bls _080A6EAA + pop {r4, r5, pc} + .align 2, 0 +_080A6ED0: .4byte gOamCmd +_080A6ED4: .4byte gMenu +_080A6ED8: .4byte 0x000001FB +_080A6EDC: .4byte gSave +.endif + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6EE0.inc b/asm/non_matching/subtask2/sub_080A6EE0.inc new file mode 100644 index 00000000..1ccb8262 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6EE0.inc @@ -0,0 +1,46 @@ + .syntax unified + push {r4, r5, r6, lr} + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _080A6F34 @ =gUnk_08128024 + adds r1, r1, r0 + ldrh r3, [r1, #6] + ldrh r4, [r1, #8] + ldr r0, _080A6F38 @ =gAreaRoomHeaders + ldrb r2, [r1, #0xb] + lsls r2, r2, #2 + adds r2, r2, r0 + ldrb r1, [r1, #0xc] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r1, [r2] + adds r1, r1, r0 + ldrh r0, [r1] + adds r3, r3, r0 + ldrh r0, [r1, #2] + adds r4, r4, r0 + ldr r6, _080A6F3C @ =gOamCmd + lsls r0, r3, #2 + adds r0, r0, r3 + lsls r0, r0, #5 + movs r5, #0xf9 + lsls r5, r5, #4 + adds r1, r5, #0 + bl __divsi3 + adds r0, #0x28 + strh r0, [r6] + lsls r0, r4, #2 + adds r0, r0, r4 + lsls r0, r0, #5 + adds r1, r5, #0 + bl __divsi3 + adds r0, #0xc + strh r0, [r6, #2] + pop {r4, r5, r6, pc} + .align 2, 0 +_080A6F34: .4byte gUnk_08128024 +_080A6F38: .4byte gAreaRoomHeaders +_080A6F3C: .4byte gOamCmd + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6F40.inc b/asm/non_matching/subtask2/sub_080A6F40.inc new file mode 100644 index 00000000..2b85ee7f --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6F40.inc @@ -0,0 +1,24 @@ + .syntax unified + push {r4, r5, r6, lr} + movs r5, #0 + ldr r4, _080A6F4C @ =gUnk_08128F38 + movs r6, #0 + b _080A6F60 + .align 2, 0 +_080A6F4C: .4byte gUnk_08128F38 +_080A6F50: + ldrb r0, [r4] + ldrb r1, [r4, #1] + bl sub_0807CB24 + lsls r0, r5 + orrs r6, r0 + adds r5, #1 + adds r4, #2 +_080A6F60: + ldrb r0, [r4] + cmp r0, #0 + bne _080A6F50 + mvns r0, r6 + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6F6C.inc b/asm/non_matching/subtask2/sub_080A6F6C.inc new file mode 100644 index 00000000..0e65b62e --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6F6C.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r1, _080A6FA4 @ =gMenu + ldrh r0, [r1, #0x2e] + cmp r0, r4 + beq _080A6F9A + strh r4, [r1, #0x2e] + ldr r0, _080A6FA8 @ =gUnk_020350F0 + movs r1, #0x80 + lsls r1, r1, #1 + bl MemClear + movs r0, #0xff + ands r0, r4 + cmp r0, #0 + beq _080A6F94 + ldr r1, _080A6FAC @ =gUnk_08128FA8 + adds r0, r4, #0 + bl sub_0805F46C +_080A6F94: + ldr r1, _080A6FB0 @ =gScreen + movs r0, #1 + strh r0, [r1, #0xe] +_080A6F9A: + ldr r1, _080A6FB0 @ =gScreen + movs r0, #2 + strh r0, [r1, #0xc] + pop {r4, pc} + .align 2, 0 +_080A6FA4: .4byte gMenu +_080A6FA8: .4byte gUnk_020350F0 +_080A6FAC: .4byte gUnk_08128FA8 +_080A6FB0: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A6FB4.inc b/asm/non_matching/subtask2/sub_080A6FB4.inc new file mode 100644 index 00000000..d1d5d779 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A6FB4.inc @@ -0,0 +1,69 @@ + .syntax unified + push {r4, r5, lr} + adds r2, r0, #0 + movs r4, #0 + cmp r1, #1 + beq _080A6FF0 + cmp r1, #1 + blo _080A6FC8 + cmp r1, #2 + beq _080A6FD6 + b _080A6FFA +_080A6FC8: + ldr r0, _080A6FE4 @ =gSave + movs r1, #1 + lsls r1, r2 + ldr r0, [r0, #0x40] + ands r0, r1 + cmp r0, #0 + beq _080A6FFA +_080A6FD6: + ldr r1, _080A6FE8 @ =gUnk_08127F94 + lsls r0, r2, #3 + adds r0, r0, r1 + ldrh r4, [r0, #6] + ldr r5, _080A6FEC @ =gUnk_08128FC0 + b _080A6FFA + .align 2, 0 +_080A6FE4: .4byte gSave +_080A6FE8: .4byte gUnk_08127F94 +_080A6FEC: .4byte gUnk_08128FC0 +_080A6FF0: + ldr r1, _080A702C @ =gUnk_08128FF0 + lsls r0, r2, #1 + adds r0, r0, r1 + ldrh r4, [r0] + ldr r5, _080A7030 @ =gUnk_08128FD8 +_080A6FFA: + ldr r1, _080A7034 @ =gMenu + ldrh r0, [r1, #0x2e] + cmp r0, r4 + beq _080A7024 + strh r4, [r1, #0x2e] + ldr r0, _080A7038 @ =gUnk_020350F0 + movs r1, #0x80 + lsls r1, r1, #1 + bl MemClear + movs r0, #0xff + ands r0, r4 + cmp r0, #0 + beq _080A701E + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_0805F46C +_080A701E: + ldr r1, _080A703C @ =gScreen + movs r0, #1 + strh r0, [r1, #0xe] +_080A7024: + ldr r1, _080A703C @ =gScreen + movs r0, #2 + strh r0, [r1, #0xc] + pop {r4, r5, pc} + .align 2, 0 +_080A702C: .4byte gUnk_08128FF0 +_080A7030: .4byte gUnk_08128FD8 +_080A7034: .4byte gMenu +_080A7038: .4byte gUnk_020350F0 +_080A703C: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A7040.inc b/asm/non_matching/subtask2/sub_080A7040.inc new file mode 100644 index 00000000..d580cb08 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A7040.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r1, _080A7090 @ =gMenu + ldrh r0, [r1, #0x2e] + cmp r0, r5 + beq _080A708C + strh r5, [r1, #0x2e] + ldr r4, _080A7094 @ =gUnk_02022130 + movs r1, #0xc0 + lsls r1, r1, #2 + adds r0, r4, #0 + bl MemClear + ldr r0, _080A7098 @ =0xFFFFFE00 + adds r4, r4, r0 + ldr r1, _080A709C @ =0x0600E000 + movs r2, #0x80 + lsls r2, r2, #4 + adds r0, r4, #0 + bl MemCopy + ldr r1, _080A70A0 @ =gUnk_08128D70 + lsls r0, r5, #3 + adds r4, r0, r1 + ldrb r0, [r4] + bl GetInventoryValue + cmp r0, #0 + beq _080A7082 + ldrh r0, [r4, #6] + ldr r1, _080A70A4 @ =gUnk_08129004 + bl sub_0805F46C +_080A7082: + ldr r0, _080A70A8 @ =gScreen + movs r1, #3 + strh r1, [r0, #0x18] + movs r1, #1 + strh r1, [r0, #0x1a] +_080A708C: + pop {r4, r5, pc} + .align 2, 0 +_080A7090: .4byte gMenu +_080A7094: .4byte gUnk_02022130 +_080A7098: .4byte 0xFFFFFE00 +_080A709C: .4byte 0x0600E000 +_080A70A0: .4byte gUnk_08128D70 +_080A70A4: .4byte gUnk_08129004 +_080A70A8: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/subtask2/sub_080A70AC.inc b/asm/non_matching/subtask2/sub_080A70AC.inc new file mode 100644 index 00000000..fac44484 --- /dev/null +++ b/asm/non_matching/subtask2/sub_080A70AC.inc @@ -0,0 +1,53 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r4, _080A7110 @ =gUnk_0200AF34 + movs r1, #0xc0 + lsls r1, r1, #2 + adds r0, r4, #0 + bl MemClear + adds r2, r4, #0 + subs r2, #0x34 + movs r0, #0x7f + strb r0, [r2, #0x13] + strb r0, [r2, #0x14] + ldrb r0, [r5] + strh r0, [r2, #0x16] + movs r0, #1 + ldrsb r0, [r5, r0] + strh r0, [r2, #0x1c] + ldrb r1, [r5, #2] + subs r0, r4, #4 + strb r1, [r0] + ldrb r0, [r5, #3] + strh r0, [r2, #0x18] + movs r0, #4 + ldrsb r0, [r5, r0] + strh r0, [r2, #0x1e] + ldrb r1, [r5, #5] + subs r0, r4, #3 + strb r1, [r0] + ldrb r0, [r5, #6] + strh r0, [r2, #0x1a] + movs r0, #7 + ldrsb r0, [r5, r0] + strh r0, [r2, #0x20] + ldrb r0, [r5, #8] + subs r4, #2 + strb r0, [r4] + adds r5, #9 + movs r4, #1 + rsbs r4, r4, #0 +_080A70FC: + ldrb r0, [r5] + ldrb r1, [r5, #1] + bl sub_0801CA6C + adds r5, #2 + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r4 + bne _080A70FC + pop {r4, r5, pc} + .align 2, 0 +_080A7110: .4byte gUnk_0200AF34 + .syntax divided diff --git a/asm/subtask2.s b/asm/subtask2.s deleted file mode 100644 index e3f93a6f..00000000 --- a/asm/subtask2.s +++ /dev/null @@ -1,5147 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080A5594 -sub_080A5594: @ 0x080A5594 - push {r4, r5, r6, r7, lr} - ldr r4, _080A5620 @ =gMenu - ldr r0, _080A5624 @ =gUnk_08128C00 - str r0, [r4, #0xc] - ldr r0, _080A5628 @ =gUnk_08128C04 - bl sub_080A70AC - movs r6, #6 - movs r5, #0x34 - adds r7, r4, #0 - adds r7, #0x10 -_080A55AA: - adds r0, r5, #0 - bl GetInventoryValue - cmp r0, #1 - bne _080A55EA - ldr r1, _080A562C @ =gItemMetaData - lsls r0, r5, #3 - adds r0, r0, r1 - ldrb r1, [r0] - cmp r1, #3 - bne _080A55C8 - ldrb r0, [r4, #0x13] - cmp r0, #0 - beq _080A55C8 - movs r1, #0x63 -_080A55C8: - cmp r1, #0x63 - beq _080A55EA - cmp r1, #1 - bne _080A55D8 - adds r1, r6, #0 - cmp r1, #7 - bhi _080A55D8 - adds r6, r1, #1 -_080A55D8: - adds r0, r1, r7 - strb r5, [r0] - lsls r1, r1, #3 - movs r0, #0xe0 - lsls r0, r0, #2 - adds r1, r1, r0 - adds r0, r5, #0 - bl sub_080A5F48 -_080A55EA: - adds r5, #1 - cmp r5, #0x46 - bls _080A55AA - movs r0, #0x3d - bl GetInventoryValue - cmp r0, #0 - bne _080A564A - movs r5, #0 - movs r0, #0x67 - bl GetInventoryValue - cmp r0, #0 - beq _080A5646 - movs r4, #0 - ldr r1, _080A5630 @ =gUnk_02002B6B -_080A560A: - adds r0, r4, r1 - ldrb r0, [r0] - adds r5, r5, r0 - adds r4, #1 - cmp r4, #0x12 - bls _080A560A - cmp r5, #0x4f - ble _080A5634 - movs r5, #4 - b _080A5646 - .align 2, 0 -_080A5620: .4byte gMenu -_080A5624: .4byte gUnk_08128C00 -_080A5628: .4byte gUnk_08128C04 -_080A562C: .4byte gItemMetaData -_080A5630: .4byte gUnk_02002B6B -_080A5634: - cmp r5, #0x27 - ble _080A563C - movs r5, #3 - b _080A5646 -_080A563C: - cmp r5, #9 - ble _080A5644 - movs r5, #2 - b _080A5646 -_080A5644: - movs r5, #1 -_080A5646: - ldr r0, _080A5698 @ =gMenu - strb r5, [r0, #0x10] -_080A564A: - ldr r0, _080A5698 @ =gMenu - ldr r1, _080A569C @ =gSave - adds r1, #0xa9 - ldrb r1, [r1] - adds r1, #1 - strb r1, [r0, #0x11] - movs r5, #0 - movs r4, #0x48 -_080A565A: - adds r0, r4, #0 - bl GetInventoryValue - cmp r0, #0 - beq _080A5666 - adds r5, #1 -_080A5666: - adds r4, #1 - cmp r4, #0x4f - bls _080A565A - ldr r4, _080A5698 @ =gMenu - strb r5, [r4, #0x12] - movs r0, #0x3e - bl GetInventoryValue - cmp r0, #0 - bne _080A5688 - movs r0, #0x3f - bl GetInventoryValue - cmp r0, #0 - beq _080A5688 - movs r0, #0x3f - strb r0, [r4, #0x13] -_080A5688: - ldr r1, _080A5698 @ =gMenu - movs r0, #1 - strb r0, [r1, #0x14] - strb r0, [r1, #0x15] - bl SetMenuType - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5698: .4byte gMenu -_080A569C: .4byte gSave - - thumb_func_start sub_080A56A0 -sub_080A56A0: @ 0x080A56A0 - push {r4, lr} - bl sub_080A51F4 - cmp r0, #0 - bne _080A56AC - b _080A57F0 -_080A56AC: - ldr r2, _080A56D0 @ =gMenu - ldr r0, _080A56D4 @ =gUnk_08128C00 - str r0, [r2, #0xc] - ldrb r0, [r2, #3] - lsls r0, r0, #3 - ldr r1, _080A56D8 @ =gUnk_08128C14 - adds r4, r0, r1 - movs r3, #0xff - ldr r0, _080A56DC @ =gInput - ldrh r1, [r0, #4] - cmp r1, #0x20 - beq _080A56F2 - cmp r1, #0x20 - bgt _080A56E0 - cmp r1, #0x10 - beq _080A56F6 - b _080A56F8 - .align 2, 0 -_080A56D0: .4byte gMenu -_080A56D4: .4byte gUnk_08128C00 -_080A56D8: .4byte gUnk_08128C14 -_080A56DC: .4byte gInput -_080A56E0: - cmp r1, #0x40 - beq _080A56EA - cmp r1, #0x80 - beq _080A56EE - b _080A56F8 -_080A56EA: - ldrb r3, [r4] - b _080A56F8 -_080A56EE: - ldrb r3, [r4, #1] - b _080A56F8 -_080A56F2: - ldrb r3, [r4, #2] - b _080A56F8 -_080A56F6: - ldrb r3, [r4, #3] -_080A56F8: - cmp r3, #0xff - beq _080A570C - ldr r0, _080A5708 @ =gMenu - strb r3, [r0, #3] - movs r0, #0x69 - bl SoundReq - b _080A575E - .align 2, 0 -_080A5708: .4byte gMenu -_080A570C: - ldrh r0, [r0, #2] - cmp r0, #1 - bne _080A575E - ldrb r3, [r2, #3] - .ifdef DEMO_USA - movs r4, #0 - .else - .ifdef DEMO_JP - movs r4, #0 - .else - movs r1, #0 - .endif - .endif - cmp r3, #2 - beq _080A572E - cmp r3, #2 - bhi _080A5724 - cmp r3, #0 - beq _080A572E - b _080A574E -_080A5724: - cmp r3, #4 - beq _080A5748 - cmp r3, #5 - beq _080A574C - b _080A574E -_080A572E: - ldr r0, _080A5744 @ =gMenu - adds r0, #0x10 - adds r0, r3, r0 - ldrb r0, [r0] - cmp r0, #0 - beq _080A574E - .ifdef DEMO_USA - movs r4, #8 - .else - .ifdef DEMO_JP - movs r4, #8 - .else - movs r1, #8 - .endif - .endif - cmp r3, #0 - bne _080A574E - .ifdef DEMO_USA - movs r4, #7 - .else - .ifdef DEMO_JP - movs r4, #7 - .else - movs r1, #7 - .endif - .endif - b _080A5752 - .align 2, 0 -_080A5744: .4byte gMenu -_080A5748: -.ifdef DEMO_USA - movs r0, #0x6d - bl SoundReq - b _080A574E -_080A574C: - movs r0, #0x6d - bl SoundReq -.else -.ifdef DEMO_JP - movs r0, #0x6d - bl SoundReq - b _080A574E -_080A574C: - movs r0, #0x6d - bl SoundReq -.else - movs r1, #9 - b _080A5752 -_080A574C: - movs r1, #0xa -.endif -.endif -_080A574E: - .ifdef DEMO_USA - cmp r4, #0 - .else - .ifdef DEMO_JP - cmp r4, #0 - .else - cmp r1, #0 - .endif - .endif - beq _080A575E -_080A5752: - .ifdef DEMO_USA - adds r0, r4, #0 - .else - .ifdef DEMO_JP - adds r0, r4, #0 - .else - adds r0, r1, #0 - .endif - .endif - bl sub_080A4E84 - movs r0, #0x6a - bl SoundReq -_080A575E: - ldr r0, _080A5780 @ =gMenu - ldrb r1, [r0, #3] - adds r2, r0, #0 - cmp r1, #0 - beq _080A576C - cmp r1, #2 - bne _080A5788 -_080A576C: - adds r0, r2, #0 - adds r0, #0x10 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, #0 - beq _080A5788 - ldr r1, _080A5784 @ =gUnk_0200AF00 - movs r0, #0x10 - b _080A578C - .align 2, 0 -_080A5780: .4byte gMenu -_080A5784: .4byte gUnk_0200AF00 -_080A5788: - ldr r1, _080A57AC @ =gUnk_0200AF00 - ldr r0, _080A57B0 @ =0x0000FFF0 -_080A578C: - strh r0, [r1, #0x1c] - ldrb r3, [r2, #3] - adds r0, r2, #0 - adds r0, #0x10 - adds r0, r3, r0 - ldrb r2, [r0] - cmp r2, #0 - beq _080A57E6 - cmp r3, #5 - bhi _080A57E6 - lsls r0, r3, #2 - ldr r1, _080A57B4 @ =_080A57B8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A57AC: .4byte gUnk_0200AF00 -_080A57B0: .4byte 0x0000FFF0 -_080A57B4: .4byte _080A57B8 -_080A57B8: @ jump table - .4byte _080A57D0 @ case 0 - .4byte _080A57D8 @ case 1 - .4byte _080A57DC @ case 2 - .4byte _080A57E6 @ case 3 - .4byte _080A57E0 @ case 4 - .4byte _080A57E4 @ case 5 -_080A57D0: - cmp r2, #0x3d - beq _080A57E6 - movs r2, #0x67 - b _080A57E6 -_080A57D8: - movs r2, #0x63 - b _080A57E6 -_080A57DC: - movs r2, #0x70 - b _080A57E6 -_080A57E0: - movs r2, #0x74 - b _080A57E6 -_080A57E4: - movs r2, #0x73 -_080A57E6: - movs r0, #0x80 - lsls r0, r0, #3 - adds r0, r2, r0 - bl sub_080A6F6C -_080A57F0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A57F4 -sub_080A57F4: @ 0x080A57F4 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r2, _080A50A8 @ =gOamCmd - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r2, #4] - strh r1, [r2, #6] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - ldr r1, _080A50AC @ =gUnk_08128C94 - mov sb, r1 - cmp r0, #0 - bne _080A502E - ldr r3, _080A50B0 @ =gUnk_08128C14 - mov sb, r3 -_080A502E: - ldr r0, _080A50B4 @ =gChooseFileState - ldrb r0, [r0, #3] - lsls r0, r0, #3 - mov r1, sb - adds r3, r1, r0 - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r2, #8] - ldrb r0, [r3, #6] - strh r0, [r2] - ldrb r0, [r3, #7] - strh r0, [r2, #2] - ldrb r2, [r3, #4] - ldr r0, _080A50B8 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x10 - ands r0, r1 - adds r1, r2, #0 - adds r1, #0xa - cmp r0, #0 - bne _080A505A - adds r1, #1 -_080A505A: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect - movs r3, #0 - mov r8, r3 - mov r7, sb - adds r7, #5 -_080A506A: - ldr r0, _080A50B4 @ =gChooseFileState - adds r0, #0x10 - mov r1, r8 - adds r6, r1, r0 - ldrb r1, [r6] - cmp r1, #0 - beq _080A50FA - mov r3, r8 - lsls r5, r3, #3 - mov r0, sb - adds r3, r0, r5 - ldr r4, _080A50A8 @ =gOamCmd - ldrb r0, [r7, #1] - strh r0, [r4] - ldrb r2, [r7, #2] - strh r2, [r4, #2] - movs r0, #0xe8 - lsls r0, r0, #8 - strh r0, [r4, #8] - cmp r1, #0x33 - bhi _080A50CA - mov r1, r8 - cmp r1, #2 - bne _080A50BC - ldrb r0, [r7] - adds r1, r0, #0 - adds r1, #0xa - movs r0, #0xfd - lsls r0, r0, #1 - b _080A50F6 - .align 2, 0 -_080A50A8: .4byte gOamCmd -_080A50AC: .4byte gUnk_08128C94 -_080A50B0: .4byte gUnk_08128C14 -_080A50B4: .4byte gChooseFileState -_080A50B8: .4byte gMain -_080A50BC: - ldrb r0, [r6] - adds r0, #9 - ldrb r3, [r3, #5] - adds r1, r0, r3 - movs r0, #0xfd - lsls r0, r0, #1 - b _080A50F6 -_080A50CA: - ldr r3, _080A50E0 @ =0x0000EB80 - adds r0, r5, r3 - strh r0, [r4, #8] - cmp r1, #0x3d - beq _080A50E4 - cmp r1, #0x3e - bne _080A50EA - adds r0, r2, #0 - adds r0, #8 - b _080A50E8 - .align 2, 0 -_080A50E0: .4byte 0x0000EB80 -_080A50E4: - adds r0, r2, #0 - adds r0, #0xd -_080A50E8: - strh r0, [r4, #2] -_080A50EA: - ldr r0, _080A5190 @ =gSpriteAnimations_322 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - ldrb r1, [r0] - ldr r0, _080A5194 @ =0x00000141 -_080A50F6: - bl DrawDirect -_080A50FA: - adds r7, #8 - movs r0, #1 - add r8, r0 - mov r1, r8 - cmp r1, #0xf - bls _080A506A - ldr r4, _080A5198 @ =gChooseFileState - ldrb r0, [r4, #0x12] - cmp r0, #0 - beq _080A5132 - ldr r2, _080A519C @ =gOamCmd - movs r3, #0x80 - lsls r3, r3, #4 - adds r1, r3, #0 - adds r0, r0, r1 - strh r0, [r2, #8] - mov r3, sb - adds r3, #0x10 - ldrb r0, [r3, #6] - adds r0, #9 - strh r0, [r2] - ldrb r0, [r3, #7] - adds r0, #7 - strh r0, [r2, #2] - movs r0, #0 - movs r1, #1 - bl DrawDirect -_080A5132: - ldrb r0, [r4, #0x13] - cmp r0, #0x3f - bne _080A5188 - mov r3, sb - adds r3, #0x18 - ldr r1, _080A519C @ =gOamCmd - ldrb r0, [r3, #6] - adds r0, #8 - strh r0, [r1] - ldrb r0, [r3, #7] - adds r0, #8 - strh r0, [r1, #2] - ldr r0, _080A51A0 @ =gSave - adds r0, #0xc2 - ldrh r4, [r0] - movs r0, #0 - mov r8, r0 - adds r5, r1, #0 -_080A5156: - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r0, r1 - strh r0, [r5, #8] - movs r0, #0 - movs r1, #1 - bl DrawDirect - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - adds r4, r0, #0 - ldrh r0, [r5] - subs r0, #8 - strh r0, [r5] - movs r3, #1 - add r8, r3 - mov r0, r8 - cmp r0, #2 - bls _080A5156 -_080A5188: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5190: .4byte gSpriteAnimations_322 -_080A5194: .4byte 0x00000141 -_080A5198: .4byte gChooseFileState -_080A519C: .4byte gOamCmd -_080A51A0: .4byte gSave - - -.else - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r2, _080A5890 @ =gOamCmd - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r2, #4] - strh r1, [r2, #6] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - ldr r1, _080A5894 @ =gUnk_08128C94 - mov sb, r1 - cmp r0, #0 - bne _080A581A - ldr r3, _080A5898 @ =gUnk_08128C14 - mov sb, r3 -_080A581A: - ldr r0, _080A589C @ =gMenu - ldrb r0, [r0, #3] - lsls r0, r0, #3 - mov r1, sb - adds r3, r1, r0 - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r2, #8] - ldrb r0, [r3, #6] - strh r0, [r2] - ldrb r0, [r3, #7] - strh r0, [r2, #2] - ldrb r2, [r3, #4] - ldr r0, _080A58A0 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x10 - ands r0, r1 - adds r1, r2, #0 - adds r1, #0xa - cmp r0, #0 - bne _080A5846 - adds r1, #1 -_080A5846: - ldr r0, _080A58A4 @ =0x000001FB - bl DrawDirect - movs r3, #0 - mov r8, r3 - mov r7, sb - adds r7, #5 -_080A5854: - ldr r0, _080A589C @ =gMenu - adds r0, #0x10 - mov r1, r8 - adds r6, r1, r0 - ldrb r1, [r6] - cmp r1, #0 - beq _080A58E8 - mov r3, r8 - lsls r5, r3, #3 - mov r0, sb - adds r3, r0, r5 - ldr r4, _080A5890 @ =gOamCmd - ldrb r0, [r7, #1] - strh r0, [r4] - ldrb r2, [r7, #2] - strh r2, [r4, #2] - movs r0, #0xe8 - lsls r0, r0, #8 - strh r0, [r4, #8] - cmp r1, #0x33 - bhi _080A58B8 - mov r1, r8 - cmp r1, #2 - bne _080A58A8 - ldrb r0, [r7] - adds r1, r0, #0 - adds r1, #0xa - ldr r0, _080A58A4 @ =0x000001FB - b _080A58E4 - .align 2, 0 -_080A5890: .4byte gOamCmd -_080A5894: .4byte gUnk_08128C94 -_080A5898: .4byte gUnk_08128C14 -_080A589C: .4byte gMenu -_080A58A0: .4byte gMain -_080A58A4: .4byte 0x000001FB -_080A58A8: - ldrb r0, [r6] - adds r0, #9 - ldrb r3, [r3, #5] - adds r1, r0, r3 - ldr r0, _080A58B4 @ =0x000001FB - b _080A58E4 - .align 2, 0 -_080A58B4: .4byte 0x000001FB -_080A58B8: - ldr r3, _080A58CC @ =0x0000EB80 - adds r0, r5, r3 - strh r0, [r4, #8] - cmp r1, #0x3d - beq _080A58D0 - cmp r1, #0x3e - bne _080A58D6 - adds r0, r2, #0 - adds r0, #8 - b _080A58D4 - .align 2, 0 -_080A58CC: .4byte 0x0000EB80 -_080A58D0: - adds r0, r2, #0 - adds r0, #0xd -_080A58D4: - strh r0, [r4, #2] -_080A58D6: - ldr r0, _080A5980 @ =gSpriteAnimations_322 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - ldrb r1, [r0] - movs r0, #0xa1 - lsls r0, r0, #1 -_080A58E4: - bl DrawDirect -_080A58E8: - adds r7, #8 - movs r0, #1 - add r8, r0 - mov r1, r8 - cmp r1, #0xf - bls _080A5854 - ldr r4, _080A5984 @ =gMenu - ldrb r0, [r4, #0x12] - cmp r0, #0 - beq _080A5920 - ldr r2, _080A5988 @ =gOamCmd - movs r3, #0x80 - lsls r3, r3, #4 - adds r1, r3, #0 - adds r0, r0, r1 - strh r0, [r2, #8] - mov r3, sb - adds r3, #0x10 - ldrb r0, [r3, #6] - adds r0, #9 - strh r0, [r2] - ldrb r0, [r3, #7] - adds r0, #7 - strh r0, [r2, #2] - movs r0, #0 - movs r1, #1 - bl DrawDirect -_080A5920: - ldrb r0, [r4, #0x13] - cmp r0, #0x3f - bne _080A5976 - mov r3, sb - adds r3, #0x18 - ldr r1, _080A5988 @ =gOamCmd - ldrb r0, [r3, #6] - adds r0, #8 - strh r0, [r1] - ldrb r0, [r3, #7] - adds r0, #8 - strh r0, [r1, #2] - ldr r0, _080A598C @ =gSave - adds r0, #0xc2 - ldrh r4, [r0] - movs r0, #0 - mov r8, r0 - adds r5, r1, #0 -_080A5944: - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r0, r1 - strh r0, [r5, #8] - movs r0, #0 - movs r1, #1 - bl DrawDirect - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - adds r4, r0, #0 - ldrh r0, [r5] - subs r0, #8 - strh r0, [r5] - movs r3, #1 - add r8, r3 - mov r0, r8 - cmp r0, #2 - bls _080A5944 -_080A5976: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5980: .4byte gSpriteAnimations_322 -_080A5984: .4byte gMenu -_080A5988: .4byte gOamCmd -_080A598C: .4byte gSave -.endif - - thumb_func_start sub_080A5990 -sub_080A5990: @ 0x080A5990 - push {lr} - ldr r1, _080A59A4 @ =gUnk_08128D14 - ldr r0, _080A59A8 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A59A4: .4byte gUnk_08128D14 -_080A59A8: .4byte gMenu - - thumb_func_start sub_080A59AC -sub_080A59AC: @ 0x080A59AC - push {lr} - ldr r1, _080A59C4 @ =gMenu - movs r0, #0 - strb r0, [r1, #3] - movs r1, #0 - bl SetPopupState - movs r0, #1 - bl SetMenuType - pop {pc} - .align 2, 0 -_080A59C4: .4byte gMenu - - thumb_func_start sub_080A59C8 -sub_080A59C8: @ 0x080A59C8 - push {lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A5A52 - ldr r1, _080A59EC @ =gMenu - ldrb r2, [r1, #3] - movs r3, #0 - ldr r0, _080A59F0 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #2 - beq _080A5A02 - cmp r0, #2 - bgt _080A59F4 - cmp r0, #1 - beq _080A5A0A - b _080A5A0C - .align 2, 0 -_080A59EC: .4byte gMenu -_080A59F0: .4byte gInput -_080A59F4: - cmp r0, #0x40 - beq _080A59FE - cmp r0, #0x80 - beq _080A5A06 - b _080A5A0C -_080A59FE: - movs r2, #0 - b _080A5A0C -_080A5A02: - cmp r2, #0 - bne _080A5A10 -_080A5A06: - movs r2, #1 - b _080A5A0C -_080A5A0A: - movs r3, #1 -_080A5A0C: - cmp r3, #0 - beq _080A5A3C -_080A5A10: - movs r0, #0xff - strh r0, [r1, #8] - cmp r2, #0 - bne _080A5A2E - movs r0, #8 - movs r1, #0 - bl CreateDialogBox - movs r0, #2 - bl SetMenuType - movs r0, #0x6a - bl SoundReq - b _080A5A52 -_080A5A2E: - movs r0, #3 - bl SetMenuType - movs r0, #0x6c - bl SoundReq - b _080A5A52 -_080A5A3C: - ldrb r0, [r1, #3] - cmp r0, r2 - beq _080A5A52 - strb r2, [r1, #3] - movs r0, #0 - adds r1, r2, #0 - bl SetPopupState - movs r0, #0x69 - bl SoundReq -_080A5A52: - pop {pc} - - thumb_func_start sub_080A5A54 -sub_080A5A54: @ 0x080A5A54 - push {lr} - movs r0, #0 - bl HandleSave - adds r1, r0, #0 - cmp r1, #0 - beq _080A5A8A - cmp r1, #0 - bgt _080A5A70 - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _080A5A76 - b _080A5A8A -_080A5A70: - cmp r1, #1 - beq _080A5A84 - b _080A5A8A -_080A5A76: - movs r0, #9 - movs r1, #0 - bl CreateDialogBox - ldr r1, _080A5A8C @ =gMenu - movs r0, #0x3c - strh r0, [r1, #8] -_080A5A84: - movs r0, #3 - bl SetMenuType -_080A5A8A: - pop {pc} - .align 2, 0 -_080A5A8C: .4byte gMenu - - thumb_func_start sub_080A5A90 -sub_080A5A90: @ 0x080A5A90 - push {lr} - ldr r2, _080A5AA4 @ =gMenu - ldrh r0, [r2, #8] - cmp r0, #0 - beq _080A5AA8 - cmp r0, #0xff - beq _080A5AC0 - subs r0, #1 - strh r0, [r2, #8] - b _080A5AD2 - .align 2, 0 -_080A5AA4: .4byte gMenu -_080A5AA8: - ldr r0, _080A5ABC @ =gInput - ldrh r1, [r0, #2] - movs r0, #0xb - ands r0, r1 - cmp r0, #0 - beq _080A5AD2 - movs r0, #0xff - strh r0, [r2, #8] - b _080A5AD2 - .align 2, 0 -_080A5ABC: .4byte gInput -_080A5AC0: - ldr r0, _080A5AD4 @ =gUnk_02034490 - ldrb r0, [r0, #1] - movs r1, #1 - cmp r0, #0xa - bne _080A5ACC - movs r1, #2 -_080A5ACC: - adds r0, r1, #0 - bl sub_080A4E84 -_080A5AD2: - pop {pc} - .align 2, 0 -_080A5AD4: .4byte gUnk_02034490 - - thumb_func_start sub_080A5AD8 -sub_080A5AD8: @ 0x080A5AD8 - push {lr} - ldr r1, _080A5AEC @ =gUnk_08128D24 - ldr r0, _080A5AF0 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A5AEC: .4byte gUnk_08128D24 -_080A5AF0: .4byte gMenu - - thumb_func_start sub_080A5AF4 -sub_080A5AF4: @ 0x080A5AF4 -.ifdef EU - push {lr} - ldr r1, _080A5B18 @ =gMenu - movs r0, #0 - strb r0, [r1, #3] -.else - push {r4, lr} - ldr r0, _080A5B18 @ =gMenu - movs r4, #0 - strb r4, [r0, #3] -.endif - movs r0, #2 - movs r1, #0 - bl SetPopupState -.ifndef EU - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - bne _080A5B24 - ldr r1, _080A5B1C @ =gScreen - ldr r0, _080A5B20 @ =0x0000FFFC - strh r0, [r1, #0x18] - b _080A5B28 - .align 2, 0 -_080A5B18: .4byte gMenu -_080A5B1C: .4byte gScreen -_080A5B20: .4byte 0x0000FFFC -_080A5B24: - ldr r0, _080A5B30 @ =gScreen - strh r4, [r0, #0x18] -.endif -_080A5B28: - movs r0, #1 - bl SetMenuType -.ifdef EU - pop {pc} -.else - pop {r4, pc} -.endif - .align 2, 0 -.ifdef EU -_080A5B18: .4byte gMenu -.else -_080A5B30: .4byte gScreen -.endif - - thumb_func_start sub_080A5B34 -sub_080A5B34: @ 0x080A5B34 - push {r4, r5, r6, lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A5BB6 - ldr r1, _080A5B58 @ =gMenu - ldrb r4, [r1, #3] - movs r5, #0 - ldr r0, _080A5B5C @ =gInput - ldrh r0, [r0, #2] - adds r6, r1, #0 - cmp r0, #2 - beq _080A5B6C - cmp r0, #2 - bgt _080A5B60 - cmp r0, #1 - beq _080A5B74 - b _080A5B76 - .align 2, 0 -_080A5B58: .4byte gMenu -_080A5B5C: .4byte gInput -_080A5B60: - cmp r0, #0x10 - beq _080A5B70 - cmp r0, #0x20 - bne _080A5B76 - movs r4, #0 - b _080A5B76 -_080A5B6C: - cmp r4, #0 - bne _080A5B74 -_080A5B70: - movs r4, #1 - b _080A5B76 -_080A5B74: - movs r5, #1 -_080A5B76: - adds r1, r6, #0 - ldrb r0, [r1, #3] - cmp r0, r4 - beq _080A5B8E - strb r4, [r1, #3] - movs r0, #2 - adds r1, r4, #0 - bl SetPopupState - movs r0, #0x69 - bl SoundReq -_080A5B8E: - cmp r5, #0 - beq _080A5BB6 - cmp r4, #0 - bne _080A5BAA - movs r0, #7 - movs r1, #0x20 - bl SetFade - movs r0, #0x3c - strh r0, [r6, #8] - movs r0, #2 - bl SetMenuType - b _080A5BB6 -_080A5BAA: - movs r0, #0x6c - bl SoundReq - movs r0, #2 - bl sub_080A4E84 -_080A5BB6: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080A5BB8 -sub_080A5BB8: @ 0x080A5BB8 - push {lr} - ldr r0, _080A5BE4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A5BE2 - bl sub_08050384 - ldr r1, _080A5BE8 @ =gMain - ldrb r0, [r1, #1] - movs r0, #1 - strb r0, [r1, #1] - movs r0, #6 - movs r1, #8 - bl SetFade - movs r0, #2 - bl sub_080A4E84 - ldr r1, _080A5BEC @ =gUnk_02034490 - movs r0, #0x10 - strb r0, [r1, #0x16] -_080A5BE2: - pop {pc} - .align 2, 0 -_080A5BE4: .4byte gFadeControl -_080A5BE8: .4byte gMain -_080A5BEC: .4byte gUnk_02034490 - - thumb_func_start sub_080A5BF0 -sub_080A5BF0: @ 0x080A5BF0 - push {r4, r5, lr} - ldr r1, _080A5C30 @ =gUnk_08128D30 - ldr r0, _080A5C34 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_080A5D1C - ldr r0, _080A5C38 @ =gMain - ldrh r0, [r0, #0xc] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080A5C2E - ldr r4, _080A5C3C @ =gUnk_02017830 - ldrh r5, [r4] - adds r0, r4, #2 - adds r1, r4, #0 - movs r2, #0xe - bl MemCopy - strh r5, [r4, #0xe] - ldr r2, _080A5C40 @ =gUsedPalettes - ldr r0, [r2] - movs r1, #0x80 - lsls r1, r1, #5 - orrs r0, r1 - str r0, [r2] -_080A5C2E: - pop {r4, r5, pc} - .align 2, 0 -_080A5C30: .4byte gUnk_08128D30 -_080A5C34: .4byte gMenu -_080A5C38: .4byte gMain -_080A5C3C: .4byte gUnk_02017830 -_080A5C40: .4byte gUsedPalettes - - thumb_func_start sub_080A5C44 -sub_080A5C44: @ 0x080A5C44 - push {r4, lr} - ldr r1, _080A5C88 @ =gMenu - ldr r0, _080A5C8C @ =gUnk_08128D38 - str r0, [r1, #0xc] - ldrb r0, [r1, #3] - bl sub_080A5CFC - movs r0, #0x81 - bl LoadGfxGroup - ldr r4, _080A5C90 @ =gArea - ldrb r0, [r4, #3] - movs r1, #1 - bl sub_080A6FB4 - movs r0, #1 - bl SetMenuType - ldrb r1, [r4, #3] - lsls r1, r1, #1 - ldr r0, _080A5C94 @ =gUnk_08128D43 - adds r1, r1, r0 - ldr r2, _080A5C98 @ =gScreen - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r3, [r2, #0x16] - adds r0, r0, r3 - strh r0, [r2, #0x16] - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r1, [r2, #0x18] - adds r0, r0, r1 - strh r0, [r2, #0x18] - pop {r4, pc} - .align 2, 0 -_080A5C88: .4byte gMenu -_080A5C8C: .4byte gUnk_08128D38 -_080A5C90: .4byte gArea -_080A5C94: .4byte gUnk_08128D43 -_080A5C98: .4byte gScreen - - thumb_func_start sub_080A5C9C -sub_080A5C9C: @ 0x080A5C9C - push {lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A5CFA - ldr r0, _080A5CC4 @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - ldr r1, _080A5CC8 @ =gUnk_080C9C6C - adds r3, r0, r1 - ldr r1, _080A5CCC @ =gMenu - ldrb r2, [r1, #3] - ldr r0, _080A5CD0 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #0x40 - beq _080A5CD4 - cmp r0, #0x80 - beq _080A5CDC - b _080A5CE6 - .align 2, 0 -_080A5CC4: .4byte gArea -_080A5CC8: .4byte gUnk_080C9C6C -_080A5CCC: .4byte gMenu -_080A5CD0: .4byte gInput -_080A5CD4: - cmp r2, #0 - ble _080A5CE6 - subs r2, #1 - b _080A5CE6 -_080A5CDC: - ldrb r0, [r3] - subs r0, #1 - cmp r0, r2 - ble _080A5CE6 - adds r2, #1 -_080A5CE6: - ldrb r0, [r1, #3] - cmp r0, r2 - beq _080A5CFA - strb r2, [r1, #3] - adds r0, r2, #0 - bl sub_080A5CFC - movs r0, #0x69 - bl SoundReq -_080A5CFA: - pop {pc} - - thumb_func_start sub_080A5CFC -sub_080A5CFC: @ 0x080A5CFC - push {r4, lr} - adds r4, r0, #0 - bl DrawDungeonFeatures - bl LoadDungeonMap - ldr r1, _080A5D18 @ =gUnk_02019EE0 - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r4, #0 - bl DrawDungeonMap - pop {r4, pc} - .align 2, 0 -_080A5D18: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A5D1C -sub_080A5D1C: @ 0x080A5D1C -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _080A5690 @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - ldr r1, _080A5694 @ =gUnk_080C9C6C - adds r7, r0, r1 - ldr r1, _080A5698EU @ =gUnk_08128D3C - ldrb r0, [r7] - adds r0, r0, r1 - ldrb r6, [r0] - bl sub_0801DB94 - mov r8, r0 - ldr r5, _080A569CEU @ =gOamCmd - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r5, #4] - movs r0, #0 - strh r0, [r5, #6] - strh r0, [r5, #8] - movs r0, #0x34 - strh r0, [r5] - ldr r0, _080A56A0 @ =gChooseFileState - ldrb r1, [r0, #3] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - ldr r1, _080A56A4 @ =gMain - mov sl, r1 - ldrh r1, [r1, #0xc] - movs r0, #0x10 - ands r0, r1 - movs r1, #0x74 - cmp r0, #0 - bne _080A5560 - movs r1, #0x75 -_080A5560: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect - movs r0, #0x20 - mov sb, r0 - mov r1, sb - strh r1, [r5] - mov r1, r8 - lsls r0, r1, #1 - add r0, r8 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - mov r0, sl - ldrh r1, [r0, #0xc] - mov r0, sb - ands r0, r1 - movs r1, #0x79 - cmp r0, #0 - beq _080A558C - movs r1, #0x78 -_080A558C: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect - movs r0, #0x7e - strh r0, [r5, #2] - movs r0, #0x87 - lsls r0, r0, #7 - strh r0, [r5, #8] - bl HasDungeonSmallKey - cmp r0, #0 - beq _080A55BE - movs r0, #0x18 - strh r0, [r5] - ldr r0, _080A56A8 @ =gSpriteAnimations_322 - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r4, [r0] - ldr r0, _080A56ACEU @ =0x00000143 - adds r1, r4, #0 - bl DrawDirect -_080A55BE: - bl HasDungeonCompass - cmp r0, #0 - beq _080A55DE - movs r0, #0x2e - strh r0, [r5] - ldr r0, _080A56A8 @ =gSpriteAnimations_322 - movs r1, #0xa4 - lsls r1, r1, #1 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r4, [r0] - ldr r0, _080A56ACEU @ =0x00000143 - adds r1, r4, #0 - bl DrawDirect -_080A55DE: - bl HasDungeonBigKey - cmp r0, #0 - beq _080A563CEU - movs r0, #0x45 - strh r0, [r5] - movs r0, #0xe0 - lsls r0, r0, #2 - strh r0, [r5, #8] - ldr r0, _080A56A8 @ =gSpriteAnimations_322 - movs r1, #0xa2 - lsls r1, r1, #1 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r4, [r0] - ldr r0, _080A56ACEU @ =0x00000143 - adds r1, r4, #0 - bl DrawDirect - bl sub_080A5F24 - cmp r0, #0 - beq _080A563CEU - movs r0, #0 - strh r0, [r5, #8] - movs r0, #0x46 - strh r0, [r5] - ldrb r1, [r7, #1] - ldrb r0, [r7, #2] - subs r1, r1, r0 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - mov r0, sl - ldrh r1, [r0, #0xc] - mov r0, sb - ands r0, r1 - movs r1, #0x7b - cmp r0, #0 - beq _080A5634EU - movs r1, #0x7a -_080A5634EU: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect -_080A563CEU: - ldr r1, _080A569CEU @ =gOamCmd - movs r0, #0 - strh r0, [r1, #8] - movs r0, #0x34 - strh r0, [r1] - strh r6, [r1, #2] - ldrb r0, [r7, #1] - adds r4, r0, #0 - adds r4, #0x82 - movs r5, #0 - ldrb r0, [r7] - cmp r5, r0 - bhs _080A5672 - adds r6, r1, #0 -_080A5658: - movs r0, #0xfd - lsls r0, r0, #1 - adds r1, r4, #0 - bl DrawDirect - subs r4, #1 - ldrh r0, [r6, #2] - adds r0, #0xc - strh r0, [r6, #2] - adds r5, #1 - ldrb r1, [r7] - cmp r5, r1 - blo _080A5658 -_080A5672: - ldr r5, _080A56B0 @ =gUnk_02019EE0 - ldrb r0, [r5] - cmp r0, #0 - beq _080A570E - ldr r7, _080A569CEU @ =gOamCmd - ldr r6, _080A56B4 @ =gScreen -_080A567E: - ldrb r0, [r5] - cmp r0, #2 - beq _080A56D4EU - cmp r0, #2 - bgt _080A56B8 - cmp r0, #1 - beq _080A56C2 - b _080A56E6 - .align 2, 0 -_080A5690: .4byte gArea -_080A5694: .4byte gUnk_080C9C6C -_080A5698EU: .4byte gUnk_08128D3C -_080A569CEU: .4byte gOamCmd -_080A56A0: .4byte gChooseFileState -_080A56A4: .4byte gMain -_080A56A8: .4byte gSpriteAnimations_322 -_080A56ACEU: .4byte 0x00000143 -_080A56B0: .4byte gUnk_02019EE0 -_080A56B4: .4byte gScreen -_080A56B8: - cmp r0, #3 - beq _080A56D8EU - cmp r0, #4 - beq _080A56DCEU - b _080A56E6 -_080A56C2: - movs r4, #0x7d - ldr r0, _080A56D0EU @ =gChooseFileState - ldrb r0, [r0, #3] - cmp r8, r0 - beq _080A56E8 - movs r4, #0x7e - b _080A56E8 - .align 2, 0 -_080A56D0EU: .4byte gChooseFileState -_080A56D4EU: - movs r4, #0x80 - b _080A56E8 -_080A56D8EU: - movs r4, #0x81 - b _080A56E8 -_080A56DCEU: - bl sub_080A5F24 - movs r4, #0x7f - cmp r0, #0 - bne _080A56E8 -_080A56E6: - movs r4, #0xff -_080A56E8: - ldrb r0, [r5, #1] - adds r0, #0x50 - ldrh r1, [r6, #0x16] - subs r0, r0, r1 - strh r0, [r7] - ldrb r0, [r5, #2] - adds r0, #0x10 - ldrh r1, [r6, #0x18] - subs r0, r0, r1 - strh r0, [r7, #2] - movs r0, #0xfd - lsls r0, r0, #1 - adds r1, r4, #0 - bl DrawDirect - adds r5, #3 - ldrb r0, [r5] - cmp r0, #0 - bne _080A567E -_080A570E: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - -.else - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _080A5E98 @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - ldr r1, _080A5E9C @ =gUnk_080C9C6C - adds r7, r0, r1 - ldr r1, _080A5EA0 @ =gUnk_08128D3C - ldrb r0, [r7] - adds r0, r0, r1 - ldrb r6, [r0] - bl sub_0801DB94 - mov r8, r0 - ldr r5, _080A5EA4 @ =gOamCmd - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r5, #4] - movs r0, #0 - strh r0, [r5, #6] - strh r0, [r5, #8] - movs r0, #0x34 - strh r0, [r5] - ldr r0, _080A5EA8 @ =gMenu - ldrb r1, [r0, #3] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - ldr r1, _080A5EAC @ =gMain - mov sl, r1 - ldrh r1, [r1, #0xc] - movs r0, #0x10 - ands r0, r1 - movs r1, #0x74 - cmp r0, #0 - bne _080A5D70 - movs r1, #0x75 -_080A5D70: - ldr r0, _080A5EB0 @ =0x000001FB - bl DrawDirect - movs r0, #0x20 - mov sb, r0 - mov r1, sb - strh r1, [r5] - mov r1, r8 - lsls r0, r1, #1 - add r0, r8 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - mov r0, sl - ldrh r1, [r0, #0xc] - mov r0, sb - ands r0, r1 - movs r1, #0x79 - cmp r0, #0 - beq _080A5D9A - movs r1, #0x78 -_080A5D9A: - ldr r0, _080A5EB0 @ =0x000001FB - bl DrawDirect - movs r0, #0x7e - strh r0, [r5, #2] - movs r0, #0x87 - lsls r0, r0, #7 - strh r0, [r5, #8] - bl HasDungeonSmallKey - cmp r0, #0 - beq _080A5DCC - movs r0, #0x18 - strh r0, [r5] - ldr r0, _080A5EB4 @ =gSpriteAnimations_322 - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r4, [r0] - movs r0, #0xa2 - lsls r0, r0, #1 - adds r1, r4, #0 - bl DrawDirect -_080A5DCC: - bl HasDungeonCompass - cmp r0, #0 - beq _080A5DEE - movs r0, #0x2e - strh r0, [r5] - ldr r0, _080A5EB4 @ =gSpriteAnimations_322 - movs r1, #0xa4 - lsls r1, r1, #1 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r4, [r0] - movs r0, #0xa2 - lsls r0, r0, #1 - adds r1, r4, #0 - bl DrawDirect -_080A5DEE: - bl HasDungeonBigKey - cmp r0, #0 - beq _080A5E48 - movs r0, #0x45 - strh r0, [r5] - movs r0, #0xe0 - lsls r0, r0, #2 - strh r0, [r5, #8] - ldr r1, _080A5EB4 @ =gSpriteAnimations_322 - movs r0, #0xa2 - lsls r0, r0, #1 - adds r1, r1, r0 - ldr r1, [r1] - ldrb r4, [r1] - adds r1, r4, #0 - bl DrawDirect - bl sub_080A5F24 - cmp r0, #0 - beq _080A5E48 - movs r0, #0 - strh r0, [r5, #8] - movs r0, #0x46 - strh r0, [r5] - ldrb r1, [r7, #1] - ldrb r0, [r7, #2] - subs r1, r1, r0 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r6, r0 - strh r0, [r5, #2] - mov r0, sl - ldrh r1, [r0, #0xc] - mov r0, sb - ands r0, r1 - movs r1, #0x7b - cmp r0, #0 - beq _080A5E42 - movs r1, #0x7a -_080A5E42: - ldr r0, _080A5EB0 @ =0x000001FB - bl DrawDirect -_080A5E48: - ldr r1, _080A5EA4 @ =gOamCmd - movs r0, #0 - strh r0, [r1, #8] - movs r0, #0x34 - strh r0, [r1] - strh r6, [r1, #2] - ldrb r0, [r7, #1] - adds r4, r0, #0 - adds r4, #0x82 - movs r5, #0 - ldrb r0, [r7] - cmp r5, r0 - bhs _080A5E7C - adds r6, r1, #0 -_080A5E64: - ldr r0, _080A5EB0 @ =0x000001FB - adds r1, r4, #0 - bl DrawDirect - subs r4, #1 - ldrh r0, [r6, #2] - adds r0, #0xc - strh r0, [r6, #2] - adds r5, #1 - ldrb r1, [r7] - cmp r5, r1 - blo _080A5E64 -_080A5E7C: - ldr r5, _080A5EB8 @ =gUnk_02019EE0 - ldrb r0, [r5] - cmp r0, #0 - beq _080A5F14 - ldr r7, _080A5EA4 @ =gOamCmd - ldr r6, _080A5EBC @ =gScreen -_080A5E88: - ldrb r0, [r5] - cmp r0, #2 - beq _080A5EDC - cmp r0, #2 - bgt _080A5EC0 - cmp r0, #1 - beq _080A5ECA - b _080A5EEE - .align 2, 0 -_080A5E98: .4byte gArea -_080A5E9C: .4byte gUnk_080C9C6C -_080A5EA0: .4byte gUnk_08128D3C -_080A5EA4: .4byte gOamCmd -_080A5EA8: .4byte gMenu -_080A5EAC: .4byte gMain -_080A5EB0: .4byte 0x000001FB -_080A5EB4: .4byte gSpriteAnimations_322 -_080A5EB8: .4byte gUnk_02019EE0 -_080A5EBC: .4byte gScreen -_080A5EC0: - cmp r0, #3 - beq _080A5EE0 - cmp r0, #4 - beq _080A5EE4 - b _080A5EEE -_080A5ECA: - movs r4, #0x7d - ldr r0, _080A5ED8 @ =gMenu - ldrb r0, [r0, #3] - cmp r8, r0 - beq _080A5EF0 - movs r4, #0x7e - b _080A5EF0 - .align 2, 0 -_080A5ED8: .4byte gMenu -_080A5EDC: - movs r4, #0x80 - b _080A5EF0 -_080A5EE0: - movs r4, #0x81 - b _080A5EF0 -_080A5EE4: - bl sub_080A5F24 - movs r4, #0x7f - cmp r0, #0 - bne _080A5EF0 -_080A5EEE: - movs r4, #0xff -_080A5EF0: - ldrb r0, [r5, #1] - adds r0, #0x50 - ldrh r1, [r6, #0x16] - subs r0, r0, r1 - strh r0, [r7] - ldrb r0, [r5, #2] - adds r0, #0x10 - ldrh r1, [r6, #0x18] - subs r0, r0, r1 - strh r0, [r7, #2] - ldr r0, _080A5F20 @ =0x000001FB - adds r1, r4, #0 - bl DrawDirect - adds r5, #3 - ldrb r0, [r5] - cmp r0, #0 - bne _080A5E88 -_080A5F14: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5F20: .4byte 0x000001FB -.endif - - thumb_func_start sub_080A5F24 -sub_080A5F24: @ 0x080A5F24 - push {r4, lr} - movs r4, #1 - ldr r0, _080A5F44 @ =gArea - ldrb r0, [r0, #3] - cmp r0, #6 - bne _080A5F40 - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x7b - bl CheckLocalFlagByBank - cmp r0, #0 - beq _080A5F40 - movs r4, #0 -_080A5F40: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_080A5F44: .4byte gArea - - thumb_func_start sub_080A5F48 -sub_080A5F48: @ 0x080A5F48 - push {r4, r5, lr} - adds r4, r0, #0 - cmp r4, #0x1f - bhi _080A5F5C - cmp r4, #0x1c - blo _080A5F5C - ldr r0, _080A5F9C @ =gSave - adds r0, r0, r4 - adds r0, #0x9a - ldrb r4, [r0] -_080A5F5C: - lsls r0, r1, #5 - ldr r1, _080A5FA0 @ =0x06010000 - adds r5, r0, r1 - ldr r1, _080A5FA4 @ =gSpriteAnimations_322 - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r1, [r0] - ldr r3, _080A5FA8 @ =gMoreSpritePtrs - lsls r1, r1, #2 - ldr r0, [r3, #4] - adds r0, r0, r1 - ldr r2, _080A5FAC @ =0x040000D4 - ldrh r1, [r0, #2] - lsls r1, r1, #5 - ldr r0, [r3, #8] - adds r0, r0, r1 - str r0, [r2] - str r5, [r2, #4] - ldr r0, _080A5FB0 @ =0x84000040 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r0, #1 - rsbs r0, r0, #0 - cmp r4, #7 - blo _080A5FBE - cmp r4, #8 - bhi _080A5FB4 - ldr r0, _080A5F9C @ =gSave - adds r0, #0xac - b _080A5FBC - .align 2, 0 -_080A5F9C: .4byte gSave -_080A5FA0: .4byte 0x06010000 -_080A5FA4: .4byte gSpriteAnimations_322 -_080A5FA8: .4byte gMoreSpritePtrs -_080A5FAC: .4byte 0x040000D4 -_080A5FB0: .4byte 0x84000040 -_080A5FB4: - cmp r4, #0xa - bhi _080A5FBE - ldr r0, _080A5FF8 @ =gSave - adds r0, #0xad -_080A5FBC: - ldrb r0, [r0] -_080A5FBE: - cmp r0, #0 - blt _080A5FF6 - movs r1, #0xa - bl Div - adds r4, r1, #0 - cmp r0, #9 - ble _080A5FD0 - movs r0, #9 -_080A5FD0: - ldr r1, _080A5FFC @ =0x040000D4 - lsls r0, r0, #5 - ldr r2, _080A6000 @ =gUnk_085C4620 - adds r0, r0, r2 - str r0, [r1] - str r5, [r1, #4] - ldr r3, _080A6004 @ =0x84000008 - str r3, [r1, #8] - ldr r0, [r1, #8] - adds r0, r4, #0 - adds r0, #0xa - lsls r0, r0, #5 - adds r0, r0, r2 - str r0, [r1] - adds r0, r5, #0 - adds r0, #0x20 - str r0, [r1, #4] - str r3, [r1, #8] - ldr r0, [r1, #8] -_080A5FF6: - pop {r4, r5, pc} - .align 2, 0 -_080A5FF8: .4byte gSave -_080A5FFC: .4byte 0x040000D4 -_080A6000: .4byte gUnk_085C4620 -_080A6004: .4byte 0x84000008 - - thumb_func_start sub_080A6008 -sub_080A6008: @ 0x080A6008 - push {lr} - ldr r1, _080A601C @ =gUnk_08128D58 - ldr r0, _080A6020 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A601C: .4byte gUnk_08128D58 -_080A6020: .4byte gMenu - - thumb_func_start sub_080A6024 -sub_080A6024: @ 0x080A6024 - push {lr} - ldr r0, _080A6040 @ =gUnk_08128D60 - bl sub_080A70AC - movs r0, #0 - bl sub_0801E738 - bl sub_080A4398 - movs r0, #1 - bl SetMenuType - pop {pc} - .align 2, 0 -_080A6040: .4byte gUnk_08128D60 - - thumb_func_start sub_080A6044 -sub_080A6044: @ 0x080A6044 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - bl sub_080A51F4 - cmp r0, #0 - beq _080A60C2 - ldr r0, _080A60CC @ =gMenu - ldr r1, _080A60D0 @ =gUnk_08128D51 - str r1, [r0, #0xc] - ldr r1, _080A60D4 @ =gOamCmd - movs r0, #0 - strh r0, [r1, #4] - strh r0, [r1, #6] - movs r5, #0 - movs r4, #0 - ldr r0, _080A60D8 @ =gSave - movs r2, #0x8c - lsls r2, r2, #1 - adds r3, r0, r2 - ldrb r2, [r3] - cmp r2, #0 - beq _080A60C2 - adds r6, r1, #0 - movs r1, #0 - mov sb, r1 - adds r7, r0, #0 - mov r8, r3 -_080A607E: - movs r1, #3 - ands r1, r5 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #4 - adds r0, #0x2b - strh r0, [r6] - lsrs r1, r5, #2 - lsls r0, r1, #3 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, #0x34 - strh r0, [r6, #2] - ldr r3, _080A60DC @ =0x0000012B - adds r0, r7, r3 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, _080A60CC @ =gMenu - mov r3, sb - strb r3, [r0, #1] - adds r0, r2, #0 - bl sub_080A42E0 - adds r5, #1 - cmp r5, #0xa - bhi _080A60C2 - adds r4, #1 - cmp r4, #0x11 - bhi _080A60C2 - mov r1, r8 - adds r0, r4, r1 - ldrb r2, [r0] - cmp r2, #0 - bne _080A607E -_080A60C2: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A60CC: .4byte gMenu -_080A60D0: .4byte gUnk_08128D51 -_080A60D4: .4byte gOamCmd -_080A60D8: .4byte gSave -_080A60DC: .4byte 0x0000012B - - thumb_func_start sub_080A60E0 -sub_080A60E0: @ 0x080A60E0 - push {r4, lr} - ldr r1, _080A6100 @ =gUnk_08128DB0 - ldr r4, _080A6104 @ =gMenu - ldrb r0, [r4, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_080A617C - ldrb r0, [r4, #3] - bl sub_080A7040 - pop {r4, pc} - .align 2, 0 -_080A6100: .4byte gUnk_08128DB0 -_080A6104: .4byte gMenu - - thumb_func_start sub_080A6108 -sub_080A6108: @ 0x080A6108 - push {lr} - ldr r0, _080A6120 @ =gMenu - ldr r1, _080A6124 @ =gUnk_08128DB8 - str r1, [r0, #0xc] - ldr r0, _080A6128 @ =gUnk_08128DBC - bl sub_080A70AC - movs r0, #1 - bl SetMenuType - pop {pc} - .align 2, 0 -_080A6120: .4byte gMenu -_080A6124: .4byte gUnk_08128DB8 -_080A6128: .4byte gUnk_08128DBC - - thumb_func_start sub_080A612C -sub_080A612C: @ 0x080A612C - push {lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A6178 - ldr r1, _080A614C @ =gMenu - ldrb r2, [r1, #3] - ldr r0, _080A6150 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #0x10 - beq _080A6154 - cmp r0, #0x20 - bne _080A6156 - subs r2, #1 - b _080A6156 - .align 2, 0 -_080A614C: .4byte gMenu -_080A6150: .4byte gInput -_080A6154: - adds r2, #1 -_080A6156: - adds r3, r2, #0 - adds r3, #8 - adds r0, r3, #0 - cmp r3, #0 - bge _080A6164 - adds r0, r2, #0 - adds r0, #0xf -_080A6164: - asrs r2, r0, #3 - lsls r0, r2, #3 - subs r2, r3, r0 - ldrb r0, [r1, #3] - cmp r0, r2 - beq _080A6178 - strb r2, [r1, #3] - movs r0, #0x69 - bl SoundReq -_080A6178: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A617C -sub_080A617C: @ 0x080A617C -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r6, _080A5A50 @ =gOamCmd - movs r0, #0 - strh r0, [r6, #4] - strh r0, [r6, #6] - movs r7, #0xc0 - lsls r7, r7, #4 - strh r7, [r6, #8] - movs r0, #0x2f - mov r8, r0 - mov r2, r8 - strh r2, [r6, #2] - ldr r4, _080A5A54 @ =gChooseFileState - ldrb r1, [r4, #3] - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #2 - subs r0, r0, r1 - adds r0, #0x1a - strh r0, [r6] - ldr r0, _080A5A58 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x20 - ands r0, r1 - movs r1, #9 - cmp r0, #0 - beq _080A59AC - movs r1, #8 -_080A59AC: - ldr r5, _080A5A5C @ =0x000001FB - adds r0, r5, #0 - bl DrawDirect - ldrb r0, [r4, #3] - lsls r0, r0, #3 - ldr r1, _080A5A60 @ =gUnk_08128D70 - adds r4, r0, r1 - ldrb r0, [r4] - bl GetInventoryValue - cmp r0, #0 - beq _080A5A0E - strh r7, [r6, #8] - movs r0, #0xcc - strh r0, [r6] - movs r0, #0x88 - strh r0, [r6, #2] - adds r0, r5, #0 - movs r1, #0xb - bl DrawDirect - movs r0, #0x30 - strh r0, [r6] - movs r0, #0x6c - strh r0, [r6, #2] - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - movs r2, #0xd8 - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r6, #8] - ldrb r1, [r4, #2] - adds r0, r5, #0 - bl DrawDirect - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - orrs r0, r7 - strh r0, [r6, #8] - movs r0, #0x78 - strh r0, [r6] - movs r0, #0x68 - strh r0, [r6, #2] - adds r0, r5, #0 - movs r1, #0xc - bl DrawDirect -_080A5A0E: - mov r0, r8 - strh r0, [r6, #2] - movs r5, #0 - adds r7, r6, #0 - movs r6, #0x18 -_080A5A18: - lsls r1, r5, #3 - ldr r0, _080A5A60 @ =gUnk_08128D70 - adds r4, r1, r0 - ldrb r0, [r4] - bl GetInventoryValue - cmp r0, #0 - beq _080A5A40 - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - movs r2, #0xc0 - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r7, #8] - strh r6, [r7] - ldr r0, _080A5A5C @ =0x000001FB - movs r1, #0xa - bl DrawDirect -_080A5A40: - adds r6, #0x1b - adds r5, #1 - cmp r5, #7 - bls _080A5A18 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5A50: .4byte gOamCmd -_080A5A54: .4byte gChooseFileState -_080A5A58: .4byte gMain -_080A5A5C: .4byte 0x000001FB -_080A5A60: .4byte gUnk_08128D70 - -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r6, _080A6260 @ =gOamCmd - movs r0, #0 - strh r0, [r6, #4] - strh r0, [r6, #6] - movs r7, #0xc0 - lsls r7, r7, #4 - strh r7, [r6, #8] - movs r0, #0x2f - mov r8, r0 - mov r2, r8 - strh r2, [r6, #2] - ldr r4, _080A6264 @ =gMenu - ldrb r1, [r4, #3] - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #2 - subs r0, r0, r1 - adds r0, #0x1a - strh r0, [r6] - ldr r0, _080A6268 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x20 - ands r0, r1 - movs r1, #9 - cmp r0, #0 - beq _080A61B8 - movs r1, #8 -_080A61B8: - movs r5, #0xfe - lsls r5, r5, #1 - adds r0, r5, #0 - bl DrawDirect - ldrb r0, [r4, #3] - lsls r0, r0, #3 - ldr r1, _080A626C @ =gUnk_08128D70 - adds r4, r0, r1 - ldrb r0, [r4] - bl GetInventoryValue - cmp r0, #0 - beq _080A621C - strh r7, [r6, #8] - movs r0, #0xcc - strh r0, [r6] - movs r0, #0x88 - strh r0, [r6, #2] - adds r0, r5, #0 - movs r1, #0xb - bl DrawDirect - movs r0, #0x30 - strh r0, [r6] - movs r0, #0x6c - strh r0, [r6, #2] - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - movs r2, #0xd8 - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r6, #8] - ldrb r1, [r4, #2] - adds r0, r5, #0 - bl DrawDirect - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - orrs r0, r7 - strh r0, [r6, #8] - movs r0, #0x78 - strh r0, [r6] - movs r0, #0x68 - strh r0, [r6, #2] - adds r0, r5, #0 - movs r1, #0xc - bl DrawDirect -_080A621C: - mov r0, r8 - strh r0, [r6, #2] - movs r5, #0 - adds r7, r6, #0 - movs r6, #0x18 -_080A6226: - lsls r1, r5, #3 - ldr r0, _080A626C @ =gUnk_08128D70 - adds r4, r1, r0 - ldrb r0, [r4] - bl GetInventoryValue - cmp r0, #0 - beq _080A6250 - ldrb r0, [r4, #1] - lsls r0, r0, #0xc - movs r2, #0xc0 - lsls r2, r2, #4 - adds r1, r2, #0 - orrs r0, r1 - strh r0, [r7, #8] - strh r6, [r7] - movs r0, #0xfe - lsls r0, r0, #1 - movs r1, #0xa - bl DrawDirect -_080A6250: - adds r6, #0x1b - adds r5, #1 - cmp r5, #7 - bls _080A6226 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A6260: .4byte gOamCmd -_080A6264: .4byte gMenu -_080A6268: .4byte gMain -_080A626C: .4byte gUnk_08128D70 -.endif - - thumb_func_start sub_080A6270 -sub_080A6270: @ 0x080A6270 - push {lr} - ldr r1, _080A6288 @ =gUnk_08128DCC - ldr r0, _080A628C @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_080A6378 - pop {pc} - .align 2, 0 -_080A6288: .4byte gUnk_08128DCC -_080A628C: .4byte gMenu - - thumb_func_start sub_080A6290 -sub_080A6290: @ 0x080A6290 - push {r4, lr} - ldr r0, _080A62C4 @ =gUnk_08128DD8 - bl sub_080A70AC - ldr r4, _080A62C8 @ =gMenu - ldr r0, _080A62CC @ =gUnk_08128DD4 - str r0, [r4, #0xc] - movs r0, #0x81 - bl LoadGfxGroup - ldr r1, _080A62D0 @ =gScreen - ldr r0, _080A62D4 @ =0x0000FFFC - strh r0, [r1, #0x18] - strh r0, [r1, #0x24] - ldr r2, _080A62D8 @ =gSave - ldr r0, [r2, #0x40] - ldr r1, _080A62DC @ =0x00010780 - orrs r0, r1 - str r0, [r2, #0x40] - bl sub_080A6F40 - strh r0, [r4, #0x10] - movs r0, #1 - strb r0, [r4, #5] - pop {r4, pc} - .align 2, 0 -_080A62C4: .4byte gUnk_08128DD8 -_080A62C8: .4byte gMenu -_080A62CC: .4byte gUnk_08128DD4 -_080A62D0: .4byte gScreen -_080A62D4: .4byte 0x0000FFFC -_080A62D8: .4byte gSave -_080A62DC: .4byte 0x00010780 - - thumb_func_start sub_080A62E0 -sub_080A62E0: @ 0x080A62E0 - push {r4, lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A6372 - ldr r0, _080A6310 @ =gMenu - ldrb r3, [r0, #3] - lsls r1, r3, #3 - ldr r0, _080A6314 @ =gUnk_08128DE8 - adds r1, r1, r0 - movs r4, #1 - rsbs r4, r4, #0 - ldr r0, _080A6318 @ =gInput - ldrh r2, [r0, #2] - cmp r2, #0x20 - beq _080A634E - cmp r2, #0x20 - bgt _080A631C - cmp r2, #1 - beq _080A6326 - cmp r2, #0x10 - beq _080A6354 - b _080A635A - .align 2, 0 -_080A6310: .4byte gMenu -_080A6314: .4byte gUnk_08128DE8 -_080A6318: .4byte gInput -_080A631C: - cmp r2, #0x40 - beq _080A6344 - cmp r2, #0x80 - beq _080A634A - b _080A635A -_080A6326: - ldr r0, _080A6340 @ =gSave - lsls r2, r3 - ldr r0, [r0, #0x40] - ands r0, r2 - cmp r0, #0 - beq _080A635A - movs r0, #0x6a - bl SoundReq - movs r0, #6 - bl sub_080A4E84 - b _080A635A - .align 2, 0 -_080A6340: .4byte gSave -_080A6344: - ldrb r0, [r1] - lsls r0, r0, #0x1b - b _080A6358 -_080A634A: - ldrh r0, [r1] - b _080A6356 -_080A634E: - ldrb r0, [r1, #2] - lsls r0, r0, #0x1b - b _080A6358 -_080A6354: - ldrh r0, [r1, #2] -_080A6356: - lsls r0, r0, #0x16 -_080A6358: - lsrs r4, r0, #0x1b -_080A635A: - cmp r4, #0 - blt _080A6368 - ldr r0, _080A6374 @ =gMenu - strb r4, [r0, #3] - movs r0, #0x69 - bl SoundReq -_080A6368: - ldr r0, _080A6374 @ =gMenu - ldrb r0, [r0, #3] - movs r1, #0 - bl sub_080A6FB4 -_080A6372: - pop {r4, pc} - .align 2, 0 -_080A6374: .4byte gMenu - - thumb_func_start sub_080A6378 -sub_080A6378: @ 0x080A6378 -.ifdef EU - push {r4, r5, r6, lr} - ldr r0, _080A5C18 @ =gChooseFileState - adds r4, r0, #0 - adds r4, #0x2c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - movs r6, #0x20 - ands r0, r6 - cmp r0, #0 - beq _080A5B86 - bl sub_080A6438 -_080A5B86: - ldr r5, _080A5C1C @ =gOamCmd - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r5, #4] - movs r0, #0 - strh r0, [r5, #6] - movs r0, #0xe0 - lsls r0, r0, #7 - strh r0, [r5, #8] - ldrb r1, [r4] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - bne _080A5BE0 - ldr r4, _080A5C20 @ =gRoomTransition - ldrh r1, [r4, #0x20] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #5 - movs r1, #0xf9 - lsls r1, r1, #4 - bl __divsi3 - adds r0, #0x28 - strh r0, [r5] - ldrh r0, [r4, #0x22] - lsls r0, r0, #7 - movs r1, #0xc6 - lsls r1, r1, #4 - bl __divsi3 - adds r0, #0xc - strh r0, [r5, #2] - ldr r0, _080A5C24 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - movs r1, #0x59 - cmp r0, #0 - beq _080A5BD8 - movs r1, #0x5a -_080A5BD8: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect -_080A5BE0: - ldr r3, _080A5C18 @ =gChooseFileState - ldrb r0, [r3, #3] - lsls r0, r0, #3 - ldr r1, _080A5C28 @ =gUnk_08128DE8 - adds r0, r0, r1 - ldr r2, _080A5C1C @ =gOamCmd - ldrb r1, [r0, #6] - strh r1, [r2] - ldrb r0, [r0, #7] - strh r0, [r2, #2] - ldrb r0, [r3, #3] - lsls r2, r0, #1 - adds r2, r2, r0 - adds r2, #0x26 - adds r3, #0x2c - ldrb r1, [r3] - lsrs r1, r1, #4 - movs r0, #1 - bics r0, r1 - adds r1, r2, r0 - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect - bl sub_080A6498 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A5C18: .4byte gChooseFileState -_080A5C1C: .4byte gOamCmd -_080A5C20: .4byte gRoomTransition -_080A5C24: .4byte gPlayerState -_080A5C28: .4byte gUnk_08128DE8 - -.else - push {r4, r5, r6, lr} - ldr r0, _080A6420 @ =gMenu - adds r4, r0, #0 - adds r4, #0x2c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - movs r6, #0x20 - ands r0, r6 - cmp r0, #0 - beq _080A6392 - bl sub_080A6438 -_080A6392: - ldr r5, _080A6424 @ =gOamCmd - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r5, #4] - movs r0, #0 - strh r0, [r5, #6] - movs r0, #0xe0 - lsls r0, r0, #7 - strh r0, [r5, #8] - ldrb r1, [r4] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - bne _080A63EA - ldr r4, _080A6428 @ =gRoomTransition - ldrh r1, [r4, #0x20] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #5 - movs r1, #0xf9 - lsls r1, r1, #4 - bl __divsi3 - adds r0, #0x28 - strh r0, [r5] - ldrh r0, [r4, #0x22] - lsls r0, r0, #7 - movs r1, #0xc6 - lsls r1, r1, #4 - bl __divsi3 - adds r0, #0xc - strh r0, [r5, #2] - ldr r0, _080A642C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - movs r1, #0x59 - cmp r0, #0 - beq _080A63E4 - movs r1, #0x5a -_080A63E4: - ldr r0, _080A6430 @ =0x000001FB - bl DrawDirect -_080A63EA: - ldr r3, _080A6420 @ =gMenu - ldrb r0, [r3, #3] - lsls r0, r0, #3 - ldr r1, _080A6434 @ =gUnk_08128DE8 - adds r0, r0, r1 - ldr r2, _080A6424 @ =gOamCmd - ldrb r1, [r0, #6] - strh r1, [r2] - ldrb r0, [r0, #7] - strh r0, [r2, #2] - ldrb r0, [r3, #3] - lsls r2, r0, #1 - adds r2, r2, r0 - adds r2, #0x26 - adds r3, #0x2c - ldrb r1, [r3] - lsrs r1, r1, #4 - movs r0, #1 - bics r0, r1 - adds r1, r2, r0 - ldr r0, _080A6430 @ =0x000001FB - bl DrawDirect - bl sub_080A6498 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A6420: .4byte gMenu -_080A6424: .4byte gOamCmd -_080A6428: .4byte gRoomTransition -_080A642C: .4byte gPlayerState -_080A6430: .4byte 0x000001FB -_080A6434: .4byte gUnk_08128DE8 -.endif - - thumb_func_start sub_080A6438 -sub_080A6438: @ 0x080A6438 -.ifdef EU - push {r4, r5, r6, r7, lr} - ldr r2, _080A5C7C @ =gOamCmd - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r2, #4] - strh r1, [r2, #6] - strh r1, [r2, #8] - ldr r0, _080A5C80 @ =gSave - ldr r1, _080A5C84 @ =gChooseFileState - ldrh r0, [r0, #0x20] - ldrh r5, [r1, #0x10] - ands r5, r0 - ldr r4, _080A5C88EU @ =gUnk_08128F58 - movs r6, #0 - ldrb r0, [r4] - cmp r0, #0 - beq _080A5C78 - adds r7, r2, #0 -_080A5C52: - movs r0, #1 - lsls r0, r6 - ands r0, r5 - cmp r0, #0 - beq _080A5C6E - ldrb r0, [r4, #1] - strh r0, [r7] - ldrb r0, [r4, #2] - strh r0, [r7, #2] - ldrb r1, [r4] - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect -_080A5C6E: - adds r6, #1 - adds r4, #8 - ldrb r0, [r4] - cmp r0, #0 - bne _080A5C52 -_080A5C78: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5C7C: .4byte gOamCmd -_080A5C80: .4byte gSave -_080A5C84: .4byte gChooseFileState -_080A5C88EU: .4byte gUnk_08128F58 - -.else - push {r4, r5, r6, r7, lr} - ldr r2, _080A6484 @ =gOamCmd - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r2, #4] - strh r1, [r2, #6] - strh r1, [r2, #8] - ldr r0, _080A6488 @ =gSave - ldr r1, _080A648C @ =gMenu - ldrh r0, [r0, #0x20] - ldrh r5, [r1, #0x10] - ands r5, r0 - ldr r4, _080A6490 @ =gUnk_08128F58 - movs r6, #0 - ldrb r0, [r4] - cmp r0, #0 - beq _080A6482 - adds r7, r2, #0 -_080A645E: - movs r0, #1 - lsls r0, r6 - ands r0, r5 - cmp r0, #0 - beq _080A6478 - ldrb r0, [r4, #1] - strh r0, [r7] - ldrb r0, [r4, #2] - strh r0, [r7, #2] - ldrb r1, [r4] - ldr r0, _080A6494 @ =0x000001FB - bl DrawDirect -_080A6478: - adds r6, #1 - adds r4, #8 - ldrb r0, [r4] - cmp r0, #0 - bne _080A645E -_080A6482: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A6484: .4byte gOamCmd -_080A6488: .4byte gSave -_080A648C: .4byte gMenu -_080A6490: .4byte gUnk_08128F58 -_080A6494: .4byte 0x000001FB -.endif - - thumb_func_start sub_080A6498 -sub_080A6498: @ 0x080A6498 -.ifdef EU - push {r4, r5, r6, r7, lr} - ldr r0, _080A5CDCEU @ =gOamCmd - movs r2, #0 - movs r1, #0x80 - lsls r1, r1, #4 - strh r1, [r0, #4] - strh r2, [r0, #6] - strh r2, [r0, #8] - movs r4, #0 - ldr r7, _080A5CE0 @ =gSave - adds r6, r0, #0 - movs r5, #0x28 -_080A5CA4: - movs r1, #1 - lsls r1, r4 - ldr r0, [r7, #0x40] - ands r0, r1 - cmp r0, #0 - bne _080A5CC8EU - lsls r1, r4, #3 - ldr r0, _080A5CE4 @ =gUnk_08128DE8 - adds r1, r1, r0 - ldrb r0, [r1, #6] - strh r0, [r6] - ldrb r0, [r1, #7] - strh r0, [r6, #2] - movs r0, #0xfd - lsls r0, r0, #1 - adds r1, r5, #0 - bl DrawDirect -_080A5CC8EU: - adds r5, #3 - adds r4, #1 - cmp r4, #0x10 - bls _080A5CA4 - ldr r0, _080A5CE8 @ =gScreen - adds r0, #0x62 - ldr r1, _080A5CEC @ =0x00003D3F - strh r1, [r0] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A5CDCEU: .4byte gOamCmd -_080A5CE0: .4byte gSave -_080A5CE4: .4byte gUnk_08128DE8 -_080A5CE8: .4byte gScreen -_080A5CEC: .4byte 0x00003D3F - -.else - push {r4, r5, r6, r7, lr} - ldr r0, _080A64E4 @ =gOamCmd - movs r2, #0 - movs r1, #0x80 - lsls r1, r1, #4 - strh r1, [r0, #4] - strh r2, [r0, #6] - strh r2, [r0, #8] - movs r4, #0 - ldr r7, _080A64E8 @ =gSave - adds r6, r0, #0 - movs r5, #0x28 -_080A64B0: - movs r1, #1 - lsls r1, r4 - ldr r0, [r7, #0x40] - ands r0, r1 - cmp r0, #0 - bne _080A64D2 - lsls r1, r4, #3 - ldr r0, _080A64EC @ =gUnk_08128DE8 - adds r1, r1, r0 - ldrb r0, [r1, #6] - strh r0, [r6] - ldrb r0, [r1, #7] - strh r0, [r6, #2] - ldr r0, _080A64F0 @ =0x000001FB - adds r1, r5, #0 - bl DrawDirect -_080A64D2: - adds r5, #3 - adds r4, #1 - cmp r4, #0x10 - bls _080A64B0 - ldr r0, _080A64F4 @ =gScreen - adds r0, #0x62 - ldr r1, _080A64F8 @ =0x00003D3F - strh r1, [r0] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A64E4: .4byte gOamCmd -_080A64E8: .4byte gSave -_080A64EC: .4byte gUnk_08128DE8 -_080A64F0: .4byte 0x000001FB -_080A64F4: .4byte gScreen -_080A64F8: .4byte 0x00003D3F -.endif - - thumb_func_start Subtask_MapHint -Subtask_MapHint: @ 0x080A64FC - push {r4, lr} - bl FlushSprites - ldr r1, _080A652C @ =gUnk_08128E70 - ldr r4, _080A6530 @ =gMenu - ldrb r0, [r4, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - adds r4, #0x2c - ldrb r1, [r4] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080A6522 - bl sub_080A6438 -_080A6522: - bl sub_080A6498 - bl CopyOAM - pop {r4, pc} - .align 2, 0 -_080A652C: .4byte gUnk_08128E70 -_080A6530: .4byte gMenu - - thumb_func_start sub_080A6534 -sub_080A6534: @ 0x080A6534 - push {r4, lr} - bl sub_080A4D34 - movs r0, #4 - bl sub_080A4DB8 - bl sub_080A6290 - ldr r2, _080A6590 @ =gScreen - ldrh r1, [r2] - ldr r0, _080A6594 @ =0x0000F7FF - ands r0, r1 - movs r4, #0 - strh r0, [r2] - ldr r0, _080A6598 @ =gPaletteBuffer - adds r0, #0xa2 - ldrh r1, [r0] - movs r0, #0 - bl SetColor - ldr r1, _080A659C @ =gUnk_08128F4C - ldr r0, _080A65A0 @ =gUnk_02032EC0 - ldrb r0, [r0, #3] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r2, [r0] - ldr r3, _080A65A4 @ =gSave - ldrh r1, [r3, #0x20] - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r3, #0x20] - ldr r1, _080A65A8 @ =gMenu - ldrh r0, [r1, #0x10] - ands r2, r0 - strh r2, [r1, #0x12] - strh r4, [r1, #0x10] - movs r0, #0x3c - strh r0, [r1, #8] - movs r0, #1 - bl SetMenuType - movs r0, #4 - movs r1, #8 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080A6590: .4byte gScreen -_080A6594: .4byte 0x0000F7FF -_080A6598: .4byte gPaletteBuffer -_080A659C: .4byte gUnk_08128F4C -_080A65A0: .4byte gUnk_02032EC0 -_080A65A4: .4byte gSave -_080A65A8: .4byte gMenu - - thumb_func_start sub_080A65AC -sub_080A65AC: @ 0x080A65AC - push {r4, lr} - ldr r0, _080A65E4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A6600 - ldr r4, _080A65E8 @ =gMenu - adds r1, r4, #0 - adds r1, #0x2c - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldrh r0, [r4, #8] - cmp r0, #0 - beq _080A65EC - cmp r0, #0x1e - bne _080A65DA - ldrh r0, [r4, #0x12] - strh r0, [r4, #0x10] - movs r0, #0x20 - strb r0, [r1] - adds r0, #0xe3 - bl SoundReq -_080A65DA: - ldrh r0, [r4, #8] - subs r0, #1 - strh r0, [r4, #8] - b _080A6600 - .align 2, 0 -_080A65E4: .4byte gFadeControl -_080A65E8: .4byte gMenu -_080A65EC: - ldr r0, _080A6604 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #1 - blt _080A6600 - cmp r0, #2 - ble _080A65FC - cmp r0, #8 - bne _080A6600 -_080A65FC: - bl Subtask_Exit -_080A6600: - pop {r4, pc} - .align 2, 0 -_080A6604: .4byte gInput - - thumb_func_start sub_080A6608 -sub_080A6608: @ 0x080A6608 - push {r4, lr} - ldr r1, _080A6640 @ =gUnk_08128E78 - ldr r4, _080A6644 @ =gMenu - ldrb r0, [r4, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldrb r1, [r4, #3] - lsls r1, r1, #3 - ldr r0, _080A6648 @ =gUnk_08128E94 - adds r1, r1, r0 - ldr r2, _080A664C @ =gScreen - movs r0, #5 - ldrsb r0, [r1, r0] - rsbs r0, r0, #0 - strh r0, [r2, #0x18] - ldrb r1, [r1, #6] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - ldrh r0, [r4, #0xa] - subs r0, r0, r1 - strh r0, [r2, #0x24] - bl sub_080A66D0 - pop {r4, pc} - .align 2, 0 -_080A6640: .4byte gUnk_08128E78 -_080A6644: .4byte gMenu -_080A6648: .4byte gUnk_08128E94 -_080A664C: .4byte gScreen - - thumb_func_start sub_080A6650 -sub_080A6650: @ 0x080A6650 - push {lr} - ldr r0, _080A6670 @ =gUnk_08128E84 - bl sub_080A70AC - ldr r0, _080A6674 @ =gUnk_02034490 - ldrb r0, [r0, #6] - ldr r1, _080A6678 @ =gMenu - strb r0, [r1, #3] - bl sub_080A67C4 - bl sub_080A68D4 - movs r0, #1 - bl SetMenuType - pop {pc} - .align 2, 0 -_080A6670: .4byte gUnk_08128E84 -_080A6674: .4byte gUnk_02034490 -_080A6678: .4byte gMenu - - thumb_func_start sub_080A667C -sub_080A667C: @ 0x080A667C - push {lr} - ldr r2, _080A669C @ =gMenu - ldr r0, _080A66A0 @ =gUnk_08128E80 - str r0, [r2, #0xc] - ldrb r0, [r2, #3] - lsls r0, r0, #3 - ldr r1, _080A66A4 @ =gUnk_08128E94 - adds r3, r0, r1 - ldrh r1, [r2, #0xa] - ldr r0, _080A66A8 @ =gInput - ldrh r0, [r0] - cmp r0, #0x40 - beq _080A66AC - cmp r0, #0x80 - beq _080A66B4 - b _080A66C2 - .align 2, 0 -_080A669C: .4byte gMenu -_080A66A0: .4byte gUnk_08128E80 -_080A66A4: .4byte gUnk_08128E94 -_080A66A8: .4byte gInput -_080A66AC: - cmp r1, #0 - beq _080A66C2 - subs r1, #2 - b _080A66C2 -_080A66B4: - ldrb r0, [r3, #2] - cmp r0, r1 - bls _080A66BC - adds r1, #2 -_080A66BC: - cmp r0, r1 - bhs _080A66C2 - adds r1, r0, #0 -_080A66C2: - strh r1, [r2, #0xa] - ldrb r0, [r2, #3] - movs r1, #0 - bl sub_080A6FB4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080A66D0 -sub_080A66D0: @ 0x080A66D0 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r6, _080A5F74 @ =gOamCmd - movs r0, #0 - strh r0, [r6, #4] - strh r0, [r6, #6] - movs r0, #0x78 - strh r0, [r6] - ldr r4, _080A5F78 @ =gChooseFileState - ldrb r0, [r4, #3] - lsls r0, r0, #3 - ldr r1, _080A5F7C @ =gUnk_08128E94 - adds r5, r0, r1 - adds r1, r4, #0 - adds r1, #0x2c - ldrb r0, [r1] - adds r2, r0, #1 - strb r2, [r1] - adds r0, r4, #0 - adds r0, #0x2b - ldrb r0, [r0] - cmp r0, #1 - beq _080A5F30 - movs r0, #0x10 - ands r2, r0 - cmp r2, #0 - beq _080A5F30 - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r6, #8] - ldrh r0, [r4, #0xa] - cmp r0, #0 - beq _080A5F1A - movs r0, #0xc - strh r0, [r6, #2] - movs r0, #0xfd - lsls r0, r0, #1 - movs r1, #0x71 - bl DrawDirect -_080A5F1A: - ldrb r0, [r5, #2] - ldrh r4, [r4, #0xa] - cmp r0, r4 - bls _080A5F30 - movs r0, #0x84 - strh r0, [r6, #2] - movs r0, #0xfd - lsls r0, r0, #1 - movs r1, #0x72 - bl DrawDirect -_080A5F30: - ldrb r0, [r5, #7] - mov sl, r0 - ldrb r5, [r5, #3] - mov sb, r5 - ldr r1, _080A5F78 @ =gChooseFileState - ldrh r0, [r1, #0xa] - mov r8, r0 - ldr r2, _080A5F74 @ =gOamCmd - movs r0, #0 - strh r0, [r2, #4] - strh r0, [r2, #6] - movs r0, #0xc0 - lsls r0, r0, #4 - strh r0, [r2, #8] - adds r1, #0x2c - ldrb r1, [r1] - movs r0, #0x20 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - ldr r4, _080A5F80 @ =gUnk_02019EE0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _080A5FAE - rsbs r5, r6, #0 - orrs r5, r6 - adds r7, r2, #0 -_080A5F66: - movs r1, #0 - ldrb r0, [r4] - cmp r0, #1 - bne _080A5F84 - lsrs r1, r5, #0x1f - b _080A5F8A - .align 2, 0 -_080A5F74: .4byte gOamCmd -_080A5F78: .4byte gChooseFileState -_080A5F7C: .4byte gUnk_08128E94 -_080A5F80: .4byte gUnk_02019EE0 -_080A5F84: - cmp r6, #0 - bne _080A5F8A - movs r1, #1 -_080A5F8A: - cmp r1, #0 - beq _080A5FA6 - ldrh r0, [r4, #4] - add r0, sl - strh r0, [r7] - ldrh r0, [r4, #6] - add r0, sb - mov r1, r8 - subs r0, r0, r1 - strh r0, [r7, #2] - ldrh r0, [r4, #2] - ldrb r1, [r4, #1] - bl DrawDirect -_080A5FA6: - adds r4, #8 - ldrh r0, [r4, #2] - cmp r0, #0 - bne _080A5F66 -_080A5FAE: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - -.else - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r6, _080A677C @ =gOamCmd - movs r0, #0 - strh r0, [r6, #4] - strh r0, [r6, #6] - movs r0, #0x78 - strh r0, [r6] - ldr r4, _080A6780 @ =gMenu - ldrb r0, [r4, #3] - lsls r0, r0, #3 - ldr r1, _080A6784 @ =gUnk_08128E94 - adds r5, r0, r1 - adds r1, r4, #0 - adds r1, #0x2c - ldrb r0, [r1] - adds r2, r0, #1 - strb r2, [r1] - adds r0, r4, #0 - adds r0, #0x2b - ldrb r0, [r0] - cmp r0, #1 - beq _080A6738 - movs r0, #0x10 - ands r2, r0 - cmp r2, #0 - beq _080A6738 - movs r0, #0x80 - lsls r0, r0, #4 - strh r0, [r6, #8] - ldrh r0, [r4, #0xa] - cmp r0, #0 - beq _080A6724 - movs r0, #0xc - strh r0, [r6, #2] - ldr r0, _080A6788 @ =0x000001FB - movs r1, #0x71 - bl DrawDirect -_080A6724: - ldrb r0, [r5, #2] - ldrh r4, [r4, #0xa] - cmp r0, r4 - bls _080A6738 - movs r0, #0x84 - strh r0, [r6, #2] - ldr r0, _080A6788 @ =0x000001FB - movs r1, #0x72 - bl DrawDirect -_080A6738: - ldrb r0, [r5, #7] - mov sl, r0 - ldrb r5, [r5, #3] - mov sb, r5 - ldr r1, _080A6780 @ =gMenu - ldrh r0, [r1, #0xa] - mov r8, r0 - ldr r2, _080A677C @ =gOamCmd - movs r0, #0 - strh r0, [r2, #4] - strh r0, [r2, #6] - movs r0, #0xc0 - lsls r0, r0, #4 - strh r0, [r2, #8] - adds r1, #0x2c - ldrb r1, [r1] - movs r0, #0x20 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - ldr r4, _080A678C @ =gUnk_02019EE0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _080A67BA - rsbs r5, r6, #0 - orrs r5, r6 - adds r7, r2, #0 -_080A676E: - movs r1, #0 - ldrb r0, [r4] - cmp r0, #1 - bne _080A6790 - lsrs r1, r5, #0x1f - b _080A6796 - .align 2, 0 -_080A677C: .4byte gOamCmd -_080A6780: .4byte gMenu -_080A6784: .4byte gUnk_08128E94 -_080A6788: .4byte 0x000001FB -_080A678C: .4byte gUnk_02019EE0 -_080A6790: - cmp r6, #0 - bne _080A6796 - movs r1, #1 -_080A6796: - cmp r1, #0 - beq _080A67B2 - ldrh r0, [r4, #4] - add r0, sl - strh r0, [r7] - ldrh r0, [r4, #6] - add r0, sb - mov r1, r8 - subs r0, r0, r1 - strh r0, [r7, #2] - ldrh r0, [r4, #2] - ldrb r1, [r4, #1] - bl DrawDirect -_080A67B2: - adds r4, #8 - ldrh r0, [r4, #2] - cmp r0, #0 - bne _080A676E -_080A67BA: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} -.endif - - thumb_func_start sub_080A67C4 -sub_080A67C4: @ 0x080A67C4 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r0, #0xba - bl LoadPaletteGroup - adds r5, r4, #0 - adds r5, #0x5f - cmp r4, #0xb - beq _080A67F4 - cmp r4, #0xb - bhi _080A67E0 - cmp r4, #9 - beq _080A67E6 - b _080A6822 -_080A67E0: - cmp r4, #0xe - beq _080A6802 - b _080A6822 -_080A67E6: - movs r0, #0x18 - bl CheckGlobalFlag - cmp r0, #0 - beq _080A6822 - movs r5, #0x70 - b _080A6822 -_080A67F4: - movs r0, #0xe - bl CheckKinstoneFused - cmp r0, #0 - beq _080A6822 - movs r5, #0x71 - b _080A6822 -_080A6802: - ldr r1, _080A68AC @ =gUnk_02032EC0 - adds r0, r1, #0 - adds r0, #0x20 - ldrb r0, [r0] - cmp r0, #8 - bne _080A6822 - adds r0, r1, #0 - adds r0, #0x21 - ldrb r0, [r0] - movs r1, #3 - bl __modsi3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r5, r0, #0 - adds r5, #0x72 -_080A6822: - adds r0, r5, #0 - bl LoadGfxGroup - lsls r1, r4, #3 - ldr r0, _080A68B0 @ =gUnk_08128E94 - adds r4, r1, r0 - ldr r0, _080A68B4 @ =gUnk_03003DE4 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _080A68B8 @ =gUnk_02017AA0 - adds r1, r0, r1 - ldr r2, _080A68BC @ =0x00001E0A - adds r0, r2, #0 - movs r2, #7 -_080A6842: - strh r0, [r1] - adds r1, #2 - subs r2, #1 - cmp r2, #0 - bge _080A6842 - movs r2, #8 - movs r0, #5 - ldrsb r0, [r4, r0] - ldrb r3, [r4, #4] - adds r0, r0, r3 - ldr r5, _080A68B4 @ =gUnk_03003DE4 - ldr r6, _080A68B8 @ =gUnk_02017AA0 - cmp r2, r0 - bge _080A6874 - ldr r7, _080A68C0 @ =0x00001E0B - adds r3, r7, #0 -_080A6862: - strh r3, [r1] - adds r1, #2 - adds r2, #1 - movs r0, #5 - ldrsb r0, [r4, r0] - ldrb r7, [r4, #4] - adds r0, r0, r7 - cmp r2, r0 - blt _080A6862 -_080A6874: - cmp r2, #0x9f - bgt _080A6886 - ldr r3, _080A68BC @ =0x00001E0A - adds r0, r3, #0 -_080A687C: - strh r0, [r1] - adds r1, #2 - adds r2, #1 - cmp r2, #0x9f - ble _080A687C -_080A6886: - ldrb r1, [r5] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - adds r0, r0, r6 - ldr r1, _080A68C4 @ =0x0400000E - ldr r2, _080A68C8 @ =0xA2600001 - bl sub_0805622C - ldr r1, _080A68CC @ =gMenu - ldrb r0, [r4, #2] - lsrs r0, r0, #1 - strh r0, [r1, #0xa] - ldr r0, _080A68D0 @ =gUnk_02019EE0 - movs r1, #0x80 - lsls r1, r1, #3 - bl MemClear - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A68AC: .4byte gUnk_02032EC0 -_080A68B0: .4byte gUnk_08128E94 -_080A68B4: .4byte gUnk_03003DE4 -_080A68B8: .4byte gUnk_02017AA0 -_080A68BC: .4byte 0x00001E0A -_080A68C0: .4byte 0x00001E0B -_080A68C4: .4byte 0x0400000E -_080A68C8: .4byte 0xA2600001 -_080A68CC: .4byte gMenu -_080A68D0: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A68D4 -sub_080A68D4: @ 0x080A68D4 -.ifdef EU - push {r4, r5, r6, lr} - ldr r0, _080A6100EU @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - movs r4, #0x64 - cmp r0, #0 - beq _080A60DA - movs r4, #0x65 -_080A60DA: - ldr r1, _080A6104EU @ =gRoomTransition - ldrh r0, [r1, #0x20] - ldrh r1, [r1, #0x22] - movs r2, #0xfd - lsls r2, r2, #1 - movs r3, #0x80 - lsls r3, r3, #1 - adds r3, r4, r3 - bl sub_080A698C - bl sub_080A6F40 - adds r6, r0, #0 - ldr r0, _080A6108 @ =gSave - ldrh r0, [r0, #0x20] - ands r6, r0 - ldr r4, _080A610C @ =gUnk_08128F58 - movs r5, #0 - b _080A612C - .align 2, 0 -_080A6100EU: .4byte gPlayerState -_080A6104EU: .4byte gRoomTransition -_080A6108: .4byte gSave -_080A610C: .4byte gUnk_08128F58 -_080A6110: - movs r0, #1 - lsls r0, r5 - ands r0, r6 - cmp r0, #0 - beq _080A6128EU - ldrh r0, [r4, #4] - ldrh r1, [r4, #6] - ldrb r3, [r4, #3] - movs r2, #0xfd - lsls r2, r2, #1 - bl sub_080A698C -_080A6128EU: - adds r5, #1 - adds r4, #8 -_080A612C: - ldrb r0, [r4] - cmp r0, #0 - bne _080A6110 - movs r5, #0xa -_080A6134: - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _080A616A - adds r0, r5, #0 - bl sub_0801E810 - cmp r0, #0 - bne _080A616A - ldr r1, _080A6174 @ =gUnk_080C9CBC - lsls r0, r5, #3 - adds r0, r0, r1 - ldrb r3, [r0, #7] - ldrb r0, [r0, #4] - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080A6178EU @ =gUnk_080FE320 - adds r1, r1, r0 - ldrh r0, [r1, #0xc] - ldrh r1, [r1, #0xe] - adds r3, #0x64 - movs r2, #0xfd - lsls r2, r2, #1 - bl sub_080A698C -_080A616A: - adds r5, #1 - cmp r5, #0x64 - bls _080A6134 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A6174: .4byte gUnk_080C9CBC -_080A6178EU: .4byte gUnk_080FE320 - - -.else - push {r4, r5, r6, lr} - ldr r0, _080A690C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - movs r4, #0x64 - cmp r0, #0 - beq _080A68E6 - movs r4, #0x65 -_080A68E6: - ldr r1, _080A6910 @ =gRoomTransition - ldrh r0, [r1, #0x20] - ldrh r1, [r1, #0x22] - ldr r2, _080A6914 @ =0x000001FB - movs r3, #0x80 - lsls r3, r3, #1 - adds r3, r4, r3 - bl sub_080A698C - bl sub_080A6F40 - adds r6, r0, #0 - ldr r0, _080A6918 @ =gSave - ldrh r0, [r0, #0x20] - ands r6, r0 - ldr r4, _080A691C @ =gUnk_08128F58 - movs r5, #0 - b _080A693A - .align 2, 0 -_080A690C: .4byte gPlayerState -_080A6910: .4byte gRoomTransition -_080A6914: .4byte 0x000001FB -_080A6918: .4byte gSave -_080A691C: .4byte gUnk_08128F58 -_080A6920: - movs r0, #1 - lsls r0, r5 - ands r0, r6 - cmp r0, #0 - beq _080A6936 - ldrh r0, [r4, #4] - ldrh r1, [r4, #6] - ldrb r3, [r4, #3] - ldr r2, _080A6980 @ =0x000001FB - bl sub_080A698C -_080A6936: - adds r5, #1 - adds r4, #8 -_080A693A: - ldrb r0, [r4] - cmp r0, #0 - bne _080A6920 - movs r5, #0xa -_080A6942: - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _080A6976 - adds r0, r5, #0 - bl sub_0801E810 - cmp r0, #0 - bne _080A6976 - ldr r1, _080A6984 @ =gUnk_080C9CBC - lsls r0, r5, #3 - adds r0, r0, r1 - ldrb r3, [r0, #7] - ldrb r0, [r0, #4] - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080A6988 @ =gUnk_080FE320 - adds r1, r1, r0 - ldrh r0, [r1, #0xc] - ldrh r1, [r1, #0xe] - adds r3, #0x64 - ldr r2, _080A6980 @ =0x000001FB - bl sub_080A698C -_080A6976: - adds r5, #1 - cmp r5, #0x64 - bls _080A6942 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A6980: .4byte 0x000001FB -_080A6984: .4byte gUnk_080C9CBC -_080A6988: .4byte gUnk_080FE320 -.endif - - thumb_func_start sub_080A698C -sub_080A698C: @ 0x080A698C - push {r4, r5, r6, lr} - adds r6, r2, #0 - adds r5, r3, #0 - bl sub_080A69E0 - adds r4, r0, #0 - cmp r4, #0 - ble _080A69D4 - ldr r2, _080A69D8 @ =gMenu - adds r2, #0x2d - ldrb r0, [r2] - lsls r0, r0, #3 - ldr r3, _080A69DC @ =gUnk_02019EE0 - adds r0, r0, r3 - lsrs r1, r5, #8 - strb r1, [r0] - ldrb r0, [r2] - lsls r0, r0, #3 - adds r0, r0, r3 - strb r5, [r0, #1] - ldrb r0, [r2] - lsls r0, r0, #3 - adds r0, r0, r3 - strh r6, [r0, #2] - ldrb r0, [r2] - lsls r0, r0, #3 - adds r0, r0, r3 - strh r4, [r0, #4] - ldrb r0, [r2] - lsls r0, r0, #3 - adds r0, r0, r3 - asrs r1, r4, #0x10 - strh r1, [r0, #6] - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] -_080A69D4: - pop {r4, r5, r6, pc} - .align 2, 0 -_080A69D8: .4byte gMenu -_080A69DC: .4byte gUnk_02019EE0 - - thumb_func_start sub_080A69E0 -sub_080A69E0: @ 0x080A69E0 - push {r4, r5, r6, r7, lr} - sub sp, #4 - adds r7, r0, #0 - adds r6, r1, #0 - orrs r0, r6 - cmp r0, #0 - beq _080A6A06 - adds r0, r7, #0 - adds r1, r6, #0 - bl sub_080A6A80 - adds r3, r0, #0 - cmp r3, #0 - beq _080A6A06 - ldr r0, _080A6A0C @ =gMenu - ldrb r1, [r0, #3] - ldrb r2, [r3, #4] - cmp r1, r2 - beq _080A6A10 -_080A6A06: - movs r0, #1 - rsbs r0, r0, #0 - b _080A6A74 - .align 2, 0 -_080A6A0C: .4byte gMenu -_080A6A10: - ldrb r1, [r0, #3] - cmp r1, #7 - beq _080A6A26 - cmp r1, #7 - bgt _080A6A20 - cmp r1, #4 - beq _080A6A26 - b _080A6A48 -_080A6A20: - cmp r1, #0xf - beq _080A6A44 - b _080A6A48 -_080A6A26: - ldrb r0, [r0, #3] - movs r2, #7 - cmp r0, #4 - bne _080A6A30 - movs r2, #9 -_080A6A30: - ldr r1, _080A6A40 @ =gAreaRoomHeaders - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrh r0, [r0, #2] - subs r6, r6, r0 - b _080A6A48 - .align 2, 0 -_080A6A40: .4byte gAreaRoomHeaders -_080A6A44: - ldr r0, _080A6A78 @ =0xFFFFFEF8 - adds r7, r7, r0 -_080A6A48: - ldrb r0, [r3] - lsls r0, r0, #4 - subs r0, r7, r0 - movs r4, #0x64 - muls r0, r4, r0 - ldr r5, _080A6A7C @ =0x0000023A - adds r1, r5, #0 - str r3, [sp] - bl __divsi3 - adds r7, r0, #0 - ldr r3, [sp] - ldrb r0, [r3, #1] - lsls r0, r0, #4 - subs r0, r6, r0 - muls r0, r4, r0 - adds r1, r5, #0 - bl __divsi3 - adds r6, r0, #0 - lsls r0, r6, #0x10 - orrs r0, r7 -_080A6A74: - add sp, #4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A6A78: .4byte 0xFFFFFEF8 -_080A6A7C: .4byte 0x0000023A - - thumb_func_start sub_080A6A80 -sub_080A6A80: @ 0x080A6A80 - push {lr} - adds r3, r0, #0 - lsrs r3, r3, #4 - lsrs r1, r1, #4 - ldr r2, _080A6A8C @ =gUnk_08127F94 - b _080A6AAE - .align 2, 0 -_080A6A8C: .4byte gUnk_08127F94 -_080A6A90: - ldrb r0, [r2] - cmp r0, r3 - bhi _080A6AAC - ldrb r0, [r2, #2] - cmp r0, r3 - blo _080A6AAC - ldrb r0, [r2, #1] - cmp r0, r1 - bhi _080A6AAC - ldrb r0, [r2, #3] - cmp r0, r1 - blo _080A6AAC - adds r0, r2, #0 - b _080A6AB6 -_080A6AAC: - adds r2, #8 -_080A6AAE: - ldrb r0, [r2] - cmp r0, #0xff - bne _080A6A90 - movs r0, #0 -_080A6AB6: - pop {pc} - - thumb_func_start Subtask_LocalMapHint -Subtask_LocalMapHint: @ 0x080A6AB8 - push {r4, lr} - bl FlushSprites - ldr r1, _080A6AF4 @ =gUnk_08128F1C - ldr r4, _080A6AF8 @ =gMenu - ldrb r0, [r4, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldrb r1, [r4, #3] - lsls r1, r1, #3 - ldr r0, _080A6AFC @ =gUnk_08128E94 - adds r1, r1, r0 - ldr r2, _080A6B00 @ =gScreen - movs r0, #5 - ldrsb r0, [r1, r0] - rsbs r0, r0, #0 - strh r0, [r2, #0x18] - ldrb r1, [r1, #6] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - ldrh r0, [r4, #0xa] - subs r0, r0, r1 - strh r0, [r2, #0x24] - bl CopyOAM - pop {r4, pc} - .align 2, 0 -_080A6AF4: .4byte gUnk_08128F1C -_080A6AF8: .4byte gMenu -_080A6AFC: .4byte gUnk_08128E94 -_080A6B00: .4byte gScreen - - thumb_func_start sub_080A6B04 -sub_080A6B04: @ 0x080A6B04 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_080A4D34 - movs r0, #6 - bl sub_080A4DB8 - ldr r0, _080A6BF0 @ =gFuseInfo - ldrb r2, [r0, #3] - lsls r2, r2, #3 - ldr r0, _080A6BF4 @ =gUnk_080C9CBC - adds r2, r2, r0 - ldrb r1, [r2, #4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080A6BF8 @ =gUnk_080FE320 - adds r0, r0, r1 - ldrb r2, [r2, #7] - mov r8, r2 - ldrh r6, [r0, #0xc] - ldrh r5, [r0, #0xe] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_080A6A80 - ldrb r4, [r0, #4] - ldr r7, _080A6BFC @ =gMenu - strb r4, [r7, #3] - adds r1, r7, #0 - adds r1, #0x2b - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080A67C4 - adds r0, r4, #0 - movs r1, #2 - bl sub_080A6FB4 - ldr r4, _080A6C00 @ =0x0000475F - movs r0, #0 - adds r1, r4, #0 - bl SetColor - movs r0, #0x5f - adds r1, r4, #0 - bl SetColor - ldr r0, _080A6C04 @ =0x00005001 - ldr r1, _080A6C08 @ =gBG3Buffer - movs r2, #0x80 - lsls r2, r2, #5 - bl MemFill16 - ldr r0, _080A6C0C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - movs r2, #0x64 - cmp r0, #0 - beq _080A6B84 - movs r2, #0x65 -_080A6B84: - ldr r1, _080A6C10 @ =gRoomTransition - ldrh r0, [r1, #0x20] - ldrh r1, [r1, #0x22] -.ifdef EU - movs r4, #0xfd - lsls r4, r4, #0x1 -.else - ldr r4, _080A6C14 @ =0x000001FB -.endif - movs r3, #0x80 - lsls r3, r3, #1 - adds r3, r2, r3 - adds r2, r4, #0 - bl sub_080A698C - mov r3, r8 - adds r3, #0x64 - adds r0, r6, #0 - adds r1, r5, #0 - adds r2, r4, #0 - bl sub_080A698C - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_080A69E0 - asrs r5, r0, #0x10 - ldrb r0, [r7, #3] - lsls r0, r0, #3 - ldr r1, _080A6C18 @ =gUnk_08128E94 - adds r1, r0, r1 - movs r0, #0 - strh r0, [r7, #0xa] - ldrb r0, [r1, #2] - cmp r0, #0 - beq _080A6BD4 - adds r0, r5, #0 - subs r0, #0x3c - cmp r0, #0 - ble _080A6BD4 - ldrb r1, [r1, #2] - cmp r1, r0 - bge _080A6BD2 - adds r0, r1, #0 -_080A6BD2: - strh r0, [r7, #0xa] -_080A6BD4: - ldr r1, _080A6BFC @ =gMenu - movs r0, #0x1e - strh r0, [r1, #8] - movs r0, #1 - bl SetMenuType - movs r0, #4 - movs r1, #8 - bl SetFade - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A6BF0: .4byte gFuseInfo -_080A6BF4: .4byte gUnk_080C9CBC -_080A6BF8: .4byte gUnk_080FE320 -_080A6BFC: .4byte gMenu -_080A6C00: .4byte 0x0000475F -_080A6C04: .4byte 0x00005001 -_080A6C08: .4byte gBG3Buffer -_080A6C0C: .4byte gPlayerState -_080A6C10: .4byte gRoomTransition -.ifndef EU -_080A6C14: .4byte 0x000001FB -.endif -_080A6C18: .4byte gUnk_08128E94 - - thumb_func_start sub_080A6C1C -sub_080A6C1C: @ 0x080A6C1C - push {lr} - ldr r0, _080A6C34 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A6C6A - ldr r0, _080A6C38 @ =gMenu - ldrh r0, [r0, #8] - cmp r0, #0 - beq _080A6C3C - cmp r0, #1 - beq _080A6C5C - b _080A6C62 - .align 2, 0 -_080A6C34: .4byte gFadeControl -_080A6C38: .4byte gMenu -_080A6C3C: - bl sub_080A66D0 - ldr r0, _080A6C58 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #1 - blt _080A6C6A - cmp r0, #2 - ble _080A6C50 - cmp r0, #8 - bne _080A6C6A -_080A6C50: - bl Subtask_Exit - b _080A6C6A - .align 2, 0 -_080A6C58: .4byte gInput -_080A6C5C: - ldr r0, _080A6C6C @ =0x00000103 - bl SoundReq -_080A6C62: - ldr r1, _080A6C70 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] -_080A6C6A: - pop {pc} - .align 2, 0 -_080A6C6C: .4byte 0x00000103 -_080A6C70: .4byte gMenu - - thumb_func_start Subtask_FastTravel -Subtask_FastTravel: @ 0x080A6C74 - push {r4, lr} - bl FlushSprites - ldr r1, _080A6CA0 @ =gUnk_08128F24 - ldr r4, _080A6CA4 @ =gMenu - ldrb r0, [r4, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldrb r0, [r4] - cmp r0, #0 - beq _080A6C94 - bl sub_080A6E70 -_080A6C94: - bl sub_080A6498 - bl CopyOAM - pop {r4, pc} - .align 2, 0 -_080A6CA0: .4byte gUnk_08128F24 -_080A6CA4: .4byte gMenu - - thumb_func_start sub_080A6CA8 -sub_080A6CA8: @ 0x080A6CA8 - push {lr} - bl sub_080A4D34 - movs r0, #0xd - bl sub_080A4DB8 - bl sub_080A6290 - movs r0, #0 - bl sub_080A6D74 - ldr r1, _080A6CD4 @ =gMenu - strb r0, [r1, #3] - movs r0, #1 - bl SetMenuType - movs r0, #4 - movs r1, #8 - bl SetFade - pop {pc} - .align 2, 0 -_080A6CD4: .4byte gMenu - - thumb_func_start sub_080A6CD8 -sub_080A6CD8: @ 0x080A6CD8 - push {r4, lr} - ldr r0, _080A6D08 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A6D6E - ldr r1, _080A6D0C @ =gMenu - movs r0, #1 - strb r0, [r1] - movs r4, #0 - ldr r0, _080A6D10 @ =gInput - ldrh r0, [r0, #2] - adds r2, r1, #0 - cmp r0, #0x10 - beq _080A6D34 - cmp r0, #0x10 - bgt _080A6D1A - cmp r0, #2 - beq _080A6D4C - cmp r0, #2 - bgt _080A6D14 - cmp r0, #1 - beq _080A6D38 - b _080A6D54 - .align 2, 0 -_080A6D08: .4byte gFadeControl -_080A6D0C: .4byte gMenu -_080A6D10: .4byte gInput -_080A6D14: - cmp r0, #8 - beq _080A6D38 - b _080A6D54 -_080A6D1A: - cmp r0, #0x40 - beq _080A6D2E - cmp r0, #0x40 - bgt _080A6D28 - cmp r0, #0x20 - beq _080A6D2E - b _080A6D54 -_080A6D28: - cmp r0, #0x80 - beq _080A6D34 - b _080A6D54 -_080A6D2E: - movs r4, #1 - rsbs r4, r4, #0 - b _080A6D58 -_080A6D34: - movs r4, #1 - b _080A6D58 -_080A6D38: - movs r0, #2 - strb r0, [r2] - bl SetMenuType - ldr r0, _080A6D48 @ =0x00000704 - bl MessageFromTarget - b _080A6D54 - .align 2, 0 -_080A6D48: .4byte 0x00000704 -_080A6D4C: - movs r0, #3 - strb r0, [r1] - bl SetMenuType -_080A6D54: - cmp r4, #0 - beq _080A6D6E -_080A6D58: - adds r0, r4, #0 - bl sub_080A6D74 - ldr r1, _080A6D70 @ =gMenu - ldrb r2, [r1, #3] - cmp r0, r2 - beq _080A6D6E - strb r0, [r1, #3] - movs r0, #0x69 - bl SoundReq -_080A6D6E: - pop {r4, pc} - .align 2, 0 -_080A6D70: .4byte gMenu - - thumb_func_start sub_080A6D74 -sub_080A6D74: @ 0x080A6D74 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r0, _080A6DA4 @ =gSave - ldr r0, [r0, #0x40] - lsrs r2, r0, #0x18 - ldr r0, _080A6DA8 @ =gMenu - ldrb r1, [r0, #3] - cmp r3, #0 - bne _080A6DAC - movs r1, #0 - movs r0, #1 - ands r0, r2 - cmp r0, #0 - bne _080A6DC6 - movs r3, #1 -_080A6D92: - adds r1, #1 - cmp r1, #7 - bhi _080A6DC6 - adds r0, r3, #0 - lsls r0, r1 - ands r0, r2 - cmp r0, #0 - beq _080A6D92 - b _080A6DC6 - .align 2, 0 -_080A6DA4: .4byte gSave -_080A6DA8: .4byte gMenu -_080A6DAC: - cmp r2, #0 - beq _080A6DC6 - movs r4, #7 - movs r5, #1 -_080A6DB4: - adds r0, r1, r3 - adds r1, r0, #0 - adds r1, #8 - ands r1, r4 - adds r0, r5, #0 - lsls r0, r1 - ands r0, r2 - cmp r0, #0 - beq _080A6DB4 -_080A6DC6: - movs r0, #7 - ands r1, r0 - adds r0, r1, #0 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080A6DD0 -sub_080A6DD0: @ 0x080A6DD0 -.ifdef EU - push {lr} - bl sub_08056338 - cmp r0, #0 - beq _080A65CC - cmp r0, #1 - beq _080A65D8 - b _080A65EA -_080A65CC: - ldr r1, _080A65D4 @ =gChooseFileState - movs r0, #2 - b _080A65DC - .align 2, 0 -_080A65D4: .4byte gChooseFileState -_080A65D8: - ldr r1, _080A65ECEU @ =gChooseFileState - movs r0, #3 -_080A65DC: - strb r0, [r1] - movs r0, #1 - cmp r0, #0 - beq _080A65EA - movs r0, #3 - bl SetMenuType -_080A65EA: - pop {pc} - .align 2, 0 -_080A65ECEU: .4byte gChooseFileState - -.else - push {lr} - bl sub_08056338 - cmp r0, #0 - beq _080A6DE0 - cmp r0, #1 - beq _080A6DF0 - b _080A6DF6 -_080A6DE0: - ldr r1, _080A6DEC @ =gMenu - movs r0, #2 - strb r0, [r1] - movs r0, #3 - b _080A6DF2 - .align 2, 0 -_080A6DEC: .4byte gMenu -_080A6DF0: - movs r0, #1 -_080A6DF2: - bl SetMenuType -_080A6DF6: - pop {pc} -.endif - - thumb_func_start sub_080A6DF8 -sub_080A6DF8: @ 0x080A6DF8 - push {lr} - ldr r0, _080A6E14 @ =gMenu - ldrb r0, [r0] - cmp r0, #2 - bne _080A6E18 - movs r0, #4 - bl SetMenuType - movs r0, #5 - movs r1, #8 - bl SetFade - b _080A6E3A - .align 2, 0 -_080A6E14: .4byte gMenu -_080A6E18: - bl ResetPlayerAnimationAndAction - ldr r0, _080A6E3C @ =gPlayerEntity - adds r1, r0, #0 - adds r1, #0x58 - ldrb r1, [r1] - ldrh r2, [r0, #0x12] - bl sub_080042D0 - bl Subtask_Exit - ldr r1, _080A6E40 @ =gUnk_02034490 - movs r0, #0 - strb r0, [r1] - movs r0, #0x6c - bl SoundReq -_080A6E3A: - pop {pc} - .align 2, 0 -_080A6E3C: .4byte gPlayerEntity -_080A6E40: .4byte gUnk_02034490 - - thumb_func_start sub_080A6E44 -sub_080A6E44: @ 0x080A6E44 - push {lr} - ldr r0, _080A6E64 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A6E60 - ldr r0, _080A6E68 @ =gMenu - ldrb r1, [r0, #3] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080A6E6C @ =gUnk_08128024 - adds r0, r0, r1 - bl sub_080A71F4 -_080A6E60: - pop {pc} - .align 2, 0 -_080A6E64: .4byte gFadeControl -_080A6E68: .4byte gMenu -_080A6E6C: .4byte gUnk_08128024 - - thumb_func_start sub_080A6E70 -sub_080A6E70: @ 0x080A6E70 -.ifdef EU - push {r4, r5, lr} - ldr r1, _080A66CC @ =gOamCmd - movs r0, #0 - strh r0, [r1, #4] - strh r0, [r1, #6] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r1, #8] - ldr r1, _080A66D0 @ =gChooseFileState - adds r4, r1, #0 - adds r4, #0x2c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - ldrb r0, [r1, #3] - bl sub_080A6EE0 - ldrb r1, [r4] - movs r0, #0x10 - ands r0, r1 - movs r1, #0x5e - cmp r0, #0 - beq _080A6698 - movs r1, #0x5d -_080A6698: - movs r0, #0xfd - lsls r0, r0, #1 - bl DrawDirect - movs r4, #0 - ldr r5, _080A66D4 @ =gSave -_080A66A4EU: - adds r0, r4, #0 - adds r0, #0x18 - movs r1, #1 - lsls r1, r0 - ldr r0, [r5, #0x40] - ands r0, r1 - cmp r0, #0 - beq _080A66C4 - adds r0, r4, #0 - bl sub_080A6EE0 - movs r0, #0xfd - lsls r0, r0, #1 - movs r1, #0x5c - bl DrawDirect -_080A66C4: - adds r4, #1 - cmp r4, #7 - bls _080A66A4EU - pop {r4, r5, pc} - .align 2, 0 -_080A66CC: .4byte gOamCmd -_080A66D0: .4byte gChooseFileState -_080A66D4: .4byte gSave - -.else - push {r4, r5, lr} - ldr r1, _080A6ED0 @ =gOamCmd - movs r0, #0 - strh r0, [r1, #4] - strh r0, [r1, #6] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r1, #8] - ldr r1, _080A6ED4 @ =gMenu - adds r4, r1, #0 - adds r4, #0x2c - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - ldrb r0, [r1, #3] - bl sub_080A6EE0 - ldrb r1, [r4] - movs r0, #0x10 - ands r0, r1 - movs r1, #0x5e - cmp r0, #0 - beq _080A6EA0 - movs r1, #0x5d -_080A6EA0: - ldr r0, _080A6ED8 @ =0x000001FB - bl DrawDirect - movs r4, #0 - ldr r5, _080A6EDC @ =gSave -_080A6EAA: - adds r0, r4, #0 - adds r0, #0x18 - movs r1, #1 - lsls r1, r0 - ldr r0, [r5, #0x40] - ands r0, r1 - cmp r0, #0 - beq _080A6EC8 - adds r0, r4, #0 - bl sub_080A6EE0 - ldr r0, _080A6ED8 @ =0x000001FB - movs r1, #0x5c - bl DrawDirect -_080A6EC8: - adds r4, #1 - cmp r4, #7 - bls _080A6EAA - pop {r4, r5, pc} - .align 2, 0 -_080A6ED0: .4byte gOamCmd -_080A6ED4: .4byte gMenu -_080A6ED8: .4byte 0x000001FB -_080A6EDC: .4byte gSave -.endif - - thumb_func_start sub_080A6EE0 -sub_080A6EE0: @ 0x080A6EE0 - push {r4, r5, r6, lr} - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080A6F34 @ =gUnk_08128024 - adds r1, r1, r0 - ldrh r3, [r1, #6] - ldrh r4, [r1, #8] - ldr r0, _080A6F38 @ =gAreaRoomHeaders - ldrb r2, [r1, #0xb] - lsls r2, r2, #2 - adds r2, r2, r0 - ldrb r1, [r1, #0xc] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, [r2] - adds r1, r1, r0 - ldrh r0, [r1] - adds r3, r3, r0 - ldrh r0, [r1, #2] - adds r4, r4, r0 - ldr r6, _080A6F3C @ =gOamCmd - lsls r0, r3, #2 - adds r0, r0, r3 - lsls r0, r0, #5 - movs r5, #0xf9 - lsls r5, r5, #4 - adds r1, r5, #0 - bl __divsi3 - adds r0, #0x28 - strh r0, [r6] - lsls r0, r4, #2 - adds r0, r0, r4 - lsls r0, r0, #5 - adds r1, r5, #0 - bl __divsi3 - adds r0, #0xc - strh r0, [r6, #2] - pop {r4, r5, r6, pc} - .align 2, 0 -_080A6F34: .4byte gUnk_08128024 -_080A6F38: .4byte gAreaRoomHeaders -_080A6F3C: .4byte gOamCmd - - thumb_func_start sub_080A6F40 -sub_080A6F40: @ 0x080A6F40 - push {r4, r5, r6, lr} - movs r5, #0 - ldr r4, _080A6F4C @ =gUnk_08128F38 - movs r6, #0 - b _080A6F60 - .align 2, 0 -_080A6F4C: .4byte gUnk_08128F38 -_080A6F50: - ldrb r0, [r4] - ldrb r1, [r4, #1] - bl sub_0807CB24 - lsls r0, r5 - orrs r6, r0 - adds r5, #1 - adds r4, #2 -_080A6F60: - ldrb r0, [r4] - cmp r0, #0 - bne _080A6F50 - mvns r0, r6 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A6F6C -sub_080A6F6C: @ 0x080A6F6C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080A6FA4 @ =gMenu - ldrh r0, [r1, #0x2e] - cmp r0, r4 - beq _080A6F9A - strh r4, [r1, #0x2e] - ldr r0, _080A6FA8 @ =gUnk_020350F0 - movs r1, #0x80 - lsls r1, r1, #1 - bl MemClear - movs r0, #0xff - ands r0, r4 - cmp r0, #0 - beq _080A6F94 - ldr r1, _080A6FAC @ =gUnk_08128FA8 - adds r0, r4, #0 - bl sub_0805F46C -_080A6F94: - ldr r1, _080A6FB0 @ =gScreen - movs r0, #1 - strh r0, [r1, #0xe] -_080A6F9A: - ldr r1, _080A6FB0 @ =gScreen - movs r0, #2 - strh r0, [r1, #0xc] - pop {r4, pc} - .align 2, 0 -_080A6FA4: .4byte gMenu -_080A6FA8: .4byte gUnk_020350F0 -_080A6FAC: .4byte gUnk_08128FA8 -_080A6FB0: .4byte gScreen - - thumb_func_start sub_080A6FB4 -sub_080A6FB4: @ 0x080A6FB4 - push {r4, r5, lr} - adds r2, r0, #0 - movs r4, #0 - cmp r1, #1 - beq _080A6FF0 - cmp r1, #1 - blo _080A6FC8 - cmp r1, #2 - beq _080A6FD6 - b _080A6FFA -_080A6FC8: - ldr r0, _080A6FE4 @ =gSave - movs r1, #1 - lsls r1, r2 - ldr r0, [r0, #0x40] - ands r0, r1 - cmp r0, #0 - beq _080A6FFA -_080A6FD6: - ldr r1, _080A6FE8 @ =gUnk_08127F94 - lsls r0, r2, #3 - adds r0, r0, r1 - ldrh r4, [r0, #6] - ldr r5, _080A6FEC @ =gUnk_08128FC0 - b _080A6FFA - .align 2, 0 -_080A6FE4: .4byte gSave -_080A6FE8: .4byte gUnk_08127F94 -_080A6FEC: .4byte gUnk_08128FC0 -_080A6FF0: - ldr r1, _080A702C @ =gUnk_08128FF0 - lsls r0, r2, #1 - adds r0, r0, r1 - ldrh r4, [r0] - ldr r5, _080A7030 @ =gUnk_08128FD8 -_080A6FFA: - ldr r1, _080A7034 @ =gMenu - ldrh r0, [r1, #0x2e] - cmp r0, r4 - beq _080A7024 - strh r4, [r1, #0x2e] - ldr r0, _080A7038 @ =gUnk_020350F0 - movs r1, #0x80 - lsls r1, r1, #1 - bl MemClear - movs r0, #0xff - ands r0, r4 - cmp r0, #0 - beq _080A701E - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0805F46C -_080A701E: - ldr r1, _080A703C @ =gScreen - movs r0, #1 - strh r0, [r1, #0xe] -_080A7024: - ldr r1, _080A703C @ =gScreen - movs r0, #2 - strh r0, [r1, #0xc] - pop {r4, r5, pc} - .align 2, 0 -_080A702C: .4byte gUnk_08128FF0 -_080A7030: .4byte gUnk_08128FD8 -_080A7034: .4byte gMenu -_080A7038: .4byte gUnk_020350F0 -_080A703C: .4byte gScreen - - thumb_func_start sub_080A7040 -sub_080A7040: @ 0x080A7040 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r1, _080A7090 @ =gMenu - ldrh r0, [r1, #0x2e] - cmp r0, r5 - beq _080A708C - strh r5, [r1, #0x2e] - ldr r4, _080A7094 @ =gUnk_02022130 - movs r1, #0xc0 - lsls r1, r1, #2 - adds r0, r4, #0 - bl MemClear - ldr r0, _080A7098 @ =0xFFFFFE00 - adds r4, r4, r0 - ldr r1, _080A709C @ =0x0600E000 - movs r2, #0x80 - lsls r2, r2, #4 - adds r0, r4, #0 - bl MemCopy - ldr r1, _080A70A0 @ =gUnk_08128D70 - lsls r0, r5, #3 - adds r4, r0, r1 - ldrb r0, [r4] - bl GetInventoryValue - cmp r0, #0 - beq _080A7082 - ldrh r0, [r4, #6] - ldr r1, _080A70A4 @ =gUnk_08129004 - bl sub_0805F46C -_080A7082: - ldr r0, _080A70A8 @ =gScreen - movs r1, #3 - strh r1, [r0, #0x18] - movs r1, #1 - strh r1, [r0, #0x1a] -_080A708C: - pop {r4, r5, pc} - .align 2, 0 -_080A7090: .4byte gMenu -_080A7094: .4byte gUnk_02022130 -_080A7098: .4byte 0xFFFFFE00 -_080A709C: .4byte 0x0600E000 -_080A70A0: .4byte gUnk_08128D70 -_080A70A4: .4byte gUnk_08129004 -_080A70A8: .4byte gScreen - - thumb_func_start sub_080A70AC -sub_080A70AC: @ 0x080A70AC - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _080A7110 @ =gUnk_0200AF34 - movs r1, #0xc0 - lsls r1, r1, #2 - adds r0, r4, #0 - bl MemClear - adds r2, r4, #0 - subs r2, #0x34 - movs r0, #0x7f - strb r0, [r2, #0x13] - strb r0, [r2, #0x14] - ldrb r0, [r5] - strh r0, [r2, #0x16] - movs r0, #1 - ldrsb r0, [r5, r0] - strh r0, [r2, #0x1c] - ldrb r1, [r5, #2] - subs r0, r4, #4 - strb r1, [r0] - ldrb r0, [r5, #3] - strh r0, [r2, #0x18] - movs r0, #4 - ldrsb r0, [r5, r0] - strh r0, [r2, #0x1e] - ldrb r1, [r5, #5] - subs r0, r4, #3 - strb r1, [r0] - ldrb r0, [r5, #6] - strh r0, [r2, #0x1a] - movs r0, #7 - ldrsb r0, [r5, r0] - strh r0, [r2, #0x20] - ldrb r0, [r5, #8] - subs r4, #2 - strb r0, [r4] - adds r5, #9 - movs r4, #1 - rsbs r4, r4, #0 -_080A70FC: - ldrb r0, [r5] - ldrb r1, [r5, #1] - bl sub_0801CA6C - adds r5, #2 - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, r4 - bne _080A70FC - pop {r4, r5, pc} - .align 2, 0 -_080A7110: .4byte gUnk_0200AF34 - - thumb_func_start SetMenuType -SetMenuType: @ 0x080A7114 - ldr r1, _080A7120 @ =gMenu - movs r2, #0 - strb r0, [r1, #5] - strb r2, [r1, #6] - strb r2, [r1, #7] - bx lr - .align 2, 0 -_080A7120: .4byte gMenu - - thumb_func_start ResetUI -ResetUI: @ 0x080A7124 - push {lr} - ldr r0, _080A7134 @ =gUnk_02032EC0 - movs r1, #0xed - lsls r1, r1, #2 - bl MemClear - pop {pc} - .align 2, 0 -_080A7134: .4byte gUnk_02032EC0 - - thumb_func_start MenuFadeIn -MenuFadeIn: @ 0x080A7138 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r4, _080A715C @ =gUnk_02032EC0 - ldrb r0, [r4] - cmp r0, #0 - bne _080A7164 - movs r1, #0xed - lsls r1, r1, #2 - adds r0, r4, #0 - bl MemClear - strb r5, [r4, #2] - strb r6, [r4, #3] - ldr r0, _080A7160 @ =gMain - ldrb r0, [r0, #4] - strb r0, [r4, #7] - b _080A716C - .align 2, 0 -_080A715C: .4byte gUnk_02032EC0 -_080A7160: .4byte gMain -_080A7164: - strb r5, [r4, #4] - strb r6, [r4, #5] - movs r0, #1 - strb r0, [r4] -_080A716C: - ldr r1, _080A7194 @ =gUnk_02032EC0 - movs r0, #0 - strb r0, [r1, #6] - ldr r0, _080A7198 @ =0x0000FFFF - strh r0, [r1, #8] - movs r4, #0 - movs r0, #0x20 - strh r0, [r1, #0xa] - ldr r1, _080A719C @ =gMain - movs r0, #7 - strb r0, [r1, #4] - movs r0, #5 - movs r1, #0x20 - bl SetFade - ldr r0, _080A71A0 @ =gUnk_02018EB0 - strb r4, [r0] - strb r4, [r0, #1] - pop {r4, r5, r6, pc} - .align 2, 0 -_080A7194: .4byte gUnk_02032EC0 -_080A7198: .4byte 0x0000FFFF -_080A719C: .4byte gMain -_080A71A0: .4byte gUnk_02018EB0 - - thumb_func_start sub_080A71A4 -sub_080A71A4: @ 0x080A71A4 - push {r4, lr} - adds r4, r0, #0 - ldr r3, _080A71B4 @ =gUnk_02032EC0 - ldrb r0, [r3] - cmp r0, #0 - bne _080A71B8 - strb r2, [r3, #0xe] - b _080A71BA - .align 2, 0 -_080A71B4: .4byte gUnk_02032EC0 -_080A71B8: - strb r2, [r3, #0xf] -_080A71BA: - adds r0, r4, #0 - bl MenuFadeIn - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A71C4 -sub_080A71C4: @ 0x080A71C4 - push {r4, r5, lr} - adds r4, r2, #0 - adds r5, r3, #0 - bl MenuFadeIn - ldr r0, _080A71D8 @ =gUnk_02032EC0 - strh r4, [r0, #8] - strh r5, [r0, #0xa] - pop {r4, r5, pc} - .align 2, 0 -_080A71D8: .4byte gUnk_02032EC0 - - thumb_func_start Subtask_Exit -Subtask_Exit: @ 0x080A71DC - push {lr} - ldr r1, _080A71F0 @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - movs r0, #5 - movs r1, #0x20 - bl SetFade - pop {pc} - .align 2, 0 -_080A71F0: .4byte gUnk_02032EC0 - - thumb_func_start sub_080A71F4 -sub_080A71F4: @ 0x080A71F4 - push {lr} - cmp r0, #0 - beq _080A71FE - bl DoExitTransition -_080A71FE: - bl DeleteAllEntities - bl sub_0805E974 - bl DeleteAllEntities - ldr r0, _080A7218 @ =gMain - movs r2, #0 - movs r1, #1 - strb r1, [r0, #3] - strb r2, [r0, #4] - pop {pc} - .align 2, 0 -_080A7218: .4byte gMain - - thumb_func_start GameMain_Subtask -GameMain_Subtask: @ 0x080A721C - push {lr} - ldr r0, _080A7248 @ =gUnk_02032EC0 - ldrb r1, [r0] - adds r2, r0, #0 - cmp r1, #2 - bhi _080A7238 - ldrb r3, [r2, #4] - cmp r3, #0 - beq _080A7238 - ldrb r0, [r2, #5] - movs r1, #0 - strb r0, [r2, #3] - strb r3, [r2, #2] - strb r1, [r2, #4] -_080A7238: - ldr r0, _080A724C @ =gUnk_0812901C - ldrb r1, [r2] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A7248: .4byte gUnk_02032EC0 -_080A724C: .4byte gUnk_0812901C - - thumb_func_start Subtask_FadeIn -Subtask_FadeIn: @ 0x080A7250 - push {r4, lr} - ldr r0, _080A72E8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A72E4 - ldr r0, _080A72EC @ =gScreen - ldr r1, _080A72F0 @ =gUnk_03001020 - movs r2, #0x7c - bl MemCopy - ldr r0, _080A72F4 @ =gPaletteBuffer - ldr r1, _080A72F8 @ =gUnk_02024090 - movs r2, #0x80 - lsls r2, r2, #3 - bl MemCopy - ldr r0, _080A72FC @ =gGFXSlots - ldr r4, _080A7300 @ =gUnk_02032F14 - movs r2, #0x85 - lsls r2, r2, #2 - adds r1, r4, #0 - bl MemCopy - ldr r0, _080A7304 @ =gPaletteList - movs r2, #0x85 - lsls r2, r2, #2 - adds r1, r4, r2 - movs r2, #0x40 - bl MemCopy - ldr r0, _080A7308 @ =gRoomControls - adds r1, r4, #0 - subs r1, #0x38 - movs r2, #0x38 - bl MemCopy - ldr r0, _080A730C @ =gUnk_03000420 - movs r2, #0x95 - lsls r2, r2, #2 - adds r1, r4, r2 - movs r2, #0x80 - lsls r2, r2, #1 - bl MemCopy - ldr r0, _080A7310 @ =gActiveScriptInfo - movs r2, #0xd5 - lsls r2, r2, #2 - adds r1, r4, r2 - movs r2, #0xc - bl MemCopy - bl sub_0805E958 - adds r1, r4, #0 - subs r1, #0x54 - ldr r0, _080A7314 @ =gRoomTransition - adds r0, #0x2f - ldrb r0, [r0] - strb r0, [r1, #0xd] - ldr r0, _080A7318 @ =gPlayerState - adds r0, #0x8b - ldrb r0, [r0] - strb r0, [r1, #0xc] - ldr r0, _080A731C @ =gCurrentRoomProperties - ldr r0, [r0] - str r0, [r1, #0x10] - ldr r0, _080A7320 @ =gMapBottom - ldr r0, [r0] - str r0, [r1, #0x14] - ldr r0, _080A7324 @ =gMapTop - ldr r0, [r0] - str r0, [r1, #0x18] - movs r0, #1 - strb r0, [r1] -_080A72E4: - pop {r4, pc} - .align 2, 0 -_080A72E8: .4byte gFadeControl -_080A72EC: .4byte gScreen -_080A72F0: .4byte gUnk_03001020 -_080A72F4: .4byte gPaletteBuffer -_080A72F8: .4byte gUnk_02024090 -_080A72FC: .4byte gGFXSlots -_080A7300: .4byte gUnk_02032F14 -_080A7304: .4byte gPaletteList -_080A7308: .4byte gRoomControls -_080A730C: .4byte gUnk_03000420 -_080A7310: .4byte gActiveScriptInfo -_080A7314: .4byte gRoomTransition -_080A7318: .4byte gPlayerState -_080A731C: .4byte gCurrentRoomProperties -_080A7320: .4byte gMapBottom -_080A7324: .4byte gMapTop - - thumb_func_start Subtask_Init -Subtask_Init: @ 0x080A7328 - push {r4, lr} - ldr r0, _080A7388 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A7384 - bl DeleteAllEntities - ldr r0, _080A738C @ =gMenu - movs r1, #0x30 - bl MemClear - ldr r0, _080A7390 @ =gRoomControls - movs r1, #0x38 - bl MemClear - ldr r0, _080A7394 @ =gUnk_03000420 - movs r1, #0x80 - lsls r1, r1, #1 - bl MemClear - ldr r4, _080A7398 @ =gActiveScriptInfo - adds r0, r4, #0 - movs r1, #0xc - bl MemClear - movs r0, #8 - strb r0, [r4, #8] - movs r0, #1 - bl DispReset - bl MessageInitialize - bl ResetPalettes - movs r0, #0 - bl ResetPaletteTable - ldr r0, _080A739C @ =gGFXSlots - movs r2, #1 - strb r2, [r0] - ldr r1, _080A73A0 @ =gUnk_02032EC0 - movs r0, #2 - strb r0, [r1] - ldr r0, _080A73A4 @ =gRoomTransition - adds r0, #0x30 - strb r2, [r0] -_080A7384: - pop {r4, pc} - .align 2, 0 -_080A7388: .4byte gFadeControl -_080A738C: .4byte gMenu -_080A7390: .4byte gRoomControls -_080A7394: .4byte gUnk_03000420 -_080A7398: .4byte gActiveScriptInfo -_080A739C: .4byte gGFXSlots -_080A73A0: .4byte gUnk_02032EC0 -_080A73A4: .4byte gRoomTransition - - thumb_func_start Subtask_FadeOut -Subtask_FadeOut: @ 0x080A73A8 - push {r4, r5, lr} - ldr r0, _080A7468 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - beq _080A73B4 - b _080A74BC -_080A73B4: - bl DeleteAllEntities - bl sub_0805E974 - ldr r1, _080A746C @ =gCurrentRoomProperties - ldr r5, _080A7470 @ =gUnk_02032EC0 - ldr r0, [r5, #0x10] - str r0, [r1] - ldr r0, _080A7474 @ =gPlayerState - ldrb r1, [r5, #0xc] - adds r0, #0x8b - strb r1, [r0] - ldr r1, _080A7478 @ =gMapBottom - ldr r0, [r5, #0x14] - str r0, [r1] - ldr r1, _080A747C @ =gMapTop - ldr r0, [r5, #0x18] - str r0, [r1] - movs r1, #0xea - lsls r1, r1, #2 - adds r0, r5, r1 - ldr r1, _080A7480 @ =gActiveScriptInfo - movs r2, #0xc - bl MemCopy - movs r1, #0xaa - lsls r1, r1, #2 - adds r0, r5, r1 - ldr r1, _080A7484 @ =gUnk_03000420 - movs r2, #0x80 - lsls r2, r2, #1 - bl MemCopy - movs r1, #0x9a - lsls r1, r1, #2 - adds r0, r5, r1 - ldr r1, _080A7488 @ =gPaletteList - movs r2, #0x40 - bl MemCopy - adds r0, r5, #0 - adds r0, #0x54 - ldr r1, _080A748C @ =gGFXSlots - movs r2, #0x85 - lsls r2, r2, #2 - bl MemCopy - adds r0, r5, #0 - adds r0, #0x1c - ldr r4, _080A7490 @ =gRoomControls - adds r1, r4, #0 - movs r2, #0x38 - bl MemCopy - ldr r0, _080A7494 @ =gUnk_03001020 - ldr r1, _080A7498 @ =gScreen - movs r2, #0x7c - bl MemCopy - ldrb r0, [r4, #4] - bl GetFlagBankOffset - ldr r4, _080A749C @ =gArea - strh r0, [r4, #4] - bl GetCurrentRoomInfo - ldr r1, _080A74A0 @ =0x0000085C - adds r4, r4, r1 - str r0, [r4] - ldrb r0, [r5, #6] - bl RestoreGameTask - ldrb r1, [r5, #0xd] - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r0, r0, #0x1f - bl sub_0801D000 - bl sub_080A74F4 - ldrh r1, [r5, #8] - ldr r0, _080A74A4 @ =0x0000FFFF - cmp r1, r0 - beq _080A74A8 - adds r0, r1, #0 - ldrh r1, [r5, #0xa] - bl SetFade - b _080A74AE - .align 2, 0 -_080A7468: .4byte gFadeControl -_080A746C: .4byte gCurrentRoomProperties -_080A7470: .4byte gUnk_02032EC0 -_080A7474: .4byte gPlayerState -_080A7478: .4byte gMapBottom -_080A747C: .4byte gMapTop -_080A7480: .4byte gActiveScriptInfo -_080A7484: .4byte gUnk_03000420 -_080A7488: .4byte gPaletteList -_080A748C: .4byte gGFXSlots -_080A7490: .4byte gRoomControls -_080A7494: .4byte gUnk_03001020 -_080A7498: .4byte gScreen -_080A749C: .4byte gArea -_080A74A0: .4byte 0x0000085C -_080A74A4: .4byte 0x0000FFFF -_080A74A8: - ldrh r0, [r5, #0xa] - bl SetFadeInverted -_080A74AE: - ldr r1, _080A74C0 @ =gUnk_02032EC0 - movs r2, #0 - movs r0, #4 - strb r0, [r1] - ldr r0, _080A74C4 @ =gRoomTransition - adds r0, #0x30 - strb r2, [r0] -_080A74BC: - pop {r4, r5, pc} - .align 2, 0 -_080A74C0: .4byte gUnk_02032EC0 -_080A74C4: .4byte gRoomTransition - - thumb_func_start Subtask_Die -Subtask_Die: @ 0x080A74C8 - push {lr} - bl sub_080A74F4 - ldr r0, _080A74E8 @ =gFadeControl - ldrb r3, [r0] - cmp r3, #0 - bne _080A74E6 - ldr r0, _080A74EC @ =gMain - ldr r1, _080A74F0 @ =gUnk_02032EC0 - ldrb r2, [r1, #7] - strb r2, [r0, #4] - strb r3, [r1] - strb r3, [r1, #2] - bl ResetSystemPriority -_080A74E6: - pop {pc} - .align 2, 0 -_080A74E8: .4byte gFadeControl -_080A74EC: .4byte gMain -_080A74F0: .4byte gUnk_02032EC0 - - thumb_func_start sub_080A74F4 -sub_080A74F4: @ 0x080A74F4 - push {lr} - bl SetInitializationPriority - ldr r1, _080A7524 @ =gMain - movs r0, #0 - strb r0, [r1, #0xb] - bl FlushSprites - bl UpdateEntities - bl UpdateManagers - bl DrawUI - bl DrawOAMCmd - bl UpdateCarriedObject - bl DrawEntities - bl CopyOAM - pop {pc} - .align 2, 0 -_080A7524: .4byte gMain - - thumb_func_start Subtask_Update -Subtask_Update: @ 0x080A7528 - push {lr} - ldr r1, _080A753C @ =gSubtasks - ldr r0, _080A7540 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A753C: .4byte gSubtasks -_080A7540: .4byte gUnk_02032EC0 diff --git a/linker.ld b/linker.ld index 7518f5c6..524b2992 100644 --- a/linker.ld +++ b/linker.ld @@ -850,7 +850,7 @@ SECTIONS { src/menu/kinstone_menu.o(.text); src/menu/figurine_menu.o(.text); src/menu/pause_menu.o(.text); - asm/subtask2.o(.text); + src/subtask2.o(.text); src/playerItem/playerItemSword.o(.text); src/playerItemUtils.o(.text); src/projectileUtils.o(.text); diff --git a/src/subtask2.c b/src/subtask2.c new file mode 100644 index 00000000..8511f6a8 --- /dev/null +++ b/src/subtask2.c @@ -0,0 +1,412 @@ +#include "global.h" +#include "menu.h" +#include "game.h" +#include "subtask.h" +#include "save.h" +#include "screen.h" +#include "common.h" +#include "fileselect.h" +#include "flags.h" +#include "functions.h" +#include "main.h" +#include "message.h" + +extern void CreateDialogBox(u32, u32); + +extern u8 gUnk_08128D38[]; +extern u8 gUnk_08128D43[]; + +void sub_080A5CFC(u32, void*, u32); +void sub_080A6FB4(u32, u32); + +extern void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size); +extern void LoadDungeonMap(void); + +void DrawDungeonFeatures(u32, void*, u32); + +extern void (*const gUnk_08128D58[])(void); + +extern KeyButtonLayout gUnk_08128D60; + +extern void (*const gUnk_08128DB0[])(void); +void sub_080A617C(void); +void sub_080A7040(u32); + +extern u8 gUnk_08128DB8[]; +extern KeyButtonLayout gUnk_08128DBC; + +extern void (*const gUnk_08128DCC[])(void); +void sub_080A6378(void); + +extern void (*const gUnk_08128F24[])(void); +void sub_080A6E70(void); +void sub_080A6498(void); + +void sub_080A4DB8(u32); +void sub_080A6290(void); +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); + +extern void (*const gUnk_0812901C[])(void); + +void sub_080A74F4(void); + +extern void DrawUI(void); +extern void UpdateCarriedObject(void); + +extern void (*const gSubtasks[])(void); + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5594.inc", void sub_080A5594()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A56A0.inc", void sub_080A56A0()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A57F4.inc", void sub_080A57F4()) + +void sub_080A5990(void) { + extern void (*const gUnk_08128D14[])(void); + gUnk_08128D14[gMenu.menuType](); +} + +void sub_080A59AC(void) { + gMenu.field_0x3 = 0; + SetPopupState(0, 0); + SetMenuType(1); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A59C8.inc", void sub_080A59C8()) + +void sub_080A5A54(void) { + switch (HandleSave(0)) { + case SAVE_ERROR: + CreateDialogBox(9, 0); + gMenu.transitionTimer = 0x3c; + // fallthrough + case SAVE_OK: + SetMenuType(3); + break; + case SAVE_BUSY: + break; + } +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5A90.inc", void sub_080A5A90()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5AD8.inc", void sub_080A5AD8()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5AF4.inc", void sub_080A5AF4()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5B34.inc", void sub_080A5B34()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5BB8.inc", void sub_080A5BB8()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5BF0.inc", void sub_080A5BF0()) + +void sub_080A5C44(u32 param_1, u32 param_2, u32 param_3) { + s8* ptr; + gMenu.field_0xc = gUnk_08128D38; + sub_080A5CFC(gMenu.field_0x3, &gMenu, param_3); + LoadGfxGroup(0x81); + sub_080A6FB4(gArea.dungeon_idx, 1); + SetMenuType(1); + ptr = &gUnk_08128D43[(u32)gArea.dungeon_idx * 2]; + gScreen.bg1.xOffset += ptr[0]; + gScreen.bg1.yOffset += ptr[0]; +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5C9C.inc", void sub_080A5C9C()) + +void sub_080A5CFC(u32 menuType, void* param_2, u32 param_3) { + DrawDungeonFeatures(menuType, param_2, param_3); + LoadDungeonMap(); + DrawDungeonMap(menuType, &gUnk_02019EE0, 0x400); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5D1C.inc", void sub_080A5D1C()) + +bool32 sub_080A5F24(void) { + bool32 result = TRUE; + if ((gArea.dungeon_idx == 6) && CheckLocalFlagByBank(0x8c0, 0x7b)) { + result = 0; + } + return result; +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A5F48.inc", void sub_080A5F48()) + +void sub_080A6008(void) { + gUnk_08128D58[gMenu.menuType](); +} + +void sub_080A6024(void) { + sub_080A70AC((KeyButtonLayout*)&gUnk_08128D60); + sub_0801E738(0); + sub_080A4398(); + SetMenuType(1); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6044.inc", void sub_080A6044()) + +void sub_080A60E0(void) { + gUnk_08128DB0[gMenu.menuType](); + sub_080A617C(); + sub_080A7040(gMenu.field_0x3); +} + +void sub_080A6108(void) { + gMenu.field_0xc = (u8*)gUnk_08128DB8; + sub_080A70AC((KeyButtonLayout*)&gUnk_08128DBC); + SetMenuType(1); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A612C.inc", void sub_080A612C()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A617C.inc", void sub_080A617C()) + +void sub_080A6270(void) { + gUnk_08128DCC[gMenu.menuType](); + sub_080A6378(); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6290.inc", void sub_080A6290()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A62E0.inc", void sub_080A62E0()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6378.inc", void sub_080A6378()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6438.inc", void sub_080A6438()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6498.inc", void sub_080A6498()) + +ASM_FUNC("asm/non_matching/subtask2/Subtask_MapHint.inc", void Subtask_MapHint()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6534.inc", void sub_080A6534()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A65AC.inc", void sub_080A65AC()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6608.inc", void sub_080A6608()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6650.inc", void sub_080A6650()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A667C.inc", void sub_080A667C()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A66D0.inc", void sub_080A66D0()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A67C4.inc", void sub_080A67C4()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A68D4.inc", void sub_080A68D4()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A698C.inc", void sub_080A698C()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A69E0.inc", void sub_080A69E0()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6A80.inc", void sub_080A6A80()) + +ASM_FUNC("asm/non_matching/subtask2/Subtask_LocalMapHint.inc", void Subtask_LocalMapHint()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6B04.inc", void sub_080A6B04()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6C1C.inc", void sub_080A6C1C()) + +void Subtask_FastTravel(void) { + FlushSprites(); + gUnk_08128F24[gMenu.menuType](); + if (gMenu.field_0x0 != 0) { + sub_080A6E70(); + } + sub_080A6498(); + CopyOAM(); +} + +void sub_080A6CA8(void) { + sub_080A4D34(); + sub_080A4DB8(0xd); + sub_080A6290(); + gMenu.field_0x3 = sub_080A6D74(0); + SetMenuType(1); + SetFade(4, 8); +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6CD8.inc", void sub_080A6CD8()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6D74.inc", u32 sub_080A6D74(u32 a)) + +#ifdef EU +ASM_FUNC("asm/non_matching/subtask2/sub_080A6DD0.inc", u32 sub_080A6DD0(void)) +#else +void sub_080A6DD0(void) { + u32 tmp; + switch (sub_08056338()) { + case 0: + gMenu.field_0x0 = 2; + tmp = 3; + break; + case 1: + tmp = 1; + break; + default: + return; + } + SetMenuType(tmp); +} +#endif + +void sub_080A6DF8(void) { + if (gMenu.field_0x0 == 2) { + SetMenuType(4); + SetFade(5, 8); + } else { + ResetPlayerAnimationAndAction(); + sub_080042D0(&gPlayerEntity, (u32)gPlayerEntity.animIndex, gPlayerEntity.spriteIndex); + Subtask_Exit(); + gUnk_02034490.unk0 = 0; + SoundReq(SFX_MENU_CANCEL); + } +} + +void sub_080A6E44(void) { + if (gFadeControl.active == 0) { + sub_080A71F4((ScreenTransitionData*)&gUnk_08128024[gMenu.field_0x3]); + } +} + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6E70.inc", void sub_080A6E70()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6EE0.inc", void sub_080A6EE0()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6F40.inc", void sub_080A6F40()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6F6C.inc", void sub_080A6F6C()) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A6FB4.inc", void sub_080A6FB4(u32 a, u32 b)) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A7040.inc", void sub_080A7040(u32 a)) + +ASM_FUNC("asm/non_matching/subtask2/sub_080A70AC.inc", void sub_080A70AC(const KeyButtonLayout* layout)) + +void SetMenuType(u32 menuType) { + gMenu.menuType = menuType; + gMenu.overlayType = 0; + gMenu.storyPanelIndex = 0; +} + +void ResetUI(void) { + MemClear(&gUnk_02032EC0, 0x3b4); +} + +void MenuFadeIn(u32 param_1, u32 param_2) { + if (gUnk_02032EC0.nextToLoad == 0) { + MemClear(&gUnk_02032EC0, 0x3b4); + gUnk_02032EC0.lastState = param_1; + gUnk_02032EC0.field_0x3 = param_2; + gUnk_02032EC0.pauseFadeIn = gMain.substate; + } else { + gUnk_02032EC0.state = param_1; + gUnk_02032EC0.field_0x5 = param_2; + gUnk_02032EC0.nextToLoad = 1; + } + gUnk_02032EC0.field_0x6 = 0; + gUnk_02032EC0.isLoading = 0xffff; + gUnk_02032EC0.fadeInTime = 0x20; + gMain.substate = 7; + SetFade(5, 0x20); + gUnk_02018EB0[0] = 0; + gUnk_02018EB0[1] = 0; +} + +void sub_080A71A4(u32 param_1, u32 param_2, u32 param_3) { + if (gUnk_02032EC0.nextToLoad == 0) { + gUnk_02032EC0.fillerC[2] = param_3; + } else { + gUnk_02032EC0.fillerC[3] = param_3; + } + MenuFadeIn(param_1, param_2); +} + +void sub_080A71C4(u32 param_1, u32 param_2, u32 param_3, u32 param_4) { + MenuFadeIn(param_1, param_2); + gUnk_02032EC0.isLoading = param_3; + gUnk_02032EC0.fadeInTime = param_4; +} + +void Subtask_Exit(void) { + gUnk_02032EC0.nextToLoad = 3; + SetFade(5, 0x20); +} + +void sub_080A71F4(ScreenTransitionData* exitTransition) { + if (exitTransition != NULL) { + DoExitTransition(exitTransition); + } + DeleteAllEntities(); + sub_0805E974(); + DeleteAllEntities(); + gMain.state = 1; + gMain.substate = 0; +} + +void GameMain_Subtask(void) { + if (gUnk_02032EC0.nextToLoad < 3) { + if (gUnk_02032EC0.state != 0) { + gUnk_02032EC0.field_0x3 = gUnk_02032EC0.field_0x5; + gUnk_02032EC0.lastState = gUnk_02032EC0.state; + gUnk_02032EC0.state = 0; + } + } + gUnk_0812901C[gUnk_02032EC0.nextToLoad](); +} + +ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeIn.inc", void Subtask_FadeIn()) + +void Subtask_Init(void) { + if (gFadeControl.active == 0) { + DeleteAllEntities(); + MemClear(&gMenu, 0x30); + MemClear(&gRoomControls, 0x38); + MemClear(gOAMControls.unk, 0x100); + MemClear(&gActiveScriptInfo, 0xc); + gActiveScriptInfo.unk_08 = 8; + DispReset(1); + MessageInitialize(); + ResetPalettes(); + ResetPaletteTable(0); + gGFXSlots.unk0 = 1; + gUnk_02032EC0.nextToLoad = 2; + gRoomTransition.field_0x2c[4] = 1; + } +} + +ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeOut.inc", void Subtask_FadeOut()) + +void Subtask_Die(void) { + sub_080A74F4(); + if (gFadeControl.active == 0) { + gMain.substate = gUnk_02032EC0.pauseFadeIn; + gUnk_02032EC0.nextToLoad = gFadeControl.active; + gUnk_02032EC0.lastState = gFadeControl.active; + ResetSystemPriority(); + } +} + +void sub_080A74F4(void) { + SetInitializationPriority(); + gMain.pad = 0; + FlushSprites(); + UpdateEntities(); + UpdateManagers(); + DrawUI(); + DrawOAMCmd(); + UpdateCarriedObject(); + DrawEntities(); + CopyOAM(); +} + +void Subtask_Update(void) { + gSubtasks[gUnk_02032EC0.lastState](); +} From 5efe9828472b784182ae05ff2177e3026ea809ca Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:03:39 +0100 Subject: [PATCH 4/5] Merge and split scroll --- asm/code_0808091C.s | 436 ----- .../code_0805EC04/sub_0805ED30.inc | 115 ++ asm/non_matching/scroll/DoExitTransition.inc | 73 + .../scroll/UpdateDoorTransition.inc | 119 ++ asm/non_matching/scroll/sub_0807FC7C.inc | 170 ++ asm/non_matching/scroll/sub_0807FDF8.inc | 110 ++ asm/non_matching/scroll/sub_0807FF6C.inc | 57 + asm/non_matching/scroll/sub_0807FFE4.inc | 39 + asm/non_matching/scroll/sub_08080040.inc | 102 + asm/non_matching/scroll/sub_08080108.inc | 56 + asm/non_matching/scroll/sub_080801BC.inc | 100 + asm/non_matching/scroll/sub_08080278.inc | 120 ++ asm/non_matching/scroll/sub_08080368.inc | 51 + asm/non_matching/scroll/sub_080803D0.inc | 290 +++ asm/non_matching/scroll/sub_080806BC.inc | 61 + asm/non_matching/scroll/sub_08080734.inc | 51 + asm/non_matching/scroll/sub_08080794.inc | 66 + asm/non_matching/scroll/sub_08080808.inc | 31 + asm/non_matching/scroll/sub_08080B60.inc | 49 + asm/non_matching/scroll/sub_08080BC4.inc | 98 + asm/non_matching/scroll/sub_08080C80.inc | 22 + asm/non_matching/scroll/sub_08080CB4.inc | 136 ++ asm/scroll.s | 1658 ----------------- include/fileselect.h | 1 + include/room.h | 2 +- linker.ld | 2 - src/scroll.c | 150 ++ 27 files changed, 2068 insertions(+), 2097 deletions(-) delete mode 100755 asm/code_0808091C.s create mode 100644 asm/non_matching/code_0805EC04/sub_0805ED30.inc create mode 100644 asm/non_matching/scroll/DoExitTransition.inc create mode 100644 asm/non_matching/scroll/UpdateDoorTransition.inc create mode 100644 asm/non_matching/scroll/sub_0807FC7C.inc create mode 100644 asm/non_matching/scroll/sub_0807FDF8.inc create mode 100644 asm/non_matching/scroll/sub_0807FF6C.inc create mode 100644 asm/non_matching/scroll/sub_0807FFE4.inc create mode 100644 asm/non_matching/scroll/sub_08080040.inc create mode 100644 asm/non_matching/scroll/sub_08080108.inc create mode 100644 asm/non_matching/scroll/sub_080801BC.inc create mode 100644 asm/non_matching/scroll/sub_08080278.inc create mode 100644 asm/non_matching/scroll/sub_08080368.inc create mode 100644 asm/non_matching/scroll/sub_080803D0.inc create mode 100644 asm/non_matching/scroll/sub_080806BC.inc create mode 100644 asm/non_matching/scroll/sub_08080734.inc create mode 100644 asm/non_matching/scroll/sub_08080794.inc create mode 100644 asm/non_matching/scroll/sub_08080808.inc create mode 100644 asm/non_matching/scroll/sub_08080B60.inc create mode 100644 asm/non_matching/scroll/sub_08080BC4.inc create mode 100644 asm/non_matching/scroll/sub_08080C80.inc create mode 100644 asm/non_matching/scroll/sub_08080CB4.inc delete mode 100644 asm/scroll.s diff --git a/asm/code_0808091C.s b/asm/code_0808091C.s deleted file mode 100755 index db7a753c..00000000 --- a/asm/code_0808091C.s +++ /dev/null @@ -1,436 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start UpdateDoorTransition -UpdateDoorTransition: @ 0x08080A40 - push {r4, r5, r6, r7, lr} - ldr r7, _08080A70 @ =gRoomControls - ldr r1, [r7, #0x30] - ldr r0, _08080A74 @ =gPlayerEntity - adds r2, r7, #0 - cmp r1, r0 - beq _08080A50 - b _08080B5C -_08080A50: - ldr r0, _08080A78 @ =gPlayerState - ldrb r0, [r0, #2] - cmp r0, #0 - beq _08080A5A - b _08080B5C -_08080A5A: - ldrb r0, [r1, #0xc] - subs r0, #1 - cmp r0, #0x1c - bls _08080A64 - b _08080B5C -_08080A64: - lsls r0, r0, #2 - ldr r1, _08080A7C @ =_08080A80 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080A70: .4byte gRoomControls -_08080A74: .4byte gPlayerEntity -_08080A78: .4byte gPlayerState -_08080A7C: .4byte _08080A80 -_08080A80: @ jump table - .4byte _08080AFA @ case 0 - .4byte _08080B5C @ case 1 - .4byte _08080B5C @ case 2 - .4byte _08080B5C @ case 3 - .4byte _08080B5C @ case 4 - .4byte _08080B5C @ case 5 - .4byte _08080B5C @ case 6 - .4byte _08080B5C @ case 7 - .4byte _08080AFA @ case 8 - .4byte _08080B5C @ case 9 - .4byte _08080B5C @ case 10 - .4byte _08080B5C @ case 11 - .4byte _08080B5C @ case 12 - .4byte _08080B5C @ case 13 - .4byte _08080AF4 @ case 14 - .4byte _08080B5C @ case 15 - .4byte _08080B5C @ case 16 - .4byte _08080B5C @ case 17 - .4byte _08080B5C @ case 18 - .4byte _08080B5C @ case 19 - .4byte _08080B5C @ case 20 - .4byte _08080B5C @ case 21 - .4byte _08080B5C @ case 22 - .4byte _08080AFA @ case 23 - .4byte _08080B5C @ case 24 - .4byte _08080B5C @ case 25 - .4byte _08080B5C @ case 26 - .4byte _08080B5C @ case 27 - .4byte _08080AFA @ case 28 -_08080AF4: - ldrb r0, [r2, #4] - cmp r0, #0x48 - beq _08080B5C -_08080AFA: - ldr r3, [r7, #0x30] - movs r0, #0x32 - ldrsh r1, [r3, r0] - ldrh r0, [r7, #8] - subs r6, r1, r0 - movs r0, #0x2e - ldrsh r1, [r3, r0] - ldrh r0, [r7, #6] - subs r5, r1, r0 - asrs r0, r5, #4 - movs r2, #0x3f - ands r0, r2 - asrs r1, r6, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - adds r3, #0x38 - ldrb r1, [r3] - bl sub_080002C8 - adds r4, r0, #0 - ldr r0, [r7, #0x30] - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_080002A8 - ldr r1, _08080B48 @ =gRoomTransition - strh r0, [r1, #0xa] - cmp r4, #0x3f - beq _08080B50 - cmp r4, #0x3f - bhi _08080B4C - cmp r4, #0x29 - bhi _08080B5C - cmp r4, #0x28 - blo _08080B5C - b _08080B50 - .align 2, 0 -_08080B48: .4byte gRoomTransition -_08080B4C: - cmp r4, #0xf1 - bne _08080B5C -_08080B50: - adds r0, r5, #0 - adds r1, r6, #0 - movs r2, #0xff - movs r3, #0xa - bl sub_080806BC -_08080B5C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08080B60 -sub_08080B60: @ 0x08080B60 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r1, _08080B90 @ =0x00005004 - adds r4, r0, r1 - ldr r2, _08080B94 @ =gUnk_080B37A0 - mov r8, r2 - movs r3, #0 - ldr r1, _08080B98 @ =0x00003FFF - mov ip, r1 - ldr r7, _08080B9C @ =gUnk_080B7910 - ldr r2, _08080BA0 @ =0x0000B004 - adds r1, r0, r2 - adds r2, r0, #4 - ldr r6, _08080BA4 @ =0xFFFFC000 - ldr r5, _08080BA8 @ =0x00000FFF -_08080B80: - ldrh r0, [r2] - cmp r0, ip - bhi _08080BAC - lsls r0, r0, #1 - adds r0, r0, r4 - ldrh r0, [r0] - add r0, r8 - b _08080BB0 - .align 2, 0 -_08080B90: .4byte 0x00005004 -_08080B94: .4byte gUnk_080B37A0 -_08080B98: .4byte 0x00003FFF -_08080B9C: .4byte gUnk_080B7910 -_08080BA0: .4byte 0x0000B004 -_08080BA4: .4byte 0xFFFFC000 -_08080BA8: .4byte 0x00000FFF -_08080BAC: - adds r0, r0, r6 - adds r0, r0, r7 -_08080BB0: - ldrb r0, [r0] - strb r0, [r1] - adds r1, #1 - adds r2, #2 - adds r3, #1 - cmp r3, r5 - bls _08080B80 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08080BC4 -sub_08080BC4: @ 0x08080BC4 - push {r4, r5, r6, lr} - ldr r3, _08080C40 @ =gRoomControls - movs r0, #0xa - ldrsh r1, [r3, r0] - ldrh r0, [r3, #6] - subs r5, r1, r0 - movs r2, #0xf - ands r5, r2 - movs r1, #0xc - ldrsh r0, [r3, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - ands r0, r2 - adds r6, r0, #0 - adds r6, #8 - ldrh r2, [r3, #0x16] - adds r4, r2, #0 - cmp r4, #0 - beq _08080C50 - subs r2, #1 - strh r2, [r3, #0x16] - ldrb r0, [r3, #0x14] - lsls r0, r0, #4 - movs r1, #0xe - ands r2, r1 - adds r0, r0, r2 - ldr r1, _08080C44 @ =gUnk_080169A4 - adds r2, r0, r1 - ldr r4, _08080C48 @ =gMapBottom - ldr r1, [r4] - cmp r1, #0 - beq _08080C16 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r0, r0, r5 - strh r0, [r1, #2] - ldr r1, [r4] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r0, r0, r6 - strh r0, [r1, #4] -_08080C16: - ldr r4, _08080C4C @ =gMapTop - ldr r1, [r4] - cmp r1, #0 - beq _08080C30 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r0, r0, r5 - strh r0, [r1, #2] - ldr r1, [r4] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r0, r0, r6 - strh r0, [r1, #4] -_08080C30: - ldrb r1, [r2] - adds r0, r3, #0 - adds r0, #0x24 - strb r1, [r0] - ldrb r1, [r2, #1] - adds r0, #1 - strb r1, [r0] - b _08080C76 - .align 2, 0 -_08080C40: .4byte gRoomControls -_08080C44: .4byte gUnk_080169A4 -_08080C48: .4byte gMapBottom -_08080C4C: .4byte gMapTop -_08080C50: - ldr r0, _08080C78 @ =gMapBottom - ldr r1, [r0] - cmp r1, #0 - beq _08080C5E - strh r5, [r1, #2] - ldr r0, [r0] - strh r6, [r0, #4] -_08080C5E: - ldr r0, _08080C7C @ =gMapTop - ldr r1, [r0] - cmp r1, #0 - beq _08080C6C - strh r5, [r1, #2] - ldr r0, [r0] - strh r6, [r0, #4] -_08080C6C: - adds r0, r3, #0 - adds r0, #0x24 - strb r4, [r0] - adds r0, #1 - strb r4, [r0] -_08080C76: - pop {r4, r5, r6, pc} - .align 2, 0 -_08080C78: .4byte gMapBottom -_08080C7C: .4byte gMapTop - - thumb_func_start sub_08080C80 -sub_08080C80: @ 0x08080C80 - push {r4, lr} - bl sub_080197D4 - ldr r0, _08080CA8 @ =gMapDataBottom - ldr r4, _08080CAC @ =gRoomControls - ldrh r1, [r4, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r4, #0x20] - lsrs r2, r2, #4 - bl sub_0807C8B0 - ldr r0, _08080CB0 @ =gMapDataTop - ldrh r1, [r4, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r4, #0x20] - lsrs r2, r2, #4 - bl sub_0807C8B0 - pop {r4, pc} - .align 2, 0 -_08080CA8: .4byte gMapDataBottom -_08080CAC: .4byte gRoomControls -_08080CB0: .4byte gMapDataTop - - thumb_func_start sub_08080CB4 -sub_08080CB4: @ 0x08080CB4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x58 - ldrb r0, [r4, #0xa] - ldrb r1, [r1] - cmp r0, r1 - beq _08080CF0 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - ldrb r0, [r4, #0xa] - cmp r0, #0x5c - beq _08080CD4 - b _08080E00 -_08080CD4: - ldrb r0, [r4, #0xb] - lsls r0, r0, #3 - ldr r1, _08080CEC @ =gUnk_080C9CBC - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #0xf - ands r1, r0 - lsls r0, r0, #4 - orrs r0, r1 - strb r0, [r4, #0x1a] - b _08080E00 - .align 2, 0 -_08080CEC: .4byte gUnk_080C9CBC -_08080CF0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08080D00 - b _08080E00 -_08080D00: - ldrb r0, [r4, #0xa] - subs r0, #0x40 - cmp r0, #0x22 - bhi _08080E00 - lsls r0, r0, #2 - ldr r1, _08080D14 @ =_08080D18 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080D14: .4byte _08080D18 -_08080D18: @ jump table - .4byte _08080DEE @ case 0 - .4byte _08080DEE @ case 1 - .4byte _08080DEE @ case 2 - .4byte _08080DEE @ case 3 - .4byte _08080E00 @ case 4 - .4byte _08080E00 @ case 5 - .4byte _08080E00 @ case 6 - .4byte _08080E00 @ case 7 - .4byte _08080E00 @ case 8 - .4byte _08080E00 @ case 9 - .4byte _08080E00 @ case 10 - .4byte _08080E00 @ case 11 - .4byte _08080E00 @ case 12 - .4byte _08080E00 @ case 13 - .4byte _08080E00 @ case 14 - .4byte _08080E00 @ case 15 - .4byte _08080E00 @ case 16 - .4byte _08080E00 @ case 17 - .4byte _08080E00 @ case 18 - .4byte _08080E00 @ case 19 - .4byte _08080E00 @ case 20 - .4byte _08080E00 @ case 21 - .4byte _08080E00 @ case 22 - .4byte _08080E00 @ case 23 - .4byte _08080E00 @ case 24 - .4byte _08080E00 @ case 25 - .4byte _08080E00 @ case 26 - .4byte _08080E00 @ case 27 - .4byte _08080DEE @ case 28 - .4byte _08080E00 @ case 29 - .4byte _08080E00 @ case 30 - .4byte _08080E00 @ case 31 - .4byte _08080DA4 @ case 32 - .4byte _08080E00 @ case 33 - .4byte _08080DEE @ case 34 -_08080DA4: - adds r5, r4, #0 - adds r5, #0x6a - ldrb r0, [r5] - cmp r0, #0 - beq _08080DB4 - subs r0, #1 - strb r0, [r5] - b _08080E00 -_08080DB4: - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0xa - strb r0, [r5] - adds r0, r4, #0 - movs r1, #7 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08080E00 - adds r0, r4, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r2, r1, #0 - adds r2, #0x62 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x63 - ldrb r0, [r0] - adds r2, #1 - strb r0, [r2] - adds r0, r4, #0 - bl SortEntityAbove - b _08080E00 -_08080DEE: - ldr r0, _08080E04 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08080E00 - adds r0, r4, #0 - bl CreateSparkle -_08080E00: - pop {r4, r5, pc} - .align 2, 0 -_08080E04: .4byte gRoomTransition diff --git a/asm/non_matching/code_0805EC04/sub_0805ED30.inc b/asm/non_matching/code_0805EC04/sub_0805ED30.inc new file mode 100644 index 00000000..bdf6bc56 --- /dev/null +++ b/asm/non_matching/code_0805EC04/sub_0805ED30.inc @@ -0,0 +1,115 @@ + .syntax unified + push {r4, lr} + ldr r2, _0805ED50 @ =gPlayerState + adds r0, r2, #0 + adds r0, #0x9c + ldr r0, [r0] + adds r4, r2, #0 + cmp r0, #0 + beq _0805ED88 + adds r1, r4, #0 + adds r1, #0x90 + ldr r2, [r1, #0xc] + ldrh r0, [r1, #8] + cmp r0, #0 + bne _0805ED7E + movs r4, #0 + b _0805ED62 + .align 2, 0 +_0805ED50: .4byte gPlayerState +_0805ED54: + cmp r0, #2 + beq _0805ED5E + strh r3, [r1, #8] + ldrh r0, [r2, #2] + strh r0, [r1, #0xa] +_0805ED5E: + adds r2, #4 + b _0805ED7C +_0805ED62: + ldrh r3, [r2] + lsrs r0, r3, #0xe + cmp r0, #1 + bne _0805ED72 + movs r3, #2 + ldrsh r0, [r2, r3] + adds r2, r2, r0 + b _0805ED62 +_0805ED72: + cmp r0, #3 + bne _0805ED54 + strh r4, [r1, #8] + strh r4, [r1, #0xa] + movs r2, #0 +_0805ED7C: + str r2, [r1, #0xc] +_0805ED7E: + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] + ldrh r1, [r1, #0xa] + b _0805EDCA +_0805ED88: + adds r0, r4, #0 + adds r0, #0x8b + ldrb r0, [r0] + cmp r0, #3 + bgt _0805ED98 + cmp r0, #0 + blt _0805ED98 + movs r1, #0 +_0805ED98: + adds r2, r4, #0 + adds r2, #0x8b + ldrb r0, [r2] + cmp r0, #1 + beq _0805EDB4 + cmp r0, #1 + bgt _0805EDAC + cmp r0, #0 + beq _0805EDC6 + b _0805EDCA +_0805EDAC: + cmp r0, #3 + bgt _0805EDCA + movs r1, #0 + b _0805EDCA +_0805EDB4: + movs r0, #0 + strb r0, [r2] + ldr r0, _0805EDF8 @ =gInput + ldrh r0, [r0] + bl sub_0805EE04 + adds r1, r4, #0 + adds r1, #0x90 + strh r0, [r1] +_0805EDC6: + ldr r0, _0805EDF8 @ =gInput + ldrh r1, [r0] +_0805EDCA: + adds r0, r1, #0 + bl sub_0805EE04 + ldr r3, _0805EDFC @ =gPlayerState + adds r1, r3, #0 + adds r1, #0x90 + ldrh r2, [r1] + strh r0, [r1] + adds r1, r0, #0 + bics r1, r2 + adds r2, r3, #0 + adds r2, #0x92 + strh r1, [r2] + ldr r2, _0805EE00 @ =gUnk_08109202 + movs r1, #0xf0 + lsls r1, r1, #4 + ands r1, r0 + lsrs r1, r1, #8 + adds r1, r1, r2 + ldrb r0, [r1] + strb r0, [r3, #0xd] + pop {r4, pc} + .align 2, 0 +_0805EDF8: .4byte gInput +_0805EDFC: .4byte gPlayerState +_0805EE00: .4byte gUnk_08109202 + .syntax divided diff --git a/asm/non_matching/scroll/DoExitTransition.inc b/asm/non_matching/scroll/DoExitTransition.inc new file mode 100644 index 00000000..34c648cf --- /dev/null +++ b/asm/non_matching/scroll/DoExitTransition.inc @@ -0,0 +1,73 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, _0808085C @ =gRoomTransition + movs r1, #1 + strb r1, [r0, #8] + adds r2, r0, #0 + adds r2, #0xc + ldrh r1, [r4, #6] + ldr r0, _08080860 @ =0x000003FF + cmp r1, r0 + bhi _08080864 + strh r1, [r2, #4] + b _08080872 + .align 2, 0 +_0808085C: .4byte gRoomTransition +_08080860: .4byte 0x000003FF +_08080864: + ldr r0, _08080880 @ =gRoomControls + ldr r0, [r0, #0x30] + ldrh r1, [r0, #0x2e] + ldr r3, _08080884 @ =0xFFFF8000 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2, #4] +_08080872: + ldrh r1, [r4, #8] + ldr r0, _08080888 @ =0x000003FF + cmp r1, r0 + bhi _0808088C + strh r1, [r2, #6] + b _0808089A + .align 2, 0 +_08080880: .4byte gRoomControls +_08080884: .4byte 0xFFFF8000 +_08080888: .4byte 0x000003FF +_0808088C: + ldr r0, _080808CC @ =gRoomControls + ldr r0, [r0, #0x30] + ldrh r1, [r0, #0x32] + ldr r3, _080808D0 @ =0xFFFF8000 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2, #6] +_0808089A: + ldrb r0, [r4, #0xb] + strb r0, [r2] + ldrb r0, [r4, #0xc] + strb r0, [r2, #1] + ldrb r0, [r4, #0xd] + strb r0, [r2, #8] + ldrb r0, [r4, #0xe] + strb r0, [r2, #3] + ldrb r0, [r4, #0xf] + strb r0, [r2, #2] + ldrh r0, [r4, #0x10] + cmp r0, #0 + beq _080808B8 + bl SoundReq +_080808B8: + ldr r0, _080808D4 @ =gUnk_0811E7C4 + ldrh r1, [r4] + lsls r1, r1, #2 + adds r1, r1, r0 + ldrb r0, [r4, #0xa] + ldr r1, [r1] + bl _call_via_r1 + pop {r4, pc} + .align 2, 0 +_080808CC: .4byte gRoomControls +_080808D0: .4byte 0xFFFF8000 +_080808D4: .4byte gUnk_0811E7C4 + .syntax divided diff --git a/asm/non_matching/scroll/UpdateDoorTransition.inc b/asm/non_matching/scroll/UpdateDoorTransition.inc new file mode 100644 index 00000000..680b0c78 --- /dev/null +++ b/asm/non_matching/scroll/UpdateDoorTransition.inc @@ -0,0 +1,119 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + ldr r7, _08080A70 @ =gRoomControls + ldr r1, [r7, #0x30] + ldr r0, _08080A74 @ =gPlayerEntity + adds r2, r7, #0 + cmp r1, r0 + beq _08080A50 + b _08080B5C +_08080A50: + ldr r0, _08080A78 @ =gPlayerState + ldrb r0, [r0, #2] + cmp r0, #0 + beq _08080A5A + b _08080B5C +_08080A5A: + ldrb r0, [r1, #0xc] + subs r0, #1 + cmp r0, #0x1c + bls _08080A64 + b _08080B5C +_08080A64: + lsls r0, r0, #2 + ldr r1, _08080A7C @ =_08080A80 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08080A70: .4byte gRoomControls +_08080A74: .4byte gPlayerEntity +_08080A78: .4byte gPlayerState +_08080A7C: .4byte _08080A80 +_08080A80: @ jump table + .4byte _08080AFA @ case 0 + .4byte _08080B5C @ case 1 + .4byte _08080B5C @ case 2 + .4byte _08080B5C @ case 3 + .4byte _08080B5C @ case 4 + .4byte _08080B5C @ case 5 + .4byte _08080B5C @ case 6 + .4byte _08080B5C @ case 7 + .4byte _08080AFA @ case 8 + .4byte _08080B5C @ case 9 + .4byte _08080B5C @ case 10 + .4byte _08080B5C @ case 11 + .4byte _08080B5C @ case 12 + .4byte _08080B5C @ case 13 + .4byte _08080AF4 @ case 14 + .4byte _08080B5C @ case 15 + .4byte _08080B5C @ case 16 + .4byte _08080B5C @ case 17 + .4byte _08080B5C @ case 18 + .4byte _08080B5C @ case 19 + .4byte _08080B5C @ case 20 + .4byte _08080B5C @ case 21 + .4byte _08080B5C @ case 22 + .4byte _08080AFA @ case 23 + .4byte _08080B5C @ case 24 + .4byte _08080B5C @ case 25 + .4byte _08080B5C @ case 26 + .4byte _08080B5C @ case 27 + .4byte _08080AFA @ case 28 +_08080AF4: + ldrb r0, [r2, #4] + cmp r0, #0x48 + beq _08080B5C +_08080AFA: + ldr r3, [r7, #0x30] + movs r0, #0x32 + ldrsh r1, [r3, r0] + ldrh r0, [r7, #8] + subs r6, r1, r0 + movs r0, #0x2e + ldrsh r1, [r3, r0] + ldrh r0, [r7, #6] + subs r5, r1, r0 + asrs r0, r5, #4 + movs r2, #0x3f + ands r0, r2 + asrs r1, r6, #4 + ands r1, r2 + lsls r1, r1, #6 + orrs r0, r1 + adds r3, #0x38 + ldrb r1, [r3] + bl sub_080002C8 + adds r4, r0, #0 + ldr r0, [r7, #0x30] + adds r0, #0x38 + ldrb r2, [r0] + adds r0, r5, #0 + adds r1, r6, #0 + bl sub_080002A8 + ldr r1, _08080B48 @ =gRoomTransition + strh r0, [r1, #0xa] + cmp r4, #0x3f + beq _08080B50 + cmp r4, #0x3f + bhi _08080B4C + cmp r4, #0x29 + bhi _08080B5C + cmp r4, #0x28 + blo _08080B5C + b _08080B50 + .align 2, 0 +_08080B48: .4byte gRoomTransition +_08080B4C: + cmp r4, #0xf1 + bne _08080B5C +_08080B50: + adds r0, r5, #0 + adds r1, r6, #0 + movs r2, #0xff + movs r3, #0xa + bl sub_080806BC +_08080B5C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FC7C.inc b/asm/non_matching/scroll/sub_0807FC7C.inc new file mode 100644 index 00000000..57cf9ed2 --- /dev/null +++ b/asm/non_matching/scroll/sub_0807FC7C.inc @@ -0,0 +1,170 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r2, r0, #0 + ldr r0, [r2, #0x30] + cmp r0, #0 + bne _0807FC88 + b _0807FDA6 +_0807FC88: + movs r1, #0xa + ldrsh r4, [r2, r1] + movs r1, #0x2e + ldrsh r0, [r0, r1] + subs r0, #0x78 + subs r3, r4, r0 + cmp r3, #0 + beq _0807FD16 + ldrh r6, [r2, #0xa] + movs r7, #7 + ands r7, r6 + mov ip, r6 + cmp r3, #0 + ble _0807FCDC + ldrh r0, [r2, #6] + adds r5, r0, #0 + cmp r5, r4 + bge _0807FD16 + ldrb r0, [r2, #0xe] + cmp r0, r3 + bgt _0807FCBC + adds r3, r0, #0 + ldrb r1, [r2, #0xf] + movs r0, #4 + orrs r0, r1 + strb r0, [r2, #0xf] +_0807FCBC: + mov r1, ip + subs r0, r1, r3 + strh r0, [r2, #0xa] + subs r0, r7, r3 + cmp r0, #0 + bgt _0807FCCE + ldr r1, _0807FCD8 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807FCCE: + movs r1, #0xa + ldrsh r0, [r2, r1] + cmp r5, r0 + blt _0807FD16 + b _0807FD14 + .align 2, 0 +_0807FCD8: .4byte gUpdateVisibleTiles +_0807FCDC: + ldrh r0, [r2, #6] + ldrh r1, [r2, #0x1e] + adds r0, r0, r1 + adds r5, r0, #0 + subs r5, #0xf0 + cmp r4, r5 + bge _0807FD16 + ldrb r0, [r2, #0xe] + rsbs r0, r0, #0 + cmp r0, r3 + blt _0807FCFC + adds r3, r0, #0 + ldrb r1, [r2, #0xf] + movs r0, #4 + orrs r0, r1 + strb r0, [r2, #0xf] +_0807FCFC: + subs r0, r6, r3 + strh r0, [r2, #0xa] + subs r0, r7, r3 + cmp r0, #7 + ble _0807FD0C + ldr r1, _0807FD68 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807FD0C: + movs r1, #0xa + ldrsh r0, [r2, r1] + cmp r0, r5 + blt _0807FD16 +_0807FD14: + strh r5, [r2, #0xa] +_0807FD16: + movs r0, #0xc + ldrsh r4, [r2, r0] + ldr r0, [r2, #0x30] + movs r1, #0x32 + ldrsh r0, [r0, r1] + subs r0, #0x50 + subs r3, r4, r0 + cmp r3, #0 + beq _0807FDA6 + ldrh r6, [r2, #0xc] + movs r7, #7 + ands r7, r6 + mov ip, r6 + cmp r3, #0 + ble _0807FD6C + ldrh r0, [r2, #8] + adds r5, r0, #0 + cmp r5, r4 + bge _0807FDA6 + ldrb r0, [r2, #0xe] + cmp r0, r3 + bgt _0807FD4C + adds r3, r0, #0 + ldrb r1, [r2, #0xf] + movs r0, #4 + orrs r0, r1 + strb r0, [r2, #0xf] +_0807FD4C: + mov r1, ip + subs r0, r1, r3 + strh r0, [r2, #0xc] + subs r0, r7, r3 + cmp r0, #0 + bgt _0807FD5E + ldr r1, _0807FD68 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807FD5E: + movs r1, #0xc + ldrsh r0, [r2, r1] + cmp r5, r0 + blt _0807FDA6 + b _0807FDA4 + .align 2, 0 +_0807FD68: .4byte gUpdateVisibleTiles +_0807FD6C: + ldrh r0, [r2, #8] + ldrh r1, [r2, #0x20] + adds r0, r0, r1 + adds r5, r0, #0 + subs r5, #0xa0 + cmp r4, r5 + bge _0807FDA6 + ldrb r0, [r2, #0xe] + rsbs r0, r0, #0 + cmp r0, r3 + blt _0807FD8C + adds r3, r0, #0 + ldrb r1, [r2, #0xf] + movs r0, #4 + orrs r0, r1 + strb r0, [r2, #0xf] +_0807FD8C: + subs r0, r6, r3 + strh r0, [r2, #0xc] + subs r0, r7, r3 + cmp r0, #7 + ble _0807FD9C + ldr r1, _0807FDAC @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_0807FD9C: + movs r1, #0xc + ldrsh r0, [r2, r1] + cmp r0, r5 + blt _0807FDA6 +_0807FDA4: + strh r5, [r2, #0xc] +_0807FDA6: + bl sub_08080BC4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0807FDAC: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FDF8.inc b/asm/non_matching/scroll/sub_0807FDF8.inc new file mode 100644 index 00000000..2bd0510a --- /dev/null +++ b/asm/non_matching/scroll/sub_0807FDF8.inc @@ -0,0 +1,110 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r1, _0807FE18 @ =gUpdateVisibleTiles + movs r0, #2 + strb r0, [r1] + ldrh r0, [r4, #0x18] + adds r0, #1 + strh r0, [r4, #0x18] + ldrb r0, [r4, #0x10] + cmp r0, #1 + beq _0807FE44 + cmp r0, #1 + bgt _0807FE1C + cmp r0, #0 + beq _0807FE26 + b _0807FEB6 + .align 2, 0 +_0807FE18: .4byte gUpdateVisibleTiles +_0807FE1C: + cmp r0, #2 + beq _0807FE68 + cmp r0, #3 + beq _0807FE94 + b _0807FEB6 +_0807FE26: + ldrh r0, [r4, #0xc] + subs r0, #4 + strh r0, [r4, #0xc] + ldr r1, [r4, #0x30] + ldr r0, _0807FE3C @ =gPlayerEntity + cmp r1, r0 + bne _0807FE80 + ldr r0, [r1, #0x30] + ldr r2, _0807FE40 @ =0xFFFFA000 + b _0807FE7C + .align 2, 0 +_0807FE3C: .4byte gPlayerEntity +_0807FE40: .4byte 0xFFFFA000 +_0807FE44: + ldrh r0, [r4, #0xa] + adds r0, #4 + strh r0, [r4, #0xa] + ldr r1, [r4, #0x30] + ldr r0, _0807FE64 @ =gPlayerEntity + cmp r1, r0 + bne _0807FE5C + ldr r0, [r1, #0x2c] + movs r2, #0x80 + lsls r2, r2, #7 + adds r0, r0, r2 + str r0, [r1, #0x2c] +_0807FE5C: + ldrh r0, [r4, #0x18] + cmp r0, #0x3c + bne _0807FEB6 + b _0807FE86 + .align 2, 0 +_0807FE64: .4byte gPlayerEntity +_0807FE68: + ldrh r0, [r4, #0xc] + adds r0, #4 + strh r0, [r4, #0xc] + ldr r1, [r4, #0x30] + ldr r0, _0807FE90 @ =gPlayerEntity + cmp r1, r0 + bne _0807FE80 + ldr r0, [r1, #0x30] + movs r2, #0xc0 + lsls r2, r2, #7 +_0807FE7C: + adds r0, r0, r2 + str r0, [r1, #0x30] +_0807FE80: + ldrh r0, [r4, #0x18] + cmp r0, #0x28 + bne _0807FEB6 +_0807FE86: + adds r0, r4, #0 + bl sub_0807FEC8 + b _0807FEB6 + .align 2, 0 +_0807FE90: .4byte gPlayerEntity +_0807FE94: + ldrh r0, [r4, #0xa] + subs r0, #4 + strh r0, [r4, #0xa] + ldr r1, [r4, #0x30] + ldr r0, _0807FEC0 @ =gPlayerEntity + cmp r1, r0 + bne _0807FEAA + ldr r0, [r1, #0x2c] + ldr r2, _0807FEC4 @ =0xFFFFC000 + adds r0, r0, r2 + str r0, [r1, #0x2c] +_0807FEAA: + ldrh r0, [r4, #0x18] + cmp r0, #0x3c + bne _0807FEB6 + adds r0, r4, #0 + bl sub_0807FEC8 +_0807FEB6: + movs r0, #0 + strh r0, [r4, #0x16] + bl sub_08080BC4 + pop {r4, pc} + .align 2, 0 +_0807FEC0: .4byte gPlayerEntity +_0807FEC4: .4byte 0xFFFFC000 + .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FF6C.inc b/asm/non_matching/scroll/sub_0807FF6C.inc new file mode 100644 index 00000000..665d72e0 --- /dev/null +++ b/asm/non_matching/scroll/sub_0807FF6C.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, lr} + movs r1, #1 + strb r1, [r0, #3] + ldr r3, _0807FFC8 @ =gScreen + ldrh r1, [r3] + movs r2, #0x80 + lsls r2, r2, #7 + adds r0, r2, #0 + orrs r0, r1 + strh r0, [r3] + adds r2, r3, #0 + adds r2, #0x60 + ldrb r0, [r2] + movs r4, #0xb8 + lsls r4, r4, #5 + adds r1, r4, #0 + orrs r0, r1 + strh r0, [r2] + adds r2, #2 + ldrh r1, [r2] + movs r0, #0xff + lsls r0, r0, #8 + ands r0, r1 + movs r1, #7 + movs r4, #0 + orrs r0, r1 + strh r0, [r2] + adds r0, r3, #0 + adds r0, #0x5a + movs r1, #0xf0 + strh r1, [r0] + adds r0, #4 + strh r1, [r0] + bl ResetPlayer + bl ResetPlayerAnimationAndAction + ldr r0, _0807FFCC @ =gUnk_03004030 + ldrb r0, [r0, #8] + cmp r0, #0 + beq _0807FFD4 + ldr r1, _0807FFD0 @ =gPlayerEntity + movs r0, #4 + strb r0, [r1, #0x14] + b _0807FFD8 + .align 2, 0 +_0807FFC8: .4byte gScreen +_0807FFCC: .4byte gUnk_03004030 +_0807FFD0: .4byte gPlayerEntity +_0807FFD4: + ldr r0, _0807FFE0 @ =gPlayerEntity + strb r4, [r0, #0x14] +_0807FFD8: + bl sub_080809D4 + pop {r4, pc} + .align 2, 0 +_0807FFE0: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/scroll/sub_0807FFE4.inc b/asm/non_matching/scroll/sub_0807FFE4.inc new file mode 100644 index 00000000..b7bf033b --- /dev/null +++ b/asm/non_matching/scroll/sub_0807FFE4.inc @@ -0,0 +1,39 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + movs r0, #2 + strb r0, [r5, #3] + bl sub_080803D0 + adds r0, #6 + strh r0, [r5, #0x18] + ldr r4, _0808002C @ =gUnk_0200B640 + bl sub_08080278 + strh r0, [r4] + ldr r1, _08080030 @ =gUnk_08109194 + ldr r0, _08080034 @ =gUnk_03004030 + ldr r0, [r0] + ldrb r0, [r0, #3] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldr r0, [r0] + bl sub_080197D4 + ldr r4, _08080038 @ =gMapDataTop + ldrh r1, [r5, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r5, #0x20] + lsrs r2, r2, #4 + adds r0, r4, #0 + bl sub_0807C8B0 + ldr r0, _0808003C @ =gMapDataTopSpecial + subs r4, #4 + adds r1, r4, #0 + bl sub_0801AB08 + pop {r4, r5, pc} + .align 2, 0 +_0808002C: .4byte gUnk_0200B640 +_08080030: .4byte gUnk_08109194 +_08080034: .4byte gUnk_03004030 +_08080038: .4byte gMapDataTop +_0808003C: .4byte gMapDataTopSpecial + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080040.inc b/asm/non_matching/scroll/sub_08080040.inc new file mode 100644 index 00000000..36ecbde3 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080040.inc @@ -0,0 +1,102 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldrh r4, [r5, #0x18] + subs r4, #6 + strh r4, [r5, #0x18] + ldrh r0, [r5, #0x18] + lsls r0, r0, #1 + movs r1, #3 + bl __divsi3 + strh r0, [r5, #0x1a] + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + cmp r4, #0x2a + bls _080800C6 + ldr r3, [r5, #0x30] + movs r1, #0x2e + ldrsh r0, [r3, r1] + movs r2, #0xa + ldrsh r1, [r5, r2] + subs r2, r0, r1 + ldrh r1, [r5, #0x18] + subs r0, r2, r1 + adds r7, r0, #0 + adds r7, #8 + cmp r7, #0 + bge _08080078 + movs r7, #0 +_08080078: + adds r0, r2, r1 + adds r6, r0, #0 + subs r6, #8 + cmp r6, #0xf0 + ble _08080084 + movs r6, #0xf0 +_08080084: + movs r1, #0x32 + ldrsh r0, [r3, r1] + movs r2, #0xc + ldrsh r1, [r5, r2] + subs r2, r0, r1 + ldrh r1, [r5, #0x1a] + subs r0, r2, r1 + adds r4, r0, #0 + adds r4, #8 + cmp r4, #0 + bge _0808009C + movs r4, #0 +_0808009C: + adds r0, r2, r1 + adds r3, r0, #0 + subs r3, #8 + cmp r3, #0xa0 + ble _080800A8 + movs r3, #0xa0 +_080800A8: + ldr r2, _080800F0 @ =gScreen + movs r1, #0xff + ands r7, r1 + lsls r0, r7, #8 + ands r6, r1 + orrs r0, r6 + adds r6, r2, #0 + adds r6, #0x5a + strh r0, [r6] + ands r4, r1 + lsls r0, r4, #8 + ands r3, r1 + orrs r0, r3 + adds r2, #0x5e + strh r0, [r2] +_080800C6: + ldrh r0, [r5, #0x18] + cmp r0, #0 + bne _080800FC + movs r0, #3 + strb r0, [r5, #3] + bl DeleteSleepingEntities + bl sub_0807C810 + ldr r1, _080800F4 @ =gUnk_08109194 + ldr r0, _080800F8 @ =gUnk_03004030 + ldr r0, [r0] + ldrb r0, [r0, #3] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldr r0, [r0, #4] + bl sub_08080C80 + b _08080102 + .align 2, 0 +_080800F0: .4byte gScreen +_080800F4: .4byte gUnk_08109194 +_080800F8: .4byte gUnk_03004030 +_080800FC: + ldr r1, _08080104 @ =gUpdateVisibleTiles + movs r0, #4 + strb r0, [r1] +_08080102: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08080104: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080108.inc b/asm/non_matching/scroll/sub_08080108.inc new file mode 100644 index 00000000..fd0375ea --- /dev/null +++ b/asm/non_matching/scroll/sub_08080108.inc @@ -0,0 +1,56 @@ + .syntax unified + push {r4, r5, r6, lr} + movs r1, #4 + strb r1, [r0, #3] + ldr r5, _08080178 @ =gMapDataBottom + movs r0, #0xc0 + lsls r0, r0, #6 + adds r1, r5, r0 + movs r6, #0x80 + lsls r6, r6, #6 + adds r0, r5, #0 + adds r2, r6, #0 + bl MemCopy + ldr r4, _0808017C @ =gMapDataTop + movs r0, #0xc0 + lsls r0, r0, #6 + adds r1, r4, r0 + adds r0, r4, #0 + adds r2, r6, #0 + bl MemCopy + bl sub_08080368 + ldr r1, _08080180 @ =gUnk_02034480 + ldr r0, _08080184 @ =gUnk_0200B640 + ldrh r0, [r0] + strh r0, [r1] + ldr r0, _08080188 @ =gUnk_02022830 + ldr r1, _0808018C @ =gUnk_020246B0 + movs r2, #0xc0 + lsls r2, r2, #5 + bl MemCopy + subs r5, #4 + adds r0, r5, #0 + bl sub_08080B60 + subs r4, #4 + adds r0, r4, #0 + bl sub_08080B60 + bl sub_0807BBE4 + bl sub_0807BC84 + bl sub_0805E248 + ldr r0, _08080190 @ =gUnk_02019EE0 + adds r1, r5, #0 + bl sub_0801AB08 + ldr r0, _08080194 @ =gMapDataTopSpecial + adds r1, r4, #0 + bl sub_0801AB08 + pop {r4, r5, r6, pc} + .align 2, 0 +_08080178: .4byte gMapDataBottom +_0808017C: .4byte gMapDataTop +_08080180: .4byte gUnk_02034480 +_08080184: .4byte gUnk_0200B640 +_08080188: .4byte gUnk_02022830 +_0808018C: .4byte gUnk_020246B0 +_08080190: .4byte gUnk_02019EE0 +_08080194: .4byte gMapDataTopSpecial + .syntax divided diff --git a/asm/non_matching/scroll/sub_080801BC.inc b/asm/non_matching/scroll/sub_080801BC.inc new file mode 100644 index 00000000..efa96fb5 --- /dev/null +++ b/asm/non_matching/scroll/sub_080801BC.inc @@ -0,0 +1,100 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldrh r4, [r5, #0x18] + adds r4, #6 + strh r4, [r5, #0x18] + ldrh r0, [r5, #0x18] + lsls r0, r0, #1 + movs r1, #3 + bl __divsi3 + strh r0, [r5, #0x1a] + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + cmp r4, #0x1e + bls _08080232 + ldr r2, [r5, #0x30] + movs r0, #0x2e + ldrsh r1, [r2, r0] + movs r3, #0xa + ldrsh r0, [r5, r3] + subs r0, r1, r0 + ldrh r1, [r5, #0x18] + subs r7, r0, r1 + cmp r7, #0 + bge _080801F0 + movs r7, #0 +_080801F0: + adds r6, r0, r1 + cmp r6, #0xf0 + ble _080801F8 + movs r6, #0xf0 +_080801F8: + movs r0, #0x32 + ldrsh r1, [r2, r0] + movs r2, #0xc + ldrsh r0, [r5, r2] + subs r0, r1, r0 + ldrh r1, [r5, #0x1a] + subs r4, r0, r1 + cmp r4, #0 + bge _0808020C + movs r4, #0 +_0808020C: + adds r3, r0, r1 + cmp r3, #0xa0 + ble _08080214 + movs r3, #0xa0 +_08080214: + ldr r2, _08080260 @ =gScreen + movs r1, #0xff + ands r7, r1 + lsls r0, r7, #8 + ands r6, r1 + orrs r0, r6 + adds r6, r2, #0 + adds r6, #0x5a + strh r0, [r6] + ands r4, r1 + lsls r0, r4, #8 + ands r3, r1 + orrs r0, r3 + adds r2, #0x5e + strh r0, [r2] +_08080232: + ldrh r0, [r5, #0x1c] + cmp r0, #0 + bne _08080268 + strb r0, [r5, #2] + strh r0, [r5] + bl ResetSystemPriority + ldr r1, _08080260 @ =gScreen + ldrh r2, [r1] + ldr r0, _08080264 @ =0x0000BFFF + ands r0, r2 + strh r0, [r1] + adds r2, r1, #0 + adds r2, #0x60 + ldrb r0, [r2] + strh r0, [r2] + adds r1, #0x62 + ldrh r2, [r1] + movs r0, #0xff + lsls r0, r0, #8 + ands r0, r2 + strh r0, [r1] + b _08080272 + .align 2, 0 +_08080260: .4byte gScreen +_08080264: .4byte 0x0000BFFF +_08080268: + ldr r0, _08080274 @ =gUpdateVisibleTiles + movs r1, #4 + strb r1, [r0] + movs r0, #0 + strh r0, [r5, #0x1c] +_08080272: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08080274: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080278.inc b/asm/non_matching/scroll/sub_08080278.inc new file mode 100644 index 00000000..0d83261e --- /dev/null +++ b/asm/non_matching/scroll/sub_08080278.inc @@ -0,0 +1,120 @@ + .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, _08080344 @ =gUnk_02022830 + mov ip, r0 + ldr r1, _08080348 @ =gRoomControls + ldrh r0, [r1, #0x1e] + lsrs r0, r0, #4 + str r0, [sp] + ldrh r0, [r1, #0x20] + lsrs r0, r0, #4 + lsls r0, r0, #6 + str r0, [sp, #4] + movs r5, #0 + mov sl, r5 + cmp r5, r0 + bhs _08080336 + mov sb, r5 +_080802A2: + movs r1, #0 + mov r8, r1 + ldr r0, [sp] + cmp r8, r0 + bhs _08080328 + ldr r4, _0808034C @ =gMapDataTop + add r4, sb + ldr r7, _08080350 @ =gUnk_0200E654 + add r7, sb + ldr r3, _08080354 @ =gMapDataBottom + add r3, sb + ldr r6, _08080358 @ =gUnk_02028EB4 + add r6, sb +_080802BC: + mov r2, sl + add r2, r8 + ldrh r0, [r6] + ldrh r1, [r3] + cmp r0, r1 + beq _080802EA + ldr r0, _0808035C @ =0x00003FFF + cmp r1, r0 + bhi _080802EA + adds r0, #1 + adds r1, r0, #0 + adds r0, r2, #0 + orrs r0, r1 + mov r1, ip + strh r0, [r1] + ldrh r0, [r3] + strh r0, [r1, #2] + movs r0, #4 + add ip, r0 + adds r5, #1 + ldr r0, _08080360 @ =0x000005FF + cmp r5, r0 + bhi _08080336 +_080802EA: + ldrh r0, [r7] + ldrh r1, [r4] + cmp r0, r1 + beq _08080316 + ldr r0, _0808035C @ =0x00003FFF + cmp r1, r0 + bhi _08080316 + movs r1, #0x80 + lsls r1, r1, #8 + adds r0, r1, #0 + orrs r2, r0 + mov r0, ip + strh r2, [r0] + ldrh r0, [r4] + mov r1, ip + strh r0, [r1, #2] + movs r0, #4 + add ip, r0 + adds r5, #1 + ldr r0, _08080364 @ =0x000007FF + cmp r5, r0 + bhi _08080336 +_08080316: + adds r4, #2 + adds r7, #2 + adds r3, #2 + adds r6, #2 + movs r1, #1 + add r8, r1 + ldr r0, [sp] + cmp r8, r0 + blo _080802BC +_08080328: + movs r1, #0x80 + add sb, r1 + movs r0, #0x40 + add sl, r0 + ldr r1, [sp, #4] + cmp sl, r1 + blo _080802A2 +_08080336: + adds r0, r5, #0 + 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 +_08080344: .4byte gUnk_02022830 +_08080348: .4byte gRoomControls +_0808034C: .4byte gMapDataTop +_08080350: .4byte gUnk_0200E654 +_08080354: .4byte gMapDataBottom +_08080358: .4byte gUnk_02028EB4 +_0808035C: .4byte 0x00003FFF +_08080360: .4byte 0x000005FF +_08080364: .4byte 0x000007FF + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080368.inc b/asm/non_matching/scroll/sub_08080368.inc new file mode 100644 index 00000000..f86b2383 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080368.inc @@ -0,0 +1,51 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + ldr r0, _08080384 @ =gUnk_03004030 + ldr r1, _08080388 @ =gRoomControls + ldrb r0, [r0, #0xa] + ldrb r1, [r1, #4] + cmp r0, r1 + beq _08080390 + cmp r0, #0xff + beq _08080390 + ldr r1, _0808038C @ =gUnk_02034480 + movs r0, #0 + strh r0, [r1] + b _080803BE + .align 2, 0 +_08080384: .4byte gUnk_03004030 +_08080388: .4byte gRoomControls +_0808038C: .4byte gUnk_02034480 +_08080390: + ldr r5, _080803C0 @ =gUnk_020246B0 + ldr r0, _080803C4 @ =gUnk_02034480 + ldrh r0, [r0] + lsls r6, r0, #1 + movs r4, #0 + cmp r4, r6 + bhs _080803B8 + ldr r0, _080803C8 @ =0x00000FFF + adds r7, r0, #0 +_080803A2: + ldrh r0, [r5, #2] + ldrh r2, [r5] + adds r1, r7, #0 + ands r1, r2 + lsrs r2, r2, #0xe + bl sub_0807B9B8 + adds r5, #4 + adds r4, #2 + cmp r4, r6 + blo _080803A2 +_080803B8: + ldr r1, _080803CC @ =gUpdateVisibleTiles + movs r0, #0 + strb r0, [r1] +_080803BE: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080803C0: .4byte gUnk_020246B0 +_080803C4: .4byte gUnk_02034480 +_080803C8: .4byte 0x00000FFF +_080803CC: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/scroll/sub_080803D0.inc b/asm/non_matching/scroll/sub_080803D0.inc new file mode 100644 index 00000000..f95374f7 --- /dev/null +++ b/asm/non_matching/scroll/sub_080803D0.inc @@ -0,0 +1,290 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x38 + ldr r1, _080804F0 @ =gRoomControls + movs r2, #0xa + ldrsh r0, [r1, r2] + ldrh r2, [r1, #6] + subs r0, r0, r2 + str r0, [sp, #0x18] + ldr r3, [r1, #0x30] + movs r4, #0x2e + ldrsh r0, [r3, r4] + subs r0, r0, r2 + str r0, [sp, #0x10] + movs r2, #0xc + ldrsh r0, [r1, r2] + ldrh r1, [r1, #8] + subs r0, r0, r1 + str r0, [sp, #0x1c] + movs r4, #0x32 + ldrsh r0, [r3, r4] + subs r0, r0, r1 + str r0, [sp, #0x14] + movs r0, #0x3c + str r0, [sp, #8] +_08080408: + movs r7, #0 + ldr r1, [sp, #8] + adds r1, #6 + str r1, [sp, #8] + adds r2, r1, #0 + muls r2, r1, r2 + mov sl, r2 + lsls r4, r1, #1 + adds r0, r4, #0 + movs r1, #3 + bl __divsi3 + str r0, [sp, #0xc] + adds r1, r0, #0 + muls r1, r0, r1 + mov sb, r1 + movs r2, #0 + str r2, [sp, #4] + rsbs r4, r4, #0 + adds r4, #1 + mov r0, sb + muls r0, r4, r0 + mov r4, sl + lsls r5, r4, #1 + adds r4, r0, r5 + ldr r0, [sp, #8] + mov r6, sb + muls r6, r0, r6 + adds r0, r6, #0 + mov r1, sl + bl __divsi3 + adds r2, r0, #0 + cmp r7, r2 + bgt _08080506 + ldr r1, [sp, #0x18] + adds r1, #0xf8 + str r1, [sp, #0x20] + mov r1, sl + adds r0, r5, r1 + lsls r3, r0, #1 + str r6, [sp, #0x2c] + ldr r0, [sp, #8] + lsls r1, r0, #2 + rsbs r1, r1, #0 + adds r1, #4 + mov r8, r1 + rsbs r0, r0, #0 + adds r0, #8 + ldr r1, [sp, #0x10] + adds r6, r0, r1 + ldr r0, [sp, #8] + adds r5, r0, r1 + mov r0, r8 + mov r1, sb + muls r1, r0, r1 + mov r8, r1 +_0808047A: + ldr r1, [sp, #0x1c] + adds r1, #0xa8 + mov ip, r1 + ldr r0, [sp, #0x14] + ldr r1, [sp, #4] + adds r0, r0, r1 + str r0, [sp, #0x34] + cmp ip, r0 + ble _080804A0 + ldr r0, [sp, #0x20] + cmp r0, r5 + ble _08080496 + movs r0, #1 + orrs r7, r0 +_08080496: + ldr r1, [sp, #0x18] + cmp r1, r6 + bge _080804A0 + movs r0, #2 + orrs r7, r0 +_080804A0: + ldr r0, [sp, #0x14] + ldr r1, [sp, #4] + subs r0, r0, r1 + mov ip, r0 + adds r0, #8 + ldr r1, [sp, #0x1c] + cmp r1, r0 + bge _080804C4 + ldr r0, [sp, #0x20] + cmp r0, r5 + ble _080804BA + movs r0, #4 + orrs r7, r0 +_080804BA: + ldr r1, [sp, #0x18] + cmp r1, r6 + bge _080804C4 + movs r0, #8 + orrs r7, r0 +_080804C4: + cmp r4, #0 + ble _080804F4 + mov r2, r8 + adds r0, r2, r3 + adds r4, r4, r0 + ldr r0, [sp, #0x2c] + mov r1, sb + subs r0, r0, r1 + str r0, [sp, #0x2c] + lsls r0, r1, #2 + add r8, r0 + adds r6, #1 + subs r5, #1 + ldr r0, [sp, #0x2c] + mov r1, sl + str r3, [sp, #0x30] + bl __divsi3 + adds r2, r0, #0 + ldr r3, [sp, #0x30] + b _080804F6 + .align 2, 0 +_080804F0: .4byte gRoomControls +_080804F4: + adds r4, r4, r3 +_080804F6: + mov r1, sl + lsls r0, r1, #2 + adds r3, r3, r0 + ldr r0, [sp, #4] + adds r0, #1 + str r0, [sp, #4] + cmp r0, r2 + ble _0808047A +_08080506: + movs r1, #0 + str r1, [sp] + ldr r2, [sp, #0xc] + str r2, [sp, #4] + mov r4, sb + lsls r6, r4, #1 + lsls r0, r2, #1 + rsbs r0, r0, #0 + adds r0, #1 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + adds r4, r6, r0 + mov r5, sl + muls r5, r2, r5 + adds r0, r5, #0 + mov r1, sb + bl __divsi3 + adds r2, r0, #0 + ldr r0, [sp] + cmp r0, r2 + bgt _080805E4 + ldr r1, [sp, #0x18] + adds r1, #0xf8 + str r1, [sp, #0x24] + mov r1, sb + adds r0, r6, r1 + lsls r0, r0, #1 + mov r8, r0 + ldr r3, [sp, #0x10] + adds r3, #8 + ldr r6, [sp, #0x10] + str r5, [sp, #0x28] + ldr r1, [sp, #4] + lsls r0, r1, #2 + rsbs r0, r0, #0 + adds r0, #4 + mov r5, sl + muls r5, r0, r5 +_08080556: + ldr r0, [sp, #0x1c] + adds r0, #0xa8 + mov ip, r0 + ldr r1, [sp, #0x14] + ldr r0, [sp, #4] + adds r1, r1, r0 + str r1, [sp, #0x34] + cmp ip, r1 + ble _0808057C + ldr r1, [sp, #0x24] + cmp r1, r6 + ble _08080572 + movs r0, #0x10 + orrs r7, r0 +_08080572: + ldr r0, [sp, #0x18] + cmp r0, r3 + bge _0808057C + movs r0, #0x20 + orrs r7, r0 +_0808057C: + ldr r1, [sp, #0x14] + ldr r0, [sp, #4] + subs r1, r1, r0 + mov ip, r1 + mov r0, ip + adds r0, #8 + ldr r1, [sp, #0x1c] + cmp r1, r0 + bge _080805A2 + ldr r0, [sp, #0x24] + cmp r0, r6 + ble _08080598 + movs r0, #0x40 + orrs r7, r0 +_08080598: + ldr r1, [sp, #0x18] + cmp r1, r3 + bge _080805A2 + movs r0, #0x80 + orrs r7, r0 +_080805A2: + cmp r4, #0 + ble _080805CE + mov r2, r8 + adds r0, r2, r5 + adds r4, r4, r0 + ldr r0, [sp, #0x28] + mov r1, sl + subs r0, r0, r1 + str r0, [sp, #0x28] + lsls r0, r1, #2 + adds r5, r5, r0 + ldr r2, [sp, #4] + subs r2, #1 + str r2, [sp, #4] + ldr r0, [sp, #0x28] + mov r1, sb + str r3, [sp, #0x30] + bl __divsi3 + adds r2, r0, #0 + ldr r3, [sp, #0x30] + b _080805D0 +_080805CE: + add r4, r8 +_080805D0: + mov r1, sb + lsls r0, r1, #2 + add r8, r0 + subs r3, #1 + adds r6, #1 + ldr r0, [sp] + adds r0, #1 + str r0, [sp] + cmp r0, r2 + ble _08080556 +_080805E4: + cmp r7, #0 + beq _080805EA + b _08080408 +_080805EA: + ldr r0, [sp, #8] + add sp, #0x38 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/scroll/sub_080806BC.inc b/asm/non_matching/scroll/sub_080806BC.inc new file mode 100644 index 00000000..40bc8ac1 --- /dev/null +++ b/asm/non_matching/scroll/sub_080806BC.inc @@ -0,0 +1,61 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov sb, r0 + mov r8, r1 + adds r7, r2, #0 + adds r6, r3, #0 + ldr r0, _08080710 @ =gArea + ldr r1, _08080714 @ =0x0000085C + adds r0, r0, r1 + ldr r0, [r0] + ldr r5, [r0, #0x18] + ldrh r0, [r5] + ldr r1, _08080718 @ =0x0000FFFF + cmp r0, r1 + beq _08080728 + mov sl, r1 +_080806E2: + ldrh r2, [r5] + movs r0, #1 + lsls r0, r2 + ands r0, r6 + cmp r0, #0 + beq _08080720 + ldr r1, _0808071C @ =gUnk_0811E7AC + lsls r0, r2, #2 + adds r0, r0, r1 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, sb + mov r2, r8 + adds r3, r7, #0 + bl _call_via_r4 + cmp r0, #0 + beq _08080720 + adds r0, r5, #0 + bl DoExitTransition + movs r0, #1 + b _0808072A + .align 2, 0 +_08080710: .4byte gArea +_08080714: .4byte 0x0000085C +_08080718: .4byte 0x0000FFFF +_0808071C: .4byte gUnk_0811E7AC +_08080720: + adds r5, #0x14 + ldrh r0, [r5] + cmp r0, sl + bne _080806E2 +_08080728: + movs r0, #0 +_0808072A: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080734.inc b/asm/non_matching/scroll/sub_08080734.inc new file mode 100644 index 00000000..b4e14ef6 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080734.inc @@ -0,0 +1,51 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + adds r5, r1, #0 + ldr r0, _08080778 @ =gArea + ldr r1, _0808077C @ =0x0000085C + adds r0, r0, r1 + ldr r0, [r0] + ldr r4, [r0, #0x18] + movs r0, #0xa + mov r8, r0 + ldrh r0, [r4] + ldr r1, _08080780 @ =0x0000FFFF + cmp r0, r1 + beq _0808078C + adds r7, r1, #0 +_08080756: + movs r0, #1 + ldrh r1, [r4] + lsls r0, r1 + mov r1, r8 + ands r0, r1 + cmp r0, #0 + beq _08080784 + adds r0, r4, #0 + adds r1, r6, #0 + adds r2, r5, #0 + movs r3, #0 + bl sub_08080808 + cmp r0, #0 + beq _08080784 + adds r0, r4, #0 + b _0808078E + .align 2, 0 +_08080778: .4byte gArea +_0808077C: .4byte 0x0000085C +_08080780: .4byte 0x0000FFFF +_08080784: + adds r4, #0x14 + ldrh r0, [r4] + cmp r0, r7 + bne _08080756 +_0808078C: + movs r0, #0 +_0808078E: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080794.inc b/asm/non_matching/scroll/sub_08080794.inc new file mode 100644 index 00000000..f4d24eea --- /dev/null +++ b/asm/non_matching/scroll/sub_08080794.inc @@ -0,0 +1,66 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + cmp r3, #1 + beq _080807C0 + cmp r3, #1 + blo _080807AC + cmp r3, #2 + beq _080807D4 + cmp r3, #3 + beq _080807E8 +_080807A8: + movs r0, #0 + b _08080800 +_080807AC: + ldr r0, _080807BC @ =gRoomControls + ldrh r0, [r0, #0x1e] + lsrs r0, r0, #1 + movs r3, #1 + cmp r0, r1 + bhs _080807F6 + movs r3, #2 + b _080807F6 + .align 2, 0 +_080807BC: .4byte gRoomControls +_080807C0: + ldr r0, _080807D0 @ =gRoomControls + ldrh r0, [r0, #0x20] + lsrs r0, r0, #1 + movs r3, #4 + cmp r0, r2 + bhs _080807F6 + movs r3, #8 + b _080807F6 + .align 2, 0 +_080807D0: .4byte gRoomControls +_080807D4: + ldr r0, _080807E4 @ =gRoomControls + ldrh r0, [r0, #0x1e] + lsrs r0, r0, #1 + movs r3, #0x10 + cmp r0, r1 + bhs _080807F6 + movs r3, #0x20 + b _080807F6 + .align 2, 0 +_080807E4: .4byte gRoomControls +_080807E8: + ldr r0, _08080804 @ =gRoomControls + ldrh r0, [r0, #0x20] + lsrs r0, r0, #1 + movs r3, #0x40 + cmp r0, r2 + bhs _080807F6 + movs r3, #0x80 +_080807F6: + ldrb r0, [r4, #0xa] + ands r0, r3 + cmp r0, #0 + beq _080807A8 + movs r0, #1 +_08080800: + pop {r4, pc} + .align 2, 0 +_08080804: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080808.inc b/asm/non_matching/scroll/sub_08080808.inc new file mode 100644 index 00000000..f06061d2 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080808.inc @@ -0,0 +1,31 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + adds r5, r2, #0 + ldrb r0, [r3, #0xa] + lsls r0, r0, #1 + ldr r2, _08080838 @ =gUnk_0811E7BC + adds r4, r0, r2 + ldrb r0, [r4] + ldrh r2, [r3, #2] + subs r1, r1, r2 + adds r1, r1, r0 + lsls r0, r0, #1 + cmp r1, r0 + bhi _0808083C + ldrb r1, [r4, #1] + ldrh r0, [r3, #4] + subs r0, r5, r0 + adds r0, r0, r1 + lsls r1, r1, #1 + cmp r0, r1 + bhi _0808083C + movs r0, #1 + b _0808083E + .align 2, 0 +_08080838: .4byte gUnk_0811E7BC +_0808083C: + movs r0, #0 +_0808083E: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080B60.inc b/asm/non_matching/scroll/sub_08080B60.inc new file mode 100644 index 00000000..43285ef1 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080B60.inc @@ -0,0 +1,49 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r1, _08080B90 @ =0x00005004 + adds r4, r0, r1 + ldr r2, _08080B94 @ =gUnk_080B37A0 + mov r8, r2 + movs r3, #0 + ldr r1, _08080B98 @ =0x00003FFF + mov ip, r1 + ldr r7, _08080B9C @ =gUnk_080B7910 + ldr r2, _08080BA0 @ =0x0000B004 + adds r1, r0, r2 + adds r2, r0, #4 + ldr r6, _08080BA4 @ =0xFFFFC000 + ldr r5, _08080BA8 @ =0x00000FFF +_08080B80: + ldrh r0, [r2] + cmp r0, ip + bhi _08080BAC + lsls r0, r0, #1 + adds r0, r0, r4 + ldrh r0, [r0] + add r0, r8 + b _08080BB0 + .align 2, 0 +_08080B90: .4byte 0x00005004 +_08080B94: .4byte gUnk_080B37A0 +_08080B98: .4byte 0x00003FFF +_08080B9C: .4byte gUnk_080B7910 +_08080BA0: .4byte 0x0000B004 +_08080BA4: .4byte 0xFFFFC000 +_08080BA8: .4byte 0x00000FFF +_08080BAC: + adds r0, r0, r6 + adds r0, r0, r7 +_08080BB0: + ldrb r0, [r0] + strb r0, [r1] + adds r1, #1 + adds r2, #2 + adds r3, #1 + cmp r3, r5 + bls _08080B80 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080BC4.inc b/asm/non_matching/scroll/sub_08080BC4.inc new file mode 100644 index 00000000..4a515069 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080BC4.inc @@ -0,0 +1,98 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r3, _08080C40 @ =gRoomControls + movs r0, #0xa + ldrsh r1, [r3, r0] + ldrh r0, [r3, #6] + subs r5, r1, r0 + movs r2, #0xf + ands r5, r2 + movs r1, #0xc + ldrsh r0, [r3, r1] + ldrh r1, [r3, #8] + subs r0, r0, r1 + ands r0, r2 + adds r6, r0, #0 + adds r6, #8 + ldrh r2, [r3, #0x16] + adds r4, r2, #0 + cmp r4, #0 + beq _08080C50 + subs r2, #1 + strh r2, [r3, #0x16] + ldrb r0, [r3, #0x14] + lsls r0, r0, #4 + movs r1, #0xe + ands r2, r1 + adds r0, r0, r2 + ldr r1, _08080C44 @ =gUnk_080169A4 + adds r2, r0, r1 + ldr r4, _08080C48 @ =gMapBottom + ldr r1, [r4] + cmp r1, #0 + beq _08080C16 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r0, r0, r5 + strh r0, [r1, #2] + ldr r1, [r4] + movs r0, #1 + ldrsb r0, [r2, r0] + adds r0, r0, r6 + strh r0, [r1, #4] +_08080C16: + ldr r4, _08080C4C @ =gMapTop + ldr r1, [r4] + cmp r1, #0 + beq _08080C30 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r0, r0, r5 + strh r0, [r1, #2] + ldr r1, [r4] + movs r0, #1 + ldrsb r0, [r2, r0] + adds r0, r0, r6 + strh r0, [r1, #4] +_08080C30: + ldrb r1, [r2] + adds r0, r3, #0 + adds r0, #0x24 + strb r1, [r0] + ldrb r1, [r2, #1] + adds r0, #1 + strb r1, [r0] + b _08080C76 + .align 2, 0 +_08080C40: .4byte gRoomControls +_08080C44: .4byte gUnk_080169A4 +_08080C48: .4byte gMapBottom +_08080C4C: .4byte gMapTop +_08080C50: + ldr r0, _08080C78 @ =gMapBottom + ldr r1, [r0] + cmp r1, #0 + beq _08080C5E + strh r5, [r1, #2] + ldr r0, [r0] + strh r6, [r0, #4] +_08080C5E: + ldr r0, _08080C7C @ =gMapTop + ldr r1, [r0] + cmp r1, #0 + beq _08080C6C + strh r5, [r1, #2] + ldr r0, [r0] + strh r6, [r0, #4] +_08080C6C: + adds r0, r3, #0 + adds r0, #0x24 + strb r4, [r0] + adds r0, #1 + strb r4, [r0] +_08080C76: + pop {r4, r5, r6, pc} + .align 2, 0 +_08080C78: .4byte gMapBottom +_08080C7C: .4byte gMapTop + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080C80.inc b/asm/non_matching/scroll/sub_08080C80.inc new file mode 100644 index 00000000..d61686c3 --- /dev/null +++ b/asm/non_matching/scroll/sub_08080C80.inc @@ -0,0 +1,22 @@ + .syntax unified + push {r4, lr} + bl sub_080197D4 + ldr r0, _08080CA8 @ =gMapDataBottom + ldr r4, _08080CAC @ =gRoomControls + ldrh r1, [r4, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r4, #0x20] + lsrs r2, r2, #4 + bl sub_0807C8B0 + ldr r0, _08080CB0 @ =gMapDataTop + ldrh r1, [r4, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r4, #0x20] + lsrs r2, r2, #4 + bl sub_0807C8B0 + pop {r4, pc} + .align 2, 0 +_08080CA8: .4byte gMapDataBottom +_08080CAC: .4byte gRoomControls +_08080CB0: .4byte gMapDataTop + .syntax divided diff --git a/asm/non_matching/scroll/sub_08080CB4.inc b/asm/non_matching/scroll/sub_08080CB4.inc new file mode 100644 index 00000000..8e6e198f --- /dev/null +++ b/asm/non_matching/scroll/sub_08080CB4.inc @@ -0,0 +1,136 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + adds r1, r4, #0 + adds r1, #0x58 + ldrb r0, [r4, #0xa] + ldrb r1, [r1] + cmp r0, r1 + beq _08080CF0 + adds r1, r0, #0 + adds r0, r4, #0 + bl InitAnimationForceUpdate + ldrb r0, [r4, #0xa] + cmp r0, #0x5c + beq _08080CD4 + b _08080E00 +_08080CD4: + ldrb r0, [r4, #0xb] + lsls r0, r0, #3 + ldr r1, _08080CEC @ =gUnk_080C9CBC + adds r0, r0, r1 + ldrb r0, [r0] + movs r1, #0xf + ands r1, r0 + lsls r0, r0, #4 + orrs r0, r1 + strb r0, [r4, #0x1a] + b _08080E00 + .align 2, 0 +_08080CEC: .4byte gUnk_080C9CBC +_08080CF0: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + ldrb r0, [r4, #0x18] + lsls r0, r0, #0x1e + cmp r0, #0 + bne _08080D00 + b _08080E00 +_08080D00: + ldrb r0, [r4, #0xa] + subs r0, #0x40 + cmp r0, #0x22 + bhi _08080E00 + lsls r0, r0, #2 + ldr r1, _08080D14 @ =_08080D18 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08080D14: .4byte _08080D18 +_08080D18: @ jump table + .4byte _08080DEE @ case 0 + .4byte _08080DEE @ case 1 + .4byte _08080DEE @ case 2 + .4byte _08080DEE @ case 3 + .4byte _08080E00 @ case 4 + .4byte _08080E00 @ case 5 + .4byte _08080E00 @ case 6 + .4byte _08080E00 @ case 7 + .4byte _08080E00 @ case 8 + .4byte _08080E00 @ case 9 + .4byte _08080E00 @ case 10 + .4byte _08080E00 @ case 11 + .4byte _08080E00 @ case 12 + .4byte _08080E00 @ case 13 + .4byte _08080E00 @ case 14 + .4byte _08080E00 @ case 15 + .4byte _08080E00 @ case 16 + .4byte _08080E00 @ case 17 + .4byte _08080E00 @ case 18 + .4byte _08080E00 @ case 19 + .4byte _08080E00 @ case 20 + .4byte _08080E00 @ case 21 + .4byte _08080E00 @ case 22 + .4byte _08080E00 @ case 23 + .4byte _08080E00 @ case 24 + .4byte _08080E00 @ case 25 + .4byte _08080E00 @ case 26 + .4byte _08080E00 @ case 27 + .4byte _08080DEE @ case 28 + .4byte _08080E00 @ case 29 + .4byte _08080E00 @ case 30 + .4byte _08080E00 @ case 31 + .4byte _08080DA4 @ case 32 + .4byte _08080E00 @ case 33 + .4byte _08080DEE @ case 34 +_08080DA4: + adds r5, r4, #0 + adds r5, #0x6a + ldrb r0, [r5] + cmp r0, #0 + beq _08080DB4 + subs r0, #1 + strb r0, [r5] + b _08080E00 +_08080DB4: + bl Random + movs r1, #0x1f + ands r0, r1 + adds r0, #0xa + strb r0, [r5] + adds r0, r4, #0 + movs r1, #7 + movs r2, #0 + bl CreateFx + adds r1, r0, #0 + cmp r1, #0 + beq _08080E00 + adds r0, r4, #0 + adds r0, #0x62 + ldrb r0, [r0] + adds r2, r1, #0 + adds r2, #0x62 + strb r0, [r2] + adds r0, r4, #0 + adds r0, #0x63 + ldrb r0, [r0] + adds r2, #1 + strb r0, [r2] + adds r0, r4, #0 + bl SortEntityAbove + b _08080E00 +_08080DEE: + ldr r0, _08080E04 @ =gRoomTransition + ldr r0, [r0] + movs r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _08080E00 + adds r0, r4, #0 + bl CreateSparkle +_08080E00: + pop {r4, r5, pc} + .align 2, 0 +_08080E04: .4byte gRoomTransition + .syntax divided diff --git a/asm/scroll.s b/asm/scroll.s deleted file mode 100644 index 9401d782..00000000 --- a/asm/scroll.s +++ /dev/null @@ -1,1658 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start UpdateScroll -UpdateScroll: @ 0xUpdateScroll - push {lr} - ldr r0, _0807FC5C @ =gRoomControls - ldrb r2, [r0, #0xf] - movs r1, #0xfb - ands r1, r2 - strb r1, [r0, #0xf] - ldr r2, _0807FC60 @ =gUnk_0811E768 - ldrb r1, [r0, #2] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807FC5C: .4byte gRoomControls -_0807FC60: .4byte gUnk_0811E768 - - thumb_func_start sub_0807FC64 -sub_0807FC64: @ 0x0807FC64 - push {lr} - movs r2, #0 - movs r1, #1 - strb r1, [r0, #2] - strh r2, [r0] - movs r1, #4 - strb r1, [r0, #0xe] - bl sub_0807FC7C - bl sub_080805F8 - pop {pc} - - thumb_func_start sub_0807FC7C -sub_0807FC7C: @ 0x0807FC7C - push {r4, r5, r6, r7, lr} - adds r2, r0, #0 - ldr r0, [r2, #0x30] - cmp r0, #0 - bne _0807FC88 - b _0807FDA6 -_0807FC88: - movs r1, #0xa - ldrsh r4, [r2, r1] - movs r1, #0x2e - ldrsh r0, [r0, r1] - subs r0, #0x78 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FD16 - ldrh r6, [r2, #0xa] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FCDC - ldrh r0, [r2, #6] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FD16 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FCBC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCBC: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FCCE - ldr r1, _0807FCD8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FCCE: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FD16 - b _0807FD14 - .align 2, 0 -_0807FCD8: .4byte gUpdateVisibleTiles -_0807FCDC: - ldrh r0, [r2, #6] - ldrh r1, [r2, #0x1e] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xf0 - cmp r4, r5 - bge _0807FD16 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FCFC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCFC: - subs r0, r6, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD0C - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD0C: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FD16 -_0807FD14: - strh r5, [r2, #0xa] -_0807FD16: - movs r0, #0xc - ldrsh r4, [r2, r0] - ldr r0, [r2, #0x30] - movs r1, #0x32 - ldrsh r0, [r0, r1] - subs r0, #0x50 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FDA6 - ldrh r6, [r2, #0xc] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FD6C - ldrh r0, [r2, #8] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FD4C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD4C: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FD5E - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD5E: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FDA6 - b _0807FDA4 - .align 2, 0 -_0807FD68: .4byte gUpdateVisibleTiles -_0807FD6C: - ldrh r0, [r2, #8] - ldrh r1, [r2, #0x20] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xa0 - cmp r4, r5 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FD8C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD8C: - subs r0, r6, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD9C - ldr r1, _0807FDAC @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD9C: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FDA6 -_0807FDA4: - strh r5, [r2, #0xc] -_0807FDA6: - bl sub_08080BC4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807FDAC: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807FDB0 -sub_0807FDB0: @ 0x0807FDB0 - push {lr} - ldr r2, _0807FDC4 @ =gUnk_0811E780 - ldrb r1, [r0, #3] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807FDC4: .4byte gUnk_0811E780 - - thumb_func_start sub_0807FDC8 -sub_0807FDC8: @ 0x0807FDC8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0807FDE0 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r4] - bl UpdateScrollVram - movs r1, #0 - movs r0, #1 - strb r0, [r5, #3] - strb r1, [r4] - pop {r4, r5, pc} - .align 2, 0 -_0807FDE0: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807FDE4 -sub_0807FDE4: @ 0x0807FDE4 - movs r2, #0 - movs r1, #2 - strb r1, [r0, #3] - strh r2, [r0, #0x18] - ldr r0, _0807FDF4 @ =gUpdateVisibleTiles - strb r1, [r0] - bx lr - .align 2, 0 -_0807FDF4: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807FDF8 -sub_0807FDF8: @ 0x0807FDF8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0807FE18 @ =gUpdateVisibleTiles - movs r0, #2 - strb r0, [r1] - ldrh r0, [r4, #0x18] - adds r0, #1 - strh r0, [r4, #0x18] - ldrb r0, [r4, #0x10] - cmp r0, #1 - beq _0807FE44 - cmp r0, #1 - bgt _0807FE1C - cmp r0, #0 - beq _0807FE26 - b _0807FEB6 - .align 2, 0 -_0807FE18: .4byte gUpdateVisibleTiles -_0807FE1C: - cmp r0, #2 - beq _0807FE68 - cmp r0, #3 - beq _0807FE94 - b _0807FEB6 -_0807FE26: - ldrh r0, [r4, #0xc] - subs r0, #4 - strh r0, [r4, #0xc] - ldr r1, [r4, #0x30] - ldr r0, _0807FE3C @ =gPlayerEntity - cmp r1, r0 - bne _0807FE80 - ldr r0, [r1, #0x30] - ldr r2, _0807FE40 @ =0xFFFFA000 - b _0807FE7C - .align 2, 0 -_0807FE3C: .4byte gPlayerEntity -_0807FE40: .4byte 0xFFFFA000 -_0807FE44: - ldrh r0, [r4, #0xa] - adds r0, #4 - strh r0, [r4, #0xa] - ldr r1, [r4, #0x30] - ldr r0, _0807FE64 @ =gPlayerEntity - cmp r1, r0 - bne _0807FE5C - ldr r0, [r1, #0x2c] - movs r2, #0x80 - lsls r2, r2, #7 - adds r0, r0, r2 - str r0, [r1, #0x2c] -_0807FE5C: - ldrh r0, [r4, #0x18] - cmp r0, #0x3c - bne _0807FEB6 - b _0807FE86 - .align 2, 0 -_0807FE64: .4byte gPlayerEntity -_0807FE68: - ldrh r0, [r4, #0xc] - adds r0, #4 - strh r0, [r4, #0xc] - ldr r1, [r4, #0x30] - ldr r0, _0807FE90 @ =gPlayerEntity - cmp r1, r0 - bne _0807FE80 - ldr r0, [r1, #0x30] - movs r2, #0xc0 - lsls r2, r2, #7 -_0807FE7C: - adds r0, r0, r2 - str r0, [r1, #0x30] -_0807FE80: - ldrh r0, [r4, #0x18] - cmp r0, #0x28 - bne _0807FEB6 -_0807FE86: - adds r0, r4, #0 - bl sub_0807FEC8 - b _0807FEB6 - .align 2, 0 -_0807FE90: .4byte gPlayerEntity -_0807FE94: - ldrh r0, [r4, #0xa] - subs r0, #4 - strh r0, [r4, #0xa] - ldr r1, [r4, #0x30] - ldr r0, _0807FEC0 @ =gPlayerEntity - cmp r1, r0 - bne _0807FEAA - ldr r0, [r1, #0x2c] - ldr r2, _0807FEC4 @ =0xFFFFC000 - adds r0, r0, r2 - str r0, [r1, #0x2c] -_0807FEAA: - ldrh r0, [r4, #0x18] - cmp r0, #0x3c - bne _0807FEB6 - adds r0, r4, #0 - bl sub_0807FEC8 -_0807FEB6: - movs r0, #0 - strh r0, [r4, #0x16] - bl sub_08080BC4 - pop {r4, pc} - .align 2, 0 -_0807FEC0: .4byte gPlayerEntity -_0807FEC4: .4byte 0xFFFFC000 - - thumb_func_start sub_0807FEC8 -sub_0807FEC8: @ 0x0807FEC8 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0 - strb r0, [r5, #2] - subs r0, #1 - ldr r4, _0807FEEC @ =gUnk_03003FC0 - adds r1, r4, #0 - movs r2, #0x40 - bl MemFill32 - subs r4, #0x40 - ldr r1, [r5, #0x30] - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x16] - ldrh r0, [r1, #0x32] - strh r0, [r4, #0x18] - pop {r4, r5, pc} - .align 2, 0 -_0807FEEC: .4byte gPlayerState+0x40 - - thumb_func_start sub_0807FEF0 -sub_0807FEF0: @ 0x0807FEF0 - push {lr} - ldr r2, _0807FF04 @ =gUnk_0811E78C - ldrb r1, [r0, #3] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807FF04: .4byte gUnk_0811E78C - - thumb_func_start sub_0807FF08 -sub_0807FF08: @ 0x0807FF08 - movs r2, #0 - movs r1, #1 - strb r1, [r0, #3] - strh r2, [r0, #0x18] - ldr r1, _0807FF18 @ =gUpdateVisibleTiles - movs r0, #3 - strb r0, [r1] - bx lr - .align 2, 0 -_0807FF18: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807FF1C -sub_0807FF1C: @ 0x0807FF1C - push {lr} - adds r2, r0, #0 - ldr r0, _0807FF4C @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _0807FF48 - ldr r1, _0807FF50 @ =gUpdateVisibleTiles - movs r0, #3 - strb r0, [r1] - ldrh r0, [r2, #0x18] - adds r0, #1 - strh r0, [r2, #0x18] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x13 - bls _0807FF48 - movs r0, #0 - strb r0, [r2, #2] - bl ResetSystemPriority -_0807FF48: - pop {pc} - .align 2, 0 -_0807FF4C: .4byte gRoomTransition -_0807FF50: .4byte gUpdateVisibleTiles - - thumb_func_start sub_0807FF54 -sub_0807FF54: @ 0x0807FF54 - push {lr} - ldr r2, _0807FF68 @ =gUnk_0811E794 - ldrb r1, [r0, #3] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807FF68: .4byte gUnk_0811E794 - - thumb_func_start sub_0807FF6C -sub_0807FF6C: @ 0x0807FF6C - push {r4, lr} - movs r1, #1 - strb r1, [r0, #3] - ldr r3, _0807FFC8 @ =gScreen - ldrh r1, [r3] - movs r2, #0x80 - lsls r2, r2, #7 - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r3] - adds r2, r3, #0 - adds r2, #0x60 - ldrb r0, [r2] - movs r4, #0xb8 - lsls r4, r4, #5 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r2, #2 - ldrh r1, [r2] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - movs r1, #7 - movs r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r0, r3, #0 - adds r0, #0x5a - movs r1, #0xf0 - strh r1, [r0] - adds r0, #4 - strh r1, [r0] - bl ResetPlayer - bl ResetPlayerAnimationAndAction - ldr r0, _0807FFCC @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _0807FFD4 - ldr r1, _0807FFD0 @ =gPlayerEntity - movs r0, #4 - strb r0, [r1, #0x14] - b _0807FFD8 - .align 2, 0 -_0807FFC8: .4byte gScreen -_0807FFCC: .4byte gUnk_03004030 -_0807FFD0: .4byte gPlayerEntity -_0807FFD4: - ldr r0, _0807FFE0 @ =gPlayerEntity - strb r4, [r0, #0x14] -_0807FFD8: - bl sub_080809D4 - pop {r4, pc} - .align 2, 0 -_0807FFE0: .4byte gPlayerEntity - - thumb_func_start sub_0807FFE4 -sub_0807FFE4: @ 0x0807FFE4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #2 - strb r0, [r5, #3] - bl sub_080803D0 - adds r0, #6 - strh r0, [r5, #0x18] - ldr r4, _0808002C @ =gUnk_0200B640 - bl sub_08080278 - strh r0, [r4] - ldr r1, _08080030 @ =gUnk_08109194 - ldr r0, _08080034 @ =gUnk_03004030 - ldr r0, [r0] - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0] - bl sub_080197D4 - ldr r4, _08080038 @ =gMapDataTop - ldrh r1, [r5, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r5, #0x20] - lsrs r2, r2, #4 - adds r0, r4, #0 - bl sub_0807C8B0 - ldr r0, _0808003C @ =gMapDataTopSpecial - subs r4, #4 - adds r1, r4, #0 - bl sub_0801AB08 - pop {r4, r5, pc} - .align 2, 0 -_0808002C: .4byte gUnk_0200B640 -_08080030: .4byte gUnk_08109194 -_08080034: .4byte gUnk_03004030 -_08080038: .4byte gMapDataTop -_0808003C: .4byte gMapDataTopSpecial - - thumb_func_start sub_08080040 -sub_08080040: @ 0x08080040 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrh r4, [r5, #0x18] - subs r4, #6 - strh r4, [r5, #0x18] - ldrh r0, [r5, #0x18] - lsls r0, r0, #1 - movs r1, #3 - bl __divsi3 - strh r0, [r5, #0x1a] - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - cmp r4, #0x2a - bls _080800C6 - ldr r3, [r5, #0x30] - movs r1, #0x2e - ldrsh r0, [r3, r1] - movs r2, #0xa - ldrsh r1, [r5, r2] - subs r2, r0, r1 - ldrh r1, [r5, #0x18] - subs r0, r2, r1 - adds r7, r0, #0 - adds r7, #8 - cmp r7, #0 - bge _08080078 - movs r7, #0 -_08080078: - adds r0, r2, r1 - adds r6, r0, #0 - subs r6, #8 - cmp r6, #0xf0 - ble _08080084 - movs r6, #0xf0 -_08080084: - movs r1, #0x32 - ldrsh r0, [r3, r1] - movs r2, #0xc - ldrsh r1, [r5, r2] - subs r2, r0, r1 - ldrh r1, [r5, #0x1a] - subs r0, r2, r1 - adds r4, r0, #0 - adds r4, #8 - cmp r4, #0 - bge _0808009C - movs r4, #0 -_0808009C: - adds r0, r2, r1 - adds r3, r0, #0 - subs r3, #8 - cmp r3, #0xa0 - ble _080800A8 - movs r3, #0xa0 -_080800A8: - ldr r2, _080800F0 @ =gScreen - movs r1, #0xff - ands r7, r1 - lsls r0, r7, #8 - ands r6, r1 - orrs r0, r6 - adds r6, r2, #0 - adds r6, #0x5a - strh r0, [r6] - ands r4, r1 - lsls r0, r4, #8 - ands r3, r1 - orrs r0, r3 - adds r2, #0x5e - strh r0, [r2] -_080800C6: - ldrh r0, [r5, #0x18] - cmp r0, #0 - bne _080800FC - movs r0, #3 - strb r0, [r5, #3] - bl DeleteSleepingEntities - bl sub_0807C810 - ldr r1, _080800F4 @ =gUnk_08109194 - ldr r0, _080800F8 @ =gUnk_03004030 - ldr r0, [r0] - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0, #4] - bl sub_08080C80 - b _08080102 - .align 2, 0 -_080800F0: .4byte gScreen -_080800F4: .4byte gUnk_08109194 -_080800F8: .4byte gUnk_03004030 -_080800FC: - ldr r1, _08080104 @ =gUpdateVisibleTiles - movs r0, #4 - strb r0, [r1] -_08080102: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08080104: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08080108 -sub_08080108: @ 0x08080108 - push {r4, r5, r6, lr} - movs r1, #4 - strb r1, [r0, #3] - ldr r5, _08080178 @ =gMapDataBottom - movs r0, #0xc0 - lsls r0, r0, #6 - adds r1, r5, r0 - movs r6, #0x80 - lsls r6, r6, #6 - adds r0, r5, #0 - adds r2, r6, #0 - bl MemCopy - ldr r4, _0808017C @ =gMapDataTop - movs r0, #0xc0 - lsls r0, r0, #6 - adds r1, r4, r0 - adds r0, r4, #0 - adds r2, r6, #0 - bl MemCopy - bl sub_08080368 - ldr r1, _08080180 @ =gUnk_02034480 - ldr r0, _08080184 @ =gUnk_0200B640 - ldrh r0, [r0] - strh r0, [r1] - ldr r0, _08080188 @ =gUnk_02022830 - ldr r1, _0808018C @ =gUnk_020246B0 - movs r2, #0xc0 - lsls r2, r2, #5 - bl MemCopy - subs r5, #4 - adds r0, r5, #0 - bl sub_08080B60 - subs r4, #4 - adds r0, r4, #0 - bl sub_08080B60 - bl sub_0807BBE4 - bl sub_0807BC84 - bl sub_0805E248 - ldr r0, _08080190 @ =gUnk_02019EE0 - adds r1, r5, #0 - bl sub_0801AB08 - ldr r0, _08080194 @ =gMapDataTopSpecial - adds r1, r4, #0 - bl sub_0801AB08 - pop {r4, r5, r6, pc} - .align 2, 0 -_08080178: .4byte gMapDataBottom -_0808017C: .4byte gMapDataTop -_08080180: .4byte gUnk_02034480 -_08080184: .4byte gUnk_0200B640 -_08080188: .4byte gUnk_02022830 -_0808018C: .4byte gUnk_020246B0 -_08080190: .4byte gUnk_02019EE0 -_08080194: .4byte gMapDataTopSpecial - - thumb_func_start sub_08080198 -sub_08080198: @ 0x08080198 - push {r4, lr} - movs r1, #5 - strb r1, [r0, #3] - movs r4, #0 - movs r1, #0xff - strh r1, [r0, #0x1c] - bl LoadRoom - bl CallRoomProp5And7 - ldr r0, _080801B8 @ =gUpdateVisibleTiles - strb r4, [r0] - bl sub_080805F8 - pop {r4, pc} - .align 2, 0 -_080801B8: .4byte gUpdateVisibleTiles - - thumb_func_start sub_080801BC -sub_080801BC: @ 0x080801BC - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrh r4, [r5, #0x18] - adds r4, #6 - strh r4, [r5, #0x18] - ldrh r0, [r5, #0x18] - lsls r0, r0, #1 - movs r1, #3 - bl __divsi3 - strh r0, [r5, #0x1a] - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - cmp r4, #0x1e - bls _08080232 - ldr r2, [r5, #0x30] - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r3, #0xa - ldrsh r0, [r5, r3] - subs r0, r1, r0 - ldrh r1, [r5, #0x18] - subs r7, r0, r1 - cmp r7, #0 - bge _080801F0 - movs r7, #0 -_080801F0: - adds r6, r0, r1 - cmp r6, #0xf0 - ble _080801F8 - movs r6, #0xf0 -_080801F8: - movs r0, #0x32 - ldrsh r1, [r2, r0] - movs r2, #0xc - ldrsh r0, [r5, r2] - subs r0, r1, r0 - ldrh r1, [r5, #0x1a] - subs r4, r0, r1 - cmp r4, #0 - bge _0808020C - movs r4, #0 -_0808020C: - adds r3, r0, r1 - cmp r3, #0xa0 - ble _08080214 - movs r3, #0xa0 -_08080214: - ldr r2, _08080260 @ =gScreen - movs r1, #0xff - ands r7, r1 - lsls r0, r7, #8 - ands r6, r1 - orrs r0, r6 - adds r6, r2, #0 - adds r6, #0x5a - strh r0, [r6] - ands r4, r1 - lsls r0, r4, #8 - ands r3, r1 - orrs r0, r3 - adds r2, #0x5e - strh r0, [r2] -_08080232: - ldrh r0, [r5, #0x1c] - cmp r0, #0 - bne _08080268 - strb r0, [r5, #2] - strh r0, [r5] - bl ResetSystemPriority - ldr r1, _08080260 @ =gScreen - ldrh r2, [r1] - ldr r0, _08080264 @ =0x0000BFFF - ands r0, r2 - strh r0, [r1] - adds r2, r1, #0 - adds r2, #0x60 - ldrb r0, [r2] - strh r0, [r2] - adds r1, #0x62 - ldrh r2, [r1] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r2 - strh r0, [r1] - b _08080272 - .align 2, 0 -_08080260: .4byte gScreen -_08080264: .4byte 0x0000BFFF -_08080268: - ldr r0, _08080274 @ =gUpdateVisibleTiles - movs r1, #4 - strb r1, [r0] - movs r0, #0 - strh r0, [r5, #0x1c] -_08080272: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08080274: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08080278 -sub_08080278: @ 0x08080278 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - ldr r0, _08080344 @ =gUnk_02022830 - mov ip, r0 - ldr r1, _08080348 @ =gRoomControls - ldrh r0, [r1, #0x1e] - lsrs r0, r0, #4 - str r0, [sp] - ldrh r0, [r1, #0x20] - lsrs r0, r0, #4 - lsls r0, r0, #6 - str r0, [sp, #4] - movs r5, #0 - mov sl, r5 - cmp r5, r0 - bhs _08080336 - mov sb, r5 -_080802A2: - movs r1, #0 - mov r8, r1 - ldr r0, [sp] - cmp r8, r0 - bhs _08080328 - ldr r4, _0808034C @ =gMapDataTop - add r4, sb - ldr r7, _08080350 @ =gUnk_0200E654 - add r7, sb - ldr r3, _08080354 @ =gMapDataBottom - add r3, sb - ldr r6, _08080358 @ =gUnk_02028EB4 - add r6, sb -_080802BC: - mov r2, sl - add r2, r8 - ldrh r0, [r6] - ldrh r1, [r3] - cmp r0, r1 - beq _080802EA - ldr r0, _0808035C @ =0x00003FFF - cmp r1, r0 - bhi _080802EA - adds r0, #1 - adds r1, r0, #0 - adds r0, r2, #0 - orrs r0, r1 - mov r1, ip - strh r0, [r1] - ldrh r0, [r3] - strh r0, [r1, #2] - movs r0, #4 - add ip, r0 - adds r5, #1 - ldr r0, _08080360 @ =0x000005FF - cmp r5, r0 - bhi _08080336 -_080802EA: - ldrh r0, [r7] - ldrh r1, [r4] - cmp r0, r1 - beq _08080316 - ldr r0, _0808035C @ =0x00003FFF - cmp r1, r0 - bhi _08080316 - movs r1, #0x80 - lsls r1, r1, #8 - adds r0, r1, #0 - orrs r2, r0 - mov r0, ip - strh r2, [r0] - ldrh r0, [r4] - mov r1, ip - strh r0, [r1, #2] - movs r0, #4 - add ip, r0 - adds r5, #1 - ldr r0, _08080364 @ =0x000007FF - cmp r5, r0 - bhi _08080336 -_08080316: - adds r4, #2 - adds r7, #2 - adds r3, #2 - adds r6, #2 - movs r1, #1 - add r8, r1 - ldr r0, [sp] - cmp r8, r0 - blo _080802BC -_08080328: - movs r1, #0x80 - add sb, r1 - movs r0, #0x40 - add sl, r0 - ldr r1, [sp, #4] - cmp sl, r1 - blo _080802A2 -_08080336: - adds r0, r5, #0 - 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 -_08080344: .4byte gUnk_02022830 -_08080348: .4byte gRoomControls -_0808034C: .4byte gMapDataTop -_08080350: .4byte gUnk_0200E654 -_08080354: .4byte gMapDataBottom -_08080358: .4byte gUnk_02028EB4 -_0808035C: .4byte 0x00003FFF -_08080360: .4byte 0x000005FF -_08080364: .4byte 0x000007FF - - thumb_func_start sub_08080368 -sub_08080368: @ 0x08080368 - push {r4, r5, r6, r7, lr} - ldr r0, _08080384 @ =gUnk_03004030 - ldr r1, _08080388 @ =gRoomControls - ldrb r0, [r0, #0xa] - ldrb r1, [r1, #4] - cmp r0, r1 - beq _08080390 - cmp r0, #0xff - beq _08080390 - ldr r1, _0808038C @ =gUnk_02034480 - movs r0, #0 - strh r0, [r1] - b _080803BE - .align 2, 0 -_08080384: .4byte gUnk_03004030 -_08080388: .4byte gRoomControls -_0808038C: .4byte gUnk_02034480 -_08080390: - ldr r5, _080803C0 @ =gUnk_020246B0 - ldr r0, _080803C4 @ =gUnk_02034480 - ldrh r0, [r0] - lsls r6, r0, #1 - movs r4, #0 - cmp r4, r6 - bhs _080803B8 - ldr r0, _080803C8 @ =0x00000FFF - adds r7, r0, #0 -_080803A2: - ldrh r0, [r5, #2] - ldrh r2, [r5] - adds r1, r7, #0 - ands r1, r2 - lsrs r2, r2, #0xe - bl sub_0807B9B8 - adds r5, #4 - adds r4, #2 - cmp r4, r6 - blo _080803A2 -_080803B8: - ldr r1, _080803CC @ =gUpdateVisibleTiles - movs r0, #0 - strb r0, [r1] -_080803BE: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080803C0: .4byte gUnk_020246B0 -_080803C4: .4byte gUnk_02034480 -_080803C8: .4byte 0x00000FFF -_080803CC: .4byte gUpdateVisibleTiles - - thumb_func_start sub_080803D0 -sub_080803D0: @ 0x080803D0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x38 - ldr r1, _080804F0 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r1, r2] - ldrh r2, [r1, #6] - subs r0, r0, r2 - str r0, [sp, #0x18] - ldr r3, [r1, #0x30] - movs r4, #0x2e - ldrsh r0, [r3, r4] - subs r0, r0, r2 - str r0, [sp, #0x10] - movs r2, #0xc - ldrsh r0, [r1, r2] - ldrh r1, [r1, #8] - subs r0, r0, r1 - str r0, [sp, #0x1c] - movs r4, #0x32 - ldrsh r0, [r3, r4] - subs r0, r0, r1 - str r0, [sp, #0x14] - movs r0, #0x3c - str r0, [sp, #8] -_08080408: - movs r7, #0 - ldr r1, [sp, #8] - adds r1, #6 - str r1, [sp, #8] - adds r2, r1, #0 - muls r2, r1, r2 - mov sl, r2 - lsls r4, r1, #1 - adds r0, r4, #0 - movs r1, #3 - bl __divsi3 - str r0, [sp, #0xc] - adds r1, r0, #0 - muls r1, r0, r1 - mov sb, r1 - movs r2, #0 - str r2, [sp, #4] - rsbs r4, r4, #0 - adds r4, #1 - mov r0, sb - muls r0, r4, r0 - mov r4, sl - lsls r5, r4, #1 - adds r4, r0, r5 - ldr r0, [sp, #8] - mov r6, sb - muls r6, r0, r6 - adds r0, r6, #0 - mov r1, sl - bl __divsi3 - adds r2, r0, #0 - cmp r7, r2 - bgt _08080506 - ldr r1, [sp, #0x18] - adds r1, #0xf8 - str r1, [sp, #0x20] - mov r1, sl - adds r0, r5, r1 - lsls r3, r0, #1 - str r6, [sp, #0x2c] - ldr r0, [sp, #8] - lsls r1, r0, #2 - rsbs r1, r1, #0 - adds r1, #4 - mov r8, r1 - rsbs r0, r0, #0 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r0, r1 - ldr r0, [sp, #8] - adds r5, r0, r1 - mov r0, r8 - mov r1, sb - muls r1, r0, r1 - mov r8, r1 -_0808047A: - ldr r1, [sp, #0x1c] - adds r1, #0xa8 - mov ip, r1 - ldr r0, [sp, #0x14] - ldr r1, [sp, #4] - adds r0, r0, r1 - str r0, [sp, #0x34] - cmp ip, r0 - ble _080804A0 - ldr r0, [sp, #0x20] - cmp r0, r5 - ble _08080496 - movs r0, #1 - orrs r7, r0 -_08080496: - ldr r1, [sp, #0x18] - cmp r1, r6 - bge _080804A0 - movs r0, #2 - orrs r7, r0 -_080804A0: - ldr r0, [sp, #0x14] - ldr r1, [sp, #4] - subs r0, r0, r1 - mov ip, r0 - adds r0, #8 - ldr r1, [sp, #0x1c] - cmp r1, r0 - bge _080804C4 - ldr r0, [sp, #0x20] - cmp r0, r5 - ble _080804BA - movs r0, #4 - orrs r7, r0 -_080804BA: - ldr r1, [sp, #0x18] - cmp r1, r6 - bge _080804C4 - movs r0, #8 - orrs r7, r0 -_080804C4: - cmp r4, #0 - ble _080804F4 - mov r2, r8 - adds r0, r2, r3 - adds r4, r4, r0 - ldr r0, [sp, #0x2c] - mov r1, sb - subs r0, r0, r1 - str r0, [sp, #0x2c] - lsls r0, r1, #2 - add r8, r0 - adds r6, #1 - subs r5, #1 - ldr r0, [sp, #0x2c] - mov r1, sl - str r3, [sp, #0x30] - bl __divsi3 - adds r2, r0, #0 - ldr r3, [sp, #0x30] - b _080804F6 - .align 2, 0 -_080804F0: .4byte gRoomControls -_080804F4: - adds r4, r4, r3 -_080804F6: - mov r1, sl - lsls r0, r1, #2 - adds r3, r3, r0 - ldr r0, [sp, #4] - adds r0, #1 - str r0, [sp, #4] - cmp r0, r2 - ble _0808047A -_08080506: - movs r1, #0 - str r1, [sp] - ldr r2, [sp, #0xc] - str r2, [sp, #4] - mov r4, sb - lsls r6, r4, #1 - lsls r0, r2, #1 - rsbs r0, r0, #0 - adds r0, #1 - mov r1, sl - muls r1, r0, r1 - adds r0, r1, #0 - adds r4, r6, r0 - mov r5, sl - muls r5, r2, r5 - adds r0, r5, #0 - mov r1, sb - bl __divsi3 - adds r2, r0, #0 - ldr r0, [sp] - cmp r0, r2 - bgt _080805E4 - ldr r1, [sp, #0x18] - adds r1, #0xf8 - str r1, [sp, #0x24] - mov r1, sb - adds r0, r6, r1 - lsls r0, r0, #1 - mov r8, r0 - ldr r3, [sp, #0x10] - adds r3, #8 - ldr r6, [sp, #0x10] - str r5, [sp, #0x28] - ldr r1, [sp, #4] - lsls r0, r1, #2 - rsbs r0, r0, #0 - adds r0, #4 - mov r5, sl - muls r5, r0, r5 -_08080556: - ldr r0, [sp, #0x1c] - adds r0, #0xa8 - mov ip, r0 - ldr r1, [sp, #0x14] - ldr r0, [sp, #4] - adds r1, r1, r0 - str r1, [sp, #0x34] - cmp ip, r1 - ble _0808057C - ldr r1, [sp, #0x24] - cmp r1, r6 - ble _08080572 - movs r0, #0x10 - orrs r7, r0 -_08080572: - ldr r0, [sp, #0x18] - cmp r0, r3 - bge _0808057C - movs r0, #0x20 - orrs r7, r0 -_0808057C: - ldr r1, [sp, #0x14] - ldr r0, [sp, #4] - subs r1, r1, r0 - mov ip, r1 - mov r0, ip - adds r0, #8 - ldr r1, [sp, #0x1c] - cmp r1, r0 - bge _080805A2 - ldr r0, [sp, #0x24] - cmp r0, r6 - ble _08080598 - movs r0, #0x40 - orrs r7, r0 -_08080598: - ldr r1, [sp, #0x18] - cmp r1, r3 - bge _080805A2 - movs r0, #0x80 - orrs r7, r0 -_080805A2: - cmp r4, #0 - ble _080805CE - mov r2, r8 - adds r0, r2, r5 - adds r4, r4, r0 - ldr r0, [sp, #0x28] - mov r1, sl - subs r0, r0, r1 - str r0, [sp, #0x28] - lsls r0, r1, #2 - adds r5, r5, r0 - ldr r2, [sp, #4] - subs r2, #1 - str r2, [sp, #4] - ldr r0, [sp, #0x28] - mov r1, sb - str r3, [sp, #0x30] - bl __divsi3 - adds r2, r0, #0 - ldr r3, [sp, #0x30] - b _080805D0 -_080805CE: - add r4, r8 -_080805D0: - mov r1, sb - lsls r0, r1, #2 - add r8, r0 - subs r3, #1 - adds r6, #1 - ldr r0, [sp] - adds r0, #1 - str r0, [sp] - cmp r0, r2 - ble _08080556 -_080805E4: - cmp r7, #0 - beq _080805EA - b _08080408 -_080805EA: - ldr r0, [sp, #8] - add sp, #0x38 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080805F8 -sub_080805F8: @ 0x080805F8 - push {lr} - ldr r0, _08080610 @ =gRoomControls - ldrb r0, [r0, #4] - subs r0, #0xc - cmp r0, #0xd - bhi _0808065C - lsls r0, r0, #2 - ldr r1, _08080614 @ =_08080618 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080610: .4byte gRoomControls -_08080614: .4byte _08080618 -_08080618: @ jump table - .4byte _08080650 @ case 0 - .4byte _0808065C @ case 1 - .4byte _0808065C @ case 2 - .4byte _08080650 @ case 3 - .4byte _0808065C @ case 4 - .4byte _0808065C @ case 5 - .4byte _0808065C @ case 6 - .4byte _08080650 @ case 7 - .4byte _08080650 @ case 8 - .4byte _0808065C @ case 9 - .4byte _08080650 @ case 10 - .4byte _08080650 @ case 11 - .4byte _0808065C @ case 12 - .4byte _08080650 @ case 13 -_08080650: - ldr r1, _08080658 @ =gUnk_03004030 - movs r0, #1 - b _08080660 - .align 2, 0 -_08080658: .4byte gUnk_03004030 -_0808065C: - ldr r1, _08080664 @ =gUnk_03004030 - movs r0, #0 -_08080660: - strb r0, [r1, #8] - pop {pc} - .align 2, 0 -_08080664: .4byte gUnk_03004030 - - thumb_func_start ClearTilemaps -ClearTilemaps: @ 0x08080668 - push {r4, r5, lr} - ldr r5, _080806A4 @ =gRoomControls - adds r0, r5, #0 - movs r1, #0x38 - bl MemClear - ldr r4, _080806A8 @ =gUnk_03004030 - adds r0, r4, #0 - movs r1, #0xc - bl MemClear - ldr r0, _080806AC @ =0x0000FFFF - strh r0, [r5, #0x22] - movs r0, #0xff - strb r0, [r4, #0xa] - ldr r1, _080806B0 @ =gUnk_02034480 - movs r0, #0 - strh r0, [r1] - ldr r0, _080806B4 @ =gUnk_02019EE0 - movs r4, #0x80 - lsls r4, r4, #8 - adds r1, r4, #0 - bl MemClear - ldr r0, _080806B8 @ =gMapDataTopSpecial - adds r1, r4, #0 - bl MemClear - pop {r4, r5, pc} - .align 2, 0 -_080806A4: .4byte gRoomControls -_080806A8: .4byte gUnk_03004030 -_080806AC: .4byte 0x0000FFFF -_080806B0: .4byte gUnk_02034480 -_080806B4: .4byte gUnk_02019EE0 -_080806B8: .4byte gMapDataTopSpecial - - thumb_func_start sub_080806BC -sub_080806BC: @ 0x080806BC - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sb, r0 - mov r8, r1 - adds r7, r2, #0 - adds r6, r3, #0 - ldr r0, _08080710 @ =gArea - ldr r1, _08080714 @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r5, [r0, #0x18] - ldrh r0, [r5] - ldr r1, _08080718 @ =0x0000FFFF - cmp r0, r1 - beq _08080728 - mov sl, r1 -_080806E2: - ldrh r2, [r5] - movs r0, #1 - lsls r0, r2 - ands r0, r6 - cmp r0, #0 - beq _08080720 - ldr r1, _0808071C @ =gUnk_0811E7AC - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r4, [r0] - adds r0, r5, #0 - mov r1, sb - mov r2, r8 - adds r3, r7, #0 - bl _call_via_r4 - cmp r0, #0 - beq _08080720 - adds r0, r5, #0 - bl DoExitTransition - movs r0, #1 - b _0808072A - .align 2, 0 -_08080710: .4byte gArea -_08080714: .4byte 0x0000085C -_08080718: .4byte 0x0000FFFF -_0808071C: .4byte gUnk_0811E7AC -_08080720: - adds r5, #0x14 - ldrh r0, [r5] - cmp r0, sl - bne _080806E2 -_08080728: - movs r0, #0 -_0808072A: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08080734 -sub_08080734: @ 0x08080734 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r5, r1, #0 - ldr r0, _08080778 @ =gArea - ldr r1, _0808077C @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r4, [r0, #0x18] - movs r0, #0xa - mov r8, r0 - ldrh r0, [r4] - ldr r1, _08080780 @ =0x0000FFFF - cmp r0, r1 - beq _0808078C - adds r7, r1, #0 -_08080756: - movs r0, #1 - ldrh r1, [r4] - lsls r0, r1 - mov r1, r8 - ands r0, r1 - cmp r0, #0 - beq _08080784 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - movs r3, #0 - bl sub_08080808 - cmp r0, #0 - beq _08080784 - adds r0, r4, #0 - b _0808078E - .align 2, 0 -_08080778: .4byte gArea -_0808077C: .4byte 0x0000085C -_08080780: .4byte 0x0000FFFF -_08080784: - adds r4, #0x14 - ldrh r0, [r4] - cmp r0, r7 - bne _08080756 -_0808078C: - movs r0, #0 -_0808078E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08080794 -sub_08080794: @ 0x08080794 - push {r4, lr} - adds r4, r0, #0 - cmp r3, #1 - beq _080807C0 - cmp r3, #1 - blo _080807AC - cmp r3, #2 - beq _080807D4 - cmp r3, #3 - beq _080807E8 -_080807A8: - movs r0, #0 - b _08080800 -_080807AC: - ldr r0, _080807BC @ =gRoomControls - ldrh r0, [r0, #0x1e] - lsrs r0, r0, #1 - movs r3, #1 - cmp r0, r1 - bhs _080807F6 - movs r3, #2 - b _080807F6 - .align 2, 0 -_080807BC: .4byte gRoomControls -_080807C0: - ldr r0, _080807D0 @ =gRoomControls - ldrh r0, [r0, #0x20] - lsrs r0, r0, #1 - movs r3, #4 - cmp r0, r2 - bhs _080807F6 - movs r3, #8 - b _080807F6 - .align 2, 0 -_080807D0: .4byte gRoomControls -_080807D4: - ldr r0, _080807E4 @ =gRoomControls - ldrh r0, [r0, #0x1e] - lsrs r0, r0, #1 - movs r3, #0x10 - cmp r0, r1 - bhs _080807F6 - movs r3, #0x20 - b _080807F6 - .align 2, 0 -_080807E4: .4byte gRoomControls -_080807E8: - ldr r0, _08080804 @ =gRoomControls - ldrh r0, [r0, #0x20] - lsrs r0, r0, #1 - movs r3, #0x40 - cmp r0, r2 - bhs _080807F6 - movs r3, #0x80 -_080807F6: - ldrb r0, [r4, #0xa] - ands r0, r3 - cmp r0, #0 - beq _080807A8 - movs r0, #1 -_08080800: - pop {r4, pc} - .align 2, 0 -_08080804: .4byte gRoomControls - - thumb_func_start sub_08080808 -sub_08080808: @ 0x08080808 - push {r4, r5, lr} - adds r3, r0, #0 - adds r5, r2, #0 - ldrb r0, [r3, #0xa] - lsls r0, r0, #1 - ldr r2, _08080838 @ =gUnk_0811E7BC - adds r4, r0, r2 - ldrb r0, [r4] - ldrh r2, [r3, #2] - subs r1, r1, r2 - adds r1, r1, r0 - lsls r0, r0, #1 - cmp r1, r0 - bhi _0808083C - ldrb r1, [r4, #1] - ldrh r0, [r3, #4] - subs r0, r5, r0 - adds r0, r0, r1 - lsls r1, r1, #1 - cmp r0, r1 - bhi _0808083C - movs r0, #1 - b _0808083E - .align 2, 0 -_08080838: .4byte gUnk_0811E7BC -_0808083C: - movs r0, #0 -_0808083E: - pop {r4, r5, pc} - - thumb_func_start DoExitTransition -DoExitTransition: @ 0x08080840 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0808085C @ =gRoomTransition - movs r1, #1 - strb r1, [r0, #8] - adds r2, r0, #0 - adds r2, #0xc - ldrh r1, [r4, #6] - ldr r0, _08080860 @ =0x000003FF - cmp r1, r0 - bhi _08080864 - strh r1, [r2, #4] - b _08080872 - .align 2, 0 -_0808085C: .4byte gRoomTransition -_08080860: .4byte 0x000003FF -_08080864: - ldr r0, _08080880 @ =gRoomControls - ldr r0, [r0, #0x30] - ldrh r1, [r0, #0x2e] - ldr r3, _08080884 @ =0xFFFF8000 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2, #4] -_08080872: - ldrh r1, [r4, #8] - ldr r0, _08080888 @ =0x000003FF - cmp r1, r0 - bhi _0808088C - strh r1, [r2, #6] - b _0808089A - .align 2, 0 -_08080880: .4byte gRoomControls -_08080884: .4byte 0xFFFF8000 -_08080888: .4byte 0x000003FF -_0808088C: - ldr r0, _080808CC @ =gRoomControls - ldr r0, [r0, #0x30] - ldrh r1, [r0, #0x32] - ldr r3, _080808D0 @ =0xFFFF8000 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2, #6] -_0808089A: - ldrb r0, [r4, #0xb] - strb r0, [r2] - ldrb r0, [r4, #0xc] - strb r0, [r2, #1] - ldrb r0, [r4, #0xd] - strb r0, [r2, #8] - ldrb r0, [r4, #0xe] - strb r0, [r2, #3] - ldrb r0, [r4, #0xf] - strb r0, [r2, #2] - ldrh r0, [r4, #0x10] - cmp r0, #0 - beq _080808B8 - bl SoundReq -_080808B8: - ldr r0, _080808D4 @ =gUnk_0811E7C4 - ldrh r1, [r4] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r4, #0xa] - ldr r1, [r1] - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_080808CC: .4byte gRoomControls -_080808D0: .4byte 0xFFFF8000 -_080808D4: .4byte gUnk_0811E7C4 diff --git a/include/fileselect.h b/include/fileselect.h index 627c8778..f4fe832a 100644 --- a/include/fileselect.h +++ b/include/fileselect.h @@ -54,6 +54,7 @@ typedef struct { /*0x0b*/ SaveFile saves[3]; } struct_02019EE0; extern struct_02019EE0 gUnk_02019EE0; +// TODO size: 0x8000 from ClearTilemaps? extern void sub_08056FEC(u32, struct_020227E8*); extern void sub_0805F46C(u32, void*); diff --git a/include/room.h b/include/room.h index 56d1fa9b..1a2ab273 100644 --- a/include/room.h +++ b/include/room.h @@ -45,7 +45,7 @@ typedef struct { /*0x18*/ u16 filler2[3]; /*0x1E*/ u16 width; /*0x20*/ u16 height; - /*0x22*/ u8 filler3[2]; + /*0x22*/ u16 filler3; /*0x24*/ s8 aff_x; /*0x25*/ s8 aff_y; /*0x26*/ u8 filler26[2]; diff --git a/linker.ld b/linker.ld index 524b2992..24c3273b 100644 --- a/linker.ld +++ b/linker.ld @@ -634,9 +634,7 @@ SECTIONS { src/save.o(.text); src/screenTilemap.o(.text); src/script.o(.text); - asm/scroll.o(.text); src/scroll.o(.text); - asm/code_0808091C.o(.text); /* scroll.c */ /* objects */ src/object/itemOnGround.o(.text); src/object/deathFx.o(.text); diff --git a/src/scroll.c b/src/scroll.c index 7f8b99f8..360eadc3 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -4,11 +4,151 @@ #include "functions.h" #include "game.h" #include "map.h" +#include "asm.h" +#include "common.h" +#include "fileselect.h" extern void sub_08080BC4(void); extern u8 gUpdateVisibleTiles; +extern void (*const gUnk_0811E768[])(RoomControls*); + +void sub_0807FC7C(RoomControls*); +void sub_080805F8(void); + +extern void (*const gUnk_0811E780[])(RoomControls*); + +extern void (*const gUnk_0811E794[])(RoomControls*); + +extern u8 gMapDataTopSpecial[]; + +void UpdateScroll(void) { + gRoomControls.scroll_flags &= 0xfb; + gUnk_0811E768[gRoomControls.unk3](&gRoomControls); +} + +void sub_0807FC64(RoomControls* controls) { + controls->unk3 = 1; + controls->reload_flags = 0; + controls->unk5 = 4; + sub_0807FC7C(controls); + sub_080805F8(); +} + +ASM_FUNC("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls)) + +void sub_0807FDB0(RoomControls* controls) { + gUnk_0811E780[controls->unk4](controls); +} + +void sub_0807FDC8(RoomControls* controls) { + gUpdateVisibleTiles = 1; + UpdateScrollVram(); + controls->unk4 = 1; + gUpdateVisibleTiles = 0; +} + +void sub_0807FDE4(RoomControls* controls) { + controls->unk4 = 2; + controls->filler2[0] = 0; + gUpdateVisibleTiles = 2; +} + +ASM_FUNC("asm/non_matching/scroll/sub_0807FDF8.inc", void sub_0807FDF8()) + +void sub_0807FEC8(RoomControls* this) { + this->unk3 = 0; + MemFill32(0xffffffff, gPlayerState.path_memory, 0x40); + gPlayerState.startPosX = this->camera_target->x.HALF.HI; + gPlayerState.startPosY = this->camera_target->y.HALF.HI; +} + +void sub_0807FEF0(RoomControls* controls) { + extern void (*const gUnk_0811E78C[])(RoomControls*); + gUnk_0811E78C[controls->unk4](controls); +} + +void sub_0807FF08(RoomControls* controls) { + controls->unk4 = 1; + controls->filler2[0] = 0; + gUpdateVisibleTiles = 3; +} + +void sub_0807FF1C(RoomControls* controls) { + if ((gRoomTransition.frameCount & 1U) == 0) { + gUpdateVisibleTiles = 3; + if (++controls->filler2[0] > 0x13) { + controls->unk3 = 0; + ResetSystemPriority(); + } + } +} + +void sub_0807FF54(RoomControls* controls) { + gUnk_0811E794[controls->unk4](controls); +} + +ASM_FUNC("asm/non_matching/scroll/sub_0807FF6C.inc", void sub_0807FF6C()) + +ASM_FUNC("asm/non_matching/scroll/sub_0807FFE4.inc", void sub_0807FFE4()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080040.inc", void sub_08080040()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080108.inc", void sub_08080108()) + +void sub_08080198(RoomControls* controls) { + controls->unk4 = 5; + controls->filler2[2] = 0xff; + LoadRoom(); + CallRoomProp5And7(); + gUpdateVisibleTiles = 0; + sub_080805F8(); +} + +ASM_FUNC("asm/non_matching/scroll/sub_080801BC.inc", void sub_080801BC()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", void sub_08080278()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080368.inc", void sub_08080368()) + +ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", void sub_080803D0()) + +void sub_080805F8(void) { + switch (gRoomControls.area) { + case 0xc: + case 0x0f: + case 0x13: + case 0x14: + case 0x16: + case 0x17: + case 0x19: + gUnk_03004030.unk_08 = 1; + return; + } + gUnk_03004030.unk_08 = 0; +} + +void ClearTilemaps(void) { + MemClear(&gRoomControls, 0x38); + MemClear(&gUnk_03004030, 0xc); + gRoomControls.filler3 = 0xffff; + gUnk_03004030.unk_0a = 0xff; + gUnk_02034480.unk_00 = 0; + MemClear(&gUnk_02019EE0, 0x8000); + MemClear(&gMapDataTopSpecial, 0x8000); +} + +ASM_FUNC("asm/non_matching/scroll/sub_080806BC.inc", bool32 sub_080806BC(u32 a, u32 b, u32 c, u32 d)) + +ASM_FUNC("asm/non_matching/scroll/sub_08080734.inc", void sub_08080734()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080794.inc", void sub_08080794()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080808.inc", void sub_08080808()) + +ASM_FUNC("asm/non_matching/scroll/DoExitTransition.inc", void DoExitTransition(const ScreenTransitionData* data)) + void sub_080808D8(void) { gRoomTransition.type = TRANSITION_DEFAULT; } @@ -122,3 +262,13 @@ void sub_080809D4(void) { sub_08080BC4(); gUpdateVisibleTiles = 1; } + +ASM_FUNC("asm/non_matching/scroll/UpdateDoorTransition.inc", void UpdateDoorTransition()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080BC4.inc", void sub_08080BC4()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80()) + +ASM_FUNC("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* a)) From 052bacdbadfe4fc729f1d322cdbc58b2c73b23e9 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:03:41 +0100 Subject: [PATCH 5/5] Merge and split game --- asm/code_080526F8.s | 1712 ----------------- asm/code_0805436C.s | 207 -- asm/modArrows.s | 40 - asm/modBombs.s | 40 - .../figurineDevice/sub_08088328.inc | 4 +- asm/non_matching/game/GiveItem.inc | 314 +++ asm/non_matching/game/sub_08053758.inc | 72 + asm/non_matching/game/sub_08053800.inc | 67 + asm/non_matching/game/sub_08053894.inc | 57 + asm/non_matching/game/sub_08053904.inc | 57 + asm/non_matching/game/sub_08053CC8.inc | 47 + asm/non_matching/game/sub_0805488C.inc | 40 + asm/non_matching/game/sub_08054920.inc | 33 + asm/non_matching/game/sub_08054974.inc | 70 + asm/non_matching/game/sub_08054A14.inc | 22 + linker.ld | 17 +- src/code_0805436C.c | 403 ---- src/game.c | 924 ++++++++- src/object/figurineDevice.c | 2 +- 19 files changed, 1683 insertions(+), 2445 deletions(-) delete mode 100644 asm/code_080526F8.s delete mode 100644 asm/code_0805436C.s delete mode 100644 asm/modArrows.s delete mode 100644 asm/modBombs.s create mode 100644 asm/non_matching/game/GiveItem.inc create mode 100644 asm/non_matching/game/sub_08053758.inc create mode 100644 asm/non_matching/game/sub_08053800.inc create mode 100644 asm/non_matching/game/sub_08053894.inc create mode 100644 asm/non_matching/game/sub_08053904.inc create mode 100644 asm/non_matching/game/sub_08053CC8.inc create mode 100644 asm/non_matching/game/sub_0805488C.inc create mode 100644 asm/non_matching/game/sub_08054920.inc create mode 100644 asm/non_matching/game/sub_08054974.inc create mode 100644 asm/non_matching/game/sub_08054A14.inc delete mode 100644 src/code_0805436C.c diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s deleted file mode 100644 index 9a00adcf..00000000 --- a/asm/code_080526F8.s +++ /dev/null @@ -1,1712 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start CutsceneMain_Init -CutsceneMain_Init: @ 0x08053590 - push {lr} - ldr r1, _080535A4 @ =gUnk_080FCBB4 - ldr r0, _080535A8 @ =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 -_080535A4: .4byte gUnk_080FCBB4 -_080535A8: .4byte gMenu - - thumb_func_start sub_080535AC -sub_080535AC: @ 0x080535AC - push {lr} - ldr r2, _080535DC @ =gMenu - movs r1, #1 - strb r1, [r2, #6] - movs r0, #0x78 - strh r0, [r2, #8] - ldr r0, _080535E0 @ =gUnk_02032EC0 - strb r1, [r0, #6] - ldr r0, _080535E4 @ =gUpdateVisibleTiles - strb r1, [r0] - ldr r2, _080535E8 @ =gScreen - ldrh r1, [r2] - ldr r0, _080535EC @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r0, _080535F0 @ =gUnk_080FCB94 - bl LoadRoomEntityList - movs r0, #6 - movs r1, #8 - bl SetFade - pop {pc} - .align 2, 0 -_080535DC: .4byte gMenu -_080535E0: .4byte gUnk_02032EC0 -_080535E4: .4byte gUpdateVisibleTiles -_080535E8: .4byte gScreen -_080535EC: .4byte 0x0000FEFF -_080535F0: .4byte gUnk_080FCB94 - - thumb_func_start sub_080535F4 -sub_080535F4: @ 0x080535F4 - push {lr} - ldr r0, _0805360C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053608 - bl ResetSystemPriority - ldr r1, _08053610 @ =gMenu - movs r0, #2 - strb r0, [r1, #6] -_08053608: - pop {pc} - .align 2, 0 -_0805360C: .4byte gFadeControl -_08053610: .4byte gMenu - - thumb_func_start nullsub_481 -nullsub_481: @ 0x08053614 - bx lr - .align 2, 0 - - thumb_func_start sub_08053618 -sub_08053618: @ 0x08053618 - push {lr} - ldr r1, _08053630 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805362C - bl sub_08052004 -_0805362C: - pop {pc} - .align 2, 0 -_08053630: .4byte gMenu - - thumb_func_start sub_08053634 -sub_08053634: @ 0x08053634 - push {lr} - ldr r1, _08053644 @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - bl MessageInitialize - pop {pc} - .align 2, 0 -_08053644: .4byte gUnk_02032EC0 - - thumb_func_start sub_08053648 -sub_08053648: @ 0x08053648 - push {lr} - movs r0, #0x2d - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08053674 - ldr r0, _08053678 @ =gRoomControls - movs r3, #0xb4 - lsls r3, r3, #2 - adds r1, r3, #0 - ldrh r3, [r0, #6] - adds r1, r1, r3 - strh r1, [r2, #0x2e] - movs r3, #0xa4 - lsls r3, r3, #1 - adds r1, r3, #0 - ldrh r0, [r0, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] -_08053674: - pop {pc} - .align 2, 0 -_08053678: .4byte gRoomControls - - thumb_func_start sub_0805367C -sub_0805367C: @ 0x0805367C - ldr r1, _08053688 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053688: .4byte gMenu - - thumb_func_start sub_0805368C -sub_0805368C: @ 0x0805368C - push {lr} - movs r0, #6 - movs r1, #0x5d - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - beq _080536A6 - bl DeleteEntity - movs r0, #0xf0 - bl SoundReq -_080536A6: - pop {pc} - - thumb_func_start sub_080536A8 -sub_080536A8: @ 0x080536A8 - push {lr} - movs r0, #5 - movs r1, #5 - movs r2, #4 - movs r3, #0x10 - bl sub_080A71C4 - pop {pc} - - thumb_func_start sub_080536B8 -sub_080536B8: @ 0x080536B8 - push {lr} - movs r0, #5 - movs r1, #3 - movs r2, #4 - movs r3, #4 - bl sub_080A71C4 - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_080536D4 -sub_080536D4: @ 0x080536D4 - push {lr} - ldr r1, _080536E8 @ =gUnk_080FCCFC - ldr r0, _080536EC @ =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 -_080536E8: .4byte gUnk_080FCCFC -_080536EC: .4byte gMenu - - thumb_func_start sub_080536F0 -sub_080536F0: @ 0x080536F0 - push {lr} - ldr r1, _08053704 @ =gUnk_080FCD38 - ldr r0, _08053708 @ =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 -_08053704: .4byte gUnk_080FCD38 -_08053708: .4byte gMenu - - thumb_func_start sub_0805370C -sub_0805370C: @ 0x0805370C - push {lr} - ldr r1, _08053730 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053734 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - bl sub_08051FF0 - ldr r0, _08053738 @ =gUnk_080FCC54 - bl LoadRoomEntityList - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {pc} - .align 2, 0 -_08053730: .4byte gMenu -_08053734: .4byte gUpdateVisibleTiles -_08053738: .4byte gUnk_080FCC54 - - thumb_func_start sub_0805373C -sub_0805373C: @ 0x0805373C - push {lr} - ldr r1, _08053750 @ =gUnk_080FCD40 - ldr r0, _08053754 @ =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 -_08053750: .4byte gUnk_080FCD40 -_08053754: .4byte gMenu - - thumb_func_start sub_08053758 -sub_08053758: @ 0x08053758 - push {r4, lr} - ldr r1, _080537DC @ =gMenu - movs r2, #0 - movs r3, #1 - strb r3, [r1, #6] - movs r4, #0 - movs r0, #0x78 - strh r0, [r1, #8] - movs r0, #0x1e - strh r0, [r1, #0xa] - strb r4, [r1, #0x10] - ldr r0, _080537E0 @ =gUnk_02032EC0 - strb r3, [r0, #6] - ldr r0, _080537E4 @ =gMapBottom - str r2, [r0] - ldr r0, _080537E8 @ =gMapTop - str r2, [r0] - ldr r0, _080537EC @ =gRoomControls - str r2, [r0, #0x30] - strh r2, [r0, #0xc] - strh r2, [r0, #0xa] - bl sub_0801B170 - movs r0, #0 - bl DispReset - ldr r2, _080537F0 @ =gScreen - movs r0, #0x99 - lsls r0, r0, #6 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080537F4 @ =0x00002244 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - subs r1, #8 - movs r0, #0x1f - strh r0, [r1] - adds r1, #2 - movs r0, #0x3f - strh r0, [r1] - subs r1, #0xa - movs r0, #0xf0 - strh r0, [r1] - adds r1, #4 - movs r0, #0x60 - strh r0, [r1] - ldr r0, _080537F8 @ =0x00001C4E - strh r0, [r2, #0x14] - ldr r0, _080537FC @ =0x00001DC1 - strh r0, [r2, #0x20] - movs r0, #0xf - bl SoundReq - bl ResetSystemPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080537DC: .4byte gMenu -_080537E0: .4byte gUnk_02032EC0 -_080537E4: .4byte gMapBottom -_080537E8: .4byte gMapTop -_080537EC: .4byte gRoomControls -_080537F0: .4byte gScreen -_080537F4: .4byte 0x00002244 -_080537F8: .4byte 0x00001C4E -_080537FC: .4byte 0x00001DC1 - - thumb_func_start sub_08053800 -sub_08053800: @ 0x08053800 - push {r4, r5, lr} - ldr r0, _0805387C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805387A - ldr r1, _08053880 @ =gMenu - ldrb r5, [r1, #0x10] - lsls r4, r5, #1 - adds r4, r4, r5 - lsls r4, r4, #2 - ldr r0, _08053884 @ =gUnk_080FCCB4 - adds r4, r4, r0 - ldrh r0, [r4, #8] - movs r2, #0 - strh r0, [r1, #8] - movs r0, #0x1e - strh r0, [r1, #0xa] - ldrb r0, [r1, #0x10] - adds r0, #1 - strb r0, [r1, #0x10] - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - strb r2, [r1, #7] - adds r0, r5, #0 - adds r0, #0x8a - bl LoadPaletteGroup - adds r0, r5, #0 - adds r0, #0x3a - bl LoadGfxGroup - ldr r0, _08053888 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - ldr r0, _0805388C @ =0x00000F01 - adds r5, r5, r0 - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805F46C - ldr r2, _08053890 @ =gScreen - movs r0, #1 - strh r0, [r2, #0x1a] - adds r1, r2, #0 - adds r1, #0x68 - movs r0, #0x10 - strh r0, [r1] - ldrh r1, [r4, #4] - adds r0, r2, #0 - adds r0, #0x58 - strh r1, [r0] - ldrh r1, [r4, #6] - adds r0, #4 - strh r1, [r0] - ldrh r1, [r4, #0xa] - movs r0, #4 - bl SetFade -_0805387A: - pop {r4, r5, pc} - .align 2, 0 -_0805387C: .4byte gFadeControl -_08053880: .4byte gMenu -_08053884: .4byte gUnk_080FCCB4 -_08053888: .4byte gBG1Buffer -_0805388C: .4byte 0x00000F01 -_08053890: .4byte gScreen - - thumb_func_start sub_08053894 -sub_08053894: @ 0x08053894 - push {r4, lr} - ldr r0, _080538B4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080538F8 - ldr r1, _080538B8 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - ldrh r0, [r1, #0xa] - adds r4, r1, #0 - cmp r0, #0 - beq _080538BC - subs r0, #1 - strh r0, [r4, #0xa] - b _080538E4 - .align 2, 0 -_080538B4: .4byte gFadeControl -_080538B8: .4byte gMenu -_080538BC: - ldr r0, _080538FC @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080538E4 - ldrb r1, [r4, #7] - cmp r1, #0xf - bhi _080538E4 - adds r1, #1 - strb r1, [r4, #7] - lsls r1, r1, #0x18 - ldr r3, _08053900 @ =gScreen - lsrs r2, r1, #0x10 - lsrs r1, r1, #0x19 - movs r0, #0x10 - subs r0, r0, r1 - orrs r2, r0 - adds r3, #0x68 - strh r2, [r3] -_080538E4: - ldrh r0, [r4, #8] - cmp r0, #0 - bne _080538F8 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #5 - movs r1, #8 - bl SetFade -_080538F8: - pop {r4, pc} - .align 2, 0 -_080538FC: .4byte gRoomTransition -_08053900: .4byte gScreen - - thumb_func_start sub_08053904 -sub_08053904: @ 0x08053904 - push {r4, lr} - ldr r0, _08053924 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053968 - ldr r1, _08053928 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - ldrh r0, [r1, #0xa] - adds r4, r1, #0 - cmp r0, #0 - beq _0805392C - subs r0, #1 - strh r0, [r4, #0xa] - b _08053954 - .align 2, 0 -_08053924: .4byte gFadeControl -_08053928: .4byte gMenu -_0805392C: - ldr r0, _0805396C @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _08053954 - ldrb r1, [r4, #7] - cmp r1, #0xf - bhi _08053954 - adds r1, #1 - strb r1, [r4, #7] - lsls r1, r1, #0x18 - ldr r3, _08053970 @ =gScreen - lsrs r2, r1, #0x10 - lsrs r1, r1, #0x19 - movs r0, #0x10 - subs r0, r0, r1 - orrs r2, r0 - adds r3, #0x68 - strh r2, [r3] -_08053954: - ldrh r0, [r4, #8] - cmp r0, #0 - bne _08053968 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #5 - movs r1, #1 - bl SetFade -_08053968: - pop {r4, pc} - .align 2, 0 -_0805396C: .4byte gRoomTransition -_08053970: .4byte gScreen - - thumb_func_start sub_08053974 -sub_08053974: @ 0x08053974 - push {lr} - ldr r0, _080539AC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080539A8 - bl InitFade - movs r0, #1 - bl DispReset - bl SetBGDefaults - bl sub_08051F78 - ldr r0, _080539B0 @ =gUnk_080FCBC4 - bl LoadRoomEntityList - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - ldr r1, _080539B4 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_080539A8: - pop {pc} - .align 2, 0 -_080539AC: .4byte gFadeControl -_080539B0: .4byte gUnk_080FCBC4 -_080539B4: .4byte gMenu - - thumb_func_start nullsub_482 -nullsub_482: @ 0x080539B8 - bx lr - .align 2, 0 - - thumb_func_start sub_080539BC -sub_080539BC: @ 0x080539BC - push {lr} - bl SetBGDefaults - bl DeleteAllEntities - movs r0, #0x22 - movs r1, #0x11 - movs r2, #0 - movs r3, #0 - bl sub_08051F9C - movs r0, #0x22 - movs r1, #0x11 - bl sub_0804B0B0 - ldr r0, _080539EC @ =gUnk_080FCC14 - bl LoadRoomEntityList - ldr r1, _080539F0 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - pop {pc} - .align 2, 0 -_080539EC: .4byte gUnk_080FCC14 -_080539F0: .4byte gMenu - - thumb_func_start sub_080539F4 -sub_080539F4: @ 0x080539F4 - push {lr} - ldr r0, _08053A14 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053A10 - movs r0, #1 - bl DispReset - ldr r0, _08053A18 @ =gMenu - ldrb r1, [r0, #6] - adds r1, #1 - strb r1, [r0, #6] - movs r1, #0x3c - strh r1, [r0, #8] -_08053A10: - pop {pc} - .align 2, 0 -_08053A14: .4byte gFadeControl -_08053A18: .4byte gMenu - - thumb_func_start sub_08053A1C -sub_08053A1C: @ 0x08053A1C - push {r4, lr} - ldr r1, _08053A50 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053A4E - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r4, #8 - movs r0, #8 - strh r0, [r1, #8] - ldr r0, _08053A54 @ =0x00000F07 - bl MessageFromTarget - ldr r1, _08053A58 @ =gMessage - movs r0, #1 - strb r0, [r1, #6] - strb r4, [r1, #7] - movs r0, #4 - movs r1, #8 - bl SetFade -_08053A4E: - pop {r4, pc} - .align 2, 0 -_08053A50: .4byte gMenu -_08053A54: .4byte 0x00000F07 -_08053A58: .4byte gMessage - - thumb_func_start sub_08053A5C -sub_08053A5C: @ 0x08053A5C - push {lr} - ldr r0, _08053A88 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08053A86 - ldr r1, _08053A8C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053A86 - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #5 - movs r1, #8 - bl SetFade -_08053A86: - pop {pc} - .align 2, 0 -_08053A88: .4byte gMessage -_08053A8C: .4byte gMenu - - thumb_func_start sub_08053A90 -sub_08053A90: @ 0x08053A90 - push {lr} - ldr r0, _08053AA8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053AA4 - ldr r1, _08053AAC @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - bl SetBGDefaults -_08053AA4: - pop {pc} - .align 2, 0 -_08053AA8: .4byte gFadeControl -_08053AAC: .4byte gUnk_02032EC0 - - thumb_func_start sub_08053AB0 -sub_08053AB0: @ 0x08053AB0 - push {lr} - ldr r1, _08053AC4 @ =gUnk_080FCDD4 - ldr r0, _08053AC8 @ =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 -_08053AC4: .4byte gUnk_080FCDD4 -_08053AC8: .4byte gMenu - - thumb_func_start sub_08053ACC -sub_08053ACC: @ 0x08053ACC - push {lr} - ldr r1, _08053AF4 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053AF8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - bl sub_08051FF0 - ldr r0, _08053AFC @ =gUnk_080FCD84 - bl LoadRoomEntityList - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 -_08053AF4: .4byte gMenu -_08053AF8: .4byte gUpdateVisibleTiles -_08053AFC: .4byte gUnk_080FCD84 - - thumb_func_start sub_08053B00 -sub_08053B00: @ 0x08053B00 - ldr r1, _08053B0C @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053B0C: .4byte gMenu - - thumb_func_start sub_08053B10 -sub_08053B10: @ 0x08053B10 - push {lr} - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - beq _08053B34 - ldr r0, _08053B38 @ =gMenu - ldrb r1, [r0, #5] - adds r1, #1 - strb r1, [r0, #5] - movs r0, #1 - bl DispReset - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl SetFade -_08053B34: - pop {pc} - .align 2, 0 -_08053B38: .4byte gMenu - - thumb_func_start sub_08053B3C -sub_08053B3C: @ 0x08053B3C - push {r4, lr} - movs r4, #0x80 - lsls r4, r4, #1 - movs r0, #5 - movs r1, #4 - movs r2, #5 - adds r3, r4, #0 - bl sub_080A71C4 - movs r0, #5 - adds r1, r4, #0 - bl SetFade - pop {r4, pc} - - thumb_func_start sub_08053B58 -sub_08053B58: @ 0x08053B58 - push {lr} - ldr r1, _08053B6C @ =gUnk_080FCEB0 - ldr r0, _08053B70 @ =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 -_08053B6C: .4byte gUnk_080FCEB0 -_08053B70: .4byte gMenu - - thumb_func_start sub_08053B74 -sub_08053B74: @ 0x08053B74 - push {lr} - ldr r1, _08053BA0 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053BA4 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r0, _08053BA8 @ =gUnk_080FCDE0 - bl LoadRoomEntityList - bl ResetSystemPriority - bl ResetEntityPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 -_08053BA0: .4byte gMenu -_08053BA4: .4byte gUpdateVisibleTiles -_08053BA8: .4byte gUnk_080FCDE0 - - thumb_func_start sub_08053BAC -sub_08053BAC: @ 0x08053BAC - ldr r1, _08053BB8 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053BB8: .4byte gMenu - - thumb_func_start sub_08053BBC -sub_08053BBC: @ 0x08053BBC - push {lr} - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - beq _08053BE0 - ldr r0, _08053BE4 @ =gMenu - ldrb r1, [r0, #5] - adds r1, #1 - strb r1, [r0, #5] - movs r0, #1 - bl DispReset - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl SetFade -_08053BE0: - pop {pc} - .align 2, 0 -_08053BE4: .4byte gMenu - - thumb_func_start sub_08053BE8 -sub_08053BE8: @ 0x08053BE8 - push {r4, lr} - movs r4, #0x80 - lsls r4, r4, #1 - movs r0, #5 - movs r1, #2 - movs r2, #5 - adds r3, r4, #0 - bl sub_080A71C4 - movs r0, #5 - adds r1, r4, #0 - bl SetFade - pop {r4, pc} - - thumb_func_start sub_08053C04 -sub_08053C04: @ 0x08053C04 - push {lr} - ldr r1, _08053C18 @ =gUnk_080FCEEC - ldr r0, _08053C1C @ =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 -_08053C18: .4byte gUnk_080FCEEC -_08053C1C: .4byte gMenu - - thumb_func_start sub_08053C20 -sub_08053C20: @ 0x08053C20 - push {lr} - ldr r1, _08053C50 @ =gMenu - movs r2, #1 - strb r2, [r1, #6] - movs r0, #0x78 - strh r0, [r1, #8] - ldr r0, _08053C54 @ =gUpdateVisibleTiles - strb r2, [r0] - bl sub_08051FF0 - movs r0, #4 - bl sub_0805B4D0 - ldr r0, _08053C58 @ =gUnk_080FCEBC - bl LoadRoomEntityList - movs r0, #4 - movs r1, #0x10 - bl SetFade - movs r0, #0x33 - bl SoundReq - pop {pc} - .align 2, 0 -_08053C50: .4byte gMenu -_08053C54: .4byte gUpdateVisibleTiles -_08053C58: .4byte gUnk_080FCEBC - - thumb_func_start nullsub_483 -nullsub_483: @ 0x08053C5C - bx lr - .align 2, 0 - - thumb_func_start sub_08053C60 -sub_08053C60: @ 0x08053C60 - push {lr} - movs r0, #5 - movs r1, #2 - bl SetFade - movs r0, #0xf4 - bl SoundReq - ldr r0, _08053C80 @ =0x80100000 - bl SoundReq - movs r0, #3 - bl SetTask - pop {pc} - .align 2, 0 -_08053C80: .4byte 0x80100000 - - thumb_func_start sub_08053C84 -sub_08053C84: @ 0x08053C84 - ldr r1, _08053C8C @ =gMenu - movs r0, #2 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053C8C: .4byte gMenu - - thumb_func_start CutsceneMain_Exit -CutsceneMain_Exit: @ 0x08053C90 - push {lr} - ldr r1, _08053CA4 @ =gUnk_080FCEF8 - ldr r0, _08053CA8 @ =gMenu - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053CA4: .4byte gUnk_080FCEF8 -_08053CA8: .4byte gMenu - - thumb_func_start sub_08053CAC -sub_08053CAC: @ 0x08053CAC - push {lr} - ldr r1, _08053CC0 @ =gUnk_080FCFA4 - ldr r0, _08053CC4 @ =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 -_08053CC0: .4byte gUnk_080FCFA4 -_08053CC4: .4byte gMenu - - thumb_func_start sub_08053CC8 -sub_08053CC8: @ 0x08053CC8 - push {r4, r5, r6, lr} - ldr r6, _08053D20 @ =gMenu - ldrb r4, [r6, #3] - lsls r4, r4, #4 - ldr r0, _08053D24 @ =gUnk_080FCF04 - adds r4, r4, r0 - adds r0, r4, #0 - adds r0, #8 - str r0, [r6, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #1 - bl GetRoomProperty - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #2 - bl GetRoomProperty - bl LoadRoomEntityList - movs r5, #1 - strb r5, [r6, #6] - ldr r2, _08053D28 @ =gScreen - ldrh r1, [r2] - ldr r0, _08053D2C @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r0, _08053D30 @ =gUpdateVisibleTiles - strb r5, [r0] - movs r0, #4 - movs r1, #0x10 - bl SetFade - ldrb r0, [r4, #5] - cmp r0, #0x1d - bne _08053D1E - strh r5, [r6, #0xa] -_08053D1E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08053D20: .4byte gMenu -_08053D24: .4byte gUnk_080FCF04 -_08053D28: .4byte gScreen -_08053D2C: .4byte 0x0000FEFF -_08053D30: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08053D34 -sub_08053D34: @ 0x08053D34 - push {r4, lr} - ldr r1, _08053D88 @ =gMenu - ldrh r0, [r1, #0xa] - cmp r0, #0 - beq _08053D72 - movs r0, #0 - strh r0, [r1, #0xa] - movs r4, #0xd0 - lsls r4, r4, #3 - adds r0, r4, #0 - movs r1, #0x3d - bl CheckLocalFlagByBank - cmp r0, #0 - beq _08053D5C - movs r0, #0x74 - movs r1, #0xc4 - movs r2, #1 - bl SetTileType -_08053D5C: - adds r0, r4, #0 - movs r1, #0x3e - bl CheckLocalFlagByBank - cmp r0, #0 - beq _08053D72 - movs r0, #0x74 - movs r1, #0xcc - movs r2, #1 - bl SetTileType -_08053D72: - ldr r0, _08053D8C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053D86 - ldr r1, _08053D88 @ =gMenu - movs r0, #0x78 - strh r0, [r1, #8] - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08053D86: - pop {r4, pc} - .align 2, 0 -_08053D88: .4byte gMenu -_08053D8C: .4byte gFadeControl - - thumb_func_start sub_08053D90 -sub_08053D90: @ 0x08053D90 - push {lr} - ldr r1, _08053DB0 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053DAC - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #0x10 - bl SetFadeInverted -_08053DAC: - pop {pc} - .align 2, 0 -_08053DB0: .4byte gMenu - - thumb_func_start sub_08053DB4 -sub_08053DB4: @ 0x08053DB4 - push {r4, r5, lr} - ldr r0, _08053E20 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053E1C - ldr r5, _08053E24 @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08053E28 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, _08053E2C @ =gRoomControls - movs r0, #6 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r1, #0xa] - movs r0, #7 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xc] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #1 - bl GetRoomProperty - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #2 - bl GetRoomProperty - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r5, #8] - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - movs r0, #0x10 - bl SetFadeInverted -_08053E1C: - pop {r4, r5, pc} - .align 2, 0 -_08053E20: .4byte gFadeControl -_08053E24: .4byte gMenu -_08053E28: .4byte gUpdateVisibleTiles -_08053E2C: .4byte gRoomControls - - thumb_func_start sub_08053E30 -sub_08053E30: @ 0x08053E30 - push {lr} - ldr r0, _08053E50 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053E4E - ldr r1, _08053E54 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053E4E - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08053E4E: - pop {pc} - .align 2, 0 -_08053E50: .4byte gFadeControl -_08053E54: .4byte gMenu - - thumb_func_start sub_08053E58 -sub_08053E58: @ 0x08053E58 - push {lr} - ldr r1, _08053E6C @ =gUnk_080FD108 - ldr r0, _08053E70 @ =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 -_08053E6C: .4byte gUnk_080FD108 -_08053E70: .4byte gMenu - - thumb_func_start sub_08053E74 -sub_08053E74: @ 0x08053E74 - push {r4, lr} - ldr r0, _08053EB0 @ =gUnk_080FCFB8 - ldr r4, _08053EB4 @ =gMenu - str r0, [r4, #0xc] - ldr r0, [r0] - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r4, #8] - movs r0, #0x3c - strh r0, [r4, #0xa] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r2, _08053EB8 @ =gScreen - ldrh r1, [r2] - ldr r0, _08053EBC @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r1, _08053EC0 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #1 - bl SetMinPriority - movs r0, #4 - movs r1, #8 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08053EB0: .4byte gUnk_080FCFB8 -_08053EB4: .4byte gMenu -_08053EB8: .4byte gScreen -_08053EBC: .4byte 0x0000FEFF -_08053EC0: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08053EC4 -sub_08053EC4: @ 0x08053EC4 - push {r4, lr} - ldr r0, _08053EF4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053EF0 - ldr r4, _08053EF8 @ =gMenu - ldrh r0, [r4, #0xa] - subs r0, #1 - strh r0, [r4, #0xa] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053EF0 - ldr r1, [r4, #0xc] - adds r0, r1, #0 - adds r0, #0xc - str r0, [r4, #0xc] - ldr r0, [r1, #4] - bl LoadRoomEntityList - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] -_08053EF0: - pop {r4, pc} - .align 2, 0 -_08053EF4: .4byte gFadeControl -_08053EF8: .4byte gMenu - - thumb_func_start sub_08053EFC -sub_08053EFC: @ 0x08053EFC - push {lr} - ldr r1, _08053F1C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053F18 - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #8 - bl SetFadeInverted -_08053F18: - pop {pc} - .align 2, 0 -_08053F1C: .4byte gMenu - - thumb_func_start sub_08053F20 -sub_08053F20: @ 0x08053F20 - push {r4, r5, lr} - ldr r0, _08053F78 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053F74 - bl DeleteAllEntities - ldr r5, _08053F7C @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #8] - ldrb r1, [r4, #9] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08053F80 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, _08053F84 @ =gRoomControls - movs r0, #0xa - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r1, #0xa] - movs r0, #0xb - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xc] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r5, #8] - movs r0, #0x3c - strh r0, [r5, #0xa] - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - movs r0, #8 - bl SetFadeInverted -_08053F74: - pop {r4, r5, pc} - .align 2, 0 -_08053F78: .4byte gFadeControl -_08053F7C: .4byte gMenu -_08053F80: .4byte gUpdateVisibleTiles -_08053F84: .4byte gRoomControls - - thumb_func_start sub_08053F88 -sub_08053F88: @ 0x08053F88 - push {lr} - ldr r0, _08053FAC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053FAA - ldr r1, _08053FB0 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053FAA - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] - bl ResetEntityPriority -_08053FAA: - pop {pc} - .align 2, 0 -_08053FAC: .4byte gFadeControl -_08053FB0: .4byte gMenu - - thumb_func_start CutsceneMain_Update -CutsceneMain_Update: @ 0x08053FB4 - push {lr} - ldr r1, _08053FC8 @ =gUnk_080FD138 - ldr r0, _08053FCC @ =gMenu - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053FC8: .4byte gUnk_080FD138 -_08053FCC: .4byte gMenu - - thumb_func_start GetSaleItemConfirmMessageID -GetSaleItemConfirmMessageID: @ 0x08053FD0 - lsls r0, r0, #3 - ldr r1, _08053FDC @ =gUnk_080FD964 - adds r0, r0, r1 - ldrh r0, [r0, #4] - bx lr - .align 2, 0 -_08053FDC: .4byte gUnk_080FD964 - - thumb_func_start GetItemPrice -GetItemPrice: @ 0x08053FE0 - lsls r0, r0, #3 - ldr r1, _08053FEC @ =gUnk_080FD964 - adds r0, r0, r1 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08053FEC: .4byte gUnk_080FD964 - - thumb_func_start GiveItem -GiveItem: @ 0x08053FF0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r7, r1, #0 - bl GetInventoryValue - adds r5, r0, #0 - lsls r1, r6, #3 - ldr r0, _08054010 @ =gItemMetaData - adds r4, r1, r0 - cmp r5, #0 - bne _08054014 - ldrh r0, [r4, #4] - mov r8, r0 - b _08054018 - .align 2, 0 -_08054010: .4byte gItemMetaData -_08054014: - ldrh r2, [r4, #6] - mov r8, r2 -_08054018: - adds r0, r6, #0 - bl ItemIsBottle - cmp r0, #0 - bne _08054034 - adds r0, r6, #0 - bl PutItemOnSlot - cmp r5, #0 - bne _08054034 - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 -_08054034: - ldrb r0, [r4, #1] - cmp r0, #0x12 - bls _0805403C - b _0805427C -_0805403C: - lsls r0, r0, #2 - ldr r1, _08054048 @ =_0805404C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08054048: .4byte _0805404C -_0805404C: @ jump table - .4byte _0805427C @ case 0 - .4byte _08054098 @ case 1 - .4byte _080540A6 @ case 2 - .4byte _080540C0 @ case 3 - .4byte _08054104 @ case 4 - .4byte _0805414C @ case 5 - .4byte _08054154 @ case 6 - .4byte _08054194 @ case 7 - .4byte _080541B6 @ case 8 - .4byte _080541F0 @ case 9 - .4byte _08054212 @ case 10 - .4byte _080541F8 @ case 11 - .4byte _08054238 @ case 12 - .4byte _08054174 @ case 13 - .4byte _08054240 @ case 14 - .4byte _0805425C @ case 15 - .4byte _08054264 @ case 16 - .4byte _080541B0 @ case 17 - .4byte _0805417C @ case 18 -_08054098: - ldrb r0, [r4, #2] - bl ModHealth - movs r0, #0x71 - bl SoundReq - b _0805427C -_080540A6: - ldr r0, _080540BC @ =gUnk_080FD5A8 - ldrb r1, [r4, #2] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - bl ModRupees - movs r0, #0x6f - bl SoundReq - b _0805427C - .align 2, 0 -_080540BC: .4byte gUnk_080FD5A8 -_080540C0: - movs r5, #0 - movs r4, #0x1c - b _080540CA -_080540C6: - adds r4, r1, #1 - adds r5, #1 -_080540CA: - cmp r5, #3 - bls _080540D0 - b _0805427C -_080540D0: - adds r0, r4, #0 - bl GetInventoryValue - adds r1, r4, #0 - cmp r0, #0 - bne _080540C6 - adds r6, r4, #0 - ldr r0, _08054100 @ =gSave - adds r0, #0xb6 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, #0 - bne _080540EE - movs r0, #0x20 - strb r0, [r1] -_080540EE: - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 - adds r0, r6, #0 - bl PutItemOnSlot - b _0805427C - .align 2, 0 -_08054100: .4byte gSave -_08054104: - movs r5, #0 - ldr r0, _08054144 @ =gSave - adds r2, r0, #0 - adds r2, #0xb6 - ldrb r1, [r2] - adds r3, r0, #0 - cmp r1, #0x20 - beq _08054126 - adds r1, r2, #0 -_08054116: - adds r5, #1 - cmp r5, #3 - bls _0805411E - b _0805427C -_0805411E: - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, #0x20 - bne _08054116 -_08054126: - cmp r5, #3 - bls _0805412C - b _0805427C -_0805412C: - adds r0, r3, #0 - adds r0, #0xb6 - adds r0, r5, r0 - strb r6, [r0] - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 - ldr r0, _08054148 @ =0x00000109 - bl SoundReq - b _0805427C - .align 2, 0 -_08054144: .4byte gSave -_08054148: .4byte 0x00000109 -_0805414C: - movs r0, #1 - bl sub_080526F8 - b _0805424E -_08054154: - ldr r1, _08054168 @ =gSave - ldr r0, _0805416C @ =gArea - ldr r2, _08054170 @ =0x0000046C - adds r1, r1, r2 - ldrb r0, [r0, #3] - adds r1, r1, r0 - ldrb r0, [r1] - ldrb r2, [r4, #2] - orrs r0, r2 - b _0805427A - .align 2, 0 -_08054168: .4byte gSave -_0805416C: .4byte gArea -_08054170: .4byte 0x0000046C -_08054174: - movs r0, #0x72 - bl sub_0801E738 - b _0805427C -_0805417C: - cmp r6, #0xb - bne _0805418A - movs r0, #0xc - movs r1, #0 - bl sub_0807CAA0 - b _080541B0 -_0805418A: - movs r0, #0xb - movs r1, #0 - bl sub_0807CAA0 - b _080541B0 -_08054194: - cmp r6, #7 - bne _080541A2 - movs r0, #8 - movs r1, #0 - bl sub_0807CAA0 - b _080541AA -_080541A2: - movs r0, #7 - movs r1, #0 - bl sub_0807CAA0 -_080541AA: - movs r0, #0x63 - bl ModBombs -_080541B0: - bl LoadItemGfx - b _0805427C -_080541B6: - cmp r5, #0 - bne _080541CA - movs r0, #7 - movs r1, #1 - bl sub_0807CAA0 - movs r0, #7 - bl PutItemOnSlot - b _080541E2 -_080541CA: - ldr r0, _080541EC @ =gSave - adds r1, r0, #0 - adds r1, #0xae - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _080541E2 - movs r0, #3 - strb r0, [r1] -_080541E2: - movs r0, #0x63 - bl ModBombs - b _0805427C - .align 2, 0 -_080541EC: .4byte gSave -_080541F0: - ldrb r0, [r4, #2] - bl ModBombs - b _0805424E -_080541F8: - movs r0, #0x66 - bl GetInventoryValue - cmp r0, #0 - bne _0805420A - movs r0, #0x66 - movs r1, #1 - bl sub_0807CAA0 -_0805420A: - movs r0, #0x63 - bl ModArrows - b _080541B0 -_08054212: - ldr r0, _08054234 @ =gSave - adds r1, r0, #0 - adds r1, #0xaf - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805422A - movs r0, #3 - strb r0, [r1] -_0805422A: - movs r0, #0x63 - bl ModArrows - b _0805427C - .align 2, 0 -_08054234: .4byte gSave -_08054238: - ldrb r0, [r4, #2] - bl ModArrows - b _0805424E -_08054240: - movs r0, #0x3f - movs r1, #1 - bl sub_0807CAA0 - adds r0, r7, #0 - bl sub_080542C0 -_0805424E: - ldr r0, _08054258 @ =0x00000103 - bl SoundReq - b _0805427C - .align 2, 0 -_08054258: .4byte 0x00000103 -_0805425C: - adds r0, r7, #0 - bl sub_0801E738 - b _0805427C -_08054264: - ldr r0, _08054284 @ =gSave - adds r1, r0, #0 - adds r1, #0xa8 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805427C - movs r0, #3 -_0805427A: - strb r0, [r1] -_0805427C: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08054284: .4byte gSave - - thumb_func_start sub_08054288 -sub_08054288: @ 0x08054288 - push {lr} - ldr r1, _08054298 @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrh r0, [r0, #6] - bl MessageFromTarget - pop {pc} - .align 2, 0 -_08054298: .4byte gItemMetaData - - thumb_func_start sub_0805429C -sub_0805429C: @ 0x0805429C - ldr r1, _080542A8 @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrh r0, [r0, #4] - bx lr - .align 2, 0 -_080542A8: .4byte gItemMetaData - - thumb_func_start sub_080542AC -sub_080542AC: @ 0x080542AC - ldr r1, _080542BC @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r1, [r0, #3] - movs r0, #1 - ands r0, r1 - bx lr - .align 2, 0 -_080542BC: .4byte gItemMetaData - - thumb_func_start sub_080542C0 -sub_080542C0: @ 0x080542C0 - push {lr} - adds r2, r0, #0 - cmp r2, #0 - bne _080542CA - movs r2, #1 -_080542CA: - ldr r1, _080542DC @ =gSave - adds r0, r1, #0 - adds r0, #0xc2 - ldrh r0, [r0] - adds r2, r2, r0 - cmp r2, #0 - bge _080542E0 - movs r2, #0 - b _080542E8 - .align 2, 0 -_080542DC: .4byte gSave -_080542E0: - ldr r3, _080542F0 @ =0x000003E7 - cmp r2, r3 - ble _080542E8 - adds r2, r3, #0 -_080542E8: - adds r0, r1, #0 - adds r0, #0xc2 - strh r2, [r0] - pop {pc} - .align 2, 0 -_080542F0: .4byte 0x000003E7 - diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s deleted file mode 100644 index 631a6924..00000000 --- a/asm/code_0805436C.s +++ /dev/null @@ -1,207 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805488C -sub_0805488C: @ 0x0805488C - push {r4, lr} - ldr r4, _080548DC @ =gUnk_02032EC0 - ldrb r1, [r4, #3] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080548E0 @ =gUnk_080FE320 - adds r0, r0, r1 - ldr r2, _080548E4 @ =gMenu - ldrb r1, [r0] - movs r3, #0 - strb r1, [r2] - ldrb r1, [r0, #1] - strb r1, [r2, #3] - ldrb r1, [r4, #3] - strb r1, [r2, #4] - str r0, [r2, #0xc] - ldrb r0, [r2, #5] - adds r0, #1 - strb r0, [r2, #5] - strb r3, [r2, #6] - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r2, #8] - movs r0, #0 - bl DispReset - ldrb r0, [r4, #3] - movs r1, #1 - bl sub_08054974 - bl sub_0806F364 - movs r0, #0xff - bl ClearRoomFlag - bl sub_080548E8 - pop {r4, pc} - .align 2, 0 -_080548DC: .4byte gUnk_02032EC0 -_080548E0: .4byte gUnk_080FE320 -_080548E4: .4byte gMenu - - thumb_func_start sub_080548E8 -sub_080548E8: @ 0x080548E8 - push {lr} - ldr r1, _08054918 @ =gUnk_080FE2AC - ldr r0, _0805491C @ =gMenu - ldrb r0, [r0] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl FlushSprites - bl UpdateEntities - bl DrawEntities - bl CopyOAM - bl UpdateScroll - bl UpdateBgAnim - bl UpdateScrollVram - pop {pc} - .align 2, 0 -_08054918: .4byte gUnk_080FE2AC -_0805491C: .4byte gMenu - - thumb_func_start sub_08054920 -sub_08054920: @ 0x08054920 - push {lr} - bl MessageInitialize - bl sub_0806F38C - ldr r1, _08054948 @ =gUnk_080C9CBC - ldr r0, _0805494C @ =gFuseInfo - ldrb r0, [r0, #3] - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r0, [r0, #7] - cmp r0, #0 - beq _08054954 - ldr r0, _08054950 @ =gUnk_02032EC0 - ldrb r1, [r0, #3] - movs r0, #0xa - bl MenuFadeIn - b _08054962 - .align 2, 0 -_08054948: .4byte gUnk_080C9CBC -_0805494C: .4byte gFuseInfo -_08054950: .4byte gUnk_02032EC0 -_08054954: - ldr r1, _08054964 @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - movs r0, #7 - movs r1, #0x10 - bl SetFade -_08054962: - pop {pc} - .align 2, 0 -_08054964: .4byte gUnk_02032EC0 - - thumb_func_start sub_08054968 -sub_08054968: @ 0x08054968 - ldr r1, _08054970 @ =gMenu - movs r0, #2 - strb r0, [r1, #5] - bx lr - .align 2, 0 -_08054970: .4byte gMenu - - thumb_func_start sub_08054974 -sub_08054974: @ 0x08054974 - push {r4, r5, r6, lr} - adds r5, r1, #0 - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080549B0 @ =gUnk_080FE320 - adds r6, r1, r0 - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl SetCurrentRoomPropertyList - ldr r4, _080549B4 @ =gRoomControls - ldrb r0, [r6, #2] - strb r0, [r4, #4] - ldrb r0, [r6, #3] - strb r0, [r4, #5] - bl LoadGfxGroups - ldrb r0, [r4, #4] - bl GetFlagBankOffset - ldr r1, _080549B8 @ =gArea - strh r0, [r1, #4] - cmp r5, #0 - beq _080549BC - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl LoadAuxiliaryRoom - b _080549CE - .align 2, 0 -_080549B0: .4byte gUnk_080FE320 -_080549B4: .4byte gRoomControls -_080549B8: .4byte gArea -_080549BC: - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08054A00 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_080549CE: - ldr r2, _08054A04 @ =gScreen - ldrh r1, [r2] - ldr r0, _08054A08 @ =0x00001FFF - ands r0, r1 - strh r0, [r2] - ldr r1, _08054A0C @ =gRoomControls - ldrh r0, [r6, #4] - ldrh r2, [r1, #6] - adds r0, r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r6, #6] - ldrh r2, [r1, #8] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldrb r0, [r6, #2] - cmp r0, #2 - bne _080549F4 - bl TryLoadPrologueHyruleTown -_080549F4: - ldr r0, _08054A10 @ =gUnk_02032EC0 - ldrb r0, [r0, #3] - bl sub_08018710 - pop {r4, r5, r6, pc} - .align 2, 0 -_08054A00: .4byte gUpdateVisibleTiles -_08054A04: .4byte gScreen -_08054A08: .4byte 0x00001FFF -_08054A0C: .4byte gRoomControls -_08054A10: .4byte gUnk_02032EC0 - - thumb_func_start sub_08054A14 -sub_08054A14: @ 0x08054A14 - push {lr} - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08054A38 @ =gUnk_080FE320 - adds r2, r1, r0 - ldrb r0, [r2, #0x11] - cmp r0, #0xd - bhi _08054A34 - ldr r1, _08054A3C @ =gLocalFlagBanks - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r2, #0x12] - bl SetLocalFlagByBank -_08054A34: - pop {pc} - .align 2, 0 -_08054A38: .4byte gUnk_080FE320 -_08054A3C: .4byte gLocalFlagBanks diff --git a/asm/modArrows.s b/asm/modArrows.s deleted file mode 100644 index e7f105ed..00000000 --- a/asm/modArrows.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ModArrows -ModArrows: @ 0x08054330 - push {lr} - adds r3, r0, #0 - ldr r1, _08054354 @ =gSave - adds r0, r1, #0 - adds r0, #0xad - ldrb r0, [r0] - adds r3, r3, r0 - ldr r2, _08054358 @ =gQuiverSizes - adds r0, r1, #0 - adds r0, #0xaf - ldrb r0, [r0] - adds r0, r0, r2 - ldrb r2, [r0] - cmp r3, #0 - bge _0805435C - movs r3, #0 - b _08054362 - .align 2, 0 -_08054354: .4byte gSave -_08054358: .4byte gQuiverSizes -_0805435C: - cmp r2, r3 - bge _08054362 - adds r3, r2, #0 -_08054362: - adds r0, r1, #0 - adds r0, #0xad - strb r3, [r0] - pop {pc} - .align 2, 0 diff --git a/asm/modBombs.s b/asm/modBombs.s deleted file mode 100644 index b432a1f3..00000000 --- a/asm/modBombs.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ModBombs -ModBombs: @ 0x080542F4 - push {lr} - adds r3, r0, #0 - ldr r1, _08054318 @ =gSave - adds r0, r1, #0 - adds r0, #0xac - ldrb r0, [r0] - adds r3, r3, r0 - ldr r2, _0805431C @ =gBombBagSizes - adds r0, r1, #0 - adds r0, #0xae - ldrb r0, [r0] - adds r0, r0, r2 - ldrb r2, [r0] - cmp r3, #0 - bge _08054320 - movs r3, #0 - b _08054326 - .align 2, 0 -_08054318: .4byte gSave -_0805431C: .4byte gBombBagSizes -_08054320: - cmp r2, r3 - bge _08054326 - adds r3, r2, #0 -_08054326: - adds r0, r1, #0 - adds r0, #0xac - strb r3, [r0] - pop {pc} - .align 2, 0 diff --git a/asm/non_matching/figurineDevice/sub_08088328.inc b/asm/non_matching/figurineDevice/sub_08088328.inc index 07949bf6..449ae275 100644 --- a/asm/non_matching/figurineDevice/sub_08088328.inc +++ b/asm/non_matching/figurineDevice/sub_08088328.inc @@ -15,7 +15,7 @@ _08087CC6: adds r0, #0x81 ldrb r0, [r0] rsbs r0, r0, #0 - bl sub_080542C0 + bl ModShells bl Random movs r1, #0x7f ands r1, r0 @@ -141,7 +141,7 @@ _08088332: adds r0, #0x81 ldrb r0, [r0] rsbs r0, r0, #0 - bl sub_080542C0 + bl ModShells bl Random movs r1, #0x7f ands r1, r0 diff --git a/asm/non_matching/game/GiveItem.inc b/asm/non_matching/game/GiveItem.inc new file mode 100644 index 00000000..303a305f --- /dev/null +++ b/asm/non_matching/game/GiveItem.inc @@ -0,0 +1,314 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + adds r7, r1, #0 + bl GetInventoryValue + adds r5, r0, #0 + lsls r1, r6, #3 + ldr r0, _08054010 @ =gItemMetaData + adds r4, r1, r0 + cmp r5, #0 + bne _08054014 + ldrh r0, [r4, #4] + mov r8, r0 + b _08054018 + .align 2, 0 +_08054010: .4byte gItemMetaData +_08054014: + ldrh r2, [r4, #6] + mov r8, r2 +_08054018: + adds r0, r6, #0 + bl ItemIsBottle + cmp r0, #0 + bne _08054034 + adds r0, r6, #0 + bl PutItemOnSlot + cmp r5, #0 + bne _08054034 + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue +_08054034: + ldrb r0, [r4, #1] + cmp r0, #0x12 + bls _0805403C + b _0805427C +_0805403C: + lsls r0, r0, #2 + ldr r1, _08054048 @ =_0805404C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08054048: .4byte _0805404C +_0805404C: @ jump table + .4byte _0805427C @ case 0 + .4byte _08054098 @ case 1 + .4byte _080540A6 @ case 2 + .4byte _080540C0 @ case 3 + .4byte _08054104 @ case 4 + .4byte _0805414C @ case 5 + .4byte _08054154 @ case 6 + .4byte _08054194 @ case 7 + .4byte _080541B6 @ case 8 + .4byte _080541F0 @ case 9 + .4byte _08054212 @ case 10 + .4byte _080541F8 @ case 11 + .4byte _08054238 @ case 12 + .4byte _08054174 @ case 13 + .4byte _08054240 @ case 14 + .4byte _0805425C @ case 15 + .4byte _08054264 @ case 16 + .4byte _080541B0 @ case 17 + .4byte _0805417C @ case 18 +_08054098: + ldrb r0, [r4, #2] + bl ModHealth + movs r0, #0x71 + bl SoundReq + b _0805427C +_080540A6: + ldr r0, _080540BC @ =gUnk_080FD5A8 + ldrb r1, [r4, #2] + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] + bl ModRupees + movs r0, #0x6f + bl SoundReq + b _0805427C + .align 2, 0 +_080540BC: .4byte gUnk_080FD5A8 +_080540C0: + movs r5, #0 + movs r4, #0x1c + b _080540CA +_080540C6: + adds r4, r1, #1 + adds r5, #1 +_080540CA: + cmp r5, #3 + bls _080540D0 + b _0805427C +_080540D0: + adds r0, r4, #0 + bl GetInventoryValue + adds r1, r4, #0 + cmp r0, #0 + bne _080540C6 + adds r6, r4, #0 + ldr r0, _08054100 @ =gSave + adds r0, #0xb6 + adds r1, r5, r0 + ldrb r0, [r1] + cmp r0, #0 + bne _080540EE + movs r0, #0x20 + strb r0, [r1] +_080540EE: + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue + adds r0, r6, #0 + bl PutItemOnSlot + b _0805427C + .align 2, 0 +_08054100: .4byte gSave +_08054104: + movs r5, #0 + ldr r0, _08054144 @ =gSave + adds r2, r0, #0 + adds r2, #0xb6 + ldrb r1, [r2] + adds r3, r0, #0 + cmp r1, #0x20 + beq _08054126 + adds r1, r2, #0 +_08054116: + adds r5, #1 + cmp r5, #3 + bls _0805411E + b _0805427C +_0805411E: + adds r0, r5, r1 + ldrb r0, [r0] + cmp r0, #0x20 + bne _08054116 +_08054126: + cmp r5, #3 + bls _0805412C + b _0805427C +_0805412C: + adds r0, r3, #0 + adds r0, #0xb6 + adds r0, r5, r0 + strb r6, [r0] + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue + ldr r0, _08054148 @ =0x00000109 + bl SoundReq + b _0805427C + .align 2, 0 +_08054144: .4byte gSave +_08054148: .4byte 0x00000109 +_0805414C: + movs r0, #1 + bl sub_080526F8 + b _0805424E +_08054154: + ldr r1, _08054168 @ =gSave + ldr r0, _0805416C @ =gArea + ldr r2, _08054170 @ =0x0000046C + adds r1, r1, r2 + ldrb r0, [r0, #3] + adds r1, r1, r0 + ldrb r0, [r1] + ldrb r2, [r4, #2] + orrs r0, r2 + b _0805427A + .align 2, 0 +_08054168: .4byte gSave +_0805416C: .4byte gArea +_08054170: .4byte 0x0000046C +_08054174: + movs r0, #0x72 + bl sub_0801E738 + b _0805427C +_0805417C: + cmp r6, #0xb + bne _0805418A + movs r0, #0xc + movs r1, #0 + bl SetInventoryValue + b _080541B0 +_0805418A: + movs r0, #0xb + movs r1, #0 + bl SetInventoryValue + b _080541B0 +_08054194: + cmp r6, #7 + bne _080541A2 + movs r0, #8 + movs r1, #0 + bl SetInventoryValue + b _080541AA +_080541A2: + movs r0, #7 + movs r1, #0 + bl SetInventoryValue +_080541AA: + movs r0, #0x63 + bl ModBombs +_080541B0: + bl LoadItemGfx + b _0805427C +_080541B6: + cmp r5, #0 + bne _080541CA + movs r0, #7 + movs r1, #1 + bl SetInventoryValue + movs r0, #7 + bl PutItemOnSlot + b _080541E2 +_080541CA: + ldr r0, _080541EC @ =gSave + adds r1, r0, #0 + adds r1, #0xae + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _080541E2 + movs r0, #3 + strb r0, [r1] +_080541E2: + movs r0, #0x63 + bl ModBombs + b _0805427C + .align 2, 0 +_080541EC: .4byte gSave +_080541F0: + ldrb r0, [r4, #2] + bl ModBombs + b _0805424E +_080541F8: + movs r0, #0x66 + bl GetInventoryValue + cmp r0, #0 + bne _0805420A + movs r0, #0x66 + movs r1, #1 + bl SetInventoryValue +_0805420A: + movs r0, #0x63 + bl ModArrows + b _080541B0 +_08054212: + ldr r0, _08054234 @ =gSave + adds r1, r0, #0 + adds r1, #0xaf + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _0805422A + movs r0, #3 + strb r0, [r1] +_0805422A: + movs r0, #0x63 + bl ModArrows + b _0805427C + .align 2, 0 +_08054234: .4byte gSave +_08054238: + ldrb r0, [r4, #2] + bl ModArrows + b _0805424E +_08054240: + movs r0, #0x3f + movs r1, #1 + bl SetInventoryValue + adds r0, r7, #0 + bl ModShells +_0805424E: + ldr r0, _08054258 @ =0x00000103 + bl SoundReq + b _0805427C + .align 2, 0 +_08054258: .4byte 0x00000103 +_0805425C: + adds r0, r7, #0 + bl sub_0801E738 + b _0805427C +_08054264: + ldr r0, _08054284 @ =gSave + adds r1, r0, #0 + adds r1, #0xa8 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _0805427C + movs r0, #3 +_0805427A: + strb r0, [r1] +_0805427C: + mov r0, r8 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08054284: .4byte gSave + .syntax divided diff --git a/asm/non_matching/game/sub_08053758.inc b/asm/non_matching/game/sub_08053758.inc new file mode 100644 index 00000000..b1ed9345 --- /dev/null +++ b/asm/non_matching/game/sub_08053758.inc @@ -0,0 +1,72 @@ + .syntax unified + push {r4, lr} + ldr r1, _080537DC @ =gMenu + movs r2, #0 + movs r3, #1 + strb r3, [r1, #6] + movs r4, #0 + movs r0, #0x78 + strh r0, [r1, #8] + movs r0, #0x1e + strh r0, [r1, #0xa] + strb r4, [r1, #0x10] + ldr r0, _080537E0 @ =gUnk_02032EC0 + strb r3, [r0, #6] + ldr r0, _080537E4 @ =gMapBottom + str r2, [r0] + ldr r0, _080537E8 @ =gMapTop + str r2, [r0] + ldr r0, _080537EC @ =gRoomControls + str r2, [r0, #0x30] + strh r2, [r0, #0xc] + strh r2, [r0, #0xa] + bl sub_0801B170 + movs r0, #0 + bl DispReset + ldr r2, _080537F0 @ =gScreen + movs r0, #0x99 + lsls r0, r0, #6 + strh r0, [r2] + adds r1, r2, #0 + adds r1, #0x66 + ldr r0, _080537F4 @ =0x00002244 + strh r0, [r1] + adds r1, #2 + movs r0, #0x80 + lsls r0, r0, #5 + strh r0, [r1] + subs r1, #8 + movs r0, #0x1f + strh r0, [r1] + adds r1, #2 + movs r0, #0x3f + strh r0, [r1] + subs r1, #0xa + movs r0, #0xf0 + strh r0, [r1] + adds r1, #4 + movs r0, #0x60 + strh r0, [r1] + ldr r0, _080537F8 @ =0x00001C4E + strh r0, [r2, #0x14] + ldr r0, _080537FC @ =0x00001DC1 + strh r0, [r2, #0x20] + movs r0, #0xf + bl SoundReq + bl ResetSystemPriority + movs r1, #0x80 + lsls r1, r1, #1 + movs r0, #5 + bl SetFade + pop {r4, pc} + .align 2, 0 +_080537DC: .4byte gMenu +_080537E0: .4byte gUnk_02032EC0 +_080537E4: .4byte gMapBottom +_080537E8: .4byte gMapTop +_080537EC: .4byte gRoomControls +_080537F0: .4byte gScreen +_080537F4: .4byte 0x00002244 +_080537F8: .4byte 0x00001C4E +_080537FC: .4byte 0x00001DC1 + .syntax divided diff --git a/asm/non_matching/game/sub_08053800.inc b/asm/non_matching/game/sub_08053800.inc new file mode 100644 index 00000000..3cbbb182 --- /dev/null +++ b/asm/non_matching/game/sub_08053800.inc @@ -0,0 +1,67 @@ + .syntax unified + push {r4, r5, lr} + ldr r0, _0805387C @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _0805387A + ldr r1, _08053880 @ =gMenu + ldrb r5, [r1, #0x10] + lsls r4, r5, #1 + adds r4, r4, r5 + lsls r4, r4, #2 + ldr r0, _08053884 @ =gUnk_080FCCB4 + adds r4, r4, r0 + ldrh r0, [r4, #8] + movs r2, #0 + strh r0, [r1, #8] + movs r0, #0x1e + strh r0, [r1, #0xa] + ldrb r0, [r1, #0x10] + adds r0, #1 + strb r0, [r1, #0x10] + ldrb r0, [r1, #6] + adds r0, #1 + strb r0, [r1, #6] + strb r2, [r1, #7] + adds r0, r5, #0 + adds r0, #0x8a + bl LoadPaletteGroup + adds r0, r5, #0 + adds r0, #0x3a + bl LoadGfxGroup + ldr r0, _08053888 @ =gBG1Buffer + movs r1, #0x80 + lsls r1, r1, #4 + bl MemClear + ldr r0, _0805388C @ =0x00000F01 + adds r5, r5, r0 + ldr r1, [r4] + adds r0, r5, #0 + bl sub_0805F46C + ldr r2, _08053890 @ =gScreen + movs r0, #1 + strh r0, [r2, #0x1a] + adds r1, r2, #0 + adds r1, #0x68 + movs r0, #0x10 + strh r0, [r1] + ldrh r1, [r4, #4] + adds r0, r2, #0 + adds r0, #0x58 + strh r1, [r0] + ldrh r1, [r4, #6] + adds r0, #4 + strh r1, [r0] + ldrh r1, [r4, #0xa] + movs r0, #4 + bl SetFade +_0805387A: + pop {r4, r5, pc} + .align 2, 0 +_0805387C: .4byte gFadeControl +_08053880: .4byte gMenu +_08053884: .4byte gUnk_080FCCB4 +_08053888: .4byte gBG1Buffer +_0805388C: .4byte 0x00000F01 +_08053890: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053894.inc b/asm/non_matching/game/sub_08053894.inc new file mode 100644 index 00000000..bff018b4 --- /dev/null +++ b/asm/non_matching/game/sub_08053894.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, lr} + ldr r0, _080538B4 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080538F8 + ldr r1, _080538B8 @ =gMenu + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] + ldrh r0, [r1, #0xa] + adds r4, r1, #0 + cmp r0, #0 + beq _080538BC + subs r0, #1 + strh r0, [r4, #0xa] + b _080538E4 + .align 2, 0 +_080538B4: .4byte gFadeControl +_080538B8: .4byte gMenu +_080538BC: + ldr r0, _080538FC @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080538E4 + ldrb r1, [r4, #7] + cmp r1, #0xf + bhi _080538E4 + adds r1, #1 + strb r1, [r4, #7] + lsls r1, r1, #0x18 + ldr r3, _08053900 @ =gScreen + lsrs r2, r1, #0x10 + lsrs r1, r1, #0x19 + movs r0, #0x10 + subs r0, r0, r1 + orrs r2, r0 + adds r3, #0x68 + strh r2, [r3] +_080538E4: + ldrh r0, [r4, #8] + cmp r0, #0 + bne _080538F8 + ldrb r0, [r4, #6] + adds r0, #1 + strb r0, [r4, #6] + movs r0, #5 + movs r1, #8 + bl SetFade +_080538F8: + pop {r4, pc} + .align 2, 0 +_080538FC: .4byte gRoomTransition +_08053900: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053904.inc b/asm/non_matching/game/sub_08053904.inc new file mode 100644 index 00000000..7d29702e --- /dev/null +++ b/asm/non_matching/game/sub_08053904.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, lr} + ldr r0, _08053924 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _08053968 + ldr r1, _08053928 @ =gMenu + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] + ldrh r0, [r1, #0xa] + adds r4, r1, #0 + cmp r0, #0 + beq _0805392C + subs r0, #1 + strh r0, [r4, #0xa] + b _08053954 + .align 2, 0 +_08053924: .4byte gFadeControl +_08053928: .4byte gMenu +_0805392C: + ldr r0, _0805396C @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08053954 + ldrb r1, [r4, #7] + cmp r1, #0xf + bhi _08053954 + adds r1, #1 + strb r1, [r4, #7] + lsls r1, r1, #0x18 + ldr r3, _08053970 @ =gScreen + lsrs r2, r1, #0x10 + lsrs r1, r1, #0x19 + movs r0, #0x10 + subs r0, r0, r1 + orrs r2, r0 + adds r3, #0x68 + strh r2, [r3] +_08053954: + ldrh r0, [r4, #8] + cmp r0, #0 + bne _08053968 + ldrb r0, [r4, #6] + adds r0, #1 + strb r0, [r4, #6] + movs r0, #5 + movs r1, #1 + bl SetFade +_08053968: + pop {r4, pc} + .align 2, 0 +_0805396C: .4byte gRoomTransition +_08053970: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053CC8.inc b/asm/non_matching/game/sub_08053CC8.inc new file mode 100644 index 00000000..3967ecf0 --- /dev/null +++ b/asm/non_matching/game/sub_08053CC8.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r6, _08053D20 @ =gMenu + ldrb r4, [r6, #3] + lsls r4, r4, #4 + ldr r0, _08053D24 @ =gUnk_080FCF04 + adds r4, r4, r0 + adds r0, r4, #0 + adds r0, #8 + str r0, [r6, #0xc] + ldr r0, [r4] + bl LoadRoomEntityList + ldrb r0, [r4, #4] + ldrb r1, [r4, #5] + movs r2, #1 + bl GetRoomProperty + bl LoadRoomEntityList + ldrb r0, [r4, #4] + ldrb r1, [r4, #5] + movs r2, #2 + bl GetRoomProperty + bl LoadRoomEntityList + movs r5, #1 + strb r5, [r6, #6] + ldr r2, _08053D28 @ =gScreen + ldrh r1, [r2] + ldr r0, _08053D2C @ =0x0000FEFF + ands r0, r1 + strh r0, [r2] + ldr r0, _08053D30 @ =gUpdateVisibleTiles + strb r5, [r0] + movs r0, #4 + movs r1, #0x10 + bl SetFade + ldrb r0, [r4, #5] + cmp r0, #0x1d + bne _08053D1E + strh r5, [r6, #0xa] +_08053D1E: + pop {r4, r5, r6, pc} + .align 2, 0 +_08053D20: .4byte gMenu +_08053D24: .4byte gUnk_080FCF04 +_08053D28: .4byte gScreen +_08053D2C: .4byte 0x0000FEFF +_08053D30: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/game/sub_0805488C.inc b/asm/non_matching/game/sub_0805488C.inc new file mode 100644 index 00000000..7b792dd4 --- /dev/null +++ b/asm/non_matching/game/sub_0805488C.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, lr} + ldr r4, _080548DC @ =gUnk_02032EC0 + ldrb r1, [r4, #3] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080548E0 @ =gUnk_080FE320 + adds r0, r0, r1 + ldr r2, _080548E4 @ =gMenu + ldrb r1, [r0] + movs r3, #0 + strb r1, [r2] + ldrb r1, [r0, #1] + strb r1, [r2, #3] + ldrb r1, [r4, #3] + strb r1, [r2, #4] + str r0, [r2, #0xc] + ldrb r0, [r2, #5] + adds r0, #1 + strb r0, [r2, #5] + strb r3, [r2, #6] + movs r0, #0x96 + lsls r0, r0, #1 + strh r0, [r2, #8] + movs r0, #0 + bl DispReset + ldrb r0, [r4, #3] + movs r1, #1 + bl sub_08054974 + bl sub_0806F364 + movs r0, #0xff + bl ClearRoomFlag + bl sub_080548E8 + pop {r4, pc} + .align 2, 0 +_080548DC: .4byte gUnk_02032EC0 +_080548E0: .4byte gUnk_080FE320 +_080548E4: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/game/sub_08054920.inc b/asm/non_matching/game/sub_08054920.inc new file mode 100644 index 00000000..7b73b4e9 --- /dev/null +++ b/asm/non_matching/game/sub_08054920.inc @@ -0,0 +1,33 @@ + .syntax unified + push {lr} + bl MessageInitialize + bl sub_0806F38C + ldr r1, _08054948 @ =gUnk_080C9CBC + ldr r0, _0805494C @ =gFuseInfo + ldrb r0, [r0, #3] + lsls r0, r0, #3 + adds r0, r0, r1 + ldrb r0, [r0, #7] + cmp r0, #0 + beq _08054954 + ldr r0, _08054950 @ =gUnk_02032EC0 + ldrb r1, [r0, #3] + movs r0, #0xa + bl MenuFadeIn + b _08054962 + .align 2, 0 +_08054948: .4byte gUnk_080C9CBC +_0805494C: .4byte gFuseInfo +_08054950: .4byte gUnk_02032EC0 +_08054954: + ldr r1, _08054964 @ =gUnk_02032EC0 + movs r0, #3 + strb r0, [r1] + movs r0, #7 + movs r1, #0x10 + bl SetFade +_08054962: + pop {pc} + .align 2, 0 +_08054964: .4byte gUnk_02032EC0 + .syntax divided diff --git a/asm/non_matching/game/sub_08054974.inc b/asm/non_matching/game/sub_08054974.inc new file mode 100644 index 00000000..ca75d4cb --- /dev/null +++ b/asm/non_matching/game/sub_08054974.inc @@ -0,0 +1,70 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r1, #0 + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _080549B0 @ =gUnk_080FE320 + adds r6, r1, r0 + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl SetCurrentRoomPropertyList + ldr r4, _080549B4 @ =gRoomControls + ldrb r0, [r6, #2] + strb r0, [r4, #4] + ldrb r0, [r6, #3] + strb r0, [r4, #5] + bl LoadGfxGroups + ldrb r0, [r4, #4] + bl GetFlagBankOffset + ldr r1, _080549B8 @ =gArea + strh r0, [r1, #4] + cmp r5, #0 + beq _080549BC + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl LoadAuxiliaryRoom + b _080549CE + .align 2, 0 +_080549B0: .4byte gUnk_080FE320 +_080549B4: .4byte gRoomControls +_080549B8: .4byte gArea +_080549BC: + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl sub_08052FF4 + bl sub_0807C740 + ldr r1, _08054A00 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_080549CE: + ldr r2, _08054A04 @ =gScreen + ldrh r1, [r2] + ldr r0, _08054A08 @ =0x00001FFF + ands r0, r1 + strh r0, [r2] + ldr r1, _08054A0C @ =gRoomControls + ldrh r0, [r6, #4] + ldrh r2, [r1, #6] + adds r0, r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r6, #6] + ldrh r2, [r1, #8] + adds r0, r0, r2 + strh r0, [r1, #0xc] + ldrb r0, [r6, #2] + cmp r0, #2 + bne _080549F4 + bl TryLoadPrologueHyruleTown +_080549F4: + ldr r0, _08054A10 @ =gUnk_02032EC0 + ldrb r0, [r0, #3] + bl sub_08018710 + pop {r4, r5, r6, pc} + .align 2, 0 +_08054A00: .4byte gUpdateVisibleTiles +_08054A04: .4byte gScreen +_08054A08: .4byte 0x00001FFF +_08054A0C: .4byte gRoomControls +_08054A10: .4byte gUnk_02032EC0 + .syntax divided diff --git a/asm/non_matching/game/sub_08054A14.inc b/asm/non_matching/game/sub_08054A14.inc new file mode 100644 index 00000000..85c471aa --- /dev/null +++ b/asm/non_matching/game/sub_08054A14.inc @@ -0,0 +1,22 @@ + .syntax unified + push {lr} + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _08054A38 @ =gUnk_080FE320 + adds r2, r1, r0 + ldrb r0, [r2, #0x11] + cmp r0, #0xd + bhi _08054A34 + ldr r1, _08054A3C @ =gLocalFlagBanks + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + ldrh r1, [r2, #0x12] + bl SetLocalFlagByBank +_08054A34: + pop {pc} + .align 2, 0 +_08054A38: .4byte gUnk_080FE320 +_08054A3C: .4byte gLocalFlagBanks + .syntax divided diff --git a/linker.ld b/linker.ld index 24c3273b..a5d4247b 100644 --- a/linker.ld +++ b/linker.ld @@ -436,11 +436,6 @@ SECTIONS { src/fade.o(.text); src/fileselect.o(.text); src/game.o(.text); - asm/code_080526F8.o(.text); - asm/modBombs.o(.text); - asm/modArrows.o(.text); - src/code_0805436C.o(.text); - asm/code_0805436C.o(.text); /* game.c */ src/playerItem/playerItemLantern.o(.text); src/subtask.o(.text); src/sub_08055E08.o(.text); @@ -619,17 +614,7 @@ SECTIONS { src/item/itemGustJar.o(.text); src/item/itemMoleMitts.o(.text); src/item/itemJarEmpty.o(.text); - asm/playerUtils.o(.text); - src/respawnPlayer.o(.text); - src/code_08077B98.o(.text); - asm/code_08077B98.o(.text); - src/code_08078778.o(.text); - asm/code_08078778.o(.text); - src/sub_0807B820.o(.text); - asm/code_0807B9B8.o(.text); - src/sub_0807CA18.o(.text); - asm/getInventoryValue.o(.text); - asm/code_0807CAA0.o(.text); /* playerUtils.c */ + src/playerUtils.o(.text); src/flags.o(.text); src/save.o(.text); src/screenTilemap.o(.text); diff --git a/src/code_0805436C.c b/src/code_0805436C.c deleted file mode 100644 index 4f420dd8..00000000 --- a/src/code_0805436C.c +++ /dev/null @@ -1,403 +0,0 @@ -#include "global.h" -#include "player.h" -#include "room.h" -#include "menu.h" -#include "area.h" -#include "common.h" -#include "save.h" -#include "item.h" -#include "object.h" -#include "enemy.h" -#include "droptables.h" -#include "itemMetaData.h" - -extern u8 gUnk_0200AF13; -extern u8 gUnk_0200AF14; -extern u8 gUnk_080FE1C6[]; -/*{ -0u, -0x1u, -0x2u, -0x3u, -0x4u, -0x5u, -0x6u, -0x7u, -0x8u, -0x9u, -0x8u, -0x9u, -0xau, -0xau, -0xbu, -0xcu, -0xdu, -0xeu, -0xfu, -0x8u, -0xfu, -0x1u, -0x8u, -}; -*/ -extern void (*const gUnk_080FE2A0[])(void); - -void ForceEquipItem(u32, u32); -extern void sub_0807CAA0(u32, u32); - -/* -Returns the slot the item is equipped in. -0: A -1: B -2: Not equipped -*/ -extern u8 gUnk_080FE1DD[]; - -u32 IsItemEquipped(u32 itemID) { - u32 itemSlot; - - if (itemID == gSave.stats.itemButtons[SLOT_A]) - itemSlot = 0; - else if (itemID == gSave.stats.itemButtons[SLOT_B]) - itemSlot = 1; - else - itemSlot = 2; - return itemSlot; -} - -void PutItemOnSlot(u32 itemID) { - u32 itemSlot; - u32 itemID2 = itemID; - if (itemID2 < 0x47) { - sub_0807CAA0(0, 1); - } - if (itemID2 - 1 < 0x1f) { - itemSlot = 2; - if (gSave.stats.itemButtons[SLOT_A] == 0) { - itemSlot = 0; - } else if (gSave.stats.itemButtons[SLOT_B] == 0) { - itemSlot = 1; - } - if (itemSlot == 2) { - u32 temp = gItemMetaData[itemID2].menuSlot; - if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) { - itemSlot = 0; - } else { - if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) { - itemSlot = 1; - } - } - if (itemSlot == 2) { - return; - } - } - ForceEquipItem(itemID2, itemSlot); - } -} - -void ForceEquipItem(u32 itemID, u32 itemSlot) { - u32 otherItem; - u32 otherItemIndex; - u32 replacedItem; - - if ((itemID - 1 < 0x1f) && (itemSlot < 2)) { - otherItemIndex = itemSlot == 0; - replacedItem = gSave.stats.itemButtons[itemSlot]; - otherItem = gSave.stats.itemButtons[otherItemIndex]; - if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) { - otherItem = replacedItem; - } - gSave.stats.itemButtons[itemSlot] = itemID; - gSave.stats.itemButtons[otherItemIndex] = otherItem; - gUnk_0200AF00.filler0[0x13] = 0x7f; - gUnk_0200AF00.filler0[0x14] = 0x7f; - } -} - -u32 SetBottleContents(u32 itemID, u32 bottleIndex) { - if (bottleIndex > 3) { - bottleIndex = 0; - if (gSave.stats.bottles[0] != 0x20) { - do { - bottleIndex++; - if (bottleIndex > 3) { - return bottleIndex; - } - } while (gSave.stats.bottles[bottleIndex] != 0x20); - } - if (bottleIndex > 3) { - return bottleIndex; - } - } - gSave.stats.bottles[bottleIndex] = itemID; - return bottleIndex; -} - -bool32 ItemIsSword(u32 item) { - switch (item) { - case ITEM_SMITH_SWORD: - case ITEM_GREEN_SWORD: - case ITEM_RED_SWORD: - case ITEM_BLUE_SWORD: - case ITEM_FOURSWORD: - return TRUE; - default: - return FALSE; - } -} - -bool32 ItemIsShield(u32 id) { - switch (id) { - case 13: - case 14: - return 1; - default: - return 0; - } -} - -bool32 ItemIsBottle(u32 id) { - switch (id) { - case 28: - case 29: - case 30: - case 31: - return 1; - default: - return 0; - } -} - -u32 GetBottleContaining(u32 id) { - if (id == gSave.stats.bottles[0]) { - return 1; - } else if (id == gSave.stats.bottles[1]) { - return 2; - } else if (id == gSave.stats.bottles[2]) { - return 3; - } else if (id == gSave.stats.bottles[3]) { - return 4; - } else { - return 0; - } -} - -void sub_08054524(void) { - u32 bVar1; - - bVar1 = gArea.locationIndex; - if (gArea.locationIndex == 0) { - bVar1 = gRoomTransition.player_status.field_0x24[0xa]; - } - if (bVar1 > 0x16) { - bVar1 = 0; - } - - bVar1 = gUnk_080FE1C6[bVar1]; - MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20); -} - -void sub_08054564(void) { - gRoomVars.field_0x2 = 1; -} - -void sub_08054570(void) { - gRoomVars.field_0x2 = 0; -} - -extern void sub_08000F14(s16*, const s16*, const s16*, const s16*); -extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*); -u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter); -u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { - extern const u8 gUnk_080FE1B4[] /* = { - ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY, - ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED, - ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - }*/; - - int r0, r1, rand, summOdds, item; - u32 r3; - const Droptable *ptr2, *ptr3, *ptr4; - Droptable droptable; - r3 = arg1; - if (gRoomVars.field_0x2 != 1) { - ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; - ptr4 = NULL; - switch (r3) { - case 1 ... 12: - ptr4 = &gEnemyDroptables[r3]; - break; -#ifndef EU - case 24: - case 25: - r0 = gRoomVars.unk2; - ptr4 = &gUnk_0800191C[0]; - if (r0) { - ptr4++; - } - break; -#endif - case 16 ... 23: -#ifdef EU - case 24: -#endif - ptr2 = &gObjectDroptables[r3 - 16]; - case 15: - ptr4 = &gRoomVars.currentAreaDroptable; - break; - case 0: - default: - break; - } - if (ptr4 != 0) { - if ((r1 = gSave.stats.picolyteType) == 0) { - // nop - ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; - } else { -#ifdef EU - ptr3 = &gEnemyDroptables[r1 + 9]; -#else - ptr3 = &gEnemyDroptables[r1 + 6]; -#endif - } - // vector addition, s0 = ptr4 + ptr2 + ptr3 - sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a); - if (gSave.stats.health <= 8) { - droptable.s.hearts += 5; - } - if (gSave.stats.bombCount == 0) { - droptable.s.bombs += 3; - } - if (gSave.stats.arrowCount == 0) { - droptable.s.arrows += 3; - } - if (gSave.stats.rupees <= 10) { - droptable.s.rupee5 += 1; - } - ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; - r0 = gSave.stats.hasAllFigurines; - ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; - // don't drop shells anymore - if (r0 != 0) { - ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS]; - } - // don't drop kinstones anymore - if (gSave.didAllFusions != 0) { - ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES]; - } - // vector addition, s0 = s0 + ptr2 + ptr3 - // resulting values are clamped to be >= 0 - // returns sum over s0 - summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a); - rand = Random(); - item = (rand >> 0x18); - item &= 0xF; - rand = rand % summOdds; - { - u32 r3; - for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) { - if ((r1 += droptable.a[item]) > rand) { - break; - } - } - } - r1 = gUnk_080FE1B4[item]; - if (r1 != ITEM_NONE) { - return CreateItemDrop(arg0, r1, 0); - } - } - } - return ITEM_NONE; -} - -u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) { - u32 adjustedParam = itemParameter; - Entity* itemEntity; - - switch (itemID) { - case ITEM_ENEMY_BEETLE: - if (!GetInventoryValue(ITEM_SMITH_SWORD)) { - return ITEM_NONE; - } - break; - case ITEM_BOMBS5: - if (!GetInventoryValue(ITEM_BOMBBAG)) { - return ITEM_NONE; - } - break; - case ITEM_ARROWS5: - if (!GetInventoryValue(ITEM_BOW)) { - return ITEM_NONE; - } - break; - case ITEM_SHELLS: { - if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) { - return ITEM_NONE; - } - if (itemParameter == 0) { - adjustedParam = 1; - } - break; - } - case ITEM_KINSTONE: - case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: { - u32 rand; - - if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) { - return ITEM_NONE; - } - if (3 < gRoomVars.filler1[0]) { - return ITEM_NONE; - } - - if (itemID != ITEM_KINSTONE) { - adjustedParam = itemID - ITEM_KINSTONE_GREEN; - rand = (Random() & 0x3f); - adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)]; - if (adjustedParam == 0) { - itemID = ITEM_NONE; - } else { - itemID = ITEM_KINSTONE; - } - } - break; - } - } - if (itemID != ITEM_NONE) { - if (itemID != ITEM_ENEMY_BEETLE) { - itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam); - if (itemEntity != NULL) { - if (arg0 == &gPlayerEntity) { - itemEntity->actionDelay = 1; - } else { - itemEntity->actionDelay = 0; - } - if (arg0->kind == OBJECT) { - if (arg0->id == 99) { - arg0->child = itemEntity; - } else if (arg0->id == 0x1e) { - itemEntity->direction = arg0->animationState << 3 | 0x80; - itemEntity->speed = 0xc0; - itemEntity->zVelocity = Q_16_16(1.5); - } - } - CopyPosition(arg0, itemEntity); - } - } else { - itemEntity = CreateEnemy(BEETLE, 0); - if (itemEntity != NULL) { - itemEntity->x.HALF.HI = arg0->x.HALF.HI; - itemEntity->y.HALF.HI = arg0->y.HALF.HI; - itemEntity->collisionLayer = arg0->collisionLayer; - UpdateSpriteForCollisionLayer(itemEntity); - } - } - } - return itemID; -} - -void Subtask_WorldEvent(void) { -#if !(defined(DEMO_USA) || defined(DEMO_JP)) - gUnk_080FE2A0[gMenu.menuType](); -#endif -} diff --git a/src/game.c b/src/game.c index 80431631..ec3fa368 100644 --- a/src/game.c +++ b/src/game.c @@ -6,24 +6,30 @@ */ #include "global.h" -#include "asm.h" -#include "sound.h" -#include "screen.h" -#include "entity.h" -#include "player.h" -#include "room.h" -#include "main.h" -#include "flags.h" -#include "save.h" -#include "common.h" -#include "fileselect.h" -#include "menu.h" -#include "functions.h" #include "area.h" -#include "message.h" +#include "asm.h" +#include "common.h" +#include "droptables.h" +#include "enemy.h" +#include "entity.h" +#include "fileselect.h" +#include "flags.h" +#include "functions.h" #include "game.h" #include "item.h" +#include "itemMetaData.h" +#include "main.h" +#include "menu.h" +#include "message.h" +#include "object.h" +#include "player.h" +#include "room.h" +#include "save.h" +#include "screen.h" +#include "sound.h" #include "subtask.h" +#include "itemMetaData.h" +#include "player.h" // Game task @@ -197,6 +203,68 @@ typedef struct { } CutsceneData; static const CutsceneData sCutsceneData[]; +extern u8 gUnk_0200AF13; +extern u8 gUnk_0200AF14; +extern u8 gUnk_080FE1C6[]; +extern void (*const gUnk_080FE2AC[])(void); + +/** @see Item */ +void ForceEquipItem(u32, u32); +extern void SetInventoryValue(u32, u32); + +extern u8 gUnk_080FE1DD[]; + +extern void (*const gUnk_080FE2A0[])(void); + +extern void (*const gUnk_080FCBB4[])(void); + +extern const EntityData gUnk_080FCB94[]; + +void sub_08052004(void); + +extern void (*const gUnk_080FCCFC[])(void); + +extern void (*const gUnk_080FCD38[])(void); + +extern const EntityData gUnk_080FCC54[]; + +void sub_08051FF0(void); + +extern void (*const gUnk_080FCD40[])(void); + +extern const EntityData gUnk_080FCBC4[]; +void sub_08051F78(void); + +extern const EntityData gUnk_080FCC14[]; + +extern void DeleteAllEntities(void); + +extern void (*const gUnk_080FCDD4[])(void); + +extern const EntityData gUnk_080FCD84[]; + +extern void (*const gUnk_080FCEB0[])(void); + +extern const EntityData gUnk_080FCDE0[]; + +extern void (*const gUnk_080FCEEC[])(void); + +extern const EntityData gUnk_080FCEBC[]; + +extern void (*const gUnk_080FCEF8[])(void); + +extern void (*const gUnk_080FCFA4[])(void); + +extern void* GetRoomProperty(u32, u32, u32); + +extern void (*const gUnk_080FD108[])(void); + +extern const EntityData* gUnk_080FCFB8[]; + +extern void (*const gUnk_080FD138[])(void); + +extern const u16 gUnk_080FD964[]; + void GameTask(void) { static GameState* const sStates[] = { GameTask_Transition, @@ -586,7 +654,7 @@ static void AuxCutscene_Exit(void) { } } -void sub_08051F78(u32 a1, u32 a2, u32 a3, u32 a4) { +void sub_08051F78(void) { u32 idx = gUnk_02032EC0.field_0x3; const CutsceneData* p = &sCutsceneData[idx]; sub_08051F9C(p->area, p->room, p->x, p->y); @@ -931,24 +999,24 @@ static void InitializePlayer(void) { pl->z.HALF.HI = -0xc0; break; case PL_SPAWN_STEP_IN: - gPlayerState.field_0x34[4] = 16; + gPlayerState.field_0x38 = 16; pl->direction = Direction8FromAnimationState(gRoomTransition.player_status.start_anim); case PL_SPAWN_WALKING: pl->speed = 224; break; case PL_SPAWN_STAIRS_ASCEND: case PL_SPAWN_STAIRS_DESCEND: - gPlayerState.field_0x34[4] = 1; - gPlayerState.field_0x34[5] = gRoomTransition.player_status.spawn_type; + gPlayerState.field_0x38 = 1; + gPlayerState.field_0x39 = gRoomTransition.player_status.spawn_type; break; case PL_SPAWN_PARACHUTE_FORWARD: - gPlayerState.field_0x34[4] = 1; + gPlayerState.field_0x38 = 1; break; case PL_SPAWN_PARACHUTE_UP: - gPlayerState.field_0x34[4] = 3; + gPlayerState.field_0x38 = 3; break; case PL_SPAWN_FAST_TRAVEL: - gPlayerState.field_0x34[4] = 4; + gPlayerState.field_0x38 = 4; } pl->kind = PLAYER; @@ -1716,11 +1784,11 @@ static void ResetTmpFlags(void) { if (!CheckGlobalFlag(WATERBEAN_PUT)) ClearGlobalFlag(WATERBEAN_OUT); - if (!GetInventoryValue(0x40u)) + if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) ClearGlobalFlag(LV1_CLEAR); - if (!GetInventoryValue(0x41u)) + if (!GetInventoryValue(ITEM_FIRE_ELEMENT)) ClearGlobalFlag(LV2_CLEAR); - if (!GetInventoryValue(0x42u)) + if (!GetInventoryValue(ITEM_WATER_ELEMENT)) ClearGlobalFlag(LV4_CLEAR); } @@ -1730,3 +1798,811 @@ static void ClearFlagArray(const u16* p) { for (i = p; i[0] != 0xFFFF; i += 2) ClearLocalFlagByBank(i[0], i[1]); } + +void CutsceneMain_Init(void) { + gUnk_080FCBB4[gMenu.overlayType](); +} + +void sub_080535AC(void) { + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; + gUnk_02032EC0.field_0x6 = 1; + gUpdateVisibleTiles = 1; + gScreen.lcd.displayControl &= 0xfeff; + LoadRoomEntityList((EntityData*)gUnk_080FCB94); + SetFade(6, 8); +} + +void sub_080535F4(void) { + if (gFadeControl.active == 0) { + ResetSystemPriority(); + gMenu.overlayType = 2; + } +} + +void nullsub_481(void) { +} + +void sub_08053618(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + sub_08052004(); + } +} + +void sub_08053634(void) { + gUnk_02032EC0.nextToLoad = 3; + MessageInitialize(); +} + +void sub_08053648(void) { + Entity* obj = CreateObject(SMOKE, 0, 0); + if (obj != NULL) { + obj->x.HALF.HI = gRoomControls.origin_x + 0x2d0; + obj->y.HALF.HI = gRoomControls.origin_y + 0x148; + } +} + +void sub_0805367C(void) { + gMenu.overlayType++; +} + +void sub_0805368C(void) { + Entity* entity = FindEntityByID(OBJECT, HOUSE_DOOR_INT, 6); + if (entity != NULL) { + DeleteEntity(entity); + SoundReq(SFX_F0); + } +} + +void sub_080536A8(void) { + sub_080A71C4(5, 5, 4, 0x10); +} + +void sub_080536B8(void) { + sub_080A71C4(5, 3, 4, 4); + SetFade(5, 0x100); +} + +void sub_080536D4(void) { + gUnk_080FCCFC[gMenu.overlayType](); +} + +void sub_080536F0(void) { + gUnk_080FCD38[gMenu.overlayType](); +} + +void sub_0805370C(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + LoadRoomEntityList((EntityData*)gUnk_080FCC54); + SetFade(4, 0x10); +} + +void sub_0805373C(void) { + gUnk_080FCD40[gMenu.overlayType](); +} + +ASM_FUNC("asm/non_matching/game/sub_08053758.inc", void sub_08053758()) + +ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800()) + +ASM_FUNC("asm/non_matching/game/sub_08053894.inc", void sub_08053894()) + +ASM_FUNC("asm/non_matching/game/sub_08053904.inc", void sub_08053904()) + +void sub_08053974(void) { + if (gFadeControl.active == 0) { + InitFade(); + DispReset(1); + SetBGDefaults(); + sub_08051F78(); + LoadRoomEntityList((EntityData*)&gUnk_080FCBC4); + SetFade(5, 0x100); + gMenu.overlayType++; + } +} + +void nullsub_482(void) { +} + +void sub_080539BC(void) { + SetBGDefaults(); + DeleteAllEntities(); + sub_08051F9C(0x22, 0x11, 0, 0); + sub_0804B0B0(0x22, 0x11); + LoadRoomEntityList((EntityData*)&gUnk_080FCC14); + gMenu.overlayType++; +} + +void sub_080539F4(void) { + if (gFadeControl.active == 0) { + DispReset(1); + gMenu.overlayType++; + gMenu.transitionTimer = 0x3c; + } +} + +void sub_08053A1C(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + gMenu.overlayType++; + gMenu.transitionTimer = 8; + MessageFromTarget(0xf07); + gMessage.textWindowPosX = 1; + gMessage.textWindowPosY = 8; + SetFade(4, 8); + } +} + +void sub_08053A5C(void) { + if (((gMessage.doTextBox & 0x7f) == 0) && --gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFade(5, 8); + } +} + +void sub_08053A90(void) { + if (gFadeControl.active == 0) { + gUnk_02032EC0.nextToLoad = 3; + SetBGDefaults(); + } +} + +void sub_08053AB0(void) { + gUnk_080FCDD4[gMenu.overlayType](); +} + +void sub_08053ACC(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + LoadRoomEntityList((EntityData*)&gUnk_080FCD84); + SetFade(5, 0x100); +} + +void sub_08053B00(void) { + gMenu.overlayType++; +} + +void sub_08053B10(void) { + if (CheckRoomFlag(1)) { + gMenu.menuType++; + DispReset(1); + SetFade(4, 0x100); + } +} + +void sub_08053B3C(void) { + sub_080A71C4(5, 4, 5, 0x100); + SetFade(5, 0x100); +} + +void sub_08053B58(void) { + gUnk_080FCEB0[gMenu.overlayType](); +} + +void sub_08053B74(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + LoadRoomEntityList((EntityData*)&gUnk_080FCDE0); + ResetSystemPriority(); + ResetEntityPriority(); + SetFade(5, 0x100); +} + +void sub_08053BAC(void) { + gMenu.overlayType++; +} + +void sub_08053BBC(void) { + if (CheckRoomFlag(0)) { + gMenu.menuType++; + DispReset(1); + SetFade(4, 0x100); + } +} + +void sub_08053BE8(void) { + sub_080A71C4(5, 2, 5, 0x100); + SetFade(5, 0x100); +} + +void sub_08053C04(void) { + gUnk_080FCEEC[gMenu.overlayType](); +} + +void sub_08053C20(void) { + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + sub_0805B4D0(4); + LoadRoomEntityList((EntityData*)&gUnk_080FCEBC); + SetFade(4, 0x10); + SoundReq(BGM_FIGHT_THEME2); +} + +void nullsub_483(void) { +} + +void sub_08053C60(void) { + SetFade(5, 2); + SoundReq(SFX_SUMMON); + SoundReq(SONG_STOP_BGM); + SetTask(3); +} + +void sub_08053C84(void) { + gMenu.overlayType = 2; +} + +void CutsceneMain_Exit(void) { + gUnk_080FCEF8[gMenu.field_0x3](); +} + +void sub_08053CAC(void) { + gUnk_080FCFA4[gMenu.overlayType](); +} + +ASM_FUNC("asm/non_matching/game/sub_08053CC8.inc", void sub_08053CC8()) + +void sub_08053D34(void) { + if (gMenu.field_0xa != 0) { + gMenu.field_0xa = 0; + if (CheckLocalFlagByBank(0x680, 0x3d)) { + SetTileType(0x74, 0xc4, 1); + } + if (CheckLocalFlagByBank(0x680, 0x3e)) { + SetTileType(0x74, 0xcc, 1); + } + } + if (gFadeControl.active == 0) { + gMenu.transitionTimer = 0x78; + gMenu.overlayType++; + } +} + +void sub_08053D90(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFadeInverted(0x10); + } +} + +void sub_08053DB4(void) { + if (gFadeControl.active == 0) { + u8* ptr = gMenu.field_0xc; + sub_08052FF4(gMenu.field_0xc[4], gMenu.field_0xc[5]); + sub_0807C740(); + gUpdateVisibleTiles = 1; + gRoomControls.scroll_x = (s8)ptr[6] + gRoomControls.scroll_x; + gRoomControls.scroll_y = (s8)ptr[7] + gRoomControls.scroll_y; + LoadRoomEntityList(*(EntityData**)ptr); + LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 1)); + LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 2)); + gMenu.transitionTimer = 0x78; + gMenu.overlayType++; + SetFadeInverted(0x10); + } +} + +void sub_08053E30(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08053E58(void) { + gUnk_080FD108[gMenu.overlayType](); +} + +void sub_08053E74(void) { + const EntityData** ptr = gUnk_080FCFB8; + gMenu.field_0xc = (u8*)ptr; + LoadRoomEntityList((EntityData*)ptr[0]); + gMenu.transitionTimer = 0x78; + gMenu.field_0xa = 0x3c; + gMenu.overlayType++; + gScreen.lcd.displayControl &= 0xfeff; + gUpdateVisibleTiles = 1; + SetMinPriority(1); + SetFade(4, 8); +} + +void sub_08053EC4(void) { + EntityData** data; + if ((gFadeControl.active == 0) && (--gMenu.field_0xa == 0)) { + data = (EntityData**)(gMenu.field_0xc + 4); + gMenu.field_0xc += 0xc; + LoadRoomEntityList(*data); + gMenu.overlayType++; + } +} + +void sub_08053EFC(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFadeInverted(8); + } +} + +void sub_08053F20(void) { + u8* ptr; + if (gFadeControl.active == 0) { + DeleteAllEntities(); + ptr = gMenu.field_0xc; + sub_08052FF4(gMenu.field_0xc[8], gMenu.field_0xc[9]); + sub_0807C740(); + gUpdateVisibleTiles = 1; + gRoomControls.scroll_x = (s8)ptr[10] + gRoomControls.scroll_x; + gRoomControls.scroll_y = (s8)ptr[0xb] + gRoomControls.scroll_y; + LoadRoomEntityList(*(EntityData**)ptr); + gMenu.transitionTimer = 0x78; + gMenu.field_0xa = 0x3c; + gMenu.overlayType++; + SetFadeInverted(8); + } +} + +void sub_08053F88(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + ResetEntityPriority(); + } +} + +void CutsceneMain_Update(void) { + gUnk_080FD138[gMenu.field_0x3](); +} + +u32 GetSaleItemConfirmMessageID(u32 item) { + const u16* ptr = &gUnk_080FD964[item * 4]; + return ptr[2]; +} + +s32 GetItemPrice(u32 item) { + const u16* ptr = &gUnk_080FD964[item * 4]; + return ptr[0]; +} + +ASM_FUNC("asm/non_matching/game/GiveItem.inc", void GiveItem(u32 a, u32 b)) + +// TODO Adapt ItemMetaData struct +void sub_08054288(s32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u16* ptr = (u16*)&((ptr1)[param_1]); + MessageFromTarget(ptr[3]); +} + +u32 sub_0805429C(s32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u16* ptr = (u16*)&((ptr1)[param_1]); + return ptr[2]; +} + +u32 sub_080542AC(u32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u8* ptr = (u8*)&((ptr1)[param_1]); + return ptr[3] & 1; +} + +void ModShells(s32 shells) { + if (shells == 0) { + shells = 1; + } + shells += gSave.stats.shells; + if (shells < 0) { + shells = 0; + } else if (999 < shells) { + shells = 999; + } + gSave.stats.shells = shells; +} + +void ModBombs(s32 bombs) { + s32 bombCount = bombs; + s32 bagSize; + bombCount += gSave.stats.bombCount; + bagSize = gBombBagSizes[gSave.stats.bombBagType]; + if (bombCount < 0) { + bombCount = 0; + } else if (bagSize < bombCount) { + bombCount = bagSize; + } + gSave.stats.bombCount = bombCount; +} + +void ModArrows(s32 arrows) { + s32 quiverSize; + s32 arrowCount = arrows; + arrowCount += gSave.stats.arrowCount; + quiverSize = gQuiverSizes[gSave.stats.quiverType]; + if (arrowCount < 0) { + arrowCount = 0; + } else if (quiverSize < arrowCount) { + arrowCount = quiverSize; + } + gSave.stats.arrowCount = arrowCount; +} + +/** + * @brief Returns the slot the item is equipped in. + * + * 0: A + * 1: B + * 2: Not equipped + */ +u32 IsItemEquipped(u32 itemID) { + u32 itemSlot; + + if (itemID == gSave.stats.itemButtons[SLOT_A]) + itemSlot = 0; + else if (itemID == gSave.stats.itemButtons[SLOT_B]) + itemSlot = 1; + else + itemSlot = 2; + return itemSlot; +} + +void PutItemOnSlot(u32 itemID) { + u32 itemSlot; + u32 itemID2 = itemID; + if (itemID2 < 0x47) { + SetInventoryValue(0, 1); + } + if (itemID2 - 1 < 0x1f) { + itemSlot = 2; + if (gSave.stats.itemButtons[SLOT_A] == 0) { + itemSlot = 0; + } else if (gSave.stats.itemButtons[SLOT_B] == 0) { + itemSlot = 1; + } + if (itemSlot == 2) { + u32 temp = gItemMetaData[itemID2].menuSlot; + if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) { + itemSlot = 0; + } else { + if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) { + itemSlot = 1; + } + } + if (itemSlot == 2) { + return; + } + } + ForceEquipItem(itemID2, itemSlot); + } +} + +void ForceEquipItem(u32 itemID, u32 itemSlot) { + u32 otherItem; + u32 otherItemIndex; + u32 replacedItem; + + if ((itemID - 1 < 0x1f) && (itemSlot < 2)) { + otherItemIndex = itemSlot == 0; + replacedItem = gSave.stats.itemButtons[itemSlot]; + otherItem = gSave.stats.itemButtons[otherItemIndex]; + if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) { + otherItem = replacedItem; + } + gSave.stats.itemButtons[itemSlot] = itemID; + gSave.stats.itemButtons[otherItemIndex] = otherItem; + gUnk_0200AF00.filler0[0x13] = 0x7f; + gUnk_0200AF00.filler0[0x14] = 0x7f; + } +} + +u32 SetBottleContents(u32 itemID, u32 bottleIndex) { + if (bottleIndex > 3) { + bottleIndex = 0; + if (gSave.stats.bottles[0] != 0x20) { + do { + bottleIndex++; + if (bottleIndex > 3) { + return bottleIndex; + } + } while (gSave.stats.bottles[bottleIndex] != 0x20); + } + if (bottleIndex > 3) { + return bottleIndex; + } + } + gSave.stats.bottles[bottleIndex] = itemID; + return bottleIndex; +} + +bool32 ItemIsSword(u32 item) { + switch (item) { + case ITEM_SMITH_SWORD: + case ITEM_GREEN_SWORD: + case ITEM_RED_SWORD: + case ITEM_BLUE_SWORD: + case ITEM_FOURSWORD: + return TRUE; + default: + return FALSE; + } +} + +bool32 ItemIsShield(u32 id) { + switch (id) { + case 13: + case 14: + return 1; + default: + return 0; + } +} + +bool32 ItemIsBottle(u32 id) { + switch (id) { + case 28: + case 29: + case 30: + case 31: + return 1; + default: + return 0; + } +} + +u32 GetBottleContaining(u32 id) { + if (id == gSave.stats.bottles[0]) { + return 1; + } else if (id == gSave.stats.bottles[1]) { + return 2; + } else if (id == gSave.stats.bottles[2]) { + return 3; + } else if (id == gSave.stats.bottles[3]) { + return 4; + } else { + return 0; + } +} + +void sub_08054524(void) { + u32 bVar1; + + bVar1 = gArea.locationIndex; + if (gArea.locationIndex == 0) { + bVar1 = gRoomTransition.player_status.field_0x24[0xa]; + } + if (bVar1 > 0x16) { + bVar1 = 0; + } + + bVar1 = gUnk_080FE1C6[bVar1]; + MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20); +} + +void sub_08054564(void) { + gRoomVars.field_0x2 = 1; +} + +void sub_08054570(void) { + gRoomVars.field_0x2 = 0; +} + +extern void sub_08000F14(s16*, const s16*, const s16*, const s16*); +extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*); +u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter); +u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { + extern const u8 gUnk_080FE1B4[] /* = { + ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY, + ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED, + ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, + }*/; + + int r0, r1, rand, summOdds, item; + u32 r3; + const Droptable *ptr2, *ptr3, *ptr4; + Droptable droptable; + r3 = arg1; + if (gRoomVars.field_0x2 != 1) { + ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; + ptr4 = NULL; + switch (r3) { + case 1 ... 12: + ptr4 = &gEnemyDroptables[r3]; + break; +#ifndef EU + case 24: + case 25: + r0 = gRoomVars.unk2; + ptr4 = &gUnk_0800191C[0]; + if (r0) { + ptr4++; + } + break; +#endif + case 16 ... 23: +#ifdef EU + case 24: +#endif + ptr2 = &gObjectDroptables[r3 - 16]; + case 15: + ptr4 = &gRoomVars.currentAreaDroptable; + break; + case 0: + default: + break; + } + if (ptr4 != 0) { + if ((r1 = gSave.stats.picolyteType) == 0) { + // nop + ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; + } else { +#ifdef EU + ptr3 = &gEnemyDroptables[r1 + 9]; +#else + ptr3 = &gEnemyDroptables[r1 + 6]; +#endif + } + // vector addition, s0 = ptr4 + ptr2 + ptr3 + sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a); + if (gSave.stats.health <= 8) { + droptable.s.hearts += 5; + } + if (gSave.stats.bombCount == 0) { + droptable.s.bombs += 3; + } + if (gSave.stats.arrowCount == 0) { + droptable.s.arrows += 3; + } + if (gSave.stats.rupees <= 10) { + droptable.s.rupee5 += 1; + } + ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; + r0 = gSave.stats.hasAllFigurines; + ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; + // don't drop shells anymore + if (r0 != 0) { + ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS]; + } + // don't drop kinstones anymore + if (gSave.didAllFusions != 0) { + ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES]; + } + // vector addition, s0 = s0 + ptr2 + ptr3 + // resulting values are clamped to be >= 0 + // returns sum over s0 + summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a); + rand = Random(); + item = (rand >> 0x18); + item &= 0xF; + rand = rand % summOdds; + { + u32 r3; + for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) { + if ((r1 += droptable.a[item]) > rand) { + break; + } + } + } + r1 = gUnk_080FE1B4[item]; + if (r1 != ITEM_NONE) { + return CreateItemDrop(arg0, r1, 0); + } + } + } + return ITEM_NONE; +} + +u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) { + u32 adjustedParam = itemParameter; + Entity* itemEntity; + + switch (itemID) { + case ITEM_ENEMY_BEETLE: + if (!GetInventoryValue(ITEM_SMITH_SWORD)) { + return ITEM_NONE; + } + break; + case ITEM_BOMBS5: + if (!GetInventoryValue(ITEM_BOMBBAG)) { + return ITEM_NONE; + } + break; + case ITEM_ARROWS5: + if (!GetInventoryValue(ITEM_BOW)) { + return ITEM_NONE; + } + break; + case ITEM_SHELLS: { + if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) { + return ITEM_NONE; + } + if (itemParameter == 0) { + adjustedParam = 1; + } + break; + } + case ITEM_KINSTONE: + case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: { + u32 rand; + + if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) { + return ITEM_NONE; + } + if (3 < gRoomVars.filler1[0]) { + return ITEM_NONE; + } + + if (itemID != ITEM_KINSTONE) { + adjustedParam = itemID - ITEM_KINSTONE_GREEN; + rand = (Random() & 0x3f); + adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)]; + if (adjustedParam == 0) { + itemID = ITEM_NONE; + } else { + itemID = ITEM_KINSTONE; + } + } + break; + } + } + if (itemID != ITEM_NONE) { + if (itemID != ITEM_ENEMY_BEETLE) { + itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam); + if (itemEntity != NULL) { + if (arg0 == &gPlayerEntity) { + itemEntity->actionDelay = 1; + } else { + itemEntity->actionDelay = 0; + } + if (arg0->kind == OBJECT) { + if (arg0->id == 99) { + arg0->child = itemEntity; + } else if (arg0->id == 0x1e) { + itemEntity->direction = arg0->animationState << 3 | 0x80; + itemEntity->speed = 0xc0; + itemEntity->zVelocity = Q_16_16(1.5); + } + } + CopyPosition(arg0, itemEntity); + } + } else { + itemEntity = CreateEnemy(BEETLE, 0); + if (itemEntity != NULL) { + itemEntity->x.HALF.HI = arg0->x.HALF.HI; + itemEntity->y.HALF.HI = arg0->y.HALF.HI; + itemEntity->collisionLayer = arg0->collisionLayer; + UpdateSpriteForCollisionLayer(itemEntity); + } + } + } + return itemID; +} + +void Subtask_WorldEvent(void) { +#if !(defined(DEMO_USA) || defined(DEMO_JP)) + gUnk_080FE2A0[gMenu.menuType](); +#endif +} + +ASM_FUNC("asm/non_matching/game/sub_0805488C.inc", void sub_0805488C()) + +void sub_080548E8(void) { + gUnk_080FE2AC[gMenu.field_0x0](); + FlushSprites(); + UpdateEntities(); + DrawEntities(); + CopyOAM(); + UpdateScroll(); + UpdateBgAnim(); + UpdateScrollVram(); +} + +ASM_FUNC("asm/non_matching/game/sub_08054920.inc", void sub_08054920()) + +void sub_08054968(void) { + gMenu.menuType = 2; +} + +ASM_FUNC("asm/non_matching/game/sub_08054974.inc", void sub_08054974()) + +ASM_FUNC("asm/non_matching/game/sub_08054A14.inc", void sub_08054A14()) diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c index 7e910f59..3ae836d1 100644 --- a/src/object/figurineDevice.c +++ b/src/object/figurineDevice.c @@ -40,7 +40,7 @@ typedef struct { #endif } FigurineDeviceEntity; -extern void sub_080542C0(s32); +extern void ModShells(s32); extern u8 gUnk_020227F0; typedef struct { u32 unk_0;