summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_800D090.s2
-rw-r--r--asm/code_801D760.s34
-rw-r--r--asm/code_8041AD0.s221
-rw-r--r--asm/code_80521D0.s14
-rw-r--r--asm/code_808EAB0.s6
-rw-r--r--asm/code_8092334.s610
-rw-r--r--asm/code_8095014.s6
-rw-r--r--asm/code_809747C.s2
-rw-r--r--asm/code_809D148.s30
-rw-r--r--asm/event_flag.s28
-rw-r--r--asm/friend_area_1.s209
-rw-r--r--asm/pokemon.s6
-rw-r--r--asm/wonder_mail.s12
-rw-r--r--data/data_80F4278.s308
-rw-r--r--include/constants/friend_area.h60
-rw-r--r--include/friend_area.h28
-rw-r--r--include/save.h2
-rwxr-xr-xld_script.txt5
-rw-r--r--src/code_2.c4
-rw-r--r--src/code_8041AD0.c300
-rw-r--r--src/code_80428A0.c70
-rw-r--r--src/code_808DAB4.c17
-rw-r--r--src/code_809017C.c42
-rw-r--r--src/code_8092334.c84
-rw-r--r--src/friend_area.c722
-rw-r--r--src/friend_area_1.c90
-rw-r--r--src/save_mid.c11
-rw-r--r--sym_ewram.txt2
-rw-r--r--sym_ewram2.txt2
29 files changed, 1724 insertions, 1203 deletions
diff --git a/asm/code_800D090.s b/asm/code_800D090.s
index 77a7b90..a77aeab 100644
--- a/asm/code_800D090.s
+++ b/asm/code_800D090.s
@@ -6345,7 +6345,7 @@ _08010004:
movs r0, 0
b _0801000E
.align 2, 0
-_08010008: .4byte gUnknown_203B468
+_08010008: .4byte gFriendAreas
_0801000C:
movs r0, 0x1
_0801000E:
diff --git a/asm/code_801D760.s b/asm/code_801D760.s
index 4104981..d74e5af 100644
--- a/asm/code_801D760.s
+++ b/asm/code_801D760.s
@@ -20,7 +20,7 @@ sub_801D894:
_0801D8A8: .4byte gUnknown_203B250
_0801D8AC:
ldrb r0, [r1, 0x6]
- bl sub_8092524
+ bl GetFriendAreaName
_0801D8B2:
add r2, sp, 0x68
add r1, sp, 0x4
@@ -7330,7 +7330,7 @@ _080212BC:
bl sub_802132C
lsls r0, 24
lsrs r0, 24
- bl sub_8092544
+ bl GetFriendAreaPrice
ldr r1, _080212E8
ldr r1, [r1]
movs r2, 0x98
@@ -7632,7 +7632,7 @@ _08021502:
movs r2, 0x1
bl sub_8092578
adds r0, r5, 0
- bl sub_8092544
+ bl GetFriendAreaPrice
ldr r1, _08021570
ldr r1, [r1]
movs r5, 0x98
@@ -7694,7 +7694,7 @@ _0802159C:
bl sub_8013800
adds r4, r0, 0
adds r0, r5, 0
- bl sub_8092524
+ bl GetFriendAreaName
adds r2, r0, 0
mov r1, r8
ldr r0, [r1]
@@ -7705,10 +7705,10 @@ _0802159C:
bl xxx_call_draw_string
b _08021632
.align 2, 0
-_080215D4: .4byte gUnknown_203B468
+_080215D4: .4byte gFriendAreas
_080215D8:
adds r0, r5, 0
- bl sub_8092524
+ bl GetFriendAreaName
adds r2, r0, 0
mov r0, r10
ldr r1, _08021608
@@ -7737,7 +7737,7 @@ _0802160C:
bl sub_8013800
adds r4, r0, 0
adds r0, r7, 0
- bl sub_8092524
+ bl GetFriendAreaName
adds r2, r0, 0
mov r5, r8
ldr r0, [r5]
@@ -7821,7 +7821,7 @@ _080216A8:
ble _08021696
b _080216F2
.align 2, 0
-_080216B0: .4byte gUnknown_203B468
+_080216B0: .4byte gFriendAreas
_080216B4:
movs r4, 0x1
adds r6, r1, 0
@@ -7834,7 +7834,7 @@ _080216B8:
bne _080216EC
lsls r0, r4, 24
lsrs r0, 24
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -7861,7 +7861,7 @@ _080216F2:
pop {r1}
bx r1
.align 2, 0
-_080216FC: .4byte gUnknown_203B468
+_080216FC: .4byte gFriendAreas
thumb_func_end sub_8021664
thumb_func_start sub_8021700
@@ -7888,7 +7888,7 @@ _08021716:
ble _08021716
b _0802176A
.align 2, 0
-_08021728: .4byte gUnknown_203B468
+_08021728: .4byte gFriendAreas
_0802172C:
movs r4, 0x1
_0802172E:
@@ -7900,7 +7900,7 @@ _0802172E:
bne _08021764
lsls r0, r4, 24
lsrs r0, 24
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -7909,7 +7909,7 @@ _0802172E:
beq _08021758
b _08021764
.align 2, 0
-_08021750: .4byte gUnknown_203B468
+_08021750: .4byte gFriendAreas
_08021754:
movs r0, 0
b _0802176C
@@ -9188,7 +9188,7 @@ _080221A0: .4byte gUnknown_203B290
_080221A4:
ldr r0, [r4]
ldrb r0, [r0, 0x10]
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -9643,7 +9643,7 @@ _080224F8:
subs r0, r1
str r0, [r2]
ldrb r0, [r3, 0x10]
- bl sub_80925EC
+ bl UnlockFriendArea
movs r0, 0xA6
lsls r0, 1
bl sub_8011988
@@ -9690,7 +9690,7 @@ _08022568:
strb r0, [r1, 0x10]
ldr r0, [r4]
ldrb r0, [r0, 0x10]
- bl sub_8092544
+ bl GetFriendAreaPrice
ldr r1, [r4]
str r0, [r1, 0xC]
movs r0, 0xB
@@ -9705,7 +9705,7 @@ _0802258C:
strb r0, [r1, 0x10]
ldr r0, [r4]
ldrb r0, [r0, 0x10]
- bl sub_8092544
+ bl GetFriendAreaPrice
ldr r1, [r4]
str r0, [r1, 0xC]
movs r0, 0x10
diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s
index 8f19c5d..15ac13b 100644
--- a/asm/code_8041AD0.s
+++ b/asm/code_8041AD0.s
@@ -5,227 +5,6 @@
.text
- thumb_func_start sub_80420E8
-sub_80420E8:
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, [r1, 0x8]
- ldr r0, _0804211C
- ldr r0, [r0]
- ldr r2, _08042120
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08042106
- adds r0, r1, 0
- bl sub_806F62C
- adds r1, r0, 0
-_08042106:
- cmp r1, 0x1
- beq _08042124
- cmp r1, 0x1
- bcc _08042116
- cmp r1, 0x2
- beq _08042128
- cmp r1, 0x3
- beq _0804212C
-_08042116:
- movs r1, 0x8
- b _0804212E
- .align 2, 0
-_0804211C: .4byte gUnknown_203B418
-_08042120: .4byte 0x0000016d
-_08042124:
- movs r1, 0x9
- b _0804212E
-_08042128:
- movs r1, 0xA
- b _0804212E
-_0804212C:
- movs r1, 0xB
-_0804212E:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl sub_8041550
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80420E8
-
- thumb_func_start sub_8042148
-sub_8042148:
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _08042164
- bl sub_80421C0
- movs r1, 0x9F
- lsls r1, 1
- adds r0, r4, 0
- movs r2, 0x1
- bl sub_804151C
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08042164: .4byte 0x000001a7
- thumb_func_end sub_8042148
-
- thumb_func_start nullsub_93
-nullsub_93:
- bx lr
- thumb_func_end nullsub_93
-
- thumb_func_start sub_804216C
-sub_804216C:
- push {lr}
- adds r0, r1, 0
- cmp r2, 0x1
- bne _0804217E
- movs r1, 0xF8
- movs r2, 0x1
- bl sub_804151C
- b _08042186
-_0804217E:
- movs r1, 0xF9
- movs r2, 0x1
- bl sub_804151C
-_08042186:
- pop {r0}
- bx r0
- thumb_func_end sub_804216C
-
- thumb_func_start sub_804218C
-sub_804218C:
- push {lr}
- adds r0, r1, 0
- movs r1, 0x2A
- movs r2, 0x1
- bl sub_804151C
- pop {r0}
- bx r0
- thumb_func_end sub_804218C
-
- thumb_func_start sub_804219C
-sub_804219C:
- push {lr}
- movs r1, 0x90
- movs r2, 0x1
- bl sub_80416E0
- pop {r0}
- bx r0
- thumb_func_end sub_804219C
-
- thumb_func_start sub_80421AC
-sub_80421AC:
- push {lr}
- adds r0, r1, 0
- ldr r1, _080421BC
- movs r2, 0x1
- bl sub_804151C
- pop {r0}
- bx r0
- .align 2, 0
-_080421BC: .4byte 0x00000167
- thumb_func_end sub_80421AC
-
- thumb_func_start sub_80421C0
-sub_80421C0:
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r0, r1, 16
- adds r4, r0, 0
- cmp r2, 0
- bne _080421D4
- bl sub_8083E38
- b _080421E6
-_080421D4:
- adds r0, r2, 0
- bl sub_8042768
- lsls r0, 24
- cmp r0, 0
- beq _080421E6
- adds r0, r4, 0
- bl sub_8083E38
-_080421E6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80421C0
-
- thumb_func_start sub_80421EC
-sub_80421EC:
- push {r4,lr}
- lsls r1, 16
- lsrs r4, r1, 16
- bl sub_803F428
- lsls r0, 24
- cmp r0, 0
- beq _08042202
- adds r0, r4, 0
- bl sub_8083E38
-_08042202:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80421EC
-
- thumb_func_start sub_8042208
-sub_8042208:
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0
- bne _0804221C
- movs r0, 0xA9
- lsls r0, 1
- bl sub_8083E38
- b _08042234
-_0804221C:
- cmp r1, 0x1
- bne _0804222C
- ldr r0, _08042228
- bl sub_8083E38
- b _08042234
- .align 2, 0
-_08042228: .4byte 0x00000151
-_0804222C:
- movs r0, 0xA8
- lsls r0, 1
- bl sub_8083E38
-_08042234:
- pop {r0}
- bx r0
- thumb_func_end sub_8042208
-
- thumb_func_start sub_8042238
-sub_8042238:
- push {lr}
- ldr r0, [r1, 0x70]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _08042250
- ldr r0, _0804224C
- bl sub_8083E38
- b _08042258
- .align 2, 0
-_0804224C: .4byte 0x00000157
-_08042250:
- movs r0, 0xAB
- lsls r0, 1
- bl sub_8083E38
-_08042258:
- pop {r0}
- bx r0
- thumb_func_end sub_8042238
-
thumb_func_start sub_804225C
sub_804225C:
push {r4-r7,lr}
diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s
index 2f2c168..c15397c 100644
--- a/asm/code_80521D0.s
+++ b/asm/code_80521D0.s
@@ -59029,12 +59029,12 @@ _0806FB30: .4byte 0x00008df8
_0806FB34: .4byte gUnknown_80FA030
_0806FB38:
mov r0, r9
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _0806FB4E
mov r0, r9
- bl sub_80925EC
+ bl UnlockFriendArea
movs r2, 0x1
mov r10, r2
_0806FB4E:
@@ -59516,12 +59516,12 @@ _0806FED8:
movs r2, 0xA
bl sub_8092310
adds r0, r7, 0
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _0806FF34
adds r0, r7, 0
- bl sub_80925EC
+ bl UnlockFriendArea
movs r2, 0x1
mov r9, r2
_0806FF34:
@@ -113968,7 +113968,7 @@ _0808B87C:
ldr r0, _0808BA38
bl sub_8052910
adds r0, r4, 0
- bl sub_80925EC
+ bl UnlockFriendArea
movs r0, 0xD4
bl sub_8083E38
bl sub_8083600
@@ -114544,7 +114544,7 @@ sub_808BD94:
_0808BD9C:
lsls r0, r4, 24
lsrs r0, 24
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
@@ -114573,7 +114573,7 @@ _0808BDC4:
ldrb r0, [r0]
b _0808BDE2
.align 2, 0
-_0808BDDC: .4byte gUnknown_203B468
+_0808BDDC: .4byte gFriendAreas
_0808BDE0:
movs r0, 0x3A
_0808BDE2:
diff --git a/asm/code_808EAB0.s b/asm/code_808EAB0.s
index 51c049b..7c4d5df 100644
--- a/asm/code_808EAB0.s
+++ b/asm/code_808EAB0.s
@@ -2027,7 +2027,7 @@ _0808FB94:
add r9, r3
mov r1, r10
ldrb r0, [r1, 0x18]
- bl sub_8092390
+ bl GetAbilityDescription
adds r2, r0, 0
str r4, [sp]
movs r5, 0xB
@@ -2044,7 +2044,7 @@ _0808FB94:
bne _0808FBD2
b _0808FED6
_0808FBD2:
- bl sub_8092390
+ bl GetAbilityDescription
adds r2, r0, 0
str r4, [sp]
str r5, [sp, 0x4]
@@ -2310,7 +2310,7 @@ _0808FDB0:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092524
+ bl GetFriendAreaName
adds r1, r0, 0
ldr r4, _0808FEFC
adds r0, r4, 0
diff --git a/asm/code_8092334.s b/asm/code_8092334.s
index 42f5e90..7030d9b 100644
--- a/asm/code_8092334.s
+++ b/asm/code_8092334.s
@@ -5,616 +5,6 @@
.text
- thumb_func_start sub_8092404
-sub_8092404:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r7, r3, 24
- movs r6, 0
- movs r4, 0
- mov r5, r10
-_08092426:
- movs r0, 0x58
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _08092494
- ldr r0, [r0]
- adds r2, r1, r0
- ldrb r1, [r2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08092472
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- beq _08092448
- mov r0, r8
- cmp r0, 0
- beq _08092472
-_08092448:
- movs r1, 0
- ldrb r0, [r2, 0x4]
- cmp r0, 0x41
- bne _08092452
- movs r1, 0x1
-_08092452:
- cmp r1, 0
- beq _0809245A
- cmp r7, 0
- beq _08092472
-_0809245A:
- adds r0, r4, 0
- bl sub_80923D4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r9
- bne _08092472
- cmp r6, 0xF
- bgt _08092472
- strh r4, [r5]
- adds r5, 0x2
- adds r6, 0x1
-_08092472:
- adds r4, 0x1
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- ble _08092426
- lsls r0, r6, 1
- add r0, r10
- ldr r2, _08092498
- adds r1, r2, 0
- strh r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08092494: .4byte gUnknown_203B45C
-_08092498: .4byte 0x0000ffff
- thumb_func_end sub_8092404
-
- thumb_func_start sub_809249C
-sub_809249C:
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, _080924F8
- ldr r0, [r0]
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809251A
- movs r5, 0
-_080924B4:
- ldr r2, _080924FC
- movs r0, 0x58
- adds r1, r5, 0
- muls r1, r0
- ldr r0, [r2]
- adds r4, r0, r1
- ldrb r1, [r4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08092502
- adds r0, r5, 0
- bl sub_80923D4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- bne _08092502
- movs r1, 0
- ldrb r0, [r4, 0x4]
- cmp r0, 0x41
- bne _080924E2
- movs r1, 0x1
-_080924E2:
- cmp r1, 0
- bne _080924F2
- ldrb r1, [r4, 0x2]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- cmp r0, 0
- beq _08092500
-_080924F2:
- movs r7, 0
- b _08092502
- .align 2, 0
-_080924F8: .4byte gUnknown_203B468
-_080924FC: .4byte gUnknown_203B45C
-_08092500:
- strh r0, [r4]
-_08092502:
- adds r5, 0x1
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- ble _080924B4
- cmp r7, 0
- beq _0809251A
- ldr r0, _08092520
- ldr r0, [r0]
- adds r0, r6
- movs r1, 0
- strb r1, [r0]
-_0809251A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08092520: .4byte gUnknown_203B468
- thumb_func_end sub_809249C
-
- thumb_func_start sub_8092524
-sub_8092524:
- lsls r0, 24
- ldr r1, _08092530
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08092530: .4byte gFriendAreaNames
- thumb_func_end sub_8092524
-
- thumb_func_start sub_8092534
-sub_8092534:
- lsls r0, 24
- ldr r1, _08092540
- lsrs r0, 21
- adds r0, r1
- ldrb r0, [r0, 0x2]
- bx lr
- .align 2, 0
-_08092540: .4byte gUnknown_810AA90
- thumb_func_end sub_8092534
-
- thumb_func_start sub_8092544
-sub_8092544:
- lsls r0, 24
- ldr r1, _08092554
- lsrs r0, 21
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08092554: .4byte gUnknown_810AA90
- thumb_func_end sub_8092544
-
- thumb_func_start sub_8092558
-sub_8092558:
- push {lr}
- lsls r2, r1, 24
- ldr r1, _08092570
- ldr r3, _08092574
- lsrs r2, 22
- adds r2, r3
- ldr r2, [r2]
- bl sub_800D158
- pop {r0}
- bx r0
- .align 2, 0
-_08092570: .4byte gUnknown_81098A4
-_08092574: .4byte gFriendAreaNames
- thumb_func_end sub_8092558
-
- thumb_func_start sub_8092578
-sub_8092578:
- push {r4,r5,lr}
- sub sp, 0x18
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- cmp r2, 0
- beq _080925C0
- ldr r0, _080925B4
- lsls r1, r4, 3
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- add r1, sp, 0x4
- movs r2, 0x1
- bl sub_8090FEC
- ldr r1, _080925B8
- ldr r2, _080925BC
- lsls r0, r4, 2
- adds r0, r2
- ldr r2, [r0]
- add r0, sp, 0x4
- str r0, [sp]
- adds r0, r5, 0
- movs r3, 0x60
- bl sub_800D158
- b _080925CE
- .align 2, 0
-_080925B4: .4byte gUnknown_810AA90
-_080925B8: .4byte gUnknown_81098AC
-_080925BC: .4byte gFriendAreaNames
-_080925C0:
- ldr r0, _080925D8
- lsls r1, r4, 2
- adds r1, r0
- ldr r1, [r1]
- adds r0, r5, 0
- bl strcpy
-_080925CE:
- add sp, 0x18
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080925D8: .4byte gFriendAreaNames
- thumb_func_end sub_8092578
-
- thumb_func_start GetFriendAreaDescription
-GetFriendAreaDescription:
- lsls r0, 24
- ldr r1, _080925E8
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_080925E8: .4byte gFriendAreaDescriptions
- thumb_func_end GetFriendAreaDescription
-
- thumb_func_start sub_80925EC
-sub_80925EC:
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080925FC
- ldr r1, [r1]
- adds r1, r0
- movs r0, 0x1
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080925FC: .4byte gUnknown_203B468
- thumb_func_end sub_80925EC
-
- thumb_func_start sub_8092600
-sub_8092600:
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08092610
- ldr r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- bx lr
- .align 2, 0
-_08092610: .4byte gUnknown_203B468
- thumb_func_end sub_8092600
-
- thumb_func_start sub_8092614
-sub_8092614:
- push {lr}
- movs r1, 0x1
- ldr r0, _08092628
- ldr r2, [r0]
-_0809261C:
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0809262C
- movs r0, 0
- b _08092634
- .align 2, 0
-_08092628: .4byte gUnknown_203B468
-_0809262C:
- adds r1, 0x1
- cmp r1, 0x39
- ble _0809261C
- movs r0, 0x1
-_08092634:
- pop {r1}
- bx r1
- thumb_func_end sub_8092614
-
- thumb_func_start sub_8092638
-sub_8092638:
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r2, 24
- lsrs r2, 24
- mov r12, r2
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- movs r6, 0
- movs r3, 0
- ldr r2, _080926DC
- cmp r3, r5
- bge _0809266E
- ldr r1, _080926E0
- adds r3, r5, 0
-_0809265E:
- movs r7, 0
- ldrsh r0, [r1, r7]
- adds r6, r0
- adds r1, 0x8
- subs r3, 0x1
- cmp r3, 0
- bne _0809265E
- adds r3, r5, 0
-_0809266E:
- str r6, [r4, 0x8]
- ldr r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r4, 0x4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080926E8
- movs r0, 0
- strh r0, [r4, 0x2]
- ldr r1, _080926E0
- lsls r0, r3, 3
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- movs r3, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r3, r0
- bge _080926EC
- ldr r5, _080926E4
-_0809269A:
- movs r0, 0x58
- adds r1, r6, 0
- muls r1, r0
- ldr r0, [r5]
- adds r2, r0, r1
- ldrb r1, [r2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080926CC
- mov r7, r12
- cmp r7, 0
- beq _080926BA
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- bne _080926CC
-_080926BA:
- mov r0, r8
- cmp r0, 0
- beq _080926C6
- ldrb r0, [r2, 0x4]
- cmp r0, 0x41
- beq _080926CC
-_080926C6:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
-_080926CC:
- adds r3, 0x1
- adds r6, 0x1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r3, r0
- blt _0809269A
- b _080926EC
- .align 2, 0
-_080926DC: .4byte gUnknown_203B468
-_080926E0: .4byte gUnknown_810AA90
-_080926E4: .4byte gUnknown_203B45C
-_080926E8:
- strh r0, [r4, 0x2]
- strh r0, [r4]
-_080926EC:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8092638
-
- thumb_func_start sub_80926F8
-sub_80926F8:
- push {r4-r7,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r2, 24
- lsrs r7, r2, 24
- movs r5, 0
- movs r2, 0
- ldr r0, _08092780
- mov r12, r0
- cmp r2, r3
- bge _08092724
- ldr r1, _08092784
- adds r2, r3, 0
-_08092714:
- movs r6, 0
- ldrsh r0, [r1, r6]
- adds r5, r0
- adds r1, 0x8
- subs r2, 0x1
- cmp r2, 0
- bne _08092714
- adds r2, r3, 0
-_08092724:
- str r5, [r4, 0x8]
- mov r1, r12
- ldr r0, [r1]
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r4, 0x4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0809279C
- movs r0, 0
- strh r0, [r4, 0x2]
- ldr r1, _08092784
- lsls r0, r2, 3
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- movs r6, 0
- ldrsh r0, [r4, r6]
- cmp r0, 0
- ble _080927A0
- ldr r6, _08092788
- adds r2, r0, 0
-_08092752:
- movs r0, 0x58
- adds r1, r5, 0
- muls r1, r0
- ldr r0, [r6]
- adds r3, r0, r1
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08092792
- ldrb r0, [r3, 0x2]
- cmp r0, 0
- bne _08092776
- cmp r7, 0
- bne _0809278C
- ldrb r0, [r3, 0x4]
- cmp r0, 0x41
- bne _0809278C
-_08092776:
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- b _08092792
- .align 2, 0
-_08092780: .4byte gUnknown_203B468
-_08092784: .4byte gUnknown_810AA90
-_08092788: .4byte gUnknown_203B45C
-_0809278C:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
-_08092792:
- subs r2, 0x1
- adds r5, 0x1
- cmp r2, 0
- bne _08092752
- b _080927A0
-_0809279C:
- strh r0, [r4, 0x2]
- strh r0, [r4]
-_080927A0:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80926F8
-
- thumb_func_start sub_80927A8
-sub_80927A8:
- push {r4,r5,lr}
- sub sp, 0x14
- adds r3, r0, 0
- adds r2, r1, 0
- mov r0, sp
- adds r1, r3, 0
- bl sub_809486C
- movs r4, 0
- add r5, sp, 0x10
-_080927BC:
- ldr r0, _080927F0
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _080927CC
- movs r0, 0x1
- negs r0, r0
-_080927CC:
- str r0, [sp, 0x10]
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_809488C
- adds r4, 0x1
- cmp r4, 0x39
- ble _080927BC
- mov r0, sp
- bl nullsub_102
- ldr r0, [sp, 0x8]
- add sp, 0x14
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080927F0: .4byte gUnknown_203B468
- thumb_func_end sub_80927A8
-
- thumb_func_start sub_80927F4
-sub_80927F4:
- push {r4-r7,lr}
- sub sp, 0x14
- adds r3, r0, 0
- adds r2, r1, 0
- mov r0, sp
- adds r1, r3, 0
- bl sub_809485C
- movs r4, 0
- add r7, sp, 0x10
- movs r6, 0x1
- ldr r5, _08092828
-_0809280C:
- mov r0, sp
- adds r1, r7, 0
- movs r2, 0x1
- bl sub_8094924
- ldr r1, [sp, 0x10]
- ands r1, r6
- cmp r1, 0
- beq _0809282C
- ldr r0, [r5]
- adds r0, r4
- strb r6, [r0]
- b _08092832
- .align 2, 0
-_08092828: .4byte gUnknown_203B468
-_0809282C:
- ldr r0, [r5]
- adds r0, r4
- strb r1, [r0]
-_08092832:
- adds r4, 0x1
- cmp r4, 0x39
- ble _0809280C
- mov r0, sp
- bl nullsub_102
- ldr r0, [sp, 0x8]
- add sp, 0x14
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80927F4
-
thumb_func_start LoadWazaParameters
LoadWazaParameters:
push {lr}
diff --git a/asm/code_8095014.s b/asm/code_8095014.s
index 7a3d217..e7081c3 100644
--- a/asm/code_8095014.s
+++ b/asm/code_8095014.s
@@ -1306,7 +1306,7 @@ _08095AD4:
cmp r0, 0x9
bne _08095B20
ldrb r0, [r5, 0x13]
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -1789,7 +1789,7 @@ _08095E84:
bne _08095EF6
lsls r0, r5, 24
lsrs r0, 24
- bl sub_8092534
+ bl GetFriendAreaUnlockCondition
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -1848,7 +1848,7 @@ _08095EF6:
movs r0, 0
b _08095F1A
.align 2, 0
-_08095F04: .4byte gUnknown_203B468
+_08095F04: .4byte gFriendAreas
_08095F08: .4byte gUnknown_203B490
_08095F0C: .4byte 0x00000101
_08095F10:
diff --git a/asm/code_809747C.s b/asm/code_809747C.s
index 17e2dab..640d62c 100644
--- a/asm/code_809747C.s
+++ b/asm/code_809747C.s
@@ -680,7 +680,7 @@ sub_8097944:
lsls r0, 24
cmp r0, 0
bne _08097974
- bl sub_8092614
+ bl HasAllFriendAreas
lsls r0, 24
cmp r0, 0
beq _08097974
diff --git a/asm/code_809D148.s b/asm/code_809D148.s
index 4ad534c..5a0f8ec 100644
--- a/asm/code_809D148.s
+++ b/asm/code_809D148.s
@@ -7926,7 +7926,7 @@ _080A151C:
.4byte _080A1840
.4byte _080A185E
.4byte _080A18C2
- .4byte _080A18E2
+ .4byte _080A18E2 @ Wigglytuff Club Opening
.4byte _080A18F2
.4byte _080A1904
.4byte _080A197C
@@ -8293,11 +8293,11 @@ _080A18D8:
cmp r0, r1
bge _080A18D8
b _080A1EBE
-_080A18E2:
- movs r0, 0xC
- bl sub_80925EC
- movs r0, 0x12
- bl sub_80925EC
+_080A18E2: @ Wigglytuff Guild Opening
+ movs r0, 0xC @ Wild Plains
+ bl UnlockFriendArea
+ movs r0, 0x12 @ Mist-Rise Forest
+ bl UnlockFriendArea
bl _080A236A
_080A18F2:
ldr r0, _080A1900
@@ -8313,7 +8313,7 @@ _080A1904:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
add r1, sp, 0x4
ldr r0, _080A1970
ldm r0!, {r2,r3,r6}
@@ -8375,7 +8375,7 @@ _080A1988:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
add r1, sp, 0x84
adds r2, r1, 0
ldr r0, _080A19D8
@@ -8594,7 +8594,7 @@ _080A1B64:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _080A1B88
@@ -8602,7 +8602,7 @@ _080A1B64:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
_080A1B88:
add r1, sp, 0x188
adds r2, r1, 0
@@ -8849,7 +8849,7 @@ _080A1CCC:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _080A1D9E
@@ -8886,7 +8886,7 @@ _080A1DA8:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _080A1EBE
@@ -8918,7 +8918,7 @@ _080A1E14:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _080A1EBE
@@ -8959,7 +8959,7 @@ _080A1E6C:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
bne _080A1E8E
@@ -8967,7 +8967,7 @@ _080A1E6C:
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
_080A1E8E:
ldr r3, _080A1EC8
movs r0, 0
diff --git a/asm/event_flag.s b/asm/event_flag.s
index 572f258..3995181 100644
--- a/asm/event_flag.s
+++ b/asm/event_flag.s
@@ -1379,7 +1379,7 @@ _08001E08:
cmp r0, 0
beq _08001E36
movs r0, 0xE
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001E36
@@ -1425,7 +1425,7 @@ _08001E72:
bl sub_80973A8
_08001E7A:
movs r0, 0x2B
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001E8E
@@ -1434,7 +1434,7 @@ _08001E7A:
bl sub_80973A8
_08001E8E:
movs r0, 0x24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001EA2
@@ -1443,7 +1443,7 @@ _08001E8E:
bl sub_80973A8
_08001EA2:
movs r0, 0x23
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001EB6
@@ -1452,7 +1452,7 @@ _08001EA2:
bl sub_80973A8
_08001EB6:
movs r0, 0x19
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001ECA
@@ -1461,7 +1461,7 @@ _08001EB6:
bl sub_80973A8
_08001ECA:
movs r0, 0x3
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001EE6
@@ -1473,12 +1473,12 @@ _08001ECA:
bl sub_80973A8
_08001EE6:
movs r0, 0x2C
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001F06
movs r0, 0x2D
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001F06
@@ -1533,7 +1533,7 @@ _08001F58:
cmp r0, 0
beq _08001F7E
movs r0, 0x37
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08001F7E
@@ -1591,7 +1591,7 @@ _08001FCC:
cmp r0, 0
beq _08002002
movs r0, 0xE
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08002002
@@ -1601,7 +1601,7 @@ _08001FCC:
bl sub_8001BB4
_08002002:
movs r0, 0xE
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _08002016
@@ -1610,7 +1610,7 @@ _08002002:
bl sub_80973A8
_08002016:
movs r0, 0xE
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _0800202A
@@ -2497,7 +2497,7 @@ sub_80026CC:
bl sub_8002658
lsls r0, 24
lsrs r0, 24
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
lsrs r0, 24
pop {r1}
@@ -2512,7 +2512,7 @@ sub_80026E8:
bl sub_8002658
lsls r0, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
pop {r0}
bx r0
thumb_func_end sub_80026E8
diff --git a/asm/friend_area_1.s b/asm/friend_area_1.s
new file mode 100644
index 0000000..28deea6
--- /dev/null
+++ b/asm/friend_area_1.s
@@ -0,0 +1,209 @@
+ .include "constants/gba_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_8092638
+sub_8092638:
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ adds r4, r1, 0
+ lsls r0, 24
+ lsrs r5, r0, 24
+ lsls r2, 24
+ lsrs r2, 24
+ mov r12, r2
+ lsls r3, 24
+ lsrs r3, 24
+ mov r8, r3
+ movs r6, 0
+ movs r3, 0
+ ldr r2, _080926DC
+ cmp r3, r5
+ bge _0809266E
+ ldr r1, _080926E0
+ adds r3, r5, 0
+_0809265E:
+ movs r7, 0
+ ldrsh r0, [r1, r7]
+ adds r6, r0
+ adds r1, 0x8
+ subs r3, 0x1
+ cmp r3, 0
+ bne _0809265E
+ adds r3, r5, 0
+_0809266E:
+ str r6, [r4, 0x8]
+ ldr r0, [r2]
+ adds r0, r3
+ ldrb r0, [r0]
+ strb r0, [r4, 0x4]
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0
+ beq _080926E8
+ movs r0, 0
+ strh r0, [r4, 0x2]
+ ldr r1, _080926E0
+ lsls r0, r3, 3
+ adds r0, r1
+ ldrh r0, [r0]
+ strh r0, [r4]
+ movs r3, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r3, r0
+ bge _080926EC
+ ldr r5, _080926E4
+_0809269A:
+ movs r0, 0x58
+ adds r1, r6, 0
+ muls r1, r0
+ ldr r0, [r5]
+ adds r2, r0, r1
+ ldrb r1, [r2]
+ movs r0, 0x1
+ ands r0, r1
+ cmp r0, 0
+ beq _080926CC
+ mov r7, r12
+ cmp r7, 0
+ beq _080926BA
+ ldrb r0, [r2, 0x2]
+ cmp r0, 0
+ bne _080926CC
+_080926BA:
+ mov r0, r8
+ cmp r0, 0
+ beq _080926C6
+ ldrb r0, [r2, 0x4]
+ cmp r0, 0x41
+ beq _080926CC
+_080926C6:
+ ldrh r0, [r4, 0x2]
+ adds r0, 0x1
+ strh r0, [r4, 0x2]
+_080926CC:
+ adds r3, 0x1
+ adds r6, 0x1
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r3, r0
+ blt _0809269A
+ b _080926EC
+ .align 2, 0
+_080926DC: .4byte gFriendAreas
+_080926E0: .4byte gFriendAreaSettings
+_080926E4: .4byte gUnknown_203B45C
+_080926E8:
+ strh r0, [r4, 0x2]
+ strh r0, [r4]
+_080926EC:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8092638
+
+ thumb_func_start sub_80926F8
+sub_80926F8:
+ push {r4-r7,lr}
+ adds r4, r1, 0
+ lsls r0, 24
+ lsrs r3, r0, 24
+ lsls r2, 24
+ lsrs r7, r2, 24
+ movs r5, 0
+ movs r2, 0
+ ldr r0, _08092780
+ mov r12, r0
+ cmp r2, r3
+ bge _08092724
+ ldr r1, _08092784
+ adds r2, r3, 0
+_08092714:
+ movs r6, 0
+ ldrsh r0, [r1, r6]
+ adds r5, r0
+ adds r1, 0x8
+ subs r2, 0x1
+ cmp r2, 0
+ bne _08092714
+ adds r2, r3, 0
+_08092724:
+ str r5, [r4, 0x8]
+ mov r1, r12
+ ldr r0, [r1]
+ adds r0, r2
+ ldrb r0, [r0]
+ strb r0, [r4, 0x4]
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0
+ beq _0809279C
+ movs r0, 0
+ strh r0, [r4, 0x2]
+ ldr r1, _08092784
+ lsls r0, r2, 3
+ adds r0, r1
+ ldrh r0, [r0]
+ strh r0, [r4]
+ movs r6, 0
+ ldrsh r0, [r4, r6]
+ cmp r0, 0
+ ble _080927A0
+ ldr r6, _08092788
+ adds r2, r0, 0
+_08092752:
+ movs r0, 0x58
+ adds r1, r5, 0
+ muls r1, r0
+ ldr r0, [r6]
+ adds r3, r0, r1
+ ldrb r1, [r3]
+ movs r0, 0x1
+ ands r0, r1
+ cmp r0, 0
+ beq _08092792
+ ldrb r0, [r3, 0x2]
+ cmp r0, 0
+ bne _08092776
+ cmp r7, 0
+ bne _0809278C
+ ldrb r0, [r3, 0x4]
+ cmp r0, 0x41
+ bne _0809278C
+_08092776:
+ ldrh r0, [r4]
+ subs r0, 0x1
+ strh r0, [r4]
+ b _08092792
+ .align 2, 0
+_08092780: .4byte gFriendAreas
+_08092784: .4byte gFriendAreaSettings
+_08092788: .4byte gUnknown_203B45C
+_0809278C:
+ ldrh r0, [r4, 0x2]
+ adds r0, 0x1
+ strh r0, [r4, 0x2]
+_08092792:
+ subs r2, 0x1
+ adds r5, 0x1
+ cmp r2, 0
+ bne _08092752
+ b _080927A0
+_0809279C:
+ strh r0, [r4, 0x2]
+ strh r0, [r4]
+_080927A0:
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_80926F8
+
+ .align 2,0 @ Don't pad with nop
+
diff --git a/asm/pokemon.s b/asm/pokemon.s
index 587e47c..2030fcf 100644
--- a/asm/pokemon.s
+++ b/asm/pokemon.s
@@ -170,7 +170,7 @@ _0808CF36:
bl sub_80980B4
b _0808CFB8
.align 2, 0
-_0808CF58: .4byte gUnknown_203B468
+_0808CF58: .4byte gFriendAreas
_0808CF5C:
movs r2, 0
lsls r4, r7, 3
@@ -522,7 +522,7 @@ sub_808D1DC:
b _0808D268
.align 2, 0
_0808D204: .4byte gMonsterParameters
-_0808D208: .4byte gUnknown_203B468
+_0808D208: .4byte gFriendAreas
_0808D20C:
ldr r0, [r7]
adds r0, r5
@@ -603,7 +603,7 @@ sub_808D278:
b _0808D2DA
.align 2, 0
_0808D29C: .4byte gMonsterParameters
-_0808D2A0: .4byte gUnknown_203B468
+_0808D2A0: .4byte gFriendAreas
_0808D2A4:
ldr r0, [r7]
adds r0, r5
diff --git a/asm/wonder_mail.s b/asm/wonder_mail.s
index 5b90271..569f81d 100644
--- a/asm/wonder_mail.s
+++ b/asm/wonder_mail.s
@@ -11265,7 +11265,7 @@ _0802F494:
ldr r0, [r0, 0x10]
adds r0, 0x20
ldrb r0, [r0]
- bl sub_8092600
+ bl GetFriendAreaStatus
lsls r0, 24
cmp r0, 0
beq _0802F4BC
@@ -11286,7 +11286,7 @@ _0802F4BC:
ldr r0, [r0, 0x10]
adds r0, 0x20
ldrb r0, [r0]
- bl sub_80925EC
+ bl UnlockFriendArea
movs r0, 0xCE
bl sub_8011988
ldr r0, _0802F4E8
@@ -11304,7 +11304,7 @@ _0802F4F0:
ldr r0, [r0, 0x10]
adds r0, 0x20
ldrb r0, [r0]
- bl sub_80925EC
+ bl UnlockFriendArea
movs r0, 0xCE
bl sub_8011988
ldr r0, _0802F518
@@ -33033,7 +33033,7 @@ sub_803A3BC:
_0803A3D6:
lsls r0, r5, 24
lsrs r0, 24
- bl sub_80925EC
+ bl UnlockFriendArea
adds r5, 0x1
cmp r5, 0x39
ble _0803A3D6
@@ -33867,7 +33867,7 @@ sub_803AA34:
str r0, [r1, 0x10]
b _0803AA82
.align 2, 0
-_0803AA64: .4byte gUnknown_203B468
+_0803AA64: .4byte gFriendAreas
_0803AA68: .4byte gUnknown_203B3F4
_0803AA6C: .4byte gUnknown_80E7EBC
_0803AA70:
@@ -34004,7 +34004,7 @@ _0803AB70:
_0803AB7A:
ldr r0, [r4]
ldrb r0, [r0, 0x4]
- bl sub_80925EC
+ bl UnlockFriendArea
b _0803AB8E
_0803AB84:
ldr r0, [r4]
diff --git a/data/data_80F4278.s b/data/data_80F4278.s
index 4da3936..6ee0257 100644
--- a/data/data_80F4278.s
+++ b/data/data_80F4278.s
@@ -7732,11 +7732,19 @@ gUnknown_810983C: @ 810983C
.global gUnknown_81098A4
gUnknown_81098A4: @ 81098A4
- .incbin "baserom.gba", 0x1098A4, 0x8
+ .string "#c"
+ .byte 0x4
+ .string "%s#r\0"
+ .align 2,0
.global gUnknown_81098AC
gUnknown_81098AC: @ 81098AC
- .incbin "baserom.gba", 0x1098AC, 0x18
+ .string "%s#=%c#C"
+ .byte 0x4
+ .string "%s#R\0"
+ .align 2,0
+ .string "pksdir0"
+ .align 2,0
.global gUnknown_81098C4
gUnknown_81098C4: @ 81098C4
@@ -7901,127 +7909,301 @@ gUnknown_810A580: @ 810A580
gUnknown_810A808: @ 810A808
.incbin "baserom.gba", 0x10A808, 0x288
- .global gUnknown_810AA90
-gUnknown_810AA90: @ 810AA90
+ .global gFriendAreaSettings
+gFriendAreaSettings: @ 810AA90
@ replacing .incbin "baserom.gba", 0x0010aa90, 0x1d0
+ .byte 0x00, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00
- .byte 0x09, 0x00, 0x01, 0x00
+
+ .byte 0x09, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
- .byte 0x0a, 0x00, 0x01, 0x00
+
+ .byte 0x0a, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x94, 0x11, 0x00, 0x00
- .byte 0x04, 0x00, 0x01, 0x00
+
+ .byte 0x04, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x40, 0x1f, 0x00, 0x00
- .byte 0x0c, 0x00, 0x01, 0x00
+
+ .byte 0x0c, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x05, 0x00, 0x01, 0x00
+
+ .byte 0x05, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x88, 0x13, 0x00, 0x00
- .byte 0x0c, 0x00, 0x00, 0x00
+
+ .byte 0x0c, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x82, 0x00, 0x00, 0x00
- .byte 0x09, 0x00, 0x01, 0x00
+
+ .byte 0x09, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x88, 0x13, 0x00, 0x00
- .byte 0x06, 0x00, 0x02, 0x00
+
+ .byte 0x06, 0x00
+ .byte 0x02
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x01, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x64, 0x19, 0x00, 0x00
- .byte 0x0d, 0x00, 0x00, 0x00
+
+ .byte 0x0d, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x64, 0x00, 0x00, 0x00
- .byte 0x0c, 0x00, 0x00, 0x00
+
+ .byte 0x0c, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x58, 0x02, 0x00, 0x00
- .byte 0x0d, 0x00, 0x02, 0x00
+
+ .byte 0x0d, 0x00
+ .byte 0x02
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x0f, 0x00, 0x00, 0x00
+
+ .byte 0x0f, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xbc, 0x02, 0x00, 0x00
- .byte 0x0a, 0x00, 0x01, 0x00
+
+ .byte 0x0a, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x88, 0x13, 0x00, 0x00
- .byte 0x03, 0x00, 0x01, 0x00
+
+ .byte 0x03, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x64, 0x19, 0x00, 0x00
- .byte 0x0e, 0x00, 0x00, 0x00
+
+ .byte 0x0e, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x96, 0x00, 0x00, 0x00
- .byte 0x0c, 0x00, 0x00, 0x00
+
+ .byte 0x0c, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x26, 0x02, 0x00, 0x00
- .byte 0x09, 0x00, 0x00, 0x00
+
+ .byte 0x09, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x58, 0x02, 0x00, 0x00
- .byte 0x0f, 0x00, 0x01, 0x00
+
+ .byte 0x0f, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x88, 0x13, 0x00, 0x00
- .byte 0x07, 0x00, 0x00, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xf4, 0x01, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x06, 0x00, 0x00, 0x00
+
+ .byte 0x06, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xf4, 0x01, 0x00, 0x00
- .byte 0x09, 0x00, 0x01, 0x00
+
+ .byte 0x09, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x64, 0x19, 0x00, 0x00
- .byte 0x07, 0x00, 0x00, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xf4, 0x01, 0x00, 0x00
- .byte 0x09, 0x00, 0x00, 0x00
+
+ .byte 0x09, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xf4, 0x01, 0x00, 0x00
- .byte 0x0a, 0x00, 0x01, 0x00
+
+ .byte 0x0a, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
- .byte 0x04, 0x00, 0x01, 0x00
+
+ .byte 0x04, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0xc4, 0x09, 0x00, 0x00
- .byte 0x04, 0x00, 0x01, 0x00
+
+ .byte 0x04, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0xac, 0x0d, 0x00, 0x00
- .byte 0x07, 0x00, 0x00, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xc4, 0x09, 0x00, 0x00
- .byte 0x06, 0x00, 0x01, 0x00
+
+ .byte 0x06, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
- .byte 0x0b, 0x00, 0x01, 0x00
+
+ .byte 0x0b, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
- .byte 0x01, 0x00, 0x01, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x64, 0x19, 0x00, 0x00
- .byte 0x03, 0x00, 0x02, 0x00
+
+ .byte 0x03, 0x00
+ .byte 0x02
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x04, 0x00, 0x02, 0x00
+
+ .byte 0x04, 0x00
+ .byte 0x02
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x0d, 0x00, 0x00, 0x00
+
+ .byte 0x0d, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x20, 0x03, 0x00, 0x00
- .byte 0x07, 0x00, 0x00, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
- .byte 0x0b, 0x00, 0x00, 0x00
+
+ .byte 0x0b, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xb0, 0x04, 0x00, 0x00
- .byte 0x0b, 0x00, 0x00, 0x00
+
+ .byte 0x0b, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
- .byte 0x06, 0x00, 0x00, 0x00
+
+ .byte 0x06, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0x58, 0x02, 0x00, 0x00
- .byte 0x07, 0x00, 0x01, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
- .byte 0x07, 0x00, 0x01, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
- .byte 0x0e, 0x00, 0x01, 0x00
+
+ .byte 0x0e, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
- .byte 0x0e, 0x00, 0x01, 0x00
+
+ .byte 0x0e, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
- .byte 0x06, 0x00, 0x01, 0x00
+
+ .byte 0x06, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x40, 0x1f, 0x00, 0x00
- .byte 0x0d, 0x00, 0x03, 0x00
+
+ .byte 0x0d, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x07, 0x00, 0x01, 0x00
+
+ .byte 0x07, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x28, 0x23, 0x00, 0x00
- .byte 0x05, 0x00, 0x01, 0x00
+
+ .byte 0x05, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x1c, 0x25, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x05, 0x00, 0x00, 0x00
+
+ .byte 0x05, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00
+
+ .byte 0x03, 0x00
+ .byte 0x00
+ .byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
- .byte 0x03, 0x00, 0x03, 0x00
+
+ .byte 0x03, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
- .byte 0x02, 0x00, 0x01, 0x00
+
+ .byte 0x02, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x1c, 0x25, 0x00, 0x00
- .byte 0x01, 0x00, 0x03, 0x00
+
+ .byte 0x01, 0x00
+ .byte 0x03
+ .byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x01, 0x00
+
+ @ Final Island
+ .byte 0x01, 0x00
+ .byte 0x01
+ .byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
- .global gUnknown_810AC60
+ .global gUnknown_810AC60
gUnknown_810AC60: @ 810AC60
.byte 0x0C, 0x00
diff --git a/include/constants/friend_area.h b/include/constants/friend_area.h
new file mode 100644
index 0000000..3d0a9c5
--- /dev/null
+++ b/include/constants/friend_area.h
@@ -0,0 +1,60 @@
+#define NUM_FRIEND_AREAS 58
+
+#define NONE 0
+#define BOUNTIFUL_SEA 1
+#define TREASURE_SEA 2
+#define SERENE_SEA 3
+#define DEEP_SEA_FLOOR 4
+#define DEEP_SEA_CURRENT 5
+#define SEAFLOOR_CAVE 6
+#define SHALLOW_CAVE 7
+#define MT_DEEPGREEN 8
+#define MT_CLEFT 9
+#define MT_MOONVIEW 10
+#define RAINBOW_PEAK 11
+#define WILD_PLAINS 12
+#define BEAU_PLAINS 13
+#define SKY_BLUE_PLAINS 14
+#define SAFARI 15
+#define SCORCHED_PLAINS 16
+#define SACRED_FIELD 17
+#define MIST_RISE_FOREST 18
+#define FLYAWAY_FOREST 19
+#define OVERGROWN_FOREST 20
+#define ENERGETIC_FOREST 21
+#define MUSHROOM_FOREST 22
+#define HEALING_FOREST 23
+#define TRANSFORM_FOREST 24
+#define SECRETIVE_FOREST 25
+#define RUB_A_DUB_RIVER 26
+#define TADPOLE_POND 27
+#define TURTLESHELL_POND 28
+#define MYSTIC_LAKE 29
+#define WATERFALL_LAKE 30
+#define PEANUT_SWAMP 31
+#define POISON_SWAMP 32
+#define ECHO_CAVE 33
+#define CRYPTIC_CAVE 34
+#define DRAGON_CAVE 35
+#define BOULDER_CAVE 36
+#define JUNGLE 37
+#define DECRPEPIT_LAB 38
+#define MT_DISCIPLINE 39
+#define THUNDER_MEADOW 40
+#define POWER_PLANT 41
+#define CRATER 42
+#define FURNACE_DESERT 43
+#define AGED_CHAMBER_AN 44
+#define AGED_CHAMBER_O_EXCLAIM 45
+#define ANCIENT_RELIC 46
+#define DARKNESS_RIDGE 47
+#define FRIGID_CAVERN 48
+#define ICE_FLOE_BEACH 49
+#define VOLCANIC_PIT 50
+#define STRATOS_LOOKOUT 51
+#define RAVAGED_FIELD 52
+#define MAGNETIC_QUARRY 53
+#define LEGENDARY_ISLAND 54
+#define SOUTHERN_ISLAND 55
+#define ENCLOSED_ISLAND 56
+#define FINAL_ISLAND 57
diff --git a/include/friend_area.h b/include/friend_area.h
new file mode 100644
index 0000000..a1234a7
--- /dev/null
+++ b/include/friend_area.h
@@ -0,0 +1,28 @@
+#ifndef GUARD_FRIEND_AREA_H
+#define GUARD_FRIEND_AREA_H
+
+struct FriendAreaSettings
+{
+ s16 num_pokemon;
+ u8 unlock_condition;
+ // 0 - Shop (Story)
+ // 1 - Shop (Story Post-game)
+ // 2 - Wonder Mail
+ // 3 - Legendary Request (unlocks when lengendary joins)
+ u32 price;
+};
+
+void LoadFriendAreas(void);
+u8 *GetBoughtFriendAreas(void);
+void InitializeFriendAreas(void);
+u8 sub_80923D4(s32 target);
+bool8 HasAllFriendAreas(void);
+bool8 GetFriendAreaStatus(u8 index);
+void UnlockFriendArea(u8 index);
+u32 GetFriendAreaDescription(u8 index);
+u8 GetFriendAreaUnlockCondition(u8 index);
+u32 GetFriendAreaPrice(u8 index);
+const char *GetFriendAreaName(u8 index);
+
+
+#endif
diff --git a/include/save.h b/include/save.h
index 37309cf..29864f1 100644
--- a/include/save.h
+++ b/include/save.h
@@ -17,7 +17,7 @@ struct UnkStruct_203B184 {
/* 0x1C */ u32 unk1C;
/* 0x20 */ u32 unk20;
/* 0x24 */ u8 *unk24;
- /* 0x28 */ u8 *unk28;
+ /* 0x28 */ u8 *BoughtFriendAreas;
/* 0x2C */ u32 unk2C;
/* 0x30 */ struct unkTimeStruct *unk30;
u32 unk34;
diff --git a/ld_script.txt b/ld_script.txt
index e1dcd0e..5acc3f0 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -121,7 +121,10 @@ SECTIONS {
asm/code_808EAB0.o(.text);
src/dungeon.o(.text);
asm/code_809017C.o(.text);
- src/code_8092334.o(.text);
+ src/code_809017C.o(.text);
+ src/friend_area.o(.text);
+ asm/friend_area_1.o(.text);
+ src/friend_area_1.o(.text);
asm/code_8092334.o(.text);
src/code_8094F88.o(.text);
asm/code_8095014.o(.text);
diff --git a/src/code_2.c b/src/code_2.c
index ba358bd..4e778e7 100644
--- a/src/code_2.c
+++ b/src/code_2.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "file_system.h"
+#include "friend_area.h"
#include "input.h"
extern void InitHeap(void);
@@ -13,7 +14,6 @@ extern void sub_8094F88(void);
extern void sub_8094980(void);
extern void sub_8094C14(void);
extern void sub_8097F5C(void);
-extern void sub_80923A0(void);
extern void sub_8090998(void);
extern void sub_809207C(void);
extern void LoadWazaParameters(void);
@@ -102,7 +102,7 @@ void GameLoop(void)
sub_8094980();
sub_8094C14();
sub_8097F5C();
- sub_80923A0();
+ LoadFriendAreas();
sub_8090998();
sub_809207C();
LoadWazaParameters();
diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c
index be254ef..29b1710 100644
--- a/src/code_8041AD0.c
+++ b/src/code_8041AD0.c
@@ -1,6 +1,6 @@
#include "global.h"
-struct unkStruct_8041D5C
+struct unkDungeon_8041D5C
{
u8 padding[0x70];
u8 *unk70[100];
@@ -12,28 +12,42 @@ struct unk_struct_8041F08
u32 unk4;
};
+struct unkStruct_80420E8
+{
+ u32 unk0;
+ u32 unk4;
+ u32 unk8;
+};
+
+extern u8 *gUnknown_203B418;
+
+
+extern void sub_803ED30(u8, struct unkDungeon_8041D5C *r0, u8, u8);
+extern void sub_804151C(struct unkDungeon_8041D5C *r0, u32 r1, u8 r2);
+extern void sub_80416E0(struct unkDungeon_8041D5C *r0, u32, u32);
+extern u8 sub_8042768(struct unkDungeon_8041D5C *r0);
+extern void sub_806CDD4(struct unkDungeon_8041D5C *r0, u8, u32);
+extern u8 sub_8071858(struct unkDungeon_8041D5C *r0, u8);
+extern u32 sub_806F62C(u32);
+extern void sub_8083E38(u32);
+extern u8 sub_803F428(struct unkDungeon_8041D5C *r0);
+extern void sub_8041550(struct unkDungeon_8041D5C *r0, u32, u32, u32);
-extern void sub_803ED30(u8, struct unkStruct_8041D5C *r0, u8, u8);
-extern void sub_804151C(u32 r0, u32 r1, u8 r2);
-extern void sub_80421C0(u32 r0, u32 r1);
-extern u8 sub_8042768(void);
-extern void sub_806CDD4(u32 r0, u8, u32);
-extern u8 sub_8071858(u32, u8);
-extern void sub_8041550(u32 r0, u32, u32, u32);
+void sub_80421C0(struct unkDungeon_8041D5C *r0, u16 r1);
-void sub_8041AD0(u32 r0)
+void sub_8041AD0(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xA2 << 1, 1);
}
-void sub_8041AE0(u32 r0)
+void sub_8041AE0(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x143, 1);
}
-void sub_8041AF4(u32 r0)
+void sub_8041AF4(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x25, 1);
sub_80421C0(r0, 0x197);
@@ -43,7 +57,7 @@ void nullsub_57(void)
{
}
-void sub_8041B18(u32 r0)
+void sub_8041B18(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x141, 1);
}
@@ -56,7 +70,7 @@ void nullsub_59(void)
{
}
-void sub_8041B34(u32 r0)
+void sub_8041B34(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 7, 1);
}
@@ -65,7 +79,7 @@ void nullsub_60(void)
{
}
-void sub_8041B48(u32 r0)
+void sub_8041B48(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 4, 0);
}
@@ -74,16 +88,16 @@ void nullsub_61(void)
{
}
-void sub_8041B5C(u32 r0)
+void sub_8041B5C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x171, 1);
}
-void nullsub_62(void)
+void nullsub_62(struct unkDungeon_8041D5C *r0)
{
}
-void sub_8041B74(u32 r0)
+void sub_8041B74(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x171, 0);
}
@@ -96,7 +110,7 @@ void nullsub_64(void)
{
}
-void sub_8041B90(u32 r0)
+void sub_8041B90(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD6 << 1, 0);
}
@@ -109,7 +123,7 @@ void nullsub_66(void)
{
}
-void sub_8041BA8(u32 r0)
+void sub_8041BA8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 4, 1);
}
@@ -118,7 +132,7 @@ void nullsub_67(void)
{
}
-void sub_8041BBC(u32 r0)
+void sub_8041BBC(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD4 << 1, 1);
}
@@ -127,7 +141,7 @@ void nullsub_68(void)
{
}
-void sub_8041BD0(u32 r0, u8 r1)
+void sub_8041BD0(struct unkDungeon_8041D5C *r0, u8 r1)
{
if(r1 == 0)
{
@@ -136,22 +150,22 @@ void sub_8041BD0(u32 r0, u8 r1)
sub_80421C0(r0, 0x1a5);
}
-void sub_8041BE8(u32 r0)
+void sub_8041BE8(struct unkDungeon_8041D5C *r0)
{
sub_80421C0(r0, 0xCB << 1);
}
-void sub_8041BF8(u32 r0)
+void sub_8041BF8(struct unkDungeon_8041D5C *r0)
{
sub_806CDD4(r0, 0xA, 8);
}
-void sub_8041C08(u32 r0)
+void sub_8041C08(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a7, 1);
}
-void sub_8041C1C(u32 r0)
+void sub_8041C1C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a7, 1);
}
@@ -160,7 +174,7 @@ void nullsub_69(void)
{
}
-void sub_8041C34(u32 r0)
+void sub_8041C34(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x4C, 1);
}
@@ -173,22 +187,22 @@ void nullsub_71(void)
{
}
-void sub_8041C4C(u32 r0, u32 r1)
+void sub_8041C4C(struct unkDungeon_8041D5C *r0, u32 r1)
{
sub_804151C(r0, r1, 1);
}
-void sub_8041C58(u32 r0)
+void sub_8041C58(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 1);
}
-void sub_8041C6C(u32 r0)
+void sub_8041C6C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x9D << 1, 1);
}
-void sub_8041C7C(u32 r0)
+void sub_8041C7C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x9D << 1, 1);
}
@@ -201,32 +215,32 @@ void nullsub_73(void)
{
}
-void sub_8041C94(u32 r0)
+void sub_8041C94(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x171, 1);
}
-void sub_8041CA8(u32 r0)
+void sub_8041CA8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 7, 1);
}
-void sub_8041CB8(u32 r0)
+void sub_8041CB8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x18b, 1);
}
-void sub_8041CCC(u32 r0)
+void sub_8041CCC(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xC5 << 1, 1);
}
-void sub_8041CDC(u32 r0)
+void sub_8041CDC(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 5, 1);
}
-void sub_8041CEC(u32 r0)
+void sub_8041CEC(struct unkDungeon_8041D5C *r0)
{
sub_80421C0(r0, 0x19d);
}
@@ -235,7 +249,7 @@ void nullsub_74(void)
{
}
-void sub_8041D00(u32 r0, u32 r1)
+void sub_8041D00(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_804151C(r1, 0x2F, 1);
sub_804151C(r0, 0x30, 1);
@@ -265,12 +279,12 @@ void nullsub_80(void)
{
}
-void sub_8041D38(u32 r0)
+void sub_8041D38(struct unkDungeon_8041D5C * r0)
{
sub_804151C(r0, 0x21, 1);
}
-void sub_8041D48(u32 r0)
+void sub_8041D48(struct unkDungeon_8041D5C * r0)
{
sub_80421C0(r0, 0x191);
}
@@ -279,10 +293,10 @@ void nullsub_81(void)
{
}
-void sub_8041D5C(struct unkStruct_8041D5C *r0)
+void sub_8041D5C(struct unkDungeon_8041D5C *r0)
{
u8 *temp;
- if(sub_8042768() == 0)
+ if(sub_8042768(r0) == 0)
{
return;
}
@@ -290,7 +304,7 @@ void sub_8041D5C(struct unkStruct_8041D5C *r0)
sub_803ED30(temp[0x89 << 1] , r0, 1, 0xB);
}
-void sub_8041D84(u32 r0)
+void sub_8041D84(struct unkDungeon_8041D5C * r0)
{
sub_80421C0(r0, 0x19f);
}
@@ -303,12 +317,12 @@ void nullsub_83(void)
{
}
-void sub_8041D9C(u32 r0)
+void sub_8041D9C(struct unkDungeon_8041D5C * r0)
{
sub_804151C(r0, 0x131, 1);
}
-void sub_8041DB0(u32 r0)
+void sub_8041DB0(struct unkDungeon_8041D5C * r0)
{
sub_804151C(r0, 0x30, 1);
}
@@ -337,122 +351,93 @@ void nullsub_88(void)
{
}
-#ifndef NONMATCHING
-NAKED
-#endif
-// TODO r1 is doing an lsr instead of an asr... maybe a signed arg?
-void sub_8041DD8(u32 r0, u16 r1)
+void sub_8041DD8(struct unkDungeon_8041D5C *r0, s16 r1)
{
-#ifdef NONMATCHING
+ u32 temp;
+ temp = r1;
+
if(sub_8071858(r0, 0xE) != 0)
- {
- sub_804151C(r0, r1, 1);
- return;
- }
- sub_804151C(r0, 0xE, 1);
-#else
- asm_unified("\tpush {r4,r5,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tlsls r1, 16\n"
- "\tasrs r5, r1, 16\n"
- "\tmovs r1, 0xE\n"
- "\tbl sub_8071858\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _08041DF8\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_804151C\n"
- "\tb _08041E02\n"
-"_08041DF8:\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r1, 0xE\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_804151C\n"
-"_08041E02:\n"
- "\tpop {r4,r5}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-#endif
+ sub_804151C(r0, temp, 1);
+ else
+ sub_804151C(r0, 0xE, 1);
}
void nullsub_89(void)
{
}
-void sub_8041E0C(u32 r0)
+void sub_8041E0C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x41, 1);
}
-void sub_8041E1C(u32 r0)
+void sub_8041E1C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x8F << 1, 1);
sub_80421C0(r0, 0xCE << 1);
}
-void sub_8041E3C(u32 r0)
+void sub_8041E3C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD7 << 1, 1);
}
-void sub_8041E4C(u32 r0)
+void sub_8041E4C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1b1, 1);
}
-void sub_8041E60(u32 r0)
+void sub_8041E60(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 1);
}
-void sub_8041E74(u32 r0)
+void sub_8041E74(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xC9 << 1, 1);
}
-void sub_8041E84(u32 r0)
+void sub_8041E84(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xC7 << 1, 1);
}
-void sub_8041E94(u32 r0)
+void sub_8041E94(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xC8 << 1, 1);
}
-void sub_8041EA4(u32 r0)
+void sub_8041EA4(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x15, 1);
}
-void sub_8041EB4(u32 r0)
+void sub_8041EB4(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x171, 1);
}
-void sub_8041EC8(u32 r0)
+void sub_8041EC8(struct unkDungeon_8041D5C *r0)
{
sub_80421C0(r0, 0x197);
}
-void sub_8041ED8(u32 r0)
+void sub_8041ED8(struct unkDungeon_8041D5C *r0)
{
sub_80421C0(r0, 0x197);
}
-void sub_8041EE8(u32 r0)
+void sub_8041EE8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x15, 1);
}
-void sub_8041EF8(u32 r0)
+void sub_8041EF8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xF, 1);
}
-void sub_8041F08(u32 r0)
+void sub_8041F08(struct unkDungeon_8041D5C *r0)
{
volatile struct unk_struct_8041F08 temp;
temp.unk0 = 2;
@@ -464,7 +449,7 @@ void nullsub_90(void)
{
}
-void sub_8041F28(u32 r0, u32 r1)
+void sub_8041F28(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -476,7 +461,7 @@ void sub_8041F28(u32 r0, u32 r1)
}
}
-void sub_8041F4C(u32 r0, u32 r1)
+void sub_8041F4C(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -488,7 +473,7 @@ void sub_8041F4C(u32 r0, u32 r1)
}
}
-void sub_8041F70(u32 r0, u32 r1)
+void sub_8041F70(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -500,7 +485,7 @@ void sub_8041F70(u32 r0, u32 r1)
}
}
-void sub_8041F94(u32 r0, u32 r1)
+void sub_8041F94(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -512,7 +497,7 @@ void sub_8041F94(u32 r0, u32 r1)
}
}
-void sub_8041FB4(u32 r0, u32 r1)
+void sub_8041FB4(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -524,7 +509,7 @@ void sub_8041FB4(u32 r0, u32 r1)
}
}
-void sub_8041FD8(u32 r0, u32 r1)
+void sub_8041FD8(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -536,7 +521,7 @@ void sub_8041FD8(u32 r0, u32 r1)
}
}
-void sub_8041FFC(u32 r0, u32 r1)
+void sub_8041FFC(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -548,7 +533,7 @@ void sub_8041FFC(u32 r0, u32 r1)
}
}
-void sub_804201C(u32 r0, u32 r1)
+void sub_804201C(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -560,7 +545,7 @@ void sub_804201C(u32 r0, u32 r1)
}
}
-void sub_8042040(u32 r0, u32 r1)
+void sub_8042040(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -572,7 +557,7 @@ void sub_8042040(u32 r0, u32 r1)
}
}
-void sub_8042060(u32 r0, u32 r1)
+void sub_8042060(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -584,7 +569,7 @@ void sub_8042060(u32 r0, u32 r1)
}
}
-void sub_8042080(u32 r0, u32 r1)
+void sub_8042080(struct unkDungeon_8041D5C *r0, u32 r1)
{
if(r1 == 0)
{
@@ -596,7 +581,7 @@ void sub_8042080(u32 r0, u32 r1)
}
}
-void sub_80420A0(u32 r0, u32 r1)
+void sub_80420A0(struct unkDungeon_8041D5C *r0, u32 r1)
{
sub_804151C(r0, 0x143, 1);
}
@@ -605,12 +590,12 @@ void nullsub_91(void)
{
}
-void sub_80420B8(u32 r0, u32 r1)
+void sub_80420B8(struct unkDungeon_8041D5C *r0, u32 r1)
{
sub_804151C(r0, 0x19, 1);
}
-void sub_80420C8(u32 r0)
+void sub_80420C8(struct unkDungeon_8041D5C *r0)
{
volatile struct unk_struct_8041F08 temp;
temp.unk0 = 2;
@@ -621,3 +606,100 @@ void sub_80420C8(u32 r0)
void nullsub_92(void)
{
}
+
+void sub_80420E8(struct unkDungeon_8041D5C *r0, struct unkStruct_80420E8 *r1)
+{
+ u32 temp;
+ u32 arg;
+ volatile struct unk_struct_8041F08 temp_1;
+ temp = r1->unk8;
+ if(gUnknown_203B418[0x16d] != 0)
+ temp = sub_806F62C(r1->unk8);
+ switch(temp)
+ {
+ default:
+ case 0:
+ arg = 8;
+ break;
+ case 1:
+ arg = 9;
+ break;
+ case 2:
+ arg = 10;
+ break;
+ case 3:
+ arg = 11;
+ break;
+ }
+ temp_1.unk0 = 0;
+ temp_1.unk4 = 1;
+ sub_8041550(r0, arg, 1, 3);
+}
+
+void sub_8042148(struct unkDungeon_8041D5C *r0)
+{
+ sub_80421C0(r0, 0x1a7);
+ sub_804151C(r0, 0x9F << 1, 1);
+}
+
+void nullsub_93()
+{
+}
+
+void sub_804216C(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2)
+{
+ if(r2 == 1)
+ sub_804151C(r1, 0xF8, 1);
+ else
+ sub_804151C(r1, 0xF9, 1);
+}
+
+void sub_804218C(u32 r0, struct unkDungeon_8041D5C *r1)
+{
+ sub_804151C(r1, 0x2A, 1);
+}
+
+void sub_804219C(struct unkDungeon_8041D5C *r0)
+{
+ sub_80416E0(r0, 0x90, 1);
+}
+
+void sub_80421AC(u32 r0, struct unkDungeon_8041D5C * r1)
+{
+ sub_804151C(r1, 0x167, 1);
+}
+
+void sub_80421C0(struct unkDungeon_8041D5C *r0, u16 r1)
+{
+ if(r0 == NULL)
+ sub_8083E38(r1);
+ else
+ if(sub_8042768(r0) != 0)
+ sub_8083E38(r1);
+}
+
+void sub_80421EC(struct unkDungeon_8041D5C *r0, u16 r1)
+{
+ if(sub_803F428(r0) != 0)
+ sub_8083E38(r1);
+}
+
+void sub_8042208(struct unkDungeon_8041D5C *r0, u8 r1)
+{
+ if(r1 == 0)
+ sub_8083E38(0xA9 << 1);
+ else if(r1 == 1)
+ sub_8083E38(0x151);
+ else
+ sub_8083E38(0xA8 << 1);
+}
+
+void sub_8042238(u32 r0, struct unkDungeon_8041D5C *r1)
+{
+ u8 *temp;
+ temp = *r1->unk70;
+ if(temp[6] != 0)
+ sub_8083E38(0x157);
+ else
+ sub_8083E38(0xAB << 1);
+}
diff --git a/src/code_80428A0.c b/src/code_80428A0.c
index 08599b7..6c7d48d 100644
--- a/src/code_80428A0.c
+++ b/src/code_80428A0.c
@@ -1,145 +1,153 @@
#include "global.h"
-extern void sub_804151C(u32 r0, u32 r1, u8 r2);
+struct unkDungeon_8041D5C
+{
+ u8 padding[0x70];
+ u8 *unk70[100];
+};
+
+
+extern void sub_804151C(struct unkDungeon_8041D5C *r0, u32 r1, u8 r2);
extern void sub_803E708(u32 r0, u32 r1);
-extern void sub_80416A4(u32 r0, u32 r1, u32 r2);
-extern void sub_80421C0(u32 r0, u32 r1);
+extern void sub_80416A4(struct unkDungeon_8041D5C *r0, u32 r1, u32 r2);
+extern void sub_80421C0(struct unkDungeon_8041D5C *r0, u16 r1);
+
-void sub_80428A0(u32 r0)
+void sub_80428A0(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x29, 1);
}
-void sub_80428B0(u32 r0)
+void sub_80428B0(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_80428C4(u32 r0)
+void sub_80428C4(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_80428D8(u32 r0)
+void sub_80428D8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_80428EC(u32 r0)
+void sub_80428EC(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_8042900(u32 r0)
+void sub_8042900(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
-void sub_8042910(u32 r0)
+void sub_8042910(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x29, 0);
}
-void sub_8042920(u32 r0)
+void sub_8042920(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x48, 0);
}
-void sub_8042930(u32 r0)
+void sub_8042930(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD3 << 1, 1);
}
-void sub_8042940(u32 r0)
+void sub_8042940(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xC7 << 1, 0);
}
-void sub_8042950(u32 r0)
+void sub_8042950(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD8 << 1, 1);
sub_803E708(0xA, 0x42);
}
-void sub_8042968(u32 r0)
+void sub_8042968(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
-void sub_8042978(u32 r0)
+void sub_8042978(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_804298C(u32 r0)
+void sub_804298C(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
-void sub_80429A0(u32 r0)
+void sub_80429A0(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x199, 0);
}
-void sub_80429B4(u32 r0)
+void sub_80429B4(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x1ab, 0);
}
-void sub_80429C8(u32 r0)
+void sub_80429C8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x4, 1);
}
-void sub_80429D8(u32 r0)
+void sub_80429D8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x8F << 1, 1);
}
-void sub_80429E8(u32 r0)
+void sub_80429E8(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x11d, 1);
}
-void sub_80429FC(u32 r0)
+void sub_80429FC(struct unkDungeon_8041D5C *r0)
{
sub_80416A4(r0, 0xCF << 1, 1);
- sub_80421C0(0, 0xD4);
+ sub_80421C0(NULL, 0xD4);
}
-void sub_8042A14(u32 r0)
+void sub_8042A14(struct unkDungeon_8041D5C *r0)
{
sub_80416A4(r0, 0x36, 1);
}
-void sub_8042A24(u32 r0)
+void sub_8042A24(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x15, 1);
}
-void sub_8042A34(u32 r0)
+void sub_8042A34(struct unkDungeon_8041D5C *r0)
{
sub_80416A4(r0, 0x9F << 1, 0);
}
-void sub_8042A44(u32 r0)
+void sub_8042A44(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0xDA << 1, 1);
}
-void sub_8042A54(u32 r0)
+void sub_8042A54(struct unkDungeon_8041D5C *r0)
{
sub_80416A4(r0, 0x37, 1);
}
-void sub_8042A64(u32 r0)
+void sub_8042A64(struct unkDungeon_8041D5C *r0)
{
sub_80416A4(r0, 0x29, 1);
}
-void sub_8042A74(u32 r0)
+void sub_8042A74(struct unkDungeon_8041D5C *r0)
{
sub_804151C(r0, 0x18, 1);
}
diff --git a/src/code_808DAB4.c b/src/code_808DAB4.c
index e7e7110..1762397 100644
--- a/src/code_808DAB4.c
+++ b/src/code_808DAB4.c
@@ -1,10 +1,21 @@
#include "global.h"
-extern void sub_808DE50(void* r0, void * r1, u32 r2, u32 r3);
+struct unkStruct_203B45C
+{
+ u8 unk0;
+ u8 padding1;
+ u8 unk2;
+ u8 padding2;
+ u8 unk4;
+ u8 array[0x53];
+};
+
+extern struct unkStruct_203B45C *gUnknown_203B45C;
+
+extern void sub_808DE50(void* r0, struct unkStruct_203B45C *r1, u32 r2, u32 r3);
-extern void * gUnknown_203B45C;
void sub_808DE30(void* r0, u32 r1)
{
- sub_808DE50(r0, gUnknown_203B45C + (r1 * 0x58), r1, r1 * 0x58);
+ sub_808DE50(r0, &gUnknown_203B45C[r1], r1, r1 * sizeof(struct unkStruct_203B45C));
}
diff --git a/src/code_809017C.c b/src/code_809017C.c
new file mode 100644
index 0000000..2d3abcf
--- /dev/null
+++ b/src/code_809017C.c
@@ -0,0 +1,42 @@
+#include "global.h"
+
+extern u32 gUnformattedTypeStrings[]; // unformatted type names
+extern u32 gFormattedTypeStrings[]; // formatted type names
+
+extern u8 gUnknown_810AC7C[];
+extern u8 gUnknown_810AC6A[];
+
+extern u8 *gAbilityNames[];
+extern u8 *AbilityDescriptions[];
+
+
+u32 GetUnformattedTypeString(u8 type)
+{
+ return gUnformattedTypeStrings[type];
+}
+
+u32 GetFormattedTypeString(u8 type)
+{
+ return gFormattedTypeStrings[type];
+}
+
+u8 sub_8092354(u8 index)
+{
+ return gUnknown_810AC7C[index];
+}
+
+u8 sub_8092364(u8 index)
+{
+ return gUnknown_810AC6A[index];
+}
+
+void sub_8092374(char *r0, u8 index)
+{
+ strncpy(r0, gAbilityNames[index], 0x50);
+}
+
+u8 *GetAbilityDescription(u8 index)
+{
+ return AbilityDescriptions[index];
+}
+
diff --git a/src/code_8092334.c b/src/code_8092334.c
deleted file mode 100644
index 1fba58e..0000000
--- a/src/code_8092334.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "global.h"
-
-#define NUM_FRIEND_AREAS 58
-
-extern u32 gUnformattedTypeStrings[]; // unformatted type names
-extern u32 gFormattedTypeStrings[]; // formatted type names
-
-extern u8 gUnknown_810AC7C[];
-extern u8 gUnknown_810AC6A[];
-
-extern u8 *gAbilityNames[];
-extern u8 *AbilityDescriptions[];
-
-extern u8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
-extern u8 *gUnknown_203B468;
-
-extern s16 gUnknown_810AA90[];
-
-u32 GetUnformattedTypeString(u8 type)
-{
- return gUnformattedTypeStrings[type];
-}
-
-u32 GetFormattedTypeString(u8 type)
-{
- return gFormattedTypeStrings[type];
-}
-
-u8 sub_8092354(u8 r0)
-{
- return gUnknown_810AC7C[r0];
-}
-
-u8 sub_8092364(u8 r0)
-{
- return gUnknown_810AC6A[r0];
-}
-
-void sub_8092374(char *r0, u8 r1)
-{
- strncpy(r0, gAbilityNames[r1], 0x50);
-}
-
-u8 *sub_8092390(u8 r0)
-{
- return AbilityDescriptions[r0];
-}
-
-void sub_80923A0(void)
-{
- gUnknown_203B468 = gBoughtFriendAreas;
-}
-
-u8 *sub_80923B0(void)
-{
- return gBoughtFriendAreas;
-}
-
-void sub_80923B8(void)
-{
- s32 counter;
- for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
- {
- gUnknown_203B468[counter] = 0;
- }
-}
-
-u8 sub_80923D4(s32 target)
-{
- s32 counter;
- s32 index;
- s32 sum = 0;
- index = 0;
- for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
- {
- sum += gUnknown_810AA90[index];
- if(sum > target)
- {
- return counter;
- }
- index += 4;
- }
- return 0;
-}
diff --git a/src/friend_area.c b/src/friend_area.c
new file mode 100644
index 0000000..a737302
--- /dev/null
+++ b/src/friend_area.c
@@ -0,0 +1,722 @@
+#include "global.h"
+#include "constants/friend_area.h"
+#include "friend_area.h"
+
+extern bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
+extern bool8 *gFriendAreas;
+
+
+extern struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS];
+
+struct unkStruct_203B45C
+{
+ // size: 0x58?
+ u16 unk0;
+ s16 unk2;
+ u8 unk4[0x24];
+ u8 unk28;
+ u8 unk29[0x2f];
+};
+
+struct unkFriendAreaStruct
+{
+ // size: 0x18
+ u32 unk0;
+ u32 unk4;
+ u32 padding[4];
+};
+
+extern struct unkStruct_203B45C gUnknown_203B45C[];
+
+extern struct FriendAreaSettings gFriendAreaSettings[58];
+extern bool8 *gFriendAreas;
+
+extern u32 gFriendAreaDescriptions[];
+extern const char *gFriendAreaNames[];
+extern u32 gUnknown_81098A4;
+
+extern void sub_800D158(u8 *buffer, u32 *r1, const char *r2, ...);
+extern void sub_8090FEC(u32, u32 *r1, u32);
+
+
+// TODO uncomment when all references have been moved
+//static struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] =
+//{
+// [NONE] = {
+// .num_pokemon = 0,
+// .unlock_condition = 0,
+// .price = 0,
+// },
+// [BOUNTIFUL_SEA] = {
+// .num_pokemon = 9,
+// .unlock_condition = 1,
+// .price = 5500,
+// },
+// [TREASURE_SEA] = {
+// .num_pokemon = 10,
+// .unlock_condition = 1,
+// .price = 4500,
+// },
+// [SERENE_SEA] = {
+// .num_pokemon = 4,
+// .unlock_condition = 1,
+// .price = 8000,
+// },
+// [DEEP_SEA_FLOOR] = {
+// .num_pokemon = 12,
+// .unlock_condition = 1,
+// .price = 5500,
+// },
+// [DEEP_SEA_CURRENT] = {
+// .num_pokemon = 1,
+// .unlock_condition = 3,
+// .price = 0,
+// },
+// [SEAFLOOR_CAVE] = {
+// .num_pokemon = 0,
+// .unlock_condition = 0,
+// .price = 0,
+// },
+// [SHALLOW_CAVE] = {
+// .num_pokemon = 5,
+// .unlock_condition = 1,
+// .price = 5000,
+// },
+// [MT_DEEPGREEN] = {
+// .num_pokemon = 12,
+// .unlock_condition = 0,
+// .price = 130,
+// },
+// [MT_CLEFT] = {
+// .num_pokemon = 9,
+// .unlock_condition = 1,
+// .price = 5000,
+// },
+// [MT_MOONVIEW] = {
+// .num_pokemon = 6,
+// .unlock_condition = 2,
+// .price = 0,
+// },
+// [RAINBOW_PEAK] = {
+// .num_pokemon = 1,
+// .unlock_condition = 1,
+// .price = 6500,
+// },
+// [WILD_PLAINS] = {
+// .num_pokemon = 13,
+// .unlock_condition = 0,
+// .price = 100,
+// },
+// [BEAU_PLAINS] = {
+// .num_pokemon = 12,
+// .unlock_condition = 0,
+// .price = 600,
+// },
+// [SKY_BLUE_PLAINS] = {
+// .num_pokemon = 13,
+// .unlock_condition = 2,
+// .price = 0,
+// },
+// [SAFARI] = {
+// .num_pokemon = 15,
+// .unlock_condition = 0,
+// .price = 700,
+// },
+// [SCORCHED_PLAINS] = {
+// .num_pokemon = 10,
+// .unlock_condition = 1,
+// .price = 5000,
+// },
+// [SACRED_FIELD] = {
+// .num_pokemon = 3,
+// .unlock_condition = 1,
+// .price = 6500
+// },
+// [MIST_RISE_FOREST] = {
+// .num_pokemon = 14,
+// .unlock_condition = 0,
+// .price = 150
+// },
+// [FLYAWAY_FOREST] = {
+// .num_pokemon = 12,
+// .unlock_condition = 0,
+// .price = 550
+// },
+// [OVERGROWN_FOREST] = {
+// .num_pokemon = 9,
+// .unlock_condition = 0,
+// .price = 600
+// },
+// [ENERGETIC_FOREST] = {
+// .num_pokemon = 15,
+// .unlock_condition = 1,
+// .price = 5000
+// },
+// [MUSHROOM_FOREST] = {
+// .num_pokemon = 7,
+// .unlock_condition = 0,
+// .price = 500
+// },
+// [HEALING_FOREST] = {
+// .num_pokemon = 1,
+// .unlock_condition = 3,
+// .price = 0
+// },
+// [TRANSFORM_FOREST] = {
+// .num_pokemon = 6,
+// .unlock_condition = 0,
+// .price = 500
+// },
+// [SECRETIVE_FOREST] = {
+// .num_pokemon = 9,
+// .unlock_condition = 1,
+// .price = 6500
+// },
+// [RUB_A_DUB_RIVER] = {
+// .num_pokemon = 7,
+// .unlock_condition = 0,
+// .price = 500
+// },
+// [TADPOLE_POND] = {
+// .num_pokemon = 9,
+// .unlock_condition = 0,
+// .price = 500
+// },
+// [TURTLESHELL_POND] = {
+// .num_pokemon = 10,
+// .unlock_condition = 1,
+// .price = 5500
+// },
+// [MYSTIC_LAKE] = {
+// .num_pokemon = 4,
+// .unlock_condition = 1,
+// .price = 2500
+// },
+// [WATERFALL_LAKE] = {
+// .num_pokemon = 4,
+// .unlock_condition = 1,
+// .price = 3500
+// },
+// [PEANUT_SWAMP] = {
+// .num_pokemon = 7,
+// .unlock_condition = 0,
+// .price = 2500
+// },
+// [POISON_SWAMP] = {
+// .num_pokemon = 6,
+// .unlock_condition = 1,
+// .price = 8500
+// },
+// [ECHO_CAVE] = {
+// .num_pokemon = 11,
+// .unlock_condition = 1,
+// .price = 7500
+// },
+// [CRYPTIC_CAVE] = {
+// .num_pokemon = 1,
+// .unlock_condition = 1,
+// .price = 6500
+// },
+// [DRAGON_CAVE] = {
+// .num_pokemon = 3,
+// .unlock_condition = 2,
+// .price = 0
+// },
+// [BOULDER_CAVE] = {
+// .num_pokemon = 4,
+// .unlock_condition = 2,
+// .price = 0
+// },
+// [JUNGLE] = {
+// .num_pokemon = 13,
+// .unlock_condition = 0,
+// .price = 800
+// },
+// [DECRPEPIT_LAB] = {
+// .num_pokemon = 7,
+// .unlock_condition = 0,
+// .price = 1000
+// },
+// [MT_DISCIPLINE] = {
+// .num_pokemon = 11,
+// .unlock_condition = 0,
+// .price = 1200
+// },
+// [THUNDER_MEADOW] = {
+// .num_pokemon = 11,
+// .unlock_condition = 0,
+// .price = 1000
+// },
+// [POWER_PLANT] = {
+// .num_pokemon = 6,
+// .unlock_condition = 0,
+// .price = 600
+// },
+// [CRATER] = {
+// .num_pokemon = 7,
+// .unlock_condition = 1,
+// .price = 7500
+// },
+// [FURNACE_DESERT] = {
+// .num_pokemon = 7,
+// .unlock_condition = 1,
+// .price = 8500
+// },
+// [AGED_CHAMBER_AN] = {
+// .num_pokemon = 14,
+// .unlock_condition = 1,
+// .price = 5500
+// },
+// [AGED_CHAMBER_O_EXCLAIM] = {
+// .num_pokemon = 14,
+// .unlock_condition = 1,
+// .price = 5500
+// },
+// [ANCIENT_RELIC] = {
+// .num_pokemon = 6,
+// .unlock_condition = 1,
+// .price = 8000
+// },
+// [DARKNESS_RIDGE] = {
+// .num_pokemon = 13,
+// .unlock_condition = 3,
+// .price = 0
+// },
+// [FRIGID_CAVERN] = {
+// .num_pokemon = 7,
+// .unlock_condition = 1,
+// .price = 9000
+// },
+// [ICE_FLOE_BEACH] = {
+// .num_pokemon = 5,
+// .unlock_condition = 1,
+// .price = 9500
+// },
+// [VOLCANIC_PIT] = {
+// .num_pokemon = 1,
+// .unlock_condition = 3,
+// .price = 0
+// },
+// [STRATOS_LOOKOUT] = {
+// .num_pokemon = 1,
+// .unlock_condition = 3,
+// .price = 0
+// },
+// [RAVAGED_FIELD] = {
+// .num_pokemon = 5,
+// .unlock_condition = 0,
+// .price = 1000
+// },
+// [MAGNETIC_QUARRY] = {
+// .num_pokemon = 3,
+// .unlock_condition = 0,
+// .price = 1000
+// },
+// [LEGENDARY_ISLAND] = {
+// .num_pokemon = 3,
+// .unlock_condition = 3,
+// .price = 7500
+// },
+// [SOUTHERN_ISLAND] = {
+// .num_pokemon = 2,
+// .unlock_condition = 1,
+// .price = 9500
+// },
+// [ENCLOSED_ISLAND] = {
+// .num_pokemon = 1,
+// .unlock_condition = 3,
+// .price = 0
+// },
+// [FINAL_ISLAND] = {
+// .num_pokemon = 1,
+// .unlock_condition = 1,
+// .price = 8500
+// },
+//};
+
+void LoadFriendAreas(void)
+{
+ gFriendAreas = gBoughtFriendAreas;
+}
+
+bool8 *GetBoughtFriendAreas(void)
+{
+ return gBoughtFriendAreas;
+}
+
+void InitializeFriendAreas(void)
+{
+ s32 counter;
+ for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
+ {
+ gFriendAreas[counter] = FALSE;
+ }
+}
+
+u8 sub_80923D4(s32 target)
+{
+ s32 counter;
+ s32 sum = 0;
+ for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
+ {
+ sum += gFriendAreaSettings[counter].num_pokemon;
+ if(sum > target)
+ {
+ return counter;
+ }
+ }
+ return 0;
+}
+
+#ifdef NONMATCHING
+void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3)
+{
+ s32 counter;
+ bool32 flag;
+ s32 r6;
+ r6 = 0;
+ for(counter = 0; counter <= 412; counter++)
+ {
+ if((u8)(gUnknown_203B45C[counter].unk0) & 1)
+ {
+ if(((u8)gUnknown_203B45C[counter].unk2 == 0) || r2)
+ {
+ flag = (u8)gUnknown_203B45C[counter].unk4[0] == 65;
+ if(!flag || r3)
+ {
+ if(sub_80923D4(counter) == r0)
+ {
+ if(r6 <= 15)
+ {
+ r1[r6] = counter;
+ r6++;
+ }
+ }
+ }
+ }
+ }
+ }
+ r1[r6] = 0xffff;
+}
+#else
+NAKED void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tmov r10, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r9, r0\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tmov r8, r2\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r7, r3, 24\n"
+ "\tmovs r6, 0\n"
+ "\tmovs r4, 0\n"
+ "\tmov r5, r10\n"
+"_08092426:\n"
+ "\tmovs r0, 0x58\n"
+ "\tadds r1, r4, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, _08092494\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r2, r1, r0\n"
+ "\tldrb r1, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08092472\n"
+ "\tldrb r0, [r2, 0x2]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08092448\n"
+ "\tmov r0, r8\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08092472\n"
+"_08092448:\n"
+ "\tmovs r1, 0\n"
+ "\tldrb r0, [r2, 0x4]\n"
+ "\tcmp r0, 0x41\n"
+ "\tbne _08092452\n"
+ "\tmovs r1, 0x1\n"
+"_08092452:\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _0809245A\n"
+ "\tcmp r7, 0\n"
+ "\tbeq _08092472\n"
+"_0809245A:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_80923D4\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, r9\n"
+ "\tbne _08092472\n"
+ "\tcmp r6, 0xF\n"
+ "\tbgt _08092472\n"
+ "\tstrh r4, [r5]\n"
+ "\tadds r5, 0x2\n"
+ "\tadds r6, 0x1\n"
+"_08092472:\n"
+ "\tadds r4, 0x1\n"
+ "\tmovs r0, 0xCE\n"
+ "\tlsls r0, 1\n"
+ "\tcmp r4, r0\n"
+ "\tble _08092426\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadd r0, r10\n"
+ "\tldr r2, _08092498\n"
+ "\tadds r1, r2, 0\n"
+ "\tstrh r1, [r0]\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_08092494: .4byte gUnknown_203B45C\n"
+"_08092498: .4byte 0x0000ffff");
+}
+#endif
+
+#ifdef NONMATCHING
+void sub_809249C(u8 index, u8 clear)
+{
+ s32 counter;
+ bool32 flag;
+ u8 temp8;
+ u8 neg8;
+
+ if(!gFriendAreas[index])
+ return;
+ for(counter = 0; counter <= 412; counter++)
+ {
+ if((u8)(gUnknown_203B45C[counter].unk0) & 1)
+ {
+ if(sub_80923D4(counter) == index)
+ {
+ flag = (u8)gUnknown_203B45C[counter].unk4[0] == 65;
+ if(!flag)
+ {
+ temp8 = (u8)gUnknown_203B45C[counter].unk2;
+ neg8 = -temp8;
+ neg8 |= temp8;
+ // still tries to left shift before the right shift..
+ neg8 >>= 7;
+ if(neg8 != 0)
+ {
+ clear = 0;
+ }
+ else
+ {
+ gUnknown_203B45C[counter].unk0 = neg8;
+ }
+ }
+ }
+ }
+ }
+ if(clear)
+ {
+ gFriendAreas[index] = FALSE;
+ }
+}
+#else
+NAKED void sub_809249C(u8 index, u8 clear)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r7, r1, 24\n"
+ "\tldr r0, _080924F8\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, r6\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0809251A\n"
+ "\tmovs r5, 0\n"
+"_080924B4:\n"
+ "\tldr r2, _080924FC\n"
+ "\tmovs r0, 0x58\n"
+ "\tadds r1, r5, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, [r2]\n"
+ "\tadds r4, r0, r1\n"
+ "\tldrb r1, [r4]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08092502\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_80923D4\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, r6\n"
+ "\tbne _08092502\n"
+ "\tmovs r1, 0\n"
+ "\tldrb r0, [r4, 0x4]\n"
+ "\tcmp r0, 0x41\n"
+ "\tbne _080924E2\n"
+ "\tmovs r1, 0x1\n"
+"_080924E2:\n"
+ "\tcmp r1, 0\n"
+ "\tbne _080924F2\n"
+ "\tldrb r1, [r4, 0x2]\n"
+ "\tnegs r0, r1\n"
+ "\torrs r0, r1\n"
+ "\tlsrs r0, 31\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08092500\n"
+"_080924F2:\n"
+ "\tmovs r7, 0\n"
+ "\tb _08092502\n"
+ "\t.align 2, 0\n"
+"_080924F8: .4byte gFriendAreas\n"
+"_080924FC: .4byte gUnknown_203B45C\n"
+"_08092500:\n"
+ "\tstrh r0, [r4]\n"
+"_08092502:\n"
+ "\tadds r5, 0x1\n"
+ "\tmovs r0, 0xCE\n"
+ "\tlsls r0, 1\n"
+ "\tcmp r5, r0\n"
+ "\tble _080924B4\n"
+ "\tcmp r7, 0\n"
+ "\tbeq _0809251A\n"
+ "\tldr r0, _08092520\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, r6\n"
+ "\tmovs r1, 0\n"
+ "\tstrb r1, [r0]\n"
+"_0809251A:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_08092520: .4byte gFriendAreas");
+}
+#endif
+
+const char *GetFriendAreaName(u8 index)
+{
+ return gFriendAreaNames[index];
+}
+
+u8 GetFriendAreaUnlockCondition(u8 index)
+{
+ return gFriendAreaSettings[index].unlock_condition;
+}
+
+u32 GetFriendAreaPrice(u8 index)
+{
+ return gFriendAreaSettings[index].price;
+}
+
+void sub_8092558(u8 *buffer, u8 index)
+{
+ // colors the friend area name green and prints to buffer?
+ sub_800D158(buffer, &gUnknown_81098A4, gFriendAreaNames[index]);
+}
+
+#ifdef NONMATCHING
+void sub_8092578(u8 *buffer, u8 index, u8 r2)
+{
+ // I think this is when we buy the friend area from wigglytuff
+ struct unkFriendAreaStruct temp;
+ if(r2)
+ {
+ sub_8090FEC(gFriendAreaSettings[index].price, &(temp.unk4), 1);
+ // TODO: There's some stack storage here in the middle calling this func
+ // add r0, sp, 0x4
+ // str r0, [sp]
+ //temp.unk0 = temp.unk4;
+ sub_800D158(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96);
+ }
+ else
+ {
+ strcpy(buffer, gFriendAreaNames[index]);
+ }
+}
+#else
+NAKED void sub_8092578(u8 *buffer, u8 index, u8 r2)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tsub sp, 0x18\n"
+ "\tadds r5, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r4, r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tcmp r2, 0\n"
+ "\tbeq _080925C0\n"
+ "\tldr r0, _080925B4\n"
+ "\tlsls r1, r4, 3\n"
+ "\tadds r0, 0x4\n"
+ "\tadds r1, r0\n"
+ "\tldr r0, [r1]\n"
+ "\tadd r1, sp, 0x4\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_8090FEC\n"
+ "\tldr r1, _080925B8\n"
+ "\tldr r2, _080925BC\n"
+ "\tlsls r0, r4, 2\n"
+ "\tadds r0, r2\n"
+ "\tldr r2, [r0]\n"
+ "\tadd r0, sp, 0x4\n"
+ "\tstr r0, [sp]\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r3, 0x60\n"
+ "\tbl sub_800D158\n"
+ "\tb _080925CE\n"
+ "\t.align 2, 0\n"
+"\t_080925B4: .4byte gFriendAreaSettings\n"
+"\t_080925B8: .4byte gUnknown_81098AC\n"
+"\t_080925BC: .4byte gFriendAreaNames\n"
+"\t_080925C0:\n"
+ "\tldr r0, _080925D8\n"
+ "\tlsls r1, r4, 2\n"
+ "\tadds r1, r0\n"
+ "\tldr r1, [r1]\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl strcpy\n"
+"\t_080925CE:\n"
+ "\tadd sp, 0x18\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"\t_080925D8: .4byte gFriendAreaNames");
+}
+#endif
+
+u32 GetFriendAreaDescription(u8 index)
+{
+ return gFriendAreaDescriptions[index];
+}
+
+void UnlockFriendArea(u8 index)
+{
+ gFriendAreas[index] = TRUE;
+}
+
+bool8 GetFriendAreaStatus(u8 index)
+{
+ return gFriendAreas[index];
+}
+
+bool8 HasAllFriendAreas(void)
+{
+ s32 counter;
+ for(counter = 1; counter < NUM_FRIEND_AREAS; counter++)
+ {
+ if(!gFriendAreas[counter])
+ {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
diff --git a/src/friend_area_1.c b/src/friend_area_1.c
new file mode 100644
index 0000000..ae04cdf
--- /dev/null
+++ b/src/friend_area_1.c
@@ -0,0 +1,90 @@
+#include "global.h"
+#include "constants/friend_area.h"
+
+extern bool8 *gFriendAreas;
+extern void sub_809485C(u32 *r0, u32 r1, u32 r2);
+extern void sub_8094924(u32 *r0, u32 *r1, u32);
+extern void nullsub_102(u32 *r0);
+extern void sub_809488C(u32 *r0, u32 *r1, u32 r2);
+extern void sub_809486C(u32 *r0, u32 r1, u32 r2);
+
+#ifdef NONMATCHING
+u32 sub_80927A8(u32 r0, u32 r1)
+{
+ u32 temp[5];
+ s32 counter;
+
+ sub_809486C(temp, r0, r1);
+ for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
+ {
+ // TODO moves into R1 for the load else it matches
+ if(!gFriendAreas[counter])
+ temp[4] = gFriendAreas[counter];
+ else
+ temp[4] = -1;
+ sub_809488C(temp, &(temp[4]), 1);
+ }
+ nullsub_102(temp);
+ return temp[2];
+}
+#else
+NAKED u32 sub_80927A8(u32 r0, u32 r1)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tsub sp, 0x14\n"
+ "\tadds r3, r0, 0\n"
+ "\tadds r2, r1, 0\n"
+ "\tmov r0, sp\n"
+ "\tadds r1, r3, 0\n"
+ "\tbl sub_809486C\n"
+ "\tmovs r4, 0\n"
+ "\tadd r5, sp, 0x10\n"
+"_080927BC:\n"
+ "\tldr r0, _080927F0\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, r4\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080927CC\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+"_080927CC:\n"
+ "\tstr r0, [sp, 0x10]\n"
+ "\tmov r0, sp\n"
+ "\tadds r1, r5, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_809488C\n"
+ "\tadds r4, 0x1\n"
+ "\tcmp r4, 0x39\n"
+ "\tble _080927BC\n"
+ "\tmov r0, sp\n"
+ "\tbl nullsub_102\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tadd sp, 0x14\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+"_080927F0: .4byte gFriendAreas");
+}
+#endif
+
+u32 sub_80927F4(u32 r0, u32 r1)
+{
+ u32 temp[5];
+ s32 counter;
+
+ sub_809485C(temp, r0, r1);
+ for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
+ {
+ sub_8094924(temp, &(temp[4]), 1);
+ // It's setting whether we have the friend area or not
+ if((temp[4] & 1))
+ gFriendAreas[counter] = TRUE;
+ else
+ gFriendAreas[counter] = FALSE;
+ }
+ nullsub_102(temp);
+ return temp[2];
+}
+
diff --git a/src/save_mid.c b/src/save_mid.c
index ddf6d4d..604c98d 100644
--- a/src/save_mid.c
+++ b/src/save_mid.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "save.h"
+#include "friend_area.h"
extern struct UnkStruct_203B184 *gUnknown_203B184;
extern struct unkTimeStruct *gUnknown_203B47C;
@@ -28,7 +29,7 @@ extern struct unk_203B188 *gUnknown_203B188;
extern u32 *gUnknown_203B45C;
extern u32 *gUnknown_203B460;
extern u32 gUnknown_203B464;
-extern u8 *gUnknown_203B468;
+extern u8 *gFriendAreas;
extern u32 gUnknown_203B46C;
extern u8 *gUnknown_203B480;
extern u8 *gUnknown_203B484;
@@ -46,8 +47,6 @@ extern u32 *sub_80909D0(void);
extern void sub_80909D8(void);
extern u32 sub_809208C(void);
extern void sub_8092094(void);
-extern u8 *sub_80923B0(void);
-extern void sub_80923B8(void);
extern u32 sub_8094990(void);
extern void sub_8094998(u8 r0);
extern u8 *sub_80950F8(void);
@@ -184,7 +183,7 @@ void sub_80122F4(void)
void sub_8012300(void)
{
- sub_80923B8();
+ InitializeFriendAreas();
sub_808CE08();
sub_80909D8();
sub_8092094();
@@ -218,7 +217,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B464 = r0->unk1C;
gUnknown_203B494 = r0->unk20;
gUnknown_203B498 = r0->unk24;
- gUnknown_203B468 = r0->unk28;
+ gFriendAreas = r0->BoughtFriendAreas;
gUnknown_203B46C = r0->unk2C;
gUnknown_203B47C = r0->unk30;
return;
@@ -233,7 +232,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B464 = sub_809208C();
gUnknown_203B494 = sub_8097680();
gUnknown_203B498 = sub_8097F6C();
- gUnknown_203B468 = sub_80923B0();
+ gFriendAreas = GetBoughtFriendAreas();
gUnknown_203B46C = sub_8094990();
gUnknown_203B47C = sub_8094FA0();
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 112158b..25e3605 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -398,7 +398,7 @@ gUnknown_202DE58 = .; /* 202DE58 */
gUnknown_202DEA8 = .; /* 202DEA8 */
. += 0xF0;
-gUnknown_202DF98 = .; /* 202DF98 ( Parner Nickname? ) */
+gUnknown_202DF98 = .; /* 202DF98 ( Available Pokemon Names ) */
. += 0x50;
gUnknown_202DFE8 = .; /* 202DFE8 */
diff --git a/sym_ewram2.txt b/sym_ewram2.txt
index e646633..d736c01 100644
--- a/sym_ewram2.txt
+++ b/sym_ewram2.txt
@@ -593,7 +593,7 @@ gUnknown_203B460 = .; /* 203B460 */
gUnknown_203B464 = .; /* 203B464 */
. += 0x4;
-gUnknown_203B468 = .; /* 203B468 */
+gFriendAreas = .; /* 203B468 */
. += 0x4;
gUnknown_203B46C = .; /* 203B46C */