diff options
52 files changed, 1755 insertions, 3924 deletions
diff --git a/INSTALL.md b/INSTALL.md index 72b3da12a..1d50d778e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,7 +4,7 @@ Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). Make sure that there is an environment variable called DEVKITARM with the path of the directory before the "bin" directory containing "arm-none-eabi-as", "arm-none-eabi-cpp", "arm-none-eabi-ld" and "arm-none-eabi-objcopy". -Then get the compiler from https://github.com/YamaArashi/agbcc and run the following commands. +Then get the compiler from https://github.com/pret/agbcc and run the following commands. build.sh install.sh PATH_OF_POKERUBY_DIRECTORY diff --git a/asm/battle_1.s b/asm/battle_1.s index 5fe4672d9..44d0b245f 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -1358,7 +1358,7 @@ _0800E148: ldrsh r0, [r1, r5] cmp r0, 0 beq _0800E154 - bl sub_800DC24 + bl PrintLinkBattleWinLossTie _0800E154: movs r0, 0x78 bl PlaySE diff --git a/asm/battle_2.s b/asm/battle_2.s index 004d1eadf..f1c865a49 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -6,2608 +6,6 @@ .text - thumb_func_start sub_800E7C4 -sub_800E7C4: @ 800E7C4 - push {lr} - ldr r0, _0800E7E4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800E7F0 - bl sub_800B858 - ldr r0, _0800E7E8 @ =sub_800F104 - bl SetMainCallback2 - ldr r1, _0800E7EC @ =gUnknown_02024D1E - movs r0, 0 - strb r0, [r1] - b _0800E7F4 - .align 2, 0 -_0800E7E4: .4byte gBattleTypeFlags -_0800E7E8: .4byte sub_800F104 -_0800E7EC: .4byte gUnknown_02024D1E -_0800E7F0: - bl sub_800E7F8 -_0800E7F4: - pop {r0} - bx r0 - thumb_func_end sub_800E7C4 - - thumb_func_start sub_800E7F8 -sub_800E7F8: @ 800E7F8 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r4, 0 - str r4, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _0800E90C @ =0x05006000 - mov r0, sp - bl CpuSet - ldr r0, _0800E910 @ =REG_MOSAIC - strh r4, [r0] - subs r0, 0xC - movs r2, 0xF0 - strh r2, [r0] - adds r0, 0x4 - ldr r3, _0800E914 @ =0x00005051 - adds r1, r3, 0 - strh r1, [r0] - adds r0, 0x4 - strh r4, [r0] - adds r0, 0x2 - strh r4, [r0] - ldr r0, _0800E918 @ =gUnknown_030042C4 - strh r2, [r0] - ldr r0, _0800E91C @ =gUnknown_03004240 - strh r1, [r0] - bl dp12_8087EA4 - ldr r0, _0800E920 @ =gUnknown_03004DE0 - movs r3, 0xF0 - movs r5, 0xF0 - lsls r5, 3 - adds r2, r0, r5 - movs r1, 0x4F -_0800E84A: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _0800E84A - movs r1, 0x50 - ldr r4, _0800E924 @ =gUnknown_081F9674 - ldr r0, _0800E920 @ =gUnknown_03004DE0 - ldr r3, _0800E928 @ =0x0000ff10 - movs r5, 0x82 - lsls r5, 4 - adds r2, r0, r5 - adds r0, 0xA0 -_0800E868: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _0800E868 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - bl sub_80895F8 - ldr r4, _0800E92C @ =gWindowConfig_81E6C58 - adds r0, r4, 0 - bl SetUpWindowConfig - bl ResetPaletteFade - ldr r0, _0800E930 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0800E934 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r0, _0800E938 @ =gUnknown_030042C0 - strh r1, [r0] - ldr r0, _0800E93C @ =gUnknown_030041B4 - strh r1, [r0] - ldr r0, _0800E940 @ =gUnknown_03004288 - strh r1, [r0] - ldr r0, _0800E944 @ =gUnknown_03004280 - strh r1, [r0] - ldr r0, _0800E948 @ =gUnknown_030041B0 - strh r1, [r0] - ldr r0, _0800E94C @ =gUnknown_030041B8 - strh r1, [r0] - bl GetBattleTerrain - ldr r1, _0800E950 @ =gBattleTerrain - strb r0, [r1] - ldr r0, _0800E954 @ =gUnknown_03004210 - adds r1, r4, 0 - bl InitWindowFromConfig - ldr r0, _0800E958 @ =gUnknown_030041D0 - ldr r1, _0800E95C @ =gWindowConfig_81E71D0 - bl InitWindowFromConfig - ldr r0, _0800E960 @ =gUnknown_03004250 - ldr r1, _0800E964 @ =gWindowConfig_81E71EC - bl InitWindowFromConfig - bl sub_800D6D4 - bl sub_800DAB8 - bl ResetSpriteData - bl ResetTasks - bl sub_800E23C - bl FreeAllSpritePalettes - ldr r1, _0800E968 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _0800E96C @ =sub_800FCFC - bl SetVBlankCallback - bl setup_poochyena_battle - ldr r0, _0800E970 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800E978 - ldr r0, _0800E974 @ =sub_800F298 - bl SetMainCallback2 - b _0800E97E - .align 2, 0 -_0800E90C: .4byte 0x05006000 -_0800E910: .4byte REG_MOSAIC -_0800E914: .4byte 0x00005051 -_0800E918: .4byte gUnknown_030042C4 -_0800E91C: .4byte gUnknown_03004240 -_0800E920: .4byte gUnknown_03004DE0 -_0800E924: .4byte gUnknown_081F9674 -_0800E928: .4byte 0x0000ff10 -_0800E92C: .4byte gWindowConfig_81E6C58 -_0800E930: .4byte gUnknown_030042A4 -_0800E934: .4byte gUnknown_030042A0 -_0800E938: .4byte gUnknown_030042C0 -_0800E93C: .4byte gUnknown_030041B4 -_0800E940: .4byte gUnknown_03004288 -_0800E944: .4byte gUnknown_03004280 -_0800E948: .4byte gUnknown_030041B0 -_0800E94C: .4byte gUnknown_030041B8 -_0800E950: .4byte gBattleTerrain -_0800E954: .4byte gUnknown_03004210 -_0800E958: .4byte gUnknown_030041D0 -_0800E95C: .4byte gWindowConfig_81E71D0 -_0800E960: .4byte gUnknown_03004250 -_0800E964: .4byte gWindowConfig_81E71EC -_0800E968: .4byte gReservedSpritePaletteCount -_0800E96C: .4byte sub_800FCFC -_0800E970: .4byte gBattleTypeFlags -_0800E974: .4byte sub_800F298 -_0800E978: - ldr r0, _0800E9CC @ =sub_800EC9C - bl SetMainCallback2 -_0800E97E: - ldr r0, _0800E9D0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800E998 - ldr r0, _0800E9D4 @ =gEnemyParty - ldr r1, _0800E9D8 @ =gTrainerBattleOpponent - ldrh r1, [r1] - bl sub_800F8E8 - bl SetWildMonHeldItem -_0800E998: - ldr r0, _0800E9DC @ =gMain - ldr r1, _0800E9E0 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldr r4, _0800E9E4 @ =gPlayerParty - movs r3, 0xFA - lsls r3, 1 - adds r5, r4, r3 -_0800E9AE: - adds r0, r4, 0 - movs r1, 0x3 - bl AdjustFriendship - adds r4, 0x64 - cmp r4, r5 - ble _0800E9AE - movs r1, 0 - ldr r0, _0800E9E8 @ =gUnknown_02024D1E - strb r1, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800E9CC: .4byte sub_800EC9C -_0800E9D0: .4byte gBattleTypeFlags -_0800E9D4: .4byte gEnemyParty -_0800E9D8: .4byte gTrainerBattleOpponent -_0800E9DC: .4byte gMain -_0800E9E0: .4byte 0x0000043d -_0800E9E4: .4byte gPlayerParty -_0800E9E8: .4byte gUnknown_02024D1E - thumb_func_end sub_800E7F8 - - thumb_func_start sub_800E9EC -sub_800E9EC: @ 800E9EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - mov r9, r6 - movs r0, 0xCE - lsls r0, 1 - mov r10, r0 - mov r8, r6 -_0800EA02: - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, _0800EAA4 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _0800EA7E - cmp r5, r10 - beq _0800EA4A - cmp r7, 0 - beq _0800EA4A - cmp r1, 0 - bne _0800EA4A - movs r0, 0x1 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0800EA4A: - cmp r5, 0 - beq _0800EA7E - cmp r7, 0 - beq _0800EA66 - cmp r5, r10 - beq _0800EA5A - cmp r1, 0 - beq _0800EA66 -_0800EA5A: - movs r0, 0x2 - mov r1, r8 - lsls r0, r1 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0800EA66: - cmp r5, 0 - beq _0800EA7E - cmp r5, r10 - beq _0800EA7E - cmp r7, 0 - bne _0800EA7E - movs r0, 0x3 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0800EA7E: - movs r0, 0x2 - add r8, r0 - movs r1, 0x1 - add r9, r1 - mov r2, r9 - cmp r2, 0x5 - ble _0800EA02 - ldr r1, _0800EAA8 @ =0x02000000 - strb r6, [r1, 0x2] - lsrs r0, r6, 8 - strb r0, [r1, 0x3] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800EAA4: .4byte gPlayerParty -_0800EAA8: .4byte 0x02000000 - thumb_func_end sub_800E9EC - - thumb_func_start sub_800EAAC -sub_800EAAC: @ 800EAAC - push {r4-r6,lr} - ldr r4, _0800EAF4 @ =0x02000004 - movs r2, 0 - ldr r6, _0800EAF8 @ =gSaveBlock1 - ldr r0, _0800EAFC @ =0x00003160 - adds r3, r6, r0 -_0800EAB8: - adds r0, r4, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x6 - ble _0800EAB8 - movs r2, 0 - adds r3, r4, 0 - adds r3, 0x8 - ldr r5, _0800EB00 @ =gSaveBlock1 + 0x3676 -_0800EACE: - adds r0, r3, r2 - adds r1, r2, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x11 - ble _0800EACE - ldr r1, _0800EB04 @ =0x00003688 - adds r0, r6, r1 - ldrb r0, [r0] - strb r0, [r4, 0x7] - adds r1, 0x1 - adds r0, r6, r1 - ldrb r0, [r0] - strb r0, [r4, 0x1A] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800EAF4: .4byte 0x02000004 -_0800EAF8: .4byte gSaveBlock1 -_0800EAFC: .4byte 0x00003160 -_0800EB00: .4byte gSaveBlock1 + 0x3676 -_0800EB04: .4byte 0x00003688 - thumb_func_end sub_800EAAC - - thumb_func_start sub_800EB08 -sub_800EB08: @ 800EB08 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _0800EB84 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800EBA4 - movs r3, 0 - ldr r5, _0800EB88 @ =gEnigmaBerries - ldr r0, _0800EB8C @ =gSaveBlock1 - mov r12, r0 - adds r7, r5, 0 - ldr r6, _0800EB90 @ =0x00003160 - add r6, r12 - adds r4, r5, 0 - adds r4, 0x38 -_0800EB30: - adds r1, r3, r7 - adds r2, r3, r6 - ldrb r0, [r2] - strb r0, [r1] - adds r1, r3, r4 - ldrb r0, [r2] - strb r0, [r1] - adds r3, 0x1 - cmp r3, 0x6 - ble _0800EB30 - movs r3, 0 - ldr r4, _0800EB94 @ =gUnknown_02024DF8 - ldr r7, _0800EB98 @ =gSaveBlock1 + 0x3676 - adds r6, r4, 0 - adds r6, 0x38 -_0800EB4E: - adds r1, r3, r4 - adds r2, r3, r7 - ldrb r0, [r2] - strb r0, [r1] - adds r1, r3, r6 - ldrb r0, [r2] - strb r0, [r1] - adds r3, 0x1 - cmp r3, 0x11 - ble _0800EB4E - ldr r1, _0800EB9C @ =0x00003688 - add r1, r12 - ldrb r0, [r1] - strb r0, [r5, 0x7] - ldrb r0, [r1] - adds r1, r5, 0 - adds r1, 0x3F - strb r0, [r1] - ldr r1, _0800EBA0 @ =0x00003689 - add r1, r12 - ldrb r0, [r1] - strb r0, [r5, 0x1A] - ldrb r1, [r1] - adds r0, r5, 0 - adds r0, 0x52 - strb r1, [r0] - b _0800EC28 - .align 2, 0 -_0800EB84: .4byte gBattleTypeFlags -_0800EB88: .4byte gEnigmaBerries -_0800EB8C: .4byte gSaveBlock1 -_0800EB90: .4byte 0x00003160 -_0800EB94: .4byte gUnknown_02024DF8 -_0800EB98: .4byte gSaveBlock1 + 0x3676 -_0800EB9C: .4byte 0x00003688 -_0800EBA0: .4byte 0x00003689 -_0800EBA4: - movs r0, 0x40 - ands r0, r1 - movs r1, 0x2 - mov r8, r1 - cmp r0, 0 - beq _0800EBB4 - movs r0, 0x4 - mov r8, r0 -_0800EBB4: - movs r3, 0 - cmp r3, r8 - bge _0800EC28 - ldr r1, _0800EC38 @ =gEnigmaBerries - mov r12, r1 - ldr r0, _0800EC3C @ =gBlockRecvBuffer + 0x4 - mov r10, r0 - movs r1, 0x8 - add r1, r12 - mov r9, r1 -_0800EBC8: - lsls r0, r3, 8 - mov r1, r10 - adds r5, r0, r1 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - ldr r1, _0800EC40 @ =gLinkPlayers - adds r0, r1 - ldrb r4, [r0, 0x18] - movs r2, 0 - adds r7, r3, 0x1 - lsls r1, r4, 3 - subs r0, r1, r4 - adds r6, r1, 0 - lsls r0, 2 - mov r1, r12 - adds r3, r0, r1 -_0800EBEA: - adds r0, r5, r2 - ldrb r0, [r0] - strb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - cmp r2, 0x6 - ble _0800EBEA - movs r2, 0 - subs r0, r6, r4 - lsls r0, 2 - mov r1, r9 - adds r3, r0, r1 - adds r1, r5, 0 - adds r1, 0x8 -_0800EC06: - adds r0, r1, r2 - ldrb r0, [r0] - strb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - cmp r2, 0x11 - ble _0800EC06 - subs r0, r6, r4 - lsls r0, 2 - add r0, r12 - ldrb r1, [r5, 0x7] - strb r1, [r0, 0x7] - ldrb r1, [r5, 0x1A] - strb r1, [r0, 0x1A] - adds r3, r7, 0 - cmp r3, r8 - blt _0800EBC8 -_0800EC28: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800EC38: .4byte gEnigmaBerries -_0800EC3C: .4byte gBlockRecvBuffer + 0x4 -_0800EC40: .4byte gLinkPlayers - thumb_func_end sub_800EB08 - - thumb_func_start shedinja_something -shedinja_something: @ 800EC44 - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - add r5, sp, 0xC - movs r0, 0x1 - strb r0, [r5] - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldr r1, _0800EC94 @ =0x0000012f - cmp r0, r1 - bne _0800EC8C - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - ldrb r1, [r5] - cmp r0, r1 - beq _0800EC8C - adds r0, r4, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r1, _0800EC98 @ =gUnknown_081F96C8 - mov r0, sp - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _0800EC8C - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetMonData -_0800EC8C: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800EC94: .4byte 0x0000012f -_0800EC98: .4byte gUnknown_081F96C8 - thumb_func_end shedinja_something - - thumb_func_start sub_800EC9C -sub_800EC9C: @ 800EC9C - push {r4-r7,lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl GetMultiplayerId - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0800ECD4 @ =0x02000000 - ldr r1, _0800ECD8 @ =0x000160cb - adds r0, r1 - strb r4, [r0] - movs r0, 0x1 - adds r5, r4, 0 - eors r5, r0 - ldr r0, _0800ECDC @ =gUnknown_02024D1E - ldrb r0, [r0] - cmp r0, 0x9 - bls _0800ECCA - b _0800F008 -_0800ECCA: - lsls r0, 2 - ldr r1, _0800ECE0 @ =_0800ECE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800ECD4: .4byte 0x02000000 -_0800ECD8: .4byte 0x000160cb -_0800ECDC: .4byte gUnknown_02024D1E -_0800ECE0: .4byte _0800ECE4 - .align 2, 0 -_0800ECE4: - .4byte _0800ED0C - .4byte _0800ED7C - .4byte _0800EE88 - .4byte _0800EEAC - .4byte _0800EED8 - .4byte _0800EEFC - .4byte _0800EF28 - .4byte _0800EF48 - .4byte _0800EFB4 - .4byte _0800EFCC -_0800ED0C: - ldr r2, _0800ED54 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0800ED64 - ldr r0, _0800ED58 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0800ED22 - b _0800F008 -_0800ED22: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800ED2E - b _0800F008 -_0800ED2E: - ldr r4, _0800ED5C @ =0x02000000 - movs r5, 0x1 - strb r5, [r4] - strb r5, [r4, 0x1] - bl sub_800E9EC - bl sub_800EAAC - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - movs r2, 0x20 - bl SendBlock - ldr r0, _0800ED60 @ =gUnknown_02024D1E - strb r5, [r0] - b _0800F008 - .align 2, 0 -_0800ED54: .4byte gBattleTypeFlags -_0800ED58: .4byte gReceivedRemoteLinkPlayers -_0800ED5C: .4byte 0x02000000 -_0800ED60: .4byte gUnknown_02024D1E -_0800ED64: - movs r0, 0x4 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0800ED78 @ =gUnknown_02024D1E - movs r0, 0x8 - strb r0, [r1] - bl sub_800EB08 - b _0800F008 - .align 2, 0 -_0800ED78: .4byte gUnknown_02024D1E -_0800ED7C: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0800ED8A - b _0800F008 -_0800ED8A: - bl ResetBlockReceivedFlags - movs r3, 0 - ldr r0, _0800EDA8 @ =gBlockRecvBuffer - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bne _0800EDBC - cmp r4, 0 - bne _0800EDB0 - ldr r0, _0800EDAC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0xC - b _0800EDB6 - .align 2, 0 -_0800EDA8: .4byte gBlockRecvBuffer -_0800EDAC: .4byte gBattleTypeFlags -_0800EDB0: - ldr r0, _0800EDE0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0x8 -_0800EDB6: - orrs r1, r2 - strh r1, [r0] - adds r3, 0x1 -_0800EDBC: - lsls r7, r5, 8 - cmp r3, 0 - bne _0800EE38 - ldr r0, _0800EDE4 @ =gBlockRecvBuffer - movs r1, 0x80 - lsls r1, 1 - adds r2, r0, r1 - ldrh r1, [r0] - adds r6, r0, 0 - ldrh r2, [r2] - cmp r1, r2 - bne _0800EDF4 - cmp r4, 0 - bne _0800EDE8 - ldr r0, _0800EDE0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0xC - b _0800EDEE - .align 2, 0 -_0800EDE0: .4byte gBattleTypeFlags -_0800EDE4: .4byte gBlockRecvBuffer -_0800EDE8: - ldr r0, _0800EE04 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0x8 -_0800EDEE: - orrs r1, r2 - strh r1, [r0] - adds r3, 0x1 -_0800EDF4: - lsls r7, r5, 8 - cmp r3, 0 - bne _0800EE38 - ldrh r1, [r6] - ldr r0, _0800EE08 @ =0x00000101 - ldr r2, _0800EE04 @ =gBattleTypeFlags - b _0800EE1A - .align 2, 0 -_0800EE04: .4byte gBattleTypeFlags -_0800EE08: .4byte 0x00000101 -_0800EE0C: - adds r3, 0x1 - cmp r3, 0x1 - bgt _0800EE22 - lsls r0, r3, 8 - adds r0, r6 - ldrh r1, [r0] - ldr r0, _0800EE2C @ =0x00000101 -_0800EE1A: - cmp r1, r0 - bls _0800EE0C - cmp r3, r4 - beq _0800EE0C -_0800EE22: - cmp r3, 0x2 - bne _0800EE30 - ldrh r0, [r2] - movs r1, 0xC - b _0800EE34 - .align 2, 0 -_0800EE2C: .4byte 0x00000101 -_0800EE30: - ldrh r0, [r2] - movs r1, 0x8 -_0800EE34: - orrs r0, r1 - strh r0, [r2] -_0800EE38: - bl sub_800EB08 - ldr r0, _0800EE78 @ =sub_800DE30 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800EE7C @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - movs r1, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r2, 0xA] - movs r0, 0x5A - strh r0, [r2, 0xC] - strh r1, [r2, 0x12] - ldr r0, _0800EE80 @ =0x02000000 - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - lsls r0, 8 - orrs r1, r0 - strh r1, [r2, 0xE] - ldr r0, _0800EE84 @ =gBlockRecvBuffer - adds r0, 0x2 - adds r0, r7, r0 - ldrh r0, [r0] - strh r0, [r2, 0x10] - b _0800EF96 - .align 2, 0 -_0800EE78: .4byte sub_800DE30 -_0800EE7C: .4byte gTasks -_0800EE80: .4byte 0x02000000 -_0800EE84: .4byte gBlockRecvBuffer -_0800EE88: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800EE94 - b _0800F008 -_0800EE94: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800EEA8 @ =gPlayerParty - movs r2, 0xC8 - bl SendBlock - b _0800EF96 - .align 2, 0 -_0800EEA8: .4byte gPlayerParty -_0800EEAC: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0800EEBA - b _0800F008 -_0800EEBA: - bl ResetBlockReceivedFlags - ldr r0, _0800EED0 @ =gEnemyParty - lsls r1, r5, 8 - ldr r2, _0800EED4 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - b _0800EF96 - .align 2, 0 -_0800EED0: .4byte gEnemyParty -_0800EED4: .4byte gBlockRecvBuffer -_0800EED8: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800EEE4 - b _0800F008 -_0800EEE4: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800EEF8 @ =gPlayerParty + 2 * 0x64 - movs r2, 0xC8 - bl SendBlock - b _0800EF96 - .align 2, 0 -_0800EEF8: .4byte gPlayerParty + 2 * 0x64 -_0800EEFC: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0800EF0A - b _0800F008 -_0800EF0A: - bl ResetBlockReceivedFlags - ldr r0, _0800EF20 @ =gEnemyParty + 2 * 0x64 - lsls r1, r5, 8 - ldr r2, _0800EF24 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - b _0800EF96 - .align 2, 0 -_0800EF20: .4byte gEnemyParty + 2 * 0x64 -_0800EF24: .4byte gBlockRecvBuffer -_0800EF28: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - beq _0800F008 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800EF44 @ =gPlayerParty + 4 * 0x64 - movs r2, 0xC8 - bl SendBlock - b _0800EF96 - .align 2, 0 -_0800EF44: .4byte gPlayerParty + 4 * 0x64 -_0800EF48: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - bne _0800F008 - bl ResetBlockReceivedFlags - ldr r4, _0800EFA0 @ =gEnemyParty + 4 * 0x64 - lsls r1, r5, 8 - ldr r0, _0800EFA4 @ =gBlockRecvBuffer - adds r1, r0 - adds r0, r4, 0 - movs r2, 0xC8 - bl memcpy - ldr r1, _0800EFA8 @ =0xfffffe70 - adds r0, r4, r1 - bl shedinja_something - ldr r1, _0800EFAC @ =0xfffffed4 - adds r0, r4, r1 - bl shedinja_something - adds r0, r4, 0 - subs r0, 0xC8 - bl shedinja_something - adds r0, r4, 0 - subs r0, 0x64 - bl shedinja_something - adds r0, r4, 0 - bl shedinja_something - adds r0, r4, 0 - adds r0, 0x64 - bl shedinja_something -_0800EF96: - ldr r1, _0800EFB0 @ =gUnknown_02024D1E - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0800F008 - .align 2, 0 -_0800EFA0: .4byte gEnemyParty + 4 * 0x64 -_0800EFA4: .4byte gBlockRecvBuffer -_0800EFA8: .4byte 0xfffffe70 -_0800EFAC: .4byte 0xfffffed4 -_0800EFB0: .4byte gUnknown_02024D1E -_0800EFB4: - bl sub_800B950 - ldr r0, _0800EFC8 @ =gUnknown_02024D1E - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _0800F008 - .align 2, 0 -_0800EFC8: .4byte gUnknown_02024D1E -_0800EFCC: - ldr r0, _0800F010 @ =gUnknown_02024D1F - adds r1, r0, 0x1 - bl battle_load_something - lsls r0, 24 - cmp r0, 0 - beq _0800F008 - ldr r2, _0800F014 @ =gUnknown_030042D0 - ldr r1, _0800F018 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _0800F01C @ =sub_8010824 - str r0, [r1] - ldr r0, _0800F020 @ =sub_800F808 - bl SetMainCallback2 - ldr r3, _0800F024 @ =gBattleTypeFlags - ldrh r2, [r3] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _0800F008 - ldr r1, _0800F028 @ =gTrainerBattleOpponent - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - strh r0, [r1] - movs r0, 0x20 - orrs r0, r2 - strh r0, [r3] -_0800F008: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F010: .4byte gUnknown_02024D1F -_0800F014: .4byte gUnknown_030042D0 -_0800F018: .4byte gMain -_0800F01C: .4byte sub_8010824 -_0800F020: .4byte sub_800F808 -_0800F024: .4byte gBattleTypeFlags -_0800F028: .4byte gTrainerBattleOpponent - thumb_func_end sub_800EC9C - - thumb_func_start sub_800F02C -sub_800F02C: @ 800F02C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r8, r0 - ldr r7, _0800F0F8 @ =gUnknown_02023A04 - mov r10, r7 -_0800F03E: - mov r1, r8 - lsls r6, r1, 5 - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, _0800F0FC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - movs r1, 0x4 - negs r1, r1 - add r1, r10 - mov r9, r1 - adds r5, r6, r1 - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - strh r0, [r5, 0x2] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r7, 0 - bl GetMonData - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - strb r0, [r5, 0xF] - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5, 0x10] - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r5, 0x12] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - mov r1, r10 - adds r1, 0x10 - adds r6, r1 - str r0, [r6] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - str r0, [r7, 0x14] - adds r0, r4, 0 - bl GetMonGender - strb r0, [r5, 0x1C] - adds r0, r7, 0 - bl StripExtCtrlCodes - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - strb r0, [r5, 0x1D] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0800F0D4 - adds r0, r7, 0 - movs r1, 0 - bl PadNameString -_0800F0D4: - adds r7, 0x20 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x2 - ble _0800F03E - ldr r0, _0800F100 @ =0x02000000 - mov r1, r9 - movs r2, 0x60 - bl memcpy - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F0F8: .4byte gUnknown_02023A04 -_0800F0FC: .4byte gPlayerParty -_0800F100: .4byte 0x02000000 - thumb_func_end sub_800F02C - - thumb_func_start sub_800F104 -sub_800F104: @ 800F104 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _0800F148 @ =0x02000000 - ldr r1, _0800F14C @ =0x000160cb - adds r0, r4, r1 - strb r6, [r0] - ldr r2, _0800F150 @ =0x000160c4 - adds r2, r4 - mov r9, r2 - ldr r0, _0800F154 @ =0x000160c2 - adds r0, r4 - mov r8, r0 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r5, _0800F158 @ =gUnknown_02024D1E - ldrb r0, [r5] - cmp r0, 0x1 - beq _0800F1A0 - cmp r0, 0x1 - bgt _0800F15C - cmp r0, 0 - beq _0800F168 - b _0800F27A - .align 2, 0 -_0800F148: .4byte 0x02000000 -_0800F14C: .4byte 0x000160cb -_0800F150: .4byte 0x000160c4 -_0800F154: .4byte 0x000160c2 -_0800F158: .4byte gUnknown_02024D1E -_0800F15C: - cmp r0, 0x2 - beq _0800F240 - cmp r0, 0x3 - bne _0800F166 - b _0800F25C -_0800F166: - b _0800F27A -_0800F168: - ldr r0, _0800F19C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0800F172 - b _0800F27A -_0800F172: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800F17E - b _0800F27A -_0800F17E: - bl sub_800F02C - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - movs r2, 0x60 - bl SendBlock - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _0800F27A - .align 2, 0 -_0800F19C: .4byte gReceivedRemoteLinkPlayers -_0800F1A0: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - bne _0800F27A - bl ResetBlockReceivedFlags - movs r4, 0 - lsls r0, r6, 3 - subs r0, r6 - lsls r5, r0, 2 - movs r7, 0 -_0800F1BA: - cmp r4, r6 - beq _0800F1FA - ldr r2, _0800F1DC @ =gLinkPlayers - adds r0, r7, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0800F1E0 - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F1EC - b _0800F1FA - .align 2, 0 -_0800F1DC: .4byte gLinkPlayers -_0800F1E0: - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F1FA -_0800F1EC: - lsls r1, r4, 8 - ldr r0, _0800F228 @ =gBlockRecvBuffer - adds r1, r0 - ldr r0, _0800F22C @ =gUnknown_02023A00 - movs r2, 0x60 - bl memcpy -_0800F1FA: - adds r7, 0x1C - adds r4, 0x1 - cmp r4, 0x3 - ble _0800F1BA - ldr r1, _0800F230 @ =gUnknown_02024D1E - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, _0800F234 @ =gMain - ldr r0, [r1, 0x8] - mov r2, r9 - str r0, [r2] - ldr r0, _0800F238 @ =gBattleTypeFlags - ldrh r0, [r0] - mov r2, r8 - strh r0, [r2] - ldr r0, _0800F23C @ =sub_800F104 - str r0, [r1, 0x8] - movs r0, 0x5 - movs r1, 0 - bl OpenPartyMenu - b _0800F27A - .align 2, 0 -_0800F228: .4byte gBlockRecvBuffer -_0800F22C: .4byte gUnknown_02023A00 -_0800F230: .4byte gUnknown_02024D1E -_0800F234: .4byte gMain -_0800F238: .4byte gBattleTypeFlags -_0800F23C: .4byte sub_800F104 -_0800F240: - ldr r0, _0800F258 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0800F27A - movs r0, 0x3 - strb r0, [r5] - bl sub_800832C - b _0800F27A - .align 2, 0 -_0800F258: .4byte gPaletteFade -_0800F25C: - ldr r0, _0800F288 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0800F27A - ldr r1, _0800F28C @ =gBattleTypeFlags - mov r2, r8 - ldrh r0, [r2] - strh r0, [r1] - ldr r1, _0800F290 @ =gMain - mov r2, r9 - ldr r0, [r2] - str r0, [r1, 0x8] - ldr r0, _0800F294 @ =sub_800E7F8 - bl SetMainCallback2 -_0800F27A: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F288: .4byte gReceivedRemoteLinkPlayers -_0800F28C: .4byte gBattleTypeFlags -_0800F290: .4byte gMain -_0800F294: .4byte sub_800E7F8 - thumb_func_end sub_800F104 - - thumb_func_start sub_800F298 -sub_800F298: @ 800F298 - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _0800F2D0 @ =0x02000000 - ldr r1, _0800F2D4 @ =0x000160cb - adds r0, r1 - strb r6, [r0] - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0800F2D8 @ =gUnknown_02024D1E - ldrb r0, [r0] - cmp r0, 0x7 - bls _0800F2C4 - b _0800F7E0 -_0800F2C4: - lsls r0, 2 - ldr r1, _0800F2DC @ =_0800F2E0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800F2D0: .4byte 0x02000000 -_0800F2D4: .4byte 0x000160cb -_0800F2D8: .4byte gUnknown_02024D1E -_0800F2DC: .4byte _0800F2E0 - .align 2, 0 -_0800F2E0: - .4byte _0800F300 - .4byte _0800F340 - .4byte _0800F4DE - .4byte _0800F504 - .4byte _0800F5F8 - .4byte _0800F61C - .4byte _0800F78C - .4byte _0800F7A4 -_0800F300: - ldr r0, _0800F338 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0800F30A - b _0800F7E0 -_0800F30A: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800F316 - b _0800F7E0 -_0800F316: - ldr r4, _0800F33C @ =0x02000000 - movs r0, 0x1 - strb r0, [r4] - strb r0, [r4, 0x1] - bl sub_800E9EC - bl sub_800EAAC - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - movs r2, 0x20 - bl SendBlock - b _0800F770 - .align 2, 0 -_0800F338: .4byte gReceivedRemoteLinkPlayers -_0800F33C: .4byte 0x02000000 -_0800F340: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _0800F34E - b _0800F7E0 -_0800F34E: - bl ResetBlockReceivedFlags - movs r4, 0 - ldr r0, _0800F36C @ =gBlockRecvBuffer - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bne _0800F380 - cmp r6, 0 - bne _0800F374 - ldr r0, _0800F370 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0xC - b _0800F37A - .align 2, 0 -_0800F36C: .4byte gBlockRecvBuffer -_0800F370: .4byte gBattleTypeFlags -_0800F374: - ldr r0, _0800F3B0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0x8 -_0800F37A: - orrs r1, r2 - strh r1, [r0] - adds r4, 0x1 -_0800F380: - cmp r4, 0 - bne _0800F41C - movs r2, 0 - ldr r1, _0800F3B4 @ =gBlockRecvBuffer - adds r5, r1, 0 - movs r3, 0x80 - lsls r3, 1 -_0800F38E: - adds r1, r3 - adds r2, 0x1 - cmp r2, 0x3 - bgt _0800F39E - ldrh r0, [r5] - ldrh r7, [r1] - cmp r0, r7 - beq _0800F38E -_0800F39E: - cmp r2, 0x4 - bne _0800F3C4 - cmp r6, 0 - bne _0800F3B8 - ldr r0, _0800F3B0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0xC - b _0800F3BE - .align 2, 0 -_0800F3B0: .4byte gBattleTypeFlags -_0800F3B4: .4byte gBlockRecvBuffer -_0800F3B8: - ldr r0, _0800F408 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r2, 0x8 -_0800F3BE: - orrs r1, r2 - strh r1, [r0] - adds r4, 0x1 -_0800F3C4: - cmp r4, 0 - bne _0800F41C - ldr r0, _0800F40C @ =gBlockRecvBuffer - ldrh r2, [r0] - ldr r1, _0800F410 @ =0x00000101 - adds r3, r0, 0 - ldr r5, _0800F408 @ =gBattleTypeFlags - cmp r2, r1 - beq _0800F3F6 -_0800F3D6: - lsls r0, r4, 8 - adds r0, r3 - ldrh r0, [r0] - ldr r1, _0800F410 @ =0x00000101 - cmp r0, r1 - bls _0800F3E6 - cmp r4, r6 - bne _0800F3FE -_0800F3E6: - adds r4, 0x1 - cmp r4, 0x3 - bgt _0800F3FE - lsls r0, r4, 8 - adds r0, r3 - ldrh r0, [r0] - cmp r0, r1 - bne _0800F3D6 -_0800F3F6: - cmp r4, r6 - beq _0800F3D6 - cmp r4, r6 - bge _0800F3D6 -_0800F3FE: - cmp r4, 0x4 - bne _0800F414 - ldrh r0, [r5] - movs r1, 0xC - b _0800F418 - .align 2, 0 -_0800F408: .4byte gBattleTypeFlags -_0800F40C: .4byte gBlockRecvBuffer -_0800F410: .4byte 0x00000101 -_0800F414: - ldrh r0, [r5] - movs r1, 0x8 -_0800F418: - orrs r0, r1 - strh r0, [r5] -_0800F41C: - bl sub_800EB08 - ldr r0, _0800F474 @ =0x0201d000 - ldr r1, _0800F478 @ =gPlayerParty - movs r2, 0x96 - lsls r2, 1 - bl memcpy - ldr r0, _0800F47C @ =sub_800DE30 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0800F480 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r1, 0xA] - movs r0, 0x5A - strh r0, [r1, 0xC] - strh r2, [r1, 0x12] - strh r2, [r1, 0xE] - strh r2, [r1, 0x10] - adds r2, r1, 0 - ldr r0, _0800F484 @ =gBlockRecvBuffer - adds r3, r0, 0x2 - ldr r6, _0800F488 @ =gLinkPlayers - movs r5, 0x3F - movs r7, 0x80 - lsls r7, 1 - movs r4, 0x3 -_0800F464: - ldrh r0, [r6, 0x18] - cmp r0, 0x1 - beq _0800F49E - cmp r0, 0x1 - bgt _0800F48C - cmp r0, 0 - beq _0800F496 - b _0800F4C4 - .align 2, 0 -_0800F474: .4byte 0x0201d000 -_0800F478: .4byte gPlayerParty -_0800F47C: .4byte sub_800DE30 -_0800F480: .4byte gTasks -_0800F484: .4byte gBlockRecvBuffer -_0800F488: .4byte gLinkPlayers -_0800F48C: - cmp r0, 0x2 - beq _0800F4A6 - cmp r0, 0x3 - beq _0800F4B6 - b _0800F4C4 -_0800F496: - ldrh r0, [r3] - adds r1, r5, 0 - ands r1, r0 - b _0800F4AE -_0800F49E: - ldrh r0, [r3] - adds r1, r5, 0 - ands r1, r0 - b _0800F4BE -_0800F4A6: - ldrh r0, [r3] - adds r1, r5, 0 - ands r1, r0 - lsls r1, 6 -_0800F4AE: - ldrh r0, [r2, 0xE] - orrs r1, r0 - strh r1, [r2, 0xE] - b _0800F4C4 -_0800F4B6: - ldrh r0, [r3] - adds r1, r5, 0 - ands r1, r0 - lsls r1, 6 -_0800F4BE: - ldrh r0, [r2, 0x10] - orrs r1, r0 - strh r1, [r2, 0x10] -_0800F4C4: - adds r3, r7 - adds r6, 0x1C - subs r4, 0x1 - cmp r4, 0 - bge _0800F464 - bl ZeroPlayerPartyMons - bl ZeroEnemyPartyMons - ldr r1, _0800F4FC @ =gUnknown_02024D1E - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0800F4DE: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800F4EA - b _0800F7E0 -_0800F4EA: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800F500 @ =0x0201d000 - movs r2, 0xC8 - bl SendBlock - b _0800F770 - .align 2, 0 -_0800F4FC: .4byte gUnknown_02024D1E -_0800F500: .4byte 0x0201d000 -_0800F504: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _0800F512 - b _0800F7E0 -_0800F512: - bl ResetBlockReceivedFlags - movs r4, 0 - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - mov r8, r0 - ldr r5, _0800F53C @ =gBlockRecvBuffer - movs r7, 0 -_0800F524: - cmp r4, r6 - bne _0800F558 - ldr r0, _0800F540 @ =gLinkPlayers - adds r0, r7, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _0800F544 - cmp r0, 0x1 - bge _0800F550 - cmp r0, 0 - beq _0800F548 - b _0800F5E2 - .align 2, 0 -_0800F53C: .4byte gBlockRecvBuffer -_0800F540: .4byte gLinkPlayers -_0800F544: - cmp r0, 0x3 - bne _0800F5E2 -_0800F548: - ldr r0, _0800F54C @ =gPlayerParty - b _0800F5C8 - .align 2, 0 -_0800F54C: .4byte gPlayerParty -_0800F550: - ldr r0, _0800F554 @ =gPlayerParty + 3 * 0x64 - b _0800F5C8 - .align 2, 0 -_0800F554: .4byte gPlayerParty + 3 * 0x64 -_0800F558: - ldr r2, _0800F578 @ =gLinkPlayers - adds r0, r7, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0800F57C - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F58A - b _0800F5B0 - .align 2, 0 -_0800F578: .4byte gLinkPlayers -_0800F57C: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F5B0 -_0800F58A: - adds r0, r7, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _0800F59C - cmp r2, 0x1 - bge _0800F5A8 - cmp r2, 0 - beq _0800F5A0 - b _0800F5E2 -_0800F59C: - cmp r2, 0x3 - bne _0800F5E2 -_0800F5A0: - ldr r0, _0800F5A4 @ =gPlayerParty - b _0800F5C8 - .align 2, 0 -_0800F5A4: .4byte gPlayerParty -_0800F5A8: - ldr r0, _0800F5AC @ =gPlayerParty + 3 * 0x64 - b _0800F5C8 - .align 2, 0 -_0800F5AC: .4byte gPlayerParty + 3 * 0x64 -_0800F5B0: - adds r0, r7, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _0800F5C2 - cmp r2, 0x1 - bge _0800F5D8 - cmp r2, 0 - beq _0800F5C6 - b _0800F5E2 -_0800F5C2: - cmp r2, 0x3 - bne _0800F5E2 -_0800F5C6: - ldr r0, _0800F5D4 @ =gEnemyParty -_0800F5C8: - adds r1, r5, 0 - movs r2, 0xC8 - bl memcpy - b _0800F5E2 - .align 2, 0 -_0800F5D4: .4byte gEnemyParty -_0800F5D8: - ldr r0, _0800F5F4 @ =gEnemyParty + 3 * 0x64 - adds r1, r5, 0 - movs r2, 0xC8 - bl memcpy -_0800F5E2: - movs r0, 0x80 - lsls r0, 1 - adds r5, r0 - adds r7, 0x1C - adds r4, 0x1 - cmp r4, 0x3 - ble _0800F524 - b _0800F770 - .align 2, 0 -_0800F5F4: .4byte gEnemyParty + 3 * 0x64 -_0800F5F8: - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - bne _0800F604 - b _0800F7E0 -_0800F604: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800F618 @ =0x0201d0c8 - movs r2, 0x64 - bl SendBlock - b _0800F770 - .align 2, 0 -_0800F618: .4byte 0x0201d0c8 -_0800F61C: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _0800F62A - b _0800F7E0 -_0800F62A: - bl ResetBlockReceivedFlags - movs r4, 0 - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - mov r8, r0 - ldr r5, _0800F654 @ =gBlockRecvBuffer - movs r7, 0 -_0800F63C: - cmp r4, r6 - bne _0800F670 - ldr r0, _0800F658 @ =gLinkPlayers - adds r0, r7, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _0800F65C - cmp r0, 0x1 - bge _0800F668 - cmp r0, 0 - beq _0800F660 - b _0800F6FA - .align 2, 0 -_0800F654: .4byte gBlockRecvBuffer -_0800F658: .4byte gLinkPlayers -_0800F65C: - cmp r0, 0x3 - bne _0800F6FA -_0800F660: - ldr r0, _0800F664 @ =gPlayerParty + 2 * 0x64 - b _0800F6E0 - .align 2, 0 -_0800F664: .4byte gPlayerParty + 2 * 0x64 -_0800F668: - ldr r0, _0800F66C @ =gPlayerParty + 5 * 0x64 - b _0800F6E0 - .align 2, 0 -_0800F66C: .4byte gPlayerParty + 5 * 0x64 -_0800F670: - ldr r2, _0800F690 @ =gLinkPlayers - adds r0, r7, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0800F694 - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F6A2 - b _0800F6C8 - .align 2, 0 -_0800F690: .4byte gLinkPlayers -_0800F694: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800F6C8 -_0800F6A2: - adds r0, r7, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _0800F6B4 - cmp r2, 0x1 - bge _0800F6C0 - cmp r2, 0 - beq _0800F6B8 - b _0800F6FA -_0800F6B4: - cmp r2, 0x3 - bne _0800F6FA -_0800F6B8: - ldr r0, _0800F6BC @ =gPlayerParty + 2 * 0x64 - b _0800F6E0 - .align 2, 0 -_0800F6BC: .4byte gPlayerParty + 2 * 0x64 -_0800F6C0: - ldr r0, _0800F6C4 @ =gPlayerParty + 5 * 0x64 - b _0800F6E0 - .align 2, 0 -_0800F6C4: .4byte gPlayerParty + 5 * 0x64 -_0800F6C8: - adds r0, r7, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _0800F6DA - cmp r2, 0x1 - bge _0800F6F0 - cmp r2, 0 - beq _0800F6DE - b _0800F6FA -_0800F6DA: - cmp r2, 0x3 - bne _0800F6FA -_0800F6DE: - ldr r0, _0800F6EC @ =gEnemyParty + 2 * 0x64 -_0800F6E0: - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - b _0800F6FA - .align 2, 0 -_0800F6EC: .4byte gEnemyParty + 2 * 0x64 -_0800F6F0: - ldr r0, _0800F77C @ =gEnemyParty + 5 * 0x64 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy -_0800F6FA: - movs r0, 0x80 - lsls r0, 1 - adds r5, r0 - adds r7, 0x1C - adds r4, 0x1 - cmp r4, 0x3 - ble _0800F63C - ldr r4, _0800F780 @ =gPlayerParty - adds r0, r4, 0 - bl shedinja_something - adds r0, r4, 0 - adds r0, 0x64 - bl shedinja_something - adds r0, r4, 0 - adds r0, 0xC8 - bl shedinja_something - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, r1 - bl shedinja_something - movs r7, 0xC8 - lsls r7, 1 - adds r0, r4, r7 - bl shedinja_something - movs r1, 0xFA - lsls r1, 1 - adds r0, r4, r1 - bl shedinja_something - ldr r4, _0800F784 @ =gEnemyParty - adds r0, r4, 0 - bl shedinja_something - adds r0, r4, 0 - adds r0, 0x64 - bl shedinja_something - adds r0, r4, 0 - adds r0, 0xC8 - bl shedinja_something - subs r7, 0x64 - adds r0, r4, r7 - bl shedinja_something - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, r1 - bl shedinja_something - adds r7, 0xC8 - adds r0, r4, r7 - bl shedinja_something -_0800F770: - ldr r1, _0800F788 @ =gUnknown_02024D1E - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0800F7E0 - .align 2, 0 -_0800F77C: .4byte gEnemyParty + 5 * 0x64 -_0800F780: .4byte gPlayerParty -_0800F784: .4byte gEnemyParty -_0800F788: .4byte gUnknown_02024D1E -_0800F78C: - bl sub_800B950 - ldr r0, _0800F7A0 @ =gUnknown_02024D1E - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _0800F7E0 - .align 2, 0 -_0800F7A0: .4byte gUnknown_02024D1E -_0800F7A4: - ldr r0, _0800F7EC @ =gUnknown_02024D1F - adds r1, r0, 0x1 - bl battle_load_something - lsls r0, 24 - cmp r0, 0 - beq _0800F7E0 - ldr r2, _0800F7F0 @ =gUnknown_030042D0 - ldr r1, _0800F7F4 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _0800F7F8 @ =sub_8010824 - str r0, [r1] - ldr r0, _0800F7FC @ =sub_800F808 - bl SetMainCallback2 - ldr r3, _0800F800 @ =gBattleTypeFlags - ldrh r2, [r3] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _0800F7E0 - ldr r1, _0800F804 @ =gTrainerBattleOpponent - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - strh r0, [r1] - movs r0, 0x20 - orrs r0, r2 - strh r0, [r3] -_0800F7E0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F7EC: .4byte gUnknown_02024D1F -_0800F7F0: .4byte gUnknown_030042D0 -_0800F7F4: .4byte gMain -_0800F7F8: .4byte sub_8010824 -_0800F7FC: .4byte sub_800F808 -_0800F800: .4byte gBattleTypeFlags -_0800F804: .4byte gTrainerBattleOpponent - thumb_func_end sub_800F298 - - thumb_func_start sub_800F808 -sub_800F808: @ 800F808 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0800F824 @ =gUnknown_03004210 - bl sub_800374C - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - .align 2, 0 -_0800F824: .4byte gUnknown_03004210 - thumb_func_end sub_800F808 - - thumb_func_start sub_800F828 -sub_800F828: @ 800F828 - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r1, _0800F834 @ =sub_800F838 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0800F834: .4byte sub_800F838 - thumb_func_end sub_800F828 - - thumb_func_start sub_800F838 -sub_800F838: @ 800F838 - push {r4,r5,lr} - adds r3, r0, 0 - ldr r5, _0800F850 @ =0x02000000 - movs r0, 0x2E - ldrsh r1, [r3, r0] - cmp r1, 0x1 - beq _0800F86C - cmp r1, 0x1 - bgt _0800F854 - cmp r1, 0 - beq _0800F85A - b _0800F8DC - .align 2, 0 -_0800F850: .4byte 0x02000000 -_0800F854: - cmp r1, 0x2 - beq _0800F8C8 - b _0800F8DC -_0800F85A: - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - strh r1, [r3, 0x30] - ldr r0, _0800F8C4 @ =0x00000281 - strh r0, [r3, 0x32] - strh r1, [r3, 0x34] - movs r0, 0x1 - strh r0, [r3, 0x36] -_0800F86C: - ldrh r0, [r3, 0x36] - subs r0, 0x1 - strh r0, [r3, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _0800F8DC - movs r0, 0x2 - strh r0, [r3, 0x36] - movs r4, 0x30 - ldrsh r2, [r3, r4] - movs r0, 0x34 - ldrsh r1, [r3, r0] - lsls r1, 5 - adds r2, r1 - movs r4, 0x32 - ldrsh r0, [r3, r4] - subs r0, r1 - movs r4, 0x3D - lsls r0, 1 - adds r0, r5 - lsls r2, 1 - adds r2, r5 - movs r1, 0x1C -_0800F89A: - strh r4, [r2] - strh r4, [r0] - adds r0, 0x4 - adds r2, 0x4 - subs r1, 0x2 - cmp r1, 0 - bge _0800F89A - ldrh r0, [r3, 0x34] - adds r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _0800F8DC - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - movs r0, 0x20 - strh r0, [r3, 0x30] - b _0800F8DC - .align 2, 0 -_0800F8C4: .4byte 0x00000281 -_0800F8C8: - ldrh r0, [r3, 0x30] - subs r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _0800F8DC - ldr r0, _0800F8E4 @ =sub_800E7C4 - bl SetMainCallback2 -_0800F8DC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800F8E4: .4byte sub_800E7C4 - thumb_func_end sub_800F838 - - thumb_func_start sub_800F8E8 -sub_800F8E8: @ 800F8E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r0, [sp, 0x10] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x14] - movs r0, 0 - mov r9, r0 - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _0800F90C - movs r0, 0 - b _0800FCB4 -_0800F90C: - ldr r0, _0800F93C @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0800F940 @ =0x00000908 - ands r0, r1 - ldr r1, [sp, 0x14] - lsls r1, 2 - str r1, [sp, 0x20] - cmp r0, 0x8 - beq _0800F920 - b _0800FCA4 -_0800F920: - bl ZeroEnemyPartyMons - movs r2, 0 - str r2, [sp, 0x18] - ldr r2, _0800F944 @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 - ldr r4, [sp, 0x18] - b _0800FC86 - .align 2, 0 -_0800F93C: .4byte gBattleTypeFlags -_0800F940: .4byte 0x00000908 -_0800F944: .4byte gTrainers -_0800F948: - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r1, r0, r2 - ldrb r0, [r1, 0x18] - cmp r0, 0x1 - bne _0800F95C - movs r4, 0x80 - mov r10, r4 - b _0800F96E -_0800F95C: - ldrb r1, [r1, 0x2] - movs r0, 0x80 - ands r0, r1 - movs r1, 0x88 - mov r10, r1 - cmp r0, 0 - beq _0800F96E - movs r2, 0x78 - mov r10, r2 -_0800F96E: - movs r6, 0 - ldr r0, _0800F9C4 @ =gTrainers - ldr r2, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r1, r2, r3 - lsls r1, 3 - adds r3, r0, 0x4 - adds r1, r3 - ldrb r1, [r1] - adds r4, r0, 0 - ldr r0, [sp, 0x18] - adds r0, 0x1 - str r0, [sp, 0x1C] - cmp r1, 0xFF - beq _0800F9A6 -_0800F98C: - ldr r0, [sp, 0x14] - adds r1, r2, r0 - lsls r1, 3 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0800F98C -_0800F9A6: - adds r2, r4, 0 - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r1, r0, 3 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0800FA5C - cmp r0, 0x1 - bgt _0800F9C8 - cmp r0, 0 - beq _0800F9D6 - b _0800FC74 - .align 2, 0 -_0800F9C4: .4byte gTrainers -_0800F9C8: - cmp r0, 0x2 - bne _0800F9CE - b _0800FB1C -_0800F9CE: - cmp r0, 0x3 - bne _0800F9D4 - b _0800FBB0 -_0800F9D4: - b _0800FC74 -_0800F9D6: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0800FA58 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _0800FA18 - adds r3, r1, 0 - movs r7, 0xB -_0800F9FC: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0800F9FC -_0800FA18: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r4, r5, r4 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r1, 0x64 - adds r0, r3, 0 - muls r0, r1 - ldr r2, [sp, 0x10] - adds r0, r2, r0 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r3, 0x1 - str r3, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r3, 0x2 - str r3, [sp, 0x8] - movs r3, 0 - str r3, [sp, 0xC] - adds r3, r6, 0 - bl CreateMon - b _0800FC74 - .align 2, 0 -_0800FA58: .4byte gSpeciesNames -_0800FA5C: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0800FB14 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _0800FA9E - adds r3, r1, 0 - movs r4, 0xB -_0800FA82: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0800FA82 -_0800FA9E: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r4, r3, r7 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r5, r0, 0 - muls r5, r1 - ldr r2, [sp, 0x10] - adds r5, r2, r5 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r5, 0 - adds r3, r6, 0 - bl CreateMon - movs r6, 0 - mov r0, r8 - adds r0, 0x6 - adds r4, r7, r0 -_0800FAE8: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _0800FB18 @ =gBattleMoves + 0x4 @ PP offset - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0800FAE8 - b _0800FC74 - .align 2, 0 -_0800FB14: .4byte gSpeciesNames -_0800FB18: .4byte gBattleMoves + 0x4 @ PP offset -_0800FB1C: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0800FBAC @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _0800FB5E - adds r3, r1, 0 - movs r7, 0xB -_0800FB42: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0800FB42 -_0800FB5E: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r5, r4 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r0, 0x64 - adds r4, r3, 0 - muls r4, r0 - ldr r1, [sp, 0x10] - adds r4, r1, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - b _0800FC74 - .align 2, 0 -_0800FBAC: .4byte gSpeciesNames -_0800FBB0: - adds r0, r4, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0800FCC4 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _0800FBF2 - adds r3, r1, 0 - movs r4, 0xB -_0800FBD6: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0800FBD6 -_0800FBF2: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r5, r3, r7 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r4, r0, 0 - muls r4, r1 - ldr r2, [sp, 0x10] - adds r4, r2, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - movs r6, 0 - adds r5, r4, 0 - mov r0, r8 - adds r0, 0x8 - adds r4, r7, r0 -_0800FC4A: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _0800FCC8 @ =gBattleMoves + 0x4 @ PP offset - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0800FC4A -_0800FC74: - ldr r4, [sp, 0x1C] - str r4, [sp, 0x18] - ldr r2, _0800FCCC @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 -_0800FC86: - ldrb r0, [r0] - cmp r4, r0 - bge _0800FC8E - b _0800F948 -_0800FC8E: - ldr r2, _0800FCD0 @ =gBattleTypeFlags - ldr r1, _0800FCCC @ =gTrainers - ldr r4, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r4, r3 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x18] - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r2] -_0800FCA4: - ldr r0, _0800FCCC @ =gTrainers - ldr r4, [sp, 0x20] - ldr r2, [sp, 0x14] - adds r1, r4, r2 - lsls r1, 3 - adds r1, r0 - adds r1, 0x20 - ldrb r0, [r1] -_0800FCB4: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0800FCC4: .4byte gSpeciesNames -_0800FCC8: .4byte gBattleMoves + 0x4 @ PP offset -_0800FCCC: .4byte gTrainers -_0800FCD0: .4byte gBattleTypeFlags - thumb_func_end sub_800F8E8 - thumb_func_start sub_800FCD4 sub_800FCD4: @ 800FCD4 push {lr} diff --git a/asm/cable_club.s b/asm/cable_club.s index 4c9dca6af..bd7a2bd5c 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -464,413 +464,15 @@ _08083034: .4byte gTasks _08083038: .4byte sub_808303C thumb_func_end sub_8082FEC - thumb_func_start sub_808303C -sub_808303C: @ 808303C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r8, r0 - ldr r0, _080830D0 @ =gTasks + 0x8 - mov r9, r0 - mov r7, r8 - add r7, r9 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _080830C2 - adds r0, r4, 0 - bl sub_8082EB8 - cmp r0, 0x1 - beq _080830C2 - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _080830C2 - adds r6, r5, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_8082D60 - ldr r0, _080830D4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080830C2 - movs r1, 0x2 - ldrsh r0, [r7, r1] - cmp r5, r0 - blt _080830C2 - adds r0, r6, 0 - bl sub_80081C8 - bl sub_8082D4C - ldr r0, _080830D8 @ =gStringVar1 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - ldr r0, _080830DC @ =gUnknown_081A4975 - bl ShowFieldAutoScrollMessage - mov r0, r9 - subs r0, 0x8 - add r0, r8 - ldr r1, _080830E0 @ =sub_80830E4 - str r1, [r0] -_080830C2: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080830D0: .4byte gTasks + 0x8 -_080830D4: .4byte gMain -_080830D8: .4byte gStringVar1 -_080830DC: .4byte gUnknown_081A4975 -_080830E0: .4byte sub_80830E4 - thumb_func_end sub_808303C +.section .text_80830E4 + + + - thumb_func_start sub_80830E4 -sub_80830E4: @ 80830E4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - adds r0, r5, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _08083178 - adds r0, r5, 0 - bl sub_8082EB8 - cmp r0, 0x1 - beq _08083178 - adds r0, r5, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _08083178 - bl GetFieldMessageBoxMode - lsls r0, 24 - cmp r0, 0 - bne _08083178 - bl sub_800820C - adds r4, r0, 0 - bl GetLinkPlayerCount_2 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _08083132 - ldr r0, _08083148 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08083158 -_08083132: - ldr r0, _0808314C @ =gUnknown_081A4932 - bl ShowFieldAutoScrollMessage - ldr r1, _08083150 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08083154 @ =sub_8082FEC - str r1, [r0] - b _08083178 - .align 2, 0 -_08083148: .4byte gMain -_0808314C: .4byte gUnknown_081A4932 -_08083150: .4byte gTasks -_08083154: .4byte sub_8082FEC -_08083158: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08083178 - movs r0, 0x5 - bl PlaySE - bl sub_8007F4C - ldr r0, _08083180 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08083184 @ =sub_8083188 - str r0, [r1] -_08083178: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08083180: .4byte gTasks -_08083184: .4byte sub_8083188 - thumb_func_end sub_80830E4 - thumb_func_start sub_8083188 -sub_8083188: @ 8083188 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080831CC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r5, r0, r1 - ldrb r7, [r5, 0xA] - ldrb r6, [r5, 0xC] - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _080831EA - adds r0, r4, 0 - bl sub_8083444 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080831EA - bl GetLinkPlayerCount_2 - adds r4, r0, 0 - bl sub_800820C - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080831D4 - ldr r0, _080831D0 @ =sub_8083418 - b _080831E8 - .align 2, 0 -_080831CC: .4byte gTasks -_080831D0: .4byte sub_8083418 -_080831D4: - ldr r4, _080831F0 @ =gScriptResult - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8082D9C - strh r0, [r4] - lsls r0, 16 - cmp r0, 0 - beq _080831EA - ldr r0, _080831F4 @ =sub_8083288 -_080831E8: - str r0, [r5] -_080831EA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080831F0: .4byte gScriptResult -_080831F4: .4byte sub_8083288 - thumb_func_end sub_8083188 - thumb_func_start sub_80831F8 -sub_80831F8: @ 80831F8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _08083244 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r5, r0, r1 - ldrb r7, [r5, 0xA] - ldrb r6, [r5, 0xC] - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _08083270 - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _08083270 - ldr r4, _08083248 @ =gScriptResult - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8082D9C - strh r0, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _08083270 - cmp r0, 0x3 - bne _08083250 - bl sub_800832C - bl HideFieldMessageBox - ldr r0, _0808324C @ =sub_80833C4 - b _0808326E - .align 2, 0 -_08083244: .4byte gTasks -_08083248: .4byte gScriptResult -_0808324C: .4byte sub_80833C4 -_08083250: - bl GetLinkPlayerCount_2 - ldr r4, _08083278 @ =gFieldLinkPlayerCount - strb r0, [r4] - bl GetMultiplayerId - ldr r1, _0808327C @ =gUnknown_03004860 - strb r0, [r1] - ldrb r0, [r4] - bl sub_80081C8 - ldr r0, _08083280 @ =gBlockSendBuffer - bl sub_8093390 - ldr r0, _08083284 @ =sub_8083314 -_0808326E: - str r0, [r5] -_08083270: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08083278: .4byte gFieldLinkPlayerCount -_0808327C: .4byte gUnknown_03004860 -_08083280: .4byte gBlockSendBuffer -_08083284: .4byte sub_8083314 - thumb_func_end sub_80831F8 - thumb_func_start sub_8083288 -sub_8083288: @ 8083288 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _080832F8 - ldr r0, _080832BC @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0x3 - bne _080832C8 - bl sub_800832C - bl HideFieldMessageBox - ldr r0, _080832C0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080832C4 @ =sub_80833C4 - str r0, [r1] - b _080832F8 - .align 2, 0 -_080832BC: .4byte gScriptResult -_080832C0: .4byte gTasks -_080832C4: .4byte sub_80833C4 -_080832C8: - bl GetLinkPlayerCount_2 - ldr r4, _08083300 @ =gFieldLinkPlayerCount - strb r0, [r4] - bl GetMultiplayerId - ldr r1, _08083304 @ =gUnknown_03004860 - strb r0, [r1] - ldrb r0, [r4] - bl sub_80081C8 - ldr r0, _08083308 @ =gBlockSendBuffer - bl sub_8093390 - ldr r1, _0808330C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08083310 @ =sub_8083314 - str r1, [r0] - movs r0, 0x2 - bl sub_8007E9C -_080832F8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083300: .4byte gFieldLinkPlayerCount -_08083304: .4byte gUnknown_03004860 -_08083308: .4byte gBlockSendBuffer -_0808330C: .4byte gTasks -_08083310: .4byte sub_8083314 - thumb_func_end sub_8083288 - thumb_func_start sub_8083314 -sub_8083314: @ 8083314 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _080833B6 - bl GetBlockReceivedStatus - adds r4, r0, 0 - bl sub_8008198 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080833B6 - movs r4, 0 - ldr r6, _0808333C @ =gTrainerCards - b _0808335A - .align 2, 0 -_0808333C: .4byte gTrainerCards -_08083340: - lsls r1, r4, 8 - ldr r0, _08083394 @ =gBlockRecvBuffer - adds r1, r0 - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 3 - adds r0, r6 - movs r2, 0x38 - bl memcpy - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_0808335A: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08083340 - movs r0, 0 - bl SetSuppressLinkErrorMessage - bl ResetBlockReceivedFlags - bl HideFieldMessageBox - ldr r0, _08083398 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0x1 - bne _080833A4 - ldr r0, _0808339C @ =gLinkType - ldrh r1, [r0] - ldr r0, _080833A0 @ =0x00004411 - bl sub_8082D4C - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask - b _080833B6 - .align 2, 0 -_08083394: .4byte gBlockRecvBuffer -_08083398: .4byte gScriptResult -_0808339C: .4byte gLinkType -_080833A0: .4byte 0x00004411 -_080833A4: - bl sub_800832C - ldr r0, _080833BC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080833C0 @ =sub_80833C4 - str r0, [r1] -_080833B6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080833BC: .4byte gTasks -_080833C0: .4byte sub_80833C4 - thumb_func_end sub_8083314 thumb_func_start sub_80833C4 sub_80833C4: @ 80833C4 diff --git a/asm/field_specials.s b/asm/field_specials.s index 269f45a33..63677b6a0 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -3695,8 +3695,8 @@ _0810F612: bx r1 thumb_func_end sub_810F5BC - thumb_func_start sub_810F618 -sub_810F618: @ 810F618 + thumb_func_start SetShoalItemFlag +SetShoalItemFlag: @ 810F618 push {lr} ldr r0, _0810F624 @ =0x0000085f bl FlagSet @@ -3704,7 +3704,7 @@ sub_810F618: @ 810F618 bx r0 .align 2, 0 _0810F624: .4byte 0x0000085f - thumb_func_end sub_810F618 + thumb_func_end SetShoalItemFlag thumb_func_start PutZigzagoonInPlayerParty PutZigzagoonInPlayerParty: @ 810F628 diff --git a/asm/field_weather.s b/asm/field_weather.s index 01190c75e..92d2ffab2 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -7537,8 +7537,8 @@ _0808082E: bx r1 thumb_func_end TranslateWeatherNum - thumb_func_start sub_8080834 -sub_8080834: @ 8080834 + thumb_func_start UpdateWeatherPerDay +UpdateWeatherPerDay: @ 8080834 lsls r0, 16 ldr r2, _08080850 @ =gSaveBlock1 adds r2, 0x2F @@ -7554,7 +7554,7 @@ sub_8080834: @ 8080834 bx lr .align 2, 0 _08080850: .4byte gSaveBlock1 - thumb_func_end sub_8080834 + thumb_func_end UpdateWeatherPerDay thumb_func_start UpdateRainCounter UpdateRainCounter: @ 8080854 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index cc82a2f8c..176a42124 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5891,196 +5891,7 @@ _08098892: bx r1 thumb_func_end sub_8098830 - thumb_func_start sub_8098898 -sub_8098898: @ 8098898 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0xA - movs r1, 0x10 - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r1, _080988C4 @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - bls _080988B8 - b _080989F4 -_080988B8: - lsls r0, 2 - ldr r1, _080988C8 @ =_080988CC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080988C4: .4byte gUnknown_083B6DF4 -_080988C8: .4byte _080988CC - .align 2, 0 -_080988CC: - .4byte _080989F4 - .4byte _08098930 - .4byte _080988E8 - .4byte _08098974 - .4byte _08098954 - .4byte _08098910 - .4byte _080989B8 -_080988E8: - ldr r4, _08098904 @ =0x02002694 - ldr r1, _08098908 @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - adds r2, r0, 0 - ldr r0, _0809890C @ =0xffffeb66 - adds r4, r0 - adds r0, r2, 0 - adds r1, r4, 0 - b _080989FE - .align 2, 0 -_08098904: .4byte 0x02002694 -_08098908: .4byte gUnknown_083B6DF4 -_0809890C: .4byte 0xffffeb66 -_08098910: - ldr r4, _08098928 @ =0x02002694 - ldr r1, _0809892C @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - adds r2, r0, 0 - adds r4, 0x50 - adds r1, r4, 0 - b _080989FE - .align 2, 0 -_08098928: .4byte 0x02002694 -_0809892C: .4byte gUnknown_083B6DF4 -_08098930: - ldr r0, _08098948 @ =0x02002694 - ldr r2, _0809894C @ =0xffffeb66 - adds r1, r0, r2 - bl StringCopy - adds r2, r0, 0 - ldr r1, _08098950 @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - b _080989FE - .align 2, 0 -_08098948: .4byte 0x02002694 -_0809894C: .4byte 0xffffeb66 -_08098950: .4byte gUnknown_083B6DF4 -_08098954: - ldr r0, _0809896C @ =0x02002694 - adds r1, r0, 0 - adds r1, 0x50 - bl StringCopy - adds r2, r0, 0 - ldr r1, _08098970 @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - b _080989FE - .align 2, 0 -_0809896C: .4byte 0x02002694 -_08098970: .4byte gUnknown_083B6DF4 -_08098974: - ldr r1, _080989AC @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r6, [r0] - adds r0, r6, 0 - bl StringLength - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r4, r6, r4 - adds r4, 0x1 - ldr r5, _080989B0 @ =0x02002694 - adds r0, r5, 0 - adds r1, r6, 0 - bl StringCopy - adds r2, r0, 0 - ldr r0, _080989B4 @ =0xffffeb66 - adds r5, r0 - adds r0, r2, 0 - adds r1, r5, 0 - bl StringCopy - adds r2, r0, 0 - adds r1, r4, 0 - b _080989FE - .align 2, 0 -_080989AC: .4byte gUnknown_083B6DF4 -_080989B0: .4byte 0x02002694 -_080989B4: .4byte 0xffffeb66 -_080989B8: - ldr r1, _080989EC @ =gUnknown_083B6DF4 - lsls r0, r5, 3 - adds r0, r1 - ldr r6, [r0] - adds r0, r6, 0 - bl StringLength - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r4, r6, r4 - subs r4, 0x1 - ldr r5, _080989F0 @ =0x02002694 - adds r0, r5, 0 - adds r1, r6, 0 - bl StringCopy - adds r2, r0, 0 - subs r0, r2, 0x1 - adds r5, 0x50 - adds r1, r5, 0 - bl StringCopy - adds r2, r0, 0 - adds r1, r4, 0 - b _080989FE - .align 2, 0 -_080989EC: .4byte gUnknown_083B6DF4 -_080989F0: .4byte 0x02002694 -_080989F4: - ldr r0, _08098A2C @ =0x02002694 - ldr r2, _08098A30 @ =gUnknown_083B6DF4 - lsls r1, r5, 3 - adds r1, r2 - ldr r1, [r1] -_080989FE: - bl StringCopy - adds r2, r0, 0 - ldr r0, _08098A34 @ =0x020026a6 - adds r3, r0, 0 - subs r3, 0x12 - cmp r2, r0 - bcs _08098A18 - movs r1, 0 -_08098A10: - strb r1, [r2] - adds r2, 0x1 - cmp r2, r0 - bcc _08098A10 -_08098A18: - movs r0, 0xFF - strb r0, [r2] - adds r0, r3, 0 - movs r1, 0xB - movs r2, 0x11 - bl MenuPrint - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098A2C: .4byte 0x02002694 -_08098A30: .4byte gUnknown_083B6DF4 -_08098A34: .4byte 0x020026a6 - thumb_func_end sub_8098898 +.section .text_8098A38 thumb_func_start sub_8098A38 sub_8098A38: @ 8098A38 diff --git a/asm/pokenav.s b/asm/pokenav.s index 966285ab3..757a2a5a2 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -22849,67 +22849,7 @@ sub_80F6FFC: @ 80F6FFC _080F7008: .4byte REG_BLDCNT thumb_func_end sub_80F6FFC - thumb_func_start sub_80F700C -sub_80F700C: @ 80F700C - push {r4,r5,lr} - lsls r1, 16 - lsrs r1, 16 - ldr r2, _080F7078 @ =gUnknown_083DFEC4 - ldr r4, [r2] - lsls r2, r1, 3 - adds r2, r4, r2 - ldr r3, _080F707C @ =0x0000cee8 - adds r2, r3 - ldrh r3, [r2] - lsls r2, r3, 2 - adds r2, r3 - lsls r2, 3 - ldr r3, _080F7080 @ =gTrainers - adds r5, r2, r3 - adds r3, r0, 0 - ldr r0, _080F7084 @ =0x0000d158 - adds r4, r0 - ldrh r4, [r4] - cmp r1, r4 - bcs _080F7060 - ldrb r1, [r5, 0x1] - movs r0, 0xD - muls r1, r0 - ldr r0, _080F7088 @ =gTrainerClassNames - adds r1, r0 - adds r0, r3, 0 - bl StringCopy - adds r3, r0, 0 - movs r0, 0xFC - strb r0, [r3] - movs r0, 0x13 - strb r0, [r3, 0x1] - movs r0, 0x4B - strb r0, [r3, 0x2] - adds r3, 0x3 - adds r1, r5, 0x4 - adds r0, r3, 0 - bl StringCopy - adds r3, r0, 0 -_080F7060: - movs r0, 0xFC - strb r0, [r3] - movs r0, 0x13 - strb r0, [r3, 0x1] - movs r0, 0x80 - strb r0, [r3, 0x2] - movs r0, 0xFF - strb r0, [r3, 0x3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F7078: .4byte gUnknown_083DFEC4 -_080F707C: .4byte 0x0000cee8 -_080F7080: .4byte gTrainers -_080F7084: .4byte 0x0000d158 -_080F7088: .4byte gTrainerClassNames - thumb_func_end sub_80F700C +.section .text_80F708C thumb_func_start sub_80F708C sub_80F708C: @ 80F708C diff --git a/asm/secret_base.s b/asm/secret_base.s index 89ddc879f..81225ba4b 100644 --- a/asm/secret_base.s +++ b/asm/secret_base.s @@ -1701,37 +1701,7 @@ _080BC18A: bx r1 thumb_func_end sub_80BC14C - thumb_func_start sub_80BC190 -sub_80BC190: @ 80BC190 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r4, r1, 2 - adds r4, r1 - lsls r4, 5 - ldr r0, _080BC1C8 @ =gSaveBlock1 + 0x1A0A - adds r4, r0 - adds r0, r4, 0 - bl sub_80BB8A8 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl StringCopyN - movs r1, 0xFF - strb r1, [r0] - ldr r1, _080BC1CC @ =gOtherText_PlayersBase - adds r0, r5, 0 - bl StringAppend - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080BC1C8: .4byte gSaveBlock1 + 0x1A0A -_080BC1CC: .4byte gOtherText_PlayersBase - thumb_func_end sub_80BC190 +.section .text_80BC1D0 thumb_func_start GetSecretBaseMapName GetSecretBaseMapName: @ 80BC1D0 diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 32abb287d..46af5bc0f 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -7048,72 +7048,7 @@ _08104CA4: .4byte gTasks _08104CA8: .4byte 0x0000ffff thumb_func_end sub_8104C5C - thumb_func_start sub_8104CAC -sub_8104CAC: @ 8104CAC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8104DA4 - ldr r0, _08104D24 @ =0x02000000 - adds r0, 0x3D - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104D28 @ =gTasks - adds r7, r0, r1 - strh r4, [r7, 0xA] - movs r6, 0 - ldr r1, _08104D2C @ =gUnknown_083ED048 - lsls r5, r4, 2 - adds r0, r5, r1 - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - beq _08104D18 - mov r8, r1 -_08104CE0: - mov r0, r8 - adds r4, r5, r0 - ldr r0, [r4] - lsls r2, r6, 2 - adds r2, r0 - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - movs r3, 0x2 - ldrsh r2, [r2, r3] - bl sub_8105BB4 - lsls r0, 24 - lsrs r0, 24 - adds r2, r6, 0x4 - lsls r2, 1 - adds r1, r7, 0 - adds r1, 0x8 - adds r1, r2 - strh r0, [r1] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, [r4] - lsls r0, r6, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08104CE0 -_08104D18: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08104D24: .4byte 0x02000000 -_08104D28: .4byte gTasks -_08104D2C: .4byte gUnknown_083ED048 - thumb_func_end sub_8104CAC +.section .text_8104D30 thumb_func_start sub_8104D30 sub_8104D30: @ 8104D30 @@ -10221,249 +10156,4 @@ _08106440: .4byte gUnknown_083EDCDC _08106444: .4byte gUnknown_083EDCE4 thumb_func_end sub_8106404 - thumb_func_start sub_8106448 -sub_8106448: @ 8106448 - push {r4-r7,lr} - ldr r0, _081064A0 @ =gSlotMachine_Gfx - ldr r4, _081064A4 @ =0x02010000 - adds r1, r4, 0 - bl sub_800D238 - movs r3, 0xC0 - lsls r3, 19 - movs r5, 0xE9 - lsls r5, 5 - ldr r1, _081064A8 @ =0x040000d4 - ldr r6, _081064AC @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08106468: - str r4, [r1] - str r3, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r4, r2 - adds r3, r2 - subs r5, r2 - cmp r5, r2 - bhi _08106468 - str r4, [r1] - str r3, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _081064B0 @ =gUnknown_08E95A18 - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - ldr r0, _081064B4 @ =gPalette_83EDE24 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081064A0: .4byte gSlotMachine_Gfx -_081064A4: .4byte 0x02010000 -_081064A8: .4byte 0x040000d4 -_081064AC: .4byte 0x80000800 -_081064B0: .4byte gUnknown_08E95A18 -_081064B4: .4byte gPalette_83EDE24 - thumb_func_end sub_8106448 - - thumb_func_start sub_81064B8 -sub_81064B8: @ 81064B8 - push {lr} - ldr r0, _081064D0 @ =gUnknown_08E95AB8 - ldr r1, _081064D4 @ =0x0600e800 - movs r2, 0xA0 - lsls r2, 2 - bl CpuSet - bl sub_81064D8 - pop {r0} - bx r0 - .align 2, 0 -_081064D0: .4byte gUnknown_08E95AB8 -_081064D4: .4byte 0x0600e800 - thumb_func_end sub_81064B8 - - thumb_func_start sub_81064D8 -sub_81064D8: @ 81064D8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r6, _0810658C @ =0x0600f000 - movs r3, 0x4 - movs r0, 0xC0 - lsls r0, 1 - mov r12, r0 - movs r1, 0xC0 - lsls r1, 2 - mov r9, r1 - movs r2, 0xA0 - lsls r2, 1 - mov r8, r2 -_081064F6: - movs r0, 0 - lsls r4, r3, 16 - asrs r5, r4, 16 -_081064FC: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r5, r2 - lsls r1, 1 - adds r1, r6 - mov r7, r8 - adds r3, r1, r7 - ldr r7, _08106590 @ =0x00002051 - adds r0, r7, 0 - strh r0, [r3] - movs r0, 0xD0 - lsls r0, 2 - adds r3, r1, r0 - ldr r7, _08106594 @ =0x00002851 - adds r0, r7, 0 - strh r0, [r3] - mov r0, r12 - adds r3, r1, r0 - ldr r7, _08106598 @ =0x00002061 - adds r0, r7, 0 - strh r0, [r3] - add r1, r9 - ldr r3, _0810659C @ =0x00002861 - adds r0, r3, 0 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x3 - ble _081064FC - asrs r3, r4, 16 - lsls r1, r3, 1 - adds r1, r6 - mov r5, r12 - adds r2, r1, r5 - adds r7, 0x5D - adds r0, r7, 0 - strh r0, [r2] - add r1, r9 - ldr r2, _081065A0 @ =0x000028be - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x7 - ldr r5, _081065A4 @ =0x000020bf - adds r2, r5, 0 -_08106558: - lsls r1, r0, 16 - asrs r1, 16 - lsls r0, r1, 5 - adds r0, r3 - lsls r0, 1 - adds r0, r6 - strh r2, [r0] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - asrs r1, 16 - cmp r1, 0xB - ble _08106558 - movs r7, 0xA0 - lsls r7, 11 - adds r0, r4, r7 - lsrs r3, r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _081064F6 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810658C: .4byte 0x0600f000 -_08106590: .4byte 0x00002051 -_08106594: .4byte 0x00002851 -_08106598: .4byte 0x00002061 -_0810659C: .4byte 0x00002861 -_081065A0: .4byte 0x000028be -_081065A4: .4byte 0x000020bf - thumb_func_end sub_81064D8 - - thumb_func_start sub_81065A8 -sub_81065A8: @ 81065A8 - push {r4-r6,lr} - ldr r5, [sp, 0x10] - lsls r0, 16 - asrs r0, 15 - ldr r6, _081065D0 @ =0x0600ebc0 - adds r4, r0, r6 - strh r1, [r4] - ldr r4, _081065D4 @ =0x0600ebc2 - adds r1, r0, r4 - strh r2, [r1] - adds r6, 0x40 - adds r1, r0, r6 - strh r3, [r1] - ldr r1, _081065D8 @ =0x0600ec02 - adds r0, r1 - strh r5, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081065D0: .4byte 0x0600ebc0 -_081065D4: .4byte 0x0600ebc2 -_081065D8: .4byte 0x0600ec02 - thumb_func_end sub_81065A8 - - thumb_func_start sub_81065DC -sub_81065DC: @ 81065DC - push {r4,r5,lr} - ldr r0, _08106624 @ =gUnknown_08E95FB8 - ldr r1, _08106628 @ =0x0600e800 - movs r2, 0xA0 - lsls r2, 2 - bl CpuSet - ldr r5, _0810662C @ =0x0600f000 - movs r1, 0 - movs r4, 0 -_081065F0: - movs r0, 0 - lsls r3, r1, 16 - asrs r2, r3, 11 -_081065F6: - lsls r1, r0, 16 - asrs r1, 16 - adds r0, r2, r1 - lsls r0, 1 - adds r0, r5 - strh r4, [r0] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - asrs r1, 16 - cmp r1, 0x1D - ble _081065F6 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _081065F0 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08106624: .4byte gUnknown_08E95FB8 -_08106628: .4byte 0x0600e800 -_0810662C: .4byte 0x0600f000 - thumb_func_end sub_81065DC - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle.h b/include/battle.h index 8f7141803..f05c7369d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -7,7 +7,7 @@ #define BATTLE_TYPE_TRAINER 0x0008 #define BATTLE_TYPE_FIRST_BATTLE 0x0010 #define BATTLE_TYPE_20 0x0020 -#define BATTLE_TYPE_40 0x0040 +#define BATTLE_TYPE_MULTI 0x0040 #define BATTLE_TYPE_SAFARI 0x0080 #define BATTLE_TYPE_BATTLE_TOWER 0x0100 #define BATTLE_TYPE_WALLY_TUTORIAL 0x0200 diff --git a/include/berry.h b/include/berry.h index 0013b4dba..f0acbe0ad 100644 --- a/include/berry.h +++ b/include/berry.h @@ -22,7 +22,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void); bool8 TryToWaterBerryTree(void); void ClearBerryTrees(void); bool32 BerryTreeGrow(struct BerryTree *tree); -void BerryTreeTimeUpdate(int time); +void BerryTreeTimeUpdate(s32 minutes); void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle); void RemoveBerryTree(u8 id); u8 GetBerryTypeByBerryTreeId(u8 id); diff --git a/include/dewford_trend.h b/include/dewford_trend.h index af1b61363..a37de3389 100644 --- a/include/dewford_trend.h +++ b/include/dewford_trend.h @@ -4,7 +4,7 @@ #define ARRAY_2007800 ((struct EasyChatPair *)(unk_2000000 + 0x7800)) #define ARRAY_2007900 ((struct EasyChatPair *)(unk_2000000 + 0x7900)) -void InitDewfordTrends(void); +void InitDewfordTrend(void); void sub_80FA4E4(void *, u32, u8); #endif diff --git a/include/flags.h b/include/flags.h index 0c0cebc5f..56325dea6 100644 --- a/include/flags.h +++ b/include/flags.h @@ -51,6 +51,7 @@ #define SYS_BRAILLE_WAIT 0x851 #define SYS_BRAILLE_FLY 0x852 +#define SYS_SHOAL_ITEM 0x85F #define SYS_B_DASH 0x860 // got Running Shoes #define SYS_CTRL_OBJ_DELETE 0x861 #define SYS_RESET_RTC_ENABLE 0x862 diff --git a/include/global.berry.h b/include/global.berry.h index b7938868d..6632e55e2 100644 --- a/include/global.berry.h +++ b/include/global.berry.h @@ -34,10 +34,10 @@ struct EnigmaBerry struct BattleEnigmaBerry { - u8 name[7]; - u8 holdEffect; - u8 itemEffect[18]; - u8 holdEffectParam; + /*0x00*/ u8 name[7]; + /*0x07*/ u8 holdEffect; + /*0x08*/ u8 itemEffect[18]; + /*0x1A*/ u8 holdEffectParam; }; struct BerryTree @@ -45,7 +45,7 @@ struct BerryTree u8 berry; u8 stage:7; u8 growthSparkle:1; - u16 secondsUntilNextStage; + u16 minutesUntilNextStage; u8 berryYield; u8 regrowthCount:4; u8 watered1:1; diff --git a/include/link.h b/include/link.h index f88cf8f5a..eb6f642bc 100644 --- a/include/link.h +++ b/include/link.h @@ -124,8 +124,10 @@ struct Link extern struct Link gLink; extern u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]; +extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; extern u16 gLinkType; extern u32 gLinkStatus; +extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; extern struct LinkPlayer gLinkPlayers[]; diff --git a/ld_script.txt b/ld_script.txt index bc820c4d3..0cc6ef0f0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -51,6 +51,7 @@ SECTIONS { asm/battle_1.o(.text); src/rom_800D42C.o(.text); asm/battle_1.o(.text_800DC24); + src/battle_2.o(.text); asm/battle_2.o(.text); asm/battle_3.o(.text); asm/battle_4.o(.text); @@ -130,6 +131,8 @@ SECTIONS { asm/field_screen_effect.o(.text); src/battle_setup.o(.text); asm/cable_club.o(.text); + src/cable_club.o(.text); + asm/cable_club.o(.text_80830E4); src/mori_debug_menu.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); @@ -146,6 +149,8 @@ SECTIONS { asm/rom_8094928.o(.text); src/battle_party_menu.o(.text); asm/pokemon_storage_system.o(.text); + src/pokemon_storage_system.o(.text); + asm/pokemon_storage_system.o(.text_8098A38); asm/pokemon_icon.o(.text); asm/pokemon_summary_screen.o(.text); src/pokemon_summary_screen.o(.text); @@ -170,6 +175,8 @@ SECTIONS { asm/record_mixing.o(.text); asm/sound_check_menu.o(.text); asm/secret_base.o(.text); + src/secret_base.o(.text); + asm/secret_base.o(.text_80BC1D0); asm/tv.o(.text); src/tv.o(.text); asm/tv.o(.text_80BE8EC); @@ -193,6 +200,8 @@ SECTIONS { asm/easy_chat.o(.text); src/easy_chat.o(.text); asm/pokenav.o(.text); + src/pokenav.o(.text); + asm/pokenav.o(.text_80F708C); asm/mon_markings.o(.text); src/mauville_old_man.o(.text); asm/mauville_old_man.o(.text); @@ -207,6 +216,9 @@ SECTIONS { src/decoration.o(.text); asm/decoration.o(.text_80FE868); asm/slot_machine.o(.text); + src/slot_machine.o(.text); + asm/slot_machine.o(.text_8104D30) + src/slot_machine.o(.text_b); src/contest_painting.o(.text); src/battle_ai.o(.text); asm/trader.o(.text); diff --git a/src/battle_2.c b/src/battle_2.c new file mode 100644 index 000000000..a9f0fd57a --- /dev/null +++ b/src/battle_2.c @@ -0,0 +1,977 @@ +#include "global.h" +#include "battle.h" +#include "main.h" +#include "text.h" +#include "palette.h" +#include "sprite.h" +#include "task.h" +#include "pokemon.h" +#include "species.h" +#include "link.h" +#include "name_string_util.h" +#include "battle_setup.h" + +struct UnknownStruct5 +{ + u32 unk0; + u32 unk4; + u32 unk8; +}; + +struct UnknownStruct6 +{ + u16 unk0[0xA0]; + u8 fillerA0[0x640]; + u16 unk780[0xA0]; +}; + +struct UnknownStruct7 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +}; + +struct UnknownStruct8 +{ + u8 unk0[7]; + u8 unk7; + u8 unk8[18]; + u8 unk1A; +}; + +struct UnknownPokemonStruct2 +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + +extern const struct UnknownStruct5 gUnknown_081F9674; +extern const u8 gUnknown_081F96C8[]; +extern const struct Trainer gTrainers[]; +extern const u8 gSpeciesNames[][11]; +extern const struct BattleMove gBattleMoves[]; + +extern u8 ewram[]; +#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) +#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) +#define ewram160CB (ewram[0x160CB]) +#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) + +extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern u8 gUnknown_02024D1E[]; +extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern struct Window gUnknown_030041D0; +extern struct Window gUnknown_03004210; +extern struct Window gUnknown_03004250; +extern u16 gUnknown_03004240; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030042C4; +extern MainCallback gUnknown_030042D0; +extern struct UnknownStruct6 gUnknown_03004DE0; +//extern u16 gUnknown_03004DE0[][0xA0]; // possibly? +extern u16 gBattleTypeFlags; +extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of GetBattleTerrain. +extern u8 gReservedSpritePaletteCount; +extern u16 gTrainerBattleOpponent; +extern struct BattleEnigmaBerry gEnigmaBerries[]; +extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; + +extern void sub_800B858(void); +extern void dp12_8087EA4(void); +extern void sub_80895F8(); +extern void sub_800D6D4(); +extern void sub_800DAB8(); +extern void sub_800E23C(); +extern void setup_poochyena_battle(); +extern void SetWildMonHeldItem(void); +extern void AdjustFriendship(struct Pokemon *, u8); +extern void sub_800DE30(u8); +extern void sub_800B950(void); +extern u8 battle_load_something(); +extern void OpenPartyMenu(); + +void sub_800E7F8(void); +void sub_800EC9C(void); +void sub_800F104(void); +void sub_800F298(void); +void sub_800F808(void); +void sub_800F838(struct Sprite *); +u8 CreateNPCTrainerParty(struct Pokemon *, u16); +void sub_800FCFC(void); +void sub_8010824(void); + +void sub_800E7C4(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + sub_800B858(); + SetMainCallback2(sub_800F104); + gUnknown_02024D1E[0] = 0; + } + else + { + sub_800E7F8(); + } +} + +void sub_800E7F8(void) +{ + s32 i; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + + REG_MOSAIC = 0; + REG_WIN0H = 0xF0; + REG_WIN0V = 0x5051; + REG_WININ = 0; + REG_WINOUT = 0; + gUnknown_030042C4 = 0xF0; + gUnknown_03004240 = 0x5051; + dp12_8087EA4(); + + for (i = 0; i < 80; i++) + { + gUnknown_03004DE0.unk0[i] = 0xF0; + gUnknown_03004DE0.unk780[i] = 0xF0; + } + for (i = 80; i < 160; i++) + { + asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter + gUnknown_03004DE0.unk0[i] = 0xFF10; + gUnknown_03004DE0.unk780[i] = 0xFF10; + } + sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + gBattleTerrain = GetBattleTerrain(); + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); + InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + sub_800D6D4(); + sub_800DAB8(); + ResetSpriteData(); + ResetTasks(); + sub_800E23C(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(sub_800FCFC); + setup_poochyena_battle(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + SetMainCallback2(sub_800F298); + else + SetMainCallback2(sub_800EC9C); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent); + SetWildMonHeldItem(); + } + gMain.inBattle = TRUE; + for (i = 0; i < 6; i++) + AdjustFriendship(&gPlayerParty[i], 3); + gUnknown_02024D1E[0] = 0; +} + +void sub_800E9EC(void) +{ + u16 r6 = 0; + u16 species; + u16 hp; + u32 status; + s32 i; + + for (i = 0; i < 6; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r6 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r6 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r6 |= 3 << i * 2; + } + ewram0.unk2 = r6; + ewram0.unk3 = r6 >> 8; +} + +void sub_800EAAC(void) +{ + s32 i; + struct UnknownStruct8 *_ewram4 = &ewram4; + + for (i = 0; i < 7; i++) + _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + for (i = 0; i < 18; i++) + _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect; + _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam; +} + +void sub_800EB08(void) +{ + s32 i; + s32 j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + for (i = 0; i < 7; i++) + { + gEnigmaBerries[0].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + gEnigmaBerries[2].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + } + for (i = 0; i < 18; i++) + { + gEnigmaBerries[0].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + gEnigmaBerries[2].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + } + gEnigmaBerries[0].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + gEnigmaBerries[2].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + gEnigmaBerries[0].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; + gEnigmaBerries[2].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; + } + else + { + s32 numPlayers; + struct BattleEnigmaBerry *src; + u8 r4; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + numPlayers = 4; + else + numPlayers = 2; + for (i = 0; i < numPlayers; i++) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + r4 = gLinkPlayers[i].lp_field_18; + + for (j = 0; j < 7; j++) + gEnigmaBerries[r4].name[j] = src->name[j]; + for (j = 0; j < 18; j++) + gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[r4].holdEffect = src->holdEffect; + gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam; + } + } +} + +void shedinja_something(struct Pokemon *pkmn) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 language = 1; + + if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA + && GetMonData(pkmn, MON_DATA_LANGUAGE) != language) + { + GetMonData(pkmn, MON_DATA_NICKNAME, nickname); + if (StringCompareWithoutExtCtrlCodes(nickname, gUnknown_081F96C8) == 0) + SetMonData(pkmn, MON_DATA_LANGUAGE, &language); + } +} + +void sub_800EC9C(void) +{ + u8 playerId; + u8 enemyId; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + playerId = GetMultiplayerId(); + ewram160CB = playerId; + enemyId = playerId ^ 1; + + switch (gUnknown_02024D1E[0]) + { + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + ewram0.unk0 = 1; + ewram0.unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32); + gUnknown_02024D1E[0] = 1; + } + } + else + { + gBattleTypeFlags |= BATTLE_TYPE_WILD; + gUnknown_02024D1E[0] = 8; + sub_800EB08(); + } + break; + case 1: + if ((GetBlockReceivedStatus() & 3) == 3) + { + s32 id; + u8 taskId; + + ResetBlockReceivedFlags(); + id = 0; + if (gBlockRecvBuffer[0][0] == 0x100) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0]) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + while (id < 2) + { + if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) + break; + id++; + } + if (id == 2) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + } + } + sub_800EB08(); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8); + gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; + gUnknown_02024D1E[0]++; + } + break; + case 2: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 3: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 4: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 5: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 6: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 7: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + shedinja_something(&gEnemyParty[0]); + shedinja_something(&gEnemyParty[1]); + shedinja_something(&gEnemyParty[2]); + shedinja_something(&gEnemyParty[3]); + shedinja_something(&gEnemyParty[4]); + shedinja_something(&gEnemyParty[5]); + gUnknown_02024D1E[0]++; + } + break; + case 8: + sub_800B950(); + gUnknown_02024D1E[0]++; + gUnknown_02024D1E[1] = 0; + gUnknown_02024D1E[2] = 0; + break; + case 9: + if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + { + gUnknown_030042D0 = gMain.callback1; + gMain.callback1 = sub_8010824; + SetMainCallback2(sub_800F808); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTrainerBattleOpponent = 0x800; + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + } +} + +void sub_800F02C(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + u8 *nickname = gUnknown_02023A00[i].nickname; + + gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); + gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname); + gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]); + StripExtCtrlCodes(nickname); + gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE); + if (gUnknown_02023A00[i].language != 1) + PadNameString(nickname, 0); + } + memcpy(ewram, gUnknown_02023A00, 0x60); +} + +void sub_800F104(void) +{ + u8 playerId; + MainCallback *pSavedCallback; + u16 *pSavedBattleTypeFlags; + + playerId = GetMultiplayerId(); + ewram160CB = playerId; + // Seriously, Game Freak? + pSavedCallback = (MainCallback *)(ewram + 0x160C4); + pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + + switch (gUnknown_02024D1E[0]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + sub_800F02C(); + SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60); + gUnknown_02024D1E[0]++; + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + s32 i; + + ResetBlockReceivedFlags(); + for (i = 0; i < 4; i++) + { + if (i != playerId) + { + if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60); + } + } + gUnknown_02024D1E[0]++; + *pSavedCallback = gMain.savedCallback; + *pSavedBattleTypeFlags = gBattleTypeFlags; + gMain.savedCallback = sub_800F104; + OpenPartyMenu(5, 0); + } + break; + case 2: + if (!gPaletteFade.active) + { + gUnknown_02024D1E[0] = 3; + sub_800832C(); + } + break; + case 3: + if (gReceivedRemoteLinkPlayers == 0) + { + gBattleTypeFlags = *pSavedBattleTypeFlags; + gMain.savedCallback = *pSavedCallback; + SetMainCallback2(sub_800E7F8); + } + break; + } +} + +void sub_800F298(void) +{ + u8 playerId; + s32 id; + + playerId = GetMultiplayerId(); + ewram160CB = playerId; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gUnknown_02024D1E[0]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + ewram0.unk0 = 1; + ewram0.unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); + gUnknown_02024D1E[0]++; + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + u8 taskId; + + ResetBlockReceivedFlags(); + id = 0; + if (gBlockRecvBuffer[0][0] == 0x100) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + s32 i; + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + break; + } + if (i == MAX_LINK_PLAYERS) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + while (id < MAX_LINK_PLAYERS) + { + if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId) + if (id < playerId) + break; + if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) + break; + id++; + } + if (id == MAX_LINK_PLAYERS) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + } + } + sub_800EB08(); + memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 1: + gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 2: + gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + case 3: + gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + } + } + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + gUnknown_02024D1E[0]++; + goto step_2; + } + break; + case 2: + step_2: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 3: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + if (id == playerId) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + } + } + gUnknown_02024D1E[0]++; + } + break; + case 4: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); + gUnknown_02024D1E[0]++; + } + break; + case 5: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + if (id == playerId) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + } + } + + shedinja_something(&gPlayerParty[0]); + shedinja_something(&gPlayerParty[1]); + shedinja_something(&gPlayerParty[2]); + shedinja_something(&gPlayerParty[3]); + shedinja_something(&gPlayerParty[4]); + shedinja_something(&gPlayerParty[5]); + + shedinja_something(&gEnemyParty[0]); + shedinja_something(&gEnemyParty[1]); + shedinja_something(&gEnemyParty[2]); + shedinja_something(&gEnemyParty[3]); + shedinja_something(&gEnemyParty[4]); + shedinja_something(&gEnemyParty[5]); + + gUnknown_02024D1E[0]++; + } + break; + case 6: + sub_800B950(); + gUnknown_02024D1E[0]++; + gUnknown_02024D1E[1] = 0; + gUnknown_02024D1E[2] = 0; + break; + case 7: + if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + { + gUnknown_030042D0 = gMain.callback1; + gMain.callback1 = sub_8010824; + SetMainCallback2(sub_800F808); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTrainerBattleOpponent = 0x800; + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + } +} + +void sub_800F808(void) +{ + AnimateSprites(); + BuildOamBuffer(); + sub_800374C(&gUnknown_03004210); + UpdatePaletteFade(); + RunTasks(); +} + +void sub_800F828(struct Sprite *sprite) +{ + sprite->data0 = 0; + sprite->callback = sub_800F838; +} + +void sub_800F838(struct Sprite *sprite) +{ + u16 *arr = (u16 *)ewram; + + switch (sprite->data0) + { + case 0: + sprite->data0++; + sprite->data1 = 0; + sprite->data2 = 0x281; + sprite->data3 = 0; + sprite->data4 = 1; + // fall through + case 1: + sprite->data4--; + if (sprite->data4 == 0) + { + s32 i; + s32 r2; + s32 r0; + + sprite->data4 = 2; + r2 = sprite->data1 + sprite->data3 * 32; + r0 = sprite->data2 - sprite->data3 * 32; + for (i = 0; i < 29; i += 2) + { + arr[r2 + i] = 0x3D; + arr[r0 + i] = 0x3D; + } + sprite->data3++; + if (sprite->data3 == 21) + { + sprite->data0++; + sprite->data1 = 32; + } + } + break; + case 2: + sprite->data1--; + if (sprite->data1 == 20) + SetMainCallback2(sub_800E7C4); + break; + } +} + +u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) +{ + u32 nameHash = 0; + s32 i; + + if (trainerNum == 0x400) + return 0; + + if ((gBattleTypeFlags & 0x908) == 8) + { + ZeroEnemyPartyMons(); + for (i = 0; i < gTrainers[trainerNum].partySize; i++) + { + u32 personalityValue; + s32 j; + u8 fixedIV; + + if (gTrainers[trainerNum].doubleBattle == TRUE) + personalityValue = 0x80; + else if (gTrainers[trainerNum].encounterMusic_gender & 0x80) + personalityValue = 0x78; + else + personalityValue = 0x88; + + for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++) + nameHash += gTrainers[trainerNum].trainerName[j]; + + switch (gTrainers[trainerNum].partyFlags) + { + case 0: + { + struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + break; + } + case 1: + { + struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + for (j = 0; j < 4; j++) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case 2: + { + struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + break; + } + case 3: + { + struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + for (j = 0; j < 4; j++) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + } + } + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return gTrainers[trainerNum].partySize; +}
\ No newline at end of file diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 4d66910ba..328b45f49 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -69,7 +69,6 @@ extern void c3_0802FDF4(u8); extern void sub_8031F88(); extern void sub_8141828(); extern void c2_8011A1C(void); -extern void sub_800832C(); extern void dp01_prepare_buffer_wireless_probably(); extern void dp01_build_cmdbuf_x1D_1D_numargs_varargs(int, u16, void *); diff --git a/src/battle_anim.c b/src/battle_anim.c index b9aa5b898..bdb34365f 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -65,7 +65,6 @@ extern u8 sub_8078874(u8); extern void sub_8078914(); extern u8 sub_80AEB1C(); extern void sub_80E4EF8(int, int, int, int, u16, u8, int); -extern void sub_800D238(); extern u8 sub_80789BC(); extern void sub_80AB2AC(void); extern void sub_800D7B8(void); diff --git a/src/battle_interface.c b/src/battle_interface.c index d097598b5..9938c4b54 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1498,7 +1498,7 @@ u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d) { for (i = 0; i < 6; i++) //_08044A9A { - if (gBattleTypeFlags & BATTLE_TYPE_40) // && b[i] != 0xFFFF && b[i] + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) // && b[i] != 0xFFFF && b[i] { if (b[i].unk0 == 0xFFFF) { @@ -1546,7 +1546,7 @@ u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d) // Mismatch occurrs in this loop initialization for (i = 0; i < 6; i++) { - if (gBattleTypeFlags & BATTLE_TYPE_40) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (b[i].unk0 == 0xFFFF) { diff --git a/src/berry.c b/src/berry.c index 6c12af053..257248e5c 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1130,7 +1130,7 @@ bool32 BerryTreeGrow(struct BerryTree *tree) return TRUE; } -void BerryTreeTimeUpdate(int time) +void BerryTreeTimeUpdate(s32 minutes) { int i; struct BerryTree *tree; @@ -1141,27 +1141,27 @@ void BerryTreeTimeUpdate(int time) if (tree->berry && tree->stage && !tree->growthSparkle) { - if (time >= GetStageDurationByBerryType(tree->berry) * 71) + if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) { *tree = gBlankBerryTree; } else { - int time2 = time; + s32 time = minutes; - while (time2 != 0) + while (time != 0) { - if (tree->secondsUntilNextStage > time2) + if (tree->minutesUntilNextStage > time) { - tree->secondsUntilNextStage -= time2; + tree->minutesUntilNextStage -= time; break; } - time2 -= tree->secondsUntilNextStage; - tree->secondsUntilNextStage = GetStageDurationByBerryType(tree->berry); + time -= tree->minutesUntilNextStage; + tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); if (!BerryTreeGrow(tree)) break; if (tree->stage == 5) - tree->secondsUntilNextStage *= 4; + tree->minutesUntilNextStage *= 4; } } } @@ -1174,12 +1174,12 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) *tree = gBlankBerryTree; tree->berry = berry; - tree->secondsUntilNextStage = GetStageDurationByBerryType(berry); + tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); tree->stage = stage; if (stage == 5) { tree->berryYield = CalcBerryYield(tree); - tree->secondsUntilNextStage *= 4; + tree->minutesUntilNextStage *= 4; } if (!sparkle) { diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 103f0a85e..511b88c5a 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -178,9 +178,9 @@ void BerryTagScreen_814625C(u8 taskId) static void sub_8146288(void) { - REG_BG1CNT = 0x502; - REG_BG2CNT = 0x600; - REG_BG3CNT = 0x703; + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; gUnknown_030041B4 = 0; } diff --git a/src/cable_club.c b/src/cable_club.c new file mode 100644 index 000000000..45fb347f3 --- /dev/null +++ b/src/cable_club.c @@ -0,0 +1,304 @@ +#include "global.h" +#include "asm.h" +#include "field_message_box.h" +#include "link.h" +#include "main.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trainer_card.h" + +extern u16 gScriptResult; +extern struct TrainerCard gTrainerCards[4]; + +extern u8 gUnknown_03004860; +extern u8 gFieldLinkPlayerCount; + +extern u8 gUnknown_081A4932[]; +extern const u8 gUnknown_081A4975[]; + +void sub_8082D4C(); +void sub_8082D60(u8, u8); +u16 sub_8082D9C(u8, u8); +u32 sub_8082DF4(u8); +u32 sub_8082E28(u8); +u32 sub_8082EB8(u8); +void sub_8082FEC(u8 taskId); +static void sub_80830E4(u8 taskId); +void sub_8083188(u8 taskId); +static void sub_8083288(u8 taskId); +static void sub_8083314(u8 taskId); +void sub_80833C4(u8 taskId); +void sub_8083418(u8 taskId); +u8 sub_8083444(u8 taskId); + +void sub_808303C(u8 taskId) { + s32 linkPlayerCount; + s16 *taskData; + + taskData = gTasks[taskId].data; + + linkPlayerCount = GetLinkPlayerCount_2(); + + if (sub_8082E28(taskId) == 1 || + sub_8082EB8(taskId) == 1 || + sub_8082DF4(taskId) == 1) + { + return; + } + + sub_8082D60(taskId, linkPlayerCount); + + if (!(gMain.newKeys & A_BUTTON)) + { + return; + } + + if (linkPlayerCount < taskData[1]) + { + return; + } + + sub_80081C8(linkPlayerCount); + sub_8082D4C(); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 + ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + gTasks[taskId].func = sub_80830E4; +} + +#ifdef NONMATCHING +static void sub_80830E4(u8 taskId) { + if (sub_8082E28(taskId) == 1 || + sub_8082EB8(taskId) == 1 || + sub_8082DF4(taskId) == 1 || + GetFieldMessageBoxMode()) + { + return; + } + + if (sub_800820C() == GetLinkPlayerCount_2() && + !(gMain.heldKeys & B_BUTTON)) + { + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + return; + } + + if (gMain.heldKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8007F4C(); + gTasks[(u32) taskId].func = sub_8083188; + } +} +#else +__attribute__((naked)) +static void sub_80830E4(u8 taskId) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + adds r6, r5, 0\n\ + adds r0, r5, 0\n\ + bl sub_8082E28\n\ + cmp r0, 0x1\n\ + beq _08083178\n\ + adds r0, r5, 0\n\ + bl sub_8082EB8\n\ + cmp r0, 0x1\n\ + beq _08083178\n\ + adds r0, r5, 0\n\ + bl sub_8082DF4\n\ + cmp r0, 0x1\n\ + beq _08083178\n\ + bl GetFieldMessageBoxMode\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08083178\n\ + bl sub_800820C\n\ + adds r4, r0, 0\n\ + bl GetLinkPlayerCount_2\n\ + lsls r4, 24\n\ + lsls r0, 24\n\ + cmp r4, r0\n\ + bne _08083132\n\ + ldr r0, _08083148 @ =gMain\n\ + ldrh r1, [r0, 0x2C]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08083158\n\ +_08083132:\n\ + ldr r0, _0808314C @ =gUnknown_081A4932\n\ + bl ShowFieldAutoScrollMessage\n\ + ldr r1, _08083150 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _08083154 @ =sub_8082FEC\n\ + str r1, [r0]\n\ + b _08083178\n\ + .align 2, 0\n\ +_08083148: .4byte gMain\n\ +_0808314C: .4byte gUnknown_081A4932\n\ +_08083150: .4byte gTasks\n\ +_08083154: .4byte sub_8082FEC\n\ +_08083158:\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08083178\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + bl sub_8007F4C\n\ + ldr r0, _08083180 @ =gTasks\n\ + lsls r1, r6, 2\n\ + adds r1, r6\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _08083184 @ =sub_8083188\n\ + str r0, [r1]\n\ +_08083178:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08083180: .4byte gTasks\n\ +_08083184: .4byte sub_8083188\n\ + .syntax divided\n"); +} +#endif + +void sub_8083188(u8 taskId) { + u8 local1, local2; + u16 *result; + + local1 = gTasks[taskId].data[1]; + local2 = gTasks[taskId].data[2]; + + + if (sub_8082DF4(taskId) == 1 || + sub_8083444(taskId) == 1) + { + return; + } + + if (GetLinkPlayerCount_2() != sub_800820C()) + { + gTasks[taskId].func = sub_8083418; + return; + } + + result = &gScriptResult; + *result = sub_8082D9C(local1, local2); + if (*result) + { + gTasks[taskId].func = sub_8083288; + } +} + +void sub_80831F8(u8 taskId) { + u8 local1, local2; + u16 *result; + + local1 = gTasks[taskId].data[1]; + local2 = gTasks[taskId].data[2]; + + if (sub_8082E28(taskId) == 1 || + sub_8082DF4(taskId) == 1) + { + return; + } + + result = &gScriptResult; + *result = sub_8082D9C(local1, local2); + if (*result == 0) + { + return; + } + + + if (*result == 3) + { + sub_800832C(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_80833C4; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gUnknown_03004860 = GetMultiplayerId(); + sub_80081C8(gFieldLinkPlayerCount); + sub_8093390((struct TrainerCard *) gBlockSendBuffer); + gTasks[taskId].func = sub_8083314; + } +} + +static void sub_8083288(u8 taskId) { + if (sub_8082DF4(taskId) == 1) + { + return; + } + + if (gScriptResult == 3) + { + sub_800832C(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_80833C4; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gUnknown_03004860 = GetMultiplayerId(); + sub_80081C8(gFieldLinkPlayerCount); + sub_8093390((struct TrainerCard *) gBlockSendBuffer); + gTasks[taskId].func = sub_8083314; + sub_8007E9C(2); + } +} + +static void sub_8083314(u8 taskId) { + u8 index; + + struct TrainerCard *trainerCards; + + if (sub_8082DF4(taskId) == 1) + { + return; + } + + if (GetBlockReceivedStatus() != sub_8008198()) + { + return; + } + + index = 0; + trainerCards = gTrainerCards; + for (index = 0; index < GetLinkPlayerCount(); index++) + { + void *src; + src = gBlockRecvBuffer[index]; + memcpy(&trainerCards[index], src, sizeof(struct TrainerCard)); + } + + SetSuppressLinkErrorMessage(FALSE); + ResetBlockReceivedFlags(); + HideFieldMessageBox(); + + if (gScriptResult == 1) + { + u16 linkType; + linkType = gLinkType; + sub_8082D4C(0x00004411, linkType); + EnableBothScriptContexts(); + DestroyTask(taskId); + return; + } + + sub_800832C(); + gTasks[taskId].func = sub_80833C4; +} diff --git a/src/clear_save_data_menu.c b/src/clear_save_data_menu.c index 6b0cc821a..21cd643ef 100644 --- a/src/clear_save_data_menu.c +++ b/src/clear_save_data_menu.c @@ -41,7 +41,7 @@ static void Task_InitMenu(u8 taskId) { ResetSpriteData(); - REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; SetVBlankCallback(VBlankCB_ClearSaveDataScreen); MenuDrawTextWindow(2, 14, 27, 19); @@ -148,8 +148,8 @@ static u8 InitClearSaveDataScreen(void) SetVBlankCallback(VBlankCB_InitClearSaveDataScreen); - REG_BG3CNT = 0x0703; - REG_DISPCNT = 0x0900; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG3_ON; gMain.state = 1; return 0; case 1: diff --git a/src/clock.c b/src/clock.c index 4ec49807c..b263e99ae 100644 --- a/src/clock.c +++ b/src/clock.c @@ -8,17 +8,17 @@ #include "rtc.h" #include "wallclock.h" -extern void sub_80FA220(u16); -extern void sub_80BE8C4(u16); -extern void sub_8080834(u16); +extern void UpdateDewfordTrendPerDay(u16); +extern void UpdateTVShowsPerDay(u16); +extern void UpdateWeatherPerDay(u16); extern void UpdatePartyPokerusTime(u16); extern void UpdateMirageRnd(u16); extern void UpdateBirchState(u16); -extern void sub_810F618(u16); +extern void SetShoalItemFlag(u16); static void InitTimeBasedEvents(void); static void UpdatePerDay(struct Time *time); -static void UpdatePerSecond(struct Time *time); +static void UpdatePerMinute(struct Time *time); static void ReturnFromStartWallClock(void); static void InitTimeBasedEvents(void) @@ -35,7 +35,7 @@ void DoTimeBasedEvents(void) { RtcCalcLocalTime(); UpdatePerDay(&gLocalTime); - UpdatePerSecond(&gLocalTime); + UpdatePerMinute(&gLocalTime); } } @@ -49,32 +49,32 @@ static void UpdatePerDay(struct Time *time) { newDays = time->days - days; ClearUpperFlags(); - sub_80FA220(newDays); - sub_80BE8C4(newDays); - sub_8080834(newDays); + UpdateDewfordTrendPerDay(newDays); + UpdateTVShowsPerDay(newDays); + UpdateWeatherPerDay(newDays); UpdatePartyPokerusTime(newDays); UpdateMirageRnd(newDays); UpdateBirchState(newDays); - sub_810F618(newDays); + SetShoalItemFlag(newDays); SetRandomLotteryNumber(newDays); *varPtr = time->days; } } -static void UpdatePerSecond(struct Time *time) +static void UpdatePerMinute(struct Time *time) { struct Time newTime; - s32 totalSeconds; + s32 minutes; CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - totalSeconds = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; // there's no way to get the correct assembly other than with this nested if check. so dumb. - if (totalSeconds != 0) + if (minutes != 0) { - if (totalSeconds >= 0) + if (minutes >= 0) { - BerryTreeTimeUpdate(totalSeconds); + BerryTreeTimeUpdate(minutes); gSaveBlock2.lastBerryTreeUpdate = *time; } } diff --git a/src/contest_painting.c b/src/contest_painting.c index 08244597e..2ef50ee17 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -336,8 +336,8 @@ static void ContestPaintingInitBG(void) { REG_DISPCNT = 0; REG_IE |= INTR_FLAG_VBLANK; - REG_BG0CNT = 0x0C42; - REG_BG1CNT = 0x0A45; + REG_BG0CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; @@ -367,7 +367,7 @@ static void ContestPaintingMosaic(void) return; } - REG_BG1CNT = 0xA45; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; gUnknown_03000752 = gUnknown_03000754 / 2; REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); diff --git a/src/credits.c b/src/credits.c index 17d3507aa..01af78bce 100644 --- a/src/credits.c +++ b/src/credits.c @@ -474,8 +474,8 @@ void task_a_8143D04(u8 taskIdA) BeginNormalPaletteFade(-1, 0, 16, 0, 0); REG_BG3HOFS = 0; REG_BG3VOFS = 32; - REG_BG3CNT = 0x703; - REG_DISPCNT = 0x1940; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; gMain.state = 0; gUnknown_0203935C = 0; @@ -518,13 +518,13 @@ static void task_a_8143F3C(u8 taskIdA) FreeAllSpritePalettes(); BeginNormalPaletteFade(-1, 8, 16, 0, 0); - REG_BG0CNT = 0x700; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; backup = REG_IME; REG_IME = 0; REG_IE |= INTR_FLAG_VBLANK; REG_IME = backup; REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - REG_DISPCNT = 0x140; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; gTasks[taskIdA].data[TDA_0] = 0x100; gTasks[taskIdA].func = task_a_8143FDC; diff --git a/src/dewford_trend.c b/src/dewford_trend.c index fe9311655..e4ce0c0c7 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -19,7 +19,7 @@ static bool8 SB1ContainsWords(u16 *a); static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2); static s16 sub_80FA828(struct EasyChatPair *a, u16 b); -void InitDewfordTrends(void) +void InitDewfordTrend(void) { u16 i; @@ -38,244 +38,63 @@ void InitDewfordTrends(void) sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0); } -#ifdef NONMATCHING -void sub_80FA220(u16 a) +void UpdateDewfordTrendPerDay(u16 a) { u16 i; - u32 sp0; - u32 sp4; if (a != 0) { - sp0 = a * 5; + u32 sp0 = a * 5; for (i = 0; i < 5; i++) { //_080FA24A - u32 r2 = sp0; u32 r4; + u32 r2 = sp0; + struct EasyChatPair *r5 = &gSaveBlock1.easyChatPairs[i]; - if (gSaveBlock1.easyChatPairs[i].unk1_6 == 0) + if (r5->unk1_6 == 0) { - if (gSaveBlock1.easyChatPairs[i].unk0_0 >= r2) + if (r5->unk0_0 >= (u16)r2) { - gSaveBlock1.easyChatPairs[i].unk0_0 -= r2; - if (gSaveBlock1.easyChatPairs[i].unk0_0 == 0) - gSaveBlock1.easyChatPairs[i].unk1_6 = 1; + r5->unk0_0 -= r2; + if (r5->unk0_0 == 0) + r5->unk1_6 = 1; continue; } //_080FA290 - r2 -= gSaveBlock1.easyChatPairs[i].unk0_0; - gSaveBlock1.easyChatPairs[i].unk1_6 = 1; + r2 -= r5->unk0_0; + r5->unk0_0 = 0; + r5->unk1_6 = 1; } //_080FA2A0 - r4 = gSaveBlock1.easyChatPairs[i].unk0_0 + r2; - if (r4 > gSaveBlock1.easyChatPairs[i].unk0_7) + r4 = r5->unk0_0 + r2; + if ((u16)r4 > r5->unk0_7) { - sp4 = r4 % gSaveBlock1.easyChatPairs[i].unk0_7; - r4 = r4 / gSaveBlock1.easyChatPairs[i].unk0_7; + u32 sp4 = r4 % r5->unk0_7; + r4 = r4 / r5->unk0_7; - if (r4 == 0) - gSaveBlock1.easyChatPairs[i].unk1_6 = 1; + r5->unk1_6 = r4 ^ 1; + if (r5->unk1_6) + r5->unk0_0 = sp4; 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; + r5->unk0_0 = r5->unk0_7 - sp4; } - //_080FA310 - gSaveBlock1.easyChatPairs[i].unk0_0 = r4; + else + { + //_080FA310 + r5->unk0_0 = r4; - if (gSaveBlock1.easyChatPairs[i].unk0_0 == gSaveBlock1.easyChatPairs[i].unk0_7) - gSaveBlock1.easyChatPairs[i].unk1_6 = 0; + if (r5->unk0_0 == r5->unk0_7) + r5->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}; diff --git a/src/diploma.c b/src/diploma.c index 112647956..c32b72a70 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -87,7 +87,7 @@ void sub_8145D88(void) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG3CNT = 0x4603; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT512x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; CreateTask(Task_DiplomaFadeIn, 0); diff --git a/src/field_region_map.c b/src/field_region_map.c index db12eb6a5..ec630ad00 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -64,7 +64,7 @@ void CB2_FieldInitRegionMap(void) SetUpWindowConfig(&gWindowConfig_81E709C); InitMenuWindow(&gWindowConfig_81E709C); MenuZeroFillScreen(); - REG_BG0CNT = 7936; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; MenuDrawTextWindow(21, 0, 29, 3); sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38); MenuDrawTextWindow(16, 16, 29, 19); @@ -94,7 +94,7 @@ void sub_813EFDC(void) switch (unk_2000000.unk888) { case 0: - REG_DISPCNT = 5441; + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; unk_2000000.unk888++; break; case 1: diff --git a/src/link.c b/src/link.c index 336616f1a..224c0ae1c 100644 --- a/src/link.c +++ b/src/link.c @@ -207,13 +207,13 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB switch (bgNum) { case 1: - REG_BG1CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); break; case 2: - REG_BG2CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); break; case 3: - REG_BG3CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); break; } } @@ -255,7 +255,7 @@ void LinkTestScreen(void) } InitLinkTestBG(0, 2, 4, 0); - REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP; CreateTask(Task_DestroySelf, 0); RunTasks(); AnimateSprites(); diff --git a/src/mail.c b/src/mail.c index 9964f2a79..807864332 100644 --- a/src/mail.c +++ b/src/mail.c @@ -273,11 +273,11 @@ static u8 sub_80F8A28(void) RETURN_SKIP_STATE; case 18: - REG_BG0CNT = 0x9F08; - REG_BG1CNT = 0x0801; - REG_BG2CNT = 0x0902; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x512; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_BLDCNT = 0; - REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; BeginNormalPaletteFade(-1, 0, 16, 0, 0); gPaletteFade.bufferTransferDisabled = 0; ewram0.varF0 = sub_80F8F58; diff --git a/src/main_menu.c b/src/main_menu.c index 294d33620..50fefc471 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -250,7 +250,8 @@ u32 InitMainMenu(u8 a1) SetVBlankCallback(VBlankCB_MainMenu); SetMainCallback2(CB2_MainMenu); - REG_DISPCNT = DISPCNT_OBJ_1D_MAP + REG_DISPCNT = DISPCNT_MODE_0 + | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; @@ -747,8 +748,8 @@ static void Task_NewGameSpeech1(u8 taskId) FreeAllSpritePalettes(); AddBirchSpeechObjects(taskId); BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - REG_BG1CNT = 0x00000703; - REG_DISPCNT = DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP; + REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP; gTasks[taskId].data[TD_BGHOFS] = 0; gTasks[taskId].func = Task_NewGameSpeech2; gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = 0xFF; @@ -1391,7 +1392,7 @@ void CB_ContinueNewGameSpeechPart2() SetVBlankCallback(VBlankCB_MainMenu); SetMainCallback2(CB2_MainMenu); - REG_BG1CNT = 1795; + REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; } diff --git a/src/matsuda_debug_menu.c b/src/matsuda_debug_menu.c index 39c338658..d2ca754bb 100644 --- a/src/matsuda_debug_menu.c +++ b/src/matsuda_debug_menu.c @@ -64,7 +64,6 @@ extern u8* gMatsudaDebugMenuTextList3[]; extern u8 gMatsudaDebugMenuContestTopLeft[][2]; extern bool8 gReceivedRemoteLinkPlayers; -extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern struct MenuAction gMatsudaDebugMenuActions[]; @@ -290,7 +289,7 @@ static void sub_80A9F10(u8 taskId) static void sub_80A9F50(void) { - REG_DISPCNT = DISPCNT_OBJ_1D_MAP; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP; REG_DISPCNT |= DISPCNT_OBJ_ON | DISPCNT_BG0_ON; SetUpWindowConfig(&gWindowConfig_81E6C3C); InitWindowFromConfig(&gMenuWindow, &gWindowConfig_81E6C3C); @@ -1073,7 +1072,7 @@ void unref_sub_80AB084(u8 *text) REG_WIN0V = 0; REG_WIN1H = 0; REG_WIN1V = 0; - REG_DISPCNT = 0x1F40; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; savedIme = REG_IME; REG_IME = 0; diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 693b28948..97deb348c 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -54,7 +54,7 @@ void CB2_InitMysteryEventMenu(void) SetUpWindowConfig(&gWindowConfig_81E6CE4); InitMenuWindow(&gWindowConfig_81E6CE4); MenuZeroFillScreen(); - REG_DISPCNT = 320; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; REG_BLDCNT = 0; CreateTask(Task_DestroySelf, 0); StopMapMusic(); diff --git a/src/naming_screen.c b/src/naming_screen.c index f00a9bd3e..b14c690e2 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -298,10 +298,10 @@ static void NamingScreen_SetUpVideoRegs(void) REG_BG2VOFS = 0; REG_BG3HOFS = 0; REG_BG3VOFS = 0; - REG_BG0CNT = 0x1F00; - REG_BG1CNT = 0x1C01; - REG_BG2CNT = 0x1D0A; - REG_BG3CNT = 0x1E03; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(28) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(29) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_BLDCNT = 0x640; REG_BLDALPHA = 0x80C; } diff --git a/src/new_game.c b/src/new_game.c index 6d2722c44..12e04a4ef 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -145,7 +145,7 @@ void NewGameInitData(void) ClearDecorationInventories(); InitEasyChatPhrases(); SetMauvilleOldMan(); - InitDewfordTrends(); + InitDewfordTrend(); ResetFanClub(); ResetLotteryCorner(); WarpToTruck(); diff --git a/src/pokedex.c b/src/pokedex.c index d31d649e0..5ea1f9938 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -789,10 +789,10 @@ bool8 sub_808D344(u8 a) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG3CNT = 0xF03; - REG_BG1CNT = 0xD01; - REG_BG0CNT = 0xC00; - REG_DISPCNT = 0x9F40; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_OBJWIN_ON; gMain.state++; break; case 6: @@ -2296,8 +2296,8 @@ void Task_InitPageScreenMultistep(u8 taskId) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG3CNT = 0xF03; - REG_BG1CNT = 0xD00; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; gMain.state++; break; @@ -2422,7 +2422,7 @@ void Task_InitAreaScreenMultistep(u8 taskId) sub_8090540(0xD); sub_8090644(1, 0xD); sub_808D640(); - REG_BG1CNT = 0xD00; + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; gMain.state++; break; case 2: @@ -2544,10 +2544,10 @@ void Task_InitCryScreenMultistep(u8 taskId) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG2CNT = 0xE02; - REG_BG0CNT = 0x1F07; - REG_BG1CNT = 0xD00; - REG_DISPCNT = 0x1F07 + 0x39; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; gMain.state++; break; case 10: @@ -2715,8 +2715,8 @@ void Task_InitSizeScreenMultistep(u8 taskId) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG2CNT = 0xE03; - REG_DISPCNT = 0x1E40; + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; gMain.state++; break; case 9: @@ -3156,8 +3156,8 @@ void sub_8090750(u8 taskId) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG3CNT = 0xF07; - REG_DISPCNT = 0x1C40; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; gTasks[taskId].data[0]++; break; case 6: diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c new file mode 100644 index 000000000..679ec0bc4 --- /dev/null +++ b/src/pokemon_storage_system.c @@ -0,0 +1,93 @@ +#include "global.h" +#include "menu.h" +#include "string_util.h" + +struct StorageAction { + u8 *text; + u8 format; +}; + +extern const struct StorageAction gUnknown_083B6DF4[]; + +extern const u8 unk_2000000[]; + +#define gUnk2002694 (u8 *)(&unk_2000000[0x2694]) +#define gUnk20026A6 (u8 *)(&unk_2000000[0x26a6]) +#define gUnk20011fa (u8 *)(&unk_2000000[0x11fa]) +#define gUnk20026e4 (u8 *)(&unk_2000000[0x26e4]) + +void sub_8098898(u8 index) { + u8 *ptr; + + MenuDrawTextWindow(10, 16, 29, 19); + + switch (gUnknown_083B6DF4[index].format) + { + + case 2: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20011fa); + break; + + case 5: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20026e4); + break; + + case 1: + // {var} + " is selected." + ptr = StringCopy(gUnk2002694, gUnk20011fa); + ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); + break; + + case 4: + // TODO: fix for German + // {var} + " was released." + ptr = StringCopy(gUnk2002694, gUnk20026e4); + ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); + break; + + case 3: + { + u8 *stringLength; + u8 *text; + + text = gUnknown_083B6DF4[index].text; + stringLength = &text[StringLength(text)] + 1; + + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20011fa); + ptr = StringCopy(ptr, stringLength); + } + break; + + case 6: + // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) + { + u8 *stringLength; + u8 *text; + + text = gUnknown_083B6DF4[index].text; + stringLength = &text[StringLength(text)] - 1; + + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr - 1, gUnk20026e4); + ptr = StringCopy(ptr, stringLength); + } + break; + + case 0: + default: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + break; + } + + while (ptr < gUnk20026A6) + { + ptr[0] = CHAR_SPACE; + ptr++; + } + + ptr[0] = EOS; + MenuPrint(gUnk2002694, 11, 17); +} diff --git a/src/pokenav.c b/src/pokenav.c new file mode 100644 index 000000000..60e7c73e1 --- /dev/null +++ b/src/pokenav.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "battle.h" +#include "string_util.h" + +struct UnkPokenavStruct_Sub { + /*0x0*/ u16 unk0; + /*0x2*/ u8 filler2[6]; +}; + + +struct UnkPokenavStruct { + /*0x0000*/ u8 filler0000[0xCEE8]; + /*0xCEE8*/ struct UnkPokenavStruct_Sub unkCEE8[78]; + /*0xD158*/ u16 unkD158; + +}; + +extern struct UnkPokenavStruct *gUnknown_083DFEC4; + +extern const struct Trainer gTrainers[]; +extern const u8 gTrainerClassNames[][13]; + +void sub_80F700C(u8 *arg0, u16 arg1) { + struct Trainer *trainer; + u8 *ptr; + + trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0]; + + ptr = arg0; + if (arg1 < gUnknown_083DFEC4->unkD158) + { + ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x4B; + ptr += 3; + ptr = StringCopy(ptr, trainer->trainerName); + } + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x80; + ptr[3] = 0xFF; +} diff --git a/src/record_mixing.c b/src/record_mixing.c index c08128637..76fe13059 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -31,8 +31,6 @@ 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]; #define BUFFER_CHUNK_SIZE 200 diff --git a/src/rom3.c b/src/rom3.c index b0ef7f088..0169128cb 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -13,7 +13,6 @@ extern u8 unk_2000000[]; #define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) extern u16 gBattleTypeFlags; -extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern const u32 gBitTable[]; extern u16 gBattleWeather; extern const struct BattleMove gBattleMoves[]; @@ -124,7 +123,7 @@ void sub_800B950(void) else sub_800B9A8(); sub_800BD54(); - if (!(gBattleTypeFlags & BATTLE_TYPE_40)) + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { for (i = 0; i < gUnknown_02024A68; i++) sub_8094978(i, 0); @@ -188,7 +187,7 @@ void sub_800BA78(void) } return; } - if ((gBattleTypeFlags & (BATTLE_TYPE_40 | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) + if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_WILD) { @@ -299,7 +298,7 @@ void sub_800BD54(void) int i; int j; - if (!(gBattleTypeFlags & BATTLE_TYPE_40)) + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { for (i = 0; i < gUnknown_02024A68; i++) { diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c index 93fbce556..6f153c340 100644 --- a/src/rom_800D42C.c +++ b/src/rom_800D42C.c @@ -34,7 +34,7 @@ extern u8 BattleText_Tie[]; #define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) #define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) -void sub_800DC24(void) +void PrintLinkBattleWinLossTie(void) { if (gUnknown_02024D26 == 3) @@ -43,7 +43,7 @@ void sub_800DC24(void) return; } - if (gBattleTypeFlags & BATTLE_TYPE_40) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { // Double battle? diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 102909779..d46abc74d 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -150,9 +150,9 @@ static void CB2_SaveFailedScreen(void) REG_IME = ime; REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; SetVBlankCallback(VBlankCB); - REG_BG3CNT = 0x703; - REG_BG2CNT = 0x602; - REG_BG0CNT = 0x1f08; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG2_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0; gMain.state++; break; diff --git a/src/secret_base.c b/src/secret_base.c new file mode 100644 index 000000000..572dfaa1d --- /dev/null +++ b/src/secret_base.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +u8 sub_80BB8A8(void *); + +u8 *sub_80BC190(u8 *dest, u8 arg1) { + u8 local1; + u8 *str; + + local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].sbr_field_2); + + str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1); + str[0] = EOS; + + return StringAppend(dest, gOtherText_PlayersBase); +} diff --git a/src/slot_machine.c b/src/slot_machine.c new file mode 100644 index 000000000..c087bf6b4 --- /dev/null +++ b/src/slot_machine.c @@ -0,0 +1,154 @@ +#include "global.h" +#include "decompress.h" +#include "palette.h" +#include "task.h" + +struct UnkStruct2000000 { + /*0x00*/ u8 filler00[61]; + /*0x3D*/ u8 unk3D; +}; + +struct UnkStruct1 { + /*0x00*/ u8 unk00; + /*0x01*/ u8 unk01; + /*0x02*/ s16 unk02; +}; + +extern struct UnkStruct2000000 unk_2000000; + +extern struct UnkStruct1 *gUnknown_083ED048[]; +extern const u16 gPalette_83EDE24[]; + +extern const u8 gSlotMachine_Gfx[]; +#if ENGLISH +#define SLOTMACHINE_GFX_TILES 233 +#elif GERMAN +#define SLOTMACHINE_GFX_TILES 236 +#endif + +extern const u16 gUnknown_08E95A18[]; + +extern u16 gUnknown_08E95AB8[]; +extern u16 gUnknown_08E95FB8[]; + + +void sub_8104DA4(void); + +u8 sub_8105BB4(u8, u8, s16); + +static void LoadSlotMachineWheelOverlay(void); + +void sub_8104CAC(u8 arg0) { + u8 i; + struct Task *task; + + sub_8104DA4(); + + task = &gTasks[unk_2000000.unk3D]; + task->data[1] = arg0; + + i = 0; + while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + { + u8 spriteId; + spriteId = sub_8105BB4( + gUnknown_083ED048[arg0][i].unk00, + gUnknown_083ED048[arg0][i].unk01, + gUnknown_083ED048[arg0][i].unk02 + ); + task->data[4 + i] = spriteId; + +#ifdef GERMAN + if (arg0 == 5 && i <= 2) + { + gSprites[spriteId].invisible = TRUE; + } +#endif + + i += 1; + } +} + +asm(".section .text_b"); + +void sub_8106448(void) { + u32 offsetRead, offsetWrite; + u32 size; + + sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000); + + offsetRead = 0x02010000; + offsetWrite = BG_VRAM; + size = SLOTMACHINE_GFX_TILES * 32; + while (TRUE) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); + offsetRead += 0x1000; + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); + break; + } + } + + LoadPalette(gUnknown_08E95A18, 0, 160); + LoadPalette(gPalette_83EDE24, 208, 32); +} + +void sub_81064B8(void) { + CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + LoadSlotMachineWheelOverlay(); +} + +static void LoadSlotMachineWheelOverlay(void) { + s16 x, y, dx; + u16 *screen; + + screen = (u16 *) BG_SCREEN_ADDR(30); + + for (x = 4; x < 18; x += 5) + { + for (dx = 0; dx < 4; dx++) + { + screen[5 * 32 + dx + x] = 0x2051; + screen[13 * 32 + dx + x] = 0x2851; + screen[6 * 32 + dx + x] = 0x2061; + screen[12 * 32 + dx + x] = 0x2861; + } + + screen[6 * 32 + x] = 0x20BE; + screen[12 * 32 + x] = 0x28BE; + + for (y = 7; y <= 11; y++) + { + screen[y * 32 + x] = 0x20BF; + } + } +} + +void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { + u16 *vram = (u16 *) BG_SCREEN_ADDR(29); + + vram[15 * 32 + arg0] = arg1; + vram[15 * 32 + 1 + arg0] = arg2; + vram[16 * 32 + arg0] = arg3; + vram[16 * 32 + 1 + arg0] = arg4; +} + +void sub_81065DC(void) { + s16 y, x; + u16 *screen; + + CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + + screen = (u16 *) BG_SCREEN_ADDR(30); + for (y = 0; y < 20; y++) + { + for (x = 0; x < 30; x++) + { + screen[x + y * 32] = 0; + } + } +} diff --git a/src/sound.c b/src/sound.c index 3256c4d67..ed69ca01d 100644 --- a/src/sound.c +++ b/src/sound.c @@ -339,7 +339,7 @@ void PlayCry4(u16 species, s8 pan, u8 mode) } else { - if (!(gBattleTypeFlags & BATTLE_TYPE_40)) + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); PlayCryInternal(species, pan, 125, 10, mode); } diff --git a/src/start_menu.c b/src/start_menu.c index 4a3bcbbd3..37d361c0b 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -782,7 +782,7 @@ static bool32 sub_80719FC(u8 *step) case 2: SetUpWindowConfig(&gWindowConfig_81E6CE4); InitMenuWindow(&gWindowConfig_81E6CE4); - REG_DISPCNT = 0x100; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON; break; case 3: { diff --git a/src/starter_choose.c b/src/starter_choose.c index 63d153ebd..6ef410d21 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -325,9 +325,9 @@ void CB2_ChooseStarter(void) REG_BLDCNT = 0xFE; REG_BLDALPHA = 0; REG_BLDY = 0x7; - REG_BG3CNT = 0x703; - REG_BG2CNT = 0x602; - REG_BG0CNT = 0x1F08; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; taskId = CreateTask(Task_StarterChoose1, 0); @@ -256,7 +256,7 @@ void EndMassOutbreak(void) gSaveBlock1.outbreakUnk5 = 0; } -void sub_80BE8C4(u16 arg0) +void UpdateTVShowsPerDay(u16 arg0) { sub_80BE8EC(arg0); UpdateMassOutbreakTimeLeft(arg0); diff --git a/src/wallclock.c b/src/wallclock.c index 2f4d694a6..0f3665c65 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -256,8 +256,8 @@ static void WallClockInit(void) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_BG3CNT = 0x701; - REG_BG0CNT = 0x1F08; + REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; } |