diff options
-rw-r--r-- | asm/battle_1.s | 1858 | ||||
-rw-r--r-- | data/graphics.s | 6 | ||||
-rw-r--r-- | include/battle.h | 6 | ||||
-rw-r--r-- | include/graphics.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle/battle_2.c | 30 | ||||
-rw-r--r-- | src/battle/battle_bg.c | 763 | ||||
-rw-r--r-- | src/battle/battle_setup.c | 18 | ||||
-rw-r--r-- | src/battle/reshow_battle_screen.c | 4 | ||||
-rw-r--r-- | src/egg_hatch.c | 12 | ||||
-rw-r--r-- | src/evolution_scene.c | 4 | ||||
-rw-r--r-- | src/pokedex.c | 4 | ||||
-rw-r--r-- | src/pokemon_2.c | 4 | ||||
-rw-r--r-- | src/rom_800D42C.c | 119 | ||||
-rw-r--r-- | src/trade.c | 30 |
15 files changed, 825 insertions, 2042 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s index cd925e10d..99e449d8f 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -347,1862 +347,4 @@ _0800D674: bx r0 thumb_func_end unref_sub_800D42C - thumb_func_start unref_sub_800D684 -unref_sub_800D684: @ 800D684 - push {lr} - bl ResetSpriteData - ldr r0, _0800D6B8 @ =gSpriteTemplate_81F96D0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0800D6BC @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r0, _0800D6C0 @ =sub_800D6C4 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0800D6B8: .4byte gSpriteTemplate_81F96D0 -_0800D6BC: .4byte gSprites -_0800D6C0: .4byte sub_800D6C4 - thumb_func_end unref_sub_800D684 - - thumb_func_start sub_800D6C4 -sub_800D6C4: @ 800D6C4 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - pop {r0} - bx r0 - thumb_func_end sub_800D6C4 - - thumb_func_start sub_800D6D4 -sub_800D6D4: @ 800D6D4 - push {r4,r5,lr} - ldr r3, _0800D72C @ =0x04000208 - ldrh r2, [r3] - movs r5, 0 - strh r5, [r3] - ldr r4, _0800D730 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r1, _0800D734 @ =REG_DISPSTAT - movs r0, 0x8 - strh r0, [r1] - adds r1, 0x4 - movs r2, 0x98 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0800D738 @ =0x00009c04 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0800D73C @ =0x00005e05 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0800D740 @ =0x00005a0b - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0800D744 @ =REG_BLDCNT - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - subs r1, 0xE - ldr r2, _0800D748 @ =0x0000bf40 - adds r0, r2, 0 - strh r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800D72C: .4byte 0x04000208 -_0800D730: .4byte 0x04000200 -_0800D734: .4byte REG_DISPSTAT -_0800D738: .4byte 0x00009c04 -_0800D73C: .4byte 0x00005e05 -_0800D740: .4byte 0x00005a0b -_0800D744: .4byte REG_BLDCNT -_0800D748: .4byte 0x0000bf40 - thumb_func_end sub_800D6D4 - - thumb_func_start sub_800D74C -sub_800D74C: @ 800D74C - push {r4,lr} - movs r0, 0x12 - bl TextWindow_SetBaseTileNum - ldr r4, _0800D79C @ =gUnknown_03004210 - adds r0, r4, 0 - movs r1, 0x1 - bl TextWindow_LoadStdFrameGraphicsOverridePal - movs r0, 0x22 - bl TextWindow_SetBaseTileNum - adds r0, r4, 0 - movs r1, 0x1 - bl TextWindow_LoadStdFrameGraphicsOverridePal - ldr r3, _0800D7A0 @ =gPlttBufferUnfaded - adds r0, r3, 0 - adds r0, 0xB8 - ldr r1, _0800D7A4 @ =0x00007fe0 - strh r1, [r0] - adds r2, r3, 0 - adds r2, 0xBA - ldr r1, _0800D7A8 @ =0x00002529 - strh r1, [r2] - adds r2, 0x2 - ldr r1, _0800D7AC @ =0x00007fff - strh r1, [r2] - adds r2, 0x2 - ldr r1, _0800D7B0 @ =0x0000675a - strh r1, [r2] - ldr r1, _0800D7B4 @ =gPlttBufferFaded + 0xB8 - movs r2, 0x4 - bl CpuSet - bl sub_8032A38 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800D79C: .4byte gUnknown_03004210 -_0800D7A0: .4byte gPlttBufferUnfaded -_0800D7A4: .4byte 0x00007fe0 -_0800D7A8: .4byte 0x00002529 -_0800D7AC: .4byte 0x00007fff -_0800D7B0: .4byte 0x0000675a -_0800D7B4: .4byte gPlttBufferFaded + 0xB8 - thumb_func_end sub_800D74C - - thumb_func_start DrawMainBattleBackground -DrawMainBattleBackground: @ 800D7B8 - push {r4,r5,lr} - ldr r0, _0800D7DC @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0800D7E0 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _0800D7F8 - ldr r0, _0800D7E4 @ =gBattleTerrainTiles_Building - ldr r1, _0800D7E8 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D7EC @ =gBattleTerrainTilemap_Building - ldr r1, _0800D7F0 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D7F4 @ =gBattleTerrainPalette_BattleTower - b _0800DA66 - .align 2, 0 -_0800D7DC: .4byte gBattleTypeFlags -_0800D7E0: .4byte 0x00000902 -_0800D7E4: .4byte gBattleTerrainTiles_Building -_0800D7E8: .4byte 0x06008000 -_0800D7EC: .4byte gBattleTerrainTilemap_Building -_0800D7F0: .4byte 0x0600d000 -_0800D7F4: .4byte gBattleTerrainPalette_BattleTower -_0800D7F8: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0800D860 - ldr r0, _0800D820 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _0800D838 - ldr r0, _0800D824 @ =gBattleTerrainTiles_Cave - ldr r1, _0800D828 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D82C @ =gBattleTerrainTilemap_Cave - ldr r1, _0800D830 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D834 @ =gBattleTerrainPalette_Groudon - b _0800DA66 - .align 2, 0 -_0800D820: .4byte gGameVersion -_0800D824: .4byte gBattleTerrainTiles_Cave -_0800D828: .4byte 0x06008000 -_0800D82C: .4byte gBattleTerrainTilemap_Cave -_0800D830: .4byte 0x0600d000 -_0800D834: .4byte gBattleTerrainPalette_Groudon -_0800D838: - ldr r0, _0800D84C @ =gBattleTerrainTiles_Water - ldr r1, _0800D850 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D854 @ =gBattleTerrainTilemap_Water - ldr r1, _0800D858 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D85C @ =gBattleTerrainPalette_Kyogre - b _0800DA66 - .align 2, 0 -_0800D84C: .4byte gBattleTerrainTiles_Water -_0800D850: .4byte 0x06008000 -_0800D854: .4byte gBattleTerrainTilemap_Water -_0800D858: .4byte 0x0600d000 -_0800D85C: .4byte gBattleTerrainPalette_Kyogre -_0800D860: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800D8D8 - ldr r2, _0800D890 @ =gTrainers - ldr r0, _0800D894 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0x19 - bne _0800D8AC - ldr r0, _0800D898 @ =gBattleTerrainTiles_Building - ldr r1, _0800D89C @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D8A0 @ =gBattleTerrainTilemap_Building - ldr r1, _0800D8A4 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D8A8 @ =gBattleTerrainPalette_BuildingLeader - b _0800DA66 - .align 2, 0 -_0800D890: .4byte gTrainers -_0800D894: .4byte gTrainerBattleOpponent -_0800D898: .4byte gBattleTerrainTiles_Building -_0800D89C: .4byte 0x06008000 -_0800D8A0: .4byte gBattleTerrainTilemap_Building -_0800D8A4: .4byte 0x0600d000 -_0800D8A8: .4byte gBattleTerrainPalette_BuildingLeader -_0800D8AC: - cmp r0, 0x20 - bne _0800D8D8 - ldr r0, _0800D8C4 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800D8C8 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D8CC @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800D8D0 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D8D4 @ =gBattleTerrainPalette_StadiumSteven - b _0800DA66 - .align 2, 0 -_0800D8C4: .4byte gBattleTerrainTiles_Stadium -_0800D8C8: .4byte 0x06008000 -_0800D8CC: .4byte gBattleTerrainTilemap_Stadium -_0800D8D0: .4byte 0x0600d000 -_0800D8D4: .4byte gBattleTerrainPalette_StadiumSteven -_0800D8D8: - bl sav1_map_get_battletype - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bls _0800D8E6 - b _0800DA9E -_0800D8E6: - lsls r0, 2 - ldr r1, _0800D8F0 @ =_0800D8F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800D8F0: .4byte _0800D8F4 - .align 2, 0 -_0800D8F4: - .4byte _0800D918 - .4byte _0800D964 - .4byte _0800D98C - .4byte _0800D9B4 - .4byte _0800D9DC - .4byte _0800DA04 - .4byte _0800DA2C - .4byte _0800DA54 - .4byte _0800DA84 -_0800D918: - ldr r4, _0800D954 @ =gBattleTerrainTable - ldr r5, _0800D958 @ =gBattleTerrain - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - ldr r1, _0800D95C @ =0x06008000 - bl LZDecompressVram - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0x4 - adds r0, r1 - ldr r0, [r0] - ldr r1, _0800D960 @ =0x0600d000 - bl LZDecompressVram - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r4, 0x10 - adds r0, r4 - ldr r0, [r0] - b _0800DA66 - .align 2, 0 -_0800D954: .4byte gBattleTerrainTable -_0800D958: .4byte gBattleTerrain -_0800D95C: .4byte 0x06008000 -_0800D960: .4byte 0x0600d000 -_0800D964: - ldr r0, _0800D978 @ =gBattleTerrainTiles_Building - ldr r1, _0800D97C @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D980 @ =gBattleTerrainTilemap_Building - ldr r1, _0800D984 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D988 @ =gBattleTerrainPalette_BuildingGym - b _0800DA66 - .align 2, 0 -_0800D978: .4byte gBattleTerrainTiles_Building -_0800D97C: .4byte 0x06008000 -_0800D980: .4byte gBattleTerrainTilemap_Building -_0800D984: .4byte 0x0600d000 -_0800D988: .4byte gBattleTerrainPalette_BuildingGym -_0800D98C: - ldr r0, _0800D9A0 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800D9A4 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D9A8 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800D9AC @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D9B0 @ =gBattleTerrainPalette_StadiumMagma - b _0800DA66 - .align 2, 0 -_0800D9A0: .4byte gBattleTerrainTiles_Stadium -_0800D9A4: .4byte 0x06008000 -_0800D9A8: .4byte gBattleTerrainTilemap_Stadium -_0800D9AC: .4byte 0x0600d000 -_0800D9B0: .4byte gBattleTerrainPalette_StadiumMagma -_0800D9B4: - ldr r0, _0800D9C8 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800D9CC @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D9D0 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800D9D4 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800D9D8 @ =gBattleTerrainPalette_StadiumAqua - b _0800DA66 - .align 2, 0 -_0800D9C8: .4byte gBattleTerrainTiles_Stadium -_0800D9CC: .4byte 0x06008000 -_0800D9D0: .4byte gBattleTerrainTilemap_Stadium -_0800D9D4: .4byte 0x0600d000 -_0800D9D8: .4byte gBattleTerrainPalette_StadiumAqua -_0800D9DC: - ldr r0, _0800D9F0 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800D9F4 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800D9F8 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800D9FC @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800DA00 @ =gBattleTerrainPalette_StadiumSidney - b _0800DA66 - .align 2, 0 -_0800D9F0: .4byte gBattleTerrainTiles_Stadium -_0800D9F4: .4byte 0x06008000 -_0800D9F8: .4byte gBattleTerrainTilemap_Stadium -_0800D9FC: .4byte 0x0600d000 -_0800DA00: .4byte gBattleTerrainPalette_StadiumSidney -_0800DA04: - ldr r0, _0800DA18 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800DA1C @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800DA20 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800DA24 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800DA28 @ =gBattleTerrainPalette_StadiumPhoebe - b _0800DA66 - .align 2, 0 -_0800DA18: .4byte gBattleTerrainTiles_Stadium -_0800DA1C: .4byte 0x06008000 -_0800DA20: .4byte gBattleTerrainTilemap_Stadium -_0800DA24: .4byte 0x0600d000 -_0800DA28: .4byte gBattleTerrainPalette_StadiumPhoebe -_0800DA2C: - ldr r0, _0800DA40 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800DA44 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800DA48 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800DA4C @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800DA50 @ =gBattleTerrainPalette_StadiumGlacia - b _0800DA66 - .align 2, 0 -_0800DA40: .4byte gBattleTerrainTiles_Stadium -_0800DA44: .4byte 0x06008000 -_0800DA48: .4byte gBattleTerrainTilemap_Stadium -_0800DA4C: .4byte 0x0600d000 -_0800DA50: .4byte gBattleTerrainPalette_StadiumGlacia -_0800DA54: - ldr r0, _0800DA70 @ =gBattleTerrainTiles_Stadium - ldr r1, _0800DA74 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800DA78 @ =gBattleTerrainTilemap_Stadium - ldr r1, _0800DA7C @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800DA80 @ =gBattleTerrainPalette_StadiumDrake -_0800DA66: - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette - b _0800DA9E - .align 2, 0 -_0800DA70: .4byte gBattleTerrainTiles_Stadium -_0800DA74: .4byte 0x06008000 -_0800DA78: .4byte gBattleTerrainTilemap_Stadium -_0800DA7C: .4byte 0x0600d000 -_0800DA80: .4byte gBattleTerrainPalette_StadiumDrake -_0800DA84: - ldr r0, _0800DAA4 @ =gBattleTerrainTiles_Building - ldr r1, _0800DAA8 @ =0x06008000 - bl LZDecompressVram - ldr r0, _0800DAAC @ =gBattleTerrainTilemap_Building - ldr r1, _0800DAB0 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _0800DAB4 @ =gBattleTerrainPalette_BattleTower - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette -_0800DA9E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800DAA4: .4byte gBattleTerrainTiles_Building -_0800DAA8: .4byte 0x06008000 -_0800DAAC: .4byte gBattleTerrainTilemap_Building -_0800DAB0: .4byte 0x0600d000 -_0800DAB4: .4byte gBattleTerrainPalette_BattleTower - thumb_func_end DrawMainBattleBackground - -.if DEBUG - thumb_func_start sub_800DAB8 -sub_800DAB8: -.syntax divided - push {r4, r5, lr} - add sp, sp, #0xfffffffc - ldr r0, ._113 @ gUnknown_08D00000 - mov r1, #0xc0 - lsl r1, r1, #0x13 - bl LZDecompressVram - ldr r0, ._113 + 4 @ gUnknown_08D00524 - ldr r4, ._113 + 8 @ 0x600c000 - mov r2, #0x80 - lsl r2, r2, #0x4 - add r1, r4, #0 - bl CpuSet - ldr r0, ._113 + 12 @ gUnknown_08D004E0 - mov r1, #0x0 - mov r2, #0x40 - bl LoadCompressedPalette - bl sub_800D74C - bl DrawMainBattleBackground - ldr r0, ._113 + 16 @ gBattleTypeFlags - ldrh r1, [r0] - mov r0, #0x2 - and r0, r0, r1 - cmp r0, #0 - beq ._112 @cond_branch - ldr r0, ._113 + 20 @ 0x6000600 - mov r1, #0x0 - add r2, r4, #0 - mov r3, #0x1 - bl debug_sub_8008218 - ldr r5, ._113 + 24 @ 0x101 - mov r4, #0x1 - str r4, [sp] - add r0, r5, #0 - mov r1, #0x3 - mov r2, #0x1 - mov r3, #0x3 - bl debug_sub_8008264 - str r4, [sp] - add r0, r5, #0 - mov r1, #0x3 - mov r2, #0x15 - mov r3, #0x3 - bl debug_sub_8008264 - str r4, [sp] - add r0, r5, #0 - mov r1, #0x3 - mov r2, #0x29 - mov r3, #0x3 - bl debug_sub_8008264 -._112: - add sp, sp, #0x4 - pop {r4, r5} - pop {r0} - bx r0 -._114: - .align 2, 0 -._113: - .word gUnknown_08D00000 - .word gUnknown_08D00524 - .word 0x600c000 - .word gUnknown_08D004E0 - .word gBattleTypeFlags - .word 0x6000600 - .word 0x101 -.syntax unified - thumb_func_end sub_800DAB8 -.else - thumb_func_start sub_800DAB8 -sub_800DAB8: @ 800DAB8 - push {lr} - ldr r0, _0800DAE8 @ =gUnknown_08D00000 - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - ldr r0, _0800DAEC @ =gUnknown_08D00524 - ldr r1, _0800DAF0 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 4 - bl CpuSet - ldr r0, _0800DAF4 @ =gUnknown_08D004E0 - movs r1, 0 - movs r2, 0x40 - bl LoadCompressedPalette - bl sub_800D74C - bl DrawMainBattleBackground - pop {r0} - bx r0 - .align 2, 0 -_0800DAE8: .4byte gUnknown_08D00000 -_0800DAEC: .4byte gUnknown_08D00524 -_0800DAF0: .4byte 0x0600c000 -_0800DAF4: .4byte gUnknown_08D004E0 - thumb_func_end sub_800DAB8 -.endif - - thumb_func_start sub_800DAF8 -sub_800DAF8: @ 800DAF8 - push {r4-r7,lr} - sub sp, 0xC - adds r7, r2, 0 - lsls r0, 24 - lsrs r2, r0, 24 - adds r5, r2, 0 - lsls r1, 24 - lsrs r3, r1, 24 - movs r4, 0 - ldr r0, _0800DB38 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800DBB4 - ldr r0, _0800DB3C @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r2, 0x12 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0800DB52 - cmp r3, 0x1 - beq _0800DB7A - cmp r3, 0x1 - bgt _0800DB40 - cmp r3, 0 - beq _0800DB4A - b _0800DB84 - .align 2, 0 -_0800DB38: .4byte gBattleTypeFlags -_0800DB3C: .4byte gTasks -_0800DB40: - cmp r3, 0x2 - beq _0800DB4E - cmp r3, 0x3 - beq _0800DB6E - b _0800DB84 -_0800DB4A: - ldrh r0, [r1, 0xE] - b _0800DB70 -_0800DB4E: - ldrh r1, [r1, 0xE] - b _0800DB7C -_0800DB52: - cmp r3, 0x1 - beq _0800DB6E - cmp r3, 0x1 - bgt _0800DB60 - cmp r3, 0 - beq _0800DB6A - b _0800DB84 -_0800DB60: - cmp r3, 0x2 - beq _0800DB76 - cmp r3, 0x3 - beq _0800DB7A - b _0800DB84 -_0800DB6A: - ldrh r0, [r1, 0xE] - b _0800DB70 -_0800DB6E: - ldrh r0, [r1, 0x10] -_0800DB70: - movs r4, 0x3F - ands r4, r0 - b _0800DB84 -_0800DB76: - ldrh r1, [r1, 0xE] - b _0800DB7C -_0800DB7A: - ldrh r1, [r1, 0x10] -_0800DB7C: - movs r0, 0xFC - lsls r0, 4 - ands r0, r1 - lsrs r4, r0, 6 -_0800DB84: - movs r3, 0 - movs r6, 0x3 - ldr r0, _0800DBB0 @ =0x00006001 - adds r5, r0, 0 - mov r2, sp -_0800DB8E: - lsls r1, r3, 1 - adds r0, r6, 0 - lsls r0, r1 - ands r0, r4 - asrs r0, r1 - adds r0, r5 - strh r0, [r2] - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x2 - ble _0800DB8E - mov r0, sp - adds r1, r7, 0 - movs r2, 0x3 - bl CpuSet - b _0800DC12 - .align 2, 0 -_0800DBB0: .4byte 0x00006001 -_0800DBB4: - ldr r0, _0800DBD0 @ =gSharedMem - ldr r1, _0800DBD4 @ =0x000160cb - adds r0, r1 - ldrb r0, [r0] - cmp r3, r0 - bne _0800DBDC - ldr r1, _0800DBD8 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrh r4, [r0, 0xE] - b _0800DBE8 - .align 2, 0 -_0800DBD0: .4byte gSharedMem -_0800DBD4: .4byte 0x000160cb -_0800DBD8: .4byte gTasks -_0800DBDC: - ldr r1, _0800DC1C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldrh r4, [r0, 0x10] -_0800DBE8: - movs r3, 0 - movs r6, 0x3 - ldr r2, _0800DC20 @ =0x00006001 - adds r5, r2, 0 - mov r2, sp -_0800DBF2: - lsls r1, r3, 1 - adds r0, r6, 0 - lsls r0, r1 - ands r0, r4 - asrs r0, r1 - adds r0, r5 - strh r0, [r2] - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x5 - ble _0800DBF2 - mov r0, sp - adds r1, r7, 0 - movs r2, 0x6 - bl CpuSet -_0800DC12: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800DC1C: .4byte gTasks -_0800DC20: .4byte 0x00006001 - thumb_func_end sub_800DAF8 - - .section .text_800DC24 - - thumb_func_start sub_800DE30 -sub_800DE30: @ 800DE30 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r1, _0800DE64 @ =gTasks - lsls r0, 2 - mov r10, r0 - add r0, r9 - lsls r0, 3 - adds r6, r0, r1 - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bne _0800DE58 - b _0800DF9C -_0800DE58: - cmp r0, 0x1 - bgt _0800DE68 - cmp r0, 0 - beq _0800DE70 - b _0800E212 - .align 2, 0 -_0800DE64: .4byte gTasks -_0800DE68: - cmp r0, 0x2 - bne _0800DE6E - b _0800E03C -_0800DE6E: - b _0800E212 -_0800DE70: - ldr r0, _0800DED0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800DEE0 - ldr r0, _0800DED4 @ =gLinkPlayers - ldr r2, _0800DED8 @ =gUnknown_081F9680 - mov r8, r2 - adds r7, r0, 0 - adds r7, 0x8 - movs r5, 0x3 -_0800DE88: - ldrb r0, [r7, 0x10] - movs r1, 0x3 - ands r1, r0 - str r1, [sp, 0x8] - lsls r4, r1, 1 - adds r4, r1 - lsls r4, 2 - mov r2, r8 - adds r0, r4, r2 - ldr r1, [r0] - str r1, [sp, 0xC] - ldrh r2, [r0, 0x4] - ldrb r3, [r0, 0x6] - ldrb r0, [r0, 0x7] - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r1, 0 - adds r1, r7, 0 - bl Text_InitWindow8002E4C - ldr r0, [sp, 0xC] - bl Text_PrintWindow8002F44 - ldr r2, _0800DEDC @ =gUnknown_081F9680 + 0x8 - adds r4, r2 - ldr r2, [r4] - mov r0, r9 - ldr r1, [sp, 0x8] - bl sub_800DAF8 - adds r7, 0x1C - subs r5, 0x1 - cmp r5, 0 - bge _0800DE88 - b _0800DF70 - .align 2, 0 -_0800DED0: .4byte gBattleTypeFlags -_0800DED4: .4byte gLinkPlayers -_0800DED8: .4byte gUnknown_081F9680 -_0800DEDC: .4byte gUnknown_081F9680 + 0x8 -_0800DEE0: - ldr r0, _0800DF84 @ =gSharedMem - ldr r5, _0800DF88 @ =0x000160cb - adds r0, r5 - ldrb r7, [r0] - movs r0, 0x1 - adds r6, r7, 0 - eors r6, r0 - adds r1, r6, 0 - ldr r2, _0800DF8C @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x18] - cmp r0, 0 - beq _0800DF04 - adds r6, r7, 0 - adds r7, r1, 0 -_0800DF04: - ldr r0, _0800DF90 @ =gUnknown_081F9680 - mov r8, r0 - adds r0, 0x30 - mov r1, r8 - ldr r4, [r1, 0x30] - lsls r1, r7, 3 - subs r1, r7 - lsls r1, 2 - ldr r2, _0800DF94 @ =gLinkPlayers + 0x8 - adds r1, r2 - ldrh r2, [r0, 0x4] - ldrb r3, [r0, 0x6] - ldrb r0, [r0, 0x7] - str r0, [sp] - movs r5, 0x1 - str r5, [sp, 0x4] - adds r0, r4, 0 - bl Text_InitWindow8002E4C - adds r0, r4, 0 - bl Text_PrintWindow8002F44 - mov r0, r8 - ldr r2, [r0, 0x38] - mov r0, r9 - adds r1, r7, 0 - bl sub_800DAF8 - mov r0, r8 - adds r0, 0x3C - mov r1, r8 - ldr r4, [r1, 0x3C] - lsls r1, r6, 3 - subs r1, r6 - lsls r1, 2 - ldr r2, _0800DF94 @ =gLinkPlayers + 0x8 - adds r1, r2 - ldrh r2, [r0, 0x4] - ldrb r3, [r0, 0x6] - ldrb r0, [r0, 0x7] - str r0, [sp] - str r5, [sp, 0x4] - adds r0, r4, 0 - bl Text_InitWindow8002E4C - adds r0, r4, 0 - bl Text_PrintWindow8002F44 - mov r5, r8 - ldr r2, [r5, 0x44] - mov r0, r9 - adds r1, r6, 0 - bl sub_800DAF8 -_0800DF70: - ldr r0, _0800DF98 @ =gTasks - mov r1, r10 - add r1, r9 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _0800E212 - .align 2, 0 -_0800DF84: .4byte gSharedMem -_0800DF88: .4byte 0x000160cb -_0800DF8C: .4byte gLinkPlayers -_0800DF90: .4byte gUnknown_081F9680 -_0800DF94: .4byte gLinkPlayers + 0x8 -_0800DF98: .4byte gTasks -_0800DF9C: - ldr r0, _0800E010 @ =0x00002710 - bl AllocSpritePalette - lsls r0, 24 - ldr r2, _0800E014 @ =gPlttBufferUnfaded - lsrs r0, 19 - ldr r1, _0800E018 @ =0x0000021e - adds r0, r1 - adds r2, r0, r2 - ldr r1, _0800E01C @ =gPlttBufferFaded - adds r0, r1 - ldr r1, _0800E020 @ =0x00007fff - strh r1, [r0] - strh r1, [r2] - ldr r0, _0800E024 @ =gSpriteTemplate_81F9574 - movs r1, 0x6C - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r4, _0800E028 @ =gSharedMem - ldr r2, _0800E02C @ =0x0001608a - adds r7, r4, r2 - strb r0, [r7] - ldr r0, _0800E030 @ =gSpriteTemplate_81F958C - movs r1, 0x84 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r5, _0800E034 @ =0x0001608b - adds r4, r5 - strb r0, [r4] - ldr r3, _0800E038 @ =gSprites - ldrb r1, [r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - b _0800E212 - .align 2, 0 -_0800E010: .4byte 0x00002710 -_0800E014: .4byte gPlttBufferUnfaded -_0800E018: .4byte 0x0000021e -_0800E01C: .4byte gPlttBufferFaded -_0800E020: .4byte 0x00007fff -_0800E024: .4byte gSpriteTemplate_81F9574 -_0800E028: .4byte gSharedMem -_0800E02C: .4byte 0x0001608a -_0800E030: .4byte gSpriteTemplate_81F958C -_0800E034: .4byte 0x0001608b -_0800E038: .4byte gSprites -_0800E03C: - movs r1, 0x12 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _0800E0A4 - ldr r4, _0800E090 @ =gBattle_BG1_X - ldrh r0, [r6, 0xA] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E056 - adds r0, 0x1F -_0800E056: - asrs r1, r0, 5 - movs r2, 0x14 - negs r2, r2 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4] - ldr r4, _0800E094 @ =gBattle_BG2_X - ldrh r0, [r6, 0xC] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E074 - adds r0, 0x1F -_0800E074: - asrs r1, r0, 5 - movs r5, 0x8C - negs r5, r5 - adds r0, r5, 0 - subs r0, r1 - strh r0, [r4] - ldr r0, _0800E098 @ =gBattle_BG1_Y - ldr r2, _0800E09C @ =0x0000ffdc - adds r1, r2, 0 - strh r1, [r0] - ldr r0, _0800E0A0 @ =gBattle_BG2_Y - strh r1, [r0] - b _0800E110 - .align 2, 0 -_0800E090: .4byte gBattle_BG1_X -_0800E094: .4byte gBattle_BG2_X -_0800E098: .4byte gBattle_BG1_Y -_0800E09C: .4byte 0x0000ffdc -_0800E0A0: .4byte gBattle_BG2_Y -_0800E0A4: - ldr r4, _0800E134 @ =gBattle_BG1_X - ldrh r0, [r6, 0xA] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E0B6 - adds r0, 0x1F -_0800E0B6: - asrs r1, r0, 5 - movs r5, 0x14 - negs r5, r5 - adds r0, r5, 0 - subs r0, r1 - strh r0, [r4] - ldr r4, _0800E138 @ =gBattle_BG1_Y - ldrh r0, [r6, 0xA] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E0D4 - adds r0, 0x1F -_0800E0D4: - asrs r0, 5 - subs r0, 0xA4 - strh r0, [r4] - ldr r4, _0800E13C @ =gBattle_BG2_X - ldrh r0, [r6, 0xC] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E0EC - adds r0, 0x1F -_0800E0EC: - asrs r1, r0, 5 - movs r2, 0x8C - negs r2, r2 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4] - ldr r4, _0800E140 @ =gBattle_BG2_Y - ldrh r0, [r6, 0xC] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0800E10A - adds r0, 0x1F -_0800E10A: - asrs r0, 5 - subs r0, 0xA4 - strh r0, [r4] -_0800E110: - ldr r1, _0800E144 @ =gTasks - mov r5, r9 - lsls r0, r5, 2 - add r0, r9 - lsls r0, 3 - adds r1, r0, r1 - ldrh r0, [r1, 0xC] - movs r2, 0xC - ldrsh r7, [r1, r2] - cmp r7, 0 - beq _0800E148 - subs r0, 0x2 - strh r0, [r1, 0xC] - ldrh r0, [r1, 0xA] - adds r0, 0x2 - strh r0, [r1, 0xA] - b _0800E212 - .align 2, 0 -_0800E134: .4byte gBattle_BG1_X -_0800E138: .4byte gBattle_BG1_Y -_0800E13C: .4byte gBattle_BG2_X -_0800E140: .4byte gBattle_BG2_Y -_0800E144: .4byte gTasks -_0800E148: - movs r5, 0x12 - ldrsh r0, [r1, r5] - cmp r0, 0 - beq _0800E154 - bl PrintLinkBattleWinLossTie -_0800E154: - movs r0, 0x78 - bl PlaySE - mov r0, r9 - bl DestroyTask - ldr r4, _0800E224 @ =gSprites - ldr r0, _0800E228 @ =gSharedMem - mov r8, r0 - ldr r1, _0800E22C @ =0x0001608a - add r1, r8 - mov r9, r1 - ldrb r0, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - ldr r5, _0800E230 @ =0x0001608b - add r8, r5 - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - mov r1, r8 - ldrb r0, [r1] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x40 - ldr r5, _0800E234 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _0800E238 @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - mov r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x2E] - mov r2, r8 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0, 0x2E] - mov r5, r9 - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x20] - strh r1, [r0, 0x30] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x20] - strh r1, [r0, 0x30] - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x32] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x32] -_0800E212: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800E224: .4byte gSprites -_0800E228: .4byte gSharedMem -_0800E22C: .4byte 0x0001608a -_0800E230: .4byte 0x0001608b -_0800E234: .4byte 0x000003ff -_0800E238: .4byte 0xfffffc00 - thumb_func_end sub_800DE30 - - thumb_func_start sub_800E23C -sub_800E23C: @ 800E23C - push {r4,r5,lr} - ldr r0, _0800E29C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0800E2DC - ldr r0, _0800E2A0 @ =gVersusFrameGfx - ldr r1, _0800E2A4 @ =0x06004000 - bl LZDecompressVram - ldr r4, _0800E2A8 @ =gVersusFrameTilemap - ldr r1, _0800E2AC @ =0x0600e000 - adds r0, r4, 0 - bl LZDecompressVram - ldr r1, _0800E2B0 @ =0x0600f000 - adds r0, r4, 0 - bl LZDecompressVram - ldr r0, _0800E2B4 @ =gUnknown_08E5DC2C - ldr r1, _0800E2B8 @ =0x06010000 - bl LZDecompressVram - ldr r0, _0800E2BC @ =gVersusFramePal - movs r1, 0x60 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r1, _0800E2C0 @ =REG_BG1CNT - ldr r2, _0800E2C4 @ =0x00005c04 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0800E2C8 @ =REG_WININ - movs r1, 0x36 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r0, _0800E2CC @ =gBattle_BG1_Y - ldr r2, _0800E2D0 @ =0x0000ff5c - adds r1, r2, 0 - strh r1, [r0] - ldr r0, _0800E2D4 @ =gBattle_BG2_Y - strh r1, [r0] - ldr r0, _0800E2D8 @ =gUnknown_081F95A4 - bl LoadCompressedObjectPic - b _0800E3FC - .align 2, 0 -_0800E29C: .4byte gBattleTypeFlags -_0800E2A0: .4byte gVersusFrameGfx -_0800E2A4: .4byte 0x06004000 -_0800E2A8: .4byte gVersusFrameTilemap -_0800E2AC: .4byte 0x0600e000 -_0800E2B0: .4byte 0x0600f000 -_0800E2B4: .4byte gUnknown_08E5DC2C -_0800E2B8: .4byte 0x06010000 -_0800E2BC: .4byte gVersusFramePal -_0800E2C0: .4byte REG_BG1CNT -_0800E2C4: .4byte 0x00005c04 -_0800E2C8: .4byte REG_WININ -_0800E2CC: .4byte gBattle_BG1_Y -_0800E2D0: .4byte 0x0000ff5c -_0800E2D4: .4byte gBattle_BG2_Y -_0800E2D8: .4byte gUnknown_081F95A4 -_0800E2DC: - ldr r0, _0800E2F0 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _0800E300 - ldr r0, _0800E2F4 @ =gBattleTerrainAnimTiles_Building - ldr r1, _0800E2F8 @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E2FC @ =gBattleTerrainAnimTilemap_Building - b _0800E3D2 - .align 2, 0 -_0800E2F0: .4byte 0x00000902 -_0800E2F4: .4byte gBattleTerrainAnimTiles_Building -_0800E2F8: .4byte 0x06004000 -_0800E2FC: .4byte gBattleTerrainAnimTilemap_Building -_0800E300: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0800E348 - ldr r0, _0800E320 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _0800E330 - ldr r0, _0800E324 @ =gBattleTerrainAnimTiles_Cave - ldr r1, _0800E328 @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E32C @ =gBattleTerrainAnimTilemap_Cave - b _0800E3D2 - .align 2, 0 -_0800E320: .4byte gGameVersion -_0800E324: .4byte gBattleTerrainAnimTiles_Cave -_0800E328: .4byte 0x06004000 -_0800E32C: .4byte gBattleTerrainAnimTilemap_Cave -_0800E330: - ldr r0, _0800E33C @ =gBattleTerrainAnimTiles_Underwater - ldr r1, _0800E340 @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E344 @ =gBattleTerrainAnimTilemap_Underwater - b _0800E3D2 - .align 2, 0 -_0800E33C: .4byte gBattleTerrainAnimTiles_Underwater -_0800E340: .4byte 0x06004000 -_0800E344: .4byte gBattleTerrainAnimTilemap_Underwater -_0800E348: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800E3A0 - ldr r2, _0800E370 @ =gTrainers - ldr r0, _0800E374 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0x19 - bne _0800E384 - ldr r0, _0800E378 @ =gBattleTerrainAnimTiles_Building - ldr r1, _0800E37C @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E380 @ =gBattleTerrainAnimTilemap_Building - b _0800E3D2 - .align 2, 0 -_0800E370: .4byte gTrainers -_0800E374: .4byte gTrainerBattleOpponent -_0800E378: .4byte gBattleTerrainAnimTiles_Building -_0800E37C: .4byte 0x06004000 -_0800E380: .4byte gBattleTerrainAnimTilemap_Building -_0800E384: - cmp r0, 0x20 - bne _0800E3A0 - ldr r0, _0800E394 @ =gBattleTerrainAnimTiles_Building - ldr r1, _0800E398 @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E39C @ =gBattleTerrainAnimTilemap_Building - b _0800E3D2 - .align 2, 0 -_0800E394: .4byte gBattleTerrainAnimTiles_Building -_0800E398: .4byte 0x06004000 -_0800E39C: .4byte gBattleTerrainAnimTilemap_Building -_0800E3A0: - bl sav1_map_get_battletype - lsls r0, 24 - cmp r0, 0 - bne _0800E3EC - ldr r4, _0800E3DC @ =gBattleTerrainTable - ldr r5, _0800E3E0 @ =gBattleTerrain - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x8 - adds r0, r1 - ldr r0, [r0] - ldr r1, _0800E3E4 @ =0x06004000 - bl LZDecompressVram - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r4, 0xC - adds r0, r4 - ldr r0, [r0] -_0800E3D2: - ldr r1, _0800E3E8 @ =0x0600e000 - bl LZDecompressVram - b _0800E3FC - .align 2, 0 -_0800E3DC: .4byte gBattleTerrainTable -_0800E3E0: .4byte gBattleTerrain -_0800E3E4: .4byte 0x06004000 -_0800E3E8: .4byte 0x0600e000 -_0800E3EC: - ldr r0, _0800E404 @ =gBattleTerrainAnimTiles_Building - ldr r1, _0800E408 @ =0x06004000 - bl LZDecompressVram - ldr r0, _0800E40C @ =gBattleTerrainAnimTilemap_Building - ldr r1, _0800E410 @ =0x0600e000 - bl LZDecompressVram -_0800E3FC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800E404: .4byte gBattleTerrainAnimTiles_Building -_0800E408: .4byte 0x06004000 -_0800E40C: .4byte gBattleTerrainAnimTilemap_Building -_0800E410: .4byte 0x0600e000 - thumb_func_end sub_800E23C - - thumb_func_start sub_800E414 -sub_800E414: @ 800E414 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - movs r4, 0 - cmp r0, 0x6 - bls _0800E422 - b _0800E7BA -_0800E422: - lsls r0, 2 - ldr r1, _0800E42C @ =_0800E430 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800E42C: .4byte _0800E430 - .align 2, 0 -_0800E430: - .4byte _0800E44C - .4byte _0800E45C - .4byte _0800E474 - .4byte _0800E484 - .4byte _0800E590 - .4byte _0800E69C - .4byte _0800E7B4 -_0800E44C: - ldr r0, _0800E458 @ =gUnknown_08D00000 - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - b _0800E7BC - .align 2, 0 -_0800E458: .4byte gUnknown_08D00000 -_0800E45C: - ldr r0, _0800E46C @ =gUnknown_08D00524 - ldr r1, _0800E470 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 4 - bl CpuSet - b _0800E7BC - .align 2, 0 -_0800E46C: .4byte gUnknown_08D00524 -_0800E470: .4byte 0x0600c000 -_0800E474: - ldr r0, _0800E480 @ =gUnknown_08D004E0 - movs r1, 0 - movs r2, 0x40 - bl LoadCompressedPalette - b _0800E7BC - .align 2, 0 -_0800E480: .4byte gUnknown_08D004E0 -_0800E484: - ldr r0, _0800E4A8 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0800E4AC @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _0800E492 - b _0800E57C -_0800E492: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0800E4C0 - ldr r0, _0800E4B0 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _0800E4B8 - ldr r0, _0800E4B4 @ =gBattleTerrainTiles_Cave - b _0800E57E .align 2, 0 -_0800E4A8: .4byte gBattleTypeFlags -_0800E4AC: .4byte 0x00000902 -_0800E4B0: .4byte gGameVersion -_0800E4B4: .4byte gBattleTerrainTiles_Cave -_0800E4B8: - ldr r0, _0800E4BC @ =gBattleTerrainTiles_Water - b _0800E57E - .align 2, 0 -_0800E4BC: .4byte gBattleTerrainTiles_Water -_0800E4C0: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800E4F0 - ldr r2, _0800E4E4 @ =gTrainers - ldr r0, _0800E4E8 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0x19 - beq _0800E57C - cmp r0, 0x20 - bne _0800E4F0 - ldr r0, _0800E4EC @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E4E4: .4byte gTrainers -_0800E4E8: .4byte gTrainerBattleOpponent -_0800E4EC: .4byte gBattleTerrainTiles_Stadium -_0800E4F0: - bl sav1_map_get_battletype - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bls _0800E4FE - b _0800E7BC -_0800E4FE: - lsls r0, 2 - ldr r1, _0800E508 @ =_0800E50C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800E508: .4byte _0800E50C - .align 2, 0 -_0800E50C: - .4byte _0800E530 - .4byte _0800E57C - .4byte _0800E54C - .4byte _0800E554 - .4byte _0800E55C - .4byte _0800E564 - .4byte _0800E56C - .4byte _0800E574 - .4byte _0800E57C -_0800E530: - ldr r2, _0800E544 @ =gBattleTerrainTable - ldr r0, _0800E548 @ =gBattleTerrain - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - b _0800E57E - .align 2, 0 -_0800E544: .4byte gBattleTerrainTable -_0800E548: .4byte gBattleTerrain -_0800E54C: - ldr r0, _0800E550 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E550: .4byte gBattleTerrainTiles_Stadium -_0800E554: - ldr r0, _0800E558 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E558: .4byte gBattleTerrainTiles_Stadium -_0800E55C: - ldr r0, _0800E560 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E560: .4byte gBattleTerrainTiles_Stadium -_0800E564: - ldr r0, _0800E568 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E568: .4byte gBattleTerrainTiles_Stadium -_0800E56C: - ldr r0, _0800E570 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E570: .4byte gBattleTerrainTiles_Stadium -_0800E574: - ldr r0, _0800E578 @ =gBattleTerrainTiles_Stadium - b _0800E57E - .align 2, 0 -_0800E578: .4byte gBattleTerrainTiles_Stadium -_0800E57C: - ldr r0, _0800E588 @ =gBattleTerrainTiles_Building -_0800E57E: - ldr r1, _0800E58C @ =0x06008000 - bl LZDecompressVram - b _0800E7BC - .align 2, 0 -_0800E588: .4byte gBattleTerrainTiles_Building -_0800E58C: .4byte 0x06008000 -_0800E590: - ldr r0, _0800E5B4 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0800E5B8 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _0800E59E - b _0800E688 -_0800E59E: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0800E5CC - ldr r0, _0800E5BC @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _0800E5C4 - ldr r0, _0800E5C0 @ =gBattleTerrainTilemap_Cave - b _0800E68A - .align 2, 0 -_0800E5B4: .4byte gBattleTypeFlags -_0800E5B8: .4byte 0x00000902 -_0800E5BC: .4byte gGameVersion -_0800E5C0: .4byte gBattleTerrainTilemap_Cave -_0800E5C4: - ldr r0, _0800E5C8 @ =gBattleTerrainTilemap_Water - b _0800E68A - .align 2, 0 -_0800E5C8: .4byte gBattleTerrainTilemap_Water -_0800E5CC: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800E5FC - ldr r2, _0800E5F0 @ =gTrainers - ldr r0, _0800E5F4 @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0x19 - beq _0800E688 - cmp r0, 0x20 - bne _0800E5FC - ldr r0, _0800E5F8 @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E5F0: .4byte gTrainers -_0800E5F4: .4byte gTrainerBattleOpponent -_0800E5F8: .4byte gBattleTerrainTilemap_Stadium -_0800E5FC: - bl sav1_map_get_battletype - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bls _0800E60A - b _0800E7BC -_0800E60A: - lsls r0, 2 - ldr r1, _0800E614 @ =_0800E618 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800E614: .4byte _0800E618 - .align 2, 0 -_0800E618: - .4byte _0800E63C - .4byte _0800E688 - .4byte _0800E658 - .4byte _0800E660 - .4byte _0800E668 - .4byte _0800E670 - .4byte _0800E678 - .4byte _0800E680 - .4byte _0800E688 -_0800E63C: - ldr r2, _0800E650 @ =gBattleTerrainTable - ldr r0, _0800E654 @ =gBattleTerrain - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, 0x4 - adds r0, r2 - ldr r0, [r0] - b _0800E68A - .align 2, 0 -_0800E650: .4byte gBattleTerrainTable -_0800E654: .4byte gBattleTerrain -_0800E658: - ldr r0, _0800E65C @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E65C: .4byte gBattleTerrainTilemap_Stadium -_0800E660: - ldr r0, _0800E664 @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E664: .4byte gBattleTerrainTilemap_Stadium -_0800E668: - ldr r0, _0800E66C @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E66C: .4byte gBattleTerrainTilemap_Stadium -_0800E670: - ldr r0, _0800E674 @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E674: .4byte gBattleTerrainTilemap_Stadium -_0800E678: - ldr r0, _0800E67C @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E67C: .4byte gBattleTerrainTilemap_Stadium -_0800E680: - ldr r0, _0800E684 @ =gBattleTerrainTilemap_Stadium - b _0800E68A - .align 2, 0 -_0800E684: .4byte gBattleTerrainTilemap_Stadium -_0800E688: - ldr r0, _0800E694 @ =gBattleTerrainTilemap_Building -_0800E68A: - ldr r1, _0800E698 @ =0x0600d000 - bl LZDecompressVram - b _0800E7BC - .align 2, 0 -_0800E694: .4byte gBattleTerrainTilemap_Building -_0800E698: .4byte 0x0600d000 -_0800E69C: - ldr r0, _0800E6C0 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _0800E6C4 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _0800E6AA - b _0800E7A4 -_0800E6AA: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0800E6D8 - ldr r0, _0800E6C8 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - bne _0800E6D0 - ldr r0, _0800E6CC @ =gBattleTerrainPalette_Groudon - b _0800E7A6 - .align 2, 0 -_0800E6C0: .4byte gBattleTypeFlags -_0800E6C4: .4byte 0x00000902 -_0800E6C8: .4byte gGameVersion -_0800E6CC: .4byte gBattleTerrainPalette_Groudon -_0800E6D0: - ldr r0, _0800E6D4 @ =gBattleTerrainPalette_Kyogre - b _0800E7A6 - .align 2, 0 -_0800E6D4: .4byte gBattleTerrainPalette_Kyogre -_0800E6D8: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800E710 - ldr r2, _0800E6F8 @ =gTrainers - ldr r0, _0800E6FC @ =gTrainerBattleOpponent - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - cmp r0, 0x19 - bne _0800E704 - ldr r0, _0800E700 @ =gBattleTerrainPalette_BuildingLeader - b _0800E7A6 - .align 2, 0 -_0800E6F8: .4byte gTrainers -_0800E6FC: .4byte gTrainerBattleOpponent -_0800E700: .4byte gBattleTerrainPalette_BuildingLeader -_0800E704: - cmp r0, 0x20 - bne _0800E710 - ldr r0, _0800E70C @ =gBattleTerrainPalette_StadiumSteven - b _0800E7A6 - .align 2, 0 -_0800E70C: .4byte gBattleTerrainPalette_StadiumSteven -_0800E710: - bl sav1_map_get_battletype - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bhi _0800E7BC - lsls r0, 2 - ldr r1, _0800E728 @ =_0800E72C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800E728: .4byte _0800E72C - .align 2, 0 -_0800E72C: - .4byte _0800E750 - .4byte _0800E76C - .4byte _0800E774 - .4byte _0800E77C - .4byte _0800E784 - .4byte _0800E78C - .4byte _0800E794 - .4byte _0800E79C - .4byte _0800E7A4 -_0800E750: - ldr r2, _0800E764 @ =gBattleTerrainTable - ldr r0, _0800E768 @ =gBattleTerrain - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, 0x10 - adds r0, r2 - ldr r0, [r0] - b _0800E7A6 - .align 2, 0 -_0800E764: .4byte gBattleTerrainTable -_0800E768: .4byte gBattleTerrain -_0800E76C: - ldr r0, _0800E770 @ =gBattleTerrainPalette_BuildingGym - b _0800E7A6 - .align 2, 0 -_0800E770: .4byte gBattleTerrainPalette_BuildingGym -_0800E774: - ldr r0, _0800E778 @ =gBattleTerrainPalette_StadiumMagma - b _0800E7A6 - .align 2, 0 -_0800E778: .4byte gBattleTerrainPalette_StadiumMagma -_0800E77C: - ldr r0, _0800E780 @ =gBattleTerrainPalette_StadiumAqua - b _0800E7A6 - .align 2, 0 -_0800E780: .4byte gBattleTerrainPalette_StadiumAqua -_0800E784: - ldr r0, _0800E788 @ =gBattleTerrainPalette_StadiumSidney - b _0800E7A6 - .align 2, 0 -_0800E788: .4byte gBattleTerrainPalette_StadiumSidney -_0800E78C: - ldr r0, _0800E790 @ =gBattleTerrainPalette_StadiumPhoebe - b _0800E7A6 - .align 2, 0 -_0800E790: .4byte gBattleTerrainPalette_StadiumPhoebe -_0800E794: - ldr r0, _0800E798 @ =gBattleTerrainPalette_StadiumGlacia - b _0800E7A6 - .align 2, 0 -_0800E798: .4byte gBattleTerrainPalette_StadiumGlacia -_0800E79C: - ldr r0, _0800E7A0 @ =gBattleTerrainPalette_StadiumDrake - b _0800E7A6 - .align 2, 0 -_0800E7A0: .4byte gBattleTerrainPalette_StadiumDrake -_0800E7A4: - ldr r0, _0800E7B0 @ =gBattleTerrainPalette_BattleTower -_0800E7A6: - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette - b _0800E7BC - .align 2, 0 -_0800E7B0: .4byte gBattleTerrainPalette_BattleTower -_0800E7B4: - bl sub_800D74C - b _0800E7BC -_0800E7BA: - movs r4, 0x1 -_0800E7BC: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_800E414 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/graphics.s b/data/graphics.s index 6d678ede9..7970dc904 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -3,15 +3,15 @@ .section gfx_data, "aw", %progbits .align 2 -gUnknown_08D00000:: @ 8D00000 +gBattleTextboxTiles:: @ 8D00000 .incbin "graphics/interface/menu.4bpp.lz" @ menu window and arrows .align 2 -gUnknown_08D004E0:: @ 8D004E0 +gBattleTextboxPalette:: @ 8D004E0 .incbin "graphics/interface/menu.gbapal.lz" .align 2 -gUnknown_08D00524:: @ 8D00524 +gBattleTextboxTilemap:: @ 8D00524 .incbin "graphics/interface/menu_map.bin" @ 8D01524 diff --git a/include/battle.h b/include/battle.h index 544e65b80..d5add3d43 100644 --- a/include/battle.h +++ b/include/battle.h @@ -710,11 +710,11 @@ extern u8 gBattleTextBuff1[]; // asm/battle_1.o void sub_800D6D4(); -void sub_800D74C(); +void ApplyPlayerChosenFrameToBattleMenu(); void DrawMainBattleBackground(void); -void sub_800DAB8(); +void LoadBattleTextboxAndBackground(); void sub_800DE30(u8); -void sub_800E23C(); +void LoadBattleEntryBackground(); // src/battle_2.o void sub_800E7C4(void); diff --git a/include/graphics.h b/include/graphics.h index 889dc3916..b779c2dcd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2634,9 +2634,9 @@ extern const u16 gUnknown_08EA02C8[]; extern const u16 gUnknown_08EA0348[]; extern const u16 gUnknown_08EA15C8[]; extern const u16 gTradeMonBoxTilemap[]; -extern const u8 gUnknown_08D00000[]; -extern const u16 gUnknown_08D00524[]; -extern const u8 gUnknown_08D004E0[]; +extern const u8 gBattleTextboxTiles[]; +extern const u16 gBattleTextboxTilemap[]; +extern const u8 gBattleTextboxPalette[]; extern const u8 gNamingScreenBackButtonTiles[]; extern const u8 gNamingScreenOKButtonTiles[]; diff --git a/ld_script.txt b/ld_script.txt index c7ed19a0b..245dbdb19 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -48,8 +48,7 @@ SECTIONS { src/rom3.o(.text); src/decompress.o(.text); asm/battle_1.o(.text); - src/rom_800D42C.o(.text); - asm/battle_1.o(.text_800DC24); + src/battle/battle_bg.o(.text); src/battle/battle_2.o(.text); src/battle/battle_util.o(.text); src/battle/battle_4.o(.text); diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 2bbae20dc..2d5b3c420 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -75,7 +75,7 @@ extern void sub_802BBD4(); extern struct SpriteTemplate gUnknown_02024E8C; extern const u8 Str_821F7B8[]; extern u8 gUnknown_02023A14_50; -extern const u16 gUnknown_08D004E0[]; +extern const u16 gBattleTextboxPalette[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; extern const u8 Str_821F7EA[]; extern const u8 gUnknown_Debug_821F7F3[]; @@ -269,10 +269,10 @@ void InitBattle(void) Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); - sub_800DAB8(); + LoadBattleTextboxAndBackground(); ResetSpriteData(); ResetTasks(); - sub_800E23C(); + LoadBattleEntryBackground(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; SetVBlankCallback(sub_800FCFC); @@ -788,16 +788,14 @@ void sub_800F298(void) ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); gBattleCommunication[0]++; - goto step_2; - } - break; + // fallthrough case 2: - step_2: - if (IsLinkTaskFinished()) - { - SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); - gBattleCommunication[0]++; - } + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); + gBattleCommunication[0]++; + } + } break; case 3: if ((GetBlockReceivedStatus() & 0xF) == 0xF) @@ -1309,11 +1307,11 @@ void c2_8011A1C(void) Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); - LoadCompressedPalette(gUnknown_08D004E0, 0, 64); - sub_800D74C(); + LoadCompressedPalette(gBattleTextboxPalette, 0, 64); + ApplyPlayerChosenFrameToBattleMenu(); ResetSpriteData(); ResetTasks(); - sub_800E23C(); + LoadBattleEntryBackground(); REG_WINOUT = 0x37; FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; @@ -2833,7 +2831,7 @@ void debug_sub_8012688(void) gBattle_BG3_Y = 0; gBattleTerrain = 9; sub_800D6D4(); - sub_800DAB8(); + LoadBattleTextboxAndBackground(); ResetSpriteData(); ResetTasks(); FreeAllSpritePalettes(); diff --git a/src/battle/battle_bg.c b/src/battle/battle_bg.c new file mode 100644 index 000000000..f97829833 --- /dev/null +++ b/src/battle/battle_bg.c @@ -0,0 +1,763 @@ +#include "global.h" +#include "battle.h" +#include "constants/songs.h" +#include "decompress.h" +#include "ewram.h" +#include "link.h" +#include "main.h" +#include "palette.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trainer.h" +#include "trig.h" +#include "sound.h" + + +extern u16 gBattleTypeFlags; +extern u8 gBattleOutcome; + +extern struct Window gUnknown_03004210; + +extern u8 BattleText_Win[]; +extern u8 BattleText_Loss[]; +extern u8 BattleText_Tie[]; + +extern void sub_8032A38(void); + +#define GetCurrentMapBattleScene sav1_map_get_battletype +//extern u8 GetCurrentMapBattleScene(void); + +extern const u8 gGameVersion; +extern u8 gBattleTextboxTiles[]; +extern u16 gBattleTextboxTilemap[]; +extern u16 gBattleTextboxPalette[]; +extern u16 gBattleTypeFlags; +extern struct Trainer gTrainers[]; +extern u16 gTrainerBattleOpponent; + +struct BattleBackground { + void *tileset; + void *tilemap; + void *entryTiles; + void *entryTilemap; + void *palette; +}; +extern struct BattleBackground gBattleTerrainTable[]; + +extern u8 gBattleTerrain; + +extern u8 gBattleTerrainTiles_Cave[]; +extern u8 gBattleTerrainTiles_Water[]; +extern u8 gBattleTerrainTiles_Building[]; +extern u8 gBattleTerrainTiles_Stadium[]; + +extern u16 gBattleTerrainTilemap_Cave[]; +extern u16 gBattleTerrainTilemap_Water[]; +extern u16 gBattleTerrainTilemap_Building[]; +extern u16 gBattleTerrainTilemap_Stadium[]; + +extern u16 gBattleTerrainPalette_Groudon[]; +extern u16 gBattleTerrainPalette_Kyogre[]; +extern u16 gBattleTerrainPalette_BuildingLeader[]; +extern u16 gBattleTerrainPalette_StadiumSteven[]; +extern u16 gBattleTerrainPalette_BuildingGym[]; +extern u16 gBattleTerrainPalette_StadiumMagma[]; +extern u16 gBattleTerrainPalette_StadiumAqua[]; +extern u16 gBattleTerrainPalette_StadiumSidney[]; +extern u16 gBattleTerrainPalette_StadiumPhoebe[]; +extern u16 gBattleTerrainPalette_StadiumGlacia[]; +extern u16 gBattleTerrainPalette_StadiumDrake[]; +extern u16 gBattleTerrainPalette_BattleTower[]; + +extern u8 gBattleTerrainAnimTiles_Building[]; +extern u16 gBattleTerrainAnimTilemap_Building[]; +extern u8 gBattleTerrainAnimTiles_Cave[]; +extern u16 gBattleTerrainAnimTilemap_Cave[]; +extern u8 gBattleTerrainAnimTiles_Underwater[]; +extern u16 gBattleTerrainAnimTilemap_Underwater[]; +extern u8 gVersusFrameGfx[]; +extern u16 gVersusFrameTilemap[]; +extern u8 gUnknown_08E5DC2C[]; +extern u16 gVersusFramePal[]; + +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_Y; +extern struct CompressedSpriteSheet gUnknown_081F95A4; + +extern u8 sav1_map_get_battletype(void); + +struct LinkResultWindow { + struct Window *window; + u16 offset; + u8 left; + u8 top; + u8 *dest; +}; + +#define gLinkResultWindows gUnknown_081F9680 +extern const struct LinkResultWindow gLinkResultWindows[]; +extern void PrintLinkBattleWinLossTie(void); +extern void sub_800DAF8(u8, u8, u8 *); + +extern struct SpriteTemplate gSpriteTemplate_81F9574; +extern struct SpriteTemplate gSpriteTemplate_81F958C; +extern struct SpriteTemplate gSpriteTemplate_81F96D0; + +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG2_X; + + +void sub_800D6C4(void); + + +void unref_sub_800D684(void) +{ + u8 spriteId; + ResetSpriteData(); + spriteId = CreateSprite(&gSpriteTemplate_81F96D0, 0, 0, 0); + gSprites[spriteId].invisible = TRUE; + SetMainCallback2(sub_800D6C4); +} + +void sub_800D6C4(void) +{ + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_800D6D4(void) +{ + u16 ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT = DISPSTAT_VBLANK_INTR; + REG_BG0CNT = 0x9800; + REG_BG1CNT = 0x9c04; + REG_BG2CNT = 0x5e05; + REG_BG3CNT = 0x5a0b; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_DISPCNT = 0xbf40; +} + +void ApplyPlayerChosenFrameToBattleMenu(void) +{ + TextWindow_SetBaseTileNum(0x12); + TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + TextWindow_SetBaseTileNum(0x22); + TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + gPlttBufferUnfaded[92] = 0x7fe0; + gPlttBufferUnfaded[93] = 0x2529; + gPlttBufferUnfaded[94] = 0x7fff; + gPlttBufferUnfaded[95] = 0x675a; + CpuSet(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], 4); + sub_8032A38(); +} + +void DrawMainBattleBackground(void) +{ + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER /*| BATTLE_TYPE_x2000000*/)) + { + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + } + else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + { + if (gGameVersion == VERSION_RUBY) + { + LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + } + else + { + LZDecompressVram(gBattleTerrainTiles_Water, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + u8 trainerClass = gTrainers[gTrainerBattleOpponent].trainerClass; + if (trainerClass == TRAINER_CLASS_LEADER) + { + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); + return; + } + else if (trainerClass == TRAINER_CLASS_CHAMPION) + { + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumSteven, 0x20, 0x60); + return; + } + } + + switch (GetCurrentMapBattleScene()) + { + case MAP_BATTLE_SCENE_NORMAL: + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_GYM: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_MAGMA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_AQUA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_SIDNEY: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_PHOEBE: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_GLACIA: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_DRAKE: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60); + break; + case MAP_BATTLE_SCENE_BATTLE_TOWER: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000)); + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + break; + } + } +} + +void LoadBattleTextboxAndBackground(void) +{ + LZDecompressVram(gBattleTextboxTiles, (void*)(BG_VRAM)); + CpuSet(gBattleTextboxTilemap, (void *)(VRAM + 0xC000), 0x800); + LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); + ApplyPlayerChosenFrameToBattleMenu(); + DrawMainBattleBackground(); + + #if DEBUG + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + debug_sub_8008218((void*)(VRAM + 0x600), 0, (void*)(VRAM + 0xC000), 1); + debug_sub_8008264(257, 3, 1, 3, 1); + debug_sub_8008264(257, 3, 21, 3, 1); + debug_sub_8008264(257, 3, 41, 3, 1); + } + #endif +} + +void sub_800DAF8(u8 taskId, u8 windowId, u8 *dest) +{ + int i; + u16 r4 = 0; + u16 src[6]; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { + if (gTasks[taskId].data[5]) { + switch (windowId) { + case 0: + r4 = gTasks[taskId].data[3] & 0x3f; + break; + case 1: + r4 = (gTasks[taskId].data[4] & 0xfc0) >> 6; + break; + case 2: + r4 = (gTasks[taskId].data[3] & 0xfc0) >> 6; + break; + case 3: + r4 = gTasks[taskId].data[4] & 0x3f; + break; + } + } else { + switch (windowId) { + case 0: + r4 = gTasks[taskId].data[3] & 0x3f; + break; + case 1: + r4 = gTasks[taskId].data[4] & 0x3f; + break; + case 2: + r4 = (gTasks[taskId].data[3] & 0xfc0) >> 6; + break; + case 3: + r4 = (gTasks[taskId].data[4] & 0xfc0) >> 6; + break; + } + } + for (i = 0; i < 3; i++) { + src[i] = ((r4 & (3 << (i * 2))) >> (i * 2)) + 0x6001; + } + CpuSet(src, dest, 3); + } else { + if (windowId == gBattleStruct->linkPlayerIndex) { + r4 = gTasks[taskId].data[3]; + } else { + r4 = gTasks[taskId].data[4]; + } + for (i = 0; i < 6; i++) { + src[i] = ((r4 & (3 << (i * 2))) >> (i * 2)) + 0x6001; + } + CpuSet(src, dest, 6); + } +} + + +#if ENGLISH +#define LEFT_MESSAGE_X 6 +#define RIGHT_MESSAGE_X 21 +#define TILE_OFFSET_LOSS 168 +#elif GERMAN +#define LEFT_MESSAGE_X 5 +#define RIGHT_MESSAGE_X 20 +#define TILE_OFFSET_LOSS 172 +#endif +#define TILE_OFFSET_WIN 160 +#define CENTER_MESSAGE_X 13 +#define MESSAGE_Y 2 + +#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ +{ \ + Text_InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ + Text_PrintWindow8002F44(&gUnknown_03004210); \ +} + +#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 PrintLinkBattleWinLossTie(void) +{ + + if (gBattleOutcome == 3) + { + PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); + return; + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + // Double battle? + + if (gBattleOutcome == 1) + { + + // lp_field_18 = player position? + switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) + { + case 0: + case 2: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 1: + case 3: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) + return; + } + } + else + { + + switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) + { + case 1: + case 3: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 0: + case 2: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + } + } + + return; + } + + + if (gBattleOutcome == 1) + { + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } + else + { + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } +} + + +void sub_800DE30(u8 taskId) +{ + u8 palette; + int i; + + switch (gTasks[taskId].data[0]) { + + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { + for (i = 0; i < 4; i++) { + u8 windowId = (gLinkPlayers[i].lp_field_18 & 3); + Text_InitWindow8002E4C( + gLinkResultWindows[windowId].window, + gLinkPlayers[i].name, + gLinkResultWindows[windowId].offset, + gLinkResultWindows[windowId].left, + gLinkResultWindows[windowId].top, + 1); + Text_PrintWindow8002F44(gLinkResultWindows[windowId].window); + sub_800DAF8(taskId, windowId, gLinkResultWindows[windowId].dest); + } + } else { + u8 windowId = 4; + + u8 playerId = gBattleStruct->linkPlayerIndex; + u8 opponentId = gBattleStruct->linkPlayerIndex ^ 1; + if (gLinkPlayers[playerId].lp_field_18) { + opponentId = gBattleStruct->linkPlayerIndex; + playerId = gBattleStruct->linkPlayerIndex ^ 1; + } + + Text_InitWindow8002E4C( + gLinkResultWindows[windowId].window, + gLinkPlayers[playerId].name, + gLinkResultWindows[windowId].offset, + gLinkResultWindows[windowId].left, + gLinkResultWindows[windowId].top, + 1); + Text_PrintWindow8002F44(gLinkResultWindows[windowId].window); + sub_800DAF8(taskId, playerId, gLinkResultWindows[windowId].dest); + + Text_InitWindow8002E4C( + gLinkResultWindows[windowId + 1].window, + gLinkPlayers[opponentId].name, + gLinkResultWindows[windowId + 1].offset, + gLinkResultWindows[windowId + 1].left, + gLinkResultWindows[windowId + 1].top, + 1); + Text_PrintWindow8002F44(gLinkResultWindows[windowId + 1].window); + sub_800DAF8(taskId, opponentId, gLinkResultWindows[windowId + 1].dest); + } + gTasks[taskId].data[0]++; + break; + + case 1: + palette = AllocSpritePalette(10000); + gPlttBufferUnfaded[palette * 16 + 0x10f] = gPlttBufferFaded[palette * 16 + 0x10f] = 0x7fff; + gBattleStruct->unk1608A = CreateSprite(&gSpriteTemplate_81F9574, 108, 80, 0); + gBattleStruct->unk1608B = CreateSprite(&gSpriteTemplate_81F958C, 132, 80, 0); + gSprites[gBattleStruct->unk1608A].invisible = TRUE; + gSprites[gBattleStruct->unk1608B].invisible = TRUE; + gTasks[taskId].data[0]++; + break; + + case 2: + if (gTasks[taskId].data[5]) { + gBattle_BG1_X = (-20) - (Sin2(gTasks[taskId].data[1]) / 32); + gBattle_BG2_X = (-140) - (Sin2(gTasks[taskId].data[2]) / 32); + gBattle_BG1_Y = -36; + gBattle_BG2_Y = -36; + } else { + gBattle_BG1_X = (-20) - (Sin2(gTasks[taskId].data[1]) / 32); + gBattle_BG1_Y = (-164) + (Cos2(gTasks[taskId].data[1]) / 32); + gBattle_BG2_X = (-140) - (Sin2(gTasks[taskId].data[2]) / 32); + gBattle_BG2_Y = (-164) + (Cos2(gTasks[taskId].data[2]) / 32); + } + if (gTasks[taskId].data[2]) { + gTasks[taskId].data[2] -= 2; + gTasks[taskId].data[1] += 2; + } else { + if (gTasks[taskId].data[5]) { + PrintLinkBattleWinLossTie(); + } + PlaySE(SE_W231); + DestroyTask(taskId); + gSprites[gBattleStruct->unk1608A].invisible = FALSE; + gSprites[gBattleStruct->unk1608B].invisible = FALSE; + gSprites[gBattleStruct->unk1608B].oam.tileNum += 0x40; + gSprites[gBattleStruct->unk1608A].data[0] = 0; + gSprites[gBattleStruct->unk1608B].data[0] = 1; + gSprites[gBattleStruct->unk1608A].data[1] = gSprites[gBattleStruct->unk1608A].pos1.x; + gSprites[gBattleStruct->unk1608B].data[1] = gSprites[gBattleStruct->unk1608B].pos1.x; + gSprites[gBattleStruct->unk1608A].data[2] = 0; + gSprites[gBattleStruct->unk1608B].data[2] = 0; + } + break; + } +} + +void LoadBattleEntryBackground(void) { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) { + LZDecompressVram(gVersusFrameGfx, (void *)0x6004000); + LZDecompressVram(gVersusFrameTilemap, (void *)0x600e000); + LZDecompressVram(gVersusFrameTilemap, (void *)0x600f000); + LZDecompressVram(gUnknown_08E5DC2C, (void *)0x6010000); + LoadCompressedPalette(gVersusFramePal, 0x60, 0x20); + REG_BG1CNT = 0x5c04; + REG_WININ = 0x36; + REG_WINOUT = 0x36; + gBattle_BG1_Y = 0xff5c; + gBattle_BG2_Y = 0xff5c; + LoadCompressedObjectPic(&gUnknown_081F95A4); + return; + } else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) { + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)0x600e000); + return; + } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { + if (gGameVersion == VERSION_RUBY) { + LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void *)0x600e000); + return; + } else { + LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void *)0x600e000); + return; + } + } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { + if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) { + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)0x600e000); + return; + } else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) { + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)0x600e000); + return; + } + } + if (sav1_map_get_battletype() == 0) { + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTiles, (void *)0x6004000); + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)0x600e000); + return; + } + LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)0x6004000); + LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)0x600e000); +} + +int LoadChosenBattleElement(u8 type) { + int ret = 0; + switch (type) { + case 0: + LZDecompressVram(&gBattleTextboxTiles, (void *)0x6000000); + break; + case 1: + CpuCopy16(gBattleTextboxTilemap, (void *)0x600c000, 0x1000); + break; + case 2: + LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); + break; + case 3: // tiles + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) { + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { + if (gGameVersion == VERSION_RUBY) { + LZDecompressVram(gBattleTerrainTiles_Cave, (void *)0x6008000); + break; + } else { + LZDecompressVram(gBattleTerrainTiles_Water, (void *)0x6008000); + break; + } + } else { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { + if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) { + LZDecompressVram(gBattleTerrainTiles_Building, (void *)0x6008000); + break; + } else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) { + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + } + } + switch (sav1_map_get_battletype()) { + case 0: + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void *)0x6008000); + break; + case 2: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 3: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 4: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 5: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 6: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 7: + LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)0x6008000); + break; + case 1: + case 8: + LZDecompressVram(gBattleTerrainTiles_Building, (void *)0x6008000); + break; + } + break; + } + } else { + LZDecompressVram(gBattleTerrainTiles_Building, (void *)0x6008000); + break; + } + case 4: // tilemap + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) { + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { + if (gGameVersion == 2) { + LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)0x600d000); + break; + } else { + LZDecompressVram(gBattleTerrainTilemap_Water, (void *)0x600d000); + break; + } + } else { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { + if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) { + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)0x600d000); + break; + } else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) { + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + } + } + switch (sav1_map_get_battletype()) { + case 0: + LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void *)0x600d000); + break; + case 2: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 3: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 4: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 5: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 6: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 7: + LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)0x600d000); + break; + case 1: + case 8: + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)0x600d000); + break; + } + break; + } + } else { + LZDecompressVram(gBattleTerrainTilemap_Building, (void *)0x600d000); + break; + } + case 5: // palette + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) { + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { + if (gGameVersion == 2) { + LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + break; + } else { + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + break; + } + } else { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { + if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) { + LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); + break; + } else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) { + LoadCompressedPalette(gBattleTerrainPalette_StadiumSteven, 0x20, 0x60); + break; + } + } + switch (sav1_map_get_battletype()) { + case 0: + LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + break; + case 1: + LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); + break; + case 2: + LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60); + break; + case 3: + LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60); + break; + case 4: + LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60); + break; + case 5: + LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60); + break; + case 6: + LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60); + break; + case 7: + LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60); + break; + case 8: + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + break; + } + break; + } + } else { + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + break; + } + case 6: + ApplyPlayerChosenFrameToBattleMenu(); + break; + default: + ret = 1; + } + return ret; +} diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index ec4a26bc5..86b272bcb 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -801,25 +801,25 @@ static u8 GetTrainerBattleTransition(void) u8 enemyLevel; u8 playerLevel; - if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) // link battle? + if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) return B_TRANSITION_STEVEN; trainer = gTrainers; - if (trainer[gTrainerBattleOpponent].trainerClass == 24) // league? + if (trainer[gTrainerBattleOpponent].trainerClass == TRAINER_CLASS_ELITE_FOUR) { - if (gTrainerBattleOpponent == 261) + if (gTrainerBattleOpponent == OPPONENT_SIDNEY) return B_TRANSITION_SYDNEY; - if (gTrainerBattleOpponent == 262) + if (gTrainerBattleOpponent == OPPONENT_PHOEBE) return B_TRANSITION_PHOEBE; - if (gTrainerBattleOpponent == 263) + if (gTrainerBattleOpponent == OPPONENT_GLACIA) return B_TRANSITION_GLACIA; - if (gTrainerBattleOpponent == 264) + if (gTrainerBattleOpponent == OPPONENT_DRAKE) return B_TRANSITION_DRAKE; return B_TRANSITION_STEVEN; } - if (trainer[gTrainerBattleOpponent].trainerClass == 32) // team leader? + if (trainer[gTrainerBattleOpponent].trainerClass == TRAINER_CLASS_CHAMPION) return B_TRANSITION_STEVEN; if (trainer[gTrainerBattleOpponent].doubleBattle == TRUE) @@ -1095,7 +1095,7 @@ void CB2_EndTrainerBattle(void) { if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) { - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { @@ -1112,7 +1112,7 @@ void CB2_EndTrainerEyeRematchBattle(void) { if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) { - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 0da29441e..85aa78ca0 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -29,7 +29,7 @@ extern u8 gBankSpriteIds[4]; extern u8 gBattleMonForms[4]; extern u8 gHealthboxIDs[4]; -bool8 sub_800E414(u8 a0); +bool8 LoadChosenBattleElement(u8 a0); bool8 sub_8031C30(u8 a0); void sub_8031EE8(void); void sub_80327CC(void); @@ -97,7 +97,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) } break; case 2: - if (!sub_800E414(gHelperState)) + if (!LoadChosenBattleElement(gHelperState)) { gHelperState++; gReshowState--; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 282ad31fb..5bba69f86 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -40,9 +40,9 @@ struct EggHatchData struct EggHatchData* gEggHatchData; -extern const u32 gUnknown_08D00000[]; -extern const u32 gUnknown_08D00524[]; -extern const u16 gUnknown_08D004E0[]; //palette +extern const u32 gBattleTextboxTiles[]; +extern const u32 gBattleTextboxTilemap[]; +extern const u16 gBattleTextboxPalette[]; //palette extern const struct SpriteSheet sUnknown_0820A3B0; extern const struct SpriteSheet sUnknown_0820A3B8; extern const struct SpritePalette sUnknown_0820A3C0; @@ -478,10 +478,10 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 2: - LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM)); - CpuSet(&gUnknown_08D00524, ewram0_7, 0x800); + LZDecompressVram(&gBattleTextboxTiles, (void*)(VRAM)); + CpuSet(&gBattleTextboxTilemap, ewram0_7, 0x800); DmaCopy16(3, ewram0_7, (void*)(VRAM + 0x2800), 0x500); - LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20); + LoadCompressedPalette(&gBattleTextboxPalette, 0, 0x20); gMain.state++; break; case 3: diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 3ba325574..a3a5dbcec 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -212,7 +212,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); - sub_800DAB8(); + LoadBattleTextboxAndBackground(); ResetSpriteData(); ScanlineEffect_Stop(); ResetTasks(); @@ -320,7 +320,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); - sub_800DAB8(); + LoadBattleTextboxAndBackground(); ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; diff --git a/src/pokedex.c b/src/pokedex.c index 711dc69fa..f7baced63 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3922,8 +3922,8 @@ static void sub_8090B8C(u8 taskId) const u8 *lzPaletteData; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000); - sub_800D74C(); + CpuCopy16(gBattleTextboxTilemap, (void *)(VRAM + 0xC000), 0x1000); + ApplyPlayerChosenFrameToBattleMenu(); species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]); otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 7fd1aa7b2..17f073815 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -1102,8 +1102,8 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) } } - gBattleTypeFlags = 8; - gTrainerBattleOpponent = 1024; + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + gTrainerBattleOpponent = SECRET_BASE_OPPONENT; } const u8 gSecretBaseTrainerClasses[][5] = { diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c deleted file mode 100644 index a1b0f5ecb..000000000 --- a/src/rom_800D42C.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "link.h" -#include "text.h" -#include "ewram.h" - -extern u16 gBattleTypeFlags; -extern u8 gBattleOutcome; - -extern struct Window gUnknown_03004210; - -extern u8 BattleText_Win[]; -extern u8 BattleText_Loss[]; -extern u8 BattleText_Tie[]; - -#if ENGLISH -#define LEFT_MESSAGE_X 6 -#define RIGHT_MESSAGE_X 21 -#define TILE_OFFSET_LOSS 168 -#elif GERMAN -#define LEFT_MESSAGE_X 5 -#define RIGHT_MESSAGE_X 20 -#define TILE_OFFSET_LOSS 172 -#endif -#define TILE_OFFSET_WIN 160 -#define CENTER_MESSAGE_X 13 -#define MESSAGE_Y 2 - -#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ -{ \ - Text_InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ - Text_PrintWindow8002F44(&gUnknown_03004210); \ -} - -#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 PrintLinkBattleWinLossTie(void) -{ - - if (gBattleOutcome == 3) - { - PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); - return; - } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - // Double battle? - - if (gBattleOutcome == 1) - { - - // lp_field_18 = player position? - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) - { - case 0: - case 2: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 1: - case 3: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) - return; - } - } - else - { - - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) - { - case 1: - case 3: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 0: - case 2: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - } - } - - return; - } - - - if (gBattleOutcome == 1) - { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } - else - { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } -} diff --git a/src/trade.c b/src/trade.c index 36e6fc757..a05bddee4 100644 --- a/src/trade.c +++ b/src/trade.c @@ -4018,10 +4018,10 @@ static void sub_804B41C(void) Menu_EraseScreen(); gLinkType = 0x1144; gMain.state ++; - LZDecompressVram(gUnknown_08D00000, (void *)VRAM); - CpuCopy16(gUnknown_08D00524, ewram, 0x1000); + LZDecompressVram(gBattleTextboxTiles, (void *)VRAM); + CpuCopy16(gBattleTextboxTilemap, ewram, 0x1000); DmaCopy16Defvars(3, ewram, BG_SCREEN_ADDR(5), 0x500); - LoadCompressedPalette(gUnknown_08D004E0, 0, 32); + LoadCompressedPalette(gBattleTextboxPalette, 0, 32); gUnknown_03004828->unk_00b6 = 0; gUnknown_03004828->unk_00c4 = 0; gUnknown_03004828->isLinkTrade = TRUE; @@ -4191,11 +4191,11 @@ static __attribute__((naked)) void sub_804B41C(void) "\tldrb r0, [r1]\n" "\tadds r0, 0x1\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804B590 @ =gUnknown_08D00000\n" + "\tldr r0, _0804B590 @ =gBattleTextboxTiles\n" "\tmovs r1, 0xC0\n" "\tlsls r1, 19\n" "\tbl LZDecompressVram\n" - "\tldr r0, _0804B594 @ =gUnknown_08D00524\n" + "\tldr r0, _0804B594 @ =gBattleTextboxTilemap\n" "\tldr r1, _0804B598 @ =0xfffe1000\n" "\tadds r5, r1\n" "\tmovs r2, 0x80\n" @@ -4209,7 +4209,7 @@ static __attribute__((naked)) void sub_804B41C(void) "\tldr r1, _0804B5A4 @ =0x80000280\n" "\tstr r1, [r0, 0x8]\n" "\tldr r0, [r0, 0x8]\n" - "\tldr r0, _0804B5A8 @ =gUnknown_08D004E0\n" + "\tldr r0, _0804B5A8 @ =gBattleTextboxPalette\n" "\tmovs r1, 0\n" "\tmovs r2, 0x20\n" "\tbl LoadCompressedPalette\n" @@ -4267,13 +4267,13 @@ static __attribute__((naked)) void sub_804B41C(void) "_0804B584: .4byte 0x00001144\n" "_0804B588: .4byte gMain\n" "_0804B58C: .4byte 0x0000043c\n" - "_0804B590: .4byte gUnknown_08D00000\n" - "_0804B594: .4byte gUnknown_08D00524\n" + "_0804B590: .4byte gBattleTextboxTiles\n" + "_0804B594: .4byte gBattleTextboxTilemap\n" "_0804B598: .4byte 0xfffe1000\n" "_0804B59C: .4byte 0x06002800\n" "_0804B5A0: .4byte 0x040000d4\n" "_0804B5A4: .4byte 0x80000280\n" - "_0804B5A8: .4byte gUnknown_08D004E0\n" + "_0804B5A8: .4byte gBattleTextboxPalette\n" "_0804B5AC_case01:\n" "\tbl OpenLink\n" "\tldr r1, _0804B5C8 @ =gMain\n" @@ -4709,9 +4709,9 @@ static void sub_804BBE8(u8 a0) gUnknown_03004828->bg1vofs = 0; gUnknown_03004828->bg1hofs = 0; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5); - LZDecompressVram(gUnknown_08D00000, BG_CHAR_ADDR(0)); - CpuCopy16(gUnknown_08D00524, buffer = (u16 *)gSharedMem, 0x1000); - LoadCompressedPalette(gUnknown_08D004E0, 0x70, 0x20); + LZDecompressVram(gBattleTextboxTiles, BG_CHAR_ADDR(0)); + CpuCopy16(gBattleTextboxTilemap, buffer = (u16 *)gSharedMem, 0x1000); + LoadCompressedPalette(gBattleTextboxPalette, 0x70, 0x20); FillPalette(0, 0, 2); for (i = 0; i < 0x280; i ++) buffer[i] |= 0x7000; @@ -5684,9 +5684,9 @@ static void sub_804E1DC(void) void sub_804E22C(void) { - LZDecompressVram(gUnknown_08D00000, (void *)VRAM); - CpuCopy16(gUnknown_08D00524, gSharedMem, 0x1000); + LZDecompressVram(gBattleTextboxTiles, (void *)VRAM); + CpuCopy16(gBattleTextboxTilemap, gSharedMem, 0x1000); DmaCopy16Defvars(3, gSharedMem, BG_SCREEN_ADDR(5), 0x500); - LoadCompressedPalette(gUnknown_08D004E0, 0, 32); + LoadCompressedPalette(gBattleTextboxPalette, 0, 32); REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5); } |