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] 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; -}