diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2016-10-30 17:59:09 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-30 15:59:09 -0700 |
commit | a45e18753afffb80e3633fa006daf84325860208 (patch) | |
tree | 35ec86eb1ec7f191354c7b2c5be46493ff5d3a5b | |
parent | b86183aecd4e7e264158cd6cdb5e1332c41d4340 (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.s | 939 | ||||
-rw-r--r-- | asm/record_mixing.s | 1237 | ||||
-rw-r--r-- | data/data2.s | 19 | ||||
-rw-r--r-- | include/global.h | 87 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | shared_syms.txt | 7 | ||||
-rw-r--r-- | src/dewford_trend.c | 644 | ||||
-rw-r--r-- | src/record_mixing.c | 735 | ||||
-rw-r--r-- | src/wild_encounter.c | 2 |
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; |