Friend Area Decomp Work (#15)

split out and work on friend area stuff
This commit is contained in:
Seth Barberee
2020-12-31 18:30:16 -06:00
committed by GitHub
parent 01ec8edb40
commit 87cd9885a9
29 changed files with 1751 additions and 1230 deletions

View File

@@ -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:

View File

@@ -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

View File

@@ -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}

View File

@@ -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:

View File

@@ -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

View File

@@ -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}

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

209
asm/friend_area_1.s Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -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]

View File

@@ -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 0x34, 0x21, 0x00, 0x00
.byte 0x0b, 0x00, 0x01, 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x01, 0x00, 0x01, 0x00
.byte 0x64, 0x19, 0x00, 0x00
.byte 0x03, 0x00, 0x02, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x04, 0x00, 0x02, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x0d, 0x00, 0x00, 0x00
.byte 0x20, 0x03, 0x00, 0x00
.byte 0x07, 0x00, 0x00, 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x0b, 0x00, 0x00, 0x00
.byte 0xb0, 0x04, 0x00, 0x00
.byte 0x0b, 0x00, 0x00, 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x06, 0x00, 0x00, 0x00
.byte 0x58, 0x02, 0x00, 0x00
.byte 0x07, 0x00, 0x01, 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x07, 0x00, 0x01, 0x00
.byte 0x34, 0x21, 0x00, 0x00
.byte 0x0e, 0x00, 0x01, 0x00
.byte 0x7c, 0x15, 0x00, 0x00
.byte 0x0e, 0x00, 0x01, 0x00
.byte 0x7c, 0x15, 0x00, 0x00
.byte 0x06, 0x00, 0x01, 0x00
.byte 0x40, 0x1f, 0x00, 0x00
.byte 0x0d, 0x00, 0x03, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x07, 0x00, 0x01, 0x00
.byte 0x28, 0x23, 0x00, 0x00
.byte 0x05, 0x00, 0x01, 0x00
.byte 0x1c, 0x25, 0x00, 0x00
.byte 0x01, 0x00, 0x03, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x03, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x05, 0x00, 0x00, 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x03, 0x00, 0x03, 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x02, 0x00, 0x01, 0x00
.byte 0x1c, 0x25, 0x00, 0x00
.byte 0x01, 0x00, 0x03, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x01, 0x00
.byte 0x06, 0x00
.byte 0x01
.byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
.global gUnknown_810AC60
.byte 0x0b, 0x00
.byte 0x01
.byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x01, 0x00
.byte 0x01
.byte 0x00
.byte 0x64, 0x19, 0x00, 0x00
.byte 0x03, 0x00
.byte 0x02
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x04, 0x00
.byte 0x02
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x0d, 0x00
.byte 0x00
.byte 0x00
.byte 0x20, 0x03, 0x00, 0x00
.byte 0x07, 0x00
.byte 0x00
.byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x0b, 0x00
.byte 0x00
.byte 0x00
.byte 0xb0, 0x04, 0x00, 0x00
.byte 0x0b, 0x00
.byte 0x00
.byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x06, 0x00
.byte 0x00
.byte 0x00
.byte 0x58, 0x02, 0x00, 0x00
.byte 0x07, 0x00
.byte 0x01
.byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x07, 0x00
.byte 0x01
.byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
.byte 0x0e, 0x00
.byte 0x01
.byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
.byte 0x0e, 0x00
.byte 0x01
.byte 0x00
.byte 0x7c, 0x15, 0x00, 0x00
.byte 0x06, 0x00
.byte 0x01
.byte 0x00
.byte 0x40, 0x1f, 0x00, 0x00
.byte 0x0d, 0x00
.byte 0x03
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x07, 0x00
.byte 0x01
.byte 0x00
.byte 0x28, 0x23, 0x00, 0x00
.byte 0x05, 0x00
.byte 0x01
.byte 0x00
.byte 0x1c, 0x25, 0x00, 0x00
.byte 0x01, 0x00
.byte 0x03
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00
.byte 0x03
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x05, 0x00
.byte 0x00
.byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x03, 0x00
.byte 0x00
.byte 0x00
.byte 0xe8, 0x03, 0x00, 0x00
.byte 0x03, 0x00
.byte 0x03
.byte 0x00
.byte 0x4c, 0x1d, 0x00, 0x00
.byte 0x02, 0x00
.byte 0x01
.byte 0x00
.byte 0x1c, 0x25, 0x00, 0x00
.byte 0x01, 0x00
.byte 0x03
.byte 0x00
.byte 0x00, 0x00, 0x00, 0x00
@ Final Island
.byte 0x01, 0x00
.byte 0x01
.byte 0x00
.byte 0x34, 0x21, 0x00, 0x00
.global gUnknown_810AC60
gUnknown_810AC60: @ 810AC60
.byte 0x0C, 0x00

View File

@@ -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

28
include/friend_area.h Normal file
View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();

View File

@@ -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 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);
extern u8 *gUnknown_203B418;
void sub_8041AD0(u32 r0)
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);
void sub_80421C0(struct unkDungeon_8041D5C *r0, u16 r1);
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);
}

View File

@@ -1,145 +1,153 @@
#include "global.h"
extern void sub_804151C(u32 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);
struct unkDungeon_8041D5C
{
u8 padding[0x70];
u8 *unk70[100];
};
void sub_80428A0(u32 r0)
extern void sub_804151C(struct unkDungeon_8041D5C *r0, u32 r1, u8 r2);
extern void sub_803E708(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(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);
}

View File

@@ -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));
}

42
src/code_809017C.c Normal file
View File

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

View File

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

722
src/friend_area.c Normal file
View File

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

90
src/friend_area_1.c Normal file
View File

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

View File

@@ -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();

View File

@@ -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 */

View File

@@ -593,7 +593,7 @@ gUnknown_203B460 = .; /* 203B460 */
gUnknown_203B464 = .; /* 203B464 */
. += 0x4;
gUnknown_203B468 = .; /* 203B468 */
gFriendAreas = .; /* 203B468 */
. += 0x4;
gUnknown_203B46C = .; /* 203B46C */