From 5aa18bbf93eaa432dcb92960f4a0c6c5aa766c84 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 3 Aug 2020 13:24:18 -0700 Subject: [PATCH 1/9] commented arm func calls --- asm/code_08000108.s | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/asm/code_08000108.s b/asm/code_08000108.s index cf176c84..a1f855fd 100644 --- a/asm/code_08000108.s +++ b/asm/code_08000108.s @@ -167,136 +167,162 @@ gUnk_08000278:: .4byte gUnk_02016654 .4byte gUnk_02030EB4 +@ call 0x80B19CC thumb_func_start sub_08000288 sub_08000288: @ 0x08000288 ldr r3, _080002F4 @ =gUnk_03005740 bx r3 +@ call 0x80B19D8 thumb_func_start sub_0800028C sub_0800028C: @ 0x0800028C ldr r3, _080002F8 @ =gUnk_0300574C bx r3 +@ call 0x80B19EC thumb_func_start sub_08000290 sub_08000290: @ 0x08000290 ldr r3, _080002FC @ =gUnk_03005760 bx r3 +@ call 0x80B19FC thumb_func_start sub_08000294 sub_08000294: @ 0x08000294 ldr r3, _08000300 @ =gUnk_03005770 bx r3 +@ call 0x80B1A04 thumb_func_start sub_08000298 sub_08000298: @ 0x08000298 ldr r3, _08000304 @ =gUnk_03005778 bx r3 +@ call 0x80B1A0C thumb_func_start sub_0800029C sub_0800029C: @ 0x0800029C ldr r3, _08000308 @ =gUnk_03005780 bx r3 +@ call 0x080B1A28 thumb_func_start GetTileTypeByEntity GetTileTypeByEntity: @ 0x080002A0 ldr r3, _0800030C @ =gUnk_0300579C bx r3 +@ call 0x080B1A34 thumb_func_start GetTileTypeByPos GetTileTypeByPos: @ 0x080002A4 ldr r3, _08000310 @ =gUnk_030057A8 bx r3 +@ call 0x080B1A48 thumb_func_start sub_080002A8 sub_080002A8: @ 0x080002A8 ldr r3, _08000314 @ =gUnk_030057BC bx r3 +@ call 0x080B1A58 thumb_func_start sub_080002AC sub_080002AC: @ 0x080002AC ldr r3, _08000318 @ =gUnk_030057CC bx r3 +@ call 0x080B1A60 thumb_func_start GetTileType GetTileType: @ 0x080002B0 ldr r3, _0800031C @ =gUnk_030057D4 bx r3 +@ call 0x080B1A8C thumb_func_start sub_080002B4 sub_080002B4: @ 0x080002B4 ldr r3, _08000320 @ =gUnk_03005800 bx r3 +@ call 0x080B1AA8 thumb_func_start sub_080002B8 sub_080002B8: @ 0x080002B8 ldr r3, _08000324 @ =gUnk_0300581C bx r3 +@ call 0x080B1AB4 thumb_func_start sub_080002BC sub_080002BC: @ 0x080002BC ldr r3, _08000328 @ =gUnk_03005828 bx r3 +@ call 0x080B1AC8 thumb_func_start sub_080002C0 sub_080002C0: @ 0x080002C0 ldr r3, _0800032C @ =gUnk_0300583C bx r3 +@ call 0x080B1AD8 thumb_func_start sub_080002C4 sub_080002C4: @ 0x080002C4 ldr r3, _08000330 @ =gUnk_0300584C bx r3 +@ call 0x080B1AE0 thumb_func_start sub_080002C8 sub_080002C8: @ 0x080002C8 ldr r3, _08000334 @ =gUnk_03005854 bx r3 +@ call 0x080B1AF0 thumb_func_start sub_080002CC sub_080002CC: @ 0x080002CC ldr r3, _08000338 @ =gUnk_03005864 bx r3 +@ call 0x080B1B0C thumb_func_start sub_080002D0 sub_080002D0: @ 0x080002D0 ldr r3, _0800033C @ =gUnk_03005880 bx r3 - +@ call 0x080B1B18 thumb_func_start sub_080002D4 sub_080002D4: @ 0x080002D4 ldr r3, _08000340 @ =gUnk_0300588C bx r3 +@ call 0x080B1B2C thumb_func_start sub_080002D8 sub_080002D8: @ 0x080002D8 ldr r3, _08000344 @ =gUnk_030058A0 bx r3 +@ call 0x080B1B3C thumb_func_start sub_080002DC sub_080002DC: @ 0x080002DC ldr r3, _08000348 @ =gUnk_030058B0 bx r3 +@ call 0x080B1B44 thumb_func_start sub_080002E0 sub_080002E0: @ 0x080002E0 ldr r3, _0800034C @ =gUnk_030058B8 bx r3 +@ call 0x080B1B54 thumb_func_start sub_080002E4 sub_080002E4: @ 0x080002E4 ldr r3, _08000350 @ =gUnk_030058C8 bx r3 +@ call 0x080B1B68 thumb_func_start sub_080002E8 sub_080002E8: @ 0x080002E8 ldr r3, _08000354 @ =gUnk_030058DC bx r3 +@ call 0x080B1B84 thumb_func_start sub_080002EC sub_080002EC: @ 0x080002EC ldr r3, _08000358 @ =gUnk_030058F8 bx r3 +@ call 0x080B1BA4 thumb_func_start sub_080002F0 sub_080002F0: @ 0x080002F0 ldr r3, _0800035C @ =gUnk_03005918 From c74456f175c7c87096f72fdccb329c01f314abbc Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 2 Aug 2020 20:02:39 -0500 Subject: [PATCH 2/9] Decompile oject48.c --- asm/greatFairy/sub_080872AC.inc | 38 - asm/object48.s | 1244 ------------------------------- include/entity.h | 13 +- include/global.h | 3 + include/menu.h | 11 +- include/npc.h | 21 +- include/position.h | 1 + include/readKeyInput.h | 16 +- include/structures.h | 24 +- linker.ld | 2 +- src/code_08077B98.c | 6 +- src/enemy/lakitu.c | 4 - src/enemy/miniFireballGuy.c | 2 +- src/enemy/rupeeLike.c | 1 + src/input.c | 29 +- src/introSetTransition.c | 13 +- src/loadRoom.c | 2 +- src/npc/anju.c | 4 +- src/npc/bladeBrothers.c | 12 +- src/npc/carpenter.c | 6 +- src/npc/cow.c | 10 +- src/npc/dampe.c | 4 +- src/npc/epona.c | 10 +- src/npc/festari.c | 4 +- src/npc/forestMinish.c | 14 +- src/npc/gentari.c | 4 +- src/npc/librari.c | 4 +- src/npc/malon.c | 4 +- src/npc/mayorHagen.c | 10 +- src/npc/melari.c | 4 +- src/npc/mutoh.c | 6 +- src/npc/postman.c | 28 +- src/npc/smith.c | 6 +- src/npc/talon.c | 14 +- src/npc/teachers.c | 10 +- src/npc/townMinish.c | 22 +- src/npc/townsperson.c | 16 +- src/npc/windTribespeople.c | 6 +- src/object/cloud.c | 14 +- src/object/greatFairy.c | 13 +- src/object/object48.c | 544 ++++++++++++++ src/object/object49.c | 2 +- src/room.c | 59 +- src/sub_0801D754.c | 8 +- src/sub_080A3B84.c | 2 +- 45 files changed, 758 insertions(+), 1512 deletions(-) delete mode 100644 asm/greatFairy/sub_080872AC.inc delete mode 100644 asm/object48.s create mode 100755 src/object/object48.c diff --git a/asm/greatFairy/sub_080872AC.inc b/asm/greatFairy/sub_080872AC.inc deleted file mode 100644 index a4c842c5..00000000 --- a/asm/greatFairy/sub_080872AC.inc +++ /dev/null @@ -1,38 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x1b] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r1 - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - ands r2, r0 - strb r2, [r4, #0x19] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x6a - strh r0, [r1] - bl Random - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - movs r0, #0x20 - strh r0, [r4, #0x24] - adds r0, r4, #0 - bl GreatFairy_InitializeAnimation - pop {r4, pc} - .syntax divided \ No newline at end of file diff --git a/asm/object48.s b/asm/object48.s deleted file mode 100644 index 6fa30149..00000000 --- a/asm/object48.s +++ /dev/null @@ -1,1244 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object48 -Object48: @ 0x0808E7A0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0808E7B2 - adds r0, r4, #0 - bl sub_0808EFF0 -_0808E7B2: - ldr r1, _0808E7D4 @ =gUnk_08121C64 - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x3f - bhi _0808E7D2 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0808E7D2: - pop {r4, pc} - .align 2, 0 -_0808E7D4: .4byte gUnk_08121C64 - - thumb_func_start sub_0808E7D8 -sub_0808E7D8: @ 0x0808E7D8 - push {lr} - ldr r2, _0808E7EC @ =gUnk_08121CCC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808E7EC: .4byte gUnk_08121CCC - - thumb_func_start sub_0808E7F0 -sub_0808E7F0: @ 0x0808E7F0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - movs r2, #2 - bl sub_080AE008 - ldrb r0, [r4, #0x1a] - movs r1, #0xf - orrs r0, r1 - strb r0, [r4, #0x1a] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xff - strb r0, [r4, #0xb] - movs r0, #1 - strb r0, [r4, #0xc] - pop {r4, pc} - - thumb_func_start sub_0808E818 -sub_0808E818: @ 0x0808E818 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_0808E950 - cmp r0, #0 - bne _0808E840 - movs r1, #1 - rsbs r1, r1, #0 - strb r1, [r4, #0xb] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - adds r0, #2 - strh r1, [r0] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _0808E94E -_0808E840: - ldr r0, _0808E8C0 @ =gUnk_02019EE0 - ldrb r1, [r0, #6] - ldrb r0, [r4, #0xb] - adds r6, r4, #0 - adds r6, #0x68 - adds r5, r4, #0 - adds r5, #0x70 - cmp r0, r1 - beq _0808E894 - strb r1, [r4, #0xb] - movs r0, #0x14 - bl CheckGlobalFlag - movs r2, #0x80 - lsls r2, r2, #1 - adds r1, r2, #0 - cmp r0, #0 - bne _0808E86A - movs r0, #0x80 - lsls r0, r0, #3 - adds r1, r0, #0 -_0808E86A: - strh r1, [r6] - movs r0, #4 - strb r0, [r5] - movs r0, #2 - strb r0, [r4, #0x14] - movs r0, #1 - bl sub_0807A094 - ldr r1, _0808E8C4 @ =gUnk_08133368 - subs r0, #0x16 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldr r1, _0808E8C8 @ =0x00FFFFFF - ands r0, r1 - ldr r1, _0808E8CC @ =gUnk_085A2E80 - adds r0, r0, r1 - movs r1, #0x1f - movs r2, #1 - bl sub_0801D754 -_0808E894: - ldr r0, _0808E8D0 @ =gUnk_02032EC0 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _0808E904 - ldr r3, _0808E8D4 @ =gUnk_03000FF0 - ldrh r1, [r3] - movs r0, #0x80 - lsls r0, r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0808E904 - ldrh r1, [r3, #2] - cmp r1, #0x20 - beq _0808E8F2 - cmp r1, #0x20 - bgt _0808E8D8 - cmp r1, #2 - beq _0808E8F8 - cmp r1, #0x10 - beq _0808E8E6 - b _0808E904 - .align 2, 0 -_0808E8C0: .4byte gUnk_02019EE0 -_0808E8C4: .4byte gUnk_08133368 -_0808E8C8: .4byte 0x00FFFFFF -_0808E8CC: .4byte gUnk_085A2E80 -_0808E8D0: .4byte gUnk_02032EC0 -_0808E8D4: .4byte gUnk_03000FF0 -_0808E8D8: - cmp r1, #0x40 - beq _0808E8E2 - cmp r1, #0x80 - beq _0808E8EC - b _0808E904 -_0808E8E2: - strb r2, [r4, #0x14] - b _0808E904 -_0808E8E6: - movs r0, #1 - strb r0, [r4, #0x14] - b _0808E904 -_0808E8EC: - movs r0, #2 - strb r0, [r4, #0x14] - b _0808E904 -_0808E8F2: - movs r0, #3 - strb r0, [r4, #0x14] - b _0808E904 -_0808E8F8: - ldrb r0, [r5] - movs r1, #0 - cmp r0, #0 - bne _0808E902 - movs r1, #4 -_0808E902: - strb r1, [r5] -_0808E904: - movs r2, #0 - ldrb r0, [r4, #0x14] - cmp r0, #3 - bne _0808E90E - movs r2, #1 -_0808E90E: - lsls r2, r2, #6 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - ldrh r0, [r6] - ldrb r1, [r5] - adds r0, r0, r1 - ldrb r2, [r4, #0x14] - adds r1, r0, r2 - adds r2, r4, #0 - adds r2, #0x6a - ldrh r0, [r2] - cmp r0, r1 - beq _0808E940 - strh r1, [r2] - lsrs r0, r1, #8 - strh r0, [r4, #0x12] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0808E940: - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #2 - orrs r1, r0 - strb r1, [r4, #0x18] -_0808E94E: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0808E950 -sub_0808E950: @ 0x0808E950 - push {lr} - movs r2, #0 - ldr r0, _0808E980 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #0 - beq _0808E968 - cmp r0, #0 - blt _0808E97C - cmp r0, #7 - bgt _0808E97C - cmp r0, #4 - blt _0808E97C -_0808E968: - ldr r0, _0808E984 @ =gUnk_02019EE0 - adds r1, r0, #0 - adds r1, #8 - ldrb r0, [r0, #6] - adds r1, r1, r0 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #1 - bne _0808E97C - movs r2, #1 -_0808E97C: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0808E980: .4byte gUnk_02032EC0 -_0808E984: .4byte gUnk_02019EE0 - - thumb_func_start sub_0808E988 -sub_0808E988: @ 0x0808E988 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _0808E9AA - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #0xa1 - lsls r0, r0, #1 - strh r0, [r5, #0x12] - movs r0, #0xff - strb r0, [r5, #0xb] - adds r0, r5, #0 - movs r1, #1 - movs r2, #3 - bl sub_080AE008 -_0808E9AA: - bl sub_0808E950 - cmp r0, #0 - beq _0808E9E8 - movs r4, #6 - b _0808E9BC -_0808E9B6: - subs r4, #1 - cmp r4, #0 - beq _0808E9E8 -_0808E9BC: - adds r0, r4, #0 - bl GetInventoryValue - cmp r0, #0 - beq _0808E9B6 - cmp r4, #0 - beq _0808E9E8 - ldrb r0, [r5, #0xb] - cmp r0, r4 - beq _0808E9D8 - adds r0, r5, #0 - adds r1, r4, #0 - bl InitAnimationForceUpdate -_0808E9D8: - ldrb r0, [r5, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #2 - orrs r1, r0 - strb r1, [r5, #0x18] - b _0808E9F2 -_0808E9E8: - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r5, #0x18] -_0808E9F2: - pop {r4, r5, pc} - - thumb_func_start sub_0808E9F4 -sub_0808E9F4: @ 0x0808E9F4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0808E950 - cmp r0, #0 - beq _0808EA1C - ldr r0, _0808EA18 @ =gUnk_02002A40 - ldrb r0, [r0, #6] - cmp r0, #0 - beq _0808EA1C - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #2 - orrs r1, r0 - strb r1, [r4, #0x18] - b _0808EA26 - .align 2, 0 -_0808EA18: .4byte gUnk_02002A40 -_0808EA1C: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_0808EA26: - pop {r4, pc} - - thumb_func_start sub_0808EA28 -sub_0808EA28: @ 0x0808EA28 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #3 - bne _0808EA56 - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #1 - bls _0808EA4C - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #2 - orrs r1, r0 - strb r1, [r4, #0x18] - b _0808EA56 -_0808EA4C: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_0808EA56: - ldr r2, _0808EA68 @ =gUnk_02019EE0 - ldrb r1, [r4, #0xa] - ldrb r0, [r2, #6] - cmp r1, r0 - bne _0808EA6C - movs r3, #0xc - movs r2, #1 - b _0808EA88 - .align 2, 0 -_0808EA68: .4byte gUnk_02019EE0 -_0808EA6C: - ldr r0, _0808EA80 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #5 - bne _0808EA84 - ldrb r2, [r2, #7] - cmp r1, r2 - bne _0808EA84 - movs r3, #0xd - b _0808EA86 - .align 2, 0 -_0808EA80: .4byte gUnk_02032EC0 -_0808EA84: - movs r3, #0xe -_0808EA86: - movs r2, #2 -_0808EA88: - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r4, #0x1a] - lsls r2, r2, #6 - ldrb r1, [r4, #0x19] - movs r0, #0x3f - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_0808EABC - adds r0, r4, #0 - bl sub_0808EF6C - ldr r2, _0808EAB8 @ =gUnk_02019EE0 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - pop {r4, pc} - .align 2, 0 -_0808EAB8: .4byte gUnk_02019EE0 - - thumb_func_start sub_0808EABC -sub_0808EABC: @ 0x0808EABC - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0x48 - rsbs r4, r4, #0 - ldrb r1, [r5, #0xa] - lsls r0, r1, #5 - adds r2, r0, #0 - adds r2, #0x28 - movs r3, #0 - ldr r0, _0808EAEC @ =gUnk_02019EE0 - ldrb r0, [r0, #6] - cmp r0, r1 - bne _0808EAD8 - movs r3, #1 -_0808EAD8: - ldr r0, _0808EAF0 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #7 - bhi _0808EB60 - lsls r0, r0, #2 - ldr r1, _0808EAF4 @ =_0808EAF8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808EAEC: .4byte gUnk_02019EE0 -_0808EAF0: .4byte gUnk_02032EC0 -_0808EAF4: .4byte _0808EAF8 -_0808EAF8: @ jump table - .4byte _0808EB18 @ case 0 - .4byte _0808EB60 @ case 1 - .4byte _0808EB56 @ case 2 - .4byte _0808EB1C @ case 3 - .4byte _0808EB1C @ case 4 - .4byte _0808EB26 @ case 5 - .4byte _0808EB1C @ case 6 - .4byte _0808EB1C @ case 7 -_0808EB18: - movs r4, #0x18 - b _0808EB68 -_0808EB1C: - cmp r3, #0 - beq _0808EB68 - movs r4, #0x2a - movs r2, #0x38 - b _0808EB68 -_0808EB26: - ldr r3, _0808EB3C @ =gMenu - adds r0, r3, #0 - adds r0, #0x10 - ldrb r1, [r5, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - cmp r1, #0 - bne _0808EB40 - movs r4, #0x2a - movs r2, #0x28 - b _0808EB68 - .align 2, 0 -_0808EB3C: .4byte gMenu -_0808EB40: - cmp r1, #0 - blt _0808EB68 - cmp r1, #2 - bgt _0808EB68 - movs r4, #0x14 - movs r2, #0x90 - ldrb r0, [r3, #0x16] - subs r0, r0, r1 - lsls r0, r0, #5 - subs r2, r2, r0 - b _0808EB68 -_0808EB56: - cmp r3, #0 - beq _0808EB68 - movs r4, #0x1a - movs r2, #0x2a - b _0808EB68 -_0808EB60: - cmp r3, #0 - beq _0808EB68 - movs r4, #8 - movs r2, #0x23 -_0808EB68: - adds r0, r5, #0 - adds r0, #0x68 - strh r4, [r0] - adds r0, #2 - strh r2, [r0] - pop {r4, r5, pc} - - thumb_func_start sub_0808EB74 -sub_0808EB74: @ 0x0808EB74 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0808EBA8 @ =gUnk_02019EE0 - ldrb r0, [r0, #6] - bl sub_0808EC80 - adds r3, r0, #0 - cmp r3, #0 - beq _0808EBAC - ldr r0, [r3, #0x2c] - str r0, [r4, #0x2c] - ldr r0, [r3, #0x30] - str r0, [r4, #0x30] - ldrb r1, [r3, #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, r3, #0 - adds r1, r4, #0 - bl sub_0806FAD8 - b _0808EBB4 - .align 2, 0 -_0808EBA8: .4byte gUnk_02019EE0 -_0808EBAC: - movs r0, #0xf0 - lsls r0, r0, #8 - strh r0, [r4, #0x2e] - strh r0, [r4, #0x32] -_0808EBB4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808EBB8 -sub_0808EBB8: @ 0x0808EBB8 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r0, _0808EBD0 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - subs r0, #2 - cmp r0, #5 - bhi _0808EC1C - lsls r0, r0, #2 - ldr r1, _0808EBD4 @ =_0808EBD8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808EBD0: .4byte gUnk_02032EC0 -_0808EBD4: .4byte _0808EBD8 -_0808EBD8: @ jump table - .4byte _0808EC18 @ case 0 - .4byte _0808EC1C @ case 1 - .4byte _0808EBF0 @ case 2 - .4byte _0808EBFC @ case 3 - .4byte _0808EC00 @ case 4 - .4byte _0808EC14 @ case 5 -_0808EBF0: - ldr r0, _0808EBF8 @ =gMenu - ldrb r0, [r0, #1] - adds r1, r0, #4 - b _0808EC1E - .align 2, 0 -_0808EBF8: .4byte gMenu -_0808EBFC: - movs r1, #2 - b _0808EC1E -_0808EC00: - ldr r0, _0808EC10 @ =gMenu - ldrb r0, [r0, #1] - movs r1, #6 - cmp r0, #0 - bne _0808EC1E - movs r1, #7 - b _0808EC1E - .align 2, 0 -_0808EC10: .4byte gMenu -_0808EC14: - movs r1, #4 - b _0808EC1E -_0808EC18: - movs r1, #1 - b _0808EC1E -_0808EC1C: - movs r1, #0 -_0808EC1E: - movs r5, #0xf0 - lsls r5, r5, #8 - adds r6, r5, #0 - cmp r1, #1 - beq _0808EC32 - cmp r1, #1 - blo _0808EC76 - cmp r1, #2 - beq _0808EC42 - b _0808EC4C -_0808EC32: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - lsls r0, r0, #4 - adds r5, r0, #0 - adds r5, #0x18 - movs r6, #0x70 - b _0808EC76 -_0808EC42: - ldr r0, _0808EC7C @ =gUnk_02019EE0 - ldrb r1, [r0, #7] - cmp r1, #4 - bne _0808EC4C - movs r1, #7 -_0808EC4C: - adds r0, r1, #0 - bl sub_0808EC80 - adds r4, r0, #0 - cmp r4, #0 - beq _0808EC76 - adds r1, r7, #0 - bl sub_0806FAD8 - ldrb r0, [r4, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r7, #0x19] - movs r1, #0x3f - ands r1, r2 - orrs r1, r0 - strb r1, [r7, #0x19] - movs r0, #0x2e - ldrsh r6, [r4, r0] - movs r0, #0x32 - ldrsh r5, [r4, r0] -_0808EC76: - strh r6, [r7, #0x2e] - strh r5, [r7, #0x32] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808EC7C: .4byte gUnk_02019EE0 - - thumb_func_start sub_0808EC80 -sub_0808EC80: @ 0x0808EC80 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r3, _0808ECA4 @ =gUnk_03003DA0 - ldr r2, [r3, #4] - cmp r2, r3 - beq _0808ECB6 - ldr r6, _0808ECA8 @ =0x0000FFFF - ldr r5, _0808ECAC @ =0x00004806 -_0808EC90: - ldrh r1, [r2, #8] - adds r0, r6, #0 - ands r0, r1 - cmp r0, r5 - bne _0808ECB0 - ldrb r0, [r2, #0xa] - cmp r4, r0 - bne _0808ECB0 - adds r0, r2, #0 - b _0808ECB8 - .align 2, 0 -_0808ECA4: .4byte gUnk_03003DA0 -_0808ECA8: .4byte 0x0000FFFF -_0808ECAC: .4byte 0x00004806 -_0808ECB0: - ldr r2, [r2, #4] - cmp r2, r3 - bne _0808EC90 -_0808ECB6: - movs r0, #0 -_0808ECB8: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0808ECBC -sub_0808ECBC: @ 0x0808ECBC - push {r4, lr} - adds r3, r0, #0 - ldr r0, _0808ECD8 @ =gMenu - ldrb r4, [r0, #1] - ldr r0, _0808ECDC @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #5 - beq _0808ECEE - cmp r0, #5 - bgt _0808ECE0 - cmp r0, #4 - beq _0808ECEA - b _0808ED04 - .align 2, 0 -_0808ECD8: .4byte gMenu -_0808ECDC: .4byte gUnk_02032EC0 -_0808ECE0: - cmp r0, #6 - beq _0808ECFC - cmp r0, #7 - beq _0808ED00 - b _0808ED04 -_0808ECEA: - movs r0, #1 - b _0808ED06 -_0808ECEE: - ldr r0, _0808ECF8 @ =gUnk_02019EE0 - ldrb r4, [r0, #7] - movs r0, #2 - b _0808ED06 - .align 2, 0 -_0808ECF8: .4byte gUnk_02019EE0 -_0808ECFC: - movs r0, #3 - b _0808ED06 -_0808ED00: - movs r0, #4 - b _0808ED06 -_0808ED04: - movs r0, #0 -_0808ED06: - ldrb r2, [r3, #0xa] - subs r2, #4 - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - lsls r0, r2, #1 - adds r0, r0, r2 - ldr r2, _0808ED3C @ =gUnk_08121CD4 - adds r0, r0, r2 - adds r1, r1, r0 - ldrb r2, [r1, #1] - adds r0, r3, #0 - adds r0, #0x68 - strh r2, [r0] - ldrb r0, [r1, #2] - adds r2, r3, #0 - adds r2, #0x6a - strh r0, [r2] - ldrb r0, [r1] - cmp r0, r4 - bne _0808ED40 - ldrb r0, [r3, #0x1a] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #0xd - b _0808ED4A - .align 2, 0 -_0808ED3C: .4byte gUnk_08121CD4 -_0808ED40: - ldrb r0, [r3, #0x1a] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #0xe -_0808ED4A: - orrs r1, r0 - strb r1, [r3, #0x1a] - adds r0, r3, #0 - bl sub_0808EF6C - ldr r2, _0808ED60 @ =gUnk_02019EE0 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - pop {r4, pc} - .align 2, 0 -_0808ED60: .4byte gUnk_02019EE0 - - thumb_func_start sub_0808ED64 -sub_0808ED64: @ 0x0808ED64 - push {lr} - adds r2, r0, #0 - movs r3, #0xff - ldr r0, _0808ED90 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #1 - bne _0808ED8A - ldr r1, _0808ED94 @ =gMenu - ldrb r0, [r1, #0x11] - cmp r0, #5 - beq _0808ED8A - ldrb r0, [r1, #0x10] - lsls r0, r0, #4 - adds r0, #0x1c - strh r0, [r2, #0x2e] - ldrb r0, [r1, #0x11] - lsls r0, r0, #4 - adds r3, r0, #0 - adds r3, #0x3a -_0808ED8A: - strh r3, [r2, #0x32] - pop {pc} - .align 2, 0 -_0808ED90: .4byte gUnk_02032EC0 -_0808ED94: .4byte gMenu - - thumb_func_start sub_0808ED98 -sub_0808ED98: @ 0x0808ED98 - push {lr} - adds r3, r0, #0 - ldr r0, _0808EDB4 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #1 - beq _0808EDB8 - adds r1, r3, #0 - adds r1, #0x68 - movs r0, #0x1b - strh r0, [r1] - movs r1, #0xa - rsbs r1, r1, #0 - b _0808EDCE - .align 2, 0 -_0808EDB4: .4byte gUnk_02032EC0 -_0808EDB8: - ldr r0, _0808EDF8 @ =gMenu - ldrb r0, [r0, #0x13] - cmp r0, #5 - bls _0808EDC2 - movs r0, #5 -_0808EDC2: - lsls r0, r0, #3 - adds r0, #0x1b - adds r1, r3, #0 - adds r1, #0x68 - strh r0, [r1] - movs r1, #0x18 -_0808EDCE: - strh r1, [r3, #0x32] - adds r0, r3, #0 - adds r0, #0x6a - strh r1, [r0] - ldrb r0, [r3, #0xf] - adds r0, #1 - strb r0, [r3, #0xf] - ldr r2, _0808EDFC @ =gUnk_08121D10 - ldrb r0, [r3, #0xf] - lsrs r0, r0, #2 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - adds r1, r3, #0 - adds r1, #0x63 - strb r0, [r1] - adds r0, r3, #0 - bl sub_0808EF6C - pop {pc} - .align 2, 0 -_0808EDF8: .4byte gMenu -_0808EDFC: .4byte gUnk_08121D10 - - thumb_func_start sub_0808EE00 -sub_0808EE00: @ 0x0808EE00 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - rsbs r2, r0, #0 - orrs r2, r0 - lsrs r2, r2, #0x1f - ldrb r0, [r4, #0xa] - adds r5, r0, #0 - subs r5, #0xa - ldr r1, _0808EE48 @ =gUnk_08121D38 - lsls r0, r2, #3 - adds r0, r5, r0 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0x1e] - ldr r3, _0808EE4C @ =gUnk_08121D18 - lsls r0, r5, #1 - lsls r1, r2, #4 - adds r0, r0, r1 - adds r0, r0, r3 - ldrh r1, [r0] - strh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - subs r5, r5, r2 - ldr r0, _0808EE50 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #1 - beq _0808EE54 - movs r5, #0x80 - movs r1, #0xb0 - b _0808EE56 - .align 2, 0 -_0808EE48: .4byte gUnk_08121D38 -_0808EE4C: .4byte gUnk_08121D18 -_0808EE50: .4byte gUnk_02032EC0 -_0808EE54: - movs r1, #0x8c -_0808EE56: - adds r0, r4, #0 - adds r0, #0x6a - strh r1, [r0] - ldr r1, _0808EE8C @ =gMenu - ldrb r0, [r1, #0x11] - movs r2, #9 - cmp r0, #5 - bne _0808EE6E - ldrb r1, [r1, #0x12] - cmp r5, r1 - bne _0808EE6E - movs r2, #0xb -_0808EE6E: - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x1a] - adds r0, r4, #0 - bl sub_0808EF6C - ldr r2, _0808EE90 @ =gUnk_02019EE0 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - pop {r4, r5, pc} - .align 2, 0 -_0808EE8C: .4byte gMenu -_0808EE90: .4byte gUnk_02019EE0 - - thumb_func_start nullsub_522 -nullsub_522: @ 0x0808EE94 - bx lr - .align 2, 0 - - thumb_func_start sub_0808EE98 -sub_0808EE98: @ 0x0808EE98 - push {lr} - adds r3, r0, #0 - ldr r0, _0808EEBC @ =gUnk_02032EC0 - ldrb r1, [r0, #2] - strb r1, [r3, #0xe] - ldr r2, _0808EEC0 @ =gUnk_08121D48 - ldrb r0, [r3, #0xe] - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r3, #0x1e] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #2 - beq _0808EEC4 - adds r1, r3, #0 - adds r1, #0x68 - movs r0, #0x60 - b _0808EECA - .align 2, 0 -_0808EEBC: .4byte gUnk_02032EC0 -_0808EEC0: .4byte gUnk_08121D48 -_0808EEC4: - adds r1, r3, #0 - adds r1, #0x68 - ldr r0, _0808EED4 @ =0x0000FFA0 -_0808EECA: - strh r0, [r1] - adds r0, r3, #0 - bl sub_0808EF6C - pop {pc} - .align 2, 0 -_0808EED4: .4byte 0x0000FFA0 - - thumb_func_start sub_0808EED8 -sub_0808EED8: @ 0x0808EED8 - push {lr} - adds r2, r0, #0 - ldr r0, _0808EEF0 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #3 - beq _0808EEF4 - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _0808EF1E - .align 2, 0 -_0808EEF0: .4byte gUnk_02032EC0 -_0808EEF4: - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #0x18] - ldrb r1, [r2, #0xa] - subs r1, #0x13 - ldr r0, _0808EF20 @ =gMenu - ldrb r0, [r0, #1] - movs r3, #3 - cmp r0, r1 - bne _0808EF12 - movs r3, #4 -_0808EF12: - ldrb r1, [r2, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, #0x1a] -_0808EF1E: - pop {pc} - .align 2, 0 -_0808EF20: .4byte gMenu - - thumb_func_start sub_0808EF24 -sub_0808EF24: @ 0x0808EF24 - push {lr} - adds r2, r0, #0 - ldr r0, _0808EF3C @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - cmp r0, #3 - beq _0808EF40 - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _0808EF68 - .align 2, 0 -_0808EF3C: .4byte gUnk_02032EC0 -_0808EF40: - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #0x18] - ldrb r0, [r2, #0xa] - cmp r0, #0x15 - bne _0808EF5C - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r1, [r0, #5] - b _0808EF62 -_0808EF5C: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r1, [r0, #6] -_0808EF62: - ldrb r0, [r2, #0x1f] - adds r0, r0, r1 - strb r0, [r2, #0x1e] -_0808EF68: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0808EF6C -sub_0808EF6C: @ 0x0808EF6C - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r0, #0x68 - movs r2, #0 - ldrsh r1, [r0, r2] - movs r2, #0x2e - ldrsh r0, [r5, r2] - subs r6, r1, r0 - adds r0, r6, #0 - cmp r6, #0 - bge _0808EF84 - rsbs r0, r6, #0 -_0808EF84: - cmp r0, #1 - bhi _0808EF8E - lsls r0, r1, #0x10 - str r0, [r5, #0x2c] - movs r6, #0 -_0808EF8E: - adds r0, r5, #0 - adds r0, #0x6a - movs r2, #0 - ldrsh r1, [r0, r2] - movs r2, #0x32 - ldrsh r0, [r5, r2] - subs r4, r1, r0 - adds r0, r4, #0 - cmp r4, #0 - bge _0808EFA4 - rsbs r0, r4, #0 -_0808EFA4: - cmp r0, #1 - bhi _0808EFAE - lsls r0, r1, #0x10 - str r0, [r5, #0x30] - movs r4, #0 -_0808EFAE: - adds r0, r6, #0 - orrs r0, r4 - cmp r0, #0 - bne _0808EFBA - movs r0, #0 - b _0808EFEC -_0808EFBA: - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_080041EC - adds r1, r0, #0 - adds r0, #0x80 - lsls r1, r1, #4 - adds r1, r0, r1 - adds r0, r5, #0 - adds r0, #0x6c - ldrh r0, [r0] - cmp r0, r1 - bge _0808EFD6 - adds r1, r0, #0 -_0808EFD6: - strh r1, [r5, #0x24] - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_080045DA - lsrs r0, r0, #3 - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl sub_0806F69C - movs r0, #1 -_0808EFEC: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0808EFF0 -sub_0808EFF0: @ 0x0808EFF0 - push {r4, r5, lr} - mov ip, r0 - ldrb r1, [r0, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x18] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r1, #0x24] - adds r1, #0x45 - movs r0, #1 - strb r0, [r1] - movs r0, #0xff - mov r3, ip - strb r0, [r3, #0x1e] - adds r1, #0x13 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - ldrb r4, [r3, #0xa] - lsls r4, r4, #3 - ldr r0, _0808F094 @ =gUnk_08121D54 - adds r4, r4, r0 - ldrh r0, [r4, #2] - strh r0, [r3, #0x2e] - ldrh r1, [r4, #2] - mov r0, ip - adds r0, #0x68 - strh r1, [r0] - ldrh r0, [r4, #4] - strh r0, [r3, #0x32] - ldrh r0, [r4, #4] - mov r1, ip - adds r1, #0x6a - strh r0, [r1] - ldrb r1, [r4, #6] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x17 - ldrb r3, [r3, #0x19] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r3 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x19] - ldrb r1, [r4, #6] - lsls r1, r1, #0x1a - mov r5, ip - adds r5, #0x29 - lsrs r1, r1, #0x1d - ldrb r3, [r5] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r1 - strb r0, [r5] - ldrb r0, [r4, #6] - lsrs r0, r0, #6 - lsls r0, r0, #6 - mov r3, ip - ldrb r1, [r3, #0x1b] - ands r2, r1 - orrs r2, r0 - strb r2, [r3, #0x1b] - ldrh r1, [r4] - mov r0, ip - adds r0, #0x6c - strh r1, [r0] - ldrb r1, [r4, #7] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808F098 - movs r0, #0x7f - ands r1, r0 - strb r1, [r3, #0x1e] - strb r1, [r3, #0x1f] - b _0808F09E - .align 2, 0 -_0808F094: .4byte gUnk_08121D54 -_0808F098: - mov r0, ip - bl InitAnimationForceUpdate -_0808F09E: - pop {r4, r5, pc} diff --git a/include/entity.h b/include/entity.h index b3121fd3..e717c9e1 100644 --- a/include/entity.h +++ b/include/entity.h @@ -27,7 +27,7 @@ typedef struct { typedef struct Entity { /*0x00*/ u32* field_0x0; - /*0x04*/ u32* field_0x4; + /*0x04*/ struct Entity* field_0x4; /*0x08*/ EntityType entityType; /*0x0c*/ u8 action; /*0x0d*/ u8 previousActionFlag; @@ -124,13 +124,11 @@ typedef struct Entity { /*0x5c*/ Frame* animPtr; /*0x60*/ u16 spriteVramOffset; /*0x62*/ u8 spriteOffsetX; - /*0x64*/ u8 spriteOffsetY; + /*0x63*/ u8 spriteOffsetY; /*0x64*/ u32* otherEntity; - /*0x68*/ u8 field_0x68; - /*0x69*/ u8 field_0x69; + /*0x68*/ union SplitHWord field_0x68; /*0x6a*/ union SplitHWord field_0x6a; - /*0x6c*/ u8 field_0x6c; - /*0x6d*/ u8 field_0x6d; + /*0x6c*/ union SplitHWord field_0x6c; /*0x6e*/ u8 filler4[2]; /*0x70*/ union SplitWord field_0x70; /*0x74*/ u16 field_0x74; @@ -171,4 +169,7 @@ extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern u32 GetFacingDirection(Entity*, Entity*); extern void DeleteThisEntity(); + +extern Entity gUnk_03003DA0; + #endif diff --git a/include/global.h b/include/global.h index 6738b6b8..49f06d58 100644 --- a/include/global.h +++ b/include/global.h @@ -64,6 +64,9 @@ union SplitWord { struct { s16 LO, HI; } HALF; + struct { + u8 byte0, byte1, byte2, byte3; + } BYTES; }; union SplitHWord { diff --git a/include/menu.h b/include/menu.h index 7da2a591..93b77591 100644 --- a/include/menu.h +++ b/include/menu.h @@ -27,9 +27,14 @@ typedef struct { u8 overlayType; u8 storyPanelIndex; u16 transitionTimer; - u8 field_0xa[8]; - u8 field_0x11; - u8 field_0x12[0x16]; + u8 fillerA[0x6]; + u8 unk10[2]; + u8 field_0x12; + u8 unk13; + u8 filler14[0x2]; + u8 unk16; + u8 filler17[0x13]; + u8 unk2a; u32 field_0x2c; } Menu; diff --git a/include/npc.h b/include/npc.h index 314a5869..7b95e745 100644 --- a/include/npc.h +++ b/include/npc.h @@ -170,19 +170,22 @@ extern void Phonograph(Entity*); extern void NPC58(Entity*); extern void NPC58_Head(Entity*); - extern u32 UpdateFuseInteraction(Entity*); extern void ShowNPCDialogue(Entity*, u32*); typedef struct { - /*0x000*/ u8 filler[8]; - /*0x008*/ u8 unk; - /*0x009*/ u8 filler2[0x47]; - /*0x050*/ u32 unk2; - /*0x051*/ u8 filler3[0x54]; - /*0x0a8*/ Stats stats; - /*0x0d0*/ u8 filler4[0x3c0]; - /*0x490*/ u32 unk3; + /*0x000*/ u8 filler0[0x6]; + /*0x006*/ u8 unk6; + /*0x007*/ u8 unk7; + /*0x008*/ u8 unk8; + /*0x009*/ u8 field_0x9[0x34]; + /*0x040*/ u32 windcrests; + /*0x044*/ u8 filler44[0xC]; + /*0x050*/ u32 unk50; + /*0x054*/ u8 filler54[0x54]; + /*0x0A8*/ Stats stats; + /*0x0D0*/ u8 filler4[0x3c0]; + /*0x490*/ u32 unk490; } struct_02002A40; extern struct_02002A40 gUnk_02002A40; diff --git a/include/position.h b/include/position.h index bc860826..d0acb275 100644 --- a/include/position.h +++ b/include/position.h @@ -9,5 +9,6 @@ void PositionEntityOnTop(Entity*, Entity*); void PositionRelative(Entity*, Entity*, s32, s32); void sub_0806FA90(Entity*, Entity*, s32, s32); void ResolveEntityOnTop(Entity*, Entity*); +void sub_0806FAD8(Entity*, Entity*); #endif \ No newline at end of file diff --git a/include/readKeyInput.h b/include/readKeyInput.h index 27114243..04711bcd 100644 --- a/include/readKeyInput.h +++ b/include/readKeyInput.h @@ -1,9 +1,9 @@ -struct Input { - u16 unk0; - u16 unk1; - u16 unk2; - u8 unk3; - u8 unk4; -}; +typedef struct { + u16 heldKeys; + u16 newKeys; + u16 unk4; + u8 unk6; + u8 unk7; +} Input; -// void ReadKeyInput(void); +extern Input gUnk_03000FF0; diff --git a/include/structures.h b/include/structures.h index fb96345d..eea1a2be 100644 --- a/include/structures.h +++ b/include/structures.h @@ -6,15 +6,14 @@ #include "link.h" typedef struct { - u8 filler[8]; - u8 field_0x8; - u8 field_0x9[0x34]; - u32 windcrests; - u8 field_0x44[0x64]; - Stats stats; -} struct_02002A40; + char header[4]; + u8 saveFile; + u8 field_0x5; + u8 brightnessPref; + u8 gameLanguage; +} struct_02000000; -extern struct_02002A40 gUnk_02002A40; +extern struct_02000000 gUnk_02000000; typedef struct { u8 field_0x0[8]; @@ -39,5 +38,14 @@ typedef struct { extern struct_030010A0 gUnk_030010A0; +typedef struct { + /*0x00*/ u8 unk0; + /*0x01*/ u8 filler1[0x5]; + /*0x06*/ u8 unk6; + /*0x07*/ u8 unk7; + /*0x08*/ s8 unk8[0x10]; // ?? unclear know how large this is +} struct_02019EE0; + +extern struct_02019EE0 gUnk_02019EE0; #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 8720510b..c81b5bc8 100644 --- a/linker.ld +++ b/linker.ld @@ -744,7 +744,7 @@ SECTIONS { asm/object45.o(.text); asm/giantBookLadder.o(.text); src/object/heartContainer.o(.text); - asm/object48.o(.text); + src/object/object48.o(.text); src/object/object49.o(.text); asm/object49.o(.text); asm/backgroundCloud.o(.text); diff --git a/src/code_08077B98.c b/src/code_08077B98.c index c908595b..a29e2c22 100644 --- a/src/code_08077B98.c +++ b/src/code_08077B98.c @@ -83,7 +83,7 @@ void* sub_08077C54(UnkItemStruct* unk) item->entityType.type = 8; item->flags = 0xa0; item->parent = (Entity*)unk; - item->field_0x68 = unk->field_0x1; + item->field_0x68.HALF.LO = unk->field_0x1; sub_0805EA2C(item, 2); } return item; @@ -111,7 +111,7 @@ Entity * CreatePlayerItem(u32 subtype, u32 form, u32 parameter, u32 unk) (ent->entityType).subtype = subtype; (ent->entityType).form = form; (ent->entityType).parameter = parameter; - ent->field_0x68 = unk; + ent->field_0x68.HALF.LO = unk; sub_0805EA2C(ent, 2); } return ent; @@ -128,7 +128,7 @@ Entity * sub_08077CF8(u32 subtype, u32 form, u32 parameter, u32 unk) (ent->entityType).subtype = subtype; (ent->entityType).form = form; (ent->entityType).parameter = parameter; - ent->field_0x68 = unk; + ent->field_0x68.HALF.LO = unk; sub_0805EA2C(ent, 2); } return ent; diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index 9189c525..146523f0 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -31,10 +31,6 @@ extern void sub_0804A720(Entity *); extern void sub_0803CA84(Entity *, u32); extern bool32 sub_0803CA4C(Entity *); -// Many functions -extern void UpdateAnimationSingleFrame(Entity *); -extern void InitAnimationForceUpdate(Entity *, u32); - // sub_0803C918 extern u32 sub_0803CB04(Entity *); diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c index d7bdc540..820381c4 100644 --- a/src/enemy/miniFireballGuy.c +++ b/src/enemy/miniFireballGuy.c @@ -31,7 +31,7 @@ void sub_080455D4(Entity *this) void sub_080455E4(Entity *this) { if ((this != this->parent) && (this->parent != NULL)) { - this->field_0x6c = this->field_0x6c & 0x7f; + this->field_0x6c.HALF.LO &= 0x7f; this->parent->attachedEntity = this->attachedEntity; this->attachedEntity->parent = this->parent; } diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index 009b8789..cbd991c4 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -2,6 +2,7 @@ #include "entity.h" #include "enemy.h" #include "functions.h" +#include "npc.h" #include "structures.h" #include "link.h" diff --git a/src/input.c b/src/input.c index df5b2290..438a6e6b 100644 --- a/src/input.c +++ b/src/input.c @@ -1,18 +1,9 @@ #include "global.h" #include "entity.h" - -typedef struct { - u16 field_0x0; - u16 field_0x2; - u16 field_0x4; - u8 field_0x6; - u8 field_0x7; -} Input; +#include "readKeyInput.h" void StoreKeyInput(Input *pkeyInput, u32 ioKeyInput); -extern Input gUnk_03000FF0; - void ReadKeyInput(void) { u32 reg = ~*(u16*)0x04000130 & 0x3FF; @@ -23,22 +14,22 @@ void ReadKeyInput(void) void StoreKeyInput(Input *input, u32 ioKeyInput) { u32 difference; - u32 temp = input->field_0x0; + u32 temp = input->heldKeys; difference = ioKeyInput & ~temp; - input->field_0x2 = difference; + input->newKeys = difference; if (ioKeyInput == temp) { - if (--input->field_0x7 == 0) { - input->field_0x7 = 4; - input->field_0x4 = ioKeyInput; + if (--input->unk7 == 0) { + input->unk7 = 4; + input->unk4 = ioKeyInput; } else { - input->field_0x4 = 0; + input->unk4 = 0; } } else { - input->field_0x7 = 0x14; - input->field_0x4 = difference; + input->unk7 = 0x14; + input->unk4 = difference; } - input->field_0x0 = ioKeyInput; + input->heldKeys = ioKeyInput; } \ No newline at end of file diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 32bb02c3..33f0e62c 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -4,6 +4,7 @@ #include "entity.h" #include "functions.h" #include "screen.h" +#include "structures.h" extern void (*const gUnk_081320F0[])(); @@ -17,14 +18,6 @@ typedef struct { extern struct_03000FD0 gUnk_03000FD0; -typedef struct { - char header[4]; - u8 saveFile; - u8 field_0x5; - u8 brightnessPref; - u8 gameLanguage; -} struct_02000000; - typedef struct { u8 filler[5]; u8 field_0x5; @@ -111,7 +104,7 @@ void sub_080AD474(void) int iVar2; u32 uVar3; - gMenu.field_0x11++; + gMenu.field_0x12++; switch (gMenu.menuType) { case 0: gMenu.menuType = 1; @@ -230,7 +223,7 @@ void sub_080AD6AC(void) switch (gMenu.overlayType) { case 0: if (gUnk_03000FD0.field_0x0 == 0) { - if ((gMenu.field_0x11 & 1) == 0) { + if ((gMenu.field_0x12 & 1) == 0) { gScreen.bg2.bg0Control++; } diff --git a/src/loadRoom.c b/src/loadRoom.c index ebc66264..86749a52 100644 --- a/src/loadRoom.c +++ b/src/loadRoom.c @@ -39,7 +39,7 @@ void sub_0804B058(EntityData* dat) { if (sub_08049D1C(uVar2) != 0) { ent = CreateEntity(dat); if ((ent != NULL) && ((ent->entityType).type == 3)) { - ent->field_0x6c = uVar2 | 0x80; + ent->field_0x6c.HALF.LO = uVar2 | 0x80; } } } else { diff --git a/src/npc/anju.c b/src/npc/anju.c index e1b7e4e8..19e5a7a2 100644 --- a/src/npc/anju.c +++ b/src/npc/anju.c @@ -44,8 +44,8 @@ void Anju(Entity *this) void sub_0806C354(Entity *this) { - this->field_0x68 = sub_0801E99C(); - sub_08078784(this,this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(); + sub_08078784(this, this->field_0x68.HALF.LO); } void Anju_Fusion(Entity *this) diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index bcd9fa62..051d8836 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -123,8 +123,8 @@ void sub_08068ADC(Entity* this) { void sub_08068AFC(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; - *(u8*)&this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, *(u8*)&this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0807DD50(this); } @@ -161,14 +161,14 @@ void sub_08068B84(Entity* this) { void sub_08068BB4(Entity* this) { u32 item = gUnk_02002A40.stats.itemOnA; - this->field_0x69 = item; + this->field_0x68.HALF.HI = item; item = gUnk_02002A40.stats.itemOnB; - *(&this->field_0x69 + 1) = item; + *(&this->field_0x68.HALF.HI + 1) = item; } void sub_08068BD0(Entity* this) { - ForceEquipItem(this->field_0x69, 0); - ForceEquipItem(*(u8*)(&this->field_0x69 + 1), 1); + ForceEquipItem(this->field_0x68.HALF.HI, 0); + ForceEquipItem(*(u8*)(&this->field_0x68.HALF.HI + 1), 1); } void sub_08068BEC(Entity* this, u32 unused) { diff --git a/src/npc/carpenter.c b/src/npc/carpenter.c index b0608f6d..bbf9a1ed 100644 --- a/src/npc/carpenter.c +++ b/src/npc/carpenter.c @@ -26,7 +26,7 @@ void Carpenter(Entity* this) { if (!LoadExtraSpriteData(this, gUnk_08110CA8 + this->entityType.form * 4)) break; this->action = 1; - this->field_0x69 = 0; + this->field_0x68.HALF.HI = 0; sub_0805E3A0(this, 2); sub_0807DD64(this); @@ -34,7 +34,7 @@ void Carpenter(Entity* this) { if (this->interactType == 2) { this->action = 2; this->interactType = 0; - this->field_0x69 = this->animIndex; + this->field_0x68.HALF.HI = this->animIndex; InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4 + (this->entityType.form * 8)); sub_0806F118(this); } else { @@ -47,7 +47,7 @@ void Carpenter(Entity* this) { if (!UpdateFuseInteraction(this)) break; this->action = 1; - InitializeAnimation(this, this->field_0x69); + InitializeAnimation(this, this->field_0x68.HALF.HI); break; } } diff --git a/src/npc/cow.c b/src/npc/cow.c index e9df0918..ed448997 100644 --- a/src/npc/cow.c +++ b/src/npc/cow.c @@ -34,7 +34,7 @@ void sub_08068FC0(Entity* ent) { ent->animationState = ent->entityType.parameter; ent->nonPlanarMovement = 0x40; - ent->field_0x6d = 0xFF; + ent->field_0x6c.HALF.HI = 0xFF; r2 = sub_0805ACC0(ent); if (r2 == 0) { @@ -51,7 +51,7 @@ void sub_08068FC0(Entity* ent) { *(u16*)&ent->field_0x68 = var1; ent->field_0x6a.HWORD = r2; } - ent->field_0x6c = sub_0801E99C(ent); + ent->field_0x6c.HALF.LO = sub_0801E99C(ent); InitAnimationForceUpdate(ent, ent->animationState + 4); } @@ -194,15 +194,15 @@ void sub_0806920C(Entity* ent) { u32 var0 = gLinkState.flags.all & 0x80; u32 var1 = -var0 >> 0x1F; - if (var1 != ent->field_0x6d) { + if (var1 != ent->field_0x6c.HALF.HI) { if (var1 == 0) { sub_08078778(ent); } else { - sub_080787A8(ent, ent->field_0x6c); + sub_080787A8(ent, ent->field_0x6c.HALF.LO); } } - ent->field_0x6d = var1; + ent->field_0x6c.HALF.HI = var1; } // Check if player interacting diff --git a/src/npc/dampe.c b/src/npc/dampe.c index b7947c32..8e9707a7 100644 --- a/src/npc/dampe.c +++ b/src/npc/dampe.c @@ -52,8 +52,8 @@ void Dampe(Entity* this) { } void sub_0806BE3C(Entity* this) { - this->field_0x68 = sub_0801E99C(); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(); + sub_08078784(this, this->field_0x68.HALF.LO); } void Dampe_Fusion(Entity* this) { diff --git a/src/npc/epona.c b/src/npc/epona.c index 617867b6..51e2da86 100644 --- a/src/npc/epona.c +++ b/src/npc/epona.c @@ -20,8 +20,8 @@ void sub_080659B8(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->animationState = 6; - this->field_0x69 = -1; - this->field_0x68 = sub_0801E99C(this); + this->field_0x68.HALF.HI = -1; + this->field_0x68.HALF.LO = sub_0801E99C(this); InitAnimationForceUpdate(this, this->animationState / 2); } @@ -57,14 +57,14 @@ void sub_08065A64(Entity* this) { u32 uVar2; uVar2 = -(gLinkState.flags.all & 0x80) >> 0x1f; - if (uVar2 != this->field_0x69) { + if (uVar2 != this->field_0x68.HALF.HI) { if (uVar2 == 0) { sub_08078778(this); } else { - sub_080787A8(this, this->field_0x68); + sub_080787A8(this, this->field_0x68.HALF.LO); } } - this->field_0x69 = uVar2; + this->field_0x68.HALF.HI = uVar2; } void sub_08065AA4(Entity* this) { diff --git a/src/npc/festari.c b/src/npc/festari.c index ff64ccd6..b362359e 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -25,8 +25,8 @@ void sub_0805FE10(Entity *this) this->action = 1; this->spriteSettings.b.draw = TRUE; sub_0805E3A0(this, 2); - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0807DD50(this); } diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index 8fb7da7b..32b9c77a 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -38,7 +38,7 @@ void ForestMinish(Entity* this) { if (LoadExtraSpriteData(this, &gUnk_0810A348)) { this->action = 1; this->spriteSettings.b.draw = TRUE; - this->field_0x69 = this->animationState = this->actionDelay << 1; + this->field_0x68.HALF.HI = this->animationState = this->actionDelay << 1; this->actionDelay = 0; sub_0805E3A0(this, 2); StartCutscene(this, gUnk_08109D18[this->entityType.parameter]); @@ -66,8 +66,8 @@ void ForestMinish(Entity* this) { } void sub_08060090(Entity* this) { - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); } void ForestMinish_Head(Entity* this) { @@ -129,8 +129,8 @@ void sub_08060158(Entity *this) this->actionDelay = 2; iVar4 = sub_0806EDD8(this, 0x20, 0x20); if (iVar4 < 0) { - this->animationState = this->field_0x69; - iVar4 = this->field_0x69 << 2; + this->animationState = this->field_0x68.HALF.HI; + iVar4 = this->field_0x68.HALF.HI << 2; } temp = (this->animationState >> 1) * 0x20 + (iVar4 >> 1) * 2; bVar1 = gUnk_08109C98[temp]; @@ -257,7 +257,7 @@ void sub_08060318(void) void sub_08060340(void) { - gUnk_02002A40.unk3 = gUnk_02002A40.unk2; + gUnk_02002A40.unk490 = gUnk_02002A40.unk50; } u32 sub_08060354(void) @@ -265,7 +265,7 @@ u32 sub_08060354(void) u32 iVar1; s32 iVar2; - iVar2 = gUnk_02002A40.unk2 - gUnk_02002A40.unk3; + iVar2 = gUnk_02002A40.unk50 - gUnk_02002A40.unk490; if (CheckGlobalFlag(DRUG_1) == 0) { if (4 < iVar2) { return 0x8444; diff --git a/src/npc/gentari.c b/src/npc/gentari.c index f41a7438..31b3bdc4 100644 --- a/src/npc/gentari.c +++ b/src/npc/gentari.c @@ -18,8 +18,8 @@ void Gentari(Entity *this) this->action = 1; this->spriteSettings.b.draw = TRUE; sub_0805E3A0(this, 2); - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0807DD50(this); break; case 1: diff --git a/src/npc/librari.c b/src/npc/librari.c index 77b48bb6..5725f1ea 100644 --- a/src/npc/librari.c +++ b/src/npc/librari.c @@ -13,8 +13,8 @@ void Librari(Entity* this) { this->action = 1; this->spriteSettings.b.draw = TRUE; this->animationState = this->actionDelay; - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0805E3A0(this, 2); sub_0807DD50(this); break; diff --git a/src/npc/malon.c b/src/npc/malon.c index de484cc4..4a599435 100644 --- a/src/npc/malon.c +++ b/src/npc/malon.c @@ -32,8 +32,8 @@ void sub_08065888(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->animationState = 4; - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0807DD50(this); } diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c index 1eb0ff64..bedf82be 100644 --- a/src/npc/mayorHagen.c +++ b/src/npc/mayorHagen.c @@ -28,8 +28,8 @@ void MayorHagen(Entity *this) switch (this->action) { case 0: this->action = 1; - this->field_0x69 = 0; - this->field_0x68 = sub_0801E99C(this); + this->field_0x68.HALF.HI = 0; + this->field_0x68.HALF.LO = sub_0801E99C(this); sub_0805E3A0(this, 2); sub_0807DD50(this); break; @@ -38,7 +38,7 @@ void MayorHagen(Entity *this) if (v == 2) { this->action = v; this->interactType = 0; - this->field_0x69 = this->animIndex; + this->field_0x68.HALF.HI = this->animIndex; InitAnimationForceUpdate(this,4 + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); sub_0806F118(this); break; @@ -50,7 +50,7 @@ void MayorHagen(Entity *this) case 2: if (UpdateFuseInteraction(this)) { this->action = 1; - InitAnimationForceUpdate(this, this->field_0x69); + InitAnimationForceUpdate(this, this->field_0x68.HALF.HI); } } } @@ -65,7 +65,7 @@ void sub_0806CE80(Entity *this) { u32 v; u32 v2; - v = gUnk_02002A40.filler[8]; + v = gUnk_02002A40.unk8; if (v == 5) { //flippers if (GetInventoryValue(0x46) == 0) { diff --git a/src/npc/melari.c b/src/npc/melari.c index ae906fd5..a4cce8f6 100644 --- a/src/npc/melari.c +++ b/src/npc/melari.c @@ -111,8 +111,8 @@ void sub_08068780(Entity* this) { } void sub_08068884(Entity* this) { - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); } void Melari_Head(Entity* this) { diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c index 46256dbe..d9d54769 100644 --- a/src/npc/mutoh.c +++ b/src/npc/mutoh.c @@ -75,13 +75,13 @@ void sub_080670B4(Entity *this) void sub_080670E4(Entity *this) { - ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk * 2]); + ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk8 * 2]); } void sub_08067100(Entity *this) { - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); } void Mutoh_Fusion(Entity *this) diff --git a/src/npc/postman.c b/src/npc/postman.c index b3a51dba..e2ed44c8 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -125,11 +125,11 @@ void sub_08060528(Entity *this) case 0: this->action = 1; this->spriteSettings.b.draw = TRUE; - this->field_0x68 = 0; - this->field_0x69 = 0; + this->field_0x68.HALF.LO = 0; + this->field_0x68.HALF.HI = 0; this->field_0x6a.HWORD = 0; - this->field_0x6d = 0; - this->field_0x6c = sub_0801E99C(this); + this->field_0x6c.HALF.HI = 0; + this->field_0x6c.HALF.LO = sub_0801E99C(this); sub_0807DD50(this); break; case 1: @@ -170,7 +170,7 @@ void sub_08060528(Entity *this) if ((s16)this->field_0x6a.HWORD > 0x12b) { this->field_0x6a.HWORD = 0; this->field_0x20 = 0x20000; - this->field_0x6d = 1; + this->field_0x6c.HALF.HI = 1; sub_080788E0(this); sub_08004488(0x7c); } @@ -179,8 +179,8 @@ void sub_08060528(Entity *this) } } sub_08003FC4(this, 0x1800); - if (((this->field_0x6d != 0) && (this->field_0x20 == 0)) && this->height.WORD == 0) { - this->field_0x6d = 0; + if (((this->field_0x6c.HALF.HI != 0) && (this->field_0x20 == 0)) && this->height.WORD == 0) { + this->field_0x6c.HALF.HI = 0; sub_080606C0(this); } if ((-1 < this->height.WORD) && @@ -192,15 +192,15 @@ void sub_08060528(Entity *this) void sub_080606C0(Entity *this) { - this->field_0x6c = sub_0801E99C(this); - sub_08078784(this, this->field_0x6c); + this->field_0x6c.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x6c.HALF.LO); } void sub_080606D8(Entity* this) { s32 iVar1; - iVar1 = gUnk_02002A40.unk - 2; + iVar1 = gUnk_02002A40.unk8 - 2; if (iVar1 < 0) { iVar1 = 0; } @@ -211,8 +211,8 @@ void sub_080606D8(Entity* this) void sub_08060700(Entity *arg0, u32 arg1) { sub_0807DEDC(arg0,arg1, - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginX], - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginY + 2]); + gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginX], + gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginY + 2]); gUnk_02033280.unk |= 1; } #endif @@ -222,6 +222,6 @@ NAKED void sub_08060700(Entity *arg0, u32 arg1) { void sub_0806075C(Entity *this) { - this->field_0x68 = 0xb; - this->field_0x69 = 0xff; + this->field_0x68.HALF.LO = 0xb; + this->field_0x68.HALF.HI = 0xff; } \ No newline at end of file diff --git a/src/npc/smith.c b/src/npc/smith.c index 744bd8e2..ef3b80ac 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -98,7 +98,7 @@ void sub_080660EC(Entity *this) { if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { this->action = 1; - this->field_0x68 = sub_0801E99C(this); + this->field_0x68.HALF.LO = sub_0801E99C(this); InitAnimationForceUpdate(this, 2); } } @@ -140,7 +140,7 @@ void sub_08066178(Entity *this) if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { this->action = 1; this->spriteSettings.b.draw = 1; - this->field_0x68 = sub_0801E99C(this); + this->field_0x68.HALF.LO = sub_0801E99C(this); sub_0807DD50(this); } } @@ -207,7 +207,7 @@ void sub_08066274(u32 arg0) void sub_08066288(Entity *arg0) { - sub_08078784(arg0, arg0->field_0x68); + sub_08078784(arg0, arg0->field_0x68.HALF.LO); } void Smith_Fusion(Entity *this) diff --git a/src/npc/talon.c b/src/npc/talon.c index 01449c06..5b01b650 100644 --- a/src/npc/talon.c +++ b/src/npc/talon.c @@ -64,15 +64,15 @@ void sub_08065608(Entity* this) { if (LoadExtraSpriteData(this, &gUnk_0810FEB0) != 0) { this->action = 1; this->spriteSettings.b.draw = 1; - this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); sub_0807DD50(this); } } void sub_08065648(Entity* this) { if (this->interactType == 2) { - this->field_0x69 = this->action; + this->field_0x68.HALF.HI = this->action; this->action = 4; this->interactType = 0; sub_0806F118(this); @@ -83,14 +83,14 @@ void sub_08065648(Entity* this) { void sub_08065680(Entity* this) { if (UpdateFuseInteraction() != 0) { - this->action = this->field_0x69; + this->action = this->field_0x68.HALF.HI; InitAnimationForceUpdate(this, this->field_0x6a.HALF.LO); } } void sub_080656A4(Entity* this) { if ((gTextBox.doTextBox & 0x7F) == 0) { - this->action = this->field_0x69; + this->action = this->field_0x68.HALF.HI; InitAnimationForceUpdate(this, this->field_0x6a.HALF.LO); } UpdateAnimationSingleFrame(this); @@ -98,7 +98,7 @@ void sub_080656A4(Entity* this) { void sub_080656D4(Entity* this) { if (this->interactType == 2) { - this->field_0x69 = this->action; + this->field_0x68.HALF.HI = this->action; this->action = 4; this->interactType = 0; sub_0806F118(this); @@ -109,7 +109,7 @@ void sub_080656D4(Entity* this) { StartCutscene(this, &gUnk_0800B41C); goto label2; } else { - this->field_0x69 = this->action; + this->field_0x68.HALF.HI = this->action; this->action = 3; this->interactType = 0; TextboxNoOverlap(*(u32*)(*(u32*)&this->cutsceneBeh.HWORD + 4), this); diff --git a/src/npc/teachers.c b/src/npc/teachers.c index a82bdadd..1a98617f 100644 --- a/src/npc/teachers.c +++ b/src/npc/teachers.c @@ -30,7 +30,7 @@ void Teachers(Entity* this) { this->action = 1; this->spriteSettings.b.draw = TRUE; this->animationState = this->actionDelay; - this->field_0x69 = 0; + this->field_0x68.HALF.HI = 0; sub_0805E3A0(this, 2); sub_0807DD50(this); } @@ -39,7 +39,7 @@ void Teachers(Entity* this) { if (this->interactType == 2) { this->action = 2; this->interactType = 0; - this->field_0x69 = this->animIndex; + this->field_0x68.HALF.HI = this->animIndex; InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); sub_0806F118(this); @@ -50,15 +50,15 @@ void Teachers(Entity* this) { case 2: if (UpdateFuseInteraction(this)) { this->action = 1; - InitializeAnimation(this, this->field_0x69); + InitializeAnimation(this, this->field_0x68.HALF.HI); } } } void sub_0806C674(Entity *this) { - this->field_0x68 = sub_0801E99C(); - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = sub_0801E99C(); + sub_08078784(this, this->field_0x68.HALF.LO); } void Teachers_Head(Entity *this) diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index c47a2a3f..d6595f2b 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -39,7 +39,7 @@ void sub_0806ABFC(Entity *this) this->animationState = this->field_0x6a.HALF.LO << 1; animationState = this->animationState; - this->field_0x69 = animationState << 2; + this->field_0x68.HALF.HI = animationState << 2; this->actionDelay = 0; } @@ -48,7 +48,7 @@ void sub_0806ABFC(Entity *this) /*void sub_0806AC3C(Entity *this) { if (this->field_0x58 <= 3) { s32 unk; - u8 field_0x69; + u8 field_0x68; Entity *link = &gLinkEntity; if (sub_080041A0(this, link, 0x18, 0x18)) { @@ -58,24 +58,24 @@ void sub_0806ABFC(Entity *this) unk = this->animationState << 2; } - field_0x69 = this->field_0x69; + field_0x68.HALF.HI = this->field_0x68.HALF.HI; - if (unk != field_0x69) { + if (unk != field_0x68.HALF.HI) { s32 temp; - if (((unk - field_0x69) & 0x1f) <= 0xf) { - field_0x69--; + if (((unk - field_0x68.HALF.HI) & 0x1f) <= 0xf) { + field_0x68.HALF.HI--; } else { - field_0x69++; + field_0x68.HALF.HI++; } - temp = field_0x69; - this->field_0x69 = temp & 0x1f; + temp = field_0x68.HALF.HI; + this->field_0x68.HALF.HI = temp & 0x1f; } - if (!(this->field_0x69 & 7)) { - this->animationState = sub_0806F5B0(this->field_0x69); + if (!(this->field_0x68.HALF.HI & 7)) { + this->animationState = sub_0806F5B0(this->field_0x68.HALF.HI); UpdateSprite(this, (this->animationState >> 1) ^ 2); } } diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index a10aed22..c0b1dd76 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -123,7 +123,7 @@ void sub_08061CEC(Entity* this) { this->action = 1; this->spriteSettings.b.draw = TRUE; this->animationState = this->actionDelay; - this->field_0x69 = 0xff; + this->field_0x68.HALF.HI = 0xff; uVar2 = sub_0805ACC0(this); if (uVar2 == 0) { this->field_0x6a.HWORD = this->x.HALF.HI; @@ -132,7 +132,7 @@ void sub_08061CEC(Entity* this) { this->field_0x6a.HWORD = (uVar2 >> 0x10); } *(u16*)&this->field_0x6c = uVar2; - this->field_0x68 = sub_0801E99C(this); + this->field_0x68.HALF.LO = sub_0801E99C(this); sub_0807DD64(this); sub_08061D64(this); } @@ -143,7 +143,7 @@ void sub_08061D64(Entity* this) { this->action = 3; this->interactType = 0; sub_0806F118(this); - this->field_0x69 = this->animIndex; + this->field_0x68.HALF.HI = this->animIndex; InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); } else { sub_0807DDAC(this, 0); @@ -156,7 +156,7 @@ void sub_08061D64(Entity* this) { this->action = 2; this->interactType = 0; sub_08062048(this); - this->field_0x69 = this->animIndex; + this->field_0x68.HALF.HI = this->animIndex; InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); } } @@ -166,7 +166,7 @@ void sub_08061E24(Entity* this) { GetNextFrame(this); if ((gTextBox.doTextBox & 0x7f) == 0) { this->action = 1; - InitializeAnimation(this, this->field_0x69); + InitializeAnimation(this, this->field_0x68.HALF.HI); } } @@ -174,13 +174,13 @@ void sub_08061E50(Entity* this) { if (UpdateFuseInteraction(this) != 0) { this->action = 1; - InitializeAnimation(this, this->field_0x69); + InitializeAnimation(this, this->field_0x68.HALF.HI); } } void sub_08061E70(Entity* this) { if ((this->entityType).subtype == 6) { - sub_08078784(this, this->field_0x68); + sub_08078784(this, this->field_0x68.HALF.LO); } else { sub_08078778(this); } @@ -300,7 +300,7 @@ void sub_08062048(Entity *this) int iVar1; if ((this->entityType).subtype == 6) { - iVar1 = gUnk_02002A40.unk - 2; + iVar1 = gUnk_02002A40.unk8 - 2; if (iVar1 < 0) { iVar1 = 0; } diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c index b95db3d4..60f9905b 100644 --- a/src/npc/windTribespeople.c +++ b/src/npc/windTribespeople.c @@ -78,8 +78,8 @@ void sub_0806C870(Entity *this) u8 bVar1; bVar1 = sub_0801E99C(); - this->field_0x68 = bVar1; - sub_08078784(this, this->field_0x68); + this->field_0x68.HALF.LO = bVar1; + sub_08078784(this, this->field_0x68.HALF.LO); } void WindTribespeople_Head(Entity *this) @@ -122,7 +122,7 @@ void sub_0806C90C(Entity *param_1,Entity *param_2) void sub_0806C928(Entity *this) { - ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk * 2]); + ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk8 * 2]); } void sub_0806C944(Entity *this) diff --git a/src/object/cloud.c b/src/object/cloud.c index c55e0d57..6ca000ac 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -47,7 +47,7 @@ void sub_0809F514(Entity* this) { this->action = 1; this->actionDelay = 120; this->spriteSettings.b.draw = 0; - *(u8*)&this->field_0x68 = 12; + this->field_0x68.HALF.LO = 12; gRoomControls.cameraTarget = this; gUnk_02034490 = 255; sub_0809F7BC(this); @@ -81,7 +81,7 @@ void sub_0809F5B0(Entity* this) { void sub_0809F5DC(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 0; - *(u8*)&this->field_0x68 = 12; + this->field_0x68.HALF.LO = 12; } void sub_0809F5F0(Entity* this) { @@ -195,14 +195,8 @@ void sub_0809F7BC(Entity* this) { } void sub_0809F7F4(Entity* this) { - u8 cVar1; - u8* puVar2; - - puVar2 = (u8*)&this->field_0x68; - *puVar2 -= 1; - - if (*puVar2 == 0) { - *puVar2 = 12; + if (--this->field_0x68.HALF.LO == 0) { + this->field_0x68.HALF.LO = 12; PlaySFX(388); } } diff --git a/src/object/greatFairy.c b/src/object/greatFairy.c index 21edd60f..4e2c4d40 100644 --- a/src/object/greatFairy.c +++ b/src/object/greatFairy.c @@ -459,23 +459,16 @@ void sub_08087294(Entity* this) { gUnk_081207A4[this->action](this); } -#ifdef NON_MATCHING void sub_080872AC(Entity* this) { this->spriteSettings.b.draw = 1; this->spriteOrientation.flipY = 1; - this->spriteRendering.b0 = 0; - this->field_0x68 = (u16)(this->x).HALF.HI; - this->field_0x6a = (u16)(this->y).HALF.HI; + this->spriteRendering.b3 = 0; + this->field_0x68.HWORD = this->x.HALF.HI; + this->field_0x6a.HWORD = this->y.HALF.HI; this->direction = (u8)Random() & 0x1F; this->nonPlanarMovement = 32; GreatFairy_InitializeAnimation(this); } -#else -NAKED -void sub_080872AC(Entity* this) { - asm(".include \"asm/greatFairy/sub_080872AC.inc\""); -} -#endif //clang-format off void (*const GreatFairy_Main[])(Entity*) = { diff --git a/src/object/object48.c b/src/object/object48.c new file mode 100755 index 00000000..c2a25071 --- /dev/null +++ b/src/object/object48.c @@ -0,0 +1,544 @@ +#include "global.h" +#include "entity.h" +#include "flags.h" +#include "functions.h" +#include "main.h" +#include "menu.h" +#include "npc.h" +#include "position.h" +#include "readKeyInput.h" +#include "structures.h" + +extern bool32 sub_080AE008(Entity*, int, int); +extern int sub_0807A094(int); +extern u32 sub_0801D754(const u8*, u8, u8); +extern u32 sub_080041EC(int, int); +extern u32 sub_080045DA(int, int); + +static bool32 sub_0808E950(void); +static void sub_0808EABC(Entity*); +static Entity* sub_0808EC80(int); +static u32 sub_0808EF6C(Entity*); +static void sub_0808EFF0(Entity*); + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; +} PACKED struct_08121CD4; + +typedef struct { + u16 unk0; + u16 unk2; + u16 unk4; + u8 unk6_0 : 3; + u8 unk6_3 : 3; + u8 unk6_6 : 2; + u8 unk7; +} struct_08121D54; + +extern void (*const gUnk_08121C64[])(Entity*); +extern void (*const gUnk_08121CCC[])(Entity*); +extern const int gUnk_08133368[]; +extern const u8 gUnk_085A2E80[]; +extern const struct_08121CD4 gUnk_08121CD4[][4]; +extern const u8 gUnk_08121D10[]; +extern const u8 gUnk_08121D38[][8]; +extern const u16 gUnk_08121D18[][8]; +extern const u8 gUnk_08121D48[]; +extern const struct_08121D54 gUnk_08121D54[]; + +void Object48(Entity* this) { + if (this->currentHealth == 0) { + sub_0808EFF0(this); + } + gUnk_08121C64[this->entityType.form](this); + if (this->animIndex < 64) { + UpdateAnimationSingleFrame(this); + } +} + +void sub_0808E7D8(Entity* this) { + gUnk_08121CCC[this->action](this); +} + +void sub_0808E7F0(Entity* this) { + sub_080AE008(this, 1, 2); + this->palette.b.b0 = 0xF; + this->spriteSettings.b.draw = 0; + this->entityType.parameter = 0xFF; + this->action = 1; +} + +void sub_0808E818(Entity* this) { + u32 var0; + u32 var1; + + if (!sub_0808E950()) { + int var2 = -1; + this->entityType.parameter = var2; + this->field_0x68.HWORD = var2; + this->field_0x6a.HWORD = var2; + this->spriteSettings.b.draw = 0; + return; + } + + if (this->entityType.parameter != gUnk_02019EE0.unk6) { + this->entityType.parameter = gUnk_02019EE0.unk6; + this->field_0x68.HWORD = CheckGlobalFlag(EZERO_1ST) == 0 ? 0x400 : 0x100; + this->field_0x70.BYTES.byte0 = 4; + this->animationState = 2; + var1 = gUnk_08133368[sub_0807A094(1) - 22] & 0xFFFFFF; + sub_0801D754(&gUnk_085A2E80[var1], 31, 1); + } + + if (gUnk_02032EC0.transitionType == 0) { + if (gUnk_03000FF0.heldKeys & L_BUTTON) { + switch (gUnk_03000FF0.newKeys) { + case DPAD_UP: + this->animationState = 0; + break; + case DPAD_RIGHT: + this->animationState = 1; + break; + case DPAD_DOWN: + this->animationState = 2; + break; + case DPAD_LEFT: + this->animationState = 3; + break; + case B_BUTTON: + this->field_0x70.BYTES.byte0 = this->field_0x70.BYTES.byte0 ? 0 : 4; + break; + } + } + } + + this->spriteSettings.b.flipX = this->animationState == 3; + var0 = this->field_0x68.HWORD + this->field_0x70.BYTES.byte0 + this->animationState; + if (this->field_0x6a.HWORD != var0) { + this->field_0x6a.HWORD = var0; + this->spriteIndex = var0 >> 8; + InitAnimationForceUpdate(this, (u8)var0); + } + + this->spriteSettings.b.draw = 2; +} + +static bool32 sub_0808E950(void) { + bool32 result = FALSE; + switch (gUnk_02032EC0.transitionType) { + case 0: + case 4: + case 5: + case 6: + case 7: + result = gUnk_02019EE0.unk8[gUnk_02019EE0.unk6] == 1; + break; + } + return result; +} + +void sub_0808E988(Entity* this) { + if (this->action == 0) { + this->action = 1; + this->spriteIndex = 0x142; + this->entityType.parameter = 0xFF; + sub_080AE008(this, 1, 3); + } + + if (sub_0808E950()) { + int i; + for (i = 6; i != 0; i--) { + if (GetInventoryValue(i)) { + break; + } + } + + if (i != 0) { + if (this->entityType.parameter != i) { + InitAnimationForceUpdate(this, i); + } + this->spriteSettings.b.draw = 2; + return; + } + } + + this->spriteSettings.b.draw = 0; +} + +void sub_0808E9F4(Entity* this) { + if (sub_0808E950() && gUnk_02002A40.unk6) { + this->spriteSettings.b.draw = 2; + } else { + this->spriteSettings.b.draw = 0; + } +} + +void sub_0808EA28(Entity* this) { + u32 var0; + u32 var1; + + if (this->entityType.form == 3) { + if (((struct_02000000 *)0x2000000)->gameLanguage > 1) { + this->spriteSettings.b.draw = 2; + } else { + this->spriteSettings.b.draw = 0; + } + } + + if (this->entityType.form == gUnk_02019EE0.unk6) { + var0 = 12; + var1 = 1; + } else { + if (gUnk_02032EC0.transitionType == 5 && this->entityType.form == gUnk_02019EE0.unk7) { + var0 = 13; + var1 = 2; + } else { + var0 = 14; + var1 = 2; + } + } + + this->palette.b.b0 = var0; + this->spriteRendering.b3 = var1; + sub_0808EABC(this); + gUnk_02019EE0.unk0 |= sub_0808EF6C(this); +} + +void sub_0808EABC(Entity* this) { + int var0 = -72; + int var1 = this->entityType.form * 32 + 40; + int var2 = gUnk_02019EE0.unk6 == this->entityType.form; + switch (gUnk_02032EC0.transitionType) { + case 0: + var0 = 24; + break; + case 3: + case 4: + case 6: + case 7: + if (var2) { + var0 = 42; + var1 = 56; + } + break; + case 5: + switch (gMenu.unk10[this->entityType.form]) { + case 0: + var0 = 42; + var1 = 40; + break; + case 1: + case 2: + var0 = 20; + var1 = 144; + var1 -= (gMenu.unk16 - gMenu.unk10[this->entityType.form]) * 32; + break; + } + break; + case 2: + if (var2) { + var0 = 26; + var1 = 42; + } + break; + default: + if (var2) { + var0 = 8; + var1 = 35; + } + break; + } + + this->field_0x68.HWORD = var0; + this->field_0x6a.HWORD = var1; +} + +void sub_0808EB74(Entity* this) { + Entity* entity = sub_0808EC80(gUnk_02019EE0.unk6); + if (entity) { + this->x.WORD = entity->x.WORD; + this->y.WORD = entity->y.WORD; + this->spriteRendering.b3 = entity->spriteRendering.b3; + sub_0806FAD8(entity, this); + } else { + this->x.HALF.HI = 0xF000; + this->y.HALF.HI = 0xF000; + } +} + +void sub_0808EBB8(Entity* this) { + u32 var0; + u32 x, y; + Entity* entity; + + switch (gUnk_02032EC0.transitionType) { + case 4: + var0 = gMenu.field_0x1 + 4; + break; + case 5: + var0 = 2; + break; + case 6: + var0 = gMenu.field_0x1 == 0 ? 7 : 6; + break; + case 7: + var0 = 4; + break; + case 2: + var0 = 1; + break; + default: + var0 = 0; + break; + } + + x = y = 0xF000; + switch (var0) { + case 0: + break; + case 1: + y = ((struct_02000000 *)0x2000000)->gameLanguage * 16 + 24; + x = 112; + break; + case 2: + var0 = gUnk_02019EE0.unk7; + if (var0 == 4) { + var0 = 7; + } + // Fall through + default: + entity = sub_0808EC80(var0); + if (entity) { + sub_0806FAD8(entity, this); + this->spriteRendering.b3 = entity->spriteRendering.b3; + x = entity->x.HALF.HI; + y = entity->y.HALF.HI; + } + break; + } + + this->x.HALF.HI = x; + this->y.HALF.HI = y; +} + +static Entity* sub_0808EC80(int form) { + Entity* entityA = &gUnk_03003DA0; + Entity* entityB = entityA->field_0x4; + while (entityB != entityA) { + if ((entityB->entityType.type == 0x6 && entityB->entityType.subtype == 0x48) && + form == entityB->entityType.form) { + return entityB; + } + entityB = entityB->field_0x4; + } + return NULL; +} + +void sub_0808ECBC(Entity* this) { + int var0; + int var1; + int var2; + const struct_08121CD4* var3; + + var0 = gMenu.field_0x1; + switch (gUnk_02032EC0.transitionType) { + case 4: + var1 = 1; + break; + case 5: + var0 = gUnk_02019EE0.unk7; + var1 = 2; + break; + case 6: + var1 = 3; + break; + case 7: + var1 = 4; + break; + default: + var1 = 0; + break; + } + + var2 = this->entityType.form - 4; + var3 = &gUnk_08121CD4[var1][var2]; + this->field_0x68.HWORD = var3->unk1; + this->field_0x6a.HWORD = var3->unk2; + if (var3->unk0 == var0) { + this->palette.b.b0 = 13; + } else { + this->palette.b.b0 = 14; + } + + gUnk_02019EE0.unk0 |= sub_0808EF6C(this); +} + +void sub_0808ED64(Entity* this) { + int y = 255; + if (gUnk_02032EC0.transitionType == 1 && gMenu.unk10[1] != 5) { + this->x.HALF.HI = gMenu.unk10[0] * 16 + 28; + y = gMenu.unk10[1] * 16 + 58; + } + this->y.HALF.HI = y; +} + +void sub_0808ED98(Entity* this) { + int y; + if (gUnk_02032EC0.transitionType != 1) { + this->field_0x68.HWORD = 27; + y = -10; + } else { + u32 var0 = gMenu.unk13; + if (var0 > 5) { + var0 = 5; + } + this->field_0x68.HWORD = var0 * 8 + 27; + y = 24; + } + + this->y.HALF.HI = y; + this->field_0x6a.HWORD = y; + this->field_0xf++; + this->spriteOffsetY = gUnk_08121D10[(this->field_0xf / 4) & 0x7]; + sub_0808EF6C(this); +} + +void sub_0808EE00(Entity* this) { + int var0, var1, var2; + + var0 = ((struct_02000000 *)0x2000000)->gameLanguage != 0; + var1 = this->entityType.form - 10; + this->frameIndex = gUnk_08121D38[var0][var1]; + this->x.HALF.HI = gUnk_08121D18[var0][var1]; + this->field_0x68.HWORD = gUnk_08121D18[var0][var1]; + var1 -= var0; + if (gUnk_02032EC0.transitionType != 1) { + var1 = 128; + var2 = 176; + } else { + var2 = 140; + } + + this->field_0x6a.HWORD = var2; + this->palette.b.b0 = gMenu.unk10[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9; + gUnk_02019EE0.unk0 |= sub_0808EF6C(this); +} + +void nullsub_522(Entity* this) { + +} + +void sub_0808EE98(Entity* this) { + this->actionDelay = gUnk_02032EC0.transitionType; + this->frameIndex = gUnk_08121D48[this->actionDelay]; + if (this->actionDelay != 2) { + this->field_0x68.HWORD = 96; + } else { + this->field_0x68.HWORD = -96; + } + sub_0808EF6C(this); +} + +void sub_0808EED8(Entity* this) { + int var0; + if (gUnk_02032EC0.transitionType != 3) { + this->spriteSettings.b.draw = 0; + } else { + this->spriteSettings.b.draw = 2; + var0 = this->entityType.form - 19; + this->palette.b.b0 = gMenu.field_0x1 == var0 ? 4 : 3; + } +} + +void sub_0808EF24(Entity* this) { + int var0; + if (gUnk_02032EC0.transitionType != 3) { + this->spriteSettings.b.draw = 0; + } else { + this->spriteSettings.b.draw = 2; + if (this->entityType.form == 21) { + var0 = ((struct_02000000 *)0x2000000)->field_0x5; + } else { + var0 = ((struct_02000000 *)0x2000000)->brightnessPref; + } + this->frameIndex = this->lastFrameIndex + var0; + } +} + +static u32 sub_0808EF6C(Entity* this) { + int var0; + u32 var1; + int var2; + u32 var3; + int var4; + s16 var5; + s16 var6; + int var7; + + var6 = this->field_0x68.HWORD; + var0 = var6 - this->x.HALF.HI; + var1 = var0; + if (var0 < 0) { + var1 = -var0; + } + if (var1 < 2) { + this->x.WORD = var6 << 16; + var0 = 0; + } + + var5 = this->field_0x6a.HWORD; + var2 = var5 - this->y.HALF.HI; + var3 = var2; + if (var2 < 0) { + var3 = -var2; + } + if (var3 < 2) { + this->y.WORD = var5 << 16; + var2 = 0; + } + + if ((var0 | var2) == 0) { + return 0; + } + + var4 = var7 = sub_080041EC(var0, var2); + var4 += 128; + var7 = var4 + var7 * 16; + if (this->field_0x6c.HWORD < var7) { + var7 = this->field_0x6c.HWORD; + } + this->nonPlanarMovement = var7; + this->direction = sub_080045DA(var0, var2) >> 3; + sub_0806F69C(this); + return 1; +} + +static void sub_0808EFF0(Entity* this) { + const struct_08121D54* var0; + int var1; + + this->spriteSettings.b.draw = 2; + this->nonPlanarMovement = 0x400; + this->currentHealth = 1; + this->frameIndex = 0xFF; + this->animIndex = 0xFF; + var0 = &gUnk_08121D54[this->entityType.form]; + this->x.HALF.HI = var0->unk2; + this->field_0x68.HWORD = var0->unk2; + this->y.HALF.HI = var0->unk4; + this->field_0x6a.HWORD = var0->unk4; + this->spriteRendering.b3 = var0->unk6_0; + this->spritePriority.b0 = var0->unk6_3; + this->spriteOrientation.flipY = var0->unk6_6; + this->field_0x6c.HWORD = var0->unk0; + var1 = var0->unk7; + if (var1 & 0x80) { + var1 &= 0x7F; + this->frameIndex = var1; + this->lastFrameIndex = var1; + } else { + InitAnimationForceUpdate(this, var1); + } +} diff --git a/src/object/object49.c b/src/object/object49.c index d9551953..a586e520 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -114,7 +114,7 @@ void sub_0808F244(Entity *this) *(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI; *(u32 *)&this->field_0x70.WORD = *((u8 *)&this->parent->field_0x7c + 3); sub_0808F2B0(this); - if ((this->parent->field_0x6d & 2) != 0) { + if ((this->parent->field_0x6c.HALF.HI & 2) != 0) { DeleteThisEntity(); } } diff --git a/src/room.c b/src/room.c index 0bef2ef3..df30ec9e 100644 --- a/src/room.c +++ b/src/room.c @@ -4,6 +4,7 @@ #include "room.h" #include "functions.h" #include "flags.h" +#include "npc.h" #include "link.h" #include "screen.h" #include "main.h" @@ -345,7 +346,7 @@ extern EntityData gUnk_080D6734; extern EntityData gUnk_080D66F4; void sub_0804B738(void) { - if (gUnk_02002A40.field_0x8 > 4) { + if (gUnk_02002A40.unk8 > 4) { LoadRoomEntityList(&gUnk_080D6714); } // flippers @@ -363,7 +364,7 @@ u32 sub_0804B788() { extern EntityData gUnk_080D6924; void sub_0804B78C(void) { - if (gUnk_02002A40.field_0x8 > 7) { + if (gUnk_02002A40.unk8 > 7) { LoadRoomEntityList(&gUnk_080D6924); } } @@ -465,7 +466,7 @@ extern EntityData UpperInn_Din; void sub_0804B938(void) { int iVar1; - if (gUnk_02002A40.field_0x8 < 4) + if (gUnk_02002A40.unk8 < 4) return; if (CheckGlobalFlag(RENTED_HOUSE_DIN)) { @@ -515,7 +516,7 @@ u32 sub_0804BA08() { extern EntityData gUnk_080D7038; void sub_0804BA0C(void) { - if (gUnk_02002A40.field_0x8 < 8) { + if (gUnk_02002A40.unk8 < 8) { LoadRoomEntityList(&gUnk_080D7038); } if (gRoomVars.filler[0] == 0) { @@ -535,13 +536,13 @@ extern EntityData gUnk_080D71F0; void sub_0804BA44(void) { - if (gUnk_02002A40.field_0x8 == 6) + if (gUnk_02002A40.unk8 == 6) LoadRoomEntityList(&gUnk_080D7140); - if (gUnk_02002A40.field_0x8 == 7) + if (gUnk_02002A40.unk8 == 7) LoadRoomEntityList(&gUnk_080D7170); - if ((gUnk_02002A40.field_0x8 < 8) || (LoadRoomEntityList(&gUnk_080D71A0), gUnk_02002A40.field_0x8 < 8)) + if ((gUnk_02002A40.unk8 < 8) || (LoadRoomEntityList(&gUnk_080D71A0), gUnk_02002A40.unk8 < 8)) LoadRoomEntityList(&gUnk_080D71D0); else LoadRoomEntityList(&gUnk_080D71F0); @@ -1449,7 +1450,7 @@ extern EntityData gUnk_080DB238; void sub_0804C664(void) { - if (gUnk_02002A40.field_0x8 > 8) + if (gUnk_02002A40.unk8 > 8) LoadRoomEntityList(&gUnk_080DB238); sub_0801AFE4(); @@ -2120,10 +2121,10 @@ u32 sub_0804CC6C() { } void sub_0804CC70(void) { - if (gUnk_02002A40.filler[7] == 0) { + if (gUnk_02002A40.unk7 == 0) { goto a; } - if (gUnk_02002A40.filler[7] != 2) { + if (gUnk_02002A40.unk7 != 2) { a: SetTileType(0x90, 0x20b, 1); SetTileType(0x90, 0x411, 1); @@ -4233,7 +4234,7 @@ void LoadHyruleTown(void) { sub_08054570(); sub_08059D18(); SetTileType(0x176, 0x66b, 1); - if (gUnk_02002A40.field_0x8 == 1) { + if (gUnk_02002A40.unk8 == 1) { sub_0801D000(0); } else { sub_08018C58(0xdb4); @@ -4258,7 +4259,7 @@ void LoadHyruleTown(void) { } else { LoadRoomEntityList(&gUnk_080EECBC); } - if (CheckKinstoneFused(0x1b) && (gUnk_02002A40.field_0x8 > 3)) { + if (CheckKinstoneFused(0x1b) && (gUnk_02002A40.unk8 > 3)) { if (!CheckGlobalFlag(NEW_HOUSE_DIN) && !CheckGlobalFlag(NEW_HOUSE_NAYRU) && !CheckGlobalFlag(NEW_HOUSE_FARORE)) { if (!CheckGlobalFlag(RENTED_HOUSE_DIN) && !CheckGlobalFlag(RENTED_HOUSE_NAYRU) && !CheckGlobalFlag(RENTED_HOUSE_FARORE)) { LoadRoomEntityList(&gUnk_080EE95C); @@ -4282,7 +4283,7 @@ void LoadHyruleTown(void) { } else { LoadRoomEntityList(&gUnk_080EE9DC); } - if ((gUnk_02002A40.field_0x8 > 4) && !CheckKinstoneFused(0xb) && + if ((gUnk_02002A40.unk8 > 4) && !CheckKinstoneFused(0xb) && (CheckGlobalFlag(RENTED_HOUSE_DIN) || CheckGlobalFlag(RENTED_HOUSE_NAYRU) || CheckGlobalFlag(RENTED_HOUSE_FARORE))) { LoadRoomEntityList(&gUnk_080EEA5C); } @@ -4290,10 +4291,10 @@ void LoadHyruleTown(void) { if (!CheckLocalFlag(0xd0) && GetInventoryValue(0x14)) { LoadRoomEntityList(&gUnk_080EEABC); } - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(INLOCK)) { + if ((gUnk_02002A40.unk8 > 3) && CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080EEA7C); } - if ((gUnk_02002A40.field_0x8 < 6) && !CheckGlobalFlag(MIZUKAKI_START)) { + if ((gUnk_02002A40.unk8 < 6) && !CheckGlobalFlag(MIZUKAKI_START)) { LoadRoomEntityList(&gUnk_080EEA9C); } if ((gUnk_02002A40.windcrests & 0x8000000) == 0) { @@ -4552,7 +4553,7 @@ extern EntityData gUnk_080F236C; void sub_0804E52C(void) { - if (gUnk_02002A40.field_0x8 > 7) { + if (gUnk_02002A40.unk8 > 7) { LoadRoomEntityList(&gUnk_080F23BC); } // flippers @@ -4575,7 +4576,7 @@ extern EntityData gUnk_080F2600; void sub_0804E574(void) { - switch (gUnk_02002A40.field_0x8) { + switch (gUnk_02002A40.unk8) { case 0: case 2: case 4: @@ -4816,7 +4817,7 @@ void sub_0804E8FC(void) if (!CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080F36FC); } - else if (gUnk_02002A40.field_0x8 < 4) { + else if (gUnk_02002A40.unk8 < 4) { LoadRoomEntityList(&gUnk_080F3604); } } @@ -4882,7 +4883,7 @@ void sub_0804E9D0(void) if (CheckKinstoneFused(0x12)) { LoadRoomEntityList(&gUnk_080F3C94); } - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { + if ((gUnk_02002A40.unk8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F3C44); } SetTile(0x4091, 0x590, 1); @@ -5270,7 +5271,7 @@ extern u32 gUnk_08011C50; void sub_0804EFF8(void) { - if (gUnk_02002A40.field_0x8 > 7) { + if (gUnk_02002A40.unk8 > 7) { LoadRoomEntityList(&gUnk_080F5DD0); } if (CheckGlobalFlag(MAROYA_WAKEUP)) { @@ -5302,7 +5303,7 @@ extern EntityData gUnk_080F5F78; void sub_0804F050(void) { - if (gUnk_02002A40.field_0x8 > 4) { + if (gUnk_02002A40.unk8 > 4) { LoadRoomEntityList(&gUnk_080F5F38); } if (!CheckLocalFlag(0x92)) { @@ -5503,7 +5504,7 @@ void sub_0804F25C(void) if ((gUnk_02002A40.windcrests & 0x40000000) == 0) { LoadRoomEntityList(&gUnk_080F70D8); } - if (gUnk_02002A40.field_0x8 > 3) { + if (gUnk_02002A40.unk8 > 3) { LoadRoomEntityList(&gUnk_080F7088); } } @@ -5549,7 +5550,7 @@ extern EntityData gUnk_080F7550; void sub_0804F330(void) { sub_0805ADD8(0); - if (gUnk_02002A40.field_0x8 > 3) { + if (gUnk_02002A40.unk8 > 3) { LoadRoomEntityList(&gUnk_080F7500); } if (GetInventoryValue(0x11) && !GetInventoryValue(0x12)) { @@ -5591,7 +5592,7 @@ void sub_0804F3B0(void) SetTile(0x4072, 0xd88, 1); SetTile(0x4096, 0xdc8, 1); } - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { + if ((gUnk_02002A40.unk8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F78A0); } } @@ -5818,7 +5819,7 @@ extern EntityData gUnk_080F806C; void sub_0804FA00(void) { sub_0805ADD8(0); - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { + if ((gUnk_02002A40.unk8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F806C); } } @@ -6547,14 +6548,6 @@ u32 sub_0804FF7C() { void nullsub_106() {} -typedef struct { - char header[4]; - u8 saveFile; - u8 field_0x5; - u8 brightnessPref; -} struct_02000000; - -extern struct_02000000 gUnk_02000000; void sub_0804FF84(u32 arg0) { diff --git a/src/sub_0801D754.c b/src/sub_0801D754.c index f2bab6f9..dad57fa1 100644 --- a/src/sub_0801D754.c +++ b/src/sub_0801D754.c @@ -1,7 +1,9 @@ #include "global.h" +extern u8 gUnk_020176E0; + extern void sub_0807C960(); -extern u32 sub_0801D754(u32, u8, u8); +extern u32 sub_0801D754(const u8*, u8, u8); u32 sub_0807C9D8(u32* a1) { u32* v1; // r5@1 @@ -10,6 +12,6 @@ u32 sub_0807C9D8(u32* a1) { sub_0807C960(0x6004000, *a1); sub_0807C960(0x6000000, v1[1]); sub_0807C960(0x6008000, v1[2]); - sub_0807C960(0x20176E0, v1[3]); - return sub_0801D754(0x20176E0, 2, 13); + sub_0807C960(&gUnk_020176E0, v1[3]); + return sub_0801D754(&gUnk_020176E0, 2, 13); } diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c index 80eff685..f45daa40 100644 --- a/src/sub_080A3B84.c +++ b/src/sub_080A3B84.c @@ -29,7 +29,7 @@ void sub_080A3BD0(void) s32 iVar2; gMenu.field_0x1 = 1; - gMenu.field_0x12[0x17] = 0; + gMenu.unk2a = 0; sub_080A4D34(); LoadPalettesByPaletteGroupIndex(0xcb); sub_0801D7EC(0x75); From bd9e7c8616f7ace2a583495c97fcd8ea4ba2ef83 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 3 Aug 2020 21:32:25 -0700 Subject: [PATCH 3/9] labeled params for arm call funcs --- asm/code_08000108.s | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/asm/code_08000108.s b/asm/code_08000108.s index a1f855fd..2e6cc668 100644 --- a/asm/code_08000108.s +++ b/asm/code_08000108.s @@ -168,165 +168,239 @@ gUnk_08000278:: .4byte gUnk_02030EB4 @ call 0x80B19CC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_08000288 sub_08000288: @ 0x08000288 ldr r3, _080002F4 @ =gUnk_03005740 bx r3 @ call 0x80B19D8 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_0800028C sub_0800028C: @ 0x0800028C ldr r3, _080002F8 @ =gUnk_0300574C bx r3 @ call 0x80B19EC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_08000290 sub_08000290: @ 0x08000290 ldr r3, _080002FC @ =gUnk_03005760 bx r3 @ call 0x80B19FC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_08000294 sub_08000294: @ 0x08000294 ldr r3, _08000300 @ =gUnk_03005770 bx r3 @ call 0x80B1A04 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_08000298 sub_08000298: @ 0x08000298 ldr r3, _08000304 @ =gUnk_03005778 bx r3 @ call 0x80B1A0C +@ r0: entity* +@ r1: s32 +@ r2: s32 thumb_func_start sub_0800029C sub_0800029C: @ 0x0800029C ldr r3, _08000308 @ =gUnk_03005780 bx r3 @ call 0x080B1A28 +@ r0: entity +@ return: u32 (tileType) thumb_func_start GetTileTypeByEntity GetTileTypeByEntity: @ 0x080002A0 ldr r3, _0800030C @ =gUnk_0300579C bx r3 @ call 0x080B1A34 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) +@ return: u32 (tileType) thumb_func_start GetTileTypeByPos GetTileTypeByPos: @ 0x080002A4 ldr r3, _08000310 @ =gUnk_030057A8 bx r3 @ call 0x080B1A48 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) thumb_func_start sub_080002A8 sub_080002A8: @ 0x080002A8 ldr r3, _08000314 @ =gUnk_030057BC bx r3 @ call 0x080B1A58 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) thumb_func_start sub_080002AC sub_080002AC: @ 0x080002AC ldr r3, _08000318 @ =gUnk_030057CC bx r3 @ call 0x080B1A60 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) +@ return: u32 (tileType) thumb_func_start GetTileType GetTileType: @ 0x080002B0 ldr r3, _0800031C @ =gUnk_030057D4 bx r3 @ call 0x080B1A8C +@ r0: Entity* +@ r1: u32 +@ r2: u32 thumb_func_start sub_080002B4 sub_080002B4: @ 0x080002B4 ldr r3, _08000320 @ =gUnk_03005800 bx r3 @ call 0x080B1AA8 +@ r0: +@ r1: +@ r2: +@ return: +@ ======== +@ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs. thumb_func_start sub_080002B8 sub_080002B8: @ 0x080002B8 ldr r3, _08000324 @ =gUnk_0300581C bx r3 @ call 0x080B1AB4 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) thumb_func_start sub_080002BC sub_080002BC: @ 0x080002BC ldr r3, _08000328 @ =gUnk_03005828 bx r3 @ call 0x080B1AC8 +@ r0: u32 +@ r1: u32 +@ r2: u32 +@ return: ??? thumb_func_start sub_080002C0 sub_080002C0: @ 0x080002C0 ldr r3, _0800032C @ =gUnk_0300583C bx r3 @ call 0x080B1AD8 +@ r0: Entity* +@ r1: s32 (xOffset) +@ r2: s32 (yOffset) +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_080002C4 sub_080002C4: @ 0x080002C4 ldr r3, _08000330 @ =gUnk_0300584C bx r3 @ call 0x080B1AE0 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) thumb_func_start sub_080002C8 sub_080002C8: @ 0x080002C8 ldr r3, _08000334 @ =gUnk_03005854 bx r3 @ call 0x080B1AF0 +@ r0: Entity* +@ r1: ??? +@ r2: ??? thumb_func_start sub_080002CC sub_080002CC: @ 0x080002CC ldr r3, _08000338 @ =gUnk_03005864 bx r3 @ call 0x080B1B0C +@ r0: Entity* thumb_func_start sub_080002D0 sub_080002D0: @ 0x080002D0 ldr r3, _0800033C @ =gUnk_03005880 bx r3 + @ call 0x080B1B18 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) thumb_func_start sub_080002D4 sub_080002D4: @ 0x080002D4 ldr r3, _08000340 @ =gUnk_0300588C bx r3 @ call 0x080B1B2C +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_080002D8 sub_080002D8: @ 0x080002D8 ldr r3, _08000344 @ =gUnk_030058A0 bx r3 @ call 0x080B1B3C +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_080002DC sub_080002DC: @ 0x080002DC ldr r3, _08000348 @ =gUnk_030058B0 bx r3 @ call 0x080B1B44 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_080002E0 sub_080002E0: @ 0x080002E0 ldr r3, _0800034C @ =gUnk_030058B8 bx r3 @ call 0x080B1B54 +@ r0: u32 (tileIndex) thumb_func_start sub_080002E4 sub_080002E4: @ 0x080002E4 ldr r3, _08000350 @ =gUnk_030058C8 bx r3 @ call 0x080B1B68 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. thumb_func_start sub_080002E8 sub_080002E8: @ 0x080002E8 ldr r3, _08000354 @ =gUnk_030058DC bx r3 @ call 0x080B1B84 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) thumb_func_start sub_080002EC sub_080002EC: @ 0x080002EC ldr r3, _08000358 @ =gUnk_030058F8 bx r3 @ call 0x080B1BA4 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) +@ r2: ??? thumb_func_start sub_080002F0 sub_080002F0: @ 0x080002F0 ldr r3, _0800035C @ =gUnk_03005918 bx r3 + _080002F4: .4byte gUnk_03005740 _080002F8: .4byte gUnk_0300574C _080002FC: .4byte gUnk_03005760 From 778577d6ebb6519397e13b0c8f47b886f02ff232 Mon Sep 17 00:00:00 2001 From: Kevin Tavukciyan Date: Tue, 4 Aug 2020 16:52:06 -0500 Subject: [PATCH 4/9] Decompile minishLight.c --- asm/minishLight.s | 81 ---------------------------------------- linker.ld | 2 +- src/object/minishLight.c | 40 ++++++++++++++++++++ 3 files changed, 41 insertions(+), 82 deletions(-) delete mode 100644 asm/minishLight.s create mode 100644 src/object/minishLight.c diff --git a/asm/minishLight.s b/asm/minishLight.s deleted file mode 100644 index f824b8a3..00000000 --- a/asm/minishLight.s +++ /dev/null @@ -1,81 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MinishLight -MinishLight: @ 0x0809F828 - push {lr} - ldr r2, _0809F83C @ =gUnk_081247F8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809F83C: .4byte gUnk_081247F8 - - thumb_func_start sub_0809F840 -sub_0809F840: @ 0x0809F840 - push {lr} - adds r2, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r2, #0xc] - strb r1, [r2, #0x1e] - movs r0, #0x20 - strb r0, [r2, #0xe] - strb r1, [r2, #0xf] - ldrb r0, [r2, #0xb] - cmp r0, #0 - beq _0809F860 - ldrb r0, [r2, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r2, #0x18] -_0809F860: - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer - pop {pc} - - thumb_func_start sub_0809F868 -sub_0809F868: @ 0x0809F868 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - movs r2, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809F8A2 - ldrb r0, [r1, #0xf] - cmp r0, #0 - bne _0809F890 - ldrb r0, [r1, #0x1e] - adds r0, #1 - strb r0, [r1, #0x1e] - ands r0, r2 - cmp r0, #3 - bne _0809F89E - movs r0, #1 - b _0809F89C -_0809F890: - ldrb r0, [r1, #0x1e] - subs r0, #1 - strb r0, [r1, #0x1e] - ands r0, r2 - cmp r0, #0 - bne _0809F89E -_0809F89C: - strb r0, [r1, #0xf] -_0809F89E: - movs r0, #0x20 - strb r0, [r1, #0xe] -_0809F8A2: - pop {pc} diff --git a/linker.ld b/linker.ld index 8720510b..864d4c11 100644 --- a/linker.ld +++ b/linker.ld @@ -839,7 +839,7 @@ SECTIONS { src/object/palaceArchway.o(.text); asm/objectA2.o(.text); src/object/cloud.o(.text); - asm/minishLight.o(.text); + src/object/minishLight.o(.text); asm/objectA5.o(.text); asm/objectA6.o(.text); asm/objectA7.o(.text); diff --git a/src/object/minishLight.c b/src/object/minishLight.c new file mode 100644 index 00000000..8982a49a --- /dev/null +++ b/src/object/minishLight.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "entity.h" + +extern void (* const gUnk_081247F8[])(Entity*); + +void MinishLight(Entity* this) +{ + gUnk_081247F8[this->action](this); +} + +void sub_0809F840(Entity* this) +{ + this->action = 1; + this->frameIndex = 0; + this->actionDelay = 0x20; + this->field_0xf = 0; + + if (this->entityType.parameter != 0) + { + this->spriteSettings.b.flipX = 1; + } + + UpdateSpriteForCollisionLayer(this); +} + +void sub_0809F868(Entity* this) +{ + if (--this->actionDelay == 0) { + if (this->field_0xf == 0) { + if (++this->frameIndex == 3) { + this->field_0xf = 1; + } + } else { + if (--this->frameIndex == 0) { + this->field_0xf = 0; + } + } + this->actionDelay = 32; + } +} From 261ec334a0bedbeb3f4340d22173bcb4dec78e6f Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 4 Aug 2020 17:10:55 -0700 Subject: [PATCH 5/9] def ScreenTransition --- asm/armos.s | 4 +- asm/bigBarrel.s | 4 +- asm/bigGoron.s | 4 +- asm/bossDoor.s | 4 +- asm/castorWildsStatue.s | 4 +- asm/chuchuBoss.s | 14 ++--- asm/code_08016B30.s | 2 +- asm/code_08016DF8.s | 4 +- asm/code_08018500.s | 4 +- asm/code_08019444.s | 8 +-- asm/code_0801C85C.s | 4 +- asm/code_0801D79C.s | 12 ++-- asm/code_08049CD4.s | 4 +- asm/code_0804AA84.s | 4 +- asm/code_08050038.s | 24 ++++---- asm/code_080526F8.s | 68 +++++++++++----------- asm/code_0805436C.s | 4 +- asm/code_0805E744.s | 4 +- asm/code_0806FA6C.s | 4 +- asm/code_08070698.s | 8 +-- asm/code_080732D0.s | 24 ++++---- asm/code_08078778.s | 20 +++---- asm/code_0807B9B8.s | 12 ++-- asm/code_0807CC3C.s | 65 +++------------------ asm/code_080A3480.s | 12 ++-- asm/code_080A3BD0.s | 4 +- asm/code_080A5574.s | 40 ++++++------- asm/code_080AD90C.s | 4 +- asm/enemy5F.s | 8 +-- asm/ezloCap.s | 4 +- asm/gleerok.s | 20 +++---- asm/guardWithSpear.s | 8 +-- asm/gyorgChild.s | 4 +- asm/initializeLink.s | 16 ++--- asm/itemOnGround.s | 8 +-- asm/lilypadLarge.s | 8 +-- asm/manager1.s | 8 +-- asm/manager10.s | 4 +- asm/manager1A.s | 4 +- asm/manager22.s | 4 +- asm/manager32.s | 4 +- asm/manager34.s | 4 +- asm/manager37.s | 8 +-- asm/manager4.s | 4 +- asm/managerC.s | 8 +-- asm/mazaalBracelet.s | 8 +-- asm/mazaalHead.s | 16 ++--- asm/mazaalMacro.s | 28 ++++----- asm/moldworm.s | 4 +- asm/non_matching/bigGoron/sub_0806CF30.inc | 4 +- asm/non_matching/minecart/sub_080919AC.inc | 4 +- asm/non_matching/sub_0804C258.inc | 4 +- asm/non_matching/sub_0804DE00.inc | 4 +- asm/non_matching/sub_08054524.inc | 4 +- asm/npc5.s | 4 +- asm/object17.s | 4 +- asm/object3E.s | 12 ++-- asm/object43.s | 8 +-- asm/object49.s | 4 +- asm/object6A.s | 8 +-- asm/object89.s | 8 +-- asm/object8E.s | 20 +++---- asm/object91.s | 16 ++--- asm/objectA8.s | 4 +- asm/objectBA.s | 8 +-- asm/octorokBoss.s | 40 ++++++------- asm/peahat.s | 4 +- asm/picolyteBottles.s | 16 ++--- asm/rem.s | 12 ++-- asm/sturgeon.s | 4 +- asm/updateBackgroundRegisters.s | 4 +- asm/vaati.s | 4 +- asm/vaatiArm.s | 40 ++++++------- asm/vaatiEyesMacro.s | 12 ++-- asm/vaatiProjectile.s | 4 +- asm/vaatiWrath.s | 28 ++++----- asm/warpPoint.s | 4 +- asm/windTribeTeleporter.s | 28 ++++----- asm/wizzrobeIce.s | 16 ++--- include/functions.h | 1 + include/global.h | 17 ++---- include/structures.h | 36 +++++++++--- linker.ld | 3 +- src/code_0805436C.c | 6 +- src/code_0807CC3C.c | 25 ++++++++ src/code_0808091C.c | 4 +- src/manager/manager27.c | 8 +-- src/npc/bigGoron.c | 4 +- src/npc/bladeBrothers.c | 8 +-- src/npc/goronMerchant.c | 4 +- src/npc/guard.c | 6 +- src/npc/simon.c | 8 +-- src/npc/syrup.c | 4 +- src/object/cloud.c | 8 +-- src/object/mask.c | 4 +- src/object/minecart.c | 2 +- src/object/treeHidingPortal.c | 4 +- src/room.c | 36 ++++++------ src/sub_0805E374.c | 4 +- src/sub_080A3B84.c | 4 +- 100 files changed, 536 insertions(+), 541 deletions(-) create mode 100644 src/code_0807CC3C.c diff --git a/asm/armos.s b/asm/armos.s index f8c539ab..faa79196 100644 --- a/asm/armos.s +++ b/asm/armos.s @@ -1014,7 +1014,7 @@ _0803088E: strb r0, [r2] ldr r0, [r5, #0x7c] bl DoExitTransition - ldr r0, _08030938 @ =gUnk_030010A0 + ldr r0, _08030938 @ =gScreenTransition adds r1, r5, #0 adds r1, #0x80 ldrb r1, [r1] @@ -1027,7 +1027,7 @@ _08030928: .4byte gLinkState _0803092C: .4byte gRoomControls _08030930: .4byte 0x00004049 _08030934: .4byte gLinkEntity -_08030938: .4byte gUnk_030010A0 +_08030938: .4byte gScreenTransition _0803093C: ldr r0, _0803094C @ =0x00004022 mov r3, r8 diff --git a/asm/bigBarrel.s b/asm/bigBarrel.s index caa4d348..8613c9ae 100644 --- a/asm/bigBarrel.s +++ b/asm/bigBarrel.s @@ -586,7 +586,7 @@ _08088E94: .align 2, 0 _08088EB0: .4byte gRoomVars _08088EB4: - ldr r0, _08088F18 @ =gUnk_030010A0 + ldr r0, _08088F18 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -635,7 +635,7 @@ _08088EB4: _08088F14: pop {r4, pc} .align 2, 0 -_08088F18: .4byte gUnk_030010A0 +_08088F18: .4byte gScreenTransition _08088F1C: .4byte gUnk_08120C52 thumb_func_start sub_08088F20 diff --git a/asm/bigGoron.s b/asm/bigGoron.s index e170d36e..1b89658f 100644 --- a/asm/bigGoron.s +++ b/asm/bigGoron.s @@ -570,7 +570,7 @@ _0806D45E: adds r0, r4, #0 bl sub_0807DDE4 _0806D46C: - ldr r0, _0806D4A8 @ =gUnk_030010A0 + ldr r0, _0806D4A8 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -599,7 +599,7 @@ _0806D46C: strb r0, [r2] b _0806D4BE .align 2, 0 -_0806D4A8: .4byte gUnk_030010A0 +_0806D4A8: .4byte gScreenTransition _0806D4AC: adds r1, r4, #0 adds r1, #0x63 diff --git a/asm/bossDoor.s b/asm/bossDoor.s index b32e5517..11ecdf34 100644 --- a/asm/bossDoor.s +++ b/asm/bossDoor.s @@ -196,7 +196,7 @@ sub_0808C348: @ 0x0808C348 ands r0, r1 cmp r0, #0 bne _0808C37C - ldr r0, _0808C374 @ =gUnk_030010A0 + ldr r0, _0808C374 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -209,7 +209,7 @@ _0808C36A: bl GetNextFrame b _0808C382 .align 2, 0 -_0808C374: .4byte gUnk_030010A0 +_0808C374: .4byte gScreenTransition _0808C378: .4byte 0x00000185 _0808C37C: adds r0, r4, #0 diff --git a/asm/castorWildsStatue.s b/asm/castorWildsStatue.s index a1e005b6..cb22f84d 100644 --- a/asm/castorWildsStatue.s +++ b/asm/castorWildsStatue.s @@ -45,7 +45,7 @@ _080673BC: .4byte gUnk_08110E4C sub_080673C0: @ 0x080673C0 push {lr} adds r2, r0, #0 - ldr r0, _080673D4 @ =gUnk_030010A0 + ldr r0, _080673D4 @ =gScreenTransition adds r0, #0x2c ldrb r0, [r0] cmp r0, #0 @@ -53,7 +53,7 @@ sub_080673C0: @ 0x080673C0 movs r0, #3 b _080673DA .align 2, 0 -_080673D4: .4byte gUnk_030010A0 +_080673D4: .4byte gScreenTransition _080673D8: movs r0, #1 _080673DA: diff --git a/asm/chuchuBoss.s b/asm/chuchuBoss.s index f9542429..8544335a 100644 --- a/asm/chuchuBoss.s +++ b/asm/chuchuBoss.s @@ -1366,7 +1366,7 @@ _080266B0: strh r0, [r4, #0x24] b _08026742 _080266D6: - ldr r0, _08026700 @ =gUnk_030010A0 + ldr r0, _08026700 @ =gScreenTransition ldr r0, [r0] movs r1, #0x7f ands r0, r1 @@ -1387,7 +1387,7 @@ _080266EC: lsls r0, r0, #1 b _0802670A .align 2, 0 -_08026700: .4byte gUnk_030010A0 +_08026700: .4byte gScreenTransition _08026704: .4byte gLinkEntity _08026708: movs r0, #0xc0 @@ -1396,7 +1396,7 @@ _0802670A: ldrb r0, [r4, #0xe] cmp r0, #0 beq _0802672C - ldr r0, _0802674C @ =gUnk_030010A0 + ldr r0, _0802674C @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -1427,7 +1427,7 @@ _08026748: add sp, #4 pop {r4, r5, pc} .align 2, 0 -_0802674C: .4byte gUnk_030010A0 +_0802674C: .4byte gScreenTransition thumb_func_start sub_08026750 sub_08026750: @ 0x08026750 @@ -2643,7 +2643,7 @@ sub_08027064: @ 0x08027064 ldrb r0, [r0] cmp r0, #0xa beq _08027098 - ldr r0, _080270C8 @ =gUnk_030010A0 + ldr r0, _080270C8 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -2666,7 +2666,7 @@ _08027098: ldrsh r2, [r0, r1] cmp r4, r2 beq _080270E0 - ldr r0, _080270C8 @ =gUnk_030010A0 + ldr r0, _080270C8 @ =gScreenTransition ldr r1, [r0] movs r0, #0xf ands r1, r0 @@ -2677,7 +2677,7 @@ _08027098: strb r1, [r3, #0xc] b _080270D4 .align 2, 0 -_080270C8: .4byte gUnk_030010A0 +_080270C8: .4byte gScreenTransition _080270CC: .4byte gLinkEntity _080270D0: movs r0, #0x10 diff --git a/asm/code_08016B30.s b/asm/code_08016B30.s index d1e25baf..147aa712 100644 --- a/asm/code_08016B30.s +++ b/asm/code_08016B30.s @@ -53,7 +53,7 @@ sub_08016B6C: @ 0x08016B6C ldrb r0, [r5] cmp r0, #0 bne _08016BA6 - bl sub_08016CF4 + bl UpdateBackgroundRegisters ldr r0, _08016BCC @ =gUnk_03000FBC str r0, [r4] ldr r0, _08016BD0 @ =gUnk_02022730 diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index d630fab9..ed16796d 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -391,7 +391,7 @@ _080170E8: ldrb r0, [r0, #1] cmp r0, #0 bne _08017112 - ldr r0, _08017134 @ =gUnk_030010A0 + ldr r0, _08017134 @ =gScreenTransition ldr r0, [r0] movs r1, #0x5a bl __modsi3 @@ -414,7 +414,7 @@ _08017124: .4byte gTextBox _08017128: .4byte gRoomVars _0801712C: .4byte gUnk_02002A40 _08017130: .4byte gUnk_0200AF00 -_08017134: .4byte gUnk_030010A0 +_08017134: .4byte gScreenTransition _08017138: .4byte 0x0000011F _0801713C: adds r1, r0, #0 diff --git a/asm/code_08018500.s b/asm/code_08018500.s index 79dad55e..c7bd93ff 100644 --- a/asm/code_08018500.s +++ b/asm/code_08018500.s @@ -167,7 +167,7 @@ sub_0801862C: @ 0x0801862C movs r2, #0 movs r0, #0x16 strb r0, [r1, #0xc] - ldr r5, _08018650 @ =gUnk_030010A0 + ldr r5, _08018650 @ =gScreenTransition adds r0, r5, #0 adds r0, #0x35 strb r2, [r0] @@ -180,7 +180,7 @@ sub_0801862C: @ 0x0801862C b _0801868C .align 2, 0 _0801864C: .4byte gLinkState -_08018650: .4byte gUnk_030010A0 +_08018650: .4byte gScreenTransition _08018654: .4byte gUnk_02033AB8 _08018658: ldrb r0, [r4, #2] diff --git a/asm/code_08019444.s b/asm/code_08019444.s index 86d0a0d8..16eb23b0 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -3451,7 +3451,7 @@ sub_0801AE44: @ 0x0801AE44 _0801AE5A: bl sub_080809D4 bl sub_080805F8 - ldr r0, _0801AEE4 @ =gUnk_030010A0 + ldr r0, _0801AEE4 @ =gScreenTransition adds r0, #0x2d ldrb r0, [r0] cmp r0, #0 @@ -3513,7 +3513,7 @@ _0801AED0: b _0801AF10 .align 2, 0 _0801AEE0: .4byte gRoomControls -_0801AEE4: .4byte gUnk_030010A0 +_0801AEE4: .4byte gScreenTransition _0801AEE8: .4byte gArea _0801AEEC: .4byte 0x0600F000 _0801AEF0: .4byte gUnk_03004030 @@ -3567,7 +3567,7 @@ sub_0801AF48: @ 0x0801AF48 ldr r0, _0801AF7C @ =0x00003FFF cmp r4, r0 bhi _0801AF7A - ldr r0, _0801AF80 @ =gUnk_030010A0 + ldr r0, _0801AF80 @ =gScreenTransition adds r0, #0x30 ldrb r0, [r0] cmp r0, #0 @@ -3589,7 +3589,7 @@ _0801AF7A: pop {r4, r5, r6, pc} .align 2, 0 _0801AF7C: .4byte 0x00003FFF -_0801AF80: .4byte gUnk_030010A0 +_0801AF80: .4byte gScreenTransition _0801AF84: .4byte gRoomVars _0801AF88: .4byte gUnk_0200B240 diff --git a/asm/code_0801C85C.s b/asm/code_0801C85C.s index 598c3b14..61848c56 100644 --- a/asm/code_0801C85C.s +++ b/asm/code_0801C85C.s @@ -1039,7 +1039,7 @@ _0801CFFC: .4byte 0x0000FFFF sub_0801D000: @ 0x0801D000 push {lr} adds r2, r0, #0 - ldr r0, _0801D024 @ =gUnk_030010A0 + ldr r0, _0801D024 @ =gScreenTransition movs r1, #0 cmp r2, #0 beq _0801D00E @@ -1054,7 +1054,7 @@ _0801D00E: bl sub_0801CFD0 b _0801D03A .align 2, 0 -_0801D024: .4byte gUnk_030010A0 +_0801D024: .4byte gScreenTransition _0801D028: ldr r3, _0801D03C @ =gUnk_02001A3C ldrb r1, [r3] diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index 6fdf451e..3bd3bf75 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -542,12 +542,12 @@ _0801DB90: .4byte 0x0000FFFF thumb_func_start sub_0801DB94 sub_0801DB94: @ 0x0801DB94 - ldr r0, _0801DB9C @ =gUnk_030010A0 + ldr r0, _0801DB9C @ =gScreenTransition ldrh r0, [r0, #0x1e] lsrs r0, r0, #0xb bx lr .align 2, 0 -_0801DB9C: .4byte gUnk_030010A0 +_0801DB9C: .4byte gScreenTransition thumb_func_start sub_0801DBA0 sub_0801DBA0: @ 0x0801DBA0 @@ -563,7 +563,7 @@ sub_0801DBA0: @ 0x0801DBA0 bl _DmaZero movs r0, #1 strb r0, [r5] - ldr r2, _0801DBE4 @ =gUnk_030010A0 + ldr r2, _0801DBE4 @ =gScreenTransition ldrh r0, [r2, #0x1c] lsrs r0, r0, #4 movs r1, #0x7f @@ -585,7 +585,7 @@ sub_0801DBA0: @ 0x0801DBA0 ldr r6, [r4] b _0801DD3A .align 2, 0 -_0801DBE4: .4byte gUnk_030010A0 +_0801DBE4: .4byte gScreenTransition _0801DBE8: .4byte gUnk_080C9C50 _0801DBEC: .4byte gArea _0801DBF0: @@ -736,7 +736,7 @@ _0801DCF8: strb r0, [r5, #2] adds r5, #3 _0801DD16: - ldr r2, _0801DD54 @ =gUnk_030010A0 + ldr r2, _0801DD54 @ =gScreenTransition ldrh r0, [r6] ldrh r1, [r2, #0x16] cmp r0, r1 @@ -769,7 +769,7 @@ _0801DD42: .align 2, 0 _0801DD4C: .4byte gArea _0801DD50: .4byte gUnk_0811E214 -_0801DD54: .4byte gUnk_030010A0 +_0801DD54: .4byte gScreenTransition thumb_func_start sub_0801DD58 sub_0801DD58: @ 0x0801DD58 diff --git a/asm/code_08049CD4.s b/asm/code_08049CD4.s index d415811d..18f22491 100644 --- a/asm/code_08049CD4.s +++ b/asm/code_08049CD4.s @@ -1567,7 +1567,7 @@ _0804A81C: ldrb r0, [r5, #9] cmp r0, #0x37 bne _0804A84A - ldr r0, _0804A85C @ =gUnk_030010A0 + ldr r0, _0804A85C @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0 @@ -1580,7 +1580,7 @@ _0804A84A: bl DeleteThisEntity b _0804A982 .align 2, 0 -_0804A85C: .4byte gUnk_030010A0 +_0804A85C: .4byte gScreenTransition _0804A860: .4byte 0x80100000 _0804A864: adds r4, r5, #0 diff --git a/asm/code_0804AA84.s b/asm/code_0804AA84.s index 630f8984..1e8b6570 100644 --- a/asm/code_0804AA84.s +++ b/asm/code_0804AA84.s @@ -248,7 +248,7 @@ sub_0804AD6C: @ 0x0804AD6C push {r4, r5, r6, lr} mov r6, r8 push {r6} - ldr r3, _0804ADD0 @ =gUnk_030010A0 + ldr r3, _0804ADD0 @ =gScreenTransition movs r1, #0 movs r6, #1 strb r6, [r3, #8] @@ -293,6 +293,6 @@ sub_0804AD6C: @ 0x0804AD6C mov r8, r3 pop {r4, r5, r6, pc} .align 2, 0 -_0804ADD0: .4byte gUnk_030010A0 +_0804ADD0: .4byte gScreenTransition _0804ADD4: .4byte gArea _0804ADD8: .4byte gUnk_080D4140 diff --git a/asm/code_08050038.s b/asm/code_08050038.s index 24320ebe..3f48d62d 100644 --- a/asm/code_08050038.s +++ b/asm/code_08050038.s @@ -3107,7 +3107,7 @@ _08051984: .4byte 0x000004B4 thumb_func_start sub_08051988 sub_08051988: @ 0x08051988 push {lr} - ldr r1, _080519A4 @ =gUnk_030010A0 + ldr r1, _080519A4 @ =gScreenTransition ldr r0, [r1] adds r0, #1 str r0, [r1] @@ -3120,7 +3120,7 @@ sub_08051988: @ 0x08051988 bl _call_via_r0 pop {pc} .align 2, 0 -_080519A4: .4byte gUnk_030010A0 +_080519A4: .4byte gScreenTransition _080519A8: .4byte gUnk_080FC9D8 _080519AC: .4byte gUnk_03001000 @@ -3137,7 +3137,7 @@ sub_080519B0: @ 0x080519B0 bl sub_0801DA7C bl sub_080A7124 bl sub_0807059C - ldr r4, _08051A08 @ =gUnk_030010A0 + ldr r4, _08051A08 @ =gScreenTransition adds r0, r4, #0 movs r1, #0xb0 bl _DmaZero @@ -3160,7 +3160,7 @@ _08051A02: pop {r4, r5, pc} .align 2, 0 _08051A04: .4byte gUnk_03000FD0 -_08051A08: .4byte gUnk_030010A0 +_08051A08: .4byte gScreenTransition _08051A0C: .4byte gUnk_02002AC8 _08051A10: .4byte gUnk_03001000 @@ -3188,7 +3188,7 @@ sub_08051A14: @ 0x08051A14 bl sub_0801CFA8 bl sub_0806FD8C ldr r2, _08051A80 @ =gRoomControls - ldr r1, _08051A84 @ =gUnk_030010A0 + ldr r1, _08051A84 @ =gScreenTransition ldrb r0, [r1, #0xc] strb r0, [r2, #4] ldrb r0, [r1, #0xd] @@ -3207,7 +3207,7 @@ _08051A74: .4byte gUnk_03000000 _08051A78: .4byte 0x00000B74 _08051A7C: .4byte gUnk_02032EC0 _08051A80: .4byte gRoomControls -_08051A84: .4byte gUnk_030010A0 +_08051A84: .4byte gScreenTransition _08051A88: .4byte gUnk_02024490 _08051A8C: .4byte gUnk_03001000 @@ -3238,7 +3238,7 @@ InitializeNewRoom: @ 0x08051AAC ldr r1, _08051AE8 @ =gUnk_03001000 movs r0, #1 strb r0, [r1, #4] - ldr r0, _08051AEC @ =gUnk_030010A0 + ldr r0, _08051AEC @ =gScreenTransition strb r2, [r0, #8] strb r2, [r0, #4] strb r2, [r0, #5] @@ -3252,7 +3252,7 @@ InitializeNewRoom: @ 0x08051AAC .align 2, 0 _08051AE4: .4byte gScreen _08051AE8: .4byte gUnk_03001000 -_08051AEC: .4byte gUnk_030010A0 +_08051AEC: .4byte gScreenTransition thumb_func_start sub_08051AF0 sub_08051AF0: @ 0x08051AF0 @@ -3470,14 +3470,14 @@ sub_08051CF0: @ 0x08051CF0 bl sub_0801DA90 strb r6, [r5, #3] strb r4, [r5, #4] - ldr r0, _08051D28 @ =gUnk_030010A0 + ldr r0, _08051D28 @ =gScreenTransition strb r6, [r0, #8] _08051D1E: pop {r4, r5, r6, pc} .align 2, 0 _08051D20: .4byte gUnk_03001000 _08051D24: .4byte gUnk_03000FD0 -_08051D28: .4byte gUnk_030010A0 +_08051D28: .4byte gScreenTransition thumb_func_start sub_08051D2C sub_08051D2C: @ 0x08051D2C @@ -3546,7 +3546,7 @@ _08051DC8: .4byte gRoomVars sub_08051DCC: @ 0x08051DCC push {r4, lr} ldr r1, _08051DFC @ =gRoomControls - ldr r4, _08051E00 @ =gUnk_030010A0 + ldr r4, _08051E00 @ =gScreenTransition ldrb r0, [r4, #0xc] strb r0, [r1, #4] ldrb r0, [r4, #0xd] @@ -3563,7 +3563,7 @@ sub_08051DCC: @ 0x08051DCC pop {r4, pc} .align 2, 0 _08051DFC: .4byte gRoomControls -_08051E00: .4byte gUnk_030010A0 +_08051E00: .4byte gScreenTransition thumb_func_start sub_08051E04 sub_08051E04: @ 0x08051E04 diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 43807c93..9e43fbd2 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -236,14 +236,14 @@ _080528B0: .4byte 0x00000864 thumb_func_start sub_080528B4 sub_080528B4: @ 0x080528B4 push {lr} - ldr r0, _080528C4 @ =gUnk_030010A0 + ldr r0, _080528C4 @ =gScreenTransition ldrb r0, [r0, #5] cmp r0, #0 bne _080528C8 movs r0, #0 b _080528E6 .align 2, 0 -_080528C4: .4byte gUnk_030010A0 +_080528C4: .4byte gScreenTransition _080528C8: bl sub_0804FFE4 ldr r1, _080528E8 @ =gUnk_03001000 @@ -289,7 +289,7 @@ _08052918: .4byte 0x00000888 thumb_func_start sub_0805291C sub_0805291C: @ 0x0805291C push {r4, lr} - ldr r4, _08052948 @ =gUnk_030010A0 + ldr r4, _08052948 @ =gScreenTransition ldrb r0, [r4, #8] cmp r0, #0 beq _080529F4 @@ -310,7 +310,7 @@ sub_0805291C: @ 0x0805291C strb r0, [r4, #8] b _080529F6 .align 2, 0 -_08052948: .4byte gUnk_030010A0 +_08052948: .4byte gScreenTransition _0805294C: .4byte gUnk_02002A40 _08052950: .4byte gLinkState _08052954: @@ -394,7 +394,7 @@ _080529F6: thumb_func_start sub_080529F8 sub_080529F8: @ 0x080529F8 push {r4, r5, r6, lr} - ldr r1, _08052A34 @ =gUnk_030010A0 + ldr r1, _08052A34 @ =gScreenTransition ldrh r4, [r1, #0xa] ldr r2, _08052A38 @ =gUnk_080FCAD6 ldrh r0, [r2] @@ -426,7 +426,7 @@ _08052A30: movs r0, #1 b _08052A4A .align 2, 0 -_08052A34: .4byte gUnk_030010A0 +_08052A34: .4byte gScreenTransition _08052A38: .4byte gUnk_080FCAD6 _08052A3C: .4byte gLinkState _08052A40: @@ -442,7 +442,7 @@ _08052A4A: thumb_func_start sub_08052A4C sub_08052A4C: @ 0x08052A4C push {r4, r5, lr} - ldr r2, _08052A88 @ =gUnk_030010A0 + ldr r2, _08052A88 @ =gScreenTransition movs r0, #1 strb r0, [r2, #8] ldr r5, _08052A8C @ =gLinkEntity @@ -471,14 +471,14 @@ sub_08052A4C: @ 0x08052A4C strb r0, [r2, #0xd] pop {r4, r5, pc} .align 2, 0 -_08052A88: .4byte gUnk_030010A0 +_08052A88: .4byte gScreenTransition _08052A8C: .4byte gLinkEntity _08052A90: .4byte gRoomControls thumb_func_start sub_08052A94 sub_08052A94: @ 0x08052A94 push {lr} - ldr r0, _08052AAC @ =gUnk_030010A0 + ldr r0, _08052AAC @ =gScreenTransition ldrb r0, [r0, #9] subs r0, #1 cmp r0, #8 @@ -489,7 +489,7 @@ sub_08052A94: @ 0x08052A94 ldr r0, [r0] mov pc, r0 .align 2, 0 -_08052AAC: .4byte gUnk_030010A0 +_08052AAC: .4byte gScreenTransition _08052AB0: .4byte _08052AB4 _08052AB4: @ jump table .4byte _08052AD8 @ case 0 @@ -618,7 +618,7 @@ _08052BB4: thumb_func_start sub_08052BB8 sub_08052BB8: @ 0x08052BB8 push {lr} - ldr r0, _08052BE0 @ =gUnk_030010A0 + ldr r0, _08052BE0 @ =gScreenTransition adds r2, r0, #0 adds r2, #0x35 ldrb r1, [r2] @@ -638,7 +638,7 @@ sub_08052BB8: @ 0x08052BB8 movs r2, #1 b _08052BEE .align 2, 0 -_08052BE0: .4byte gUnk_030010A0 +_08052BE0: .4byte gScreenTransition _08052BE4: .4byte gLinkEntity _08052BE8: .4byte gRoomControls _08052BEC: @@ -652,7 +652,7 @@ _08052BEE: thumb_func_start sub_08052BF8 sub_08052BF8: @ 0x08052BF8 push {lr} - ldr r2, _08052C34 @ =gUnk_030010A0 + ldr r2, _08052C34 @ =gScreenTransition adds r1, r2, #0 adds r1, #0x31 ldrb r0, [r1] @@ -680,7 +680,7 @@ sub_08052BF8: @ 0x08052BF8 _08052C30: pop {pc} .align 2, 0 -_08052C34: .4byte gUnk_030010A0 +_08052C34: .4byte gScreenTransition _08052C38: .4byte gArea thumb_func_start sub_08052C3C @@ -713,7 +713,7 @@ sub_08052C5C: @ 0x08052C5C bl sub_08052620 cmp r0, #0 beq _08052C84 - ldr r2, _08052C7C @ =gUnk_030010A0 + ldr r2, _08052C7C @ =gScreenTransition ldr r1, _08052C80 @ =gLinkEntity ldrh r0, [r1, #0x2e] strh r0, [r2, #0x20] @@ -721,13 +721,13 @@ sub_08052C5C: @ 0x08052C5C strh r0, [r2, #0x22] b _08052C98 .align 2, 0 -_08052C7C: .4byte gUnk_030010A0 +_08052C7C: .4byte gScreenTransition _08052C80: .4byte gLinkEntity _08052C84: bl CheckIsDungeon cmp r0, #0 beq _08052C98 - ldr r2, _08052C9C @ =gUnk_030010A0 + ldr r2, _08052C9C @ =gScreenTransition ldr r1, _08052CA0 @ =gLinkEntity ldrh r0, [r1, #0x2e] strh r0, [r2, #0x1c] @@ -736,7 +736,7 @@ _08052C84: _08052C98: pop {pc} .align 2, 0 -_08052C9C: .4byte gUnk_030010A0 +_08052C9C: .4byte gScreenTransition _08052CA0: .4byte gLinkEntity thumb_func_start sub_08052CA4 @@ -750,7 +750,7 @@ sub_08052CA4: @ 0x08052CA4 lsls r4, r4, #1 ldr r1, [r0] adds r1, r1, r4 - ldr r4, _08052CCC @ =gUnk_030010A0 + ldr r4, _08052CCC @ =gScreenTransition ldrh r0, [r1] adds r0, r0, r2 strh r0, [r4, #0x20] @@ -760,7 +760,7 @@ sub_08052CA4: @ 0x08052CA4 pop {r4, pc} .align 2, 0 _08052CC8: .4byte gUnk_0811E214 -_08052CCC: .4byte gUnk_030010A0 +_08052CCC: .4byte gScreenTransition thumb_func_start sub_08052CD0 sub_08052CD0: @ 0x08052CD0 @@ -773,7 +773,7 @@ sub_08052CD0: @ 0x08052CD0 lsls r4, r4, #1 ldr r1, [r0] adds r1, r1, r4 - ldr r4, _08052CF8 @ =gUnk_030010A0 + ldr r4, _08052CF8 @ =gScreenTransition ldrh r0, [r1] adds r0, r0, r2 strh r0, [r4, #0x1c] @@ -783,7 +783,7 @@ sub_08052CD0: @ 0x08052CD0 pop {r4, pc} .align 2, 0 _08052CF4: .4byte gUnk_0811E214 -_08052CF8: .4byte gUnk_030010A0 +_08052CF8: .4byte gScreenTransition thumb_func_start sub_08052CFC sub_08052CFC: @ 0x08052CFC @@ -1343,7 +1343,7 @@ _08053154: ldrb r2, [r0, #1] cmp r2, #0 beq _0805316C - ldr r0, _08053174 @ =gUnk_030010A0 + ldr r0, _08053174 @ =gScreenTransition adds r0, #0x2e ldrb r1, [r0] eors r1, r2 @@ -1356,7 +1356,7 @@ _0805316E: pop {pc} .align 2, 0 _08053170: .4byte gArea -_08053174: .4byte gUnk_030010A0 +_08053174: .4byte gScreenTransition thumb_func_start sub_08053178 sub_08053178: @ 0x08053178 @@ -1364,7 +1364,7 @@ sub_08053178: @ 0x08053178 bl sub_08053144 cmp r0, #0 beq _080531E6 - ldr r0, _080531E8 @ =gUnk_030010A0 + ldr r0, _080531E8 @ =gScreenTransition ldr r5, _080531EC @ =gArea ldrb r1, [r5, #1] adds r0, #0x2e @@ -1410,7 +1410,7 @@ _080531DC: _080531E6: pop {r4, r5, pc} .align 2, 0 -_080531E8: .4byte gUnk_030010A0 +_080531E8: .4byte gScreenTransition _080531EC: .4byte gArea _080531F0: .4byte gRoomVars _080531F4: .4byte gUnk_02002AA0 @@ -1458,7 +1458,7 @@ _0805324C: .4byte gRoomControls thumb_func_start sub_08053250 sub_08053250: @ 0x08053250 push {r4, lr} - ldr r0, _0805328C @ =gUnk_030010A0 + ldr r0, _0805328C @ =gScreenTransition movs r1, #0 strb r1, [r0, #0xf] ldr r3, _08053290 @ =gLinkEntity @@ -1486,7 +1486,7 @@ sub_08053250: @ 0x08053250 bl sub_0801D66C pop {r4, pc} .align 2, 0 -_0805328C: .4byte gUnk_030010A0 +_0805328C: .4byte gScreenTransition _08053290: .4byte gLinkEntity _08053294: .4byte gRoomControls _08053298: .4byte gUnk_02002AC8 @@ -1541,7 +1541,7 @@ sub_080532E4: @ 0x080532E4 movs r3, #0xa5 lsls r3, r3, #1 adds r2, r0, r3 - ldr r1, _0805331C @ =gUnk_030010A0 + ldr r1, _0805331C @ =gScreenTransition movs r0, #0x58 strb r0, [r1, #0x16] movs r0, #0x21 @@ -1561,7 +1561,7 @@ sub_080532E4: @ 0x080532E4 bx lr .align 2, 0 _08053318: .4byte gUnk_0811E214 -_0805331C: .4byte gUnk_030010A0 +_0805331C: .4byte gScreenTransition thumb_func_start sub_08053320 sub_08053320: @ 0x08053320 @@ -2277,7 +2277,7 @@ sub_08053894: @ 0x08053894 _080538B4: .4byte gUnk_03000FD0 _080538B8: .4byte gMenu _080538BC: - ldr r0, _080538FC @ =gUnk_030010A0 + ldr r0, _080538FC @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -2310,7 +2310,7 @@ _080538E4: _080538F8: pop {r4, pc} .align 2, 0 -_080538FC: .4byte gUnk_030010A0 +_080538FC: .4byte gScreenTransition _08053900: .4byte gScreen thumb_func_start sub_08053904 @@ -2335,7 +2335,7 @@ sub_08053904: @ 0x08053904 _08053924: .4byte gUnk_03000FD0 _08053928: .4byte gMenu _0805392C: - ldr r0, _0805396C @ =gUnk_030010A0 + ldr r0, _0805396C @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -2368,7 +2368,7 @@ _08053954: _08053968: pop {r4, pc} .align 2, 0 -_0805396C: .4byte gUnk_030010A0 +_0805396C: .4byte gScreenTransition _08053970: .4byte gScreen thumb_func_start sub_08053974 diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index 0d6f007f..960c0bf3 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -1269,7 +1269,7 @@ sub_0805524C: @ 0x0805524C .align 2, 0 _08055270: .4byte gMenu _08055274: - ldr r0, _080552A4 @ =gUnk_030010A0 + ldr r0, _080552A4 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -1293,7 +1293,7 @@ _08055274: strh r0, [r1] b _080552D6 .align 2, 0 -_080552A4: .4byte gUnk_030010A0 +_080552A4: .4byte gScreenTransition _080552A8: .4byte gUnk_080FF204 _080552AC: .4byte 0x0000FFFF _080552B0: .4byte gScreen diff --git a/asm/code_0805E744.s b/asm/code_0805E744.s index c57c1fd1..5f06dd29 100644 --- a/asm/code_0805E744.s +++ b/asm/code_0805E744.s @@ -1043,7 +1043,7 @@ _0805EE82: thumb_func_start sub_0805EE88 sub_0805EE88: @ 0x0805EE88 push {lr} - ldr r1, _0805EEB0 @ =gUnk_030010A0 + ldr r1, _0805EEB0 @ =gScreenTransition adds r0, r1, #0 adds r0, #0x2f ldrb r0, [r0] @@ -1062,7 +1062,7 @@ sub_0805EE88: @ 0x0805EE88 _0805EEAC: pop {pc} .align 2, 0 -_0805EEB0: .4byte gUnk_030010A0 +_0805EEB0: .4byte gScreenTransition thumb_func_start sub_0805EEB4 sub_0805EEB4: @ 0x0805EEB4 diff --git a/asm/code_0806FA6C.s b/asm/code_0806FA6C.s index 7764e708..1f153b44 100644 --- a/asm/code_0806FA6C.s +++ b/asm/code_0806FA6C.s @@ -106,7 +106,7 @@ _0806FBB2: sub_0806FBB4: @ 0x0806FBB4 push {lr} adds r1, r0, #0 - ldr r0, _0806FBD0 @ =gUnk_030010A0 + ldr r0, _0806FBD0 @ =gScreenTransition ldrb r0, [r0, #5] cmp r0, #0 bne _0806FBC8 @@ -120,7 +120,7 @@ _0806FBC8: _0806FBCC: pop {pc} .align 2, 0 -_0806FBD0: .4byte gUnk_030010A0 +_0806FBD0: .4byte gScreenTransition _0806FBD4: .4byte gLinkState thumb_func_start sub_0806FBD8 diff --git a/asm/code_08070698.s b/asm/code_08070698.s index eabdd297..b6e53ed6 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -650,7 +650,7 @@ _08070BC8: ldrb r0, [r0] cmp r0, #0 beq _08070BE4 - ldr r0, _08070BE8 @ =gUnk_030010A0 + ldr r0, _08070BE8 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -661,7 +661,7 @@ _08070BC8: _08070BE4: pop {r4, r5, r6, r7, pc} .align 2, 0 -_08070BE8: .4byte gUnk_030010A0 +_08070BE8: .4byte gScreenTransition thumb_func_start sub_08070BEC sub_08070BEC: @ 0x08070BEC @@ -2955,13 +2955,13 @@ _08071D3A: _08071D6C: .4byte gUnk_02002A40 _08071D70: .4byte gLinkState _08071D74: - ldr r1, _08071D7C @ =gUnk_030010A0 + ldr r1, _08071D7C @ =gScreenTransition movs r0, #1 strb r0, [r1, #5] _08071D7A: pop {r4, r5, pc} .align 2, 0 -_08071D7C: .4byte gUnk_030010A0 +_08071D7C: .4byte gScreenTransition thumb_func_start sub_08071D80 sub_08071D80: @ 0x08071D80 diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index dc1ead63..f675fcf8 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -706,7 +706,7 @@ _08073808: .4byte gLinkState sub_0807380C: @ 0x0807380C push {r4, lr} adds r4, r0, #0 - ldr r0, _08073854 @ =gUnk_030010A0 + ldr r0, _08073854 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -740,7 +740,7 @@ _0807382A: bl sub_08003FC4 b _0807387A .align 2, 0 -_08073854: .4byte gUnk_030010A0 +_08073854: .4byte gScreenTransition _08073858: .4byte gLinkState _0807385C: .4byte gUnk_0811BC38 _08073860: @@ -767,7 +767,7 @@ _0807387A: sub_08073884: @ 0x08073884 push {r4, lr} adds r4, r0, #0 - ldr r0, _080738DC @ =gUnk_030010A0 + ldr r0, _080738DC @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -809,7 +809,7 @@ _080738A2: bl DoExitTransition b _080738F0 .align 2, 0 -_080738DC: .4byte gUnk_030010A0 +_080738DC: .4byte gScreenTransition _080738E0: .4byte gLinkState _080738E4: .4byte gUnk_0811BC40 _080738E8: .4byte gUnk_0813AD88 @@ -1346,7 +1346,7 @@ sub_08073C80: @ 0x08073C80 ldr r0, _08073D0C @ =gRoomControls str r4, [r0, #0x30] bl sub_080809D4 - ldr r1, _08073D10 @ =gUnk_030010A0 + ldr r1, _08073D10 @ =gScreenTransition ldrb r0, [r1, #0xf] cmp r0, #9 bne _08073D14 @@ -1362,7 +1362,7 @@ _08073D00: .4byte gLinkState _08073D04: .4byte 0x00000C18 _08073D08: .4byte gUnk_0811BC80 _08073D0C: .4byte gRoomControls -_08073D10: .4byte gUnk_030010A0 +_08073D10: .4byte gScreenTransition _08073D14: movs r0, #4 movs r1, #0 @@ -2708,7 +2708,7 @@ _08074714: .align 2, 0 _0807471C: .4byte 0x00000161 _08074720: - ldr r0, _08074760 @ =gUnk_030010A0 + ldr r0, _08074760 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -2741,7 +2741,7 @@ _08074732: strb r0, [r1] b _08074792 .align 2, 0 -_08074760: .4byte gUnk_030010A0 +_08074760: .4byte gScreenTransition _08074764: .4byte 0x00000161 _08074768: .4byte gLinkState _0807476C: @@ -5168,7 +5168,7 @@ _08075962: lsls r0, r0, #2 strh r0, [r4, #0x24] bl sub_08079E08 - ldr r0, _08075994 @ =gUnk_030010A0 + ldr r0, _08075994 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -5181,7 +5181,7 @@ _08075962: b _080759B2 .align 2, 0 _08075990: .4byte gLinkEntity -_08075994: .4byte gUnk_030010A0 +_08075994: .4byte gScreenTransition _08075998: ldrb r1, [r4, #0xe] adds r0, r2, #0 @@ -6613,7 +6613,7 @@ sub_08076488: @ 0x08076488 ands r0, r1 cmp r0, #0x10 bne _080764B8 - ldr r0, _080764F8 @ =gUnk_030010A0 + ldr r0, _080764F8 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -6651,7 +6651,7 @@ _080764B8: strb r6, [r4, #0xf] b _08076508 .align 2, 0 -_080764F8: .4byte gUnk_030010A0 +_080764F8: .4byte gScreenTransition _080764FC: .4byte gLinkEntity _08076500: .4byte gLinkState _08076504: diff --git a/asm/code_08078778.s b/asm/code_08078778.s index 5475dc74..70aa7420 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -310,14 +310,14 @@ sub_08078AA8: @ 0x08078AA8 ldr r3, _08078AB8 @ =gLinkState movs r2, #0x16 strb r2, [r3, #0xc] - ldr r2, _08078ABC @ =gUnk_030010A0 + ldr r2, _08078ABC @ =gScreenTransition strh r0, [r2, #0x36] adds r2, #0x35 strb r1, [r2] bx lr .align 2, 0 _08078AB8: .4byte gLinkState -_08078ABC: .4byte gUnk_030010A0 +_08078ABC: .4byte gScreenTransition thumb_func_start sub_08078AC0 sub_08078AC0: @ 0x08078AC0 @@ -736,7 +736,7 @@ _08078DE0: ands r0, r1 cmp r0, #2 bne _08078E82 - ldr r0, _08078E38 @ =gUnk_030010A0 + ldr r0, _08078E38 @ =gScreenTransition ldr r1, [r0] movs r0, #3 ands r1, r0 @@ -747,7 +747,7 @@ _08078DE0: b _08078E82 .align 2, 0 _08078E34: .4byte gLinkState -_08078E38: .4byte gUnk_030010A0 +_08078E38: .4byte gScreenTransition _08078E3C: ldrh r0, [r4, #0x2e] adds r0, #1 @@ -5097,7 +5097,7 @@ _0807AEA8: ands r0, r1 cmp r0, #0 beq _0807AECC - ldr r0, _0807AEC8 @ =gUnk_030010A0 + ldr r0, _0807AEC8 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -5108,9 +5108,9 @@ _0807AEA8: bl sub_080A2A84 b _0807AEDE .align 2, 0 -_0807AEC8: .4byte gUnk_030010A0 +_0807AEC8: .4byte gScreenTransition _0807AECC: - ldr r0, _0807AEE0 @ =gUnk_030010A0 + ldr r0, _0807AEE0 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -5121,7 +5121,7 @@ _0807AECC: _0807AEDE: pop {r4, pc} .align 2, 0 -_0807AEE0: .4byte gUnk_030010A0 +_0807AEE0: .4byte gScreenTransition thumb_func_start sub_0807AEE4 sub_0807AEE4: @ 0x0807AEE4 @@ -5510,7 +5510,7 @@ sub_0807B1A8: @ 0x0807B1A8 ldr r1, [r0] adds r0, r4, #0 bl _call_via_r1 - ldr r0, _0807B1D8 @ =gUnk_030010A0 + ldr r0, _0807B1D8 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -5522,7 +5522,7 @@ _0807B1D0: pop {r4, pc} .align 2, 0 _0807B1D4: .4byte gUnk_0811C298 -_0807B1D8: .4byte gUnk_030010A0 +_0807B1D8: .4byte gScreenTransition thumb_func_start sub_0807B1DC sub_0807B1DC: @ 0x0807B1DC diff --git a/asm/code_0807B9B8.s b/asm/code_0807B9B8.s index 24a845bd..f0d37f9c 100644 --- a/asm/code_0807B9B8.s +++ b/asm/code_0807B9B8.s @@ -1003,7 +1003,7 @@ _0807C178: movs r3, #1 mov sb, r3 _0807C184: - ldr r0, _0807C1B0 @ =gUnk_030010A0 + ldr r0, _0807C1B0 @ =gScreenTransition adds r0, #0x2d ldrb r0, [r0] cmp r0, #0 @@ -1024,7 +1024,7 @@ _0807C184: bl sub_0801D66C b _0807C26C .align 2, 0 -_0807C1B0: .4byte gUnk_030010A0 +_0807C1B0: .4byte gScreenTransition _0807C1B4: .4byte gUnk_02025EB4 _0807C1B8: .4byte gUnk_0200B654 _0807C1BC: @@ -1859,7 +1859,7 @@ _0807C85C: .4byte gUnk_02000070 thumb_func_start sub_0807C860 sub_0807C860: @ 0x0807C860 push {r4, lr} - ldr r0, _0807C88C @ =gUnk_030010A0 + ldr r0, _0807C88C @ =gScreenTransition adds r0, #0x2d movs r1, #1 strb r1, [r0] @@ -1879,14 +1879,14 @@ sub_0807C860: @ 0x0807C860 bl sub_0801D66C pop {r4, pc} .align 2, 0 -_0807C88C: .4byte gUnk_030010A0 +_0807C88C: .4byte gScreenTransition _0807C890: .4byte gUnk_02025EB4 _0807C894: .4byte gUnk_0200B654 thumb_func_start sub_0807C898 sub_0807C898: @ 0x0807C898 push {r4, r5, lr} - ldr r4, _0807C8AC @ =gUnk_030010A0 + ldr r4, _0807C8AC @ =gScreenTransition adds r4, #0x2d movs r5, #0 movs r0, #2 @@ -1895,7 +1895,7 @@ sub_0807C898: @ 0x0807C898 strb r5, [r4] pop {r4, r5, pc} .align 2, 0 -_0807C8AC: .4byte gUnk_030010A0 +_0807C8AC: .4byte gScreenTransition thumb_func_start sub_0807C8B0 sub_0807C8B0: @ 0x0807C8B0 diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 6732a77c..79a102ff 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -2303,7 +2303,7 @@ _0807DE1E: bl sub_0800445C b _0807DDEC _0807DE26: - ldr r0, _0807DE40 @ =gUnk_030010A0 + ldr r0, _0807DE40 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -2317,9 +2317,9 @@ _0807DE26: strb r0, [r4, #0xf] b _0807DDEC .align 2, 0 -_0807DE40: .4byte gUnk_030010A0 +_0807DE40: .4byte gScreenTransition _0807DE44: - ldr r0, _0807DE68 @ =gUnk_030010A0 + ldr r0, _0807DE68 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -2336,7 +2336,7 @@ _0807DE44: strb r0, [r1] b _0807DDEC .align 2, 0 -_0807DE68: .4byte gUnk_030010A0 +_0807DE68: .4byte gScreenTransition _0807DE6C: .4byte gUnk_0811E510 _0807DE70: adds r0, r4, #0 @@ -6989,7 +6989,7 @@ _0807FF18: .4byte gUnk_02000070 sub_0807FF1C: @ 0x0807FF1C push {lr} adds r2, r0, #0 - ldr r0, _0807FF4C @ =gUnk_030010A0 + ldr r0, _0807FF4C @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -7011,7 +7011,7 @@ sub_0807FF1C: @ 0x0807FF1C _0807FF48: pop {pc} .align 2, 0 -_0807FF4C: .4byte gUnk_030010A0 +_0807FF4C: .4byte gScreenTransition _0807FF50: .4byte gUnk_02000070 thumb_func_start sub_0807FF54 @@ -8165,7 +8165,7 @@ _0808083E: DoExitTransition: @ 0x08080840 push {r4, lr} adds r4, r0, #0 - ldr r0, _0808085C @ =gUnk_030010A0 + ldr r0, _0808085C @ =gScreenTransition movs r1, #1 strb r1, [r0, #8] adds r2, r0, #0 @@ -8177,7 +8177,7 @@ DoExitTransition: @ 0x08080840 strh r1, [r2, #4] b _08080872 .align 2, 0 -_0808085C: .4byte gUnk_030010A0 +_0808085C: .4byte gScreenTransition _08080860: .4byte 0x000003FF _08080864: ldr r0, _08080880 @ =gRoomControls @@ -8233,51 +8233,4 @@ _080808B8: .align 2, 0 _080808CC: .4byte gRoomControls _080808D0: .4byte 0xFFFF8000 -_080808D4: .4byte gUnk_0811E7C4 - - thumb_func_start sub_080808D8 -sub_080808D8: @ 0x080808D8 - ldr r1, _080808E0 @ =gUnk_030010A0 - movs r0, #0 - strb r0, [r1, #9] - bx lr - .align 2, 0 -_080808E0: .4byte gUnk_030010A0 - - thumb_func_start sub_080808E4 -sub_080808E4: @ 0x080808E4 - push {r4, lr} - ldr r4, _080808F8 @ =gUnk_030010A0 - ldrb r0, [r4, #0xc] - bl sub_08052638 - cmp r0, #0 - beq _080808FC - movs r0, #0 - b _080808FE - .align 2, 0 -_080808F8: .4byte gUnk_030010A0 -_080808FC: - movs r0, #5 -_080808FE: - strb r0, [r4, #9] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08080904 -sub_08080904: @ 0x08080904 - ldr r1, _0808090C @ =gUnk_030010A0 - movs r0, #1 - strb r0, [r1, #9] - bx lr - .align 2, 0 -_0808090C: .4byte gUnk_030010A0 - - thumb_func_start sub_08080910 -sub_08080910: @ 0x08080910 - ldr r1, _08080918 @ =gUnk_030010A0 - movs r0, #1 - strb r0, [r1, #9] - bx lr - .align 2, 0 -_08080918: .4byte gUnk_030010A0 - +_080808D4: .4byte gUnk_0811E7C4 \ No newline at end of file diff --git a/asm/code_080A3480.s b/asm/code_080A3480.s index 62f25b35..4b5ad21e 100644 --- a/asm/code_080A3480.s +++ b/asm/code_080A3480.s @@ -204,7 +204,7 @@ _080A35DC: .4byte gUnk_02021EE0 thumb_func_start sub_080A35E0 sub_080A35E0: @ 0x080A35E0 push {lr} - ldr r1, _080A35FC @ =gUnk_030010A0 + ldr r1, _080A35FC @ =gScreenTransition ldr r0, [r1] adds r0, #1 str r0, [r1] @@ -217,7 +217,7 @@ sub_080A35E0: @ 0x080A35E0 bl _call_via_r0 pop {pc} .align 2, 0 -_080A35FC: .4byte gUnk_030010A0 +_080A35FC: .4byte gScreenTransition _080A3600: .4byte gUnk_08127D00 _080A3604: .4byte gUnk_03001000 @@ -437,7 +437,7 @@ _080A37C4: ldrb r0, [r0] cmp r0, #0 bne _080A385E - ldr r0, _080A37FC @ =gUnk_030010A0 + ldr r0, _080A37FC @ =gScreenTransition ldr r0, [r0] ands r0, r1 cmp r0, #0 @@ -461,7 +461,7 @@ _080A37C4: b _080A383C .align 2, 0 _080A37F8: .4byte gUnk_03000FD0 -_080A37FC: .4byte gUnk_030010A0 +_080A37FC: .4byte gScreenTransition _080A3800: .4byte gScreen _080A3804: ldrh r0, [r4, #8] @@ -472,7 +472,7 @@ _080A3804: bne _080A385E b _080A383C _080A3812: - ldr r0, _080A3844 @ =gUnk_030010A0 + ldr r0, _080A3844 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -499,7 +499,7 @@ _080A383C: strb r0, [r4, #6] b _080A385E .align 2, 0 -_080A3844: .4byte gUnk_030010A0 +_080A3844: .4byte gScreenTransition _080A3848: .4byte gScreen _080A384C: ldr r1, _080A3860 @ =gUnk_03000FD0 diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index 3cd69ca3..5bd2a20a 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -2418,7 +2418,7 @@ _080A4F38: adds r1, #1 cmp r1, #0xd ble _080A4F38 - ldr r1, _080A4F94 @ =gUnk_030010A0 + ldr r1, _080A4F94 @ =gScreenTransition ldrh r0, [r1, #0x20] ldrh r1, [r1, #0x22] bl sub_080A6A80 @@ -2452,7 +2452,7 @@ _080A4F66: pop {r4, pc} .align 2, 0 _080A4F90: .4byte gUnk_02034492 -_080A4F94: .4byte gUnk_030010A0 +_080A4F94: .4byte gScreenTransition _080A4F98: .4byte gUnk_02034490 _080A4F9C: .4byte gUnk_08128A38 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 6b4f2d40..e6f6a7cc 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -1818,7 +1818,7 @@ _080A6392: ands r0, r1 cmp r0, #0 bne _080A63EA - ldr r4, _080A6428 @ =gUnk_030010A0 + ldr r4, _080A6428 @ =gScreenTransition ldrh r1, [r4, #0x20] lsls r0, r1, #2 adds r0, r0, r1 @@ -1874,7 +1874,7 @@ _080A63EA: .align 2, 0 _080A6420: .4byte gMenu _080A6424: .4byte gUnk_03001010 -_080A6428: .4byte gUnk_030010A0 +_080A6428: .4byte gScreenTransition _080A642C: .4byte gLinkState _080A6430: .4byte 0x000001FB _080A6434: .4byte gUnk_08128DE8 @@ -2468,7 +2468,7 @@ sub_080A68D4: @ 0x080A68D4 beq _080A68E6 movs r4, #0x65 _080A68E6: - ldr r1, _080A6910 @ =gUnk_030010A0 + ldr r1, _080A6910 @ =gScreenTransition ldrh r0, [r1, #0x20] ldrh r1, [r1, #0x22] ldr r2, _080A6914 @ =0x000001FB @@ -2486,7 +2486,7 @@ _080A68E6: b _080A693A .align 2, 0 _080A690C: .4byte gLinkState -_080A6910: .4byte gUnk_030010A0 +_080A6910: .4byte gScreenTransition _080A6914: .4byte 0x000001FB _080A6918: .4byte gUnk_02002A40 _080A691C: .4byte gUnk_08128F58 @@ -2800,7 +2800,7 @@ sub_080A6B04: @ 0x080A6B04 beq _080A6B84 movs r2, #0x65 _080A6B84: - ldr r1, _080A6C10 @ =gUnk_030010A0 + ldr r1, _080A6C10 @ =gScreenTransition ldrh r0, [r1, #0x20] ldrh r1, [r1, #0x22] ldr r4, _080A6C14 @ =0x000001FB @@ -2859,7 +2859,7 @@ _080A6C00: .4byte 0x0000475F _080A6C04: .4byte 0x00005001 _080A6C08: .4byte gUnk_02001A40 _080A6C0C: .4byte gLinkState -_080A6C10: .4byte gUnk_030010A0 +_080A6C10: .4byte gScreenTransition _080A6C14: .4byte 0x000001FB _080A6C18: .4byte gUnk_08128E94 @@ -3718,7 +3718,7 @@ sub_080A7250: @ 0x080A7250 bl sub_0805E958 adds r1, r4, #0 subs r1, #0x54 - ldr r0, _080A7314 @ =gUnk_030010A0 + ldr r0, _080A7314 @ =gScreenTransition adds r0, #0x2f ldrb r0, [r0] strb r0, [r1, #0xd] @@ -3751,7 +3751,7 @@ _080A7304: .4byte gUnk_02001A00 _080A7308: .4byte gRoomControls _080A730C: .4byte gUnk_03000420 _080A7310: .4byte gUnk_02033280 -_080A7314: .4byte gUnk_030010A0 +_080A7314: .4byte gScreenTransition _080A7318: .4byte gLinkState _080A731C: .4byte gUnk_02017654 _080A7320: .4byte gUnk_02025EB0 @@ -3793,7 +3793,7 @@ sub_080A7328: @ 0x080A7328 ldr r1, _080A73A0 @ =gUnk_02032EC0 movs r0, #2 strb r0, [r1] - ldr r0, _080A73A4 @ =gUnk_030010A0 + ldr r0, _080A73A4 @ =gScreenTransition adds r0, #0x30 strb r2, [r0] _080A7384: @@ -3806,7 +3806,7 @@ _080A7394: .4byte gUnk_03000420 _080A7398: .4byte gUnk_02033280 _080A739C: .4byte gUnk_02024490 _080A73A0: .4byte gUnk_02032EC0 -_080A73A4: .4byte gUnk_030010A0 +_080A73A4: .4byte gScreenTransition thumb_func_start sub_080A73A8 sub_080A73A8: @ 0x080A73A8 @@ -3917,14 +3917,14 @@ _080A74AE: movs r2, #0 movs r0, #4 strb r0, [r1] - ldr r0, _080A74C4 @ =gUnk_030010A0 + ldr r0, _080A74C4 @ =gScreenTransition adds r0, #0x30 strb r2, [r0] _080A74BC: pop {r4, r5, pc} .align 2, 0 _080A74C0: .4byte gUnk_02032EC0 -_080A74C4: .4byte gUnk_030010A0 +_080A74C4: .4byte gScreenTransition thumb_func_start sub_080A74C8 sub_080A74C8: @ 0x080A74C8 @@ -4450,7 +4450,7 @@ sub_080A78B8: @ 0x080A78B8 ldrb r0, [r6, #0x1e] subs r0, #0x6a strb r0, [r4, #0x1e] - ldr r0, _080A78EC @ =gUnk_030010A0 + ldr r0, _080A78EC @ =gScreenTransition ldr r0, [r0] movs r1, #4 ands r0, r1 @@ -4462,7 +4462,7 @@ sub_080A78B8: @ 0x080A78B8 b _080A78F2 .align 2, 0 _080A78E8: .4byte gLinkState -_080A78EC: .4byte gUnk_030010A0 +_080A78EC: .4byte gScreenTransition _080A78F0: ldrb r1, [r4, #0x1e] _080A78F2: @@ -7418,7 +7418,7 @@ _080A8E8E: adds r2, r0, #0 ldr r0, _080A8EC4 @ =0x000001FF ands r2, r0 - ldr r0, _080A8EC8 @ =gUnk_030010A0 + ldr r0, _080A8EC8 @ =gScreenTransition ldr r0, [r0] ands r0, r6 cmp r0, #0 @@ -7428,7 +7428,7 @@ _080A8E8E: .align 2, 0 _080A8EC0: .4byte gLinkEntity _080A8EC4: .4byte 0x000001FF -_080A8EC8: .4byte gUnk_030010A0 +_080A8EC8: .4byte gScreenTransition _080A8ECC: subs r4, r4, r2 _080A8ECE: @@ -12353,7 +12353,7 @@ sub_080AB318: @ 0x080AB318 adds r1, r0, #0 ldr r0, _080AB3E4 @ =0x000001FF ands r1, r0 - ldr r0, _080AB3E8 @ =gUnk_030010A0 + ldr r0, _080AB3E8 @ =gScreenTransition ldr r0, [r0] mov r2, r8 ands r0, r2 @@ -12371,7 +12371,7 @@ _080AB3D8: .4byte 0xFFFF0000 _080AB3DC: .4byte gRoomControls _080AB3E0: .4byte 0x000001B5 _080AB3E4: .4byte 0x000001FF -_080AB3E8: .4byte gUnk_030010A0 +_080AB3E8: .4byte gScreenTransition _080AB3EC: subs r4, r4, r1 cmp r4, #0x1f @@ -15673,7 +15673,7 @@ sub_080ACC78: @ 0x080ACC78 push {r4, r5, r6, r7, lr} adds r4, r0, #0 ldrb r2, [r4, #0xa] - ldr r0, _080ACD20 @ =gUnk_030010A0 + ldr r0, _080ACD20 @ =gScreenTransition ldr r0, [r0] adds r0, r2, r0 movs r1, #1 @@ -15756,7 +15756,7 @@ _080ACD08: movs r0, #2 b _080ACD32 .align 2, 0 -_080ACD20: .4byte gUnk_030010A0 +_080ACD20: .4byte gScreenTransition _080ACD24: .4byte gUnk_0812AAAC _080ACD28: ldr r0, _080ACD74 @ =gUnk_0812AABC diff --git a/asm/code_080AD90C.s b/asm/code_080AD90C.s index a2259a48..4e859ff6 100644 --- a/asm/code_080AD90C.s +++ b/asm/code_080AD90C.s @@ -95,7 +95,7 @@ _080AD9AC: .4byte 0x00000427 sub_080AD9B0: @ 0x080AD9B0 push {lr} ldr r2, _080AD9F4 @ =gUnk_03000000 - ldr r0, _080AD9F8 @ =gUnk_030010A0 + ldr r0, _080AD9F8 @ =gScreenTransition adds r0, #0x2f ldrb r0, [r0] movs r1, #0 @@ -129,7 +129,7 @@ _080AD9C2: pop {pc} .align 2, 0 _080AD9F4: .4byte gUnk_03000000 -_080AD9F8: .4byte gUnk_030010A0 +_080AD9F8: .4byte gScreenTransition _080AD9FC: .4byte gRoomControls _080ADA00: .4byte gUnk_03006164 diff --git a/asm/enemy5F.s b/asm/enemy5F.s index 76911902..8421f5c4 100644 --- a/asm/enemy5F.s +++ b/asm/enemy5F.s @@ -32,7 +32,7 @@ _080482E8: .4byte gUnk_080D1D48 sub_080482EC: @ 0x080482EC push {r4, lr} adds r4, r0, #0 - ldr r0, _08048310 @ =gUnk_030010A0 + ldr r0, _08048310 @ =gScreenTransition adds r0, #0x38 ldrb r1, [r0] movs r2, #1 @@ -47,7 +47,7 @@ sub_080482EC: @ 0x080482EC bl InitializeAnimation b _08048326 .align 2, 0 -_08048310: .4byte gUnk_030010A0 +_08048310: .4byte gScreenTransition _08048314: strb r2, [r4, #0xc] adds r0, r4, #0 @@ -90,7 +90,7 @@ sub_0804835C: @ 0x0804835C push {r4, lr} adds r4, r0, #0 bl sub_080485D8 - ldr r0, _08048384 @ =gUnk_030010A0 + ldr r0, _08048384 @ =gScreenTransition adds r0, #0x39 ldrb r1, [r0] movs r2, #3 @@ -108,7 +108,7 @@ sub_0804835C: @ 0x0804835C _08048382: pop {r4, pc} .align 2, 0 -_08048384: .4byte gUnk_030010A0 +_08048384: .4byte gScreenTransition thumb_func_start sub_08048388 sub_08048388: @ 0x08048388 diff --git a/asm/ezloCap.s b/asm/ezloCap.s index e36c453b..13ef9565 100644 --- a/asm/ezloCap.s +++ b/asm/ezloCap.s @@ -584,7 +584,7 @@ _0806DCB6: thumb_func_start sub_0806DCC0 sub_0806DCC0: @ 0x0806DCC0 - ldr r0, _0806DCD0 @ =gUnk_030010A0 + ldr r0, _0806DCD0 @ =gScreenTransition movs r1, #0xf9 lsls r1, r1, #3 strh r1, [r0, #0x20] @@ -592,7 +592,7 @@ sub_0806DCC0: @ 0x0806DCC0 strh r1, [r0, #0x22] bx lr .align 2, 0 -_0806DCD0: .4byte gUnk_030010A0 +_0806DCD0: .4byte gScreenTransition thumb_func_start NPC4E_Fusion NPC4E_Fusion: @ 0x0806DCD4 diff --git a/asm/gleerok.s b/asm/gleerok.s index 82ff48dc..02f3d5b2 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -364,7 +364,7 @@ _0802D2D0: movs r2, #0x40 bl sub_0802EA68 _0802D2E4: - ldr r5, _0802D338 @ =gUnk_030010A0 + ldr r5, _0802D338 @ =gScreenTransition ldr r0, [r5] movs r1, #0x1f ands r0, r1 @@ -405,7 +405,7 @@ _0802D32E: _0802D334: pop {r4, r5, pc} .align 2, 0 -_0802D338: .4byte gUnk_030010A0 +_0802D338: .4byte gScreenTransition thumb_func_start sub_0802D33C sub_0802D33C: @ 0x0802D33C @@ -957,7 +957,7 @@ _0802D77A: sub_0802D77C: @ 0x0802D77C push {r4, r5, lr} adds r5, r0, #0 - ldr r0, _0802D7B0 @ =gUnk_030010A0 + ldr r0, _0802D7B0 @ =gScreenTransition ldr r4, [r0] movs r0, #1 ands r4, r0 @@ -981,7 +981,7 @@ sub_0802D77C: @ 0x0802D77C _0802D7AC: pop {r4, r5, pc} .align 2, 0 -_0802D7B0: .4byte gUnk_030010A0 +_0802D7B0: .4byte gScreenTransition thumb_func_start sub_0802D7B4 sub_0802D7B4: @ 0x0802D7B4 @@ -1230,7 +1230,7 @@ _0802D99C: bl DeleteThisEntity b _0802DB7E _0802D9A2: - ldr r0, _0802D9F4 @ =gUnk_030010A0 + ldr r0, _0802D9F4 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -1272,9 +1272,9 @@ _0802D9CE: str r1, [r0] b _0802D99C .align 2, 0 -_0802D9F4: .4byte gUnk_030010A0 +_0802D9F4: .4byte gScreenTransition _0802D9F8: - ldr r0, _0802DA50 @ =gUnk_030010A0 + ldr r0, _0802DA50 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -1319,7 +1319,7 @@ _0802DA24: str r1, [r0] b _0802D99C .align 2, 0 -_0802DA50: .4byte gUnk_030010A0 +_0802DA50: .4byte gScreenTransition _0802DA54: adds r0, r4, #0 adds r0, #0x74 @@ -2607,7 +2607,7 @@ _0802E400: .align 2, 0 _0802E408: .4byte gLinkEntity _0802E40C: - ldr r0, _0802E42C @ =gUnk_030010A0 + ldr r0, _0802E42C @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -2623,7 +2623,7 @@ _0802E422: _0802E428: pop {r4, r5, r6, pc} .align 2, 0 -_0802E42C: .4byte gUnk_030010A0 +_0802E42C: .4byte gScreenTransition thumb_func_start sub_0802E430 sub_0802E430: @ 0x0802E430 diff --git a/asm/guardWithSpear.s b/asm/guardWithSpear.s index 745374ba..0c8417d3 100644 --- a/asm/guardWithSpear.s +++ b/asm/guardWithSpear.s @@ -227,7 +227,7 @@ _080641E6: lsls r0, r0, #1 cmp r1, r0 ble _08064222 - ldr r0, _080642B4 @ =gUnk_030010A0 + ldr r0, _080642B4 @ =gScreenTransition ldr r0, [r0] movs r1, #6 bl __modsi3 @@ -304,7 +304,7 @@ _080642AC: pop {r4, r5, r6, pc} .align 2, 0 _080642B0: .4byte gLinkEntity -_080642B4: .4byte gUnk_030010A0 +_080642B4: .4byte gScreenTransition thumb_func_start sub_080642B8 sub_080642B8: @ 0x080642B8 @@ -372,7 +372,7 @@ _08064306: lsls r0, r0, #1 cmp r1, r0 ble _08064342 - ldr r0, _080643D4 @ =gUnk_030010A0 + ldr r0, _080643D4 @ =gScreenTransition ldr r0, [r0] movs r1, #6 bl __modsi3 @@ -449,7 +449,7 @@ _080643CC: pop {r4, r5, r6, pc} .align 2, 0 _080643D0: .4byte gLinkEntity -_080643D4: .4byte gUnk_030010A0 +_080643D4: .4byte gScreenTransition thumb_func_start sub_080643D8 sub_080643D8: @ 0x080643D8 diff --git a/asm/gyorgChild.s b/asm/gyorgChild.s index 54351bef..9850cc4c 100644 --- a/asm/gyorgChild.s +++ b/asm/gyorgChild.s @@ -11,7 +11,7 @@ GyorgChild: @ 0x08048640 push {r4, r5, lr} adds r5, r0, #0 - ldr r0, _0804867C @ =gUnk_030010A0 + ldr r0, _0804867C @ =gScreenTransition adds r0, #0x39 ldrb r2, [r0] cmp r2, #0 @@ -38,7 +38,7 @@ _08048664: bl _call_via_r1 pop {r4, r5, pc} .align 2, 0 -_0804867C: .4byte gUnk_030010A0 +_0804867C: .4byte gScreenTransition _08048680: .4byte gUnk_080D1E6C thumb_func_start sub_08048684 diff --git a/asm/initializeLink.s b/asm/initializeLink.s index b219c8dd..192b979f 100644 --- a/asm/initializeLink.s +++ b/asm/initializeLink.s @@ -26,7 +26,7 @@ InitializeLink: @ 0x080524A8 ldr r0, _0805251C @ =gRoomControls str r4, [r0, #0x30] ldr r1, _08052520 @ =gUnk_080FCAC8 - ldr r5, _08052524 @ =gUnk_030010A0 + ldr r5, _08052524 @ =gScreenTransition ldrb r0, [r5, #0xf] adds r0, r0, r1 ldrb r0, [r0] @@ -56,7 +56,7 @@ _08052514: .4byte gLinkState _08052518: .4byte gLinkEntity _0805251C: .4byte gRoomControls _08052520: .4byte gUnk_080FCAC8 -_08052524: .4byte gUnk_030010A0 +_08052524: .4byte gScreenTransition _08052528: .4byte _0805252C _0805252C: @ jump table .4byte _08052558 @ case 0 @@ -81,7 +81,7 @@ _08052564: adds r0, #0x38 movs r1, #0x10 strb r1, [r0] - ldr r1, _08052580 @ =gUnk_030010A0 + ldr r1, _08052580 @ =gScreenTransition ldrb r0, [r1, #0xe] lsls r0, r0, #2 strb r0, [r4, #0x15] @@ -92,21 +92,21 @@ _08052576: b _080525C2 .align 2, 0 _0805257C: .4byte gLinkState -_08052580: .4byte gUnk_030010A0 +_08052580: .4byte gScreenTransition _08052584: ldr r1, _08052598 @ =gLinkState adds r2, r1, #0 adds r2, #0x38 movs r0, #1 strb r0, [r2] - ldr r2, _0805259C @ =gUnk_030010A0 + ldr r2, _0805259C @ =gScreenTransition ldrb r0, [r2, #0xf] adds r1, #0x39 strb r0, [r1] b _080525C2 .align 2, 0 _08052598: .4byte gLinkState -_0805259C: .4byte gUnk_030010A0 +_0805259C: .4byte gScreenTransition _080525A0: ldr r0, _080525A8 @ =gLinkState adds r0, #0x38 @@ -128,7 +128,7 @@ _080525B8: _080525BE: strb r1, [r0] _080525C0: - ldr r2, _08052618 @ =gUnk_030010A0 + ldr r2, _08052618 @ =gScreenTransition _080525C2: movs r0, #1 strb r0, [r4, #8] @@ -170,5 +170,5 @@ _080525C2: pop {r4, r5, r6, pc} .align 2, 0 _08052614: .4byte gLinkState -_08052618: .4byte gUnk_030010A0 +_08052618: .4byte gScreenTransition _0805261C: .4byte gUnk_02002A40 diff --git a/asm/itemOnGround.s b/asm/itemOnGround.s index 835a13ca..aaf987cc 100644 --- a/asm/itemOnGround.s +++ b/asm/itemOnGround.s @@ -216,7 +216,7 @@ _08080AFA: adds r0, r5, #0 adds r1, r6, #0 bl sub_080002A8 - ldr r1, _08080B48 @ =gUnk_030010A0 + ldr r1, _08080B48 @ =gScreenTransition strh r0, [r1, #0xa] cmp r4, #0x3f beq _08080B50 @@ -228,7 +228,7 @@ _08080AFA: blo _08080B5C b _08080B50 .align 2, 0 -_08080B48: .4byte gUnk_030010A0 +_08080B48: .4byte gScreenTransition _08080B4C: cmp r4, #0xf1 bne _08080B5C @@ -538,7 +538,7 @@ _08080DB4: bl ResolveEntityOnTop b _08080E00 _08080DEE: - ldr r0, _08080E04 @ =gUnk_030010A0 + ldr r0, _08080E04 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -549,7 +549,7 @@ _08080DEE: _08080E00: pop {r4, r5, pc} .align 2, 0 -_08080E04: .4byte gUnk_030010A0 +_08080E04: .4byte gScreenTransition thumb_func_start ItemOnGround ItemOnGround: @ 0x08080E08 diff --git a/asm/lilypadLarge.s b/asm/lilypadLarge.s index 86828bd3..0657df02 100644 --- a/asm/lilypadLarge.s +++ b/asm/lilypadLarge.s @@ -417,7 +417,7 @@ _080857F6: _08085806: str r1, [r7, #0x6c] _08085808: - ldr r0, _080858B0 @ =gUnk_030010A0 + ldr r0, _080858B0 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -495,7 +495,7 @@ _08085884: .align 2, 0 _080858A8: .4byte gSineTable _080858AC: .4byte 0xFFFF0000 -_080858B0: .4byte gUnk_030010A0 +_080858B0: .4byte gScreenTransition _080858B4: .4byte 0x00000FFF _080858B8: movs r0, #0 @@ -679,7 +679,7 @@ _080859E6: bl sub_08085D60 b _08085A0A _080859F4: - ldr r0, _08085A18 @ =gUnk_030010A0 + ldr r0, _08085A18 @ =gScreenTransition ldr r0, [r0] movs r1, #0x1f ands r0, r1 @@ -696,7 +696,7 @@ _08085A0A: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 -_08085A18: .4byte gUnk_030010A0 +_08085A18: .4byte gScreenTransition thumb_func_start sub_08085A1C sub_08085A1C: @ 0x08085A1C diff --git a/asm/manager1.s b/asm/manager1.s index 435e67ad..c9530794 100644 --- a/asm/manager1.s +++ b/asm/manager1.s @@ -334,7 +334,7 @@ sub_080573AC: @ 0x080573AC adds r0, r0, r2 strh r0, [r5, #0x30] ldr r2, _08057444 @ =gSineTable - ldr r4, _08057448 @ =gUnk_030010A0 + ldr r4, _08057448 @ =gScreenTransition ldr r1, [r4] ldrb r0, [r4] adds r0, #0x40 @@ -378,7 +378,7 @@ _08057438: .4byte 0xFFFFE000 _0805743C: .4byte 0xFFFFF000 _08057440: .4byte gScreen _08057444: .4byte gSineTable -_08057448: .4byte gUnk_030010A0 +_08057448: .4byte gScreenTransition _0805744C: .4byte gUnk_08107C30 thumb_func_start sub_08057450 @@ -417,7 +417,7 @@ _0805748A: adds r0, r3, #0 adds r0, #0x22 ldrb r0, [r0] - ldr r5, _08057510 @ =gUnk_030010A0 + ldr r5, _08057510 @ =gScreenTransition cmp r0, #0 bne _080574BE ldr r0, [r5] @@ -480,6 +480,6 @@ _08057502: _08057504: .4byte gScreen _08057508: .4byte gRoomControls _0805750C: .4byte gUnk_02001A40 -_08057510: .4byte gUnk_030010A0 +_08057510: .4byte gScreenTransition _08057514: .4byte gUnk_08107C30 _08057518: .4byte gUnk_085B4180 diff --git a/asm/manager10.s b/asm/manager10.s index 501c21e7..2a3fed1d 100644 --- a/asm/manager10.s +++ b/asm/manager10.s @@ -192,7 +192,7 @@ _080596DC: .4byte gUnk_085A7320 sub_080596E0: @ 0x080596E0 push {r4, r5, r6, lr} adds r4, r0, #0 - ldr r0, _08059730 @ =gUnk_030010A0 + ldr r0, _08059730 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -230,7 +230,7 @@ _080596FC: str r1, [r0] b _08059764 .align 2, 0 -_08059730: .4byte gUnk_030010A0 +_08059730: .4byte gScreenTransition _08059734: .4byte gScreen _08059738: .4byte gUnk_08108390 _0805973C: .4byte gUnk_0200B650 diff --git a/asm/manager1A.s b/asm/manager1A.s index 7163e018..fad93017 100644 --- a/asm/manager1A.s +++ b/asm/manager1A.s @@ -251,7 +251,7 @@ _0805B20C: thumb_func_start sub_0805B210 sub_0805B210: @ 0x0805B210 push {r4, r5, lr} - ldr r2, _0805B248 @ =gUnk_030010A0 + ldr r2, _0805B248 @ =gScreenTransition movs r1, #1 strb r1, [r2, #8] strb r1, [r2, #9] @@ -279,7 +279,7 @@ sub_0805B210: @ 0x0805B210 movs r0, #6 b _0805B256 .align 2, 0 -_0805B248: .4byte gUnk_030010A0 +_0805B248: .4byte gScreenTransition _0805B24C: .4byte gUnk_08108764 _0805B250: .4byte gLinkState _0805B254: diff --git a/asm/manager22.s b/asm/manager22.s index 8cd27864..8f0bdb43 100644 --- a/asm/manager22.s +++ b/asm/manager22.s @@ -130,7 +130,7 @@ _0805B9EC: .4byte 0x0000DFFF _0805B9F0: .4byte gLinkState _0805B9F4: .4byte gArea _0805B9F8: - ldr r0, _0805BA24 @ =gUnk_030010A0 + ldr r0, _0805BA24 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -151,7 +151,7 @@ _0805B9F8: bl sub_0801E154 b _0805BA42 .align 2, 0 -_0805BA24: .4byte gUnk_030010A0 +_0805BA24: .4byte gScreenTransition _0805BA28: .4byte gSineTable _0805BA2C: movs r0, #0 diff --git a/asm/manager32.s b/asm/manager32.s index 1737fe7a..4faba7eb 100644 --- a/asm/manager32.s +++ b/asm/manager32.s @@ -17,7 +17,7 @@ sub_0805D7A4: @ 0x0805D7A4 ldr r1, [r0] adds r0, r4, #0 bl _call_via_r1 - ldr r0, _0805D7D8 @ =gUnk_030010A0 + ldr r0, _0805D7D8 @ =gScreenTransition ldr r0, [r0] lsls r0, r0, #4 str r0, [r4, #0x24] @@ -30,7 +30,7 @@ sub_0805D7A4: @ 0x0805D7A4 pop {r4, pc} .align 2, 0 _0805D7D4: .4byte gUnk_08108D7C -_0805D7D8: .4byte gUnk_030010A0 +_0805D7D8: .4byte gScreenTransition thumb_func_start sub_0805D7DC sub_0805D7DC: @ 0x0805D7DC diff --git a/asm/manager34.s b/asm/manager34.s index 5ccd5177..91446d18 100644 --- a/asm/manager34.s +++ b/asm/manager34.s @@ -27,7 +27,7 @@ _0805DBB0: .4byte gUnk_08108D8C sub_0805DBB4: @ 0x0805DBB4 movs r1, #1 strb r1, [r0, #0xc] - ldr r1, _0805DBC8 @ =gUnk_030010A0 + ldr r1, _0805DBC8 @ =gScreenTransition adds r1, #0x3d ldrb r2, [r1] lsls r1, r2, #4 @@ -36,7 +36,7 @@ sub_0805DBB4: @ 0x0805DBB4 strh r1, [r0, #0x20] bx lr .align 2, 0 -_0805DBC8: .4byte gUnk_030010A0 +_0805DBC8: .4byte gScreenTransition thumb_func_start sub_0805DBCC sub_0805DBCC: @ 0x0805DBCC diff --git a/asm/manager37.s b/asm/manager37.s index f9dca8f3..5ae4d78f 100644 --- a/asm/manager37.s +++ b/asm/manager37.s @@ -45,7 +45,7 @@ _0805DE7A: movs r1, #0 movs r0, #1 strb r0, [r4, #0xc] - ldr r2, _0805DEAC @ =gUnk_030010A0 + ldr r2, _0805DEAC @ =gScreenTransition adds r0, r2, #0 adds r0, #0x38 strb r1, [r0] @@ -67,7 +67,7 @@ _0805DE7A: str r1, [r0] pop {r4, pc} .align 2, 0 -_0805DEAC: .4byte gUnk_030010A0 +_0805DEAC: .4byte gScreenTransition _0805DEB0: .4byte gUnk_02002A40 _0805DEB4: .4byte 0x00001194 @@ -266,7 +266,7 @@ sub_0805E000: @ 0x0805E000 strb r5, [r0] adds r0, r4, #0 bl UpdateSpriteForCollisionLayer - ldr r0, _0805E068 @ =gUnk_030010A0 + ldr r0, _0805E068 @ =gScreenTransition adds r0, #0x38 ldrb r1, [r0] adds r0, r5, #0 @@ -293,7 +293,7 @@ _0805E062: pop {r4, r5, r6, pc} .align 2, 0 _0805E064: .4byte gRoomControls -_0805E068: .4byte gUnk_030010A0 +_0805E068: .4byte gScreenTransition _0805E06C: .4byte gArea _0805E070: .4byte 0x00000864 _0805E074: .4byte 0x80010000 diff --git a/asm/manager4.s b/asm/manager4.s index 0462c59c..f579829c 100644 --- a/asm/manager4.s +++ b/asm/manager4.s @@ -249,7 +249,7 @@ sub_08057A18: @ 0x08057A18 ldr r3, _08057A98 @ =gRoomControls ldrb r0, [r3, #4] strb r0, [r6, #9] - ldr r1, _08057A9C @ =gUnk_030010A0 + ldr r1, _08057A9C @ =gScreenTransition ldrb r0, [r5, #4] strb r0, [r1, #0xc] ldrb r0, [r5, #5] @@ -303,7 +303,7 @@ _08057A86: .align 2, 0 _08057A94: .4byte gUnk_03004030 _08057A98: .4byte gRoomControls -_08057A9C: .4byte gUnk_030010A0 +_08057A9C: .4byte gScreenTransition _08057AA0: .4byte gLinkEntity _08057AA4: .4byte gUnk_02034480 diff --git a/asm/managerC.s b/asm/managerC.s index bb3acdb3..80f37976 100644 --- a/asm/managerC.s +++ b/asm/managerC.s @@ -70,7 +70,7 @@ sub_080588CC: @ 0x080588CC bl sub_08058CFC adds r0, r4, #0 bl sub_08058A04 - ldr r0, _080588E8 @ =gUnk_030010A0 + ldr r0, _080588E8 @ =gScreenTransition ldrb r0, [r0, #8] cmp r0, #0 beq _080588EC @@ -78,7 +78,7 @@ sub_080588CC: @ 0x080588CC strb r0, [r4, #0xc] b _080588F2 .align 2, 0 -_080588E8: .4byte gUnk_030010A0 +_080588E8: .4byte gScreenTransition _080588EC: adds r0, r4, #0 bl sub_080588F8 @@ -413,7 +413,7 @@ _08058B58: .4byte gRoomControls thumb_func_start sub_08058B5C sub_08058B5C: @ 0x08058B5C push {r4, r5, lr} - ldr r3, _08058BB4 @ =gUnk_030010A0 + ldr r3, _08058BB4 @ =gScreenTransition movs r0, #0 movs r4, #1 strb r4, [r3, #8] @@ -455,7 +455,7 @@ sub_08058B5C: @ 0x08058B5C bl PlaySFX pop {r4, r5, pc} .align 2, 0 -_08058BB4: .4byte gUnk_030010A0 +_08058BB4: .4byte gScreenTransition _08058BB8: .4byte gRoomControls _08058BBC: .4byte gUnk_081082E8 _08058BC0: .4byte gUnk_02002A40 diff --git a/asm/mazaalBracelet.s b/asm/mazaalBracelet.s index 04664b4f..e5d95297 100644 --- a/asm/mazaalBracelet.s +++ b/asm/mazaalBracelet.s @@ -233,7 +233,7 @@ _0803A2CC: adds r1, r4, #0 bl PositionRelative _0803A310: - ldr r0, _0803A350 @ =gUnk_030010A0 + ldr r0, _0803A350 @ =gScreenTransition adds r0, #0x38 ldrb r0, [r0] cmp r0, #0 @@ -263,7 +263,7 @@ _0803A310: b _0803A360 .align 2, 0 _0803A34C: .4byte 0xFFF00000 -_0803A350: .4byte gUnk_030010A0 +_0803A350: .4byte gScreenTransition _0803A354: movs r0, #1 strb r0, [r4, #0xc] @@ -3166,7 +3166,7 @@ _0803B90C: .4byte gUnk_080CFD20 sub_0803B910: @ 0x0803B910 push {r4, lr} adds r4, r0, #0 - ldr r0, _0803B940 @ =gUnk_030010A0 + ldr r0, _0803B940 @ =gScreenTransition adds r0, #0x38 ldrb r0, [r0] cmp r0, #0 @@ -3188,7 +3188,7 @@ sub_0803B910: @ 0x0803B910 bl sub_0803BA8C b _0803B950 .align 2, 0 -_0803B940: .4byte gUnk_030010A0 +_0803B940: .4byte gScreenTransition _0803B944: movs r0, #1 strb r0, [r4, #0xc] diff --git a/asm/mazaalHead.s b/asm/mazaalHead.s index 03b77b40..ea96d43f 100644 --- a/asm/mazaalHead.s +++ b/asm/mazaalHead.s @@ -74,7 +74,7 @@ sub_08033F3C: @ 0x08033F3C ldrb r0, [r0] cmp r0, #0x42 bhi _08033FFA - ldr r0, _08033F68 @ =gUnk_030010A0 + ldr r0, _08033F68 @ =gScreenTransition adds r0, #0x38 ldrb r0, [r0] cmp r0, #0 @@ -88,7 +88,7 @@ sub_08033F3C: @ 0x08033F3C b _08033F70 .align 2, 0 _08033F64: .4byte gUnk_03003DBC -_08033F68: .4byte gUnk_030010A0 +_08033F68: .4byte gScreenTransition _08033F6C: movs r0, #1 strb r0, [r4, #0xc] @@ -122,7 +122,7 @@ _08033F70: movs r2, #0 bl CreateObject str r4, [r0, #0x50] - ldr r0, _08033FD0 @ =gUnk_030010A0 + ldr r0, _08033FD0 @ =gScreenTransition adds r0, #0x39 ldrb r1, [r0] cmp r1, #0 @@ -138,7 +138,7 @@ _08033F70: strb r0, [r4, #0x10] b _08033FFA .align 2, 0 -_08033FD0: .4byte gUnk_030010A0 +_08033FD0: .4byte gScreenTransition _08033FD4: movs r0, #0x44 movs r1, #0 @@ -732,7 +732,7 @@ sub_0803443C: @ 0x0803443C adds r1, #0x7d movs r0, #0 strb r0, [r1] - ldr r0, _0803445C @ =gUnk_030010A0 + ldr r0, _0803445C @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0x1e @@ -741,7 +741,7 @@ sub_0803443C: @ 0x0803443C bl sub_080344BC b _08034472 .align 2, 0 -_0803445C: .4byte gUnk_030010A0 +_0803445C: .4byte gScreenTransition _08034460: cmp r0, #0x3c bhi _0803446C @@ -1831,7 +1831,7 @@ sub_08034C00: @ 0x08034C00 bl CheckPlayerInRegion cmp r0, #0 beq _08034C5A - ldr r0, _08034C4C @ =gUnk_030010A0 + ldr r0, _08034C4C @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0x3c @@ -1842,7 +1842,7 @@ sub_08034C00: @ 0x08034C00 .align 2, 0 _08034C44: .4byte gLinkState _08034C48: .4byte gRoomControls -_08034C4C: .4byte gUnk_030010A0 +_08034C4C: .4byte gScreenTransition _08034C50: .4byte gUnk_080CED88 _08034C54: ldr r0, _08034C5C @ =gUnk_080CED9C diff --git a/asm/mazaalMacro.s b/asm/mazaalMacro.s index d294485a..5d4ff187 100644 --- a/asm/mazaalMacro.s +++ b/asm/mazaalMacro.s @@ -193,7 +193,7 @@ _08034DC4: sub_08034DC8: @ 0x08034DC8 push {r4, r5, lr} adds r4, r0, #0 - ldr r0, _08034E10 @ =gUnk_030010A0 + ldr r0, _08034E10 @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0 @@ -226,7 +226,7 @@ sub_08034DC8: @ 0x08034DC8 _08034E0E: pop {r4, r5, pc} .align 2, 0 -_08034E10: .4byte gUnk_030010A0 +_08034E10: .4byte gScreenTransition _08034E14: .4byte gRoomControls thumb_func_start sub_08034E18 @@ -290,7 +290,7 @@ sub_08034E68: @ 0x08034E68 adds r0, r4, #0 bl sub_08035120 _08034E8A: - ldr r0, _08034EB0 @ =gUnk_030010A0 + ldr r0, _08034EB0 @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0 @@ -308,7 +308,7 @@ _08034E8A: str r0, [r1] b _08034EBC .align 2, 0 -_08034EB0: .4byte gUnk_030010A0 +_08034EB0: .4byte gScreenTransition _08034EB4: .4byte gUnk_08012E20 _08034EB8: bl DeleteThisEntity @@ -411,7 +411,7 @@ _08034F6C: .4byte gUnk_0813ABA8 sub_08034F70: @ 0x08034F70 push {lr} adds r2, r0, #0 - ldr r0, _08034F8C @ =gUnk_030010A0 + ldr r0, _08034F8C @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] adds r1, r2, #0 @@ -424,7 +424,7 @@ sub_08034F70: @ 0x08034F70 movs r0, #0 b _08034F9A .align 2, 0 -_08034F8C: .4byte gUnk_030010A0 +_08034F8C: .4byte gScreenTransition _08034F90: cmp r0, #0x1e bls _08034F98 @@ -496,12 +496,12 @@ _08035008: adds r5, r0, #0 cmp r1, #0x3b bhi _08035040 - ldr r0, _0803501C @ =gUnk_030010A0 + ldr r0, _0803501C @ =gScreenTransition adds r0, #0x39 movs r1, #0x3c b _08035032 .align 2, 0 -_0803501C: .4byte gUnk_030010A0 +_0803501C: .4byte gScreenTransition _08035020: adds r0, r4, #0 adds r0, #0x45 @@ -509,7 +509,7 @@ _08035020: adds r5, r0, #0 cmp r1, #0x1d bhi _08035040 - ldr r0, _0803503C @ =gUnk_030010A0 + ldr r0, _0803503C @ =gScreenTransition adds r0, #0x39 movs r1, #0x1e _08035032: @@ -518,16 +518,16 @@ _08035032: bl sub_08035050 b _08035048 .align 2, 0 -_0803503C: .4byte gUnk_030010A0 +_0803503C: .4byte gScreenTransition _08035040: - ldr r0, _0803504C @ =gUnk_030010A0 + ldr r0, _0803504C @ =gScreenTransition ldrb r1, [r5] adds r0, #0x39 strb r1, [r0] _08035048: pop {r4, r5, r6, pc} .align 2, 0 -_0803504C: .4byte gUnk_030010A0 +_0803504C: .4byte gScreenTransition thumb_func_start sub_08035050 sub_08035050: @ 0x08035050 @@ -585,7 +585,7 @@ _080350A6: lsrs r0, r0, #4 cmp r6, r0 beq _080350A6 - ldr r2, _080350DC @ =gUnk_030010A0 + ldr r2, _080350DC @ =gScreenTransition adds r2, #0x38 ldrb r1, [r2] movs r0, #0xf @@ -603,7 +603,7 @@ _080350D0: b _080350F2 .align 2, 0 _080350D8: .4byte gUnk_030010D8 -_080350DC: .4byte gUnk_030010A0 +_080350DC: .4byte gScreenTransition _080350E0: .4byte gUnk_080CEECC _080350E4: .4byte gRoomControls _080350E8: diff --git a/asm/moldworm.s b/asm/moldworm.s index 3db9e88b..3b33afac 100644 --- a/asm/moldworm.s +++ b/asm/moldworm.s @@ -549,7 +549,7 @@ _08023440: subs r0, #1 strb r0, [r1] _08023460: - ldr r0, _080234A0 @ =gUnk_030010A0 + ldr r0, _080234A0 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -579,7 +579,7 @@ _08023460: _0802349C: pop {r4, r5, r6, pc} .align 2, 0 -_080234A0: .4byte gUnk_030010A0 +_080234A0: .4byte gScreenTransition thumb_func_start sub_080234A4 sub_080234A4: @ 0x080234A4 diff --git a/asm/non_matching/bigGoron/sub_0806CF30.inc b/asm/non_matching/bigGoron/sub_0806CF30.inc index fa2f17e7..49f33c3c 100644 --- a/asm/non_matching/bigGoron/sub_0806CF30.inc +++ b/asm/non_matching/bigGoron/sub_0806CF30.inc @@ -40,7 +40,7 @@ _0806CF6C: bgt _0806D000 cmp r0, #0 blt _0806D000 - ldr r0, _0806CFCC @ =gUnk_030010A0 + ldr r0, _0806CFCC @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -83,7 +83,7 @@ _0806CFA8: strh r0, [r5, #0x2e] b _0806D000 .align 2, 0 -_0806CFCC: .4byte gUnk_030010A0 +_0806CFCC: .4byte gScreenTransition _0806CFD0: .4byte gLinkEntity _0806CFD4: ldrb r0, [r5, #0xe] diff --git a/asm/non_matching/minecart/sub_080919AC.inc b/asm/non_matching/minecart/sub_080919AC.inc index e7c12d24..a3dfeadd 100644 --- a/asm/non_matching/minecart/sub_080919AC.inc +++ b/asm/non_matching/minecart/sub_080919AC.inc @@ -98,7 +98,7 @@ _08091A22: beq _08091A68 b _08091C04 _08091A68: - ldr r0, _08091AD8 @ =gUnk_030010A0 + ldr r0, _08091AD8 @ =gScreenTransition ldr r0, [r0] ands r0, r7 cmp r0, #0 @@ -152,7 +152,7 @@ _08091A92: strb r0, [r5, #0x14] b _08091BD8 .align 2, 0 -_08091AD8: .4byte gUnk_030010A0 +_08091AD8: .4byte gScreenTransition _08091ADC: .4byte gUnk_081223C8 _08091AE0: .4byte gUnk_081223D8 _08091AE4: diff --git a/asm/non_matching/sub_0804C258.inc b/asm/non_matching/sub_0804C258.inc index 74581376..24790e4a 100644 --- a/asm/non_matching/sub_0804C258.inc +++ b/asm/non_matching/sub_0804C258.inc @@ -10,7 +10,7 @@ movs r0, #0xf ands r2, r0 strb r2, [r3, #0xd] - ldr r0, _0804C28C @ =gUnk_030010A0 + ldr r0, _0804C28C @ =gScreenTransition ldrb r0, [r0, #0xe] cmp r0, #4 bne _0804C284 @@ -24,5 +24,5 @@ _0804C284: pop {pc} .align 2, 0 _0804C288: .4byte gArea -_0804C28C: .4byte gUnk_030010A0 +_0804C28C: .4byte gScreenTransition .syntax divided \ No newline at end of file diff --git a/asm/non_matching/sub_0804DE00.inc b/asm/non_matching/sub_0804DE00.inc index c3227533..bf30a2b1 100644 --- a/asm/non_matching/sub_0804DE00.inc +++ b/asm/non_matching/sub_0804DE00.inc @@ -60,7 +60,7 @@ _0804DE5C: strh r5, [r0, #4] ldr r0, [r4] strh r6, [r0, #6] - ldr r1, _0804DEC0 @ =gUnk_030010A0 + ldr r1, _0804DEC0 @ =gScreenTransition ldr r0, [r4] ldrh r0, [r0] lsrs r0, r0, #1 @@ -80,7 +80,7 @@ _0804DE5C: _0804DEB4: .4byte gArea _0804DEB8: .4byte 0x0000085C _0804DEBC: .4byte gRoomControls -_0804DEC0: .4byte gUnk_030010A0 +_0804DEC0: .4byte gScreenTransition _0804DEC4: movs r0, #6 movs r1, #0x10 diff --git a/asm/non_matching/sub_08054524.inc b/asm/non_matching/sub_08054524.inc index 7246268a..fd079ac9 100644 --- a/asm/non_matching/sub_08054524.inc +++ b/asm/non_matching/sub_08054524.inc @@ -4,7 +4,7 @@ ldrb r1, [r0, #1] cmp r1, #0 bne _08054534 - ldr r0, _08054554 @ =gUnk_030010A0 + ldr r0, _08054554 @ =gScreenTransition adds r0, #0x2e ldrb r1, [r0] _08054534: @@ -24,7 +24,7 @@ _0805453A: pop {pc} .align 2, 0 _08054550: .4byte gArea -_08054554: .4byte gUnk_030010A0 +_08054554: .4byte gScreenTransition _08054558: .4byte gUnk_080FE1C6 _0805455C: .4byte gUnk_080015BC _08054560: .4byte gUnk_02034398 diff --git a/asm/npc5.s b/asm/npc5.s index 770ffb42..36baa15a 100644 --- a/asm/npc5.s +++ b/asm/npc5.s @@ -2315,7 +2315,7 @@ sub_08061B58: @ 0x08061B58 movs r1, #2 bl InitAnimationForceUpdate _08061B6E: - ldr r0, _08061B88 @ =gUnk_030010A0 + ldr r0, _08061B88 @ =gScreenTransition adds r0, #0x2c ldrb r0, [r0] cmp r0, #2 @@ -2327,4 +2327,4 @@ _08061B7E: bl sub_0806FD3C pop {r4, pc} .align 2, 0 -_08061B88: .4byte gUnk_030010A0 +_08061B88: .4byte gScreenTransition diff --git a/asm/object17.s b/asm/object17.s index 5751e135..93768f63 100644 --- a/asm/object17.s +++ b/asm/object17.s @@ -84,7 +84,7 @@ sub_08086234: @ 0x08086234 ldrb r0, [r4, #0xa] cmp r0, #0 beq _08086258 - ldr r0, _08086254 @ =gUnk_030010A0 + ldr r0, _08086254 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -94,7 +94,7 @@ sub_08086234: @ 0x08086234 bl GetNextFrame b _0808625E .align 2, 0 -_08086254: .4byte gUnk_030010A0 +_08086254: .4byte gScreenTransition _08086258: adds r0, r4, #0 bl GetNextFrame diff --git a/asm/object3E.s b/asm/object3E.s index fbc0c6ff..16fea14e 100644 --- a/asm/object3E.s +++ b/asm/object3E.s @@ -171,7 +171,7 @@ _0808D1AE: _0808D1F4: .4byte 0x00004069 _0808D1F8: .4byte gRoomControls _0808D1FC: - ldr r0, _0808D274 @ =gUnk_030010A0 + ldr r0, _0808D274 @ =gScreenTransition ldr r3, [r0] movs r0, #3 ands r3, r0 @@ -233,7 +233,7 @@ _0808D24E: _0808D272: pop {r4, r5, r6, pc} .align 2, 0 -_0808D274: .4byte gUnk_030010A0 +_0808D274: .4byte gScreenTransition _0808D278: .4byte gScreen _0808D27C: .4byte gUnk_08121704 @@ -339,7 +339,7 @@ _0808D31C: ldrsh r0, [r4, r1] cmp r5, r0 beq _0808D350 - ldr r0, _0808D358 @ =gUnk_030010A0 + ldr r0, _0808D358 @ =gScreenTransition ldr r0, [r0] movs r1, #8 ands r0, r1 @@ -351,7 +351,7 @@ _0808D350: pop {r4, r5, pc} .align 2, 0 _0808D354: .4byte gRoomControls -_0808D358: .4byte gUnk_030010A0 +_0808D358: .4byte gScreenTransition _0808D35C: .4byte 0x0000010F thumb_func_start sub_0808D360 @@ -585,7 +585,7 @@ _0808D514: .4byte 0x00004069 sub_0808D518: @ 0x0808D518 push {r4, r5, r6, lr} adds r5, r0, #0 - ldr r0, _0808D58C @ =gUnk_030010A0 + ldr r0, _0808D58C @ =gScreenTransition ldr r2, [r0] movs r0, #3 ands r2, r0 @@ -642,7 +642,7 @@ sub_0808D518: @ 0x0808D518 _0808D58A: pop {r4, r5, r6, pc} .align 2, 0 -_0808D58C: .4byte gUnk_030010A0 +_0808D58C: .4byte gScreenTransition _0808D590: .4byte gScreen _0808D594: .4byte 0x00004069 _0808D598: .4byte gRoomControls diff --git a/asm/object43.s b/asm/object43.s index 4e66c681..57064728 100644 --- a/asm/object43.s +++ b/asm/object43.s @@ -240,7 +240,7 @@ _0808E084: ldrh r0, [r5] cmp r0, #0 beq _0808E0BC - ldr r0, _0808E0B8 @ =gUnk_030010A0 + ldr r0, _0808E0B8 @ =gScreenTransition ldr r1, [r0] movs r0, #0x1f ands r1, r0 @@ -260,7 +260,7 @@ _0808E084: strb r1, [r0] b _0808E0E4 .align 2, 0 -_0808E0B8: .4byte gUnk_030010A0 +_0808E0B8: .4byte gScreenTransition _0808E0BC: ldr r0, _0808E140 @ =0x00000115 bl sub_08004488 @@ -446,7 +446,7 @@ sub_0808E208: @ 0x0808E208 ldrb r0, [r0, #0x1b] cmp r0, #0 beq _0808E248 - ldr r0, _0808E244 @ =gUnk_030010A0 + ldr r0, _0808E244 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -464,7 +464,7 @@ sub_0808E208: @ 0x0808E208 b _0808E24C .align 2, 0 _0808E240: .4byte gLinkState -_0808E244: .4byte gUnk_030010A0 +_0808E244: .4byte gScreenTransition _0808E248: bl DeleteThisEntity _0808E24C: diff --git a/asm/object49.s b/asm/object49.s index ec40a8a9..968070dd 100644 --- a/asm/object49.s +++ b/asm/object49.s @@ -173,7 +173,7 @@ sub_0808F498: @ 0x0808F498 bl sub_0806F3E4 cmp r0, #0 beq _0808F4C2 - ldr r0, _0808F4E4 @ =gUnk_030010A0 + ldr r0, _0808F4E4 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -200,7 +200,7 @@ _0808F4D4: bl DeleteThisEntity b _0808F550 .align 2, 0 -_0808F4E4: .4byte gUnk_030010A0 +_0808F4E4: .4byte gScreenTransition _0808F4E8: .4byte gLinkState _0808F4EC: movs r0, #1 diff --git a/asm/object6A.s b/asm/object6A.s index 7d20335b..92e359c4 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -545,7 +545,7 @@ sub_08094E30: @ 0x08094E30 ldrb r0, [r4, #0xb] cmp r0, #0 bne _08094E88 - ldr r0, _08094E80 @ =gUnk_030010A0 + ldr r0, _08094E80 @ =gScreenTransition ldr r0, [r0] movs r1, #0x1f ands r0, r1 @@ -577,7 +577,7 @@ _08094E5A: strh r1, [r5, #0x32] b _08094F94 .align 2, 0 -_08094E80: .4byte gUnk_030010A0 +_08094E80: .4byte gScreenTransition _08094E84: .4byte gRoomControls _08094E88: cmp r0, #1 @@ -1654,7 +1654,7 @@ _080956E2: adds r0, r5, #0 bl GetNextFrame ldrb r0, [r5, #0xb] - ldr r1, _08095724 @ =gUnk_030010A0 + ldr r1, _08095724 @ =gScreenTransition ldr r1, [r1] adds r0, r0, r1 movs r1, #0xf @@ -1682,7 +1682,7 @@ _080956FE: bl DeleteThisEntity b _0809572C .align 2, 0 -_08095724: .4byte gUnk_030010A0 +_08095724: .4byte gScreenTransition _08095728: bl DeleteThisEntity _0809572C: diff --git a/asm/object89.s b/asm/object89.s index 92d513a3..0e67239c 100644 --- a/asm/object89.s +++ b/asm/object89.s @@ -44,7 +44,7 @@ _0809AB22: adds r1, r4, #0 bl CopyPosition str r4, [r5, #0x54] - ldr r2, _0809AB68 @ =gUnk_030010A0 + ldr r2, _0809AB68 @ =gScreenTransition adds r0, r2, #0 adds r0, #0x38 ldrb r1, [r0] @@ -67,7 +67,7 @@ _0809AB52: bl sub_080809D4 b _0809AB9C .align 2, 0 -_0809AB68: .4byte gUnk_030010A0 +_0809AB68: .4byte gScreenTransition _0809AB6C: .4byte gRoomControls _0809AB70: movs r0, #1 @@ -253,7 +253,7 @@ sub_0809ACA0: @ 0x0809ACA0 ldr r1, [r2, #0x54] movs r0, #6 strb r0, [r1, #0xd] - ldr r0, _0809ACC8 @ =gUnk_030010A0 + ldr r0, _0809ACC8 @ =gScreenTransition adds r0, #0x38 movs r1, #0xf1 strb r1, [r0] @@ -262,7 +262,7 @@ sub_0809ACA0: @ 0x0809ACA0 _0809ACC4: pop {pc} .align 2, 0 -_0809ACC8: .4byte gUnk_030010A0 +_0809ACC8: .4byte gScreenTransition thumb_func_start sub_0809ACCC sub_0809ACCC: @ 0x0809ACCC diff --git a/asm/object8E.s b/asm/object8E.s index 7457eca6..0ab1f65e 100644 --- a/asm/object8E.s +++ b/asm/object8E.s @@ -90,7 +90,7 @@ _0809B8D8: ldrb r0, [r4, #0xf] cmp r0, #0x1f bhi _0809B914 - ldr r5, _0809B90C @ =gUnk_030010A0 + ldr r5, _0809B90C @ =gScreenTransition ldr r0, [r5] movs r1, #0x1f ands r0, r1 @@ -113,7 +113,7 @@ _0809B8F0: bl sub_0809B97C b _0809B972 .align 2, 0 -_0809B90C: .4byte gUnk_030010A0 +_0809B90C: .4byte gScreenTransition _0809B910: .4byte 0x00000133 _0809B914: movs r0, #2 @@ -273,7 +273,7 @@ _0809BA40: ldrb r0, [r4, #0xf] cmp r0, #0 beq _0809BA7C - ldr r5, _0809BA74 @ =gUnk_030010A0 + ldr r5, _0809BA74 @ =gScreenTransition ldr r0, [r5] movs r1, #0x1f ands r0, r1 @@ -296,7 +296,7 @@ _0809BA58: bl sub_0809B97C b _0809BAC2 .align 2, 0 -_0809BA74: .4byte gUnk_030010A0 +_0809BA74: .4byte gScreenTransition _0809BA78: .4byte 0x00000133 _0809BA7C: movs r0, #2 @@ -436,7 +436,7 @@ _0809BB88: ldrh r0, [r5] cmp r0, #0xdf bhi _0809BBC4 - ldr r4, _0809BBBC @ =gUnk_030010A0 + ldr r4, _0809BBBC @ =gScreenTransition ldr r0, [r4] movs r1, #0x1f ands r0, r1 @@ -456,7 +456,7 @@ _0809BBA6: b _0809BC68 .align 2, 0 _0809BBB8: .4byte gScreen -_0809BBBC: .4byte gUnk_030010A0 +_0809BBBC: .4byte gScreenTransition _0809BBC0: .4byte 0x00000133 _0809BBC4: movs r0, #2 @@ -631,7 +631,7 @@ _0809BD20: ldrb r0, [r4, #0xd] cmp r0, #0 beq _0809BD64 - ldr r6, _0809BD58 @ =gUnk_030010A0 + ldr r6, _0809BD58 @ =gScreenTransition ldr r0, [r6] movs r1, #0x1f ands r0, r1 @@ -656,7 +656,7 @@ _0809BD38: strh r0, [r1] b _0809BDAE .align 2, 0 -_0809BD58: .4byte gUnk_030010A0 +_0809BD58: .4byte gScreenTransition _0809BD5C: .4byte 0x00000133 _0809BD60: .4byte gScreen _0809BD64: @@ -753,7 +753,7 @@ _0809BE0C: lsls r0, r0, #0x18 cmp r0, #0 beq _0809BE34 - ldr r0, _0809BE2C @ =gUnk_030010A0 + ldr r0, _0809BE2C @ =gScreenTransition ldr r0, [r0] movs r1, #0x1f ands r0, r1 @@ -763,7 +763,7 @@ _0809BE0C: bl PlaySFX b _0809BE70 .align 2, 0 -_0809BE2C: .4byte gUnk_030010A0 +_0809BE2C: .4byte gScreenTransition _0809BE30: .4byte 0x00000133 _0809BE34: movs r0, #2 diff --git a/asm/object91.s b/asm/object91.s index bbd0f8a0..e2e8dac9 100644 --- a/asm/object91.s +++ b/asm/object91.s @@ -463,7 +463,7 @@ _0809C74A: ldrb r0, [r5, #0xf] cmp r0, #0 beq _0809C7BC - ldr r0, _0809C7AC @ =gUnk_030010A0 + ldr r0, _0809C7AC @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -502,7 +502,7 @@ _0809C7A0: b _0809C7BC .align 2, 0 _0809C7A8: .4byte gUnk_08123DF8 -_0809C7AC: .4byte gUnk_030010A0 +_0809C7AC: .4byte gScreenTransition _0809C7B0: .4byte 0xFFFFD000 _0809C7B4: ldr r0, [r5, #0x50] @@ -776,7 +776,7 @@ sub_0809C988: @ 0x0809C988 strb r0, [r2, #0xb] b _0809C9DC _0809C9AC: - ldr r0, _0809C9C8 @ =gUnk_030010A0 + ldr r0, _0809C9C8 @ =gScreenTransition ldr r0, [r0] movs r1, #8 ands r0, r1 @@ -791,7 +791,7 @@ _0809C9AC: subs r0, #4 b _0809C9DA .align 2, 0 -_0809C9C8: .4byte gUnk_030010A0 +_0809C9C8: .4byte gScreenTransition _0809C9CC: adds r0, r2, #0 adds r0, #0x84 @@ -810,7 +810,7 @@ _0809C9DC: sub_0809C9E0: @ 0x0809C9E0 push {r4, r5, r6, r7, lr} adds r4, r0, #0 - ldr r0, _0809CA04 @ =gUnk_030010A0 + ldr r0, _0809CA04 @ =gScreenTransition ldr r1, [r0] movs r2, #2 ands r1, r2 @@ -826,7 +826,7 @@ sub_0809C9E0: @ 0x0809C9E0 subs r0, #8 b _0809CA16 .align 2, 0 -_0809CA04: .4byte gUnk_030010A0 +_0809CA04: .4byte gScreenTransition _0809CA08: adds r2, r4, #0 adds r2, #0x84 @@ -971,7 +971,7 @@ sub_0809CAC8: @ 0x0809CAC8 movs r0, #7 strb r0, [r5, #0xd] _0809CB26: - ldr r0, _0809CB44 @ =gUnk_030010A0 + ldr r0, _0809CB44 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -984,7 +984,7 @@ _0809CB38: .align 2, 0 _0809CB3C: .4byte gRoomControls _0809CB40: .4byte gLinkEntity -_0809CB44: .4byte gUnk_030010A0 +_0809CB44: .4byte gScreenTransition _0809CB48: .4byte 0x00000163 thumb_func_start sub_0809CB4C diff --git a/asm/objectA8.s b/asm/objectA8.s index 01fbc139..2cb3b745 100644 --- a/asm/objectA8.s +++ b/asm/objectA8.s @@ -283,7 +283,7 @@ _0809FCAC: ldrb r0, [r4, #0xa] cmp r0, #0 bne _0809FCF8 - ldr r0, _0809FCFC @ =gUnk_030010A0 + ldr r0, _0809FCFC @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -314,7 +314,7 @@ _0809FCE0: _0809FCF8: pop {r4, r5, pc} .align 2, 0 -_0809FCFC: .4byte gUnk_030010A0 +_0809FCFC: .4byte gScreenTransition thumb_func_start sub_0809FD00 sub_0809FD00: @ 0x0809FD00 diff --git a/asm/objectBA.s b/asm/objectBA.s index e85896f3..5be0b70d 100644 --- a/asm/objectBA.s +++ b/asm/objectBA.s @@ -133,7 +133,7 @@ _080A171E: strh r1, [r0] adds r0, #2 strh r1, [r0] - ldr r0, _080A1838 @ =gUnk_030010A0 + ldr r0, _080A1838 @ =gScreenTransition adds r0, #0x39 mov r2, sb strb r2, [r0] @@ -173,7 +173,7 @@ _080A1828: .4byte gUnk_03003DBC _080A182C: .4byte gRoomControls _080A1830: .4byte gScreen _080A1834: .4byte 0x00001E07 -_080A1838: .4byte gUnk_030010A0 +_080A1838: .4byte gScreenTransition _080A183C: .4byte gLinkState _080A1840: .4byte 0x80100000 _080A1844: .4byte gArea @@ -598,7 +598,7 @@ sub_080A1B4C: @ 0x080A1B4C _080A1B80: movs r6, #0 strh r7, [r5] - ldr r0, _080A1BF0 @ =gUnk_030010A0 + ldr r0, _080A1BF0 @ =gScreenTransition adds r0, #0x39 strb r6, [r0] bl sub_08079F8C @@ -650,7 +650,7 @@ _080A1BD0: strh r0, [r2, #0x18] pop {r4, r5, r6, r7, pc} .align 2, 0 -_080A1BF0: .4byte gUnk_030010A0 +_080A1BF0: .4byte gScreenTransition _080A1BF4: .4byte gLinkEntity _080A1BF8: .4byte gLinkState _080A1BFC: .4byte 0xFFFDFFFF diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index b62b5d36..1dd73bfd 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -333,7 +333,7 @@ _0803540E: cmp r4, #0 bne _0803540E _08035438: - ldr r1, _080354AC @ =gUnk_030010A0 + ldr r1, _080354AC @ =gScreenTransition ldr r0, [r1] movs r1, #2 ands r0, r1 @@ -387,7 +387,7 @@ _08035456: bl InitAnimationForceUpdate b _080354DC .align 2, 0 -_080354AC: .4byte gUnk_030010A0 +_080354AC: .4byte gScreenTransition _080354B0: adds r1, r5, #0 adds r1, #0x3f @@ -635,7 +635,7 @@ _08035616: ldrb r0, [r1] cmp r0, #0 bne _080356EC - ldr r0, _080356E8 @ =gUnk_030010A0 + ldr r0, _080356E8 @ =gScreenTransition ldr r0, [r0] movs r1, #0xf ands r0, r1 @@ -677,7 +677,7 @@ _080356B2: b _080356F0 .align 2, 0 _080356E4: .4byte gSineTable -_080356E8: .4byte gUnk_030010A0 +_080356E8: .4byte gScreenTransition _080356EC: subs r0, #1 strb r0, [r1] @@ -1749,7 +1749,7 @@ _08035F16: beq _08035F48 subs r0, #1 strb r0, [r1, #6] - ldr r0, _08035F74 @ =gUnk_030010A0 + ldr r0, _08035F74 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -1781,7 +1781,7 @@ _08035F6C: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 -_08035F74: .4byte gUnk_030010A0 +_08035F74: .4byte gScreenTransition _08035F78: .4byte gUnk_080CF0C4 thumb_func_start sub_08035F7C @@ -2273,7 +2273,7 @@ _08036300: sub_08036304: @ 0x08036304 push {lr} mov ip, r0 - ldr r0, _08036328 @ =gUnk_030010A0 + ldr r0, _08036328 @ =gScreenTransition ldr r0, [r0] movs r1, #2 ands r0, r1 @@ -2289,7 +2289,7 @@ sub_08036304: @ 0x08036304 strh r0, [r1] b _08036350 .align 2, 0 -_08036328: .4byte gUnk_030010A0 +_08036328: .4byte gScreenTransition _0803632C: mov r2, ip adds r2, #0x84 @@ -2483,7 +2483,7 @@ _080364A4: ands r1, r0 str r1, [r2, #0x30] _080364AA: - ldr r0, _080364C8 @ =gUnk_030010A0 + ldr r0, _080364C8 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -2497,7 +2497,7 @@ _080364AA: b _0803657A .align 2, 0 _080364C4: .4byte 0xFFFFF7FF -_080364C8: .4byte gUnk_030010A0 +_080364C8: .4byte gScreenTransition _080364CC: adds r0, r4, #0 adds r0, #0x7c @@ -2726,7 +2726,7 @@ _08036678: movs r0, #1 rsbs r0, r0, #0 bl sub_0805308C - ldr r0, _080366B0 @ =gUnk_030010A0 + ldr r0, _080366B0 @ =gScreenTransition ldr r1, [r0] movs r0, #3 ands r0, r1 @@ -2748,7 +2748,7 @@ _080366A0: _080366AC: pop {r4, r5, pc} .align 2, 0 -_080366B0: .4byte gUnk_030010A0 +_080366B0: .4byte gScreenTransition thumb_func_start sub_080366B4 sub_080366B4: @ 0x080366B4 @@ -2770,7 +2770,7 @@ sub_080366B4: @ 0x080366B4 _080366D4: subs r0, #1 strb r0, [r2] - ldr r0, _08036708 @ =gUnk_030010A0 + ldr r0, _08036708 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -2795,7 +2795,7 @@ _080366D4: _08036706: pop {r4, pc} .align 2, 0 -_08036708: .4byte gUnk_030010A0 +_08036708: .4byte gScreenTransition thumb_func_start sub_0803670C sub_0803670C: @ 0x0803670C @@ -2816,7 +2816,7 @@ sub_0803670C: @ 0x0803670C beq _08036746 subs r0, #1 strb r0, [r1, #6] - ldr r0, _08036760 @ =gUnk_030010A0 + ldr r0, _08036760 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -2839,7 +2839,7 @@ _08036746: pop {r4, pc} .align 2, 0 _0803675C: .4byte gUnk_080CF100 -_08036760: .4byte gUnk_030010A0 +_08036760: .4byte gScreenTransition thumb_func_start sub_08036764 sub_08036764: @ 0x08036764 @@ -2963,7 +2963,7 @@ _0803683A: movs r0, #0 strb r0, [r1] _08036852: - ldr r0, _08036868 @ =gUnk_030010A0 + ldr r0, _08036868 @ =gScreenTransition ldr r0, [r0] movs r1, #0x1f ands r0, r1 @@ -2974,7 +2974,7 @@ _08036852: _08036864: pop {r4, r5, pc} .align 2, 0 -_08036868: .4byte gUnk_030010A0 +_08036868: .4byte gScreenTransition _0803686C: .4byte 0x00000159 thumb_func_start sub_08036870 @@ -3953,7 +3953,7 @@ _08036FA8: sub_08036FAC: @ 0x08036FAC push {lr} adds r2, r0, #0 - ldr r0, _08036FD0 @ =gUnk_030010A0 + ldr r0, _08036FD0 @ =gScreenTransition ldr r0, [r0] ands r0, r1 cmp r0, #0 @@ -3969,7 +3969,7 @@ sub_08036FAC: @ 0x08036FAC bl PlaySFX b _08036FDE .align 2, 0 -_08036FD0: .4byte gUnk_030010A0 +_08036FD0: .4byte gScreenTransition _08036FD4: .4byte 0x00000163 _08036FD8: ldr r0, _08036FE0 @ =0x000001B1 diff --git a/asm/peahat.s b/asm/peahat.s index cb26fd33..35197070 100644 --- a/asm/peahat.s +++ b/asm/peahat.s @@ -469,7 +469,7 @@ _080202B4: adds r0, #4 strh r0, [r4, #0x24] _080202C8: - ldr r0, _080202F0 @ =gUnk_030010A0 + ldr r0, _080202F0 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -487,7 +487,7 @@ _080202E6: bl sub_080AEFE0 b _080202FE .align 2, 0 -_080202F0: .4byte gUnk_030010A0 +_080202F0: .4byte gScreenTransition _080202F4: .4byte gUnk_020000B0 _080202F8: adds r0, r4, #0 diff --git a/asm/picolyteBottles.s b/asm/picolyteBottles.s index ba37bb92..27471fa9 100644 --- a/asm/picolyteBottles.s +++ b/asm/picolyteBottles.s @@ -65,7 +65,7 @@ sub_0806DF00: @ 0x0806DF00 adds r0, #2 movs r1, #0xa strh r1, [r0] - ldr r0, _0806DF58 @ =gUnk_030010A0 + ldr r0, _0806DF58 @ =gScreenTransition strh r1, [r0, #6] adds r0, r4, #0 bl sub_0806E014 @@ -73,7 +73,7 @@ sub_0806DF00: @ 0x0806DF00 bl sub_0807DD50 b _0806DF6E .align 2, 0 -_0806DF58: .4byte gUnk_030010A0 +_0806DF58: .4byte gScreenTransition _0806DF5C: ldr r0, _0806DF70 @ =gUnk_080FD150 str r0, [r4, #0x48] @@ -389,7 +389,7 @@ _0806E1AC: ldr r0, _0806E1D4 @ =0x0000421C bl TextboxNoOverlapFollow _0806E1C0: - ldr r1, _0806E1D8 @ =gUnk_030010A0 + ldr r1, _0806E1D8 @ =gScreenTransition ldrh r0, [r4] strh r0, [r1, #6] ldr r2, _0806E1DC @ =gUnk_02033280 @@ -400,7 +400,7 @@ _0806E1C0: pop {r4, r5, pc} .align 2, 0 _0806E1D4: .4byte 0x0000421C -_0806E1D8: .4byte gUnk_030010A0 +_0806E1D8: .4byte gScreenTransition _0806E1DC: .4byte gUnk_02033280 thumb_func_start sub_0806E1E0 @@ -428,7 +428,7 @@ _0806E208: .4byte gUnk_0813AD4C thumb_func_start sub_0806E20C sub_0806E20C: @ 0x0806E20C push {r4, lr} - ldr r4, _0806E224 @ =gUnk_030010A0 + ldr r4, _0806E224 @ =gScreenTransition ldrh r0, [r4, #6] cmp r0, #0 beq _0806E230 @@ -439,7 +439,7 @@ sub_0806E20C: @ 0x0806E20C str r0, [r1, #0x10] b _0806E236 .align 2, 0 -_0806E224: .4byte gUnk_030010A0 +_0806E224: .4byte gScreenTransition _0806E228: .4byte 0x0000421F _0806E22C: .4byte gTextBox _0806E230: @@ -453,7 +453,7 @@ _0806E238: .4byte 0x00004220 thumb_func_start sub_0806E23C sub_0806E23C: @ 0x0806E23C push {lr} - ldr r1, _0806E24C @ =gUnk_030010A0 + ldr r1, _0806E24C @ =gScreenTransition ldrh r0, [r1, #6] cmp r0, #0 beq _0806E24A @@ -461,7 +461,7 @@ sub_0806E23C: @ 0x0806E23C _0806E24A: pop {pc} .align 2, 0 -_0806E24C: .4byte gUnk_030010A0 +_0806E24C: .4byte gScreenTransition thumb_func_start sub_0806E250 sub_0806E250: @ 0x0806E250 diff --git a/asm/rem.s b/asm/rem.s index c52753d1..8e31e8c7 100644 --- a/asm/rem.s +++ b/asm/rem.s @@ -421,7 +421,7 @@ _0806A6E4: strb r1, [r0] b _0806A75A _0806A724: - ldr r0, _0806A780 @ =gUnk_030010A0 + ldr r0, _0806A780 @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -469,9 +469,9 @@ _0806A75A: strb r1, [r0] b _0806A82A .align 2, 0 -_0806A780: .4byte gUnk_030010A0 +_0806A780: .4byte gScreenTransition _0806A784: - ldr r0, _0806A7C4 @ =gUnk_030010A0 + ldr r0, _0806A7C4 @ =gScreenTransition ldr r0, [r0] lsrs r0, r0, #4 movs r1, #3 @@ -506,7 +506,7 @@ _0806A7BA: strb r0, [r3] b _0806A82A .align 2, 0 -_0806A7C4: .4byte gUnk_030010A0 +_0806A7C4: .4byte gScreenTransition _0806A7C8: adds r2, r4, #0 adds r2, #0x29 @@ -835,7 +835,7 @@ sub_0806AA18: @ 0x0806AA18 .align 2, 0 _0806AA28: .4byte 0x00004408 _0806AA2C: - ldr r0, _0806AA48 @ =gUnk_030010A0 + ldr r0, _0806AA48 @ =gScreenTransition ldr r0, [r0] movs r1, #1 ands r0, r1 @@ -849,7 +849,7 @@ _0806AA3C: bl TextboxNoOverlap pop {pc} .align 2, 0 -_0806AA48: .4byte gUnk_030010A0 +_0806AA48: .4byte gScreenTransition _0806AA4C: .4byte 0x0000440D thumb_func_start sub_0806AA50 diff --git a/asm/sturgeon.s b/asm/sturgeon.s index 34a9e992..e6413097 100644 --- a/asm/sturgeon.s +++ b/asm/sturgeon.s @@ -275,7 +275,7 @@ sub_08064C9C: @ 0x08064C9C ldrb r0, [r2, #0xe] cmp r0, #0 beq _08064CB8 - ldr r0, _08064CBC @ =gUnk_030010A0 + ldr r0, _08064CBC @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -286,7 +286,7 @@ sub_08064C9C: @ 0x08064C9C _08064CB8: pop {pc} .align 2, 0 -_08064CBC: .4byte gUnk_030010A0 +_08064CBC: .4byte gScreenTransition thumb_func_start sub_08064CC0 sub_08064CC0: @ 0x08064CC0 diff --git a/asm/updateBackgroundRegisters.s b/asm/updateBackgroundRegisters.s index 4825e56e..a529894e 100644 --- a/asm/updateBackgroundRegisters.s +++ b/asm/updateBackgroundRegisters.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_08016CF4 -sub_08016CF4: @ 0x08016CF4 + thumb_func_start UpdateBackgroundRegisters +UpdateBackgroundRegisters: @ 0x08016CF4 ldr r3, _08016DF0 @ =gScreen ldrh r1, [r3] ldrh r0, [r3, #6] diff --git a/asm/vaati.s b/asm/vaati.s index 3a8f92d7..172ccc8b 100644 --- a/asm/vaati.s +++ b/asm/vaati.s @@ -78,7 +78,7 @@ sub_08066ACC: @ 0x08066ACC asrs r0, r0, #0x18 cmp r0, #0 beq _08066AF6 - ldr r0, _08066B1C @ =gUnk_030010A0 + ldr r0, _08066B1C @ =gScreenTransition ldr r0, [r0] movs r1, #3 ands r0, r1 @@ -105,7 +105,7 @@ _08066AF6: b _08066B66 .align 2, 0 _08066B18: .4byte sub_08066B74 -_08066B1C: .4byte gUnk_030010A0 +_08066B1C: .4byte gScreenTransition _08066B20: cmp r2, #3 beq _08066B40 diff --git a/asm/vaatiArm.s b/asm/vaatiArm.s index eb8ad3e5..0ebd0163 100644 --- a/asm/vaatiArm.s +++ b/asm/vaatiArm.s @@ -75,7 +75,7 @@ sub_080425B4: @ 0x080425B4 strb r1, [r0] adds r0, #1 strb r1, [r0] - ldr r5, _08042614 @ =gUnk_030010A0 + ldr r5, _08042614 @ =gScreenTransition adds r0, r5, #0 adds r0, #0x38 ldrb r0, [r0] @@ -109,7 +109,7 @@ sub_080425B4: @ 0x080425B4 strb r0, [r4, #0xd] b _0804264C .align 2, 0 -_08042614: .4byte gUnk_030010A0 +_08042614: .4byte gScreenTransition _08042618: movs r0, #8 strb r0, [r4, #0xc] @@ -2479,7 +2479,7 @@ sub_08043770: @ 0x08043770 bne _080437D8 ldr r0, [r2, #0x64] ldr r3, [r0, #0x14] - ldr r0, _080437AC @ =gUnk_030010A0 + ldr r0, _080437AC @ =gScreenTransition adds r5, r0, #0 adds r5, #0x39 ldrb r1, [r5] @@ -2499,7 +2499,7 @@ _0804379A: movs r0, #0xfe b _080437B8 .align 2, 0 -_080437AC: .4byte gUnk_030010A0 +_080437AC: .4byte gScreenTransition _080437B0: ldr r0, [r3, #0x64] str r4, [r0, #0x18] @@ -3173,7 +3173,7 @@ sub_08043C98: @ 0x08043C98 _08043CB4: adds r0, r3, #0 bl sub_08043D08 - ldr r0, _08043CCC @ =gUnk_030010A0 + ldr r0, _08043CCC @ =gScreenTransition adds r0, #0x38 ldrb r2, [r0] movs r1, #2 @@ -3182,7 +3182,7 @@ _08043CB4: movs r0, #1 b _08043CD2 .align 2, 0 -_08043CCC: .4byte gUnk_030010A0 +_08043CCC: .4byte gScreenTransition _08043CD0: movs r0, #0 _08043CD2: @@ -3332,7 +3332,7 @@ sub_08043DB0: @ 0x08043DB0 beq _08043EAC ldr r0, _08043E50 @ =gUnk_080D13EC bl DoExitTransition - ldr r4, _08043E54 @ =gUnk_030010A0 + ldr r4, _08043E54 @ =gScreenTransition adds r0, r4, #0 adds r0, #0x39 ldrb r1, [r0] @@ -3382,7 +3382,7 @@ _08043DFE: _08043E48: .4byte gLinkState _08043E4C: .4byte gRoomControls _08043E50: .4byte gUnk_080D13EC -_08043E54: .4byte gUnk_030010A0 +_08043E54: .4byte gScreenTransition _08043E58: movs r1, #0x88 lsls r1, r1, #1 @@ -3401,7 +3401,7 @@ _08043E70: ldr r3, [r0, #0x18] cmp r3, #0 beq _08043E90 - ldr r1, _08043E8C @ =gUnk_030010A0 + ldr r1, _08043E8C @ =gScreenTransition ldrh r2, [r3, #0x2e] adds r0, r1, #0 adds r0, #0x48 @@ -3411,9 +3411,9 @@ _08043E70: strh r0, [r1] b _08043EAC .align 2, 0 -_08043E8C: .4byte gUnk_030010A0 +_08043E8C: .4byte gScreenTransition _08043E90: - ldr r2, _08043EB0 @ =gUnk_030010A0 + ldr r2, _08043EB0 @ =gScreenTransition ldr r3, _08043EB4 @ =gRoomControls movs r1, #0x88 lsls r1, r1, #1 @@ -3430,7 +3430,7 @@ _08043E90: _08043EAC: pop {r4, r5, r6, pc} .align 2, 0 -_08043EB0: .4byte gUnk_030010A0 +_08043EB0: .4byte gScreenTransition _08043EB4: .4byte gRoomControls thumb_func_start sub_08043EB8 @@ -3521,14 +3521,14 @@ sub_08043EB8: @ 0x08043EB8 ldrb r0, [r7, #0xb] cmp r0, #0 bne _08043F74 - ldr r1, _08043F70 @ =gUnk_030010A0 + ldr r1, _08043F70 @ =gScreenTransition adds r0, r1, #0 adds r0, #0x44 b _08043F7A .align 2, 0 -_08043F70: .4byte gUnk_030010A0 +_08043F70: .4byte gScreenTransition _08043F74: - ldr r1, _08043F8C @ =gUnk_030010A0 + ldr r1, _08043F8C @ =gScreenTransition adds r0, r1, #0 adds r0, #0x48 _08043F7A: @@ -3541,7 +3541,7 @@ _08043F7A: adds r0, #0x46 b _08043F94 .align 2, 0 -_08043F8C: .4byte gUnk_030010A0 +_08043F8C: .4byte gScreenTransition _08043F90: adds r0, r1, #0 adds r0, #0x4a @@ -3673,7 +3673,7 @@ sub_08044078: @ 0x08044078 ldrb r0, [r4, #0xa] cmp r0, #3 bne _080440AC - ldr r3, _080440B8 @ =gUnk_030010A0 + ldr r3, _080440B8 @ =gScreenTransition adds r0, r3, #0 adds r0, #0x38 ldrb r1, [r0] @@ -3695,7 +3695,7 @@ _080440AC: bl InitializeAnimation b _080440C4 .align 2, 0 -_080440B8: .4byte gUnk_030010A0 +_080440B8: .4byte gScreenTransition _080440BC: adds r0, r4, #0 movs r1, #0x11 @@ -3714,7 +3714,7 @@ sub_080440CC: @ 0x080440CC bne _08044110 movs r0, #1 strb r0, [r4, #0xc] - ldr r2, _08044104 @ =gUnk_030010A0 + ldr r2, _08044104 @ =gScreenTransition adds r1, r2, #0 adds r1, #0x38 ldrb r1, [r1] @@ -3734,7 +3734,7 @@ sub_080440CC: @ 0x080440CC bl InitializeAnimation b _08044110 .align 2, 0 -_08044104: .4byte gUnk_030010A0 +_08044104: .4byte gScreenTransition _08044108: adds r0, r4, #0 movs r1, #0x11 diff --git a/asm/vaatiEyesMacro.s b/asm/vaatiEyesMacro.s index ba21e690..111f7431 100644 --- a/asm/vaatiEyesMacro.s +++ b/asm/vaatiEyesMacro.s @@ -60,7 +60,7 @@ sub_0802ECC0: @ 0x0802ECC0 adds r0, #0x45 ldrb r1, [r0] adds r5, r0, #0 - ldr r3, _0802ED00 @ =gUnk_030010A0 + ldr r3, _0802ED00 @ =gScreenTransition cmp r1, #0 bne _0802ECEE adds r2, r3, #0 @@ -84,7 +84,7 @@ _0802ECEE: adds r0, #0x3a b _0802ED0E .align 2, 0 -_0802ED00: .4byte gUnk_030010A0 +_0802ED00: .4byte gScreenTransition _0802ED04: .4byte gRoomControls _0802ED08: ldrb r1, [r5] @@ -187,15 +187,15 @@ sub_0802ED8C: @ 0x0802ED8C ldrb r0, [r0, #5] cmp r0, #0 bne _0802EDDC - ldr r0, _0802EDD8 @ =gUnk_030010A0 + ldr r0, _0802EDD8 @ =gScreenTransition adds r0, #0x3a b _0802EDE0 .align 2, 0 _0802EDD0: .4byte gUnk_03003DBC _0802EDD4: .4byte gRoomControls -_0802EDD8: .4byte gUnk_030010A0 +_0802EDD8: .4byte gScreenTransition _0802EDDC: - ldr r0, _0802EE0C @ =gUnk_030010A0 + ldr r0, _0802EE0C @ =gScreenTransition adds r0, #0x3b _0802EDE0: ldrb r0, [r0] @@ -218,7 +218,7 @@ _0802EDE0: _0802EE0A: pop {r4, pc} .align 2, 0 -_0802EE0C: .4byte gUnk_030010A0 +_0802EE0C: .4byte gScreenTransition thumb_func_start sub_0802EE10 sub_0802EE10: @ 0x0802EE10 diff --git a/asm/vaatiProjectile.s b/asm/vaatiProjectile.s index 3a23e2f8..b1e67640 100644 --- a/asm/vaatiProjectile.s +++ b/asm/vaatiProjectile.s @@ -557,7 +557,7 @@ _0803E49E: sub_0803E4A0: @ 0x0803E4A0 push {lr} adds r1, r0, #0 - ldr r0, _0803E4B8 @ =gUnk_030010A0 + ldr r0, _0803E4B8 @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] cmp r0, #0 @@ -568,7 +568,7 @@ sub_0803E4A0: @ 0x0803E4A0 movs r0, #0 b _0803E4D6 .align 2, 0 -_0803E4B8: .4byte gUnk_030010A0 +_0803E4B8: .4byte gScreenTransition _0803E4BC: adds r0, r1, #0 adds r0, #0x45 diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s index f96d5d64..df92529a 100644 --- a/asm/vaatiWrath.s +++ b/asm/vaatiWrath.s @@ -82,7 +82,7 @@ _080413BC: .4byte gUnk_080D0E2C sub_080413C0: @ 0x080413C0 push {r4, r5, r6, r7, lr} adds r4, r0, #0 - ldr r7, _080413F8 @ =gUnk_030010A0 + ldr r7, _080413F8 @ =gScreenTransition adds r0, r7, #0 adds r0, #0x38 ldrb r0, [r0] @@ -107,14 +107,14 @@ sub_080413C0: @ 0x080413C0 strb r6, [r4, #0xd] b _08041404 .align 2, 0 -_080413F8: .4byte gUnk_030010A0 +_080413F8: .4byte gScreenTransition _080413FC: movs r0, #2 strb r0, [r4, #0xc] movs r0, #0x3c strb r0, [r4, #0xe] _08041404: - ldr r0, _0804141C @ =gUnk_030010A0 + ldr r0, _0804141C @ =gScreenTransition adds r1, r0, #0 adds r1, #0x40 ldrh r1, [r1] @@ -126,7 +126,7 @@ _08041404: bl sub_08042004 b _0804144A .align 2, 0 -_0804141C: .4byte gUnk_030010A0 +_0804141C: .4byte gScreenTransition _08041420: adds r0, r4, #0 bl sub_08041ED4 @@ -315,7 +315,7 @@ _08041592: strb r0, [r4, #0xd] movs r0, #0x1e strb r0, [r4, #0xe] - ldr r1, _080415BC @ =gUnk_030010A0 + ldr r1, _080415BC @ =gScreenTransition adds r1, #0x38 ldrb r2, [r1] movs r0, #1 @@ -330,7 +330,7 @@ _08041592: strb r1, [r0] b _080415E6 .align 2, 0 -_080415BC: .4byte gUnk_030010A0 +_080415BC: .4byte gScreenTransition _080415C0: .4byte gRoomControls _080415C4: .4byte gLinkEntity _080415C8: .4byte gLinkState @@ -540,7 +540,7 @@ _08041748: adds r2, r1, #0 cmp r2, #2 bne _080417AA - ldr r0, _0804179C @ =gUnk_030010A0 + ldr r0, _0804179C @ =gScreenTransition adds r0, #0x39 ldrb r1, [r0] movs r0, #3 @@ -572,7 +572,7 @@ _08041748: bl InitializeAnimation b _080417AA .align 2, 0 -_0804179C: .4byte gUnk_030010A0 +_0804179C: .4byte gScreenTransition _080417A0: .4byte gRoomControls _080417A4: strb r2, [r5, #0xc] @@ -1580,7 +1580,7 @@ _08041F88: .4byte gUnk_03003DBC _08041F8C: ldr r7, [r5, #0x64] movs r4, #0 - ldr r0, _08041FC0 @ =gUnk_030010A0 + ldr r0, _08041FC0 @ =gScreenTransition adds r0, #0x39 ldrb r0, [r0] asrs r0, r6 @@ -1603,7 +1603,7 @@ _08041FB6: str r4, [r7, #0x14] b _08041FC6 .align 2, 0 -_08041FC0: .4byte gUnk_030010A0 +_08041FC0: .4byte gScreenTransition _08041FC4: str r4, [r7, #0x18] _08041FC6: @@ -1895,7 +1895,7 @@ _080421C0: ands r0, r5 cmp r0, #0 beq _080421F4 - ldr r0, _080421F0 @ =gUnk_030010A0 + ldr r0, _080421F0 @ =gScreenTransition adds r0, #0x39 ldrb r1, [r0] movs r0, #0xc @@ -1907,7 +1907,7 @@ _080421C0: strb r5, [r6] b _08042212 .align 2, 0 -_080421F0: .4byte gUnk_030010A0 +_080421F0: .4byte gScreenTransition _080421F4: adds r1, r4, #0 adds r1, #0x7e @@ -2133,7 +2133,7 @@ sub_0804235C: @ 0x0804235C thumb_func_start sub_080423A4 sub_080423A4: @ 0x080423A4 push {r4, lr} - ldr r0, _080423CC @ =gUnk_030010A0 + ldr r0, _080423CC @ =gScreenTransition adds r4, r0, #0 adds r4, #0x38 ldrb r1, [r4] @@ -2152,7 +2152,7 @@ sub_080423A4: @ 0x080423A4 str r0, [r1] b _0804241C .align 2, 0 -_080423CC: .4byte gUnk_030010A0 +_080423CC: .4byte gScreenTransition _080423D0: .4byte gUnk_02002A40 _080423D4: ldr r2, _08042420 @ =gLinkState diff --git a/asm/warpPoint.s b/asm/warpPoint.s index 4ab7b1ed..1c537321 100644 --- a/asm/warpPoint.s +++ b/asm/warpPoint.s @@ -317,7 +317,7 @@ sub_0808B684: @ 0x0808B684 lsrs r2, r0, #0x18 cmp r2, #0 bne _0808B6E8 - ldr r3, _0808B6E4 @ =gUnk_030010A0 + ldr r3, _0808B6E4 @ =gScreenTransition movs r0, #1 strb r0, [r3, #8] strb r2, [r3, #9] @@ -355,7 +355,7 @@ sub_0808B684: @ 0x0808B684 strb r0, [r3, #9] b _0808B736 .align 2, 0 -_0808B6E4: .4byte gUnk_030010A0 +_0808B6E4: .4byte gScreenTransition _0808B6E8: movs r0, #0x60 ands r0, r1 diff --git a/asm/windTribeTeleporter.s b/asm/windTribeTeleporter.s index ddae0a9f..44a400f8 100644 --- a/asm/windTribeTeleporter.s +++ b/asm/windTribeTeleporter.s @@ -162,12 +162,12 @@ _080A1038: bl PlaySFX b _080A10D4 _080A1056: - ldr r0, _080A1060 @ =gUnk_030010A0 + ldr r0, _080A1060 @ =gScreenTransition ldr r0, [r0] movs r1, #7 b _080A10C2 .align 2, 0 -_080A1060: .4byte gUnk_030010A0 +_080A1060: .4byte gScreenTransition _080A1064: ldrb r0, [r4, #0xe] subs r0, #1 @@ -183,11 +183,11 @@ _080A1070: strb r0, [r4, #0xe] b _080A10D4 _080A107C: - ldr r0, _080A1084 @ =gUnk_030010A0 + ldr r0, _080A1084 @ =gScreenTransition ldr r0, [r0] b _080A10C2 .align 2, 0 -_080A1084: .4byte gUnk_030010A0 +_080A1084: .4byte gScreenTransition _080A1088: ldrb r0, [r4, #0xe] subs r0, #1 @@ -214,7 +214,7 @@ _080A10A2: _080A10B4: .4byte gRoomControls _080A10B8: .4byte gUnk_0813ADEC _080A10BC: - ldr r0, _080A10D8 @ =gUnk_030010A0 + ldr r0, _080A10D8 @ =gScreenTransition ldr r0, [r0] movs r1, #1 _080A10C2: @@ -230,7 +230,7 @@ _080A10C2: _080A10D4: pop {r4, pc} .align 2, 0 -_080A10D8: .4byte gUnk_030010A0 +_080A10D8: .4byte gScreenTransition _080A10DC: .4byte gLinkEntity thumb_func_start sub_080A10E0 @@ -266,11 +266,11 @@ _080A110E: lsls r0, r0, #0x18 cmp r0, #0 beq _080A1130 - ldr r0, _080A1120 @ =gUnk_030010A0 + ldr r0, _080A1120 @ =gScreenTransition ldr r0, [r0] b _080A1162 .align 2, 0 -_080A1120: .4byte gUnk_030010A0 +_080A1120: .4byte gScreenTransition _080A1124: ldrb r0, [r2, #0xe] subs r0, #1 @@ -286,12 +286,12 @@ _080A1130: strb r0, [r2, #0xe] b _080A11BA _080A113C: - ldr r0, _080A1144 @ =gUnk_030010A0 + ldr r0, _080A1144 @ =gScreenTransition ldr r0, [r0] movs r1, #3 b _080A1162 .align 2, 0 -_080A1144: .4byte gUnk_030010A0 +_080A1144: .4byte gScreenTransition _080A1148: ldrb r0, [r2, #0xe] subs r0, #1 @@ -304,7 +304,7 @@ _080A1148: strb r0, [r2, #0xd] b _080A11BA _080A115C: - ldr r0, _080A1178 @ =gUnk_030010A0 + ldr r0, _080A1178 @ =gScreenTransition ldr r0, [r0] movs r1, #7 _080A1162: @@ -319,14 +319,14 @@ _080A1162: strb r1, [r0, #0x14] b _080A11BA .align 2, 0 -_080A1178: .4byte gUnk_030010A0 +_080A1178: .4byte gScreenTransition _080A117C: .4byte gLinkEntity _080A1180: ldr r4, _080A11A0 @ =gLinkEntity ldrb r3, [r4, #0x14] cmp r3, #4 beq _080A11A8 - ldr r0, _080A11A4 @ =gUnk_030010A0 + ldr r0, _080A11A4 @ =gScreenTransition ldr r0, [r0] movs r1, #7 ands r0, r1 @@ -339,7 +339,7 @@ _080A1180: b _080A11BA .align 2, 0 _080A11A0: .4byte gLinkEntity -_080A11A4: .4byte gUnk_030010A0 +_080A11A4: .4byte gScreenTransition _080A11A8: movs r0, #0 movs r1, #1 diff --git a/asm/wizzrobeIce.s b/asm/wizzrobeIce.s index 46e0ab6a..7f92bd73 100644 --- a/asm/wizzrobeIce.s +++ b/asm/wizzrobeIce.s @@ -394,7 +394,7 @@ _080300C0: .4byte gUnk_0300110C thumb_func_start sub_080300C4 sub_080300C4: @ 0x080300C4 push {lr} - ldr r2, _080300E4 @ =gUnk_030010A0 + ldr r2, _080300E4 @ =gScreenTransition adds r0, r2, #0 adds r0, #0xae ldrh r0, [r0] @@ -410,12 +410,12 @@ sub_080300C4: @ 0x080300C4 _080300E2: pop {pc} .align 2, 0 -_080300E4: .4byte gUnk_030010A0 +_080300E4: .4byte gScreenTransition thumb_func_start sub_080300E8 sub_080300E8: @ 0x080300E8 push {lr} - ldr r1, _08030110 @ =gUnk_030010A0 + ldr r1, _08030110 @ =gScreenTransition adds r3, r1, #0 adds r3, #0xae ldrh r0, [r3] @@ -435,14 +435,14 @@ sub_080300E8: @ 0x080300E8 _0803010C: pop {pc} .align 2, 0 -_08030110: .4byte gUnk_030010A0 +_08030110: .4byte gScreenTransition _08030114: .4byte gLinkEntity thumb_func_start sub_08030118 sub_08030118: @ 0x08030118 push {lr} adds r2, r0, #0 - ldr r0, _0803013C @ =gUnk_030010A0 + ldr r0, _0803013C @ =gScreenTransition adds r0, #0xac ldrh r0, [r0] asrs r0, r2 @@ -457,7 +457,7 @@ sub_08030118: @ 0x08030118 bl SetLocalFlagByOffset b _0803014C .align 2, 0 -_0803013C: .4byte gUnk_030010A0 +_0803013C: .4byte gScreenTransition _08030140: movs r0, #0xc0 lsls r0, r0, #2 @@ -472,7 +472,7 @@ _0803014C: sub_08030150: @ 0x08030150 push {r4, r5, lr} mov ip, r0 - ldr r2, _08030194 @ =gUnk_030010A0 + ldr r2, _08030194 @ =gScreenTransition adds r5, r2, #0 adds r5, #0xac mov r3, ip @@ -504,4 +504,4 @@ sub_08030150: @ 0x08030150 strh r1, [r0] pop {r4, r5, pc} .align 2, 0 -_08030194: .4byte gUnk_030010A0 +_08030194: .4byte gScreenTransition diff --git a/include/functions.h b/include/functions.h index 40ebac66..56b28ea6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -204,4 +204,5 @@ extern u32 sub_0800445C(Entity*); extern void sub_0807A108(void); extern void sub_0801766C(Entity*); extern void sub_08004168(Entity*); +extern u32 sub_08052638(u32); #endif \ No newline at end of file diff --git a/include/global.h b/include/global.h index 6738b6b8..28a0769c 100644 --- a/include/global.h +++ b/include/global.h @@ -47,17 +47,12 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) -struct Coords16 -{ - s16 x; - s16 y; -} PACKED; - -struct UCoords16 -{ - u16 x; - u16 y; -}; +typedef union { + s32 WORD; + struct { + s16 x, y; + } HALF; +} Coords; union SplitWord { s32 WORD; diff --git a/include/structures.h b/include/structures.h index fb96345d..2ca783bf 100644 --- a/include/structures.h +++ b/include/structures.h @@ -17,12 +17,19 @@ typedef struct { extern struct_02002A40 gUnk_02002A40; typedef struct { - u8 field_0x0[8]; - u8 field_0x8; - u8 field_0x9; - u8 field_0xa[6]; - union SplitWord field_0x10; - u8 field_0x14[0xc]; + u16 frameCount; // regular frame count? does anything reset it? + u8 field_0x2[6]; + bool8 transitioningOut; + u8 transitionType; // transition when changing areas + u8 field_0xa; + u8 field_0xb; + u8 areaID; + u8 roomID; + u8 animState; + u8 field_0xf; + Coords startPos; + u16 collisionLayer; + u8 field_0x14[0xa]; u16 field_0x20; u16 field_0x22; u8 field_0x24[0x14]; @@ -35,9 +42,22 @@ typedef struct { u16 field_0x46; u16 field_0x48; u16 field_0x4a; -} struct_030010A0; +} ScreenTransition; -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; +typedef struct { + u16 transitionType; + u8 field_0x2[4]; + s16 playerXPos; + s16 playerYPos; + u8 field_0xa; + u8 areaID; + u8 roomID; + u8 collisionLayer; + u8 field_0xe; + u8 playerAnimState; + u16 transitionSFX; +} ScreenTransitionData; #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 8720510b..53af056b 100644 --- a/linker.ld +++ b/linker.ld @@ -174,7 +174,7 @@ SECTIONS { . = 0x00001000; gUnk_03001000 = .; . = 0x00001010; gUnk_03001010 = .; . = 0x00001020; gUnk_03001020 = .; - . = 0x000010A0; gUnk_030010A0 = .; + . = 0x000010A0; gScreenTransition = .; . = 0x000010AC; gUnk_030010AC = .; . = 0x000010D8; gUnk_030010D8 = .; . = 0x000010EC; gUnk_030010EC = .; @@ -664,6 +664,7 @@ SECTIONS { asm/code_0807CAA0.o(.text); src/flags.o(.text); asm/code_0807CC3C.o(.text); + src/code_0807CC3C.o(.text); src/code_0808091C.o(.text); /* objects */ asm/itemOnGround.o(.text); diff --git a/src/code_0805436C.c b/src/code_0805436C.c index 92175a3c..cc81546c 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -17,11 +17,11 @@ typedef struct { typedef struct { u8 filler[0x2e]; u8 unk; -} struct_030010A0; +} ScreenTransition; extern struct_02002A40 gUnk_02002A40; extern struct_080FD5B4 gUnk_080FD5B4[]; -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; extern u8 gUnk_0200AF13; extern u8 gUnk_0200AF14; @@ -154,7 +154,7 @@ void sub_08054524(void) { bVar1 = gArea.locationIndex; if (gArea.locationIndex == 0) { - bVar1 = gUnk_030010A0.unk; + bVar1 = gScreenTransition.unk; } if (bVar1 > 0x16) { bVar1 = 0; diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c new file mode 100644 index 00000000..e9b9f8f5 --- /dev/null +++ b/src/code_0807CC3C.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "entity.h" +#include "structures.h" +#include "functions.h" + +void sub_080808D8(void) { + gScreenTransition.transitionType = 0; +} + +void sub_080808E4(void) { + + if (sub_08052638(gScreenTransition.areaID)) { + gScreenTransition.transitionType = 0; + } else { + gScreenTransition.transitionType = 5; + } +} + +void sub_08080904(void) { + gScreenTransition.transitionType = 1; +} + +void sub_08080910(void) { + gScreenTransition.transitionType = 1; +} \ No newline at end of file diff --git a/src/code_0808091C.c b/src/code_0808091C.c index 3ba2096e..1607ddf0 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -6,7 +6,7 @@ extern void sub_0805E5A8(); extern RoomControls gRoomControls; extern u32 gUnk_0200B650; extern u32 gUnk_02025EB0; -extern u8 gUnk_030010A0[10]; +extern u8 gScreenTransition[10]; extern void DoExitTransition(Entity*); extern void sub_080809D4(); @@ -15,7 +15,7 @@ void sub_0808091C(Entity* param_1, u32 param_2) { DoExitTransition(param_1); - gUnk_030010A0[9] = param_2; + gScreenTransition[9] = param_2; return; } diff --git a/src/manager/manager27.c b/src/manager/manager27.c index db5bd8b6..a4f4fda8 100644 --- a/src/manager/manager27.c +++ b/src/manager/manager27.c @@ -6,13 +6,13 @@ typedef struct { u8 filler[0xAC]; u16 unk; -} struct_030010A0; +} ScreenTransition; extern u32 sub_0805C920(Entity*); extern void LoadPalettesByPaletteGroupIndex(u32); extern void (*const gUnk_08108D10[])(Entity*); -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; extern u8 gUnk_08108D20[]; void Manager27(Entity *this) @@ -20,10 +20,10 @@ void Manager27(Entity *this) gUnk_08108D10[this->action](this); if (CheckLocalFlagByOffset(0x300, this->entityType.form + 0x67)) { - gUnk_030010A0.unk |= (1 << (this->entityType).form); + gScreenTransition.unk |= (1 << (this->entityType).form); } else { - gUnk_030010A0.unk &= ~(1 << (this->entityType).form); + gScreenTransition.unk &= ~(1 << (this->entityType).form); } } diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index 0d6b9f3f..5096dfa0 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -5,7 +5,7 @@ extern void (*gUnk_081140D4[])(Entity*); extern u16 gUnk_081140CC[]; -extern u32 gUnk_030010A0; +extern u32 gScreenTransition; extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); @@ -40,7 +40,7 @@ void sub_0806CF30(Entity* this) { if (this->previousActionFlag != 2) { if (this->previousActionFlag < 3) { - if ((gUnk_030010A0 & 3) == 0) { + if ((gScreenTransition & 3) == 0) { iVar3 = this->x.HALF.HI; if (gLinkEntity.x.HALF.HI < iVar3) { if ((this->field_0x68 - 32) < iVar3) { diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index bcd9fa62..71456fe1 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -9,7 +9,7 @@ typedef struct { /*0x00*/ u8 filler[0x2C]; /*0x2C*/ u8 unk; -} struct_030010A0; +} ScreenTransition; typedef struct { u8 filler[0xa8]; @@ -20,7 +20,7 @@ typedef struct { extern void (*gUnk_081115C0[])(Entity*); extern void (*gUnk_081115D0[])(Entity*); -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; extern u16 gUnk_081115DC[]; extern u8 gUnk_08111618[]; extern u32* gUnk_081115EC[]; @@ -60,7 +60,7 @@ void sub_08068A1C(Entity* this) { int offset; (this->entityType).parameter = (this->entityType).form; - if (gUnk_030010A0.unk != 0) { + if (gScreenTransition.unk != 0) { offset = 6; bVar1 = 3; @@ -114,7 +114,7 @@ void sub_08068AA4(Entity* this) { } void sub_08068ADC(Entity* this) { - if (gUnk_030010A0.unk == 2) { + if (gScreenTransition.unk == 2) { GetNextFrame(this); } sub_0806FD3C(this); diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c index 8cda93ec..94736676 100644 --- a/src/npc/goronMerchant.c +++ b/src/npc/goronMerchant.c @@ -27,7 +27,7 @@ void GoronMerchant(Entity *this) void sub_08069584(Entity *this) { - if (gUnk_030010A0.field_0x24[8] != 0) { + if (gScreenTransition.field_0x24[8] != 0) { this->action = 3; } else { @@ -65,7 +65,7 @@ void sub_080695E8(Entity *this) void sub_0806961C(Entity *this) { - if (gUnk_030010A0.field_0x24[8] == 2) { + if (gScreenTransition.field_0x24[8] == 2) { UpdateAnimationSingleFrame(this); } sub_0806FD3C(this); diff --git a/src/npc/guard.c b/src/npc/guard.c index 765a89dd..a2cd0b25 100644 --- a/src/npc/guard.c +++ b/src/npc/guard.c @@ -13,7 +13,7 @@ typedef struct { typedef struct { u8 filler[8]; u8 unk; -} struct_030010A0; +} ScreenTransition; typedef struct { u32 unk; @@ -38,7 +38,7 @@ extern void (*const gUnk_0810F550[])(Entity*); extern u8 gUnk_03003DBC; extern SpriteLoadData gUnk_0810F524[]; extern void* gUnk_0810F6BC[]; -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; void Guard(Entity *this) { @@ -175,7 +175,7 @@ void sub_08064030(Entity *arg0,Entity *arg1) void sub_08064044(void) { - gUnk_030010A0.unk = 1; + gScreenTransition.unk = 1; } void sub_08064050(Entity *arg0, struct_08064050 *arg1) diff --git a/src/npc/simon.c b/src/npc/simon.c index 911fd745..73e6da35 100644 --- a/src/npc/simon.c +++ b/src/npc/simon.c @@ -7,7 +7,7 @@ typedef struct { u8 filler[9]; u8 unk; -} struct_030010A0; +} ScreenTransition; typedef struct { u8 filler[4]; @@ -21,7 +21,7 @@ extern void DoFade(u32, u32); extern void gUnk_0813AD60; extern void gUnk_0813AD74; -extern struct_030010A0 gUnk_030010A0; +extern ScreenTransition gScreenTransition; void Simon(Entity *this) { @@ -37,7 +37,7 @@ void Simon(Entity *this) void sub_0806C224(void) { DoExitTransition(&gUnk_0813AD60); - gUnk_030010A0.unk = 6; + gScreenTransition.unk = 6; } void Simon_CreateChest(Entity *this) @@ -51,7 +51,7 @@ void sub_0806C280(void) { SetGlobalFlag(MAROYA_WAKEUP); DoExitTransition(&gUnk_0813AD74); - gUnk_030010A0.unk = 6; + gScreenTransition.unk = 6; } void sub_0806C2A0(u32 *param_1,struct_0806C2A0 *param_2) diff --git a/src/npc/syrup.c b/src/npc/syrup.c index da3f69e8..58a3cb61 100644 --- a/src/npc/syrup.c +++ b/src/npc/syrup.c @@ -11,7 +11,7 @@ extern void (*gUnk_081121D4[])(Entity*); extern SpriteLoadData gUnk_081121C4; extern SpriteLoadData gUnk_081121B4; -extern u32 gUnk_030010A0; +extern u32 gScreenTransition; extern void sub_0807DD94(Entity*, u32); extern void sub_0806A26C(Entity*); extern void sub_080042BA(Entity*, u32); @@ -42,7 +42,7 @@ void sub_0806A234(Entity *this) { sub_0807DD94(this, 0); if ((this->field_0x82.HWORD & 4) != 0) { - if ((gUnk_030010A0 & 7) == 0) { + if ((gScreenTransition & 7) == 0) { sub_0806A26C(this); } sub_080042BA(this, 2); diff --git a/src/object/cloud.c b/src/object/cloud.c index c55e0d57..5314d9a4 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -23,7 +23,7 @@ extern void PositionEntityOnTop(Entity*, Entity*); extern void sub_0807BB68(u32*, u32, u32); extern u8 gUnk_02034490; -extern u32 gUnk_030010A0; +extern u32 gScreenTransition; extern void* gUnk_080DD750; extern Entity gLinkEntity; extern LinkState gLinkState; @@ -62,7 +62,7 @@ void sub_0809F548(Entity* this) { sub_0809F814((((this->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 63) | (((this->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 63) << 6); } else { - if ((gUnk_030010A0 & 7) == 0) { + if ((gScreenTransition & 7) == 0) { sub_0809F7BC(this); } sub_0809F7F4(this); @@ -110,7 +110,7 @@ void sub_0809F61C(Entity* this) { sub_0809F814((((this->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 63) | (((this->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 63) << 6); } else { - if ((gUnk_030010A0 & 7) == 0) { + if ((gScreenTransition & 7) == 0) { sub_0809F7BC(this); } sub_0809F7F4(this); @@ -145,7 +145,7 @@ void sub_0809F700(Entity* this) { this->actionDelay = (Random() & 30) + 8; this->flags = this->flags | 12; } - if ((gUnk_030010A0 & 3) == 0) { + if ((gScreenTransition & 3) == 0) { uVar2 = Random(); this->spriteOffsetX = gUnk_081247C0[uVar2 & 7]; this->spriteOffsetY = gUnk_081247C0[uVar2 >> 4 & 7]; diff --git a/src/object/mask.c b/src/object/mask.c index 6dd866c9..033039e4 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -4,7 +4,7 @@ #include "random.h" extern Entity gLinkEntity; -extern u16 gUnk_030010A0[]; +extern u16 gScreenTransition[]; extern void (*MaskActionFuncs[])(Entity *); @@ -36,7 +36,7 @@ void sub_080929A4(Entity *this) { switch (this->entityType.parameter & 0xC0) { case 0x40: - field_0x0a = gUnk_030010A0[0x5]; + field_0x0a = gScreenTransition[0x5]; switch (field_0x0a) { case 0x44D ... 0x44F: diff --git a/src/object/minecart.c b/src/object/minecart.c index eff15d3a..5bf59c5d 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -155,7 +155,7 @@ void sub_080919AC(Entity *this) CopyPosition(this,&gLinkEntity); gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1; if (!sub_08091DDC(this)) { - if ((gUnk_030010A0.field_0x0 & 0xf) == 0) { + if ((gScreenTransition.field_0x0 & 0xf) == 0) { PlaySFX(0x138); } diff --git a/src/object/treeHidingPortal.c b/src/object/treeHidingPortal.c index 8bab5747..5b8522b3 100644 --- a/src/object/treeHidingPortal.c +++ b/src/object/treeHidingPortal.c @@ -15,7 +15,7 @@ extern void CreateMinishEntrance(u32 tile); extern void (*const gUnk_08124354[])(Entity*); -extern u32 gUnk_030010A0; +extern u32 gScreenTransition; extern s16 gUnk_08124364[]; void TreeHidingPortal(Entity* this) { @@ -36,7 +36,7 @@ void sub_0809E86C(Entity* this) { if (sub_0800419C(this, &gLinkEntity, 0x30, 0x30)) { if (CheckGlobalFlag(EZERO_1ST)) { - if (((gUnk_030010A0 & 3) == 0)) { + if (((gScreenTransition & 3) == 0)) { sub_080A2B80(this); } } diff --git a/src/room.c b/src/room.c index 0bef2ef3..9c7a6b6f 100644 --- a/src/room.c +++ b/src/room.c @@ -233,7 +233,7 @@ extern EntityData gUnk_080D6210; void sub_0804B5BC(void) { - if ((u16)gUnk_030010A0.field_0x10.HALF.HI > 0x40) + if ((u16)gScreenTransition.startPos.HALF.y > 0x40) LoadRoomEntityList(&gUnk_080D6210); } @@ -640,7 +640,7 @@ void sub_0804bc38(void) { u32 sub_0804BC50(void) { if (!CheckLocalFlag(0x9f)) { - gUnk_030010A0.field_0xa[5] = 5; + gScreenTransition.field_0xf = 5; ClearGlobalFlag(ZELDA_CHASE); } return 1; @@ -1023,7 +1023,7 @@ void sub_0804C018(void) { SetTile(0x4072, 0xc47, 1); if (CheckGlobalFlag(MAZE_CLEAR)) - if (gUnk_030010A0.field_0x10.WORD == 0x2780078) + if (gScreenTransition.startPos.WORD == 0x2780078) // todo: wtf PlaySFX(0x72); ClearGlobalFlag(MAZE_CLEAR); @@ -2444,8 +2444,8 @@ u32 sub_0804CF40() { } void sub_0804CF44(void) { - gUnk_030010A0.field_0x38 = 0; - gUnk_030010A0.field_0x39 = 0x5a; + gScreenTransition.field_0x38 = 0; + gScreenTransition.field_0x39 = 0x5a; } u32 sub_0804CF5C() { @@ -2520,10 +2520,10 @@ u32 sub_0804CFAC() { void sub_0804CFB0(void) { if (!CheckFlags(0x31)) { - if (gUnk_030010A0.field_0x38 == 0) { + if (gScreenTransition.field_0x38 == 0) { PlaySFX(0x80100000); } else { - if (gUnk_030010A0.field_0x39 == 0) { + if (gScreenTransition.field_0x39 == 0) { PlaySFX(0x80050000); sub_08078A90(3); } @@ -3508,16 +3508,16 @@ u32 sub_0804D6EC() { void sub_0804D6F0(void) { sub_0805D3C8(0); - if ((gUnk_030010A0.field_0x38 & 1) && gUnk_030010A0.field_0x39) { - if (gUnk_030010A0.field_0x3c == 1) { - gLinkEntity.x.HALF.HI = gUnk_030010A0.field_0x48; - gLinkEntity.y.HALF.HI = gUnk_030010A0.field_0x4a + 8; + if ((gScreenTransition.field_0x38 & 1) && gScreenTransition.field_0x39) { + if (gScreenTransition.field_0x3c == 1) { + gLinkEntity.x.HALF.HI = gScreenTransition.field_0x48; + gLinkEntity.y.HALF.HI = gScreenTransition.field_0x4a + 8; } else { - if (gUnk_030010A0.field_0x3c) { + if (gScreenTransition.field_0x3c) { return; } - gLinkEntity.x.HALF.HI = gUnk_030010A0.field_0x44; - gLinkEntity.y.HALF.HI = gUnk_030010A0.field_0x46 + 8; + gLinkEntity.x.HALF.HI = gScreenTransition.field_0x44; + gLinkEntity.y.HALF.HI = gScreenTransition.field_0x46 + 8; } } } @@ -4536,7 +4536,7 @@ void sub_0804E4E4(void) if (!GetInventoryValue(0x3a) && CheckGlobalFlag(MIZUKAKI_HARIFALL)) { LoadRoomEntityList(&gUnk_080F2194); } - if (gUnk_030010A0.field_0xa[5] == 1) { + if (gScreenTransition.field_0xf == 1) { LoadRoomEntityList(&gUnk_080F21B4); } } @@ -4852,8 +4852,8 @@ void sub_0804E954(void) if (!GetInventoryValue(0x46) && CheckGlobalFlag(MIZUKAKI_START) && !GetInventoryValue(0x3b)) { LoadRoomEntityList(&gUnk_080F3A48); } - gUnk_030010A0.field_0x20 = 0xf28; - gUnk_030010A0.field_0x22 = 0x82d; + gScreenTransition.field_0x20 = 0xf28; + gScreenTransition.field_0x22 = 0x82d; } extern u32 gUnk_080F3D44; @@ -5260,7 +5260,7 @@ void nullsub_398() {} u32 sub_0804EFDC(void) { if (CheckGlobalFlag(MAROYA_WAKEUP)) { - gUnk_030010A0.field_0xa[5] = 5; + gScreenTransition.field_0xf = 5; } return 1; } diff --git a/src/sub_0805E374.c b/src/sub_0805E374.c index 38b30e94..ebad1b0e 100644 --- a/src/sub_0805E374.c +++ b/src/sub_0805E374.c @@ -1,10 +1,10 @@ #include "entity.h" extern Entity* sub_0805E3A0(Entity*, u32); -extern u8 gUnk_030010A0[]; +extern u8 gScreenTransition[]; extern u8 gUnk_081091F8[]; extern u8 gUnk_081091EE[]; Entity* sub_0805E374(Entity* param_1) { - u8 r3 = gUnk_030010A0[0x2C]; + u8 r3 = gScreenTransition[0x2C]; u8* array = gUnk_081091F8; if (r3 != '\x02') { diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c index 80eff685..da4e5ce1 100644 --- a/src/sub_080A3B84.c +++ b/src/sub_080A3B84.c @@ -8,7 +8,7 @@ extern void (*const gUnk_081280C4[])(); void DrawKinstoneMenu(void) { - gUnk_030010A0.field_0x24[8] = 2; + gScreenTransition.field_0x24[8] = 2; sub_080AD90C(); gUnk_081280C4[gMenu.menuType](); sub_080A3B74(); @@ -18,7 +18,7 @@ void DrawKinstoneMenu(void) sub_0805E5C0(); sub_080AD9B0(); sub_080AD918(); - gUnk_030010A0.field_0x24[8] = 0; + gScreenTransition.field_0x24[8] = 0; } extern void gUnk_081280DC; From a155f257201bd4fad7f85e9f355bd66214e05ef7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 4 Aug 2020 19:32:04 -0500 Subject: [PATCH 6/9] Decompile houseDoorExterior.c --- asm/houseDoorExterior.s | 418 --------------------------------- include/entity.h | 3 +- include/functions.h | 1 + linker.ld | 2 +- src/object/houseDoorExterior.c | 187 +++++++++++++++ 5 files changed, 191 insertions(+), 420 deletions(-) delete mode 100644 asm/houseDoorExterior.s create mode 100755 src/object/houseDoorExterior.c diff --git a/asm/houseDoorExterior.s b/asm/houseDoorExterior.s deleted file mode 100644 index 50b7a415..00000000 --- a/asm/houseDoorExterior.s +++ /dev/null @@ -1,418 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start HouseDoorExterior -HouseDoorExterior: @ 0x080866C0 - push {lr} - ldr r2, _080866D4 @ =gUnk_081206B4 - ldrb r1, [r0, #0xb] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080866D4: .4byte gUnk_081206B4 - - thumb_func_start sub_080866D8 -sub_080866D8: @ 0x080866D8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - ldrb r1, [r6, #0xc] - cmp r1, #0 - bne _080866FE - movs r0, #1 - strb r0, [r6, #0xc] - str r1, [r6, #0x68] - ldrb r1, [r6, #0xe] - adds r0, r6, #0 - adds r0, #0x6c - strb r1, [r0] - adds r0, r6, #0 - movs r1, #6 - bl sub_0805E3A0 -_080866FE: - adds r0, r6, #0 - adds r0, #0x6c - ldrb r0, [r0] - bl GetCurrentRoomProperty - adds r5, r0, #0 - movs r0, #0 - mov r8, r0 - ldrh r0, [r5] - ldr r1, _080867C4 @ =0x0000FFFF - cmp r0, r1 - beq _080867BA - mov sb, r1 -_08086718: - movs r7, #1 - mov r1, r8 - lsls r7, r1 - ldr r0, [r6, #0x68] - ands r0, r7 - cmp r0, #0 - bne _080867A8 - ldrb r0, [r5, #5] - bl sub_080867CC - cmp r0, #0 - beq _080867A8 - ldrh r0, [r5] - ldrh r1, [r5, #2] - movs r2, #0x20 - movs r3, #0x20 - bl sub_080562CC - cmp r0, #0 - beq _080867A8 - ldrb r1, [r5, #7] - ldrb r2, [r5, #6] - movs r0, #0x19 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080867A8 - adds r0, #0x6c - mov r2, r8 - strb r2, [r0] - ldr r1, _080867C8 @ =gRoomControls - ldrh r0, [r5] - ldrh r2, [r1, #6] - adds r0, r0, r2 - adds r0, #0x10 - strh r0, [r4, #0x2e] - ldrh r0, [r5, #2] - ldrh r1, [r1, #8] - adds r0, r0, r1 - adds r0, #0x20 - strh r0, [r4, #0x32] - str r6, [r4, #0x50] - ldrh r1, [r5] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - ldrh r0, [r5, #2] - adds r1, r4, #0 - adds r1, #0x6a - strh r0, [r1] - ldrb r1, [r5, #4] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] - ldrb r0, [r5, #5] - strb r0, [r4, #0xd] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, [r6, #0x68] - orrs r0, r7 - str r0, [r6, #0x68] - ldr r1, [r5, #8] - cmp r1, #0 - beq _080867A8 - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_080867A8: - adds r5, #0xc - movs r0, #1 - add r8, r0 - ldrh r0, [r5] - cmp r0, sb - beq _080867BA - mov r1, r8 - cmp r1, #0x1f - bls _08086718 -_080867BA: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080867C4: .4byte 0x0000FFFF -_080867C8: .4byte gRoomControls - - thumb_func_start sub_080867CC -sub_080867CC: @ 0x080867CC - push {lr} - cmp r0, #0 - beq _080867DE - cmp r0, #2 - bne _080867DE - movs r0, #0x18 - bl CheckGlobalFlag - b _080867E0 -_080867DE: - movs r0, #1 -_080867E0: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080867E4 -sub_080867E4: @ 0x080867E4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x68 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x6a - ldrh r1, [r1] - movs r2, #0x20 - movs r3, #0x20 - bl sub_080562CC - cmp r0, #0 - bne _08086814 - ldr r2, [r4, #0x50] - adds r0, r4, #0 - adds r0, #0x6c - movs r1, #1 - ldrb r0, [r0] - lsls r1, r0 - ldr r0, [r2, #0x68] - bics r0, r1 - str r0, [r2, #0x68] - bl DeleteThisEntity -_08086814: - adds r0, r4, #0 - bl sub_0808681C - pop {r4, pc} - - thumb_func_start sub_0808681C -sub_0808681C: @ 0x0808681C - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0xc] - cmp r4, #0 - beq _0808682C - cmp r4, #1 - beq _08086868 - b _0808688C -_0808682C: - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #8 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x18] - subs r0, #0xc - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - strb r4, [r5, #0x1e] - ldr r0, _08086864 @ =gUnk_081206AC - str r0, [r5, #0x48] - ldrb r1, [r5, #0xd] - cmp r1, #1 - bne _08086852 - movs r0, #2 - strb r0, [r5, #0xc] - strb r1, [r5, #0x1e] -_08086852: - ldrb r1, [r5, #0x10] - movs r2, #2 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080868AA - strb r2, [r5, #0xc] - b _0808688C - .align 2, 0 -_08086864: .4byte gUnk_081206AC -_08086868: - adds r0, r5, #0 - bl sub_08086954 - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808688C - ldrb r0, [r5, #0xc] - adds r0, #1 - strb r0, [r5, #0xc] - strb r4, [r5, #0x1e] - movs r0, #0x10 - movs r1, #0 - movs r2, #1 - bl sub_08078AC0 - ldr r0, _080868AC @ =0x00000111 - bl PlaySFX -_0808688C: - ldrb r1, [r5, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080868AA - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_080868EC -_080868AA: - pop {r4, r5, pc} - .align 2, 0 -_080868AC: .4byte 0x00000111 - - thumb_func_start sub_080868B0 -sub_080868B0: @ 0x080868B0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _080868D2 - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldr r0, _080868E8 @ =gUnk_081206AC - str r0, [r5, #0x48] - movs r0, #8 - strb r0, [r5, #0xe] -_080868D2: - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_080868EC - pop {r4, r5, pc} - .align 2, 0 -_080868E8: .4byte gUnk_081206AC - - thumb_func_start sub_080868EC -sub_080868EC: @ 0x080868EC - push {r4, r5, lr} - adds r3, r0, #0 - ldr r2, [r1, #8] - movs r0, #0 - str r0, [r1, #8] - cmp r2, #0 - beq _0808691E - movs r5, #0x80 - lsls r5, r5, #1 - movs r4, #0 - movs r1, #1 -_08086902: - mvns r0, r2 - adds r0, #1 - ands r0, r2 - eors r2, r0 - cmp r0, #0x80 - beq _08086914 - cmp r0, r5 - beq _08086918 - b _0808691A -_08086914: - strb r4, [r3, #0x1e] - b _0808691A -_08086918: - strb r1, [r3, #0x1e] -_0808691A: - cmp r2, #0 - bne _08086902 -_0808691E: - ldrb r0, [r3, #0x1e] - cmp r0, #0 - bne _0808692A - adds r0, r3, #0 - bl sub_0800445C -_0808692A: - pop {r4, r5, pc} - - thumb_func_start sub_0808692C -sub_0808692C: @ 0x0808692C - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #0xfd - ands r0, r1 - strb r0, [r2, #0x10] - movs r0, #2 - strb r0, [r2, #0xb] - ldrb r0, [r2, #0x1e] - movs r1, #2 - cmp r0, #0 - bne _08086946 - movs r1, #1 -_08086946: - strb r1, [r2, #0xc] - movs r0, #0 - strb r0, [r2, #0xd] - movs r0, #8 - strb r0, [r2, #0xe] - pop {pc} - .align 2, 0 - - thumb_func_start sub_08086954 -sub_08086954: @ 0x08086954 - push {r4, lr} - adds r4, r0, #0 - bl sub_0800445C - cmp r0, #0 - beq _0808699C - adds r0, r4, #0 - movs r1, #6 - movs r2, #0x14 - bl sub_0806ED9C - cmp r0, #0 - blt _080869A0 - ldr r0, _08086994 @ =gLinkEntity - ldrb r0, [r0, #0x14] - cmp r0, #0 - bne _080869A0 - ldr r2, _08086998 @ =gLinkState - adds r0, r2, #0 - adds r0, #0x90 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #3 - cmp r1, r0 - bne _080869A0 - ldrb r0, [r2, #2] - cmp r0, #0 - bne _080869A0 - ldrb r0, [r4, #0xe] - subs r0, #1 - b _0808699E - .align 2, 0 -_08086994: .4byte gLinkEntity -_08086998: .4byte gLinkState -_0808699C: - movs r0, #8 -_0808699E: - strb r0, [r4, #0xe] -_080869A0: - ldrb r0, [r4, #0xe] - pop {r4, pc} - - thumb_func_start sub_080869A4 -sub_080869A4: @ 0x080869A4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #0 - str r0, [r5, #0x14] - adds r0, r4, #0 - bl sub_08086954 - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080869C2 - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #1 - str r0, [r5, #0x14] -_080869C2: - pop {r4, r5, pc} \ No newline at end of file diff --git a/include/entity.h b/include/entity.h index e717c9e1..03dd4772 100644 --- a/include/entity.h +++ b/include/entity.h @@ -26,7 +26,8 @@ typedef struct { } BoundingBox; typedef struct Entity { - /*0x00*/ u32* field_0x0; + /*0x00*/ u16 unk0; + /*0x02*/ u8 filler2[0x2]; /*0x04*/ struct Entity* field_0x4; /*0x08*/ EntityType entityType; /*0x0c*/ u8 action; diff --git a/include/functions.h b/include/functions.h index 40ebac66..da093417 100644 --- a/include/functions.h +++ b/include/functions.h @@ -204,4 +204,5 @@ extern u32 sub_0800445C(Entity*); extern void sub_0807A108(void); extern void sub_0801766C(Entity*); extern void sub_08004168(Entity*); +extern void ExecuteScriptCommandSet(Entity*, void *); #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index f652d64f..2bec115f 100644 --- a/linker.ld +++ b/linker.ld @@ -692,7 +692,7 @@ SECTIONS { asm/floatingPlatform.o(.text); asm/object17.o(.text); asm/evilSpirit.o(.text); - asm/houseDoorExterior.o(.text); + src/object/houseDoorExterior.o(.text); src/object/object1A.o(.text); src/object/greatFairy.o(.text); asm/greatFairy.o(.text); diff --git a/src/object/houseDoorExterior.c b/src/object/houseDoorExterior.c new file mode 100755 index 00000000..c68f6b23 --- /dev/null +++ b/src/object/houseDoorExterior.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "entity.h" +#include "flags.h" +#include "functions.h" +#include "room.h" + +typedef struct { + /*0x00*/ u16 unk0; + /*0x02*/ u16 unk2; + /*0x04*/ u8 unk4; + /*0x05*/ u8 unk5; + /*0x06*/ u8 unk6; + /*0x07*/ u8 unk7; + /*0x08*/ u8 *unk8; +} unk_DoorProperty; + +typedef struct { + /*0x00*/ u8 filler0[0x8]; + /*0x08*/ u32 unk8; +} unk_80868EC; + +static void sub_080868EC(Entity* entity, unk_80868EC* arg1); +static bool32 sub_080867CC(u32); +static void sub_0808681C(Entity*); +static u8 sub_08086954(Entity*); + +extern u32 sub_080562CC(u32, u32, u32, u32); +extern void sub_08078AC0(u32, u32, u32); +extern void* GetCurrentRoomProperty(u8); + +extern void (*const gUnk_081206B4[])(Entity*); +extern BoundingBox gUnk_081206AC; // TODO: should be const + +void HouseDoorExterior(Entity* this) { + gUnk_081206B4[this->entityType.parameter](this); +} + +void sub_080866D8(Entity* this) { + unk_DoorProperty* prop; + Entity* entity; + u32 i; + + if (this->action == 0) { + this->action = 1; + *((u32 *)(&this->field_0x68)) = 0; + this->field_0x6c.HALF.LO = this->actionDelay; + sub_0805E3A0(this, 6); + } + + prop = GetCurrentRoomProperty(this->field_0x6c.HALF.LO); + for (i = 0; prop->unk0 != 0xFFFF && i < 32; prop++, i++) { + int mask = 1 << i; + if ((*((u32 *)(&this->field_0x68)) & mask) == 0 && + sub_080867CC(prop->unk5) && + sub_080562CC(prop->unk0, prop->unk2, 32, 32)) { + entity = CreateObject(0x19, prop->unk7, prop->unk6); + if (entity) { + entity->field_0x6c.HALF.LO = i; + entity->x.HALF.HI = gRoomControls.roomOriginX + prop->unk0 + 16; + entity->y.HALF.HI = gRoomControls.roomOriginY + prop->unk2 + 32; + entity->parent = this; + entity->field_0x68.HWORD = prop->unk0; + entity->field_0x6a.HWORD = prop->unk2; + entity->collisionLayer = prop->unk4; + entity->previousActionFlag = prop->unk5; + UpdateSpriteForCollisionLayer(entity); + *((u32 *)(&this->field_0x68)) |= mask; + if (prop->unk8) { + *((u32 **)(&entity->cutsceneBeh)) = StartCutscene(entity, prop->unk8); + } + } + } + } +} + +static bool32 sub_080867CC(u32 arg0) { + if (arg0 == 0) { + return TRUE; + } + if (arg0 != 2) { + return TRUE; + } + return CheckGlobalFlag(TATEKAKE_HOUSE); +} + +void sub_080867E4(Entity* this) { + if (!sub_080562CC(this->field_0x68.HWORD, this->field_0x6a.HWORD, 32, 32)) { + *((u32 *)(&this->parent->field_0x68)) = *((u32 *)(&this->parent->field_0x68)) & ~(1 << this->field_0x6c.HALF.LO); + DeleteThisEntity(); + } + sub_0808681C(this); +} + +static void sub_0808681C(Entity* this) { + switch (this->action) { + case 0: + this->action = 1; + this->actionDelay = 8; + this->spriteSettings.b.draw = 1; + this->frameIndex = 0; + this->boundingBox = &gUnk_081206AC; + if (this->previousActionFlag == 1) { + this->action = 2; + this->frameIndex = 1; + } + if (this->flags & 0x2) { + this->action = 2; + } + break; + case 1: + if (!sub_08086954(this)) { + this->action++; + this->frameIndex = 1; + sub_08078AC0(16, 0, 1); + PlaySFX(0x111); + } + break; + } + + if (this->flags & 0x2) { + ExecuteScriptCommandSet(this, *(u32 **)&this->cutsceneBeh); + sub_080868EC(this, *(void **)&this->cutsceneBeh); + } +} + +void sub_080868B0(Entity* this) { + if (this->action == 0) { + this->action = 1; + this->spriteSettings.b.draw = 1; + this->boundingBox = &gUnk_081206AC; + this->actionDelay = 8; + } + ExecuteScriptCommandSet(this, *(u32 **)&this->cutsceneBeh); + sub_080868EC(this, *(void **)&this->cutsceneBeh); +} + +static void sub_080868EC(Entity* entity, unk_80868EC* arg1) { + u32 var0 = arg1->unk8; + arg1->unk8 = 0; + while (var0 != 0) { + u32 rightMostSetBit = var0 & (~var0 + 1); + var0 ^= rightMostSetBit; + switch (rightMostSetBit) { + case 0x80: + entity->frameIndex = 0; + break; + case 0x100: + entity->frameIndex = 1; + break; + } + } + + if (entity->frameIndex == 0) { + sub_0800445C(entity); + } +} + +void sub_0808692C(Entity* this) { + this->flags &= 0xFD; + this->entityType.parameter = 2; + this->action = this->frameIndex == 0 ? 1 : 2; + this->previousActionFlag = 0; + this->actionDelay = 8; +} + +static u8 sub_08086954(Entity* this) { + if (sub_0800445C(this)) { + if (sub_0806ED9C(this, 6, 20) >= 0 && + gLinkEntity.animationState == 0 && + (u16)gLinkState.field_0x90.HALF.LO == 0x400 && + gLinkState.jumpStatus == 0) { + this->actionDelay--; + } + } else { + this->actionDelay = 8; + } + return this->actionDelay; +} + +// TODO: Second arg is some unknown struct. +void sub_080869A4(Entity* entityA, u32* entityB) { + entityB[5] = 0; + if (!sub_08086954(entityA)) { + entityA->actionDelay = 8; + entityB[5] = 1; + } +} From 682483414209c8d5d1b90cf40f91cf51d62319e8 Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 4 Aug 2020 23:55:39 -0700 Subject: [PATCH 7/9] struct_02002A40 -> structures.h --- asm/code_0807CC3C.s | 231 ------------------------------------- hyrulefield.sna | Bin 0 -> 84890 bytes include/functions.h | 14 +++ include/main.h | 1 - include/menu.h | 3 +- include/npc.h | 17 --- include/structures.h | 45 ++++++-- linker.ld | 3 +- src/code_0807CC3C.c | 126 +++++++++++++++++--- src/code_080808D8.c | 25 ++++ src/manager/manager27.c | 10 +- src/npc/bladeBrothers.c | 16 +-- src/npc/forestMinish.c | 1 + src/npc/mayorHagen.c | 2 + src/npc/mutoh.c | 1 + src/npc/postman.c | 1 + src/npc/simon.c | 10 +- src/npc/townsperson.c | 1 + src/npc/windTribespeople.c | 1 + src/object/windcrest.c | 6 - src/room.c | 4 +- 21 files changed, 208 insertions(+), 310 deletions(-) create mode 100644 hyrulefield.sna create mode 100644 src/code_080808D8.c diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 79a102ff..4ededc8c 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -5,237 +5,6 @@ .text - thumb_func_start sub_0807CD9C -sub_0807CD9C: @ 0x0807CD9C - push {lr} - bl sub_080530C8 - pop {pc} - - thumb_func_start sub_0807CDA4 -sub_0807CDA4: @ 0x0807CDA4 - push {lr} - ldr r2, _0807CDB8 @ =gUnk_0811E478 - ldr r1, _0807CDBC @ =gMenu - ldrb r1, [r1, #7] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807CDB8: .4byte gUnk_0811E478 -_0807CDBC: .4byte gMenu - - thumb_func_start sub_0807CDC0 -sub_0807CDC0: @ 0x0807CDC0 - push {lr} - ldr r0, _0807CDE0 @ =gUnk_02021EE0 - ldrh r1, [r0, #0xa] - subs r1, #8 - strh r1, [r0, #0xa] - movs r1, #8 - ldrsh r0, [r0, r1] - cmp r0, #0 - bgt _0807CDDC - ldr r0, _0807CDE4 @ =gMenu - movs r1, #8 - strh r1, [r0, #0xa] - movs r1, #1 - strb r1, [r0, #7] -_0807CDDC: - movs r0, #0 - pop {pc} - .align 2, 0 -_0807CDE0: .4byte gUnk_02021EE0 -_0807CDE4: .4byte gMenu - - thumb_func_start sub_0807CDE8 -sub_0807CDE8: @ 0x0807CDE8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _0807CE08 @ =gMenu - ldrh r0, [r1, #0xa] - cmp r0, #0 - bne _0807CE4C - bl sub_0805616C - cmp r4, #1 - beq _0807CE20 - cmp r4, #1 - blo _0807CE0C - cmp r4, #2 - beq _0807CE2E - b _0807CE38 - .align 2, 0 -_0807CE08: .4byte gMenu -_0807CE0C: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #4] - ldr r1, _0807CE1C @ =gUnk_02002A40 - bl sub_0807CF08 - b _0807CE36 - .align 2, 0 -_0807CE1C: .4byte gUnk_02002A40 -_0807CE20: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #4] - bl sub_0807CF48 - movs r5, #1 - b _0807CE38 -_0807CE2E: - movs r0, #0x80 - lsls r0, r0, #0x12 - bl sub_0807CF10 -_0807CE36: - adds r5, r0, #0 -_0807CE38: - ldr r1, _0807CE48 @ =gMenu - strh r5, [r1, #0xa] - movs r0, #2 - strb r0, [r1, #7] - bl sub_08056208 - b _0807CE50 - .align 2, 0 -_0807CE48: .4byte gMenu -_0807CE4C: - subs r0, #1 - strh r0, [r1, #0xa] -_0807CE50: - movs r0, #0 - pop {r4, r5, pc} - - thumb_func_start sub_0807CE54 -sub_0807CE54: @ 0x0807CE54 - push {r4, r5, lr} - movs r4, #0 - ldr r2, _0807CE88 @ =gUnk_02021EE0 - ldrh r0, [r2, #0xa] - adds r0, #8 - strh r0, [r2, #0xa] - ldrh r3, [r2, #6] - movs r5, #6 - ldrsh r1, [r2, r5] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r1, r0 - bgt _0807CE84 - strh r3, [r2, #0xa] - bl sub_08050384 - ldr r0, _0807CE8C @ =gMenu - movs r1, #0 - strb r1, [r0, #7] - ldrh r0, [r0, #0xa] - subs r4, #1 - cmp r0, #1 - bne _0807CE84 - movs r4, #1 -_0807CE84: - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -_0807CE88: .4byte gUnk_02021EE0 -_0807CE8C: .4byte gMenu - - thumb_func_start sub_0807CE90 -sub_0807CE90: @ 0x0807CE90 - push {r4, r5, r6, lr} - movs r0, #0x40 - bl sub_080B1520 - movs r0, #4 - bl sub_0807D1C4 - adds r4, r0, #0 - movs r5, #0 - ldrh r0, [r4, #6] - ldr r6, _0807CF04 @ =gUnk_0811E484 - ldrh r2, [r4] - adds r1, r6, #0 - bl sub_0807D24C - cmp r0, #0 - bne _0807CEB4 - movs r5, #1 -_0807CEB4: - ldrh r0, [r4, #8] - ldrh r2, [r4] - adds r1, r6, #0 - bl sub_0807D24C - cmp r0, #0 - bne _0807CEC4 - adds r5, #2 -_0807CEC4: - cmp r5, #0 - beq _0807CEFE - cmp r5, #3 - bne _0807CEEA - movs r0, #5 - bl sub_0807CF68 - movs r0, #3 - bl sub_0807CF68 - movs r0, #2 - bl sub_0807CF68 - movs r0, #1 - bl sub_0807CF68 - movs r0, #0 - bl sub_0807CF68 -_0807CEEA: - ldrh r0, [r4, #8] - ldrh r2, [r4] - adds r1, r6, #0 - bl sub_0807D20C - ldrh r0, [r4, #6] - ldrh r2, [r4] - adds r1, r6, #0 - bl sub_0807D20C -_0807CEFE: - movs r0, #1 - pop {r4, r5, r6, pc} - .align 2, 0 -_0807CF04: .4byte gUnk_0811E484 - - thumb_func_start sub_0807CF08 -sub_0807CF08: @ 0x0807CF08 - push {lr} - bl sub_0807CF88 - pop {pc} - - thumb_func_start sub_0807CF10 -sub_0807CF10: @ 0x0807CF10 - push {lr} - adds r1, r0, #0 - movs r0, #3 - bl sub_0807CF88 - pop {pc} - - thumb_func_start sub_0807CF1C -sub_0807CF1C: @ 0x0807CF1C - push {lr} - adds r1, r0, #0 - movs r0, #5 - bl sub_0807CF88 - pop {pc} - - thumb_func_start sub_0807CF28 -sub_0807CF28: @ 0x0807CF28 - push {lr} - bl sub_0807D008 - pop {pc} - - thumb_func_start sub_0807CF30 -sub_0807CF30: @ 0x0807CF30 - push {lr} - adds r1, r0, #0 - movs r0, #3 - bl sub_0807D008 - pop {pc} - - thumb_func_start sub_0807CF3C -sub_0807CF3C: @ 0x0807CF3C - push {lr} - adds r1, r0, #0 - movs r0, #5 - bl sub_0807D008 - pop {pc} - thumb_func_start sub_0807CF48 sub_0807CF48: @ 0x0807CF48 push {r4, r5, lr} diff --git a/hyrulefield.sna b/hyrulefield.sna new file mode 100644 index 0000000000000000000000000000000000000000..0f6a50b4ee5c910e6223eab8b211da66c87278d3 GIT binary patch literal 84890 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 literal 0 HcmV?d00001 diff --git a/include/functions.h b/include/functions.h index 56b28ea6..773655e3 100644 --- a/include/functions.h +++ b/include/functions.h @@ -6,6 +6,7 @@ #include "entity.h" #include "position.h" #include "link.h" +#include "structures.h" // Identified - to be sorted into header files extern u32 Random(void); @@ -205,4 +206,17 @@ extern void sub_0807A108(void); extern void sub_0801766C(Entity*); extern void sub_08004168(Entity*); extern u32 sub_08052638(u32); +extern void sub_0805616C(); +extern u32 sub_0807CF08(u32, u8*); +extern void sub_0807CF48(u32); +extern u32 sub_0807CF10(u8 *); +extern void sub_08056208(); +extern void sub_08050384(); +extern void sub_080B1520(u32); +extern struct_0807D1C4* sub_0807D1C4(u32); +extern u32 sub_0807D24C(u32, char*, u32); +extern void sub_0807CF68(u32); +extern void sub_0807D20C(u32, char*, u32); +extern u32 sub_0807CF88(u32, u8*); +extern u32 sub_0807D008(u32, void*); #endif \ No newline at end of file diff --git a/include/main.h b/include/main.h index 16888e29..4cceb41e 100644 --- a/include/main.h +++ b/include/main.h @@ -45,7 +45,6 @@ extern UI gUnk_02032EC0; extern s32 sub_08055F70(); extern s32 sub_080A3204(s32); -extern s32 sub_0805616C(s32); extern s32 sub_0807CE90(s32); extern s32 sub_080560B8(s32); extern void sub_08056208(s32); diff --git a/include/menu.h b/include/menu.h index 93b77591..7ac003dd 100644 --- a/include/menu.h +++ b/include/menu.h @@ -27,7 +27,8 @@ typedef struct { u8 overlayType; u8 storyPanelIndex; u16 transitionTimer; - u8 fillerA[0x6]; + u16 field_0xa; + u8 field_0xc[0x4]; u8 unk10[2]; u8 field_0x12; u8 unk13; diff --git a/include/npc.h b/include/npc.h index 7b95e745..103df393 100644 --- a/include/npc.h +++ b/include/npc.h @@ -173,22 +173,5 @@ extern void NPC58_Head(Entity*); extern u32 UpdateFuseInteraction(Entity*); extern void ShowNPCDialogue(Entity*, u32*); -typedef struct { - /*0x000*/ u8 filler0[0x6]; - /*0x006*/ u8 unk6; - /*0x007*/ u8 unk7; - /*0x008*/ u8 unk8; - /*0x009*/ u8 field_0x9[0x34]; - /*0x040*/ u32 windcrests; - /*0x044*/ u8 filler44[0xC]; - /*0x050*/ u32 unk50; - /*0x054*/ u8 filler54[0x54]; - /*0x0A8*/ Stats stats; - /*0x0D0*/ u8 filler4[0x3c0]; - /*0x490*/ u32 unk490; -} struct_02002A40; - -extern struct_02002A40 gUnk_02002A40; - #endif \ No newline at end of file diff --git a/include/structures.h b/include/structures.h index 1f042416..ff29f0da 100644 --- a/include/structures.h +++ b/include/structures.h @@ -13,21 +13,48 @@ typedef struct { u8 gameLanguage; } struct_02000000; -extern struct_02000000 gUnk_02000000; +typedef struct { + u16 field_0x0; + u16 field_0x2; + u16 field_0x4; + u16 field_0x6; + u16 field_0x8; + u16 field_0xa; +} struct_0807D1C4; + +#define gUnk_02000000 ((struct_02000000*)(0x2000000)) +//extern struct_02000000 gUnk_02000000; typedef struct { - u16 frameCount; // regular frame count? does anything reset it? + /*0x000*/ u8 filler0[0x6]; + /*0x006*/ u8 unk6; + /*0x007*/ u8 unk7; + /*0x008*/ u8 unk8; + /*0x009*/ u8 field_0x9[0x34]; + /*0x040*/ u32 windcrests; + /*0x044*/ u8 filler44[0xC]; + /*0x050*/ u32 unk50; + /*0x054*/ u8 filler54[0x54]; + /*0x0A8*/ Stats stats; + /*0x0D0*/ u8 filler4[0x3c0]; + /*0x490*/ u32 unk490; +} struct_02002A40; + +extern struct_02002A40 gUnk_02002A40; + +typedef struct { + u16 frameCount; // regular frame count? does anything reset it? u8 field_0x2[6]; bool8 transitioningOut; u8 transitionType; // transition when changing areas - u8 field_0xa; + u8 field_0xa; // seems to be a tile type u8 field_0xb; u8 areaID; u8 roomID; - u8 animState; + u8 playerState; u8 field_0xf; - Coords startPos; - u16 collisionLayer; + Coords playerStartPos; + u16 playerLayer; u8 field_0x14[0xa]; u16 field_0x20; u16 field_0x22; @@ -41,6 +68,8 @@ typedef struct { u16 field_0x46; u16 field_0x48; u16 field_0x4a; + u8 field_0x4c[0x60]; + u16 field_0xac; } ScreenTransition; extern ScreenTransition gScreenTransition; @@ -53,9 +82,9 @@ typedef struct { u8 field_0xa; u8 areaID; u8 roomID; - u8 collisionLayer; + u8 playerLayer; u8 field_0xe; - u8 playerAnimState; + u8 playerState; u16 transitionSFX; } ScreenTransitionData; diff --git a/linker.ld b/linker.ld index 618c284b..f2c52dd1 100644 --- a/linker.ld +++ b/linker.ld @@ -663,8 +663,9 @@ SECTIONS { asm/getInventoryValue.o(.text); asm/code_0807CAA0.o(.text); src/flags.o(.text); - asm/code_0807CC3C.o(.text); src/code_0807CC3C.o(.text); + asm/code_0807CC3C.o(.text); + src/code_080808D8.o(.text); src/code_0808091C.o(.text); /* objects */ asm/itemOnGround.o(.text); diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index e9b9f8f5..b5b1c4ee 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -1,25 +1,125 @@ #include "global.h" #include "entity.h" -#include "structures.h" #include "functions.h" +#include "menu.h" +#include "structures.h" -void sub_080808D8(void) { - gScreenTransition.transitionType = 0; +extern void (*const gUnk_0811E478[])(u32); + +extern s16 gUnk_02021EE0[6]; + +void sub_0807CD9C() { + sub_080530C8(); } -void sub_080808E4(void) { +void sub_0807CDA4(u32 arg0) { + gUnk_0811E478[gMenu.storyPanelIndex](arg0); +} - if (sub_08052638(gScreenTransition.areaID)) { - gScreenTransition.transitionType = 0; - } else { - gScreenTransition.transitionType = 5; +u32 sub_0807CDC0(void) { + gUnk_02021EE0[5] -= 8; + if (gUnk_02021EE0[4] <= 0) { + gMenu.field_0xa = 8; + gMenu.storyPanelIndex = 1; } + return 0; } -void sub_08080904(void) { - gScreenTransition.transitionType = 1; +u32 sub_0807CDE8(u32 arg0) { + u32 temp; + + if (gMenu.field_0xa == 0) { + sub_0805616C(); + switch (arg0) { + case 0: + temp = sub_0807CF08(gUnk_02000000->saveFile, gUnk_02002A40.filler0); + break; + case 1: + sub_0807CF48(gUnk_02000000->saveFile); + temp = 1; + break; + case 2: + temp = sub_0807CF10((u8*)gUnk_02000000->header); + break; + } + gMenu.field_0xa = temp; + gMenu.storyPanelIndex = 2; + sub_08056208(); + } else { + gMenu.field_0xa--; + } + return 0; } -void sub_08080910(void) { - gScreenTransition.transitionType = 1; -} \ No newline at end of file +s32 sub_0807CE54(void) { + u32 uVar1; + + uVar1 = 0; + gUnk_02021EE0[5] += 8; + if (gUnk_02021EE0[3] <= gUnk_02021EE0[5]) { + gUnk_02021EE0[5] = gUnk_02021EE0[3]; + sub_08050384(); + gMenu.storyPanelIndex = 0; + if (gMenu.field_0xa == 1) { + uVar1 = 1; + } else { + uVar1 = -1; + } + } + return uVar1; +} + +extern char gUnk_0811E484[]; + +u32 sub_0807CE90(void) +{ + struct_0807D1C4 *puVar1; + int iVar2; + int iVar3; + + sub_080B1520(0x40); + puVar1 = sub_0807D1C4(4); + iVar3 = 0; + if (sub_0807D24C(puVar1->field_0x6, gUnk_0811E484, puVar1->field_0x0) == 0) { + iVar3 += 1; + } + if (sub_0807D24C(puVar1->field_0x8, gUnk_0811E484, puVar1->field_0x0) == 0) { + iVar3 += 2; + } + if (iVar3 != 0) { + if (iVar3 == 3) { + sub_0807CF68(5); + sub_0807CF68(3); + sub_0807CF68(2); + sub_0807CF68(1); + sub_0807CF68(0); + } + sub_0807D20C(puVar1->field_0x8, gUnk_0811E484, puVar1->field_0x0); + sub_0807D20C(puVar1->field_0x6, gUnk_0811E484, puVar1->field_0x0); + } + return 1; +} + +u32 sub_0807CF08(u32 arg0, u8* arg1) { + return sub_0807CF88(arg0, arg1); +} + +u32 sub_0807CF10(u8* arg0) { + return sub_0807CF88(3, arg0); +} + +u32 sub_0807CF1C(u8* arg0) { + return sub_0807CF88(5, arg0); +} + +u32 sub_0807CF28(u32 arg0, void* arg1) { + return sub_0807D008(arg0, arg1); +} + +u32 sub_0807CF30(void* arg0) { + return sub_0807D008(3, arg0); +} + +u32 sub_0807CF3C(void* arg0) { + return sub_0807D008(5, arg0); +} diff --git a/src/code_080808D8.c b/src/code_080808D8.c new file mode 100644 index 00000000..e9b9f8f5 --- /dev/null +++ b/src/code_080808D8.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "entity.h" +#include "structures.h" +#include "functions.h" + +void sub_080808D8(void) { + gScreenTransition.transitionType = 0; +} + +void sub_080808E4(void) { + + if (sub_08052638(gScreenTransition.areaID)) { + gScreenTransition.transitionType = 0; + } else { + gScreenTransition.transitionType = 5; + } +} + +void sub_08080904(void) { + gScreenTransition.transitionType = 1; +} + +void sub_08080910(void) { + gScreenTransition.transitionType = 1; +} \ No newline at end of file diff --git a/src/manager/manager27.c b/src/manager/manager27.c index a4f4fda8..57952513 100644 --- a/src/manager/manager27.c +++ b/src/manager/manager27.c @@ -3,16 +3,10 @@ #include "flags.h" #include "functions.h" -typedef struct { - u8 filler[0xAC]; - u16 unk; -} ScreenTransition; - extern u32 sub_0805C920(Entity*); extern void LoadPalettesByPaletteGroupIndex(u32); extern void (*const gUnk_08108D10[])(Entity*); -extern ScreenTransition gScreenTransition; extern u8 gUnk_08108D20[]; void Manager27(Entity *this) @@ -20,10 +14,10 @@ void Manager27(Entity *this) gUnk_08108D10[this->action](this); if (CheckLocalFlagByOffset(0x300, this->entityType.form + 0x67)) { - gScreenTransition.unk |= (1 << (this->entityType).form); + gScreenTransition.field_0xac |= (1 << (this->entityType).form); } else { - gScreenTransition.unk &= ~(1 << (this->entityType).form); + gScreenTransition.field_0xac &= ~(1 << (this->entityType).form); } } diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index 09c942e7..3ebb104f 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -6,25 +6,13 @@ #include "room.h" #include "textbox.h" -typedef struct { - /*0x00*/ u8 filler[0x2C]; - /*0x2C*/ u8 unk; -} ScreenTransition; - -typedef struct { - u8 filler[0xa8]; - Stats stats; -} struct_02002A40; - extern void (*gUnk_081115C0[])(Entity*); extern void (*gUnk_081115D0[])(Entity*); -extern ScreenTransition gScreenTransition; extern u16 gUnk_081115DC[]; extern u8 gUnk_08111618[]; extern u32* gUnk_081115EC[]; -extern struct_02002A40 gUnk_02002A40; extern u8 gUnk_08111623[]; extern u8 gUnk_0811162B[]; extern u16 gUnk_08111664[]; @@ -60,7 +48,7 @@ void sub_08068A1C(Entity* this) { int offset; (this->entityType).parameter = (this->entityType).form; - if (gScreenTransition.unk != 0) { + if (gScreenTransition.field_0x24[8] != 0) { offset = 6; bVar1 = 3; @@ -114,7 +102,7 @@ void sub_08068AA4(Entity* this) { } void sub_08068ADC(Entity* this) { - if (gScreenTransition.unk == 2) { + if (gScreenTransition.field_0x24[8] == 2) { GetNextFrame(this); } sub_0806FD3C(this); diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index 32b9c77a..7d0daab7 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -4,6 +4,7 @@ #include "flags.h" #include "textbox.h" #include "link.h" +#include "structures.h" extern void sub_0805E3A0(Entity*, u32); extern void StartCutscene(Entity*, void*); diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c index bedf82be..9c9cbe51 100644 --- a/src/npc/mayorHagen.c +++ b/src/npc/mayorHagen.c @@ -6,6 +6,8 @@ #include "sprite.h" #include "textbox.h" #include "npc.h" +#include "structures.h" + extern void sub_0807DD50(Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c index d9d54769..e20d6ea6 100644 --- a/src/npc/mutoh.c +++ b/src/npc/mutoh.c @@ -4,6 +4,7 @@ #include "flags.h" #include "textbox.h" #include "npc.h" +#include "structures.h" extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); diff --git a/src/npc/postman.c b/src/npc/postman.c index e2ed44c8..6df8f21b 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -3,6 +3,7 @@ #include "npc.h" #include "textbox.h" #include "link.h" +#include "structures.h" typedef struct { u8 filler[7]; diff --git a/src/npc/simon.c b/src/npc/simon.c index 73e6da35..d30b869a 100644 --- a/src/npc/simon.c +++ b/src/npc/simon.c @@ -4,11 +4,6 @@ #include "room.h" #include "flags.h" -typedef struct { - u8 filler[9]; - u8 unk; -} ScreenTransition; - typedef struct { u8 filler[4]; u32 unk; @@ -21,7 +16,6 @@ extern void DoFade(u32, u32); extern void gUnk_0813AD60; extern void gUnk_0813AD74; -extern ScreenTransition gScreenTransition; void Simon(Entity *this) { @@ -37,7 +31,7 @@ void Simon(Entity *this) void sub_0806C224(void) { DoExitTransition(&gUnk_0813AD60); - gScreenTransition.unk = 6; + gScreenTransition.transitionType = 6; } void Simon_CreateChest(Entity *this) @@ -51,7 +45,7 @@ void sub_0806C280(void) { SetGlobalFlag(MAROYA_WAKEUP); DoExitTransition(&gUnk_0813AD74); - gScreenTransition.unk = 6; + gScreenTransition.transitionType = 6; } void sub_0806C2A0(u32 *param_1,struct_0806C2A0 *param_2) diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index c0b1dd76..60748042 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -4,6 +4,7 @@ #include "link.h" #include "textbox.h" #include "flags.h" +#include "structures.h" typedef struct { u8 frame1; diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c index 60f9905b..620483b3 100644 --- a/src/npc/windTribespeople.c +++ b/src/npc/windTribespeople.c @@ -3,6 +3,7 @@ #include "npc.h" #include "textbox.h" #include "flags.h" +#include "structures.h" extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0807DD50(Entity*); diff --git a/src/object/windcrest.c b/src/object/windcrest.c index 231eb425..3b883f4e 100644 --- a/src/object/windcrest.c +++ b/src/object/windcrest.c @@ -2,11 +2,6 @@ #include "entity.h" #include "functions.h" -typedef struct { - u8 filler[64]; - u32 windcrests; -} struct_02002A40; - extern void sub_0807DD64(Entity*); extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); @@ -15,7 +10,6 @@ extern void PlaySFX(u32); extern Entity* CreateFx (Entity*, u32, u32); extern u8 gUnk_08125010; -extern struct_02002A40 gUnk_02002A40; void Windcrest(Entity *this) { diff --git a/src/room.c b/src/room.c index 202a5bf9..4246c675 100644 --- a/src/room.c +++ b/src/room.c @@ -234,7 +234,7 @@ extern EntityData gUnk_080D6210; void sub_0804B5BC(void) { - if ((u16)gScreenTransition.startPos.HALF.y > 0x40) + if ((u16)gScreenTransition.playerStartPos.HALF.y > 0x40) LoadRoomEntityList(&gUnk_080D6210); } @@ -1024,7 +1024,7 @@ void sub_0804C018(void) { SetTile(0x4072, 0xc47, 1); if (CheckGlobalFlag(MAZE_CLEAR)) - if (gScreenTransition.startPos.WORD == 0x2780078) // todo: wtf + if (gScreenTransition.playerStartPos.WORD == 0x2780078) // todo: wtf PlaySFX(0x72); ClearGlobalFlag(MAZE_CLEAR); From 9705996f787772c736d9753b8fba755ab2a821f5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 5 Aug 2020 00:19:44 -0700 Subject: [PATCH 8/9] rescinded entity changes, other fixes --- include/entity.h | 3 +-- include/functions.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/include/entity.h b/include/entity.h index 03dd4772..e717c9e1 100644 --- a/include/entity.h +++ b/include/entity.h @@ -26,8 +26,7 @@ typedef struct { } BoundingBox; typedef struct Entity { - /*0x00*/ u16 unk0; - /*0x02*/ u8 filler2[0x2]; + /*0x00*/ u32* field_0x0; /*0x04*/ struct Entity* field_0x4; /*0x08*/ EntityType entityType; /*0x0c*/ u8 action; diff --git a/include/functions.h b/include/functions.h index da093417..fadb770d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -39,6 +39,7 @@ extern void UpdateAnimationVariableFrames(Entity*, u32); extern void CopyPositionAndSpriteOffset(Entity*, Entity*); extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32); extern u32 LoadFixedGFX(Entity*, u32); +extern void ExecuteScriptCommandSet(Entity*, void *); // Unidentified extern void sub_0806ED78(Entity*); @@ -204,5 +205,4 @@ extern u32 sub_0800445C(Entity*); extern void sub_0807A108(void); extern void sub_0801766C(Entity*); extern void sub_08004168(Entity*); -extern void ExecuteScriptCommandSet(Entity*, void *); #endif \ No newline at end of file From 1002af33602ddf1dbe2e8dd9500622516e02ca41 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 5 Aug 2020 00:43:06 -0700 Subject: [PATCH 9/9] oops --- .gitignore | 1 + hyrulefield.sna | Bin 84890 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 hyrulefield.sna diff --git a/.gitignore b/.gitignore index babe0b21..d1b99ebd 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ types_*.taghl !sound/programmable_wave_samples/*.pcm _Deparsed_XSubs.pm *.py +*.sna \ No newline at end of file diff --git a/hyrulefield.sna b/hyrulefield.sna deleted file mode 100644 index 0f6a50b4ee5c910e6223eab8b211da66c87278d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84890 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