summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2016-10-30 17:59:09 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-30 15:59:09 -0700
commita45e18753afffb80e3633fa006daf84325860208 (patch)
tree35ec86eb1ec7f191354c7b2c5be46493ff5d3a5b
parentb86183aecd4e7e264158cd6cdb5e1332c41d4340 (diff)
partially decompile dewford_trend.c and record_mixing.c (#78)
* start decompiling dewford_trend * figure out some gSaveBlock1 members * decompile more functions * decompile sub_80FA4E4 * start decompiling record_mixing.c * Decompile more code * decompile more functions * tabs to spaces
-rw-r--r--asm/dewford_trend.s939
-rw-r--r--asm/record_mixing.s1237
-rw-r--r--data/data2.s19
-rw-r--r--include/global.h87
-rw-r--r--ld_script.txt3
-rw-r--r--shared_syms.txt7
-rw-r--r--src/dewford_trend.c644
-rw-r--r--src/record_mixing.c735
-rw-r--r--src/wild_encounter.c2
9 files changed, 1449 insertions, 2224 deletions
diff --git a/asm/dewford_trend.s b/asm/dewford_trend.s
deleted file mode 100644
index d2b887e2a..000000000
--- a/asm/dewford_trend.s
+++ /dev/null
@@ -1,939 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80FA17C
-sub_80FA17C: @ 80FA17C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- ldr r7, _080FA1B4 @ =gSaveBlock1
- ldr r0, _080FA1B8 @ =0x00002dd4
- adds r0, r7
- mov r9, r0
- movs r1, 0x1
- mov r8, r1
-_080FA192:
- movs r0, 0xA
- bl sub_80EB72C
- lsls r4, r6, 3
- adds r5, r4, r7
- ldr r2, _080FA1BC @ =0x00002dd8
- adds r1, r5, r2
- strh r0, [r1]
- bl Random
- mov r1, r8
- ands r1, r0
- cmp r1, 0
- beq _080FA1C0
- movs r0, 0xC
- b _080FA1C2
- .align 2, 0
-_080FA1B4: .4byte gSaveBlock1
-_080FA1B8: .4byte 0x00002dd4
-_080FA1BC: .4byte 0x00002dd8
-_080FA1C0:
- movs r0, 0xD
-_080FA1C2:
- bl sub_80EB72C
- ldr r2, _080FA214 @ =0x00002dda
- adds r1, r5, r2
- strh r0, [r1]
- bl Random
- adds r3, r4, r7
- mov r2, r8
- ands r2, r0
- ldr r5, _080FA218 @ =0x00002dd5
- adds r3, r5
- lsls r2, 6
- ldrb r0, [r3]
- movs r5, 0x41
- negs r5, r5
- adds r1, r5, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r3]
- mov r1, r9
- adds r0, r4, r1
- bl sub_80FA740
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _080FA192
- ldr r0, _080FA21C @ =gSaveBlock1 + 0x2DD4
- movs r1, 0x5
- movs r2, 0
- bl sub_80FA46C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA214: .4byte 0x00002dda
-_080FA218: .4byte 0x00002dd5
-_080FA21C: .4byte gSaveBlock1 + 0x2DD4
- thumb_func_end sub_80FA17C
-
- thumb_func_start sub_80FA220
-sub_80FA220: @ 80FA220
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080FA236
- b _080FA34E
-_080FA236:
- lsls r0, r1, 2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- mov r10, r0
- movs r1, 0x7F
- mov r9, r1
- movs r2, 0x80
- negs r2, r2
- mov r8, r2
-_080FA24A:
- ldr r2, [sp]
- mov r4, r10
- lsls r0, r4, 3
- ldr r1, _080FA28C @ =gSaveBlock1 + 0x2DD4
- adds r5, r0, r1
- ldrb r6, [r5, 0x1]
- movs r0, 0x40
- ands r0, r6
- cmp r0, 0
- bne _080FA2A0
- ldrb r4, [r5]
- lsls r3, r4, 25
- lsrs r1, r3, 25
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r1, r0
- bcc _080FA290
- adds r0, r1, 0
- subs r0, r2
- mov r2, r9
- ands r0, r2
- mov r1, r8
- ands r1, r4
- orrs r1, r0
- strb r1, [r5]
- movs r0, 0x7F
- ands r1, r0
- cmp r1, 0
- bne _080FA336
- movs r0, 0x40
- orrs r0, r6
- b _080FA334
- .align 2, 0
-_080FA28C: .4byte gSaveBlock1 + 0x2DD4
-_080FA290:
- lsrs r0, r3, 25
- subs r2, r0
- mov r0, r8
- ands r0, r4
- strb r0, [r5]
- movs r0, 0x40
- orrs r0, r6
- strb r0, [r5, 0x1]
-_080FA2A0:
- ldrb r7, [r5]
- lsls r0, r7, 25
- lsrs r0, 25
- adds r4, r0, r2
- ldrh r0, [r5]
- lsls r6, r0, 18
- lsls r0, r4, 16
- lsrs r0, 16
- lsrs r1, r6, 25
- cmp r0, r1
- bls _080FA310
- adds r0, r4, 0
- bl __umodsi3
- adds r3, r0, 0
- lsrs r1, r6, 25
- adds r0, r4, 0
- str r3, [sp, 0x4]
- bl __udivsi3
- adds r4, r0, 0
- movs r0, 0x1
- eors r4, r0
- ands r4, r0
- lsls r2, r4, 6
- ldrb r0, [r5, 0x1]
- movs r4, 0x41
- negs r4, r4
- adds r1, r4, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0x1]
- movs r1, 0x40
- ands r0, r1
- ldr r3, [sp, 0x4]
- cmp r0, 0
- beq _080FA2FA
- adds r1, r3, 0
- mov r0, r9
- ands r1, r0
- mov r0, r8
- ands r0, r7
- orrs r0, r1
- strb r0, [r5]
- b _080FA336
-_080FA2FA:
- ldrh r0, [r5]
- lsls r0, 18
- lsrs r0, 25
- subs r0, r3
- mov r1, r9
- ands r0, r1
- mov r1, r8
- ands r1, r7
- orrs r1, r0
- strb r1, [r5]
- b _080FA336
-_080FA310:
- mov r2, r9
- ands r4, r2
- mov r0, r8
- ands r0, r7
- orrs r0, r4
- strb r0, [r5]
- lsls r0, 25
- ldrh r1, [r5]
- lsls r1, 18
- lsrs r0, 25
- lsrs r1, 25
- cmp r0, r1
- bne _080FA336
- ldrb r0, [r5, 0x1]
- movs r4, 0x41
- negs r4, r4
- adds r1, r4, 0
- ands r0, r1
-_080FA334:
- strb r0, [r5, 0x1]
-_080FA336:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- cmp r0, 0x4
- bls _080FA24A
- ldr r0, _080FA360 @ =gSaveBlock1 + 0x2DD4
- movs r1, 0x5
- movs r2, 0
- bl sub_80FA46C
-_080FA34E:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA360: .4byte gSaveBlock1 + 0x2DD4
- thumb_func_end sub_80FA220
-
- thumb_func_start sub_80FA364
-sub_80FA364: @ 80FA364
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- movs r0, 0
- movs r1, 0
- str r0, [sp]
- str r1, [sp, 0x4]
- adds r0, r4, 0
- bl sub_80FA7C8
- lsls r0, 24
- cmp r0, 0
- bne _080FA462
- ldr r5, _080FA3B4 @ =0x00000833
- adds r0, r5, 0
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080FA3C8
- adds r0, r5, 0
- bl FlagSet
- ldr r0, _080FA3B8 @ =0x00000834
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080FA3C8
- ldr r1, _080FA3BC @ =gSaveBlock1
- ldrh r2, [r4]
- ldr r3, _080FA3C0 @ =0x00002dd8
- adds r0, r1, r3
- strh r2, [r0]
- ldrh r0, [r4, 0x2]
- ldr r2, _080FA3C4 @ =0x00002dda
- adds r1, r2
- strh r0, [r1]
- movs r0, 0x1
- b _080FA464
- .align 2, 0
-_080FA3B4: .4byte 0x00000833
-_080FA3B8: .4byte 0x00000834
-_080FA3BC: .4byte gSaveBlock1
-_080FA3C0: .4byte 0x00002dd8
-_080FA3C4: .4byte 0x00002dda
-_080FA3C8:
- ldrh r1, [r4, 0x2]
- lsls r1, 16
- ldrh r0, [r4]
- orrs r0, r1
- str r0, [sp, 0x4]
- movs r1, 0x80
- lsls r1, 7
- ldr r0, [sp]
- orrs r0, r1
- str r0, [sp]
- mov r0, sp
- bl sub_80FA740
- movs r6, 0
-_080FA3E4:
- lsls r4, r6, 3
- ldr r5, _080FA444 @ =gSaveBlock1 + 0x2DD4
- adds r1, r4, r5
- mov r0, sp
- movs r2, 0
- bl atk90_changetypestoenemyattacktype
- lsls r0, 24
- adds r7, r4, 0
- cmp r0, 0
- beq _080FA450
- movs r3, 0x4
- ldr r0, _080FA448 @ =0xffffd22c
- adds r0, r5
- mov r12, r0
- cmp r3, r6
- bls _080FA428
- mov r5, r12
- ldr r4, _080FA44C @ =0x00002dd4
-_080FA40A:
- lsls r2, r3, 3
- adds r2, r5
- adds r2, r4
- subs r3, 0x1
- lsls r0, r3, 3
- adds r0, r5
- adds r0, r4
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsls r3, 16
- lsrs r3, 16
- cmp r3, r6
- bhi _080FA40A
-_080FA428:
- mov r3, r12
- adds r2, r7, r3
- ldr r0, _080FA44C @ =0x00002dd4
- adds r2, r0
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- movs r0, 0
- cmp r6, 0
- bne _080FA464
- movs r0, 0x1
- b _080FA464
- .align 2, 0
-_080FA444: .4byte gSaveBlock1 + 0x2DD4
-_080FA448: .4byte 0xffffd22c
-_080FA44C: .4byte 0x00002dd4
-_080FA450:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _080FA3E4
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- str r0, [r5, 0x20]
- str r1, [r5, 0x24]
-_080FA462:
- movs r0, 0
-_080FA464:
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA364
-
- thumb_func_start sub_80FA46C
-sub_80FA46C: @ 80FA46C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- movs r2, 0
- cmp r2, r7
- bcs _080FA4D4
-_080FA488:
- adds r1, r2, 0x1
- lsls r0, r1, 16
- lsrs r5, r0, 16
- mov r8, r1
- cmp r5, r7
- bcs _080FA4CA
- lsls r0, r2, 3
- mov r1, r9
- adds r6, r1, r0
-_080FA49A:
- lsls r0, r5, 3
- mov r1, r9
- adds r4, r1, r0
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, r10
- bl atk90_changetypestoenemyattacktype
- lsls r0, 24
- cmp r0, 0
- beq _080FA4C0
- ldr r2, [r4]
- ldr r3, [r4, 0x4]
- ldr r0, [r6]
- ldr r1, [r6, 0x4]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r2, [r6]
- str r3, [r6, 0x4]
-_080FA4C0:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r7
- bcc _080FA49A
-_080FA4CA:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r2, r0, 16
- cmp r2, r7
- bcc _080FA488
-_080FA4D4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FA46C
-
- thumb_func_start sub_80FA4E4
-sub_80FA4E4: @ 80FA4E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r6, r0, 0
- adds r5, r1, 0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r4, 0
- cmp r4, r8
- bcs _080FA520
-_080FA500:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080FA554 @ =0x02007800
- adds r0, r1
- adds r1, r4, 0
- muls r1, r5
- adds r1, r6, r1
- movs r2, 0x28
- bl memcpy
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r8
- bcc _080FA500
-_080FA520:
- ldr r5, _080FA554 @ =0x02007800
- movs r0, 0x80
- lsls r0, 1
- adds r3, r5, r0
- movs r7, 0
- movs r4, 0
- cmp r4, r8
- bcs _080FA588
-_080FA530:
- movs r6, 0
-_080FA532:
- adds r0, r5, 0
- adds r1, r7, 0
- str r3, [sp]
- bl sub_80FA828
- lsls r0, 16
- asrs r0, 16
- ldr r3, [sp]
- cmp r0, 0
- bge _080FA558
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- stm r3!, {r0,r1}
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- b _080FA572
- .align 2, 0
-_080FA554: .4byte 0x02007800
-_080FA558:
- lsls r1, r0, 3
- ldr r0, _080FA5B4 @ =0x02007900
- adds r2, r1, r0
- ldrb r1, [r2]
- lsls r1, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bcs _080FA572
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
-_080FA572:
- adds r5, 0x8
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _080FA532
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r8
- bcc _080FA530
-_080FA588:
- ldr r4, _080FA5B4 @ =0x02007900
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x2
- bl sub_80FA46C
- adds r5, r4, 0
- ldr r3, _080FA5B8 @ =gSaveBlock1 + 0x2DD4
- movs r4, 0
-_080FA59A:
- ldm r5!, {r0,r1}
- stm r3!, {r0,r1}
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _080FA59A
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA5B4: .4byte 0x02007900
-_080FA5B8: .4byte gSaveBlock1 + 0x2DD4
- thumb_func_end sub_80FA4E4
-
- thumb_func_start sub_80FA5BC
-sub_80FA5BC: @ 80FA5BC
- push {lr}
- ldr r0, _080FA5D8 @ =gUnknown_0202E8CC
- ldrh r1, [r0]
- lsls r1, 3
- ldr r0, _080FA5DC @ =gSaveBlock1 + 0x2DD4
- adds r1, r0
- ldr r0, _080FA5E0 @ =gStringVar1
- adds r1, 0x4
- movs r2, 0x2
- movs r3, 0x1
- bl ConvertEasyChatWordsToString
- pop {r0}
- bx r0
- .align 2, 0
-_080FA5D8: .4byte gUnknown_0202E8CC
-_080FA5DC: .4byte gSaveBlock1 + 0x2DD4
-_080FA5E0: .4byte gStringVar1
- thumb_func_end sub_80FA5BC
-
- thumb_func_start sub_80FA5E4
-sub_80FA5E4: @ 80FA5E4
- push {r4,lr}
- movs r4, 0
- ldr r3, _080FA630 @ =gSaveBlock1
- ldr r1, _080FA634 @ =0x00002dd4
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 25
- lsrs r1, 25
- ldr r2, _080FA638 @ =0x00002ddc
- adds r0, r3, r2
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 25
- subs r1, r0
- cmp r1, 0x1
- bgt _080FA626
- ldr r1, _080FA63C @ =0x00002dd5
- adds r0, r3, r1
- ldrb r1, [r0]
- movs r2, 0x40
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080FA626
- ldr r1, _080FA640 @ =0x00002ddd
- adds r0, r3, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- negs r0, r0
- lsrs r4, r0, 31
-_080FA626:
- ldr r0, _080FA644 @ =gScriptResult
- strh r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA630: .4byte gSaveBlock1
-_080FA634: .4byte 0x00002dd4
-_080FA638: .4byte 0x00002ddc
-_080FA63C: .4byte 0x00002dd5
-_080FA640: .4byte 0x00002ddd
-_080FA644: .4byte gScriptResult
- thumb_func_end sub_80FA5E4
-
- thumb_func_start sub_80FA648
-sub_80FA648: @ 80FA648
- ldr r2, _080FA664 @ =gScriptResult
- ldr r0, _080FA668 @ =gSaveBlock1
- ldr r3, _080FA66C @ =0x00002dd8
- adds r1, r0, r3
- adds r3, 0x2
- adds r0, r3
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- strh r0, [r2]
- bx lr
- .align 2, 0
-_080FA664: .4byte gScriptResult
-_080FA668: .4byte gSaveBlock1
-_080FA66C: .4byte 0x00002dd8
- thumb_func_end sub_80FA648
-
- thumb_func_start atk90_changetypestoenemyattacktype
-atk90_changetypestoenemyattacktype: @ 80FA670
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r2, 0
- cmp r2, 0x1
- beq _080FA6B6
- cmp r2, 0x1
- bgt _080FA68A
- cmp r2, 0
- beq _080FA690
- b _080FA732
-_080FA68A:
- cmp r0, 0x2
- beq _080FA6E2
- b _080FA732
-_080FA690:
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _080FA72E
- cmp r1, r0
- bcc _080FA6DE
- ldrh r0, [r3]
- lsls r3, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r3, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _080FA72E
- lsrs r1, r3, 25
- lsrs r0, r2, 25
- b _080FA6DA
-_080FA6B6:
- ldrh r0, [r3]
- lsls r4, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _080FA72E
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bcc _080FA6DE
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _080FA72E
-_080FA6DA:
- cmp r1, r0
- bcs _080FA732
-_080FA6DE:
- movs r0, 0
- b _080FA73A
-_080FA6E2:
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _080FA72E
- cmp r1, r0
- bcc _080FA6DE
- ldrh r0, [r3]
- lsls r4, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _080FA72E
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bcc _080FA6DE
- ldrh r1, [r3, 0x2]
- ldrh r0, [r5, 0x2]
- cmp r1, r0
- bhi _080FA72E
- cmp r1, r0
- bcc _080FA6DE
- ldrh r1, [r3, 0x4]
- ldrh r0, [r5, 0x4]
- cmp r1, r0
- bhi _080FA72E
- cmp r1, r0
- bcc _080FA6DE
- ldrh r1, [r3, 0x6]
- ldrh r0, [r5, 0x6]
- cmp r1, r0
- bhi _080FA72E
- cmp r1, r0
- bcc _080FA6DE
-_080FA72E:
- movs r0, 0x1
- b _080FA73A
-_080FA732:
- bl Random
- movs r1, 0x1
- ands r0, r1
-_080FA73A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end atk90_changetypestoenemyattacktype
-
- thumb_func_start sub_80FA740
-sub_80FA740: @ 80FA740
- push {r4,r5,lr}
- adds r5, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x32
- bls _080FA782
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x50
- bls _080FA782
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_080FA782:
- adds r1, r4, 0
- adds r1, 0x1E
- movs r0, 0x7F
- ands r1, r0
- lsls r1, 7
- ldrh r2, [r5]
- ldr r0, _080FA7C4 @ =0xffffc07f
- ands r0, r2
- orrs r0, r1
- strh r0, [r5]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0x1
- bl __modsi3
- adds r0, 0x1E
- movs r1, 0x7F
- ands r0, r1
- ldrb r2, [r5]
- movs r1, 0x80
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- bl Random
- strh r0, [r5, 0x2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA7C4: .4byte 0xffffc07f
- thumb_func_end sub_80FA740
-
- thumb_func_start sub_80FA7C8
-sub_80FA7C8: @ 80FA7C8
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r4, 0
-_080FA7CE:
- lsls r1, r4, 3
- ldr r0, _080FA7E4 @ =gSaveBlock1 + 0x2DD8
- adds r1, r0
- adds r0, r5, 0
- bl sub_80FA7FC
- lsls r0, 24
- cmp r0, 0
- beq _080FA7E8
- movs r0, 0x1
- b _080FA7F4
- .align 2, 0
-_080FA7E4: .4byte gSaveBlock1 + 0x2DD8
-_080FA7E8:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _080FA7CE
- movs r0, 0
-_080FA7F4:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA7C8
-
- thumb_func_start sub_80FA7FC
-sub_80FA7FC: @ 80FA7FC
- push {r4,lr}
- adds r3, r0, 0
- adds r2, r1, 0
- movs r4, 0
-_080FA804:
- ldrh r1, [r3]
- ldrh r0, [r2]
- adds r2, 0x2
- adds r3, 0x2
- cmp r1, r0
- beq _080FA814
- movs r0, 0
- b _080FA820
-_080FA814:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _080FA804
- movs r0, 0x1
-_080FA820:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA7FC
-
- thumb_func_start sub_80FA828
-sub_80FA828: @ 80FA828
- push {r4-r7,lr}
- adds r7, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r6, _080FA84C @ =0x02007900
- movs r4, 0
- cmp r4, r5
- bge _080FA862
-_080FA838:
- adds r1, r6, 0x4
- adds r0, r7, 0x4
- bl sub_80FA7FC
- lsls r0, 24
- cmp r0, 0
- beq _080FA850
- lsls r0, r4, 16
- asrs r0, 16
- b _080FA866
- .align 2, 0
-_080FA84C: .4byte 0x02007900
-_080FA850:
- adds r6, 0x8
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, r5
- blt _080FA838
-_080FA862:
- movs r0, 0x1
- negs r0, r0
-_080FA866:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA828
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/record_mixing.s b/asm/record_mixing.s
index e9c39eadc..1c981d167 100644
--- a/asm/record_mixing.s
+++ b/asm/record_mixing.s
@@ -6,1243 +6,6 @@
.text
- thumb_func_start sub_80B929C
-sub_80B929C: @ 80B929C
- push {lr}
- ldr r0, _080B92A8 @ =sub_80B9484
- bl sub_8083A84
- pop {r0}
- bx r0
- .align 2, 0
-_080B92A8: .4byte sub_80B9484
- thumb_func_end sub_80B929C
-
- thumb_func_start sub_80B92AC
-sub_80B92AC: @ 80B92AC
- push {r4-r6,lr}
- bl sub_80BC300
- bl sub_80C045C
- ldr r6, _080B9364 @ =0x02018000
- ldr r0, _080B9368 @ =gUnknown_083D026C
- ldr r1, [r0]
- movs r2, 0xC8
- lsls r2, 4
- adds r0, r6, 0
- bl memcpy
- movs r1, 0xC8
- lsls r1, 4
- adds r0, r6, r1
- ldr r1, _080B936C @ =gUnknown_083D0270
- ldr r1, [r1]
- movs r2, 0xE1
- lsls r2, 2
- bl memcpy
- ldr r2, _080B9370 @ =0x00001004
- adds r0, r6, r2
- ldr r1, _080B9374 @ =gUnknown_083D0274
- ldr r1, [r1]
- movs r2, 0x40
- bl memcpy
- ldr r1, _080B9378 @ =0x00001044
- adds r0, r6, r1
- ldr r1, _080B937C @ =gUnknown_083D0278
- ldr r1, [r1]
- movs r2, 0x40
- bl memcpy
- ldr r2, _080B9380 @ =0x00001084
- adds r0, r6, r2
- ldr r1, _080B9384 @ =gUnknown_083D027C
- ldr r1, [r1]
- movs r2, 0x28
- bl memcpy
- ldr r5, _080B9388 @ =gUnknown_02038738
- ldr r4, _080B938C @ =gSaveBlock1
- ldr r0, _080B9390 @ =0x0000303c
- adds r1, r4, r0
- adds r0, r5, 0
- movs r2, 0x38
- bl memcpy
- ldr r2, _080B9394 @ =0x00003074
- adds r1, r4, r2
- adds r0, r5, 0
- adds r0, 0x38
- movs r2, 0x38
- bl memcpy
- ldr r0, _080B9398 @ =0x00002f9c
- adds r4, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8041324
- ldr r1, _080B939C @ =0x000010ac
- adds r0, r6, r1
- ldr r1, _080B93A0 @ =gUnknown_083D0280
- ldr r1, [r1]
- movs r2, 0x78
- bl memcpy
- ldr r2, _080B93A4 @ =0x00001124
- adds r0, r6, r2
- ldr r1, _080B93A8 @ =gUnknown_083D0284
- ldr r1, [r1]
- movs r2, 0xA4
- bl memcpy
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- bne _080B935C
- bl sub_8126338
- ldr r2, _080B93AC @ =0x000011c8
- adds r1, r6, r2
- strh r0, [r1]
-_080B935C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9364: .4byte 0x02018000
-_080B9368: .4byte gUnknown_083D026C
-_080B936C: .4byte gUnknown_083D0270
-_080B9370: .4byte 0x00001004
-_080B9374: .4byte gUnknown_083D0274
-_080B9378: .4byte 0x00001044
-_080B937C: .4byte gUnknown_083D0278
-_080B9380: .4byte 0x00001084
-_080B9384: .4byte gUnknown_083D027C
-_080B9388: .4byte gUnknown_02038738
-_080B938C: .4byte gSaveBlock1
-_080B9390: .4byte 0x0000303c
-_080B9394: .4byte 0x00003074
-_080B9398: .4byte 0x00002f9c
-_080B939C: .4byte 0x000010ac
-_080B93A0: .4byte gUnknown_083D0280
-_080B93A4: .4byte 0x00001124
-_080B93A8: .4byte gUnknown_083D0284
-_080B93AC: .4byte 0x000011c8
- thumb_func_end sub_80B92AC
-
- thumb_func_start sub_80B93B0
-sub_80B93B0: @ 80B93B0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- ldr r5, _080B9430 @ =0x02008000
- ldr r6, _080B9434 @ =0x00001230
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80BD674
- movs r0, 0xC8
- lsls r0, 4
- adds r0, r5
- mov r8, r0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80BFD44
- ldr r1, _080B9438 @ =0x00001004
- adds r0, r5, r1
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80C0514
- ldr r1, _080B943C @ =0x00001044
- adds r0, r5, r1
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80B9B1C
- ldr r1, _080B9440 @ =0x00001084
- adds r0, r5, r1
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80FA4E4
- ldr r1, _080B9444 @ =0x000010ac
- adds r0, r5, r1
- adds r1, r6, 0
- adds r2, r4, 0
- mov r3, r8
- bl sub_80B9C6C
- ldr r1, _080B9448 @ =0x00001124
- adds r0, r5, r1
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80B9B70
- ldr r0, _080B944C @ =0x000011c8
- adds r5, r0
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80B9F3C
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9430: .4byte 0x02008000
-_080B9434: .4byte 0x00001230
-_080B9438: .4byte 0x00001004
-_080B943C: .4byte 0x00001044
-_080B9440: .4byte 0x00001084
-_080B9444: .4byte 0x000010ac
-_080B9448: .4byte 0x00001124
-_080B944C: .4byte 0x000011c8
- thumb_func_end sub_80B93B0
-
- thumb_func_start sub_80B9450
-sub_80B9450: @ 80B9450
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080B9480 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x32
- bne _080B9478
- movs r0, 0xE2
- bl PlaySE
- movs r0, 0
- strh r0, [r4, 0x8]
-_080B9478:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9480: .4byte gTasks
- thumb_func_end sub_80B9450
-
- thumb_func_start sub_80B9484
-sub_80B9484: @ 80B9484
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080B94A8 @ =gTasks + 0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bls _080B949E
- b _080B95E6
-_080B949E:
- lsls r0, 2
- ldr r1, _080B94AC @ =_080B94B0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B94A8: .4byte gTasks + 0x8
-_080B94AC: .4byte _080B94B0
- .align 2, 0
-_080B94B0:
- .4byte _080B94C8
- .4byte _080B951C
- .4byte _080B9550
- .4byte _080B9570
- .4byte _080B95AC
- .4byte _080B95C0
-_080B94C8:
- ldr r0, _080B950C @ =gUnknown_0202E8CE
- ldrb r0, [r0]
- bl sub_8007270
- movs r0, 0x80
- lsls r0, 7
- movs r1, 0x1
- bl VarSet
- ldr r1, _080B9510 @ =gUnknown_03000718
- movs r0, 0
- strb r0, [r1]
- bl sub_80B92AC
- bl CreateRecordMixingSprite
- movs r0, 0x1
- strh r0, [r4]
- ldr r0, _080B9514 @ =sub_80B95F0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- ldr r0, _080B9518 @ =sub_80B9450
- movs r1, 0x51
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1E]
- b _080B95E6
- .align 2, 0
-_080B950C: .4byte gUnknown_0202E8CE
-_080B9510: .4byte gUnknown_03000718
-_080B9514: .4byte sub_80B95F0
-_080B9518: .4byte sub_80B9450
-_080B951C:
- ldr r2, _080B9548 @ =gTasks
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080B95E6
- movs r0, 0x2
- strh r0, [r4]
- ldr r0, _080B954C @ =0x00000834
- bl FlagSet
- bl DestroyRecordMixingSprite
- ldrb r0, [r4, 0x1E]
- bl DestroyTask
- b _080B95E6
- .align 2, 0
-_080B9548: .4byte gTasks
-_080B954C: .4byte 0x00000834
-_080B9550:
- ldr r0, _080B956C @ =sub_80BA00C
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r0, 0x3
- strh r0, [r4]
- movs r0, 0xE0
- bl PlaySE
- b _080B95E6
- .align 2, 0
-_080B956C: .4byte sub_80BA00C
-_080B9570:
- ldr r2, _080B95A4 @ =gTasks
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r5, [r0, 0x4]
- cmp r5, 0
- bne _080B95E6
- movs r0, 0x4
- strh r0, [r4]
- bl sub_8083664
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- bl sub_80720B0
- ldr r0, _080B95A8 @ =gOtherText_MixingComplete
- movs r1, 0x2
- movs r2, 0xF
- bl MenuPrint
- strh r5, [r4, 0x10]
- b _080B95E6
- .align 2, 0
-_080B95A4: .4byte gTasks
-_080B95A8: .4byte gOtherText_MixingComplete
-_080B95AC:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _080B95E6
- movs r0, 0x5
- strh r0, [r4]
- b _080B95E6
-_080B95C0:
- ldr r2, _080B95EC @ =gTasks
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080B95E6
- bl sub_8055588
- bl MenuZeroFillScreen
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080B95E6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B95EC: .4byte gTasks
- thumb_func_end sub_80B9484
-
- thumb_func_start sub_80B95F0
-sub_80B95F0: @ 80B95F0
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r7, _080B961C @ =gTasks
- adds r5, r0, r7
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- cmp r1, 0x64
- beq _080B9678
- cmp r1, 0x64
- bgt _080B962E
- cmp r1, 0x1
- bne _080B9612
- b _080B9734
-_080B9612:
- cmp r1, 0x1
- bgt _080B9620
- cmp r1, 0
- beq _080B9650
- b _080B97D6
- .align 2, 0
-_080B961C: .4byte gTasks
-_080B9620:
- cmp r1, 0x2
- bne _080B9626
- b _080B9760
-_080B9626:
- cmp r1, 0x5
- bne _080B962C
- b _080B97C0
-_080B962C:
- b _080B97D6
-_080B962E:
- cmp r1, 0xC9
- beq _080B96D0
- cmp r1, 0xC9
- bgt _080B963C
- cmp r1, 0x65
- beq _080B9690
- b _080B97D6
-_080B963C:
- ldr r0, _080B964C @ =0x0000012d
- cmp r1, r0
- beq _080B9706
- adds r0, 0x63
- cmp r1, r0
- beq _080B971C
- b _080B97D6
- .align 2, 0
-_080B964C: .4byte 0x0000012d
-_080B9650:
- bl sub_80B9A78
- bl MenuDisplayMessageBox
- ldr r0, _080B9674 @ =gOtherText_MixingRecordsWithFriend
- movs r1, 0x2
- movs r2, 0xF
- bl MenuPrint
- movs r0, 0xE1
- lsls r0, 3
- strh r0, [r5, 0x18]
- movs r0, 0xC8
- lsls r0, 1
- strh r0, [r5, 0x8]
- bl ClearLinkCallback_2
- b _080B97D6
- .align 2, 0
-_080B9674: .4byte gOtherText_MixingRecordsWithFriend
-_080B9678:
- ldrh r0, [r5, 0x20]
- adds r0, 0x1
- strh r0, [r5, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bgt _080B9688
- b _080B97D6
-_080B9688:
- movs r0, 0
- strh r0, [r5, 0x20]
- movs r0, 0x65
- b _080B97D4
-_080B9690:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsLinkMaster
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B96C2
- bl sub_800820C
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _080B96B2
- b _080B97D6
-_080B96B2:
- movs r0, 0x15
- bl PlaySE
- movs r1, 0
- movs r0, 0xC9
- strh r0, [r5, 0x8]
- strh r1, [r5, 0x20]
- b _080B97D6
-_080B96C2:
- movs r0, 0x16
- bl PlaySE
- ldr r0, _080B96CC @ =0x0000012d
- b _080B97D4
- .align 2, 0
-_080B96CC: .4byte 0x0000012d
-_080B96D0:
- bl sub_800820C
- adds r4, r0, 0
- bl GetLinkPlayerCount_2
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080B97D6
- ldrh r4, [r5, 0x20]
- adds r4, 0x1
- strh r4, [r5, 0x20]
- lsls r4, 16
- asrs r4, 16
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 1
- cmp r4, r1
- ble _080B97D6
- bl sub_8007F4C
- movs r0, 0x1
- b _080B97D4
-_080B9706:
- bl sub_800820C
- adds r4, r0, 0
- bl GetLinkPlayerCount_2
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080B97D6
- movs r0, 0x1
- b _080B97D4
-_080B971C:
- ldrh r0, [r5, 0x20]
- adds r0, 0x1
- strh r0, [r5, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080B97D6
- movs r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- strh r0, [r5, 0x20]
- b _080B97D6
-_080B9734:
- ldr r0, _080B9758 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080B97D6
- ldr r4, _080B975C @ =gStringVar1
- bl sub_80B9A58
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r0, 0x5
- b _080B97D4
- .align 2, 0
-_080B9758: .4byte gReceivedRemoteLinkPlayers
-_080B975C: .4byte gStringVar1
-_080B9760:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- strh r0, [r5, 0x14]
- strh r1, [r5, 0x8]
- bl sub_80B9A58
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x12]
- ldr r0, _080B97B0 @ =sub_80B97DC
- str r0, [r5]
- ldr r4, _080B97B4 @ =0x02018000
- adds r1, r5, 0
- adds r1, 0xC
- adds r0, r4, 0
- bl sub_80B9A50
- ldr r0, _080B97B8 @ =sub_80B9890
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x1C]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r0, r1, r7
- strh r6, [r0, 0x8]
- ldr r0, _080B97BC @ =0xffff0000
- adds r4, r0
- adds r1, r7, r1
- adds r1, 0x12
- adds r0, r4, 0
- bl sub_80B9A50
- b _080B97D6
- .align 2, 0
-_080B97B0: .4byte sub_80B97DC
-_080B97B4: .4byte 0x02018000
-_080B97B8: .4byte sub_80B9890
-_080B97BC: .4byte 0xffff0000
-_080B97C0:
- ldrh r0, [r5, 0x1C]
- adds r0, 0x1
- strh r0, [r5, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _080B97D6
- movs r0, 0
- strh r0, [r5, 0x1C]
- movs r0, 0x2
-_080B97D4:
- strh r0, [r5, 0x8]
-_080B97D6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B95F0
-
- thumb_func_start sub_80B97DC
-sub_80B97DC: @ 80B97DC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080B9800 @ =gTasks
- adds r4, r1, r0
- movs r2, 0x8
- ldrsh r1, [r4, r2]
- adds r2, r0, 0
- cmp r1, 0x4
- bhi _080B9884
- lsls r0, r1, 2
- ldr r1, _080B9804 @ =_080B9808
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B9800: .4byte gTasks
-_080B9804: .4byte _080B9808
- .align 2, 0
-_080B9808:
- .4byte _080B981C
- .4byte _080B9840
- .4byte _080B9884
- .4byte _080B9852
- .4byte _080B986E
-_080B981C:
- adds r0, r4, 0
- adds r0, 0xC
- bl sub_80B9A44
- adds r1, r0, 0
- movs r0, 0x10
- ldrsh r2, [r4, r0]
- movs r0, 0xC8
- muls r0, r2
- adds r1, r0
- ldr r0, _080B983C @ =gBlockSendBuffer
- movs r2, 0xC8
- bl memcpy
- b _080B9860
- .align 2, 0
-_080B983C: .4byte gBlockSendBuffer
-_080B9840:
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- bne _080B9860
- movs r0, 0x1
- bl sub_8007E9C
- b _080B9860
-_080B9852:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x18
- bne _080B9868
-_080B9860:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080B9884
-_080B9868:
- movs r0, 0
- strh r0, [r4, 0x8]
- b _080B9884
-_080B986E:
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- bne _080B9884
- ldr r0, _080B988C @ =sub_80B9A1C
- str r0, [r4]
-_080B9884:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B988C: .4byte sub_80B9A1C
- thumb_func_end sub_80B97DC
-
- thumb_func_start sub_80B9890
-sub_80B9890: @ 80B9890
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r0, 2
- ldr r1, [sp]
- adds r0, r1
- lsls r0, 3
- ldr r1, _080B98D0 @ =gTasks
- adds r0, r1
- mov r10, r0
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r2, 0
- str r2, [sp, 0x8]
- bl sub_8008198
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [sp, 0x4]
- cmp r3, r0
- bne _080B998A
- movs r0, 0
- b _080B9966
- .align 2, 0
-_080B98D0: .4byte gTasks
-_080B98D4:
- ldr r1, [sp, 0x4]
- mov r2, r9
- asrs r1, r2
- movs r0, 0x1
- ands r1, r0
- movs r3, 0x1
- add r3, r9
- mov r8, r3
- cmp r1, 0
- beq _080B9960
- mov r0, r10
- adds r0, 0x12
- bl sub_80B9A44
- mov r1, r8
- lsls r4, r1, 1
- mov r5, r10
- adds r5, 0x8
- adds r4, r5, r4
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0xC8
- muls r1, r3
- adds r0, r1
- ldr r7, _080B9930 @ =0x00001230
- mov r1, r9
- muls r1, r7
- adds r6, r0, r1
- mov r0, r9
- str r3, [sp, 0xC]
- bl sub_80B9A68
- adds r1, r0, 0
- movs r0, 0
- ldrsh r2, [r4, r0]
- adds r0, r2, 0x1
- ldr r3, [sp, 0xC]
- muls r0, r3
- cmp r0, r7
- bls _080B9934
- muls r2, r3
- subs r2, r7, r2
- adds r0, r6, 0
- bl memcpy
- b _080B993C
- .align 2, 0
-_080B9930: .4byte 0x00001230
-_080B9934:
- adds r0, r6, 0
- movs r2, 0xC8
- bl memcpy
-_080B993C:
- mov r0, r9
- bl ResetBlockReceivedFlag
- mov r2, r8
- lsls r1, r2, 1
- adds r1, r5, r1
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x18
- bne _080B9960
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
-_080B9960:
- mov r3, r8
- lsls r0, r3, 24
- lsrs r0, 24
-_080B9966:
- mov r9, r0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r9, r0
- bcc _080B98D4
- ldr r2, _080B99B0 @ =gTasks
- mov r0, r10
- movs r3, 0x8
- ldrsh r1, [r0, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
-_080B998A:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp, 0x8]
- cmp r1, r0
- bne _080B999E
- ldr r0, [sp]
- bl DestroyTask
-_080B999E:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B99B0: .4byte gTasks
- thumb_func_end sub_80B9890
-
- thumb_func_start sub_80B99B4
-sub_80B99B4: @ 80B99B4
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r2, _080B99E4 @ =gTasks
- adds r0, r2
- movs r4, 0x1C
- ldrsh r1, [r0, r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080B99DC
- adds r0, r3, 0
- bl DestroyTask
-_080B99DC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B99E4: .4byte gTasks
- thumb_func_end sub_80B99B4
-
- thumb_func_start sub_80B99E8
-sub_80B99E8: @ 80B99E8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080B9A10 @ =gTasks
- adds r1, r0
- ldr r0, _080B9A14 @ =sub_80B99B4
- str r0, [r1]
- ldr r0, _080B9A18 @ =gUnknown_03000718
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B9A0C
- movs r2, 0x12
- ldrsh r0, [r1, r2]
- bl sub_80B93B0
-_080B9A0C:
- pop {r0}
- bx r0
- .align 2, 0
-_080B9A10: .4byte gTasks
-_080B9A14: .4byte sub_80B99B4
-_080B9A18: .4byte gUnknown_03000718
- thumb_func_end sub_80B99E8
-
- thumb_func_start sub_80B9A1C
-sub_80B9A1C: @ 80B9A1C
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080B9A38 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080B9A3C @ =sub_80B99E8
- str r0, [r1]
- ldr r1, _080B9A40 @ =gUnknown_03000718
- movs r0, 0x1
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080B9A38: .4byte gTasks
-_080B9A3C: .4byte sub_80B99E8
-_080B9A40: .4byte gUnknown_03000718
- thumb_func_end sub_80B9A1C
-
- thumb_func_start sub_80B9A44
-sub_80B9A44: @ 80B9A44
- adds r1, r0, 0
- ldrh r0, [r1]
- ldrh r1, [r1, 0x2]
- lsls r1, 16
- orrs r0, r1
- bx lr
- thumb_func_end sub_80B9A44
-
- thumb_func_start sub_80B9A50
-sub_80B9A50: @ 80B9A50
- strh r0, [r1]
- lsrs r0, 16
- strh r0, [r1, 0x2]
- bx lr
- thumb_func_end sub_80B9A50
-
- thumb_func_start sub_80B9A58
-sub_80B9A58: @ 80B9A58
- push {lr}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80B9A58
-
- thumb_func_start sub_80B9A68
-sub_80B9A68: @ 80B9A68
- lsls r0, 24
- lsrs r0, 16
- ldr r1, _080B9A74 @ =gBlockRecvBuffer
- adds r0, r1
- bx lr
- .align 2, 0
-_080B9A74: .4byte gBlockRecvBuffer
- thumb_func_end sub_80B9A68
-
- thumb_func_start sub_80B9A78
-sub_80B9A78: @ 80B9A78
- ldr r1, _080B9A80 @ =gUnknown_03005D2C
- ldr r0, _080B9A84 @ =0x00001230
- str r0, [r1]
- bx lr
- .align 2, 0
-_080B9A80: .4byte gUnknown_03005D2C
-_080B9A84: .4byte 0x00001230
- thumb_func_end sub_80B9A78
-
- thumb_func_start sub_80B9A88
-sub_80B9A88: @ 80B9A88
- push {r4,lr}
- adds r4, r0, 0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _080B9AC0
- cmp r0, 0x3
- bhi _080B9AA2
- cmp r0, 0x2
- beq _080B9AA8
- b _080B9B10
-_080B9AA2:
- cmp r0, 0x4
- beq _080B9AEC
- b _080B9B10
-_080B9AA8:
- movs r2, 0
- ldr r3, _080B9ABC @ =gUnknown_083D0288
-_080B9AAC:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x1
- bls _080B9AAC
- b _080B9B10
- .align 2, 0
-_080B9ABC: .4byte gUnknown_083D0288
-_080B9AC0:
- movs r0, 0
- bl GetLinkPlayerTrainerId
- adds r3, r0, 0
- movs r0, 0x1
- ands r3, r0
- movs r2, 0
- ldr r1, _080B9AE8 @ =gUnknown_083D028A
- lsls r0, r3, 1
- adds r0, r3
- adds r3, r0, r1
-_080B9AD6:
- adds r1, r4, r2
- ldrb r0, [r3]
- strb r0, [r1]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x2
- bls _080B9AD6
- b _080B9B10
- .align 2, 0
-_080B9AE8: .4byte gUnknown_083D028A
-_080B9AEC:
- movs r0, 0
- bl GetLinkPlayerTrainerId
- movs r1, 0x9
- bl __umodsi3
- adds r3, r0, 0
- movs r2, 0
- ldr r1, _080B9B18 @ =gUnknown_083D0290
- lsls r0, r3, 2
- adds r3, r0, r1
-_080B9B02:
- adds r1, r4, r2
- ldrb r0, [r3]
- strb r0, [r1]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x3
- bls _080B9B02
-_080B9B10:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9B18: .4byte gUnknown_083D0290
- thumb_func_end sub_80B9A88
-
- thumb_func_start sub_80B9B1C
-sub_80B9B1C: @ 80B9B1C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r5, r0, 0
- mov r8, r1
- lsls r4, r2, 24
- lsrs r4, 24
- mov r0, sp
- bl sub_80B9A88
- mov r0, r8
- muls r0, r4
- adds r0, r5, r0
- ldr r1, _080B9B6C @ =gUnknown_083D0278
- ldr r6, [r1]
- adds r1, r6, 0
- movs r2, 0x40
- bl memcpy
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r5, r0
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x40
- bl memcpy
- bl sub_80F7F30
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9B6C: .4byte gUnknown_083D0278
- thumb_func_end sub_80B9B1C
-
- thumb_func_start sub_80B9B70
-sub_80B9B70: @ 80B9B70
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r6, r0, 0
- mov r9, r1
- lsls r4, r2, 24
- lsrs r4, 24
- ldr r0, _080B9BB8 @ =gUnknown_0300071C
- mov r8, r0
- bl sub_80B9A88
- mov r5, r9
- muls r5, r4
- adds r5, r6, r5
- add r4, r8
- ldrb r0, [r4]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r6, r0
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0xA4
- bl memcpy
- adds r0, r5, 0
- bl sub_8134AC0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9BB8: .4byte gUnknown_0300071C
- thumb_func_end sub_80B9B70
-
- thumb_func_start sub_80B9BBC
-sub_80B9BBC: @ 80B9BBC
- ldrh r0, [r0, 0x20]
- lsls r0, 24
- lsrs r0, 24
- bx lr
- thumb_func_end sub_80B9BBC
-
- thumb_func_start sub_80B9BC4
-sub_80B9BC4: @ 80B9BC4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x38
- mov r8, r0
- mov r10, r1
- mov r9, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x54]
- lsls r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsrs r4, 23
- add r4, r9
- ldrb r0, [r4]
- mov r6, r10
- muls r6, r0
- add r6, r8
- ldrb r0, [r4, 0x1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 3
- adds r1, r6, r1
- mov r0, sp
- movs r2, 0x38
- bl memcpy
- lsls r5, 1
- add r5, r9
- ldrb r0, [r5]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r8, r0
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 3
- adds r6, r0
- ldrb r0, [r5, 0x1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 3
- add r1, r8
- adds r0, r6, 0
- movs r2, 0x38
- bl memcpy
- ldrb r1, [r5, 0x1]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 3
- add r8, r0
- mov r0, r8
- mov r1, sp
- movs r2, 0x38
- bl memcpy
- add sp, 0x38
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80B9BC4
-
- thumb_func_start sub_80B9C4C
-sub_80B9C4C: @ 80B9C4C
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- movs r1, 0
-_080B9C54:
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r0, r2, r0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r1, 0x1
- cmp r1, 0xFF
- ble _080B9C54
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80B9C4C
-
thumb_func_start sub_80B9C6C
sub_80B9C6C: @ 80B9C6C
push {r4-r7,lr}
diff --git a/data/data2.s b/data/data2.s
index d31f20534..4c3593ec8 100644
--- a/data/data2.s
+++ b/data/data2.s
@@ -14782,24 +14782,27 @@ gComboStarterLookupTable:: @ 83D016C
.include "data/contest_effect_funcs.inc"
.align 2
-gUnknown_083D026C:: @ 83D026C
- .4byte 0x0202713c
+recordMixingSecretBases:: @ 83D026C
+ @ gSaveBlock1.secretBases
+ .4byte gSaveBlock1 + 0x1A08
.align 2
-gUnknown_083D0270:: @ 83D0270
- .4byte 0x02027e6c
+recordMixingTvShows:: @ 83D0270
+ @ gSaveBlock1.tvShows
+ .4byte gSaveBlock1 + 0x2738
.align 2
gUnknown_083D0274:: @ 83D0274
- .4byte 0x020281f0
+ .4byte gSaveBlock1 + 0x2ABC
.align 2
gUnknown_083D0278:: @ 83D0278
- .4byte 0x020284c8
+ .4byte gSaveBlock1 + 0x2D94
.align 2
-gUnknown_083D027C:: @ 83D027C
- .4byte 0x02028508
+recordMixingEasyChatPairs:: @ 83D027C
+ @ gSaveBlock1.easyChatPairs
+ .4byte gSaveBlock1 + 0x2DD4
.align 2
gUnknown_083D0280:: @ 83D0280
diff --git a/include/global.h b/include/global.h
index 1691b7776..197420dd3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -160,6 +160,15 @@ struct SB1_2EFC_Struct
u8 unknown[0x20];
};
+struct EasyChatPair
+{
+ u16 unk0_0:7;
+ u16 unk0_7:7;
+ u16 unk1_6:1;
+ u16 unk2;
+ u16 words[2];
+}; /*size = 0x8*/
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
@@ -173,25 +182,25 @@ struct SaveBlock1
/*0x2F*/ u8 filler_2F;
/*0x30*/ u8 flashUsed;
/*0x32*/ u16 mapDataId;
- u16 mapView[0x100];
- u8 playerPartyCount;
- struct Pokemon playerParty[6];
- u32 money;
- u16 coins;
- u16 registeredItem; // registered for use with SELECT button
- struct ItemSlot pcItems[50];
- struct ItemSlot bagPocket_Items[20];
- struct ItemSlot bagPocket_KeyItems[20];
- struct ItemSlot bagPocket_PokeBalls[16];
- struct ItemSlot bagPocket_TMHM[64];
- struct ItemSlot bagPocket_Berries[46];
- struct Pokeblock pokeblocks[40];
- u8 unk938[52]; // pokedex related
- u16 berryBlenderRecords[3];
- u8 filler_972[0x6];
- u16 trainerRematchStepCounter;
- u8 trainerRematches[100];
- struct MapObject mapObjects[16];
+ /*0x34*/ u16 mapView[0x100];
+ /*0x234*/ u8 playerPartyCount;
+ /*0x238*/ struct Pokemon playerParty[6];
+ /*0x490*/ u32 money;
+ /*0x494*/ u16 coins;
+ /*0x496*/ u16 registeredItem; // registered for use with SELECT button
+ /*0x498*/ struct ItemSlot pcItems[50];
+ /*0x560*/ struct ItemSlot bagPocket_Items[20];
+ /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[20];
+ /*0x600*/ struct ItemSlot bagPocket_PokeBalls[16];
+ /*0x640*/ struct ItemSlot bagPocket_TMHM[64];
+ /*0x740*/ struct ItemSlot bagPocket_Berries[46];
+ /*0x7F8*/ struct Pokeblock pokeblocks[40];
+ /*0x938*/ u8 unk938[52]; // pokedex related
+ /*0x96C*/ u16 berryBlenderRecords[3];
+ /*0x972*/ u8 filler_972[0x6];
+ /*0x978*/ u16 trainerRematchStepCounter;
+ /*0x97A*/ u8 trainerRematches[100];
+ /*0x9E0*/ struct MapObject mapObjects[16];
/*0xC20*/ struct MapObjectTemplate mapObjectTemplates[64];
/*0x1220*/ u8 flags[0x120];
/*0x1340*/ u16 vars[0x100];
@@ -200,16 +209,16 @@ struct SaveBlock1
/*0x1A08*/ struct SecretBaseRecord secretBases[20];
/*0x2688*/ u8 playerRoomDecor[12];
/*0x2694*/ u8 playerRoomDecorPos[12];
- u8 decorDesk[10];
- u8 decorChair[10];
- u8 decorPlant[10];
- u8 decorOrnament[30];
- u8 decorMat[30];
- u8 decorPoster[10];
- u8 decorDoll[40];
- u8 decorCushion[10];
- u8 padding_2736[2];
- u8 tvShows[24][36]; // TODO: TV show struct
+ /*0x26A0*/ u8 decorDesk[10];
+ /*0x26AA*/ u8 decorChair[10];
+ /*0x26B4*/ u8 decorPlant[10];
+ /*0x26BE*/ u8 decorOrnament[30];
+ /*0x26DC*/ u8 decorMat[30];
+ /*0x26FA*/ u8 decorPoster[10];
+ /*0x2704*/ u8 decorDoll[40];
+ /*0x272C*/ u8 decorCushion[10];
+ /*0x2736*/ u8 padding_2736[2];
+ /*0x2738*/ u8 tvShows[24][36]; // TODO: TV show struct
/*0x2A98*/ u8 filler_2A98[0x64];
/*0x2AFC*/ u16 outbreakPokemonSpecies;
/*0x2AFE*/ u8 outbreakLocationMapNum;
@@ -219,17 +228,19 @@ struct SaveBlock1
/*0x2B04*/ u16 outbreakPokemonMoves[4];
/*0x2B0C*/ u8 unk2B0C;
/*0x2B0D*/ u8 outbreakPokemonProbability;
- /*0x2B0E*/ u8 filler_2B0E[0x2C8];
- /*0x2DD6*/ u16 feebasLocationSeed;
- /*0x2DD8*/ u8 filler_2DD8[0x124];
- struct SB1_2EFC_Struct sb1_2EFC_struct[5];
- u8 filler_2F9C[0x1A8];
+ /*0x2B0E*/ u8 filler_2B0E[0x2C6];
+ /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
+ /*0x2DFC*/ u8 filler_2DFC[0x100];
+ /*0x2EFC*/ struct SB1_2EFC_Struct sb1_2EFC_struct[5];
+ /*0x2F9C*/ u8 filler_2F9C[0xA0];
+ /*0x303C*/ u8 filler_303C[0x38];
+ /*0x3074*/ u8 filler_3074[0xD0];
/*0x3144*/ struct Roamer roamer;
/*0x3158*/ u8 filler_3158[0x8];
- struct EnigmaBerry enigmaBerry;
- struct RamScript ramScript;
- u8 filler_3A7C[0x10];
- u8 unk3A8C[52]; //pokedex related
+ /*0x3160*/ struct EnigmaBerry enigmaBerry;
+ /*0x3690*/ struct RamScript ramScript;
+ /*0x3A7C*/ u8 filler_3A7C[0x10];
+ /*0x3A8C*/ u8 unk3A8C[52]; //pokedex related
};
extern struct SaveBlock1 gSaveBlock1;
diff --git a/ld_script.txt b/ld_script.txt
index 3f58224a0..6ec547f12 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -122,6 +122,7 @@ SECTIONS {
asm/naming_screen.o(.text);
asm/money.o(.text);
asm/contest_effect.o(.text);
+ src/record_mixing.o(.text);
asm/record_mixing.o(.text);
asm/sound_check_menu.o(.text);
asm/secret_base.o(.text);
@@ -146,7 +147,7 @@ SECTIONS {
asm/mail.o(.text);
asm/menu_helpers.o(.text);
asm/script_pokemon_util_80F99CC.o(.text);
- asm/dewford_trend.o(.text);
+ src/dewford_trend.o(.text);
asm/heal_location.o(.text);
asm/region_map.o(.text);
asm/cute_sketch.o(.text);
diff --git a/shared_syms.txt b/shared_syms.txt
index 38b13e8fd..0b7f77da8 100644
--- a/shared_syms.txt
+++ b/shared_syms.txt
@@ -1,10 +1,17 @@
unk_2000000 = 0x2000000;
unk_2004000 = 0x2004000;
+unk_2007800 = 0x2007800;
+unk_2007900 = 0x2007900;
+
+unk_2008000 = 0x2008000;
+
unk_20160BC = 0x20160BC;
gSecretBaseRecord = 0x2017000;
dword_2017100 = 0x2017100;
+unk_2018000 = 0x2018000;
+
gHallOfFame = 0x201E000;
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
new file mode 100644
index 000000000..63ae4157a
--- /dev/null
+++ b/src/dewford_trend.c
@@ -0,0 +1,644 @@
+#include "global.h"
+#include "link.h"
+#include "rng.h"
+
+
+extern u8 GetLinkPlayerCount(void);
+extern u16 sub_80EB72C(u16);
+extern u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
+extern u8 FlagGet(u16);
+extern u8 FlagSet(u16);
+
+extern struct EasyChatPair unk_2007800[5];
+extern struct EasyChatPair unk_2007900[5];
+extern u16 gScriptResult;
+extern u16 gUnknown_0202E8CC;
+
+void sub_80FA740(struct EasyChatPair *);
+void sub_80FA46C(struct EasyChatPair *, u16, u8);
+bool8 sub_80FA670(struct EasyChatPair *, struct EasyChatPair *, u8);
+bool8 IsEasyChatPairEqual(u16 *, u16 *);
+bool8 SB1ContainsWords(u16 *);
+
+void sub_80FA17C(void)
+{
+ u16 i;
+
+ for(i = 0; i < 5; i++)
+ {
+ gSaveBlock1.easyChatPairs[i].words[0] = sub_80EB72C(10);
+
+ if(Random() & 1)
+ gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(12);
+ else
+ gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(13);
+
+ gSaveBlock1.easyChatPairs[i].unk1_6 = Random() & 1;
+ sub_80FA740(&gSaveBlock1.easyChatPairs[i]);
+ }
+ sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0);
+}
+
+#ifdef NONMATCHING
+void sub_80FA220(u16 a)
+{
+ u16 i;
+ u32 sp0;
+ u32 sp4;
+
+ if(a != 0)
+ {
+ sp0 = a * 5;
+
+ for(i = 0; i < 5; i++)
+ {
+ //_080FA24A
+ u32 r2 = sp0;
+ u32 r4;
+
+ if(gSaveBlock1.easyChatPairs[i].unk1_6 == 0)
+ {
+ if(gSaveBlock1.easyChatPairs[i].unk0_0 >= r2)
+ {
+ gSaveBlock1.easyChatPairs[i].unk0_0 -= r2;
+ if(gSaveBlock1.easyChatPairs[i].unk0_0 == 0)
+ gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ continue;
+ }
+ //_080FA290
+ r2 -= gSaveBlock1.easyChatPairs[i].unk0_0;
+ gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ }
+ //_080FA2A0
+ r4 = gSaveBlock1.easyChatPairs[i].unk0_0 + r2;
+ if(r4 > gSaveBlock1.easyChatPairs[i].unk0_7)
+ {
+ sp4 = r4 % gSaveBlock1.easyChatPairs[i].unk0_7;
+ r4 = r4 / gSaveBlock1.easyChatPairs[i].unk0_7;
+
+ if(r4 == 0)
+ gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ else
+ gSaveBlock1.easyChatPairs[i].unk1_6 = 0;
+
+
+ if(gSaveBlock1.easyChatPairs[i].unk1_6)
+ {
+ gSaveBlock1.easyChatPairs[i].unk0_0 += sp4;
+ continue;
+ }
+ //_080FA2FA
+ gSaveBlock1.easyChatPairs[i].unk0_7 -= sp4;
+ continue;
+ }
+ //_080FA310
+ gSaveBlock1.easyChatPairs[i].unk0_0 = r4;
+
+ if(gSaveBlock1.easyChatPairs[i].unk0_0 == gSaveBlock1.easyChatPairs[i].unk0_7)
+ gSaveBlock1.easyChatPairs[i].unk1_6 = 0;
+ }
+ sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0);
+ }
+ //_080FA34E
+}
+
+#else
+__attribute__((naked))
+void sub_80FA220(u16 a)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, 0\n\
+ bne _080FA236\n\
+ b _080FA34E\n\
+_080FA236:\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ movs r1, 0x7F\n\
+ mov r9, r1\n\
+ movs r2, 0x80\n\
+ negs r2, r2\n\
+ mov r8, r2\n\
+_080FA24A:\n\
+ ldr r2, [sp]\n\
+ mov r4, r10\n\
+ lsls r0, r4, 3\n\
+ ldr r1, _080FA28C @ =gSaveBlock1 + 0x2DD4\n\
+ adds r5, r0, r1\n\
+ ldrb r6, [r5, 0x1]\n\
+ movs r0, 0x40\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ bne _080FA2A0\n\
+ ldrb r4, [r5]\n\
+ lsls r3, r4, 25\n\
+ lsrs r1, r3, 25\n\
+ lsls r0, r2, 16\n\
+ lsrs r0, 16\n\
+ cmp r1, r0\n\
+ bcc _080FA290\n\
+ adds r0, r1, 0\n\
+ subs r0, r2\n\
+ mov r2, r9\n\
+ ands r0, r2\n\
+ mov r1, r8\n\
+ ands r1, r4\n\
+ orrs r1, r0\n\
+ strb r1, [r5]\n\
+ movs r0, 0x7F\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _080FA336\n\
+ movs r0, 0x40\n\
+ orrs r0, r6\n\
+ b _080FA334\n\
+ .align 2, 0\n\
+_080FA28C: .4byte gSaveBlock1 + 0x2DD4\n\
+_080FA290:\n\
+ lsrs r0, r3, 25\n\
+ subs r2, r0\n\
+ mov r0, r8\n\
+ ands r0, r4\n\
+ strb r0, [r5]\n\
+ movs r0, 0x40\n\
+ orrs r0, r6\n\
+ strb r0, [r5, 0x1]\n\
+_080FA2A0:\n\
+ ldrb r7, [r5]\n\
+ lsls r0, r7, 25\n\
+ lsrs r0, 25\n\
+ adds r4, r0, r2\n\
+ ldrh r0, [r5]\n\
+ lsls r6, r0, 18\n\
+ lsls r0, r4, 16\n\
+ lsrs r0, 16\n\
+ lsrs r1, r6, 25\n\
+ cmp r0, r1\n\
+ bls _080FA310\n\
+ adds r0, r4, 0\n\
+ bl __umodsi3\n\
+ adds r3, r0, 0\n\
+ lsrs r1, r6, 25\n\
+ adds r0, r4, 0\n\
+ str r3, [sp, 0x4]\n\
+ bl __udivsi3\n\
+ adds r4, r0, 0\n\
+ movs r0, 0x1\n\
+ eors r4, r0\n\
+ ands r4, r0\n\
+ lsls r2, r4, 6\n\
+ ldrb r0, [r5, 0x1]\n\
+ movs r4, 0x41\n\
+ negs r4, r4\n\
+ adds r1, r4, 0\n\
+ ands r0, r1\n\
+ orrs r0, r2\n\
+ strb r0, [r5, 0x1]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ ldr r3, [sp, 0x4]\n\
+ cmp r0, 0\n\
+ beq _080FA2FA\n\
+ adds r1, r3, 0\n\
+ mov r0, r9\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r7\n\
+ orrs r0, r1\n\
+ strb r0, [r5]\n\
+ b _080FA336\n\
+_080FA2FA:\n\
+ ldrh r0, [r5]\n\
+ lsls r0, 18\n\
+ lsrs r0, 25\n\
+ subs r0, r3\n\
+ mov r1, r9\n\
+ ands r0, r1\n\
+ mov r1, r8\n\
+ ands r1, r7\n\
+ orrs r1, r0\n\
+ strb r1, [r5]\n\
+ b _080FA336\n\
+_080FA310:\n\
+ mov r2, r9\n\
+ ands r4, r2\n\
+ mov r0, r8\n\
+ ands r0, r7\n\
+ orrs r0, r4\n\
+ strb r0, [r5]\n\
+ lsls r0, 25\n\
+ ldrh r1, [r5]\n\
+ lsls r1, 18\n\
+ lsrs r0, 25\n\
+ lsrs r1, 25\n\
+ cmp r0, r1\n\
+ bne _080FA336\n\
+ ldrb r0, [r5, 0x1]\n\
+ movs r4, 0x41\n\
+ negs r4, r4\n\
+ adds r1, r4, 0\n\
+ ands r0, r1\n\
+_080FA334:\n\
+ strb r0, [r5, 0x1]\n\
+_080FA336:\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r10, r0\n\
+ cmp r0, 0x4\n\
+ bls _080FA24A\n\
+ ldr r0, _080FA360 @ =gSaveBlock1 + 0x2DD4\n\
+ movs r1, 0x5\n\
+ movs r2, 0\n\
+ bl sub_80FA46C\n\
+_080FA34E:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080FA360: .4byte gSaveBlock1 + 0x2DD4\n\
+ .syntax divided\n");
+}
+#endif
+
+bool8 sub_80FA364(u16 *a)
+{
+ struct EasyChatPair s = {0};
+ u16 i;
+
+ if(!SB1ContainsWords(a))
+ {
+ if(!FlagGet(0x833))
+ {
+ FlagSet(0x833);
+ if(!FlagGet(0x834))
+ {
+ gSaveBlock1.easyChatPairs[0].words[0] = a[0];
+ gSaveBlock1.easyChatPairs[0].words[1] = a[1];
+ return 1;
+ }
+ }
+
+ //_080FA3C8
+ s.words[0] = a[0];
+ s.words[1] = a[1];
+ s.unk1_6 = 1;
+ sub_80FA740(&s);
+
+ for(i = 0; i < 5; i++)
+ {
+ if(sub_80FA670(&s, &gSaveBlock1.easyChatPairs[i], 0))
+ {
+ u16 r3 = 4;
+
+ while(r3 > i)
+ {
+ gSaveBlock1.easyChatPairs[r3] = gSaveBlock1.easyChatPairs[r3 - 1];
+ r3--;
+ }
+ gSaveBlock1.easyChatPairs[i] = s;
+ return (i == 0);
+ }
+ //_080FA450
+ }
+ gSaveBlock1.easyChatPairs[4] = s;
+ }
+ return 0;
+}
+
+void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c)
+{
+ u16 h;
+
+ for(h = 0; h < b; h++)
+ {
+ u16 i;
+
+ for(i = h + 1; i < b; i++)
+ {
+ if(sub_80FA670(&s[i], &s[h], c))
+ {
+ struct EasyChatPair temp;
+
+ temp = s[i];
+ s[i] = s[h];
+ s[h] = temp;
+ }
+ }
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80FA4E4(u8 *a, u32 b)
+{
+ u16 i;
+ u16 j;
+ u16 r7;
+ struct EasyChatPair *src;
+ struct EasyChatPair *dst;
+ u16 players = GetLinkPlayerCount();
+
+ for(i = 0; i < players; i++)
+ memcpy(&unk_2007800[i * 5], a + i * b, 40);
+
+ //_080FA520
+
+ src = unk_2007800;
+ //dst = unk_2007900
+ dst = (u8 *)src + 0x100; //ToDo: Get this part to match
+
+ r7 = 0;
+ //_080FA530
+ for(i = 0; i < players; i++)
+ {
+ for(j = 0; j < 5; j++)
+ {
+ s16 foo = sub_80FA828(src, r7);
+ if(foo < 0)
+ {
+ *(dst++) = *src;
+ r7++;
+ }
+ //_080FA558
+ else
+ {
+ if(unk_2007900[foo].unk0_0 < src->unk0_0)
+ {
+ unk_2007900[foo] = *src;
+ }
+ }
+ //_080FA572
+ src++;
+ }
+ }
+ //_080FA588
+ sub_80FA46C(unk_2007900, r7, 2);
+ src = unk_2007900;
+ dst = gSaveBlock1.easyChatPairs;
+ for(i = 0; i < 5; i++)
+ *(dst++) = *(src++);
+}
+#else
+__attribute__((naked))
+void sub_80FA4E4(u8 *a, u32 b)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x4\n\
+ adds r6, r0, 0\n\
+ adds r5, r1, 0\n\
+ bl GetLinkPlayerCount\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r4, 0\n\
+ cmp r4, r8\n\
+ bcs _080FA520\n\
+_080FA500:\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ ldr r1, _080FA554 @ =0x02007800\n\
+ adds r0, r1\n\
+ adds r1, r4, 0\n\
+ muls r1, r5\n\
+ adds r1, r6, r1\n\
+ movs r2, 0x28\n\
+ bl memcpy\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, r8\n\
+ bcc _080FA500\n\
+_080FA520:\n\
+ ldr r5, _080FA554 @ =0x02007800\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r3, r5, r0\n\
+ movs r7, 0\n\
+ movs r4, 0\n\
+ cmp r4, r8\n\
+ bcs _080FA588\n\
+_080FA530:\n\
+ movs r6, 0\n\
+_080FA532:\n\
+ adds r0, r5, 0\n\
+ adds r1, r7, 0\n\
+ str r3, [sp]\n\
+ bl sub_80FA828\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ bge _080FA558\n\
+ ldr r0, [r5]\n\
+ ldr r1, [r5, 0x4]\n\
+ stm r3!, {r0,r1}\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ b _080FA572\n\
+ .align 2, 0\n\
+_080FA554: .4byte 0x02007800\n\
+_080FA558:\n\
+ lsls r1, r0, 3\n\
+ ldr r0, _080FA5B4 @ =0x02007900\n\
+ adds r2, r1, r0\n\
+ ldrb r1, [r2]\n\
+ lsls r1, 25\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 25\n\
+ cmp r1, r0\n\
+ bcs _080FA572\n\
+ ldr r0, [r5]\n\
+ ldr r1, [r5, 0x4]\n\
+ str r0, [r2]\n\
+ str r1, [r2, 0x4]\n\
+_080FA572:\n\
+ adds r5, 0x8\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ cmp r6, 0x4\n\
+ bls _080FA532\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, r8\n\
+ bcc _080FA530\n\
+_080FA588:\n\
+ ldr r4, _080FA5B4 @ =0x02007900\n\
+ adds r0, r4, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0x2\n\
+ bl sub_80FA46C\n\
+ adds r5, r4, 0\n\
+ ldr r3, _080FA5B8 @ =gSaveBlock1 + 0x2DD4\n\
+ movs r4, 0\n\
+_080FA59A:\n\
+ ldm r5!, {r0,r1}\n\
+ stm r3!, {r0,r1}\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, 0x4\n\
+ bls _080FA59A\n\
+ add sp, 0x4\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080FA5B4: .4byte 0x02007900\n\
+_080FA5B8: .4byte gSaveBlock1 + 0x2DD4\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80FA5BC(void)
+{
+ struct EasyChatPair *s = &gSaveBlock1.easyChatPairs[gUnknown_0202E8CC];
+
+ ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1);
+}
+
+void sub_80FA5E4(void)
+{
+ u16 result = 0;
+
+ if (gSaveBlock1.easyChatPairs[0].unk0_0 - gSaveBlock1.easyChatPairs[1].unk0_0 < 2)
+ {
+ asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2
+ if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6)
+ result = 1;
+ }
+ gScriptResult = result;
+}
+
+void sub_80FA648(void)
+{
+ gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7;
+}
+
+bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c)
+{
+ switch(c)
+ {
+ case 0:
+ if(a->unk0_0 > b->unk0_0)
+ return 1;
+ if(a->unk0_0 < b->unk0_0)
+ return 0;
+ if(a->unk0_7 > b->unk0_7)
+ return 1;
+ if(a->unk0_7 < b->unk0_7)
+ return 0;
+ break;
+ case 1:
+ if(a->unk0_7 > b->unk0_7)
+ return 1;
+ if(a->unk0_7 < b->unk0_7)
+ return 0;
+ if(a->unk0_0 > b->unk0_0)
+ return 1;
+ if(a->unk0_0 < b->unk0_0)
+ return 0;
+ break;
+ case 2:
+ if(a->unk0_0 > b->unk0_0)
+ return 1;
+ if(a->unk0_0 < b->unk0_0)
+ return 0;
+ if(a->unk0_7 > b->unk0_7)
+ return 1;
+ if(a->unk0_7 < b->unk0_7)
+ return 0;
+ if(a->unk2 > b->unk2)
+ return 1;
+ if(a->unk2 < b->unk2)
+ return 0;
+ if(a->words[0] > b->words[0])
+ return 1;
+ if(a->words[0] < b->words[0])
+ return 0;
+ if(a->words[1] > b->words[1])
+ return 1;
+ if(a->words[1] < b->words[1])
+ return 0;
+ return 1;
+ }
+ return Random() & 1;
+}
+
+void sub_80FA740(struct EasyChatPair *s)
+{
+ u16 r4;
+
+ r4 = Random() % 98;
+ if(r4 > 50)
+ {
+ r4 = Random() % 98;
+ if(r4 > 80)
+ r4 = Random() % 98;
+ }
+ s->unk0_7 = r4 + 30;
+ s->unk0_0 = (Random() % (r4 + 1)) + 30;
+ s->unk2 = Random();
+}
+
+bool8 SB1ContainsWords(u16 *a)
+{
+ u16 i;
+
+ for(i = 0; i < 5; i++)
+ {
+ if(IsEasyChatPairEqual(a, gSaveBlock1.easyChatPairs[i].words) != 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2)
+{
+ u16 i;
+
+ for(i = 0; i < 2; i++)
+ {
+ if(*(words1++) != *(words2++))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+s16 sub_80FA828(struct EasyChatPair *a, u16 b)
+{
+ s16 i;
+ struct EasyChatPair *s = unk_2007900;
+
+ for(i = 0; i < b; i++)
+ {
+ if(IsEasyChatPairEqual(a->words, s->words))
+ return i;
+ s++;
+ }
+ return -1;
+}
diff --git a/src/record_mixing.c b/src/record_mixing.c
new file mode 100644
index 000000000..3900b6e31
--- /dev/null
+++ b/src/record_mixing.c
@@ -0,0 +1,735 @@
+#include "global.h"
+#include "link.h"
+#include "menu.h"
+#include "pokemon.h"
+#include "rng.h"
+#include "script.h"
+#include "songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.h"
+
+extern void *recordMixingSecretBases;
+extern void *recordMixingTvShows;
+extern void *gUnknown_083D0274;
+extern void *gUnknown_083D0278;
+extern void *recordMixingEasyChatPairs;
+extern void *gUnknown_083D0280;
+extern void *gUnknown_083D0284;
+extern u8 gUnknown_083D0288[2];
+extern u8 gUnknown_083D028A[2][3];
+extern u8 gUnknown_083D0290[9][4];
+
+extern u8 gUnknown_02038738[]; //Don't know what type this points to
+extern u16 gUnknown_0202E8CE;
+extern u32 gUnknown_03005D2C;
+extern u8 gUnknown_03000718;
+extern u8 gUnknown_0300071C[];
+extern u8 gOtherText_MixingComplete[];
+extern u8 gOtherText_MixingRecordsWithFriend[];
+extern bool8 gReceivedRemoteLinkPlayers;
+extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE];
+extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
+
+extern void sub_8083A84(TaskFunc);
+extern void sub_8041324(struct BoxPokemon *, void *);
+extern void sub_80BD674(void *, u32, u8);
+extern void sub_80BFD44(void *, u32, u8);
+extern void sub_80C0514(void *, u32, u8);
+// UB: sub_80FA4E4 declared with 3 arguments instead of 2
+extern void sub_80FA4E4(void *, u32, u8);
+extern void sub_80B9C6C(void *, u32, u8, void *);
+extern void sub_80B9F3C(void *, u8);
+extern u16 sub_8126338(void);
+extern bool8 VarSet(u16, u8);
+extern u8 FlagSet(u16);
+extern u8 sub_8083664(void);
+extern void sub_80720B0(void);
+extern void CreateRecordMixingSprite(void);
+extern void DestroyRecordMixingSprite(void);
+extern u16 sub_8055588(void);
+extern void sub_80F7F30(void);
+extern void sub_8134AC0(void *);
+
+void sub_80B9484(u8);
+void sub_80B95F0(u8);
+void sub_80BA00C(u8);
+void sub_80B97DC(u8);
+void Task_CopyRecvBuffer(u8);
+void sub_80B9A1C(u8);
+u8 GetMultiplayerId_(void);
+void StorePtrInTaskData(void *, u16 *);
+void *LoadPtrFromTaskData(u16 *);
+void sub_80B9B1C(u8 *, size_t, u8);
+void sub_80B9B70(u8 *, size_t, u8);
+u16 *GetPlayerRecvBuffer(u8 player);
+void sub_80B9A78(void);
+
+#define BUFFER_CHUNK_SIZE 200
+
+void sub_80B929C(void)
+{
+ sub_8083A84(sub_80B9484);
+}
+
+struct PlayerRecords {
+ struct SecretBaseRecord secretBases[20];
+ u8 tvShows[25][36];
+ u8 filler1004[0x40];
+ u8 filler1044[0x40];
+ struct EasyChatPair easyChatPairs[5];
+ u8 filler10AC[0x78];
+ u8 filler1124[0xA4];
+ u16 filler11C8[0x34];
+};
+
+extern struct PlayerRecords unk_2008000;
+extern struct PlayerRecords unk_2018000;
+
+#ifdef NONMATCHING
+void sub_80B92AC(void)
+{
+ sub_80BC300();
+ sub_80C045C();
+
+ memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases));
+ memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows));
+ memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
+ memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
+ memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
+ memcpy(gUnknown_02038738, gSaveBlock1.filler_303C, 0x38);
+ memcpy(gUnknown_02038738 + 0x38, gSaveBlock1.filler_3074, 0x38);
+ sub_8041324(gSaveBlock1.filler_2F9C, gUnknown_02038738);
+ memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
+ memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
+
+ if(GetMultiplayerId() == 0)
+ unk_2018000.filler11C8[0] = sub_8126338();
+}
+#else
+__attribute__((naked))
+void sub_80B92AC(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ bl sub_80BC300\n\
+ bl sub_80C045C\n\
+ ldr r6, _080B9364 @ =0x02018000\n\
+ ldr r0, _080B9368 @ =recordMixingSecretBases\n\
+ ldr r1, [r0]\n\
+ movs r2, 0xC8\n\
+ lsls r2, 4\n\
+ adds r0, r6, 0\n\
+ bl memcpy\n\
+ movs r1, 0xC8\n\
+ lsls r1, 4\n\
+ adds r0, r6, r1\n\
+ ldr r1, _080B936C @ =recordMixingTvShows\n\
+ ldr r1, [r1]\n\
+ movs r2, 0xE1\n\
+ lsls r2, 2\n\
+ bl memcpy\n\
+ ldr r2, _080B9370 @ =0x00001004\n\
+ adds r0, r6, r2\n\
+ ldr r1, _080B9374 @ =gUnknown_083D0274\n\
+ ldr r1, [r1]\n\
+ movs r2, 0x40\n\
+ bl memcpy\n\
+ ldr r1, _080B9378 @ =0x00001044\n\
+ adds r0, r6, r1\n\
+ ldr r1, _080B937C @ =gUnknown_083D0278\n\
+ ldr r1, [r1]\n\
+ movs r2, 0x40\n\
+ bl memcpy\n\
+ ldr r2, _080B9380 @ =0x00001084\n\
+ adds r0, r6, r2\n\
+ ldr r1, _080B9384 @ =recordMixingEasyChatPairs\n\
+ ldr r1, [r1]\n\
+ movs r2, 0x28\n\
+ bl memcpy\n\
+ ldr r5, _080B9388 @ =gUnknown_02038738\n\
+ ldr r4, _080B938C @ =gSaveBlock1\n\
+ ldr r0, _080B9390 @ =0x0000303c\n\
+ adds r1, r4, r0\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ ldr r2, _080B9394 @ =0x00003074\n\
+ adds r1, r4, r2\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x38\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ ldr r0, _080B9398 @ =0x00002f9c\n\
+ adds r4, r0\n\
+ adds r0, r4, 0\n\
+ adds r1, r5, 0\n\
+ bl sub_8041324\n\
+ ldr r1, _080B939C @ =0x000010ac\n\
+ adds r0, r6, r1\n\
+ ldr r1, _080B93A0 @ =gUnknown_083D0280\n\
+ ldr r1, [r1]\n\
+ movs r2, 0x78\n\
+ bl memcpy\n\
+ ldr r2, _080B93A4 @ =0x00001124\n\
+ adds r0, r6, r2\n\
+ ldr r1, _080B93A8 @ =gUnknown_083D0284\n\
+ ldr r1, [r1]\n\
+ movs r2, 0xA4\n\
+ bl memcpy\n\
+ bl GetMultiplayerId\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080B935C\n\
+ bl sub_8126338\n\
+ ldr r2, _080B93AC @ =0x000011c8\n\
+ adds r1, r6, r2\n\
+ strh r0, [r1]\n\
+_080B935C:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B9364: .4byte 0x02018000\n\
+_080B9368: .4byte recordMixingSecretBases\n\
+_080B936C: .4byte recordMixingTvShows\n\
+_080B9370: .4byte 0x00001004\n\
+_080B9374: .4byte gUnknown_083D0274\n\
+_080B9378: .4byte 0x00001044\n\
+_080B937C: .4byte gUnknown_083D0278\n\
+_080B9380: .4byte 0x00001084\n\
+_080B9384: .4byte recordMixingEasyChatPairs\n\
+_080B9388: .4byte gUnknown_02038738\n\
+_080B938C: .4byte gSaveBlock1\n\
+_080B9390: .4byte 0x0000303c\n\
+_080B9394: .4byte 0x00003074\n\
+_080B9398: .4byte 0x00002f9c\n\
+_080B939C: .4byte 0x000010ac\n\
+_080B93A0: .4byte gUnknown_083D0280\n\
+_080B93A4: .4byte 0x00001124\n\
+_080B93A8: .4byte gUnknown_083D0284\n\
+_080B93AC: .4byte 0x000011c8\n\
+ .syntax divided\n");
+}
+#endif
+
+#undef NONMATCHING
+
+void sub_80B93B0(u32 a)
+{
+ sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a);
+ sub_80BFD44(unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
+ sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a);
+ sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
+ //UB: Too many arguments for function "sub_80FA4E4"
+ sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
+ sub_80B9C6C(unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
+ sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a);
+ sub_80B9F3C(unk_2008000.filler11C8, a);
+}
+
+void sub_80B9450(u8 taskId)
+{
+ gTasks[taskId].data[0]++;
+ if(gTasks[taskId].data[0] == 50)
+ {
+ PlaySE(SE_W213);
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+#define TD_STATE 0
+
+void sub_80B9484(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+
+ switch(taskData[TD_STATE])
+ {
+ case 0:
+ sub_8007270(gUnknown_0202E8CE);
+ VarSet(0x4000, 1);
+ gUnknown_03000718 = 0;
+ sub_80B92AC();
+ CreateRecordMixingSprite();
+ taskData[TD_STATE] = 1;
+ taskData[10] = CreateTask(sub_80B95F0, 0x50);
+ taskData[15] = CreateTask(sub_80B9450, 0x51);
+ break;
+ case 1:
+ if(!gTasks[taskData[10]].isActive)
+ {
+ taskData[TD_STATE] = 2;
+ FlagSet(0x834);
+ DestroyRecordMixingSprite();
+ DestroyTask(taskData[15]);
+ }
+ break;
+ case 2:
+ taskData[10] = CreateTask(sub_80BA00C, 10);
+ taskData[TD_STATE] = 3;
+ PlaySE(SE_W226);
+ break;
+ case 3:
+ if(!gTasks[taskData[10]].isActive)
+ {
+ taskData[TD_STATE] = 4;
+ taskData[10] = sub_8083664();
+ sub_80720B0();
+ MenuPrint(gOtherText_MixingComplete, 2, 15);
+ taskData[8] = 0;
+ }
+ break;
+ case 4:
+ taskData[8]++;
+ if(taskData[8] > 60)
+ taskData[TD_STATE] = 5;
+ break;
+ case 5:
+ if(!gTasks[taskData[10]].isActive)
+ {
+ sub_8055588();
+ MenuZeroFillScreen();
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+ break;
+ }
+}
+
+void sub_80B95F0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[TD_STATE])
+ {
+ case 0:
+ sub_80B9A78();
+ MenuDisplayMessageBox();
+ MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15);
+ task->data[8] = 0x708;
+ task->data[TD_STATE] = 0x190;
+ ClearLinkCallback_2();
+ break;
+ case 100:
+ task->data[12]++;
+ if(task->data[12] > 20)
+ {
+ task->data[12] = 0;
+ task->data[TD_STATE] = 101;
+ }
+ break;
+ case 101:
+ {
+ u8 players = GetLinkPlayerCount_2();
+
+ if(IsLinkMaster() == 1)
+ {
+ if(players == sub_800820C())
+ {
+ PlaySE(0x15);
+ task->data[TD_STATE] = 201;
+ task->data[12] = 0;
+ }
+ }
+ else
+ {
+ PlaySE(0x16);
+ task->data[TD_STATE] = 301;
+ }
+ break;
+ }
+ case 201:
+ if(sub_800820C() == GetLinkPlayerCount_2())
+ {
+ if(++task->data[12] > GetLinkPlayerCount_2() * 30)
+ {
+ sub_8007F4C();
+ task->data[TD_STATE] = 1;
+ }
+ }
+ break;
+ case 301:
+ if(sub_800820C() == GetLinkPlayerCount_2())
+ task->data[TD_STATE] = 1;
+ break;
+ case 400:
+ task->data[12]++;
+ if(task->data[12] > 20)
+ {
+ task->data[TD_STATE] = 1;
+ task->data[12] = 0;
+ }
+ break;
+ case 1:
+ if(gReceivedRemoteLinkPlayers)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
+ task->data[TD_STATE] = 5;
+ }
+ break;
+ case 2:
+ {
+ u8 subTaskId;
+
+ task->data[6] = GetLinkPlayerCount_2();
+ task->data[TD_STATE] = 0;
+ task->data[5] = GetMultiplayerId_();
+ task->func = sub_80B97DC;
+ StorePtrInTaskData(&unk_2018000, &task->data[2]);
+ subTaskId = CreateTask(Task_CopyRecvBuffer, 0x50);
+ task->data[10] = subTaskId;
+ gTasks[subTaskId].data[0] = taskId;
+ //StorePtrInTaskData((void*)0x2008000, &gTasks[subTaskId].data[5]);
+ StorePtrInTaskData((u8 *)&unk_2018000 - 0x10000, &gTasks[subTaskId].data[5]);
+ break;
+ }
+ case 5:
+ task->data[10]++;
+ if(task->data[10] > 60)
+ {
+ task->data[10] = 0;
+ task->data[TD_STATE] = 2;
+ }
+ break;
+ }
+}
+
+void sub_80B97DC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[TD_STATE])
+ {
+ case 0: //Copy record data to send buffer
+ {
+ void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4];
+
+ memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE);
+ task->data[TD_STATE]++;
+ break;
+ }
+ case 1:
+ if(GetMultiplayerId() == 0)
+ sub_8007E9C(1);
+ task->data[TD_STATE]++;
+ break;
+ case 2:
+ break;
+ case 3:
+ task->data[4]++;
+ if((u16)task->data[4] == 24)
+ task->data[TD_STATE]++;
+ else
+ task->data[TD_STATE] = 0;
+ break;
+ case 4:
+ if(!gTasks[task->data[10]].isActive)
+ task->func = sub_80B9A1C;
+ }
+}
+
+void Task_CopyRecvBuffer(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s32 recvStatus = GetBlockReceivedStatus();
+ u32 sp8 = 0;
+
+ if(recvStatus == sub_8008198())
+ {
+ u8 player;
+
+ for(player = 0; player < GetLinkPlayerCount(); player++)
+ {
+ //_080B98D4
+ u8 *ptr;
+ void *src;
+ u8 *dst;
+
+ if((recvStatus >> player) & 1)
+ {
+ ptr = LoadPtrFromTaskData(&task->data[5]);
+ dst = ptr + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
+ src = GetPlayerRecvBuffer(player);
+ if((u32)(task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
+ memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE);
+ else
+ memcpy(dst, src, BUFFER_CHUNK_SIZE);
+ //_080B993C
+ ResetBlockReceivedFlag(player);
+ task->data[player + 1]++;
+ if((u16)task->data[player + 1] == 0x18)
+ sp8 = (u8)(sp8 + 1);
+ }
+ }
+ //line 828
+ gTasks[task->data[0]].data[0]++;
+ }
+ //_080B998A
+ if(sp8 == GetLinkPlayerCount())
+ DestroyTask(taskId);
+}
+
+void sub_80B99B4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if(!gTasks[task->data[10]].isActive)
+ DestroyTask(taskId);
+}
+
+void sub_80B99E8(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->func = sub_80B99B4;
+ if(gUnknown_03000718 == 1)
+ sub_80B93B0(task->data[5]);
+}
+
+void sub_80B9A1C(u8 taskId)
+{
+ gTasks[taskId].func = sub_80B99E8;
+ gUnknown_03000718 = 1;
+}
+
+void *LoadPtrFromTaskData(u16 *ptr)
+{
+ return (void *)(*ptr | *(ptr + 1) << 16);
+}
+
+void StorePtrInTaskData(void *ptr, u16 *data)
+{
+ *data = (u32)ptr;
+ *(data + 1) = (u32)ptr >> 16;
+}
+
+u8 GetMultiplayerId_(void)
+{
+ return GetMultiplayerId();
+}
+
+u16 *GetPlayerRecvBuffer(u8 player)
+{
+ return gBlockRecvBuffer[player];
+}
+
+void sub_80B9A78(void)
+{
+ gUnknown_03005D2C = sizeof(struct PlayerRecords);
+}
+
+void sub_80B9A88(u8 *a)
+{
+ u32 i;
+ u32 id;
+ u32 players = GetLinkPlayerCount();
+
+ switch(players)
+ {
+ case 2:
+ for(i = 0; i < 2; i++)
+ a[i] = gUnknown_083D0288[i];
+ break;
+ case 3:
+ id = GetLinkPlayerTrainerId(0) % 2;
+ for(i = 0; i < 3; i++)
+ a[i] = gUnknown_083D028A[id][i];
+ break;
+ case 4:
+ id = GetLinkPlayerTrainerId(0) % 9;
+ for(i = 0; i < 4; i++)
+ a[i] = gUnknown_083D0290[id][i];
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_80B9B1C(u8 *a, size_t size, u8 index)
+{
+ u8 arr[4];
+ u8 *ptr;
+
+ sub_80B9A88(arr);
+ //Probably not how it was originally written, but this matches.
+ memcpy(a + index * size, (ptr = gUnknown_083D0278), 0x40);
+ memcpy(ptr, a + arr[index] * size, 0x40);
+ sub_80F7F30();
+}
+
+void sub_80B9B70(u8 *a, size_t size, u8 index)
+{
+ sub_80B9A88(gUnknown_0300071C);
+ memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4);
+ sub_8134AC0(a + size * index);
+}
+
+u8 sub_80B9BBC(u16 *a)
+{
+ return a[16];
+}
+
+#ifdef NONMATCHING
+
+void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+{
+ //ToDo: Figure out what this strange stack usage is
+}
+
+#else
+__attribute__((naked))
+void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ mov r6, r10\n\
+ mov r5, r9\n\
+ mov r4, r8\n\
+ push {r4-r6}\n\
+ sub sp, 0x38\n\
+ mov r8, r0\n\
+ mov r10, r1\n\
+ mov r9, r2\n\
+ adds r4, r3, 0\n\
+ ldr r5, [sp, 0x54]\n\
+ lsls r4, 24\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ lsrs r4, 23\n\
+ add r4, r9\n\
+ ldrb r0, [r4]\n\
+ mov r6, r10\n\
+ muls r6, r0\n\
+ add r6, r8\n\
+ ldrb r0, [r4, 0x1]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r6, r1\n\
+ mov r0, sp\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ lsls r5, 1\n\
+ add r5, r9\n\
+ ldrb r0, [r5]\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ add r8, r0\n\
+ ldrb r1, [r4, 0x1]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 3\n\
+ adds r6, r0\n\
+ ldrb r0, [r5, 0x1]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 3\n\
+ add r1, r8\n\
+ adds r0, r6, 0\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ ldrb r1, [r5, 0x1]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 3\n\
+ add r8, r0\n\
+ mov r0, r8\n\
+ mov r1, sp\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ add sp, 0x38\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+u8 sub_80B9C4C(u8 *a)
+{
+ int i;
+ u8 r2 = 0;
+
+ for(i = 0; i < 0x100; i++)
+ r2 += a[i];
+ return r2;
+}
+
+struct UnkStruct1
+{
+ u8 unk0[4];
+ u8 unk4[4];
+ u8 unk8[4];
+ u8 fillerC[0x10];
+ u8 unk1C[4][2];
+ u8 filler24[8];
+ void *unk2C;
+ u32 unk30;
+ u32 unk34;
+ void *unk38;
+ u32 unk3C;
+ u32 unk40;
+ u8 filler44[4];
+ u32 unk48;
+ u32 unk4C;
+ u32 unk50;
+
+};
+
+/*
+//Not finished
+extern void sub_80B9C6C(void *a, u32 b, u8 c, void *d)
+{
+ struct UnkStruct1 s;
+ u16 r8;
+ u16 r3;
+
+ s.unk2C = a;
+ s.unk30 = b;
+ s.unk38 = d;
+ s.unk34 = c;
+ s.unk40 = Random();
+ SeedRng(gLinkPlayers[0].trainerId);
+ r8 = GetLinkPlayerCount();
+ r3 = 0;
+
+ s.unk4C = 12;
+
+ while(r3 < 4)
+ {
+
+ s.unk4[r3] |= 0xFF;
+ s.unk8[r3] = 0;
+
+ s.unk1C[r3][0] = 0;
+ s.unk1C[r3][1] = 0;
+ r3++;
+ }
+ s.unk3C = 0;
+ r3 = 0;
+ s.unk50 = r8 << 16;
+ s.unk48 = s.unk30 * s.unk34;
+
+ if(s.unk3C < r8)
+ {
+ do //_080B9D00
+ {
+ u32 *r6 = (u32 *)(s.unk2C + s.unk30 * r3);
+ if(r6[0x1C] != 0 && r6[0x1C] > 0)
+ {
+
+ }
+ //_080B9D3C
+ }
+ while(r3 < r8);
+ }
+ //_080B9D46
+}
+*/
+
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index f4befa466..c81036587 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -148,7 +148,7 @@ bool8 CheckFeebas(void)
if(Random() % 100 > 49) //Why not just do (Random() & 1) to get a 50% chance?
return FALSE;
//_08084AC8
- FeebasSeedRng(gSaveBlock1.feebasLocationSeed);
+ FeebasSeedRng(gSaveBlock1.easyChatPairs[0].unk2);
for(i = 0; i != NUM_FEEBAS_SPOTS;)
{
feebasSpots[i] = FeebasRandom() % 447;