larger ability popup, fix ability name printing/clearing, and config for longer ability names

This commit is contained in:
ghoulslash 2021-11-29 12:42:01 -05:00
parent 3ac480076c
commit 7a7c6afc39
5 changed files with 441 additions and 135 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 275 B

View File

@ -24,7 +24,12 @@ struct UnknownPokemonStruct4
struct ChooseMoveStruct;
#define TYPE_NAME_LENGTH 6
#if B_EXPANDED_ABILITY_NAMES
#define ABILITY_NAME_LENGTH 16
#else
#define ABILITY_NAME_LENGTH 12
#endif
// defines for the 'DoBounceEffect' function
#define BOUNCE_MON 0x0

View File

@ -162,6 +162,7 @@
#define B_RAMPAGE_CANCELLING GEN_7 // In Gen5+, a failed Thrash, etc, will cancel except on its last turn.
// Ability settings
#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters.
#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger.
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.

View File

@ -2855,83 +2855,94 @@ static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp2 =
static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] =
{
{29, 80}, // player left
{204, 19}, // opponent left
{29, 97}, // player right
{204, 36}, // opponent right
{186, 19}, // opponent left
{29, 97}, // player right
{186, 36}, // opponent right
};
static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] =
{
{29, 93}, // player
{204, 23}, // opponent
{29, 97}, // player
{186, 57}, // opponent
};
static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId)
{
u8 color[3] = {color1, color2, color3};
struct WindowTemplate winTemplate = {0};
winTemplate.width = 8;
winTemplate.height = 2;
u8 color[3] = {color1, color2, color3};
struct WindowTemplate winTemplate = {0};
winTemplate.width = 8;
winTemplate.height = 2;
*windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(*windowId, (color1 << 4) | (color1));
*windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1));
AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str);
return (u8*)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA));
AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str);
return (u8*)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA));
}
static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 arg2, bool32 arg3)
{
CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
if (arg2 > 0)
{
do
{
if (arg3)
CpuCopy32(windowTileData + 16, dest + 16, 16);
else
CpuCopy32(windowTileData + 20, dest + 20, 12);
dest += 32, windowTileData += 32;
arg2--;
} while (arg2 != 0);
}
CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
if (arg2 > 0)
{
do
{
if (arg3)
CpuCopy32(windowTileData + 16, dest + 16, 16);
else
CpuCopy32(windowTileData + 20, dest + 20, 12);
dest += 32, windowTileData += 32;
arg2--;
} while (arg2 != 0);
}
}
#define MAX_CHARS_PRINTED 12
static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3)
{
u32 windowId, i;
u8 *windowTileData;
u8 text1[MAX_CHARS_PRINTED + 2];
u8 text2[MAX_CHARS_PRINTED + 2];
u32 windowId, i;
u8 *windowTileData;
u8 text1[MAX_CHARS_PRINTED];
u8 text2[MAX_CHARS_PRINTED];
for (i = 0; i < MAX_CHARS_PRINTED + 1; i++)
{
text1[i] = str[i];
if (text1[i] == EOS)
break;
}
text1[i] = EOS;
for (i = 0; i < MAX_CHARS_PRINTED; i++)
{
text1[i] = str[i];
if (text1[i] == EOS)
break;
}
text1[i] = EOS;
windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text1, x1, y, color1, color2, color3, &windowId);
TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0));
RemoveWindow(windowId);
windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text1, x1, y, color1, color2, color3, &windowId);
TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0));
RemoveWindow(windowId);
if (i == MAX_CHARS_PRINTED + 1)
{
for (i = 0; i < MAX_CHARS_PRINTED; i++)
{
text2[i] = str[MAX_CHARS_PRINTED + i];
if (text2[i] == EOS)
break;
}
text2[i] = EOS;
if (i == MAX_CHARS_PRINTED)
{
for (i = 0; i < MAX_CHARS_PRINTED; i++)
{
text2[i] = str[MAX_CHARS_PRINTED + i];
if (text2[i] == EOS)
break;
}
text2[i] = EOS;
windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId);
TextIntoAbilityPopUp(spriteTileData2, windowTileData, 1, (y == 0));
RemoveWindow(windowId);
}
windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId);
TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0));
RemoveWindow(windowId);
}
}
static const u8 sText_Space16[]= _(" ");
static void ClearAbilityName(u8 spriteId1, u8 spriteId2)
{
PrintOnAbilityPopUp(sText_Space16,
(void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
(void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
6, 1,
4,
7, 9, 1);
}
static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2)
@ -2976,111 +2987,125 @@ static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2)
PrintOnAbilityPopUp(gAbilityNames[ability],
(void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
(void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
7, 1,
6, 1,
4,
7, 9, 1);
}
#define PIXEL_COORDS_TO_OFFSET(x, y)( \
/*Add tiles by X*/ \
((y / 8) * 32 * 8) \
/*Add tiles by X*/ \
+ ((x / 8) * 32) \
/*Add pixels by Y*/ \
+ ((((y) - ((y / 8) * 8))) * 4) \
/*Add pixels by X*/ \
#define PIXEL_COORDS_TO_OFFSET(x, y)( \
/*Add tiles by X*/ \
((y / 8) * 32 * 8) \
/*Add tiles by X*/ \
+ ((x / 8) * 32) \
/*Add pixels by Y*/ \
+ ((((y) - ((y / 8) * 8))) * 4) \
/*Add pixels by X*/ \
+ ((((x) - ((x / 8) * 8)) / 2)))
static const u16 sOverwrittenPixelsTable[][2] =
{
{PIXEL_COORDS_TO_OFFSET(0, 0), 5},
{PIXEL_COORDS_TO_OFFSET(0, 1), 5},
{PIXEL_COORDS_TO_OFFSET(0, 2), 5},
{PIXEL_COORDS_TO_OFFSET(0, 3), 5},
{PIXEL_COORDS_TO_OFFSET(0, 4), 5},
{PIXEL_COORDS_TO_OFFSET(0, 5), 5},
{PIXEL_COORDS_TO_OFFSET(0, 6), 5},
{PIXEL_COORDS_TO_OFFSET(0, 7), 3},
{PIXEL_COORDS_TO_OFFSET(0, 8), 3},
{PIXEL_COORDS_TO_OFFSET(0, 9), 3},
{PIXEL_COORDS_TO_OFFSET(0, 10), 3},
{PIXEL_COORDS_TO_OFFSET(0, 11), 3},
{PIXEL_COORDS_TO_OFFSET(0, 12), 3},
{PIXEL_COORDS_TO_OFFSET(0, 13), 8},
{PIXEL_COORDS_TO_OFFSET(0, 0), 5},
{PIXEL_COORDS_TO_OFFSET(0, 1), 5},
{PIXEL_COORDS_TO_OFFSET(0, 2), 5},
{PIXEL_COORDS_TO_OFFSET(0, 3), 5},
{PIXEL_COORDS_TO_OFFSET(0, 4), 5},
{PIXEL_COORDS_TO_OFFSET(0, 5), 5},
{PIXEL_COORDS_TO_OFFSET(0, 6), 5},
{PIXEL_COORDS_TO_OFFSET(0, 7), 3},
{PIXEL_COORDS_TO_OFFSET(0, 8), 3},
{PIXEL_COORDS_TO_OFFSET(0, 9), 3},
{PIXEL_COORDS_TO_OFFSET(0, 10), 3},
{PIXEL_COORDS_TO_OFFSET(0, 11), 3},
{PIXEL_COORDS_TO_OFFSET(0, 12), 3},
{PIXEL_COORDS_TO_OFFSET(0, 13), 8},
{PIXEL_COORDS_TO_OFFSET(8, 13), 8},
{PIXEL_COORDS_TO_OFFSET(16, 13), 8},
{PIXEL_COORDS_TO_OFFSET(24, 13), 8},
{PIXEL_COORDS_TO_OFFSET(32, 13), 8},
{PIXEL_COORDS_TO_OFFSET(40, 13), 8},
{PIXEL_COORDS_TO_OFFSET(48, 13), 8},
{PIXEL_COORDS_TO_OFFSET(56, 13), 8},
{PIXEL_COORDS_TO_OFFSET(8, 13), 8},
{PIXEL_COORDS_TO_OFFSET(16, 13), 8},
{PIXEL_COORDS_TO_OFFSET(24, 13), 8},
{PIXEL_COORDS_TO_OFFSET(32, 13), 8},
{PIXEL_COORDS_TO_OFFSET(40, 13), 8},
{PIXEL_COORDS_TO_OFFSET(48, 13), 8},
{PIXEL_COORDS_TO_OFFSET(56, 13), 8},
{PIXEL_COORDS_TO_OFFSET(0, 14), 8},
{PIXEL_COORDS_TO_OFFSET(8, 14), 8},
{PIXEL_COORDS_TO_OFFSET(16, 14), 8},
{PIXEL_COORDS_TO_OFFSET(24, 14), 8},
{PIXEL_COORDS_TO_OFFSET(32, 14), 8},
{PIXEL_COORDS_TO_OFFSET(40, 14), 8},
{PIXEL_COORDS_TO_OFFSET(48, 14), 8},
{PIXEL_COORDS_TO_OFFSET(56, 14), 8},
{PIXEL_COORDS_TO_OFFSET(0, 14), 8},
{PIXEL_COORDS_TO_OFFSET(8, 14), 8},
{PIXEL_COORDS_TO_OFFSET(16, 14), 8},
{PIXEL_COORDS_TO_OFFSET(24, 14), 8},
{PIXEL_COORDS_TO_OFFSET(32, 14), 8},
{PIXEL_COORDS_TO_OFFSET(40, 14), 8},
{PIXEL_COORDS_TO_OFFSET(48, 14), 8},
{PIXEL_COORDS_TO_OFFSET(56, 14), 8},
{PIXEL_COORDS_TO_OFFSET(0, 15), 3},
{PIXEL_COORDS_TO_OFFSET(0, 16), 3},
{PIXEL_COORDS_TO_OFFSET(0, 17), 3},
{PIXEL_COORDS_TO_OFFSET(0, 18), 3},
{PIXEL_COORDS_TO_OFFSET(0, 19), 3},
{PIXEL_COORDS_TO_OFFSET(0, 20), 3},
{PIXEL_COORDS_TO_OFFSET(0, 21), 3},
{PIXEL_COORDS_TO_OFFSET(0, 22), 3},
{PIXEL_COORDS_TO_OFFSET(0, 23), 3},
{PIXEL_COORDS_TO_OFFSET(0, 24), 3},
{PIXEL_COORDS_TO_OFFSET(0, 25), 3},
{PIXEL_COORDS_TO_OFFSET(0, 26), 3},
{PIXEL_COORDS_TO_OFFSET(0, 15), 3},
{PIXEL_COORDS_TO_OFFSET(0, 16), 3},
{PIXEL_COORDS_TO_OFFSET(0, 17), 3},
{PIXEL_COORDS_TO_OFFSET(0, 18), 3},
{PIXEL_COORDS_TO_OFFSET(0, 19), 3},
{PIXEL_COORDS_TO_OFFSET(0, 20), 3},
{PIXEL_COORDS_TO_OFFSET(0, 21), 3},
{PIXEL_COORDS_TO_OFFSET(0, 22), 3},
{PIXEL_COORDS_TO_OFFSET(0, 23), 3},
{PIXEL_COORDS_TO_OFFSET(0, 24), 3},
{PIXEL_COORDS_TO_OFFSET(0, 25), 3},
{PIXEL_COORDS_TO_OFFSET(0, 26), 3},
//Second Row Of Image
{PIXEL_COORDS_TO_OFFSET(0, 45), 8},
{PIXEL_COORDS_TO_OFFSET(0, 46), 8},
{PIXEL_COORDS_TO_OFFSET(0, 47), 8},
//{PIXEL_COORDS_TO_OFFSET(0, 48), 8}, // cuts off the top of the 'G' in Neutralizing Gas
{PIXEL_COORDS_TO_OFFSET(8, 45), 8},
{PIXEL_COORDS_TO_OFFSET(8, 46), 8},
{PIXEL_COORDS_TO_OFFSET(8, 47), 8},
{PIXEL_COORDS_TO_OFFSET(8, 48), 8},
{PIXEL_COORDS_TO_OFFSET(16, 45), 8},
{PIXEL_COORDS_TO_OFFSET(16, 46), 8},
{PIXEL_COORDS_TO_OFFSET(16, 47), 8},
{PIXEL_COORDS_TO_OFFSET(16, 48), 8},
};
static inline void CopyPixels(u8 *dest, const u8 *src, u32 pixelCount)
{
u32 i = 0;
u32 i = 0;
if (pixelCount & 1)
{
while (pixelCount != 0)
{
dest[i] &= ~(0xF);
dest[i] |= (src[i] & 0xF);
if (--pixelCount != 0)
{
dest[i] &= ~(0xF0);
dest[i] |= (src[i] & 0xF0);
pixelCount--;
}
i++;
}
}
else
{
for (i = 0; i < pixelCount / 2; i++)
dest[i] = src[i];
}
if (pixelCount & 1)
{
while (pixelCount != 0)
{
dest[i] &= ~(0xF);
dest[i] |= (src[i] & 0xF);
if (--pixelCount != 0)
{
dest[i] &= ~(0xF0);
dest[i] |= (src[i] & 0xF0);
pixelCount--;
}
i++;
}
}
else
{
for (i = 0; i < pixelCount / 2; i++)
dest[i] = src[i];
}
}
static void RestoreOverwrittenPixels(u8 *tiles)
{
u32 i;
u8 *buffer = Alloc(sizeof(sAbilityPopUpGfx) * 2);
u32 i;
u8 *buffer = Alloc(sizeof(sAbilityPopUpGfx) * 2);
CpuCopy32(tiles, buffer, sizeof(sAbilityPopUpGfx));
CpuCopy32(tiles, buffer, sizeof(sAbilityPopUpGfx));
for (i = 0; i < ARRAY_COUNT(sOverwrittenPixelsTable); i++)
{
CopyPixels(buffer + sOverwrittenPixelsTable[i][0],
sAbilityPopUpGfx + sOverwrittenPixelsTable[i][0],
sOverwrittenPixelsTable[i][1]);
}
for (i = 0; i < ARRAY_COUNT(sOverwrittenPixelsTable); i++)
{
CopyPixels(buffer + sOverwrittenPixelsTable[i][0],
sAbilityPopUpGfx + sOverwrittenPixelsTable[i][0],
sOverwrittenPixelsTable[i][1]);
}
CpuCopy32(buffer, tiles, sizeof(sAbilityPopUpGfx));
Free(buffer);
CpuCopy32(buffer, tiles, sizeof(sAbilityPopUpGfx));
Free(buffer);
}
void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
@ -3163,6 +3188,7 @@ void UpdateAbilityPopup(u8 battlerId)
u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battlerId][1];
u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battlerId].ability;
ClearAbilityName(spriteId1, spriteId2);
PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
}

View File

@ -255,6 +255,279 @@ static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat.");
static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
#if B_EXPANDED_ABILITY_NAMES == TRUE
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
{
[ABILITY_NONE] = _("-------"),
[ABILITY_STENCH] = _("Stench"),
[ABILITY_DRIZZLE] = _("Drizzle"),
[ABILITY_SPEED_BOOST] = _("Speed Boost"),
[ABILITY_BATTLE_ARMOR] = _("Battle Armor"),
[ABILITY_STURDY] = _("Sturdy"),
[ABILITY_DAMP] = _("Damp"),
[ABILITY_LIMBER] = _("Limber"),
[ABILITY_SAND_VEIL] = _("Sand Veil"),
[ABILITY_STATIC] = _("Static"),
[ABILITY_VOLT_ABSORB] = _("Volt Absorb"),
[ABILITY_WATER_ABSORB] = _("Water Absorb"),
[ABILITY_OBLIVIOUS] = _("Oblivious"),
[ABILITY_CLOUD_NINE] = _("Cloud Nine"),
[ABILITY_COMPOUND_EYES] = _("CompoundEyes"),
[ABILITY_INSOMNIA] = _("Insomnia"),
[ABILITY_COLOR_CHANGE] = _("Color Change"),
[ABILITY_IMMUNITY] = _("Immunity"),
[ABILITY_FLASH_FIRE] = _("Flash Fire"),
[ABILITY_SHIELD_DUST] = _("Shield Dust"),
[ABILITY_OWN_TEMPO] = _("Own Tempo"),
[ABILITY_SUCTION_CUPS] = _("Suction Cups"),
[ABILITY_INTIMIDATE] = _("Intimidate"),
[ABILITY_SHADOW_TAG] = _("Shadow Tag"),
[ABILITY_ROUGH_SKIN] = _("Rough Skin"),
[ABILITY_WONDER_GUARD] = _("Wonder Guard"),
[ABILITY_LEVITATE] = _("Levitate"),
[ABILITY_EFFECT_SPORE] = _("Effect Spore"),
[ABILITY_SYNCHRONIZE] = _("Synchronize"),
[ABILITY_CLEAR_BODY] = _("Clear Body"),
[ABILITY_NATURAL_CURE] = _("Natural Cure"),
[ABILITY_LIGHTNING_ROD] = _("LightningRod"),
[ABILITY_SERENE_GRACE] = _("Serene Grace"),
[ABILITY_SWIFT_SWIM] = _("Swift Swim"),
[ABILITY_CHLOROPHYLL] = _("Chlorophyll"),
[ABILITY_ILLUMINATE] = _("Illuminate"),
[ABILITY_TRACE] = _("Trace"),
[ABILITY_HUGE_POWER] = _("Huge Power"),
[ABILITY_POISON_POINT] = _("Poison Point"),
[ABILITY_INNER_FOCUS] = _("Inner Focus"),
[ABILITY_MAGMA_ARMOR] = _("Magma Armor"),
[ABILITY_WATER_VEIL] = _("Water Veil"),
[ABILITY_MAGNET_PULL] = _("Magnet Pull"),
[ABILITY_SOUNDPROOF] = _("Soundproof"),
[ABILITY_RAIN_DISH] = _("Rain Dish"),
[ABILITY_SAND_STREAM] = _("Sand Stream"),
[ABILITY_PRESSURE] = _("Pressure"),
[ABILITY_THICK_FAT] = _("Thick Fat"),
[ABILITY_EARLY_BIRD] = _("Early Bird"),
[ABILITY_FLAME_BODY] = _("Flame Body"),
[ABILITY_RUN_AWAY] = _("Run Away"),
[ABILITY_KEEN_EYE] = _("Keen Eye"),
[ABILITY_HYPER_CUTTER] = _("Hyper Cutter"),
[ABILITY_PICKUP] = _("Pickup"),
[ABILITY_TRUANT] = _("Truant"),
[ABILITY_HUSTLE] = _("Hustle"),
[ABILITY_CUTE_CHARM] = _("Cute Charm"),
[ABILITY_PLUS] = _("Plus"),
[ABILITY_MINUS] = _("Minus"),
[ABILITY_FORECAST] = _("Forecast"),
[ABILITY_STICKY_HOLD] = _("Sticky Hold"),
[ABILITY_SHED_SKIN] = _("Shed Skin"),
[ABILITY_GUTS] = _("Guts"),
[ABILITY_MARVEL_SCALE] = _("Marvel Scale"),
[ABILITY_LIQUID_OOZE] = _("Liquid Ooze"),
[ABILITY_OVERGROW] = _("Overgrow"),
[ABILITY_BLAZE] = _("Blaze"),
[ABILITY_TORRENT] = _("Torrent"),
[ABILITY_SWARM] = _("Swarm"),
[ABILITY_ROCK_HEAD] = _("Rock Head"),
[ABILITY_DROUGHT] = _("Drought"),
[ABILITY_ARENA_TRAP] = _("Arena Trap"),
[ABILITY_VITAL_SPIRIT] = _("Vital Spirit"),
[ABILITY_WHITE_SMOKE] = _("White Smoke"),
[ABILITY_PURE_POWER] = _("Pure Power"),
[ABILITY_SHELL_ARMOR] = _("Shell Armor"),
[ABILITY_AIR_LOCK] = _("Air Lock"),
[ABILITY_TANGLED_FEET] = _("Tangled Feet"),
[ABILITY_MOTOR_DRIVE] = _("Motor Drive"),
[ABILITY_RIVALRY] = _("Rivalry"),
[ABILITY_STEADFAST] = _("Steadfast"),
[ABILITY_SNOW_CLOAK] = _("Snow Cloak"),
[ABILITY_GLUTTONY] = _("Gluttony"),
[ABILITY_ANGER_POINT] = _("Anger Point"),
[ABILITY_UNBURDEN] = _("Unburden"),
[ABILITY_HEATPROOF] = _("Heatproof"),
[ABILITY_SIMPLE] = _("Simple"),
[ABILITY_DRY_SKIN] = _("Dry Skin"),
[ABILITY_DOWNLOAD] = _("Download"),
[ABILITY_IRON_FIST] = _("Iron Fist"),
[ABILITY_POISON_HEAL] = _("Poison Heal"),
[ABILITY_ADAPTABILITY] = _("Adaptability"),
[ABILITY_SKILL_LINK] = _("Skill Link"),
[ABILITY_HYDRATION] = _("Hydration"),
[ABILITY_SOLAR_POWER] = _("Solar Power"),
[ABILITY_QUICK_FEET] = _("Quick Feet"),
[ABILITY_NORMALIZE] = _("Normalize"),
[ABILITY_SNIPER] = _("Sniper"),
[ABILITY_MAGIC_GUARD] = _("Magic Guard"),
[ABILITY_NO_GUARD] = _("No Guard"),
[ABILITY_STALL] = _("Stall"),
[ABILITY_TECHNICIAN] = _("Technician"),
[ABILITY_LEAF_GUARD] = _("Leaf Guard"),
[ABILITY_KLUTZ] = _("Klutz"),
[ABILITY_MOLD_BREAKER] = _("Mold Breaker"),
[ABILITY_SUPER_LUCK] = _("Super Luck"),
[ABILITY_AFTERMATH] = _("Aftermath"),
[ABILITY_ANTICIPATION] = _("Anticipation"),
[ABILITY_FOREWARN] = _("Forewarn"),
[ABILITY_UNAWARE] = _("Unaware"),
[ABILITY_TINTED_LENS] = _("Tinted Lens"),
[ABILITY_FILTER] = _("Filter"),
[ABILITY_SLOW_START] = _("Slow Start"),
[ABILITY_SCRAPPY] = _("Scrappy"),
[ABILITY_STORM_DRAIN] = _("Storm Drain"),
[ABILITY_ICE_BODY] = _("Ice Body"),
[ABILITY_SOLID_ROCK] = _("Solid Rock"),
[ABILITY_SNOW_WARNING] = _("Snow Warning"),
[ABILITY_HONEY_GATHER] = _("Honey Gather"),
[ABILITY_FRISK] = _("Frisk"),
[ABILITY_RECKLESS] = _("Reckless"),
[ABILITY_MULTITYPE] = _("Multitype"),
[ABILITY_FLOWER_GIFT] = _("Flower Gift"),
[ABILITY_BAD_DREAMS] = _("Bad Dreams"),
[ABILITY_PICKPOCKET] = _("Pickpocket"),
[ABILITY_SHEER_FORCE] = _("Sheer Force"),
[ABILITY_CONTRARY] = _("Contrary"),
[ABILITY_UNNERVE] = _("Unnerve"),
[ABILITY_DEFIANT] = _("Defiant"),
[ABILITY_DEFEATIST] = _("Defeatist"),
[ABILITY_CURSED_BODY] = _("Cursed Body"),
[ABILITY_HEALER] = _("Healer"),
[ABILITY_FRIEND_GUARD] = _("Friend Guard"),
[ABILITY_WEAK_ARMOR] = _("Weak Armor"),
[ABILITY_HEAVY_METAL] = _("Heavy Metal"),
[ABILITY_LIGHT_METAL] = _("Light Metal"),
[ABILITY_MULTISCALE] = _("Multiscale"),
[ABILITY_TOXIC_BOOST] = _("Toxic Boost"),
[ABILITY_FLARE_BOOST] = _("Flare Boost"),
[ABILITY_HARVEST] = _("Harvest"),
[ABILITY_TELEPATHY] = _("Telepathy"),
[ABILITY_MOODY] = _("Moody"),
[ABILITY_OVERCOAT] = _("Overcoat"),
[ABILITY_POISON_TOUCH] = _("Poison Touch"),
[ABILITY_REGENERATOR] = _("Regenerator"),
[ABILITY_BIG_PECKS] = _("Big Pecks"),
[ABILITY_SAND_RUSH] = _("Sand Rush"),
[ABILITY_WONDER_SKIN] = _("Wonder Skin"),
[ABILITY_ANALYTIC] = _("Analytic"),
[ABILITY_ILLUSION] = _("Illusion"),
[ABILITY_IMPOSTER] = _("Imposter"),
[ABILITY_INFILTRATOR] = _("Infiltrator"),
[ABILITY_MUMMY] = _("Mummy"),
[ABILITY_MOXIE] = _("Moxie"),
[ABILITY_JUSTIFIED] = _("Justified"),
[ABILITY_RATTLED] = _("Rattled"),
[ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"),
[ABILITY_SAP_SIPPER] = _("Sap Sipper"),
[ABILITY_PRANKSTER] = _("Prankster"),
[ABILITY_SAND_FORCE] = _("Sand Force"),
[ABILITY_IRON_BARBS] = _("Iron Barbs"),
[ABILITY_ZEN_MODE] = _("Zen Mode"),
[ABILITY_VICTORY_STAR] = _("Victory Star"),
[ABILITY_TURBOBLAZE] = _("Turboblaze"),
[ABILITY_TERAVOLT] = _("Teravolt"),
[ABILITY_AROMA_VEIL] = _("Aroma Veil"),
[ABILITY_FLOWER_VEIL] = _("Flower Veil"),
[ABILITY_CHEEK_POUCH] = _("Cheek Pouch"),
[ABILITY_PROTEAN] = _("Protean"),
[ABILITY_FUR_COAT] = _("Fur Coat"),
[ABILITY_MAGICIAN] = _("Magician"),
[ABILITY_BULLETPROOF] = _("Bulletproof"),
[ABILITY_COMPETITIVE] = _("Competitive"),
[ABILITY_STRONG_JAW] = _("Strong Jaw"),
[ABILITY_REFRIGERATE] = _("Refrigerate"),
[ABILITY_SWEET_VEIL] = _("Sweet Veil"),
[ABILITY_STANCE_CHANGE] = _("Stance Change"),
[ABILITY_GALE_WINGS] = _("Gale Wings"),
[ABILITY_MEGA_LAUNCHER] = _("Mega Launcher"),
[ABILITY_GRASS_PELT] = _("Grass Pelt"),
[ABILITY_SYMBIOSIS] = _("Symbiosis"),
[ABILITY_TOUGH_CLAWS] = _("Tough Claws"),
[ABILITY_PIXILATE] = _("Pixilate"),
[ABILITY_GOOEY] = _("Gooey"),
[ABILITY_AERILATE] = _("Aerilate"),
[ABILITY_PARENTAL_BOND] = _("Parental Bond"),
[ABILITY_DARK_AURA] = _("Dark Aura"),
[ABILITY_FAIRY_AURA] = _("Fairy Aura"),
[ABILITY_AURA_BREAK] = _("Aura Break"),
[ABILITY_PRIMORDIAL_SEA] = _("Primordial Sea"),
[ABILITY_DESOLATE_LAND] = _("Desolate Land"),
[ABILITY_DELTA_STREAM] = _("Delta Stream"),
[ABILITY_STAMINA] = _("Stamina"),
[ABILITY_WIMP_OUT] = _("Wimp Out"),
[ABILITY_EMERGENCY_EXIT] = _("Emergency Exit"),
[ABILITY_WATER_COMPACTION] = _("Water Compaction"),
[ABILITY_MERCILESS] = _("Merciless"),
[ABILITY_SHIELDS_DOWN] = _("Shields Down"),
[ABILITY_STAKEOUT] = _("Stakeout"),
[ABILITY_WATER_BUBBLE] = _("Water Bubble"),
[ABILITY_STEELWORKER] = _("Steelworker"),
[ABILITY_BERSERK] = _("Berserk"),
[ABILITY_SLUSH_RUSH] = _("Slush Rush"),
[ABILITY_LONG_REACH] = _("Long Reach"),
[ABILITY_LIQUID_VOICE] = _("Liquid Voice"),
[ABILITY_TRIAGE] = _("Triage"),
[ABILITY_GALVANIZE] = _("Galvanize"),
[ABILITY_SURGE_SURFER] = _("Surge Surfer"),
[ABILITY_SCHOOLING] = _("Schooling"),
[ABILITY_DISGUISE] = _("Disguise"),
[ABILITY_BATTLE_BOND] = _("Battle Bond"),
[ABILITY_POWER_CONSTRUCT] = _("Power Construct"),
[ABILITY_CORROSION] = _("Corrosion"),
[ABILITY_COMATOSE] = _("Comatose"),
[ABILITY_QUEENLY_MAJESTY] = _("Queenly Majesty"),
[ABILITY_INNARDS_OUT] = _("Innards Out"),
[ABILITY_DANCER] = _("Dancer"),
[ABILITY_BATTERY] = _("Battery"),
[ABILITY_FLUFFY] = _("Fluffy"),
[ABILITY_DAZZLING] = _("Dazzling"),
[ABILITY_SOUL_HEART] = _("Soul-Heart"),
[ABILITY_TANGLING_HAIR] = _("Tangling Hair"),
[ABILITY_RECEIVER] = _("Receiver"),
[ABILITY_POWER_OF_ALCHEMY] = _("Power Of Alchemy"),
[ABILITY_BEAST_BOOST] = _("Beast Boost"),
[ABILITY_RKS_SYSTEM] = _("RKS System"),
[ABILITY_ELECTRIC_SURGE] = _("Electric Surge"),
[ABILITY_PSYCHIC_SURGE] = _("Psychic Surge"),
[ABILITY_MISTY_SURGE] = _("Misty Surge"),
[ABILITY_GRASSY_SURGE] = _("Grassy Surge"),
[ABILITY_FULL_METAL_BODY] = _("Full Metal Body"),
[ABILITY_SHADOW_SHIELD] = _("Shadow Shield"),
[ABILITY_PRISM_ARMOR] = _("Prism Armor"),
[ABILITY_NEUROFORCE] = _("Neuroforce"),
[ABILITY_INTREPID_SWORD] = _("Intrepid Sword"),
[ABILITY_DAUNTLESS_SHIELD] = _("Dauntless Shield"),
[ABILITY_LIBERO] = _("Libero"),
[ABILITY_BALL_FETCH] = _("Ball Fetch"),
[ABILITY_COTTON_DOWN] = _("Cotton Down"),
[ABILITY_PROPELLER_TAIL] = _("Propeller Tail"),
[ABILITY_MIRROR_ARMOR] = _("Mirror Armor"),
[ABILITY_GULP_MISSILE] = _("Gulp Missile"),
[ABILITY_STALWART] = _("Stalwart"),
[ABILITY_STEAM_ENGINE] = _("Steam Engine"),
[ABILITY_PUNK_ROCK] = _("Punk Rock"),
[ABILITY_SAND_SPIT] = _("Sand Spit"),
[ABILITY_ICE_SCALES] = _("Ice Scales"),
[ABILITY_RIPEN] = _("Ripen"),
[ABILITY_ICE_FACE] = _("Ice Face"),
[ABILITY_POWER_SPOT] = _("Power Spot"),
[ABILITY_MIMICRY] = _("Mimicry"),
[ABILITY_SCREEN_CLEANER] = _("Screen Cleaner"),
[ABILITY_STEELY_SPIRIT] = _("Steely Spirit"),
[ABILITY_PERISH_BODY] = _("Perish Body"),
[ABILITY_WANDERING_SPIRIT] = _("Wandering Spirit"),
[ABILITY_GORILLA_TACTICS] = _("Gorilla Tactics"),
[ABILITY_NEUTRALIZING_GAS] = _("Neutralizing Gas"),
[ABILITY_PASTEL_VEIL] = _("Pastel Veil"),
[ABILITY_HUNGER_SWITCH] = _("Hunger Switch"),
[ABILITY_QUICK_DRAW] = _("Quick Draw"),
[ABILITY_UNSEEN_FIST] = _("Unseen Fist"),
[ABILITY_CURIOUS_MEDICINE] = _("Curious Medicine"),
[ABILITY_TRANSISTOR] = _("Transistor"),
[ABILITY_DRAGONS_MAW] = _("Dragon's Maw"),
[ABILITY_CHILLING_NEIGH] = _("Chilling Neigh"),
[ABILITY_GRIM_NEIGH] = _("Grim Neigh"),
[ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
};
#else // 12 characters
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
{
[ABILITY_NONE] = _("-------"),
@ -526,6 +799,7 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
[ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
};
#endif
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
{