summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom4.s826
-rw-r--r--include/fieldmap.h112
-rw-r--r--src/diploma.c2
-rw-r--r--src/lottery_corner.c1
-rw-r--r--src/option_menu.c2
-rw-r--r--src/pokedex.c2
-rw-r--r--src/rom4.c277
-rw-r--r--src/start_menu.c1
-rw-r--r--src/starter_choose.c2
-rw-r--r--src/wild_encounter.c3
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"