diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-05-12 01:57:52 -0400 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-05-12 01:57:52 -0400 |
commit | de67e7cf5fbe55bdfcb4dcd069e7ffa64187c72a (patch) | |
tree | 7cb13c4e6d90c1f1ec03e4e16dbb26b20c9610e6 | |
parent | 0354f2cc5ae9771d745e6ffadd4715bdc8ff5221 (diff) | |
parent | 184436635fdca28399d03e805814a0deda67d200 (diff) |
Merge branch 'master' of https://github.com/pret/pokeruby
-rw-r--r-- | INSTALL.md | 2 | ||||
-rw-r--r-- | asm/battle_1.s | 2 | ||||
-rw-r--r-- | asm/battle_2.s | 2602 | ||||
-rw-r--r-- | asm/field_specials.s | 6 | ||||
-rw-r--r-- | asm/field_weather.s | 6 | ||||
-rw-r--r-- | include/battle.h | 2 | ||||
-rw-r--r-- | include/berry.h | 2 | ||||
-rw-r--r-- | include/dewford_trend.h | 2 | ||||
-rw-r--r-- | include/flags.h | 1 | ||||
-rw-r--r-- | include/global.berry.h | 10 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_2.c | 977 | ||||
-rw-r--r-- | src/battle_interface.c | 4 | ||||
-rw-r--r-- | src/berry.c | 22 | ||||
-rw-r--r-- | src/clock.c | 32 | ||||
-rw-r--r-- | src/dewford_trend.c | 237 | ||||
-rw-r--r-- | src/new_game.c | 2 | ||||
-rw-r--r-- | src/rom3.c | 6 | ||||
-rw-r--r-- | src/rom_800D42C.c | 4 | ||||
-rw-r--r-- | src/sound.c | 2 | ||||
-rw-r--r-- | src/tv.c | 2 |
21 files changed, 1060 insertions, 2864 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 56923c83f..7d199fff2 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/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/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/ld_script.txt b/ld_script.txt index 7d92e2f7a..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); 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_interface.c b/src/battle_interface.c index d4a9f9cce..a9175ac10 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/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/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/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/rom3.c b/src/rom3.c index 126248705..0169128cb 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -123,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); @@ -187,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) { @@ -298,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/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); } @@ -256,7 +256,7 @@ void EndMassOutbreak(void) gSaveBlock1.outbreakUnk5 = 0; } -void sub_80BE8C4(u16 arg0) +void UpdateTVShowsPerDay(u16 arg0) { sub_80BE8EC(arg0); UpdateMassOutbreakTimeLeft(arg0); |