Ability refactor (#3861)
* Ability refactor * Adds abilities to RHH rom header --------- Co-authored-by: Martin Griffin <martinrgriffin@gmail.com>
This commit is contained in:
parent
16a3954f0e
commit
6bc0bf9f8b
@ -84,8 +84,6 @@ extern const struct OamData gOamData_BattleSpriteOpponentSide;
|
||||
extern const struct OamData gOamData_BattleSpritePlayerSide;
|
||||
extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1];
|
||||
extern const struct TrainerMoney gTrainerMoneyTable[];
|
||||
extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1];
|
||||
extern const u8 *const gAbilityDescriptionPointers[];
|
||||
|
||||
extern const u8 gStatusConditionString_PoisonJpn[8];
|
||||
extern const u8 gStatusConditionString_SleepJpn[8];
|
||||
|
||||
@ -509,6 +509,12 @@ struct BattleMove
|
||||
u16 argument;
|
||||
};
|
||||
|
||||
struct Ability
|
||||
{
|
||||
u8 name[ABILITY_NAME_LENGTH + 1];
|
||||
const u8 *description;
|
||||
};
|
||||
|
||||
#define SPINDA_SPOT_WIDTH 16
|
||||
#define SPINDA_SPOT_HEIGHT 16
|
||||
|
||||
@ -577,6 +583,7 @@ extern const u16 gUnionRoomFacilityClasses[];
|
||||
extern const struct SpriteTemplate gBattlerSpriteTemplates[];
|
||||
extern const s8 gNatureStatTable[][5];
|
||||
extern const u32 sExpCandyExperienceTable[];
|
||||
extern const struct Ability gAbilities[];
|
||||
|
||||
void ZeroBoxMonData(struct BoxPokemon *boxMon);
|
||||
void ZeroMonData(struct Pokemon *mon);
|
||||
|
||||
@ -864,7 +864,7 @@ static void PutAiInfoText(struct BattleDebugMenu *data)
|
||||
u16 holdEffect = AI_DATA->holdEffects[i];
|
||||
u16 item = AI_DATA->items[i];
|
||||
u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75;
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, gAbilityNames[ability], x, 0, 0, NULL);
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, gAbilities[ability].name, x, 0, 0, NULL);
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, ItemId_GetName(item), x, 15, 0, NULL);
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, GetHoldEffectName(holdEffect), x, 30, 0, NULL);
|
||||
}
|
||||
@ -897,7 +897,7 @@ static void PutAiPartyText(struct BattleDebugMenu *data)
|
||||
AddTextPrinterParameterized5(data->aiMovesWindowId, FONT_SMALL_NARROW, text, i * 41, 0, 0, NULL, 0, 0);
|
||||
}
|
||||
|
||||
txtPtr = StringCopyN(text, gAbilityNames[aiMons[i].ability], 7); // The screen is too small to fit the whole string, so we need to drop the last letters.
|
||||
txtPtr = StringCopyN(text, gAbilities[aiMons[i].ability].name, 7); // The screen is too small to fit the whole string, so we need to drop the last letters.
|
||||
*txtPtr = EOS;
|
||||
AddTextPrinterParameterized5(data->aiMovesWindowId, FONT_SMALL_NARROW, text, i * 41, 15, 0, NULL, 0, 0);
|
||||
|
||||
@ -1433,7 +1433,7 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data)
|
||||
}
|
||||
break;
|
||||
case LIST_ITEM_ABILITY:
|
||||
PadString(gAbilityNames[gBattleMons[data->battlerId].ability], text);
|
||||
PadString(gAbilities[gBattleMons[data->battlerId].ability].name, text);
|
||||
printer.currentY = printer.y = sSecondaryListTemplate.upText_Y;
|
||||
AddTextPrinter(&printer, 0, NULL);
|
||||
break;
|
||||
|
||||
@ -3113,7 +3113,7 @@ static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2)
|
||||
|
||||
static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2)
|
||||
{
|
||||
PrintOnAbilityPopUp(gAbilityNames[ability],
|
||||
PrintOnAbilityPopUp(gAbilities[ability].name,
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
|
||||
5, 12,
|
||||
|
||||
@ -409,8 +409,6 @@ static const u16 sTrainerBallTable[TRAINER_CLASS_COUNT] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#include "data/text/abilities.h"
|
||||
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
{
|
||||
[B_ACTION_USE_MOVE] = HandleAction_UseMove,
|
||||
|
||||
@ -3407,19 +3407,19 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
}
|
||||
break;
|
||||
case B_TXT_LAST_ABILITY: // last used ability
|
||||
toCpy = gAbilityNames[gLastUsedAbility];
|
||||
toCpy = gAbilities[gLastUsedAbility].name;
|
||||
break;
|
||||
case B_TXT_ATK_ABILITY: // attacker ability
|
||||
toCpy = gAbilityNames[sBattlerAbilities[gBattlerAttacker]];
|
||||
toCpy = gAbilities[sBattlerAbilities[gBattlerAttacker]].name;
|
||||
break;
|
||||
case B_TXT_DEF_ABILITY: // target ability
|
||||
toCpy = gAbilityNames[sBattlerAbilities[gBattlerTarget]];
|
||||
toCpy = gAbilities[sBattlerAbilities[gBattlerTarget]].name;
|
||||
break;
|
||||
case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability
|
||||
toCpy = gAbilityNames[sBattlerAbilities[gBattleScripting.battler]];
|
||||
toCpy = gAbilities[sBattlerAbilities[gBattleScripting.battler]].name;
|
||||
break;
|
||||
case B_TXT_EFF_ABILITY: // effect battler ability
|
||||
toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
|
||||
toCpy = gAbilities[sBattlerAbilities[gEffectBattler]].name;
|
||||
break;
|
||||
case B_TXT_TRAINER1_CLASS: // trainer class name
|
||||
toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A);
|
||||
@ -3781,7 +3781,7 @@ void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
srcID += 2;
|
||||
break;
|
||||
case B_BUFF_ABILITY: // ability names
|
||||
StringAppend(dst, gAbilityNames[T1_READ_16(&src[srcID + 1])]);
|
||||
StringAppend(dst, gAbilities[T1_READ_16(&src[srcID + 1])].name);
|
||||
srcID += 3;
|
||||
break;
|
||||
case B_BUFF_ITEM: // item name
|
||||
|
||||
2068
src/data/abilities.h
Normal file
2068
src/data/abilities.h
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -3264,7 +3264,7 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId)
|
||||
ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15);
|
||||
abilityId = GetAbilityBySpecies(sDebugMonData->species, 0);
|
||||
StringCopy(gStringVar1, gAbilityNames[abilityId]);
|
||||
StringCopy(gStringVar1, gAbilities[abilityId].name);
|
||||
StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility);
|
||||
AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL);
|
||||
|
||||
@ -3309,7 +3309,7 @@ static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId)
|
||||
StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]);
|
||||
ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15);
|
||||
StringCopy(gStringVar1, gAbilityNames[abilityId]);
|
||||
StringCopy(gStringVar1, gAbilities[abilityId].name);
|
||||
StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility);
|
||||
AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL);
|
||||
}
|
||||
|
||||
@ -4691,7 +4691,7 @@ void Task_AbilityCapsule(u8 taskId)
|
||||
}
|
||||
gPartyMenuUseExitCallback = TRUE;
|
||||
GetMonNickname(&gPlayerParty[tMonId], gStringVar1);
|
||||
StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]);
|
||||
StringCopy(gStringVar2, gAbilities[GetAbilityBySpecies(tSpecies, tAbilityNum)].name);
|
||||
StringExpandPlaceholders(gStringVar4, askText);
|
||||
PlaySE(SE_SELECT);
|
||||
DisplayPartyMenuMessage(gStringVar4, 1);
|
||||
@ -4778,7 +4778,7 @@ void Task_AbilityPatch(u8 taskId)
|
||||
}
|
||||
gPartyMenuUseExitCallback = TRUE;
|
||||
GetMonNickname(&gPlayerParty[tMonId], gStringVar1);
|
||||
StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]);
|
||||
StringCopy(gStringVar2, gAbilities[GetAbilityBySpecies(tSpecies, tAbilityNum)].name);
|
||||
StringExpandPlaceholders(gStringVar4, askText);
|
||||
PlaySE(SE_SELECT);
|
||||
DisplayPartyMenuMessage(gStringVar4, 1);
|
||||
|
||||
@ -6043,21 +6043,21 @@ static void PrintStatsScreen_Abilities(u8 taskId)
|
||||
if (gTasks[taskId].data[5] == 0)
|
||||
{
|
||||
ability0 = sPokedexView->sPokemonStats.ability0;
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[ability0], abilities_x, abilities_y);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14);
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilities[ability0].name, abilities_x, abilities_y);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilities[ability0].description, abilities_x, abilities_y + 14);
|
||||
|
||||
ability1 = sPokedexView->sPokemonStats.ability1;
|
||||
if (ability1 != ABILITY_NONE && ability1 != ability0)
|
||||
{
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[ability1], abilities_x, abilities_y + 30);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[ability1], abilities_x, abilities_y + 44);
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilities[ability1].name, abilities_x, abilities_y + 30);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilities[ability1].description, abilities_x, abilities_y + 44);
|
||||
}
|
||||
}
|
||||
else //Hidden abilities
|
||||
{
|
||||
abilityHidden = sPokedexView->sPokemonStats.abilityHidden;
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[abilityHidden], abilities_x, abilities_y);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[abilityHidden], abilities_x, abilities_y + 14);
|
||||
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilities[abilityHidden].name, abilities_x, abilities_y);
|
||||
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilities[abilityHidden].description, abilities_x, abilities_y + 14);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -87,6 +87,7 @@ EWRAM_DATA static struct MonSpritesGfxManager *sMonSpritesGfxManagers[MON_SPR_GF
|
||||
EWRAM_DATA static u8 sTriedEvolving = 0;
|
||||
|
||||
#include "data/battle_moves.h"
|
||||
#include "data/abilities.h"
|
||||
|
||||
// Used in an unreferenced function in RS.
|
||||
// Unreferenced here and in FRLG.
|
||||
|
||||
@ -3193,13 +3193,13 @@ static void PrintMonOTID(void)
|
||||
static void PrintMonAbilityName(void)
|
||||
{
|
||||
u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityNames[ability], 0, 1, 0, 1);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilities[ability].name, 0, 1, 0, 1);
|
||||
}
|
||||
|
||||
static void PrintMonAbilityDescription(void)
|
||||
{
|
||||
u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilities[ability].description, 0, 17, 0, 0);
|
||||
}
|
||||
|
||||
static void BufferMonTrainerMemo(void)
|
||||
|
||||
@ -151,8 +151,8 @@ static const struct GFRomHeader sGFRomHeader = {
|
||||
.externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData),
|
||||
.unk18 = 0x00000000,
|
||||
.speciesInfo = gSpeciesInfo,
|
||||
.abilityNames = gAbilityNames,
|
||||
.abilityDescriptions = gAbilityDescriptionPointers,
|
||||
//.abilityNames = gAbilityNames, //handled in gAbilities
|
||||
//.abilityDescriptions = gAbilityDescriptionPointers, //handled in gAbilities
|
||||
.items = gItems,
|
||||
.moves = gBattleMoves,
|
||||
.ballGfx = gBallSpriteSheets,
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/expansion.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/species.h"
|
||||
@ -18,6 +19,8 @@ struct RHHRomHeader
|
||||
/*0x09*/ u8 expansionVersionFlags;
|
||||
/*0x0C*/ u32 movesCount;
|
||||
/*0x10*/ u32 numSpecies;
|
||||
/*0x14*/ u32 abilitiesCount;
|
||||
/*0x18*/ const struct Ability *abilities;
|
||||
};
|
||||
|
||||
static const struct RHHRomHeader sRHHRomHeader =
|
||||
@ -29,4 +32,6 @@ static const struct RHHRomHeader sRHHRomHeader =
|
||||
.expansionVersionFlags = (EXPANSION_TAGGED_RELEASE << 0),
|
||||
.movesCount = MOVES_COUNT,
|
||||
.numSpecies = NUM_SPECIES,
|
||||
.abilitiesCount = ABILITIES_COUNT,
|
||||
.abilities = gAbilities,
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user