summaryrefslogtreecommitdiff
path: root/src/battle_bg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_bg.c')
-rw-r--r--src/battle_bg.c147
1 files changed, 79 insertions, 68 deletions
diff --git a/src/battle_bg.c b/src/battle_bg.c
index affa4dfc6..9a1373c38 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -16,8 +16,17 @@
#define TAG_VS_LETTERS 10000
-static void sub_800F228(void);
-static u8 sub_800FC2C(void);
+struct BattleBackground
+{
+ const void *tileset;
+ const void *tilemap;
+ const void *entryTileset;
+ const void *entryTilemap;
+ const void *palette;
+};
+
+static void CB2_unused(void);
+static u8 GetBattleTerrainOverride(void);
static const u8 gUnknown_824829C[] = {1, 2};
@@ -89,7 +98,7 @@ static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = {
};
static const struct CompressedSpriteSheet sVsLettersSpriteSheet = {
- gFile_graphics_battle_transitions_vs_sheet,
+ gVsLettersGfx,
0x1000,
TAG_VS_LETTERS
};
@@ -393,7 +402,7 @@ static const u32 gUnknown_824E81C[] = INCBIN_U32("graphics/battle/unk_824E81C.gb
static const u32 gUnknown_824E858[] = INCBIN_U32("graphics/battle/unk_824E858.4bpp.lz");
static const u32 gUnknown_824EB90[] = INCBIN_U32("graphics/battle/unk_824EB90.bin.lz");
-static const u32 *const gUnknown_824EE34[][5] = {
+static const struct BattleBackground gUnknown_824EE34[] = {
{gUnknown_824844C, gUnknown_82489A8, gUnknown_8248C68, gUnknown_8248F58, gUnknown_8248400},
{gUnknown_82490C4, gUnknown_8249620, gUnknown_82498DC, gUnknown_8249E10, gUnknown_8249074},
{gUnknown_8249FE4, gUnknown_824A37C, gUnknown_824A618, gUnknown_824A844, gUnknown_8249F98},
@@ -417,70 +426,72 @@ static const u32 *const gUnknown_824EE34[][5] = {
};
static const struct {
- u8 unk0;
- u8 unk1;
-} gUnknown_824EFC4[] = {
- {1, 11},
- {2, 14},
- {3, 13},
- {4, 15},
- {5, 16},
- {6, 17},
- {7, 18},
- {8, 10}
+ u8 mapScene;
+ u8 battleTerrain;
+} sMapBattleSceneMapping[] = {
+ {MAP_BATTLE_SCENE_GYM, BATTLE_TERRAIN_GYM},
+ {MAP_BATTLE_SCENE_INDOOR_1, BATTLE_TERRAIN_INDOOR_1},
+ {MAP_BATTLE_SCENE_INDOOR_2, BATTLE_TERRAIN_INDOOR_2},
+ {MAP_BATTLE_SCENE_LORELEI, BATTLE_TERRAIN_LORELEI},
+ {MAP_BATTLE_SCENE_BRUNO, BATTLE_TERRAIN_BRUNO},
+ {MAP_BATTLE_SCENE_AGATHA, BATTLE_TERRAIN_AGATHA},
+ {MAP_BATTLE_SCENE_LANCE, BATTLE_TERRAIN_LANCE},
+ {MAP_BATTLE_SCENE_LINK, BATTLE_TERRAIN_LINK}
};
-UNUSED void sub_800F1E8(void)
+UNUSED void CreateUnknownDebugSprite(void)
{
u8 spriteId;
ResetSpriteData();
spriteId = CreateSprite(&gUnknown_824EFF0, 0, 0, 0);
gSprites[spriteId].invisible = TRUE;
- SetMainCallback2(sub_800F228);
+ SetMainCallback2(CB2_unused);
}
-static void sub_800F228(void)
+static void CB2_unused(void)
{
AnimateSprites();
BuildOamBuffer();
}
-static u8 sub_800F238(u8 a0)
+static u8 GetBattleTerrainByMapScene(u8 mapBattleScene)
{
int i;
- for (i = 0; i < NELEMS(gUnknown_824EFC4); i++)
+ for (i = 0; i < NELEMS(sMapBattleSceneMapping); i++)
{
- if (a0 == gUnknown_824EFC4[i].unk0)
- return gUnknown_824EFC4[i].unk1;
+ if (mapBattleScene == sMapBattleSceneMapping[i].mapScene)
+ return sMapBattleSceneMapping[i].battleTerrain;
}
return 9;
}
-static void sub_800F260(u16 envId)
+static void LoadBattleTerrainGfx(u16 terrain)
{
- if (envId >= NELEMS(gUnknown_824EE34))
- envId = 9;
- LZDecompressVram(gUnknown_824EE34[envId][0], (void *)BG_CHAR_ADDR(2));
- LZDecompressVram(gUnknown_824EE34[envId][1], (void *)BG_SCREEN_ADDR(26));
- LoadCompressedPalette(gUnknown_824EE34[envId][4], 0x20, 0x60);
+ if (terrain >= NELEMS(gUnknown_824EE34))
+ terrain = 9;
+ // Copy to bg3
+ LZDecompressVram(gUnknown_824EE34[terrain].tileset, (void *)BG_CHAR_ADDR(2));
+ LZDecompressVram(gUnknown_824EE34[terrain].tilemap, (void *)BG_SCREEN_ADDR(26));
+ LoadCompressedPalette(gUnknown_824EE34[terrain].palette, 0x20, 0x60);
}
-static void sub_800F2AC(u16 envId)
+static void LoadBattleTerrainEntryGfx(u16 terrain)
{
- if (envId >= NELEMS(gUnknown_824EE34))
- envId = 9;
- LZDecompressVram(gUnknown_824EE34[envId][2], (void *)BG_CHAR_ADDR(1));
- LZDecompressVram(gUnknown_824EE34[envId][3], (void *)BG_SCREEN_ADDR(28));
+ if (terrain >= NELEMS(gUnknown_824EE34))
+ terrain = 9;
+ // Copy to bg1
+ LZDecompressVram(gUnknown_824EE34[terrain].entryTileset, (void *)BG_CHAR_ADDR(1));
+ LZDecompressVram(gUnknown_824EE34[terrain].entryTilemap, (void *)BG_SCREEN_ADDR(28));
}
-UNUSED void sub_800F2EC(u8 envId, const u32 **tilesPtr, const u32 **mapPtr, const u32 **palPtr)
+UNUSED void GetBattleTerrainGfxPtrs(u8 terrain, const u32 **tilesPtr, const u32 **mapPtr, const u32 **palPtr)
{
- if (envId > 9)
- envId = 9;
- *tilesPtr = gUnknown_824EE34[envId][0];
- *mapPtr = gUnknown_824EE34[envId][1];
- *palPtr = gUnknown_824EE34[envId][4];
+ if (terrain > 9)
+ terrain = 9;
+ *tilesPtr = gUnknown_824EE34[terrain].tileset;
+ *mapPtr = gUnknown_824EE34[terrain].tilemap;
+ *palPtr = gUnknown_824EE34[terrain].palette;
}
void sub_800F324(void)
@@ -521,7 +532,7 @@ void LoadBattleMenuWindowGfx(void)
void DrawMainBattleBackground(void)
{
- sub_800F260(sub_800FC2C());
+ LoadBattleTerrainGfx(GetBattleTerrainOverride());
}
void LoadBattleTextboxAndBackground(void)
@@ -794,37 +805,37 @@ void DrawBattleEntryBackground(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
LZDecompressVram(gFile_graphics_battle_transitions_vs_frame_sheet, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gFile_graphics_battle_transitions_vs_sheet, (void*)(VRAM + 0x10000));
+ LZDecompressVram(gVsLettersGfx, (void*)(VRAM + 0x10000));
LoadCompressedPalette(gFile_graphics_battle_transitions_vs_frame_palette, 0x60, 0x20);
SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1);
- SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT512x256);
CopyToBgTilemapBuffer(1, gFile_graphics_battle_transitions_vs_frame_tilemap, 0, 0);
CopyToBgTilemapBuffer(2, gFile_graphics_battle_transitions_vs_frame_tilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
- SetGpuReg(REG_OFFSET_WININ, 0x36);
- SetGpuReg(REG_OFFSET_WINOUT, 0x36);
- gBattle_BG1_Y = 0xFF5C;
- gBattle_BG2_Y = 0xFF5C;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
+ gBattle_BG1_Y = -164;
+ gBattle_BG2_Y = -164;
LoadCompressedSpriteSheetUsingHeap(&sVsLettersSpriteSheet);
}
else if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
- sub_800F2AC(0);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_GRASS);
}
else if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))
{
- sub_800F2AC(8);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_BUILDING);
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == VERSION_FIRE_RED)
{
- sub_800F2AC(7);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_CAVE);
}
else
{
- sub_800F2AC(4);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_WATER);
}
}
else
@@ -834,56 +845,56 @@ void DrawBattleEntryBackground(void)
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
if (trainerClass == CLASS_LEADER_2)
{
- sub_800F2AC(8);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_BUILDING);
return;
}
else if (trainerClass == CLASS_CHAMPION_2)
{
- sub_800F2AC(8);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_BUILDING);
return;
}
}
if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL)
{
- sub_800F2AC(gBattleTerrain);
+ LoadBattleTerrainEntryGfx(gBattleTerrain);
}
else
{
- sub_800F2AC(8);
+ LoadBattleTerrainEntryGfx(BATTLE_TERRAIN_BUILDING);
}
}
}
-static u8 sub_800FC2C(void)
+static u8 GetBattleTerrainOverride(void)
{
u8 battleScene;
if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))
{
- return 10;
+ return BATTLE_TERRAIN_LINK;
}
else if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
{
- gBattleTerrain = 0;
- return 0;
+ gBattleTerrain = BATTLE_TERRAIN_GRASS;
+ return BATTLE_TERRAIN_GRASS;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_LEADER_2)
{
- return 12;
+ return BATTLE_TERRAIN_LEADER;
}
else if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION_2)
{
- return 19;
+ return BATTLE_TERRAIN_CHAMPION;
}
}
battleScene = GetCurrentMapBattleScene();
- if (battleScene == 0)
+ if (battleScene == MAP_BATTLE_SCENE_NORMAL)
{
return gBattleTerrain;
}
- return sub_800F238(battleScene);
+ return GetBattleTerrainByMapScene(battleScene);
}
bool8 LoadChosenBattleElement(u8 caseId)
@@ -903,16 +914,16 @@ bool8 LoadChosenBattleElement(u8 caseId)
LoadCompressedPalette(gBattleTextboxPalette, 0x00, 0x40);
break;
case 3:
- battleScene = sub_800FC2C();
- LZDecompressVram(gUnknown_824EE34[battleScene][0], (void *)BG_CHAR_ADDR(2));
+ battleScene = GetBattleTerrainOverride();
+ LZDecompressVram(gUnknown_824EE34[battleScene].tileset, (void *)BG_CHAR_ADDR(2));
// fallthrough
case 4:
- battleScene = sub_800FC2C();
- LZDecompressVram(gUnknown_824EE34[battleScene][1], (void *)BG_SCREEN_ADDR(26));
+ battleScene = GetBattleTerrainOverride();
+ LZDecompressVram(gUnknown_824EE34[battleScene].tilemap, (void *)BG_SCREEN_ADDR(26));
break;
case 5:
- battleScene = sub_800FC2C();
- LoadCompressedPalette(gUnknown_824EE34[battleScene][4], 0x20, 0x60);
+ battleScene = GetBattleTerrainOverride();
+ LoadCompressedPalette(gUnknown_824EE34[battleScene].palette, 0x20, 0x60);
break;
case 6:
LoadBattleMenuWindowGfx();