diff options
author | YamaArashi <shadow962@live.com> | 2016-10-27 21:59:00 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-10-27 22:08:38 -0700 |
commit | 5a9ece239b989316a8834ccb1b87f4dbc2701e77 (patch) | |
tree | f1becdfafbc94eb835246d33aadba14500af08a1 | |
parent | 13965060b2b5f79f61643adf639a91a8e327b2d8 (diff) |
finish decompiling link NPC code
-rw-r--r-- | asm/rom4.s | 826 | ||||
-rw-r--r-- | include/fieldmap.h | 112 | ||||
-rw-r--r-- | src/diploma.c | 2 | ||||
-rw-r--r-- | src/lottery_corner.c | 1 | ||||
-rw-r--r-- | src/option_menu.c | 2 | ||||
-rw-r--r-- | src/pokedex.c | 2 | ||||
-rw-r--r-- | src/rom4.c | 277 | ||||
-rw-r--r-- | src/start_menu.c | 1 | ||||
-rw-r--r-- | src/starter_choose.c | 2 | ||||
-rw-r--r-- | src/wild_encounter.c | 3 |
10 files changed, 346 insertions, 882 deletions
diff --git a/asm/rom4.s b/asm/rom4.s index f195272e4..caf9fd336 100644 --- a/asm/rom4.s +++ b/asm/rom4.s @@ -5,832 +5,6 @@ .text - thumb_func_start sub_8055980 -sub_8055980: @ 8055980 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r9, r1 - mov r10, r2 - mov r8, r3 - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, r9 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - mov r1, r10 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - mov r2, r8 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - bl sub_805AB54 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r4, r7, 2 - ldr r0, _08055A24 @ =gUnknown_02029818 - adds r4, r0 - lsls r5, r6, 3 - adds r5, r6 - lsls r5, 2 - ldr r0, _08055A28 @ =gMapObjects - adds r5, r0 - adds r0, r4, 0 - bl sub_8055954 - adds r0, r5, 0 - bl sub_8055970 - movs r2, 0 - movs r1, 0x1 - movs r0, 0x1 - strb r0, [r4] - strb r7, [r4, 0x1] - strb r6, [r4, 0x2] - strb r2, [r4, 0x3] - ldrb r0, [r5] - orrs r0, r1 - mov r2, r8 - ands r2, r1 - lsls r2, 1 - movs r1, 0x3 - negs r1, r1 - ands r0, r1 - orrs r0, r2 - strb r0, [r5] - movs r0, 0x2 - strb r0, [r5, 0x19] - movs r0, 0x40 - strb r0, [r5, 0x4] - mov r0, r9 - lsls r0, 16 - asrs r0, 16 - mov r9, r0 - mov r1, r10 - lsls r1, 16 - asrs r1, 16 - mov r10, r1 - adds r0, r5, 0 - mov r1, r9 - mov r2, r10 - bl sub_8055A2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08055A24: .4byte gUnknown_02029818 -_08055A28: .4byte gMapObjects - thumb_func_end sub_8055980 - - thumb_func_start sub_8055A2C -sub_8055A2C: @ 8055A2C - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - adds r1, r2, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - strh r0, [r4, 0x10] - strh r1, [r4, 0x12] - strh r0, [r4, 0x14] - strh r1, [r4, 0x16] - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - adds r2, r4, 0 - adds r2, 0xC - adds r3, r4, 0 - adds r3, 0xE - bl sub_80603CC - ldrh r0, [r4, 0xC] - adds r0, 0x8 - strh r0, [r4, 0xC] - adds r0, r4, 0 - bl FieldObjectUpdateZCoord - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8055A2C - - thumb_func_start unref_sub_8055A6C -unref_sub_8055A6C: @ 8055A6C - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r2, r1, 24 - ldr r1, _08055A94 @ =gUnknown_02029818 - lsrs r0, 22 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - beq _08055A8E - ldrb r0, [r1, 0x2] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08055A98 @ =gMapObjects - adds r1, r0 - strb r2, [r1, 0x19] -_08055A8E: - pop {r0} - bx r0 - .align 2, 0 -_08055A94: .4byte gUnknown_02029818 -_08055A98: .4byte gMapObjects - thumb_func_end unref_sub_8055A6C - - thumb_func_start unref_sub_8055A9C -unref_sub_8055A9C: @ 8055A9C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 22 - ldr r1, _08055ADC @ =gUnknown_02029818 - adds r5, r0, r1 - ldrb r1, [r5, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055AE0 @ =gMapObjects - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0x40 - beq _08055AC8 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055AE4 @ =gSprites - adds r0, r1 - bl DestroySprite -_08055AC8: - movs r0, 0 - strb r0, [r5] - ldrb r1, [r4] - subs r0, 0x2 - ands r0, r1 - strb r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08055ADC: .4byte gUnknown_02029818 -_08055AE0: .4byte gMapObjects -_08055AE4: .4byte gSprites - thumb_func_end unref_sub_8055A9C - - thumb_func_start sub_8055AE8 -sub_8055AE8: @ 8055AE8 - lsls r0, 24 - ldr r1, _08055B00 @ =gUnknown_02029818 - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055B04 @ =gMapObjects - adds r0, r1 - ldrb r0, [r0, 0x4] - bx lr - .align 2, 0 -_08055B00: .4byte gUnknown_02029818 -_08055B04: .4byte gMapObjects - thumb_func_end sub_8055AE8 - - thumb_func_start sub_8055B08 -sub_8055B08: @ 8055B08 - lsls r0, 24 - ldr r3, _08055B28 @ =gUnknown_02029818 - lsrs r0, 22 - adds r0, r3 - ldrb r3, [r0, 0x2] - lsls r0, r3, 3 - adds r0, r3 - lsls r0, 2 - ldr r3, _08055B2C @ =gMapObjects - adds r0, r3 - ldrh r3, [r0, 0x10] - strh r3, [r1] - ldrh r0, [r0, 0x12] - strh r0, [r2] - bx lr - .align 2, 0 -_08055B28: .4byte gUnknown_02029818 -_08055B2C: .4byte gMapObjects - thumb_func_end sub_8055B08 - - thumb_func_start sub_8055B30 -sub_8055B30: @ 8055B30 - lsls r0, 24 - ldr r1, _08055B48 @ =gUnknown_02029818 - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055B4C @ =gMapObjects - adds r0, r1 - ldrb r0, [r0, 0x19] - bx lr - .align 2, 0 -_08055B48: .4byte gUnknown_02029818 -_08055B4C: .4byte gMapObjects - thumb_func_end sub_8055B30 - - thumb_func_start sub_8055B50 -sub_8055B50: @ 8055B50 - lsls r0, 24 - ldr r1, _08055B6C @ =gUnknown_02029818 - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055B70 @ =gMapObjects - adds r0, r1 - ldrb r0, [r0, 0xB] - lsls r0, 28 - lsrs r0, 28 - bx lr - .align 2, 0 -_08055B6C: .4byte gUnknown_02029818 -_08055B70: .4byte gMapObjects - thumb_func_end sub_8055B50 - - thumb_func_start unref_sub_8055B74 -unref_sub_8055B74: @ 8055B74 - lsls r0, 24 - ldr r1, _08055B94 @ =gUnknown_02029818 - lsrs r0, 22 - adds r0, r1 - ldrb r1, [r0, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055B98 @ =gMapObjects - adds r0, r1 - adds r0, 0x21 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x10 - subs r0, r1 - bx lr - .align 2, 0 -_08055B94: .4byte gUnknown_02029818 -_08055B98: .4byte gMapObjects - thumb_func_end unref_sub_8055B74 - - thumb_func_start sub_8055B9C -sub_8055B9C: @ 8055B9C - push {r4-r6,lr} - movs r2, 0 - ldr r5, _08055BE0 @ =gUnknown_02029818 - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 16 - asrs r3, r1, 16 -_08055BAA: - lsls r0, r2, 2 - adds r1, r0, r5 - ldrb r0, [r1] - cmp r0, 0 - beq _08055BE8 - ldrb r0, [r1, 0x3] - cmp r0, 0 - beq _08055BBE - cmp r0, 0x2 - bne _08055BE8 -_08055BBE: - ldrb r1, [r1, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055BE4 @ =gMapObjects - adds r1, r0, r1 - movs r6, 0x10 - ldrsh r0, [r1, r6] - cmp r0, r4 - bne _08055BE8 - movs r6, 0x12 - ldrsh r0, [r1, r6] - cmp r0, r3 - bne _08055BE8 - adds r0, r2, 0 - b _08055BF4 - .align 2, 0 -_08055BE0: .4byte gUnknown_02029818 -_08055BE4: .4byte gMapObjects -_08055BE8: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _08055BAA - movs r0, 0x4 -_08055BF4: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8055B9C - - thumb_func_start sub_8055BFC -sub_8055BFC: @ 8055BFC - push {r4-r6,lr} - lsls r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - adds r2, r3, 0 - lsrs r0, 22 - ldr r1, _08055C2C @ =gUnknown_02029818 - adds r5, r0, r1 - ldrb r1, [r5, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055C30 @ =gMapObjects - adds r6, r0, r1 - ldrb r0, [r5] - cmp r0, 0 - beq _08055C58 - cmp r3, 0xA - bls _08055C34 - ldrb r0, [r6] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r6] - b _08055C58 - .align 2, 0 -_08055C2C: .4byte gUnknown_02029818 -_08055C30: .4byte gMapObjects -_08055C34: - ldr r4, _08055C60 @ =gUnknown_082166D8 - ldr r1, _08055C64 @ =gUnknown_082166A0 - ldrb r0, [r5, 0x3] - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - bl _call_via_r3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - bl _call_via_r2 -_08055C58: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08055C60: .4byte gUnknown_082166D8 -_08055C64: .4byte gUnknown_082166A0 - thumb_func_end sub_8055BFC - - thumb_func_start sub_8055C68 -sub_8055C68: @ 8055C68 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - ldr r4, _08055C84 @ =gUnknown_082166AC - lsls r3, r2, 2 - adds r3, r4 - ldr r3, [r3] - bl _call_via_r3 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08055C84: .4byte gUnknown_082166AC - thumb_func_end sub_8055C68 - - thumb_func_start sub_8055C88 -sub_8055C88: @ 8055C88 - movs r0, 0x1 - bx lr - thumb_func_end sub_8055C88 - - thumb_func_start sub_8055C8C -sub_8055C8C: @ 8055C8C - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - ldr r4, _08055CA8 @ =gUnknown_082166AC - lsls r3, r2, 2 - adds r3, r4 - ldr r3, [r3] - bl _call_via_r3 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08055CA8: .4byte gUnknown_082166AC - thumb_func_end sub_8055C8C - - thumb_func_start sub_8055CAC -sub_8055CAC: @ 8055CAC - movs r0, 0 - bx lr - thumb_func_end sub_8055CAC - - thumb_func_start sub_8055CB0 -sub_8055CB0: @ 8055CB0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 24 - lsrs r0, 24 - ldrb r1, [r5, 0x19] - bl npc_something3 - strb r0, [r5, 0x19] - ldrb r1, [r5, 0x19] - mov r6, sp - adds r6, 0x2 - adds r0, r5, 0 - mov r2, sp - adds r3, r6, 0 - bl FieldObjectMoveDestCoords - ldrb r0, [r4, 0x2] - ldrb r1, [r5, 0x19] - mov r2, sp - movs r3, 0 - ldrsh r2, [r2, r3] - movs r4, 0 - ldrsh r3, [r6, r4] - bl npc_080587EC - lsls r0, 24 - cmp r0, 0 - bne _08055D0E - adds r1, r5, 0 - adds r1, 0x21 - movs r0, 0x10 - strb r0, [r1] - mov r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - movs r3, 0 - ldrsh r2, [r6, r3] - adds r0, r5, 0 - bl npc_coords_shift - adds r0, r5, 0 - bl FieldObjectUpdateZCoord - movs r0, 0x1 - b _08055D10 -_08055D0E: - movs r0, 0 -_08055D10: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8055CB0 - - thumb_func_start sub_8055D18 -sub_8055D18: @ 8055D18 - push {r4,lr} - adds r4, r1, 0 - lsls r0, r2, 24 - lsrs r0, 24 - ldrb r1, [r4, 0x19] - bl npc_something3 - strb r0, [r4, 0x19] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8055D18 - - thumb_func_start sub_8055D30 -sub_8055D30: @ 8055D30 - movs r1, 0 - strb r1, [r0, 0x3] - bx lr - thumb_func_end sub_8055D30 - - thumb_func_start sub_8055D38 -sub_8055D38: @ 8055D38 - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r4, 0 - adds r5, 0x21 - ldrb r0, [r5] - subs r0, 0x1 - strb r0, [r5] - movs r0, 0x1 - strb r0, [r6, 0x3] - ldrb r0, [r4, 0x19] - adds r1, 0xC - adds r2, r4, 0 - adds r2, 0xE - bl MoveCoords - ldrb r0, [r5] - cmp r0, 0 - bne _08055D68 - adds r0, r4, 0 - bl npc_coords_shift_still - movs r0, 0x2 - strb r0, [r6, 0x3] -_08055D68: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8055D38 - - thumb_func_start npc_something3 -npc_something3: @ 8055D70 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r2, r1, 24 - subs r0, 0x1 - cmp r0, 0x9 - bhi _08055DC8 - lsls r0, 2 - ldr r1, _08055D8C @ =_08055D90 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08055D8C: .4byte _08055D90 - .align 2, 0 -_08055D90: - .4byte _08055DB8 - .4byte _08055DBC - .4byte _08055DC0 - .4byte _08055DC4 - .4byte _08055DC8 - .4byte _08055DC8 - .4byte _08055DB8 - .4byte _08055DBC - .4byte _08055DC0 - .4byte _08055DC4 -_08055DB8: - movs r0, 0x2 - b _08055DCA -_08055DBC: - movs r0, 0x1 - b _08055DCA -_08055DC0: - movs r0, 0x3 - b _08055DCA -_08055DC4: - movs r0, 0x4 - b _08055DCA -_08055DC8: - adds r0, r2, 0 -_08055DCA: - pop {r1} - bx r1 - thumb_func_end npc_something3 - - thumb_func_start npc_080587EC -npc_080587EC: @ 8055DD0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r2, 16 - lsrs r2, 16 - mov r12, r2 - lsls r3, 16 - movs r4, 0 - ldr r0, _08055E34 @ =gMapObjects - mov r9, r0 - lsrs r2, r3, 16 - mov r10, r2 - asrs r6, r3, 16 -_08055DF4: - mov r7, r12 - lsls r3, r7, 16 - mov r0, r10 - lsls r5, r0, 16 - cmp r4, r8 - beq _08055E38 - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - mov r2, r9 - adds r1, r0, r2 - movs r7, 0x10 - ldrsh r0, [r1, r7] - asrs r2, r3, 16 - cmp r0, r2 - bne _08055E1C - movs r7, 0x12 - ldrsh r0, [r1, r7] - cmp r0, r6 - beq _08055E2E -_08055E1C: - movs r7, 0x14 - ldrsh r0, [r1, r7] - cmp r0, r2 - bne _08055E38 - movs r0, 0x16 - ldrsh r1, [r1, r0] - asrs r0, r5, 16 - cmp r1, r0 - bne _08055E38 -_08055E2E: - movs r0, 0x1 - b _08055E4E - .align 2, 0 -_08055E34: .4byte gMapObjects -_08055E38: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08055DF4 - asrs r0, r3, 16 - asrs r1, r5, 16 - bl MapGridIsImpassableAt - lsls r0, 24 - lsrs r0, 24 -_08055E4E: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end npc_080587EC - - thumb_func_start sub_8055E5C -sub_8055E5C: @ 8055E5C - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, r5, 2 - ldr r0, _08055EC8 @ =gUnknown_02029818 - adds r2, r0 - ldrb r1, [r2, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055ECC @ =gMapObjects - adds r4, r0, r1 - ldrb r0, [r2] - cmp r0, 0 - beq _08055EBE - ldrb r1, [r4] - lsls r1, 30 - lsrs r1, 31 - movs r0, 0 - bl sub_805983C - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08055ED0 @ =sub_8055ED8 - movs r2, 0 - str r2, [sp] - movs r3, 0 - bl AddPseudoFieldObject - strb r0, [r4, 0x4] - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055ED4 @ =gSprites - adds r0, r1 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - strh r5, [r0, 0x2E] - ldrb r1, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r4] -_08055EBE: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08055EC8: .4byte gUnknown_02029818 -_08055ECC: .4byte gMapObjects -_08055ED0: .4byte sub_8055ED8 -_08055ED4: .4byte gSprites - thumb_func_end sub_8055E5C - - thumb_func_start sub_8055ED8 -sub_8055ED8: @ 8055ED8 - push {r4-r6,lr} - adds r5, r0, 0 - movs r0, 0x2E - ldrsh r4, [r5, r0] - lsls r4, 2 - ldr r0, _08055F3C @ =gUnknown_02029818 - adds r4, r0 - ldrb r1, [r4, 0x2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08055F40 @ =gMapObjects - adds r6, r0, r1 - ldrh r0, [r6, 0xC] - strh r0, [r5, 0x20] - ldrh r0, [r6, 0xE] - strh r0, [r5, 0x22] - ldrb r0, [r6, 0xB] - lsrs r0, 4 - adds r1, r5, 0 - movs r2, 0x1 - bl SetObjectSubpriorityByZCoord - ldrb r0, [r6, 0xB] - lsrs r0, 4 - bl ZCoordToPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - ldrb r0, [r4, 0x3] - cmp r0, 0 - bne _08055F44 - ldrb r0, [r6, 0x19] - bl FieldObjectDirectionToImageAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl StartSpriteAnim - b _08055F56 - .align 2, 0 -_08055F3C: .4byte gUnknown_02029818 -_08055F40: .4byte gMapObjects -_08055F44: - ldrb r0, [r6, 0x19] - bl get_go_image_anim_num - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl StartSpriteAnimIfDifferent -_08055F56: - adds r0, r5, 0 - movs r1, 0 - bl sub_806487C - ldrb r0, [r6] - lsls r0, 29 - cmp r0, 0 - bge _08055F88 - ldrh r0, [r5, 0x3C] - movs r1, 0x4 - ands r1, r0 - lsls r1, 16 - adds r3, r5, 0 - adds r3, 0x3E - lsrs r1, 18 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] -_08055F88: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8055ED8 - thumb_func_start mapconnection_get_mapheader mapconnection_get_mapheader: @ 8055F90 push {lr} diff --git a/include/fieldmap.h b/include/fieldmap.h index a7a45218d..44f31d5a4 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -57,21 +57,21 @@ struct WarpEvent struct CoordEvent { - s16 x, y; - u8 filler_4[0x2]; - u16 trigger; - u16 index; - u8 filler_A[0x2]; - u8 *script; + s16 x, y; + u8 filler_4[0x2]; + u16 trigger; + u16 index; + u8 filler_A[0x2]; + u8 *script; }; struct BgEvent { - s16 x, y; - u8 filler_4; - u8 kind; - s16 filler_6; - u8 *script; + s16 x, y; + u8 filler_4; + u8 kind; + s16 filler_6; + u8 *script; }; struct MapEvents @@ -121,41 +121,61 @@ struct MapHeader struct MapObject { - u32 active:1; - u32 mapobj_bit_1:1; - u32 mapobj_bit_2:1; - u32 mapobj_bit_3:1; - u32 mapobj_bit_4:1; - u32 mapobj_bit_5:1; - u32 mapobj_bit_6:1; - u32 mapobj_bit_7:1; - u32 mapobj_bit_8:1; - u32 mapobj_bit_9:1; - u32 mapobj_bit_10:1; - u32 mapobj_bit_11:1; - u32 mapobj_bit_12:1; - u32 mapobj_bit_13:1; - u32 mapobj_bit_14:1; - u32 mapobj_bit_15:1; - u32 mapobj_bit_16:1; - u32 mapobj_bit_17:1; - u32 mapobj_bit_18:1; - u32 mapobj_bit_19:1; - u32 mapobj_bit_20:1; - u32 mapobj_bit_21:1; - u32 mapobj_bit_22:1; - u32 mapobj_bit_23:1; - u32 mapobj_bit_24:1; - u32 mapobj_bit_25:1; - u32 mapobj_bit_26:1; - u32 mapobj_bit_27:1; - u32 mapobj_bit_28:1; - u32 mapobj_bit_29:1; - u32 mapobj_bit_30:1; - u32 mapobj_bit_31:1; - u8 spriteId; - u8 graphicsId; - u8 filler[0x1E]; + /*0x00*/ u32 active:1; + u32 mapobj_bit_1:1; + u32 mapobj_bit_2:1; + u32 mapobj_bit_3:1; + u32 mapobj_bit_4:1; + u32 mapobj_bit_5:1; + u32 mapobj_bit_6:1; + u32 mapobj_bit_7:1; + /*0x01*/ u32 mapobj_bit_8:1; + u32 mapobj_bit_9:1; + u32 mapobj_bit_10:1; + u32 mapobj_bit_11:1; + u32 mapobj_bit_12:1; + u32 mapobj_bit_13:1; + u32 mapobj_bit_14:1; + u32 mapobj_bit_15:1; + /*0x02*/ u32 mapobj_bit_16:1; + u32 mapobj_bit_17:1; + u32 mapobj_bit_18:1; + u32 mapobj_bit_19:1; + u32 mapobj_bit_20:1; + u32 mapobj_bit_21:1; + u32 mapobj_bit_22:1; + u32 mapobj_bit_23:1; + /*0x03*/ u32 mapobj_bit_24:1; + u32 mapobj_bit_25:1; + u32 mapobj_bit_26:1; + u32 mapobj_bit_27:1; + u32 mapobj_bit_28:1; + u32 mapobj_bit_29:1; + u32 mapobj_bit_30:1; + u32 mapobj_bit_31:1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 graphicsId; + /*0x06*/ u8 animPattern; + /*0x07*/ u8 trainerType; + /*0x08*/ u8 localId; + /*0x09*/ u8 mapNum; + /*0x0A*/ u8 mapGroup; + /*0x0B*/ u8 mapobj_unk_0B_0:4; + u8 elevation:4; + /*0x0C*/ struct Coords16 coords1; + /*0x10*/ struct Coords16 coords2; + /*0x14*/ struct Coords16 coords3; + /*0x18*/ u8 mapobj_unk_18; + /*0x19*/ u8 mapobj_unk_19; + /*0x1A*/ u8 mapobj_unk_1A; + /*0x1B*/ u8 mapobj_unk_1B; + /*0x1C*/ u8 mapobj_unk_1C; + /*0x1D*/ u8 trainerRange_berryTreeId; + /*0x1E*/ u8 mapobj_unk_1E; + /*0x1E*/ u8 mapobj_unk_1F; + /*0x20*/ u8 mapobj_unk_20; + /*0x21*/ u8 mapobj_unk_21; + /*size = 0x24*/ }; struct MapObjectGraphicsInfo diff --git a/src/diploma.c b/src/diploma.c index 44e55010e..7e3a94514 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -1,4 +1,4 @@ -#include "gba/gba.h" +#include "global.h" #include "main.h" #include "menu.h" #include "palette.h" diff --git a/src/lottery_corner.c b/src/lottery_corner.c index 67499f6d2..4085bcff7 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -1,4 +1,3 @@ -#include "gba/gba.h" #include "global.h" #include "pokemon.h" #include "rng.h" diff --git a/src/option_menu.c b/src/option_menu.c index abd295007..ede91acf0 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -1,4 +1,4 @@ -#include "gba/gba.h" +#include "global.h" #include "main.h" #include "menu.h" #include "palette.h" diff --git a/src/pokedex.c b/src/pokedex.c index b67deb84d..2d7059395 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1,4 +1,4 @@ -#include "gba/gba.h" +#include "global.h" #include "main.h" #include "menu.h" #include "palette.h" diff --git a/src/rom4.c b/src/rom4.c index 7650ab30b..9b4abd5e5 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -8,6 +8,7 @@ #include "palette.h" #include "text.h" #include "link.h" +#include "sprite.h" #ifdef SAPPHIRE #define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain @@ -118,6 +119,10 @@ extern u8 gUnknown_081A4508[]; extern struct UCoords32 gUnknown_0821664C[]; +extern u8 (*gUnknown_082166A0[])(struct UnkMapObjStruct *, struct MapObject *, u8); +extern u8 (*gUnknown_082166AC[])(struct UnkMapObjStruct *, struct MapObject *, u8); +extern void (*gUnknown_082166D8[])(struct UnkMapObjStruct *, struct MapObject *); + extern struct MapData * const gMapAttributes[]; extern struct MapHeader * const * const gMapGroups[]; extern const struct WarpData gDummyWarpData; @@ -144,6 +149,8 @@ extern u8 sub_80BBB24(void); extern u16 MapGridGetMetatileBehaviorAt(int, int); extern u8 *sub_80682A8(void *, u8, u8); extern u8 *sub_8068E24(struct UnkStruct_8054FF8_Substruct *); +extern bool8 MapGridIsImpassableAt(s16, s16); +extern u8 ZCoordToPriority(u8); void sub_8053050(void); void warp_in(void); @@ -223,11 +230,18 @@ void sub_8055840(u8 *); void sub_805585C(void); bool32 sub_8055870(void); void sub_8055980(u8, s16, s16, u8); +void sub_8055A2C(struct MapObject *, s16, s16); void sub_80555B0(int, int, struct UnkStruct_8054FF8 *); u8 sub_8055AE8(u8); +void sub_8055B08(u8, u16 *, u16 *); u8 sub_8055B30(u8); +u8 sub_8055B50(u8); +u8 sub_8055B9C(s16, s16); void sub_8055BFC(u8, u8); +u8 npc_something3(u8, u8); +u8 npc_080587EC(u8, u8, s16, s16); void sub_8055E5C(u8); +void sub_8055ED8(struct Sprite *); void sub_8056C50(u16, u16); void sub_8052F5C(void) @@ -2410,9 +2424,9 @@ bool32 sub_8055940(void) return TRUE; } -void sub_8055954(u32 *a1) +void sub_8055954(struct UnkMapObjStruct *a1) { - *a1 = 0; + memset(a1, 0, sizeof(struct UnkMapObjStruct)); } void strange_npc_table_clear(void) @@ -2424,3 +2438,262 @@ void sub_8055970(void *a1) { memset(a1, 0, 36); } + +void sub_8055980(u8 a1, s16 x, s16 y, u8 a4) +{ + u8 mapObjId = sub_805AB54(); + struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + + sub_8055954(unkMapObjStruct); + sub_8055970(mapObj); + + unkMapObjStruct->a = 1; + unkMapObjStruct->b = a1; + unkMapObjStruct->c = mapObjId; + unkMapObjStruct->d = 0; + + mapObj->active = 1; + mapObj->mapobj_bit_1 = a4; + mapObj->mapobj_unk_19 = 2; + mapObj->spriteId = 64; + + sub_8055A2C(mapObj, x, y); +} + +void sub_8055A2C(struct MapObject *mapObj, s16 x, s16 y) +{ + mapObj->coords2.x = x; + mapObj->coords2.y = y; + mapObj->coords3.x = x; + mapObj->coords3.y = y; + sub_80603CC(x, y, &mapObj->coords1.x, &mapObj->coords1.y); + mapObj->coords1.x += 8; + FieldObjectUpdateZCoord(mapObj); +} + +void unref_sub_8055A6C(u8 a1, u8 a2) +{ + if (gUnknown_02029818[a1].a) + { + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + mapObj->mapobj_unk_19 = a2; + } +} + +void unref_sub_8055A9C(u8 a1) +{ + struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; + u8 mapObjId = unkMapObjStruct->c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + if (mapObj->spriteId != 64 ) + DestroySprite(&gSprites[mapObj->spriteId]); + unkMapObjStruct->a = 0; + mapObj->active = 0; +} + +u8 sub_8055AE8(u8 a1) +{ + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->spriteId; +} + +void sub_8055B08(u8 a1, u16 *x, u16 *y) +{ + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + *x = mapObj->coords2.x; + *y = mapObj->coords2.y; +} + +u8 sub_8055B30(u8 a1) +{ + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->mapobj_unk_19; +} + +u8 sub_8055B50(u8 a1) +{ + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->mapobj_unk_0B_0; +} + +s32 unref_sub_8055B74(u8 a1) +{ + u8 mapObjId = gUnknown_02029818[a1].c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return 16 - (s8)mapObj->mapobj_unk_21; +} + +u8 sub_8055B9C(s16 x, s16 y) +{ + u8 i; + for (i = 0; i < 4; i++) + { + if (gUnknown_02029818[i].a + && (gUnknown_02029818[i].d == 0 || gUnknown_02029818[i].d == 2)) + { + struct MapObject *mapObj = &gMapObjects[gUnknown_02029818[i].c]; + if (mapObj->coords2.x == x && mapObj->coords2.y == y) + return i; + } + } + return 4; +} + +void sub_8055BFC(u8 a1, u8 a2) +{ + struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; + u8 mapObjId = unkMapObjStruct->c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + + if (unkMapObjStruct->a) + { + if (a2 > 10) + mapObj->mapobj_bit_2 = 1; + else + gUnknown_082166D8[gUnknown_082166A0[unkMapObjStruct->d](unkMapObjStruct, mapObj, a2)](unkMapObjStruct, mapObj); + } +} + +u8 sub_8055C68(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + return gUnknown_082166AC[a3](unkMapObjStruct, mapObj, a3); +} + +u8 sub_8055C88(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + return 1; +} + +u8 sub_8055C8C(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + return gUnknown_082166AC[a3](unkMapObjStruct, mapObj, a3); +} + +u8 sub_8055CAC(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + return 0; +} + +u8 sub_8055CB0(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + s16 x, y; + + mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); + FieldObjectMoveDestCoords(mapObj, mapObj->mapobj_unk_19, &x, &y); + + if (npc_080587EC(unkMapObjStruct->c, mapObj->mapobj_unk_19, x, y)) + { + return 0; + } + else + { + mapObj->mapobj_unk_21 = 16; + npc_coords_shift(mapObj, x, y); + FieldObjectUpdateZCoord(mapObj); + return 1; + } +} + +u8 sub_8055D18(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj, u8 a3) +{ + mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); + return 0; +} + +void sub_8055D30(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj) +{ + unkMapObjStruct->d = 0; +} + +void sub_8055D38(struct UnkMapObjStruct *unkMapObjStruct, struct MapObject *mapObj) +{ + mapObj->mapobj_unk_21--; + unkMapObjStruct->d = 1; + MoveCoords(mapObj->mapobj_unk_19, &mapObj->coords1.x, &mapObj->coords1.y); + if (!mapObj->mapobj_unk_21) + { + npc_coords_shift_still(mapObj); + unkMapObjStruct->d = 2; + } +} + +u8 npc_something3(u8 a1, u8 a2) +{ + switch (a1 - 1) + { + case 0: + case 6: + return 2; + case 1: + case 7: + return 1; + case 2: + case 8: + return 3; + case 3: + case 9: + return 4; + } + return a2; +} + +u8 npc_080587EC(u8 a1, u8 a2, s16 x, s16 y) +{ + u8 i; + for (i = 0; i < 16; i++) + { + if (i != a1) + { + if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) + || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y)) + { + return 1; + } + } + } + return MapGridIsImpassableAt(x, y); +} + +void sub_8055E5C(u8 a1) +{ + struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[a1]; + u8 mapObjId = unkMapObjStruct->c; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + struct Sprite *sprite; + + if (unkMapObjStruct->a) + { + u8 val = sub_805983C(0, mapObj->mapobj_bit_1); + mapObj->spriteId = AddPseudoFieldObject(val, sub_8055ED8, 0, 0, 0); + sprite = &gSprites[mapObj->spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = a1; + mapObj->mapobj_bit_2 = 0; + } +} + +void sub_8055ED8(struct Sprite *sprite) +{ + struct UnkMapObjStruct *unkMapObjStruct = &gUnknown_02029818[sprite->data0]; + struct MapObject *mapObj = &gMapObjects[unkMapObjStruct->c]; + sprite->pos1.x = mapObj->coords1.x; + sprite->pos1.y = mapObj->coords1.y; + SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); + sprite->oam.priority = ZCoordToPriority(mapObj->elevation); + if (!unkMapObjStruct->d) + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->mapobj_unk_19)); + else + StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->mapobj_unk_19)); + sub_806487C(sprite, 0); + if (mapObj->mapobj_bit_2) + { + sprite->invisible = ((sprite->data7 & 4) >> 2); + sprite->data7++; + } +} diff --git a/src/start_menu.c b/src/start_menu.c index 0c2acc5b7..3c5971dd4 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -1,4 +1,3 @@ -#include "gba/gba.h" #include "global.h" #include "main.h" #include "menu.h" diff --git a/src/starter_choose.c b/src/starter_choose.c index d17ba32ee..d4580cd94 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -1,4 +1,4 @@ -#include "gba/gba.h" +#include "global.h" #include "main.h" #include "menu.h" #include "palette.h" diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 0a797d9a9..f4befa466 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1,6 +1,5 @@ -#include "gba/gba.h" -#include "fieldmap.h" #include "global.h" +#include "fieldmap.h" #include "pokemon.h" #include "rng.h" #include "script.h" |