diff options
-rw-r--r-- | asm/code_800D090.s | 2 | ||||
-rw-r--r-- | asm/code_801D760.s | 34 | ||||
-rw-r--r-- | asm/code_8041AD0.s | 221 | ||||
-rw-r--r-- | asm/code_80521D0.s | 14 | ||||
-rw-r--r-- | asm/code_808EAB0.s | 6 | ||||
-rw-r--r-- | asm/code_8092334.s | 610 | ||||
-rw-r--r-- | asm/code_8095014.s | 6 | ||||
-rw-r--r-- | asm/code_809747C.s | 2 | ||||
-rw-r--r-- | asm/code_809D148.s | 30 | ||||
-rw-r--r-- | asm/event_flag.s | 28 | ||||
-rw-r--r-- | asm/friend_area_1.s | 209 | ||||
-rw-r--r-- | asm/pokemon.s | 6 | ||||
-rw-r--r-- | asm/wonder_mail.s | 12 | ||||
-rw-r--r-- | data/data_80F4278.s | 308 | ||||
-rw-r--r-- | include/constants/friend_area.h | 60 | ||||
-rw-r--r-- | include/friend_area.h | 28 | ||||
-rw-r--r-- | include/save.h | 2 | ||||
-rwxr-xr-x | ld_script.txt | 5 | ||||
-rw-r--r-- | src/code_2.c | 4 | ||||
-rw-r--r-- | src/code_8041AD0.c | 300 | ||||
-rw-r--r-- | src/code_80428A0.c | 70 | ||||
-rw-r--r-- | src/code_808DAB4.c | 17 | ||||
-rw-r--r-- | src/code_809017C.c | 42 | ||||
-rw-r--r-- | src/code_8092334.c | 84 | ||||
-rw-r--r-- | src/friend_area.c | 722 | ||||
-rw-r--r-- | src/friend_area_1.c | 90 | ||||
-rw-r--r-- | src/save_mid.c | 11 | ||||
-rw-r--r-- | sym_ewram.txt | 2 | ||||
-rw-r--r-- | sym_ewram2.txt | 2 |
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 */ |