mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Refactor battle environment (#4891)
This commit is contained in:
parent
2dc67ab156
commit
c9ec896312
|
|
@ -27586,7 +27586,7 @@ gBattleAnimMove_RazorLeaf::
|
|||
end
|
||||
|
||||
gBattleAnimMove_NaturePower::
|
||||
@ No actual animation, uses the animation of a move from sNaturePowerMoves instead
|
||||
@ No actual animation, uses the animation of a move from gBattleEnvironmentInfo.naturePower instead
|
||||
|
||||
gBattleAnimMove_AncientPower::
|
||||
loadspritegfx ANIM_TAG_ROCKS
|
||||
|
|
|
|||
17
include/battle_environment.h
Normal file
17
include/battle_environment.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef GUARD_BATTLE_ENVIRONMENT_H
|
||||
#define GUARD_BATTLE_ENVIRONMENT_H
|
||||
|
||||
#include "constants/battle.h"
|
||||
#include "battle_bg.h"
|
||||
|
||||
struct BattleEnvironment {
|
||||
u8 name[26];
|
||||
u16 naturePower;
|
||||
u16 secretPowerEffect;
|
||||
u8 camouflageType;
|
||||
struct BattleBackground background;
|
||||
};
|
||||
|
||||
extern const struct BattleEnvironment gBattleEnvironmentInfo[BATTLE_ENVIRONMENT_COUNT];
|
||||
|
||||
#endif // GUARD_BATTLE_ENVIRONMENT_H
|
||||
|
|
@ -60,7 +60,7 @@ void BattleSetup_StartLatiBattle(void);
|
|||
void BattleSetup_StartLegendaryBattle(void);
|
||||
void StartGroudonKyogreBattle(void);
|
||||
void StartRegiBattle(void);
|
||||
enum BattleEnvironment BattleSetup_GetEnvironmentId(void);
|
||||
enum BattleEnvironments BattleSetup_GetEnvironmentId(void);
|
||||
u8 GetWildBattleTransition(void);
|
||||
u8 GetTrainerBattleTransition(void);
|
||||
u8 GetSpecialBattleTransition(s32 id);
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@
|
|||
#define B_TERRAIN_TYPE_BOOST GEN_LATEST // In Gen8, damage is boosted by 30% instead of 50%.
|
||||
#define B_SECRET_POWER_EFFECT GEN_LATEST // Secret Power's effects change depending on terrain and generation. See MOVE_EFFECT_SECRET_POWER's case in `SetMoveEffect`.
|
||||
#define B_SECRET_POWER_ANIMATION GEN_LATEST // Secret Power's animations change depending on terrain and generation.
|
||||
#define B_NATURE_POWER_MOVES GEN_LATEST // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves.
|
||||
#define B_NATURE_POWER_MOVES GEN_LATEST // Nature Power calls different moves depending on terrain and generation. See gBattleEnvironmentInfo.
|
||||
#define B_CAMOUFLAGE_TYPES GEN_LATEST // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType.
|
||||
#define B_NEW_TERRAIN_BACKGROUNDS FALSE // If set to TRUE, uses new terrain backgrounds for Electric, Misty, Grassy and Psychic Terrain.
|
||||
|
||||
|
|
|
|||
|
|
@ -531,7 +531,7 @@ enum MoveEffects
|
|||
#define MOVE_EFFECT_CONTINUE 0x8000
|
||||
|
||||
// Battle environment defines for gBattleEnvironment.
|
||||
enum BattleEnvironment
|
||||
enum BattleEnvironments
|
||||
{
|
||||
BATTLE_ENVIRONMENT_GRASS,
|
||||
BATTLE_ENVIRONMENT_LONG_GRASS,
|
||||
|
|
@ -543,6 +543,19 @@ enum BattleEnvironment
|
|||
BATTLE_ENVIRONMENT_CAVE,
|
||||
BATTLE_ENVIRONMENT_BUILDING,
|
||||
BATTLE_ENVIRONMENT_PLAIN,
|
||||
BATTLE_ENVIRONMENT_FRONTIER,
|
||||
BATTLE_ENVIRONMENT_GYM,
|
||||
BATTLE_ENVIRONMENT_LEADER,
|
||||
BATTLE_ENVIRONMENT_MAGMA,
|
||||
BATTLE_ENVIRONMENT_AQUA,
|
||||
BATTLE_ENVIRONMENT_SIDNEY,
|
||||
BATTLE_ENVIRONMENT_PHOEBE,
|
||||
BATTLE_ENVIRONMENT_GLACIA,
|
||||
BATTLE_ENVIRONMENT_DRAKE,
|
||||
BATTLE_ENVIRONMENT_CHAMPION,
|
||||
BATTLE_ENVIRONMENT_GROUDON,
|
||||
BATTLE_ENVIRONMENT_KYOGRE,
|
||||
BATTLE_ENVIRONMENT_RAYQUAZA,
|
||||
// New battle environments are used for Secret Power but not fully implemented.
|
||||
BATTLE_ENVIRONMENT_SOARING,
|
||||
BATTLE_ENVIRONMENT_SKY_PILLAR,
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ enum FormChanges
|
|||
// param2: a move that will be replaced, optional
|
||||
// param3: a new move to replace it with, optional
|
||||
FORM_CHANGE_END_BATTLE,
|
||||
// Form change that activates at the end of a battle based on the terrain if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE.
|
||||
// param1: battle terrain to check.
|
||||
// Form change that activates at the end of a battle based on the environment if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE.
|
||||
// param1: battle environment to check.
|
||||
FORM_CHANGE_END_BATTLE_ENVIRONMENT,
|
||||
// Form change that activates when the Pokémon is switched out in battle.
|
||||
// param1: ability to check, optional
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ struct PokemonSpriteVisualizer
|
|||
u8 animIdBack;
|
||||
u8 animIdFront;
|
||||
u8 battleBgType;
|
||||
u8 battleTerrain;
|
||||
u8 battleEnvironment;
|
||||
u8 currentSubmenu;
|
||||
u8 submenuYpos[3];
|
||||
};
|
||||
|
|
|
|||
465
src/battle_bg.c
465
src/battle_bg.c
|
|
@ -5,6 +5,7 @@
|
|||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_setup.h"
|
||||
#include "battle_environment.h"
|
||||
#include "bg.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
#include "constants/trainers.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/battle_partner.h"
|
||||
#include "data/battle_environment.h"
|
||||
|
||||
// .rodata
|
||||
|
||||
|
|
@ -609,98 +611,75 @@ const struct WindowTemplate *const gBattleWindowTemplates[] =
|
|||
[B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates,
|
||||
};
|
||||
|
||||
const struct BattleBackground sBattleEnvironmentTable[] =
|
||||
// If current map scene equals any of the values in sMapBattleSceneMapping,
|
||||
// use its battle terrain value. Otherwise, use the default.
|
||||
static u8 GetBattleEnvironmentByMapScene(u8 mapBattleScene)
|
||||
{
|
||||
[BATTLE_ENVIRONMENT_GRASS] =
|
||||
int i;
|
||||
for (i = 0; i < NELEMS(sMapBattleSceneMapping); i++)
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_TallGrass,
|
||||
.tilemap = gBattleEnvironmentTilemap_TallGrass,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_TallGrass,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_TallGrass,
|
||||
.palette = gBattleEnvironmentPalette_TallGrass,
|
||||
},
|
||||
if (mapBattleScene == sMapBattleSceneMapping[i].mapScene)
|
||||
return sMapBattleSceneMapping[i].battleEnvironment;
|
||||
}
|
||||
return BATTLE_ENVIRONMENT_PLAIN;
|
||||
}
|
||||
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_LongGrass,
|
||||
.tilemap = gBattleEnvironmentTilemap_LongGrass,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_LongGrass,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_LongGrass,
|
||||
.palette = gBattleEnvironmentPalette_LongGrass,
|
||||
},
|
||||
// Loads the initial battle terrain.
|
||||
static void LoadBattleEnvironmentGfx(u16 terrain)
|
||||
{
|
||||
if (terrain >= NELEMS(gBattleEnvironmentInfo))
|
||||
terrain = BATTLE_ENVIRONMENT_PLAIN; // If higher than the number of entries in gBattleEnvironmentInfo, use the default.
|
||||
// Copy to bg3
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.tileset, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentInfo[terrain].background.palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
}
|
||||
|
||||
[BATTLE_ENVIRONMENT_SAND] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Sand,
|
||||
.tilemap = gBattleEnvironmentTilemap_Sand,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Sand,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Sand,
|
||||
.palette = gBattleEnvironmentPalette_Sand,
|
||||
},
|
||||
// Loads the entry associated with the battle terrain.
|
||||
// This can be the grass moving on the screen at the start of a wild encounter in tall grass.
|
||||
static void LoadBattleEnvironmentEntryGfx(u16 terrain)
|
||||
{
|
||||
if (terrain >= NELEMS(gBattleEnvironmentInfo))
|
||||
terrain = BATTLE_ENVIRONMENT_PLAIN;
|
||||
// Copy to bg1
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.entryTileset, (void *)BG_CHAR_ADDR(1));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.entryTilemap, (void *)BG_SCREEN_ADDR(28));
|
||||
}
|
||||
|
||||
[BATTLE_ENVIRONMENT_UNDERWATER] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Underwater,
|
||||
.tilemap = gBattleEnvironmentTilemap_Underwater,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Underwater,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Underwater,
|
||||
.palette = gBattleEnvironmentPalette_Underwater,
|
||||
},
|
||||
static u8 GetBattleEnvironmentOverride(void)
|
||||
{
|
||||
u8 battleScene = GetCurrentMapBattleScene();
|
||||
|
||||
[BATTLE_ENVIRONMENT_WATER] =
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
|
||||
return BATTLE_ENVIRONMENT_FRONTIER;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Water,
|
||||
.tilemap = gBattleEnvironmentTilemap_Water,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Water,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Water,
|
||||
.palette = gBattleEnvironmentPalette_Water,
|
||||
},
|
||||
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
|
||||
{
|
||||
case SPECIES_GROUDON:
|
||||
return BATTLE_ENVIRONMENT_GROUDON;
|
||||
case SPECIES_KYOGRE:
|
||||
return BATTLE_ENVIRONMENT_KYOGRE;
|
||||
case SPECIES_RAYQUAZA:
|
||||
return BATTLE_ENVIRONMENT_RAYQUAZA;
|
||||
default:
|
||||
return gBattleEnvironment;
|
||||
}
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
return BATTLE_ENVIRONMENT_LEADER;
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
return BATTLE_ENVIRONMENT_CHAMPION;
|
||||
}
|
||||
|
||||
[BATTLE_ENVIRONMENT_POND] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_PondWater,
|
||||
.tilemap = gBattleEnvironmentTilemap_PondWater,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_PondWater,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_PondWater,
|
||||
.palette = gBattleEnvironmentPalette_PondWater,
|
||||
},
|
||||
if (battleScene == MAP_BATTLE_SCENE_NORMAL)
|
||||
return gBattleEnvironment;
|
||||
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Rock,
|
||||
.tilemap = gBattleEnvironmentTilemap_Rock,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Rock,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Rock,
|
||||
.palette = gBattleEnvironmentPalette_Rock,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_CAVE] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Cave,
|
||||
.tilemap = gBattleEnvironmentTilemap_Cave,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Cave,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Cave,
|
||||
.palette = gBattleEnvironmentPalette_Cave,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_BUILDING] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_Building,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_PLAIN] =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_Plain,
|
||||
},
|
||||
};
|
||||
return GetBattleEnvironmentByMapScene(battleScene);
|
||||
}
|
||||
|
||||
void BattleInitBgsAndWindows(void)
|
||||
{
|
||||
|
|
@ -751,109 +730,7 @@ void LoadBattleMenuWindowGfx(void)
|
|||
|
||||
void DrawMainBattleBackground(void)
|
||||
{
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK))
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
|
||||
{
|
||||
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
|
||||
{
|
||||
case SPECIES_GROUDON:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case SPECIES_KYOGRE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Water, (void*)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case SPECIES_RAYQUAZA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
default:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
return;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
LoadBattleEnvironmentGfx(GetBattleEnvironmentOverride());
|
||||
}
|
||||
|
||||
void LoadBattleTextboxAndBackground(void)
|
||||
|
|
@ -1147,8 +1024,7 @@ void DrawBattleEntryBackground(void)
|
|||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1167,20 +1043,17 @@ void DrawBattleEntryBackground(void)
|
|||
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
|
||||
{
|
||||
case SPECIES_GROUDON:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_CAVE);
|
||||
break;
|
||||
case SPECIES_KYOGRE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_UNDERWATER);
|
||||
break;
|
||||
case SPECIES_RAYQUAZA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_RAYQUAZA);
|
||||
break;
|
||||
default:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[gBattleEnvironment].background.entryTileset, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[gBattleEnvironment].background.entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1191,27 +1064,23 @@ void DrawBattleEntryBackground(void)
|
|||
enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING);
|
||||
return;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL)
|
||||
{
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(gBattleEnvironment);
|
||||
}
|
||||
else
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
|
||||
LoadBattleEnvironmentEntryGfx(gBattleEnvironment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1233,195 +1102,13 @@ bool8 LoadChosenBattleElement(u8 caseId)
|
|||
LoadPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case 3:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
|
||||
{
|
||||
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
|
||||
{
|
||||
case SPECIES_GROUDON:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case SPECIES_KYOGRE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(2)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.tileset, (void *)(BG_CHAR_ADDR(2)));
|
||||
break;
|
||||
case 4:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON)
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
|
||||
else
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
break;
|
||||
case 5:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON)
|
||||
LoadPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
else
|
||||
LoadPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
if (trainerClass == TRAINER_CLASS_LEADER)
|
||||
{
|
||||
LoadPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
}
|
||||
else if (trainerClass == TRAINER_CLASS_CHAMPION)
|
||||
{
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetCurrentMapBattleScene())
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
LoadPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_MAGMA:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_AQUA:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_SIDNEY:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_PHOEBE:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GLACIA:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_DRAKE:
|
||||
LoadPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_FRONTIER:
|
||||
LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
LoadPalette(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
|
||||
break;
|
||||
case 6:
|
||||
LoadBattleMenuWindowGfx();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_environment.h"
|
||||
#include "battle_z_move.h"
|
||||
#include "item.h"
|
||||
#include "util.h"
|
||||
|
|
@ -938,78 +939,6 @@ static const u16 sFinalStrikeOnlyEffects[] =
|
|||
MOVE_EFFECT_WRAP,
|
||||
};
|
||||
|
||||
static const u16 sNaturePowerMoves[BATTLE_ENVIRONMENT_COUNT] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_7
|
||||
[BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = MOVE_ICE_BEAM,
|
||||
#elif B_NATURE_POWER_MOVES == GEN_6
|
||||
[BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = MOVE_FROST_BREATH,
|
||||
#elif B_NATURE_POWER_MOVES == GEN_5
|
||||
[BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB,
|
||||
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD,
|
||||
#elif B_NATURE_POWER_MOVES == GEN_4
|
||||
[BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB,
|
||||
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = MOVE_ROCK_SLIDE,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD,
|
||||
#else // Gen 1-3
|
||||
[BATTLE_ENVIRONMENT_GRASS] = MOVE_STUN_SPORE,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_RAZOR_LEAF,
|
||||
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_ENVIRONMENT_WATER] = MOVE_SURF,
|
||||
[BATTLE_ENVIRONMENT_POND] = MOVE_BUBBLE_BEAM,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = MOVE_SHADOW_BALL,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_SWIFT,
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_SWIFT,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD,
|
||||
#endif
|
||||
[BATTLE_ENVIRONMENT_UNDERWATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_ENVIRONMENT_SOARING] = MOVE_AIR_SLASH,
|
||||
[BATTLE_ENVIRONMENT_SKY_PILLAR] = MOVE_AIR_SLASH,
|
||||
[BATTLE_ENVIRONMENT_BURIAL_GROUND] = MOVE_SHADOW_BALL,
|
||||
[BATTLE_ENVIRONMENT_PUDDLE] = MOVE_MUD_BOMB,
|
||||
[BATTLE_ENVIRONMENT_MARSH] = MOVE_MUD_BOMB,
|
||||
[BATTLE_ENVIRONMENT_SWAMP] = MOVE_MUD_BOMB,
|
||||
[BATTLE_ENVIRONMENT_ICE] = MOVE_ICE_BEAM,
|
||||
[BATTLE_ENVIRONMENT_VOLCANO] = MOVE_LAVA_PLUME,
|
||||
[BATTLE_ENVIRONMENT_DISTORTION_WORLD] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_ENVIRONMENT_SPACE] = MOVE_DRACO_METEOR,
|
||||
[BATTLE_ENVIRONMENT_ULTRA_SPACE] = MOVE_PSYSHOCK,
|
||||
};
|
||||
|
||||
#define _ 0
|
||||
|
||||
static const struct PickupItem sPickupTable[] =
|
||||
|
|
@ -1048,32 +977,6 @@ static const struct PickupItem sPickupTable[] =
|
|||
|
||||
#undef _
|
||||
|
||||
static const u8 sEnvironmentToType[BATTLE_ENVIRONMENT_COUNT] =
|
||||
{
|
||||
[BATTLE_ENVIRONMENT_GRASS] = TYPE_GRASS,
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] = TYPE_GRASS,
|
||||
[BATTLE_ENVIRONMENT_SAND] = TYPE_GROUND,
|
||||
[BATTLE_ENVIRONMENT_UNDERWATER] = TYPE_WATER,
|
||||
[BATTLE_ENVIRONMENT_WATER] = TYPE_WATER,
|
||||
[BATTLE_ENVIRONMENT_POND] = TYPE_WATER,
|
||||
[BATTLE_ENVIRONMENT_CAVE] = TYPE_ROCK,
|
||||
[BATTLE_ENVIRONMENT_BUILDING] = TYPE_NORMAL,
|
||||
[BATTLE_ENVIRONMENT_SOARING] = TYPE_FLYING,
|
||||
[BATTLE_ENVIRONMENT_SKY_PILLAR] = TYPE_FLYING,
|
||||
[BATTLE_ENVIRONMENT_BURIAL_GROUND] = TYPE_GHOST,
|
||||
[BATTLE_ENVIRONMENT_PUDDLE] = TYPE_GROUND,
|
||||
[BATTLE_ENVIRONMENT_MARSH] = TYPE_GROUND,
|
||||
[BATTLE_ENVIRONMENT_SWAMP] = TYPE_GROUND,
|
||||
[BATTLE_ENVIRONMENT_SNOW] = TYPE_ICE,
|
||||
[BATTLE_ENVIRONMENT_ICE] = TYPE_ICE,
|
||||
[BATTLE_ENVIRONMENT_VOLCANO] = TYPE_FIRE,
|
||||
[BATTLE_ENVIRONMENT_DISTORTION_WORLD] = TYPE_NORMAL,
|
||||
[BATTLE_ENVIRONMENT_SPACE] = TYPE_DRAGON,
|
||||
[BATTLE_ENVIRONMENT_ULTRA_SPACE] = TYPE_PSYCHIC,
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] = (B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK),
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL),
|
||||
};
|
||||
|
||||
static bool32 NoTargetPresent(u8 battler, u32 move)
|
||||
{
|
||||
if (!IsBattlerAlive(gBattlerTarget))
|
||||
|
|
@ -3703,64 +3606,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, bool32 primary, bool32 certai
|
|||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (gBattleEnvironment)
|
||||
{
|
||||
case BATTLE_ENVIRONMENT_GRASS:
|
||||
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON);
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_UNDERWATER:
|
||||
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1);
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_POND:
|
||||
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1);
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_MOUNTAIN:
|
||||
if (B_SECRET_POWER_EFFECT >= GEN_5)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||
else if (B_SECRET_POWER_EFFECT >= GEN_4)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
||||
else
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_PUDDLE:
|
||||
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1);
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_LONG_GRASS:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_SAND:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_WATER:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_CAVE:
|
||||
case BATTLE_ENVIRONMENT_BURIAL_GROUND:
|
||||
case BATTLE_ENVIRONMENT_SPACE:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_SOARING:
|
||||
case BATTLE_ENVIRONMENT_SKY_PILLAR:
|
||||
case BATTLE_ENVIRONMENT_MARSH:
|
||||
case BATTLE_ENVIRONMENT_SWAMP:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_SNOW:
|
||||
case BATTLE_ENVIRONMENT_ICE:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_VOLCANO:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_BURN;
|
||||
break;
|
||||
case BATTLE_ENVIRONMENT_ULTRA_SPACE:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_1;
|
||||
break;
|
||||
default:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gBattleScripting.moveEffect = gBattleEnvironmentInfo[gBattleEnvironment].secretPowerEffect;
|
||||
SetMoveEffect(battler, effectBattler, primary, certain);
|
||||
break;
|
||||
case MOVE_EFFECT_PSYCHIC_NOISE:
|
||||
|
|
@ -14483,7 +14329,7 @@ static void Cmd_callenvironmentattack(void)
|
|||
|
||||
u32 GetNaturePowerMove(u32 battler)
|
||||
{
|
||||
u32 move = sNaturePowerMoves[gBattleEnvironment];
|
||||
u32 move = gBattleEnvironmentInfo[gBattleEnvironment].naturePower;
|
||||
if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
|
||||
move = MOVE_MOONBLAST;
|
||||
else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
|
||||
|
|
@ -14492,7 +14338,7 @@ u32 GetNaturePowerMove(u32 battler)
|
|||
move = MOVE_ENERGY_BALL;
|
||||
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
|
||||
move = MOVE_PSYCHIC;
|
||||
else if (sNaturePowerMoves[gBattleEnvironment] == MOVE_NONE)
|
||||
else if (gBattleEnvironmentInfo[gBattleEnvironment].naturePower == MOVE_NONE)
|
||||
move = MOVE_TRI_ATTACK;
|
||||
|
||||
if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE)
|
||||
|
|
@ -15359,7 +15205,7 @@ static void Cmd_tryrecycleitem(void)
|
|||
|
||||
bool32 CanCamouflage(u8 battler)
|
||||
{
|
||||
if (IS_BATTLER_OF_TYPE(battler, sEnvironmentToType[gBattleEnvironment]))
|
||||
if (IS_BATTLER_OF_TYPE(battler, gBattleEnvironmentInfo[gBattleEnvironment].camouflageType))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -15384,7 +15230,7 @@ static void Cmd_settypetoenvironment(void)
|
|||
environmentType = TYPE_PSYCHIC;
|
||||
break;
|
||||
default:
|
||||
environmentType = sEnvironmentToType[gBattleEnvironment];
|
||||
environmentType = gBattleEnvironmentInfo[gBattleEnvironment].camouflageType;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -621,7 +621,7 @@ static void CB2_EndScriptedWildBattle(void)
|
|||
}
|
||||
}
|
||||
|
||||
enum BattleEnvironment BattleSetup_GetEnvironmentId(void)
|
||||
enum BattleEnvironments BattleSetup_GetEnvironmentId(void)
|
||||
{
|
||||
u16 tileBehavior;
|
||||
s16 x, y;
|
||||
|
|
|
|||
434
src/data/battle_environment.h
Normal file
434
src/data/battle_environment.h
Normal file
|
|
@ -0,0 +1,434 @@
|
|||
const u32 gBattleEnvironmentTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_TallGrass[] = INCBIN_U16("graphics/battle_environment/tall_grass/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_LongGrass[] = INCBIN_U16("graphics/battle_environment/long_grass/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Sand[] = INCBIN_U16("graphics/battle_environment/sand/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Underwater[] = INCBIN_U16("graphics/battle_environment/underwater/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Water[] = INCBIN_U16("graphics/battle_environment/water/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_PondWater[] = INCBIN_U16("graphics/battle_environment/pond_water/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Rock[] = INCBIN_U16("graphics/battle_environment/rock/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Cave[] = INCBIN_U16("graphics/battle_environment/cave/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/map.bin.smolTM");
|
||||
|
||||
const u16 gBattleEnvironmentPalette_Plain[] = INCBIN_U16("graphics/battle_environment/plain/palette.gbapal");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Frontier[] = INCBIN_U16("graphics/battle_environment/stadium/battle_frontier.gbapal"); // this is also used for link battles
|
||||
const u32 gBattleEnvironmentTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/map.bin.smolTM");
|
||||
|
||||
#define ENVIRONMENT_BACKGROUND(background) \
|
||||
{ \
|
||||
.tileset = gBattleEnvironmentTiles_##background, \
|
||||
.tilemap = gBattleEnvironmentTilemap_##background, \
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_##background, \
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_##background, \
|
||||
.palette = gBattleEnvironmentPalette_##background, \
|
||||
}
|
||||
|
||||
const struct BattleEnvironment gBattleEnvironmentInfo[BATTLE_ENVIRONMENT_COUNT] =
|
||||
{
|
||||
[BATTLE_ENVIRONMENT_GRASS] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_ENERGY_BALL,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_4
|
||||
.naturePower = MOVE_SEED_BOMB,
|
||||
#else
|
||||
.naturePower = MOVE_STUN_SPORE,
|
||||
#endif
|
||||
.secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON,
|
||||
.camouflageType = TYPE_GRASS,
|
||||
.background = ENVIRONMENT_BACKGROUND(TallGrass),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_LONG_GRASS] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_ENERGY_BALL,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_4
|
||||
.naturePower = MOVE_SEED_BOMB,
|
||||
#else
|
||||
.naturePower = MOVE_RAZOR_LEAF,
|
||||
#endif
|
||||
.secretPowerEffect = MOVE_EFFECT_SLEEP,
|
||||
.camouflageType = TYPE_GRASS,
|
||||
.background = ENVIRONMENT_BACKGROUND(LongGrass),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SAND] =
|
||||
{
|
||||
.naturePower = B_NATURE_POWER_MOVES >= GEN_6 ? MOVE_EARTH_POWER : MOVE_EARTHQUAKE,
|
||||
.secretPowerEffect = MOVE_EFFECT_ACC_MINUS_1,
|
||||
.camouflageType = TYPE_GROUND,
|
||||
.background = ENVIRONMENT_BACKGROUND(Sand),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_UNDERWATER] =
|
||||
{
|
||||
.naturePower = MOVE_HYDRO_PUMP,
|
||||
.secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1,
|
||||
.camouflageType = TYPE_WATER,
|
||||
.background = ENVIRONMENT_BACKGROUND(Underwater),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_WATER] =
|
||||
{
|
||||
.naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_HYDRO_PUMP : MOVE_SURF,
|
||||
.secretPowerEffect = MOVE_EFFECT_ATK_MINUS_1,
|
||||
.camouflageType = TYPE_WATER,
|
||||
.background = ENVIRONMENT_BACKGROUND(Water),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_POND] =
|
||||
{
|
||||
.naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_HYDRO_PUMP : MOVE_BUBBLE_BEAM,
|
||||
.secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1,
|
||||
.camouflageType = TYPE_WATER,
|
||||
.background = ENVIRONMENT_BACKGROUND(PondWater),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_MOUNTAIN] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_EARTH_POWER,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_5
|
||||
.naturePower = MOVE_EARTHQUAKE,
|
||||
#else
|
||||
.naturePower = MOVE_ROCK_SLIDE,
|
||||
#endif
|
||||
#if B_SECRET_POWER_EFFECT >= GEN_5
|
||||
.secretPowerEffect = MOVE_EFFECT_ACC_MINUS_1,
|
||||
#elif B_SECRET_POWER_EFFECT >= GEN_4
|
||||
.secretPowerEffect = MOVE_EFFECT_FLINCH,
|
||||
#else
|
||||
.secretPowerEffect = MOVE_EFFECT_CONFUSION,
|
||||
#endif
|
||||
.camouflageType = B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK,
|
||||
.background = ENVIRONMENT_BACKGROUND(Rock),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_CAVE] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_EARTH_POWER,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_5
|
||||
.naturePower = MOVE_EARTHQUAKE,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_4
|
||||
.naturePower = MOVE_ROCK_SLIDE,
|
||||
#else
|
||||
.naturePower = MOVE_SHADOW_BALL,
|
||||
#endif
|
||||
.secretPowerEffect = MOVE_EFFECT_FLINCH,
|
||||
.camouflageType = TYPE_ROCK,
|
||||
.background = ENVIRONMENT_BACKGROUND(Cave),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_BUILDING] =
|
||||
{
|
||||
.naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_TRI_ATTACK : MOVE_SWIFT,
|
||||
.secretPowerEffect = MOVE_EFFECT_PARALYSIS,
|
||||
.camouflageType = TYPE_NORMAL,
|
||||
.background = ENVIRONMENT_BACKGROUND(Building),
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_PLAIN] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_TRI_ATTACK,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_4
|
||||
.naturePower = MOVE_EARTHQUAKE,
|
||||
#else
|
||||
.naturePower = MOVE_SWIFT,
|
||||
#endif
|
||||
.secretPowerEffect = MOVE_EFFECT_PARALYSIS,
|
||||
.camouflageType = B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL,
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_Plain,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_FRONTIER] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_Frontier,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_GYM] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_BuildingGym,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_LEADER] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Building,
|
||||
.tilemap = gBattleEnvironmentTilemap_Building,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_BuildingLeader,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_MAGMA] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumMagma,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_AQUA] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumAqua,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SIDNEY] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumSidney,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_PHOEBE] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumPhoebe,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_GLACIA] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumGlacia,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_DRAKE] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumDrake,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_CHAMPION] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Stadium,
|
||||
.tilemap = gBattleEnvironmentTilemap_Stadium,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Building,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
|
||||
.palette = gBattleEnvironmentPalette_StadiumWallace,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_GROUDON] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Cave,
|
||||
.tilemap = gBattleEnvironmentTilemap_Cave,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Cave,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Cave,
|
||||
.palette = gBattleEnvironmentPalette_Groudon,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_KYOGRE] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Water,
|
||||
.tilemap = gBattleEnvironmentTilemap_Water,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Underwater,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Underwater,
|
||||
.palette = gBattleEnvironmentPalette_Kyogre,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_RAYQUAZA] =
|
||||
{
|
||||
.background =
|
||||
{
|
||||
.tileset = gBattleEnvironmentTiles_Rayquaza,
|
||||
.tilemap = gBattleEnvironmentTilemap_Rayquaza,
|
||||
.entryTileset = gBattleEnvironmentAnimTiles_Rayquaza,
|
||||
.entryTilemap = gBattleEnvironmentAnimTilemap_Rayquaza,
|
||||
.palette = gBattleEnvironmentPalette_Rayquaza,
|
||||
},
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SOARING] =
|
||||
{
|
||||
.naturePower = MOVE_AIR_SLASH,
|
||||
.secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1,
|
||||
.camouflageType = TYPE_FLYING,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SKY_PILLAR] =
|
||||
{
|
||||
.naturePower = MOVE_AIR_SLASH,
|
||||
.secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1,
|
||||
.camouflageType = TYPE_FLYING,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_BURIAL_GROUND] =
|
||||
{
|
||||
.naturePower = MOVE_SHADOW_BALL,
|
||||
.secretPowerEffect = MOVE_EFFECT_FLINCH,
|
||||
.camouflageType = TYPE_GHOST,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_PUDDLE] =
|
||||
{
|
||||
.naturePower = MOVE_MUD_BOMB,
|
||||
.secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1,
|
||||
.camouflageType = TYPE_GROUND,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_MARSH] =
|
||||
{
|
||||
.naturePower = MOVE_MUD_BOMB,
|
||||
.secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1,
|
||||
.camouflageType = TYPE_GROUND,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SWAMP] =
|
||||
{
|
||||
.naturePower = MOVE_MUD_BOMB,
|
||||
.secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1,
|
||||
.camouflageType = TYPE_GROUND,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SNOW] =
|
||||
{
|
||||
#if B_NATURE_POWER_MOVES >= GEN_7
|
||||
.naturePower = MOVE_ICE_BEAM,
|
||||
#elif B_NATURE_POWER_MOVES >= GEN_6
|
||||
.naturePower = MOVE_FROST_BREATH,
|
||||
#else
|
||||
.naturePower = MOVE_BLIZZARD,
|
||||
#endif
|
||||
.secretPowerEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE,
|
||||
.camouflageType = TYPE_ICE,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_ICE] =
|
||||
{
|
||||
.naturePower = MOVE_ICE_BEAM,
|
||||
.secretPowerEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE,
|
||||
.camouflageType = TYPE_ICE,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_VOLCANO] =
|
||||
{
|
||||
.naturePower = MOVE_LAVA_PLUME,
|
||||
.secretPowerEffect = MOVE_EFFECT_BURN,
|
||||
.camouflageType = TYPE_FIRE,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_DISTORTION_WORLD] =
|
||||
{
|
||||
.naturePower = MOVE_TRI_ATTACK,
|
||||
.secretPowerEffect = MOVE_EFFECT_PARALYSIS,
|
||||
.camouflageType = TYPE_NORMAL,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_SPACE] =
|
||||
{
|
||||
.naturePower = MOVE_DRACO_METEOR,
|
||||
.secretPowerEffect = MOVE_EFFECT_FLINCH,
|
||||
.camouflageType = TYPE_DRAGON,
|
||||
},
|
||||
|
||||
[BATTLE_ENVIRONMENT_ULTRA_SPACE] =
|
||||
{
|
||||
.naturePower = MOVE_PSYSHOCK,
|
||||
.secretPowerEffect = MOVE_EFFECT_DEF_MINUS_1,
|
||||
.camouflageType = TYPE_PSYCHIC,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct {
|
||||
u8 mapScene;
|
||||
u8 battleEnvironment;
|
||||
} sMapBattleSceneMapping[] = {
|
||||
{MAP_BATTLE_SCENE_GYM, BATTLE_ENVIRONMENT_GYM},
|
||||
{MAP_BATTLE_SCENE_MAGMA, BATTLE_ENVIRONMENT_MAGMA},
|
||||
{MAP_BATTLE_SCENE_AQUA, BATTLE_ENVIRONMENT_AQUA},
|
||||
{MAP_BATTLE_SCENE_SIDNEY, BATTLE_ENVIRONMENT_SIDNEY},
|
||||
{MAP_BATTLE_SCENE_PHOEBE, BATTLE_ENVIRONMENT_PHOEBE},
|
||||
{MAP_BATTLE_SCENE_GLACIA, BATTLE_ENVIRONMENT_GLACIA},
|
||||
{MAP_BATTLE_SCENE_DRAKE, BATTLE_ENVIRONMENT_DRAKE},
|
||||
{MAP_BATTLE_SCENE_FRONTIER, BATTLE_ENVIRONMENT_FRONTIER}
|
||||
};
|
||||
|
|
@ -1,41 +1,3 @@
|
|||
const u32 gBattleEnvironmentTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_TallGrass[] = INCBIN_U16("graphics/battle_environment/tall_grass/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_LongGrass[] = INCBIN_U16("graphics/battle_environment/long_grass/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Sand[] = INCBIN_U16("graphics/battle_environment/sand/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Underwater[] = INCBIN_U16("graphics/battle_environment/underwater/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Water[] = INCBIN_U16("graphics/battle_environment/water/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_PondWater[] = INCBIN_U16("graphics/battle_environment/pond_water/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Rock[] = INCBIN_U16("graphics/battle_environment/rock/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Cave[] = INCBIN_U16("graphics/battle_environment/cave/palette.gbapal");
|
||||
const u32 gBattleEnvironmentTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/map.bin.smolTM");
|
||||
|
||||
const u16 gBattleEnvironmentPalette_Plain[] = INCBIN_U16("graphics/battle_environment/plain/palette.gbapal");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/tiles.4bpp.smol");
|
||||
const u16 gBattleEnvironmentPalette_Frontier[] = INCBIN_U16("graphics/battle_environment/stadium/battle_frontier.gbapal"); // this is also used for link battles
|
||||
const u32 gBattleEnvironmentTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/map.bin.smolTM");
|
||||
|
||||
const u32 gBattleEnvironmentTiles_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/tiles.4bpp.smol");
|
||||
const u32 gBattleEnvironmentTilemap_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/map.bin.smolTM");
|
||||
|
||||
|
|
|
|||
22
src/debug.c
22
src/debug.c
|
|
@ -141,18 +141,18 @@ enum DebugBattleAIFlags
|
|||
DEBUG_BATTLE_1_MENU_ITEM_CONTINUE,
|
||||
};
|
||||
|
||||
enum DebugBattleTerrain
|
||||
enum DebugBattleEnvironment
|
||||
{
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_1,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_2,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_3,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_4,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_5,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_6,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_7,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_0,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_1,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_2,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_3,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_4,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_5,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_6,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_7,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_8,
|
||||
DEBUG_BATTLE_2_MENU_ITEM_ENVIRONMENT_9,
|
||||
};
|
||||
|
||||
// *******************************
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "battle_environment.h"
|
||||
#include "bg.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
|
|
@ -42,7 +43,7 @@
|
|||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
extern const struct BattleBackground sBattleEnvironmentTable[];
|
||||
extern const struct BattleEnvironment gBattleEnvironmentInfo[BATTLE_ENVIRONMENT_COUNT];
|
||||
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
|
||||
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadowsSized;
|
||||
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
|
||||
|
|
@ -385,6 +386,7 @@ const u8 gBattleBackgroundNames[][30] =
|
|||
[MAP_BATTLE_SCENE_KYOGRE] = _("KYOGRE "),
|
||||
[MAP_BATTLE_SCENE_RAYQUAZA] = _("RAYQUAZA "),
|
||||
};
|
||||
|
||||
const u8 gBattleBackgroundTerrainNames[][26] =
|
||||
{
|
||||
[BATTLE_ENVIRONMENT_GRASS] = _("NORMAL - GRASS "),
|
||||
|
|
@ -398,6 +400,7 @@ const u8 gBattleBackgroundTerrainNames[][26] =
|
|||
[BATTLE_ENVIRONMENT_BUILDING] = _("NORMAL - BUILDING "),
|
||||
[BATTLE_ENVIRONMENT_PLAIN] = _("NORMAL - PLAIN "),
|
||||
};
|
||||
|
||||
const u8 sShadowSizeLabels[][4] =
|
||||
{
|
||||
[SHADOW_SIZE_S] = _(" S"),
|
||||
|
|
@ -405,6 +408,7 @@ const u8 sShadowSizeLabels[][4] =
|
|||
[SHADOW_SIZE_L] = _(" L"),
|
||||
[SHADOW_SIZE_XL_BATTLE_ONLY] = _(" XL"),
|
||||
};
|
||||
|
||||
//Function declarations
|
||||
static void PrintDigitChars(struct PokemonSpriteVisualizer *data);
|
||||
static void SetUpModifyArrows(struct PokemonSpriteVisualizer *data);
|
||||
|
|
@ -921,15 +925,15 @@ static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer
|
|||
}
|
||||
|
||||
//Battle background functions
|
||||
static void LoadBattleBg(u8 battleBgType, enum BattleEnvironment battleEnvironment)
|
||||
static void LoadBattleBg(u8 battleBgType, enum BattleEnvironments battleEnvironment)
|
||||
{
|
||||
switch (battleBgType)
|
||||
{
|
||||
default:
|
||||
case MAP_BATTLE_SCENE_NORMAL:
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[battleEnvironment].tileset, (void*)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(sBattleEnvironmentTable[battleEnvironment].tilemap, (void*)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(sBattleEnvironmentTable[battleEnvironment].palette, 0x20, 0x60);
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[battleEnvironment].background.tileset, (void*)(BG_CHAR_ADDR(2)));
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentInfo[battleEnvironment].background.tilemap, (void*)(BG_SCREEN_ADDR(26)));
|
||||
LoadPalette(gBattleEnvironmentInfo[battleEnvironment].background.palette, 0x20, 0x60);
|
||||
break;
|
||||
case MAP_BATTLE_SCENE_GYM:
|
||||
DecompressDataWithHeaderVram(gBattleEnvironmentTiles_Building, (void*)(BG_CHAR_ADDR(2)));
|
||||
|
|
@ -998,6 +1002,7 @@ static void LoadBattleBg(u8 battleBgType, enum BattleEnvironment battleEnvironme
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void PrintBattleBgName(u8 taskId)
|
||||
{
|
||||
struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
|
||||
|
|
@ -1005,11 +1010,12 @@ static void PrintBattleBgName(u8 taskId)
|
|||
u8 text[30+1];
|
||||
|
||||
if (data->battleBgType == 0)
|
||||
StringCopy(text, gBattleBackgroundTerrainNames[data->battleTerrain]);
|
||||
StringCopy(text, gBattleBackgroundTerrainNames[data->battleEnvironment]);
|
||||
else
|
||||
StringCopy(text, gBattleBackgroundNames[data->battleBgType]);
|
||||
AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, 0, 24, 0, NULL);
|
||||
}
|
||||
|
||||
static void UpdateBattleBg(u8 taskId, bool8 increment)
|
||||
{
|
||||
struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
|
||||
|
|
@ -1018,17 +1024,17 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
|
|||
{
|
||||
if (increment)
|
||||
{
|
||||
if (data->battleTerrain == BATTLE_ENVIRONMENT_PLAIN)
|
||||
if (data->battleEnvironment == BATTLE_ENVIRONMENT_PLAIN)
|
||||
data->battleBgType += 1;
|
||||
else
|
||||
data->battleTerrain += 1;
|
||||
data->battleEnvironment += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (data->battleTerrain == BATTLE_ENVIRONMENT_GRASS)
|
||||
if (data->battleEnvironment == BATTLE_ENVIRONMENT_GRASS)
|
||||
data->battleBgType = MAP_BATTLE_SCENE_RAYQUAZA;
|
||||
else
|
||||
data->battleTerrain -= 1;
|
||||
data->battleEnvironment -= 1;
|
||||
}
|
||||
}
|
||||
else if (data->battleBgType == MAP_BATTLE_SCENE_GYM)
|
||||
|
|
@ -1038,7 +1044,7 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
|
|||
else
|
||||
{
|
||||
data->battleBgType = MAP_BATTLE_SCENE_NORMAL;
|
||||
data->battleTerrain = BATTLE_ENVIRONMENT_PLAIN;
|
||||
data->battleEnvironment = BATTLE_ENVIRONMENT_PLAIN;
|
||||
}
|
||||
}
|
||||
else if (data->battleBgType == MAP_BATTLE_SCENE_RAYQUAZA)
|
||||
|
|
@ -1046,7 +1052,7 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
|
|||
if (increment)
|
||||
{
|
||||
data->battleBgType = MAP_BATTLE_SCENE_NORMAL;
|
||||
data->battleTerrain = BATTLE_ENVIRONMENT_GRASS;
|
||||
data->battleEnvironment = BATTLE_ENVIRONMENT_GRASS;
|
||||
}
|
||||
else
|
||||
data->battleBgType -= 1;
|
||||
|
|
@ -1061,7 +1067,7 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
|
|||
|
||||
PrintBattleBgName(taskId);
|
||||
|
||||
LoadBattleBg(data->battleBgType, data->battleTerrain);
|
||||
LoadBattleBg(data->battleBgType, data->battleEnvironment);
|
||||
}
|
||||
|
||||
// *******************************
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user