diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_2.c | 16 | ||||
-rw-r--r-- | src/battle/battle_setup.c | 18 | ||||
-rw-r--r-- | src/pokemon_2.c | 4 | ||||
-rw-r--r-- | src/rom_800D42C.c | 640 |
4 files changed, 657 insertions, 21 deletions
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 2bbae20dc..705809a21 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -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) 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/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 index a1b0f5ecb..243945360 100644 --- a/src/rom_800D42C.c +++ b/src/rom_800D42C.c @@ -1,8 +1,18 @@ #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 "ewram.h" +#include "text_window.h" +#include "trainer.h" +#include "trig.h" +#include "sound.h" + extern u16 gBattleTypeFlags; extern u8 gBattleOutcome; @@ -13,6 +23,304 @@ 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 gUnknown_08D00000[]; +extern u16 gUnknown_08D00524[]; +extern u16 gUnknown_08D004E0[]; +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); +extern void sub_800D74C(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; +} + +// ApplyPlayerChosenFrameToBattleMenu +void sub_800D74C(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 sub_800DAB8(void) +{ + LZDecompressVram(gUnknown_08D00000, (void *)0x6000000); + CpuSet(gUnknown_08D00524, (void *)0x600c000, 0x800); + LoadCompressedPalette(gUnknown_08D004E0, 0, 0x40); + sub_800D74C(); + DrawMainBattleBackground(); +} + +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 @@ -117,3 +425,333 @@ void PrintLinkBattleWinLossTie(void) } } } + + +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 sub_800E23C(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 sub_800E414(u8 type) { + int ret = 0; + switch (type) { + case 0: + LZDecompressVram(&gUnknown_08D00000, (void *)0x6000000); + break; + case 1: + CpuCopy16(gUnknown_08D00524, (void *)0x600c000, 0x1000); + break; + case 2: + LoadCompressedPalette(gUnknown_08D004E0, 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: + sub_800D74C(); + break; + default: + ret = 1; + } + return ret; +} |