#include "global.h" #include "battle.h" #include "battle_message.h" #include "constants/battle_string_ids.h" #include "constants/moves.h" #include "text.h" #include "string_util.h" #include "constants/items.h" #include "constants/trainers.h" #include "event_data.h" #include "link.h" #include "item.h" #include "window.h" #include "palette.h" #include "battle_controllers.h" #include "battle_setup.h" #include "menu.h" #include "recorded_battle.h" #include "international_string_util.h" struct BattleWindowText { u8 fillValue; u8 fontId; u8 x; u8 y; u8 letterSpacing; u8 lineSpacing; u8 speed; u8 fgColor; u8 bgColor; u8 shadowColor; }; extern u8 gUnknown_0203C7B4; extern const u8 gMoveNames[MOVES_COUNT][13]; extern const u8 gTrainerClassNames[][13]; extern const u16 gUnknown_08D85620[]; // strings extern const u8 gText_PkmnBoxSomeonesPCFull[]; extern const u8 gText_PkmnBoxLanettesPCFull[]; extern const u8 gText_PkmnTransferredSomeonesPC[]; extern const u8 gText_PkmnTransferredLanettesPC[]; extern u8 GetFrontierBrainTrainerClass(void); // battle_frontier_2 extern u8 GetFrontierOpponentClass(u16 trainerId); // battle_tower extern u8 sub_81D5530(u16 trainerId); // pokenav extern u8 GetEreaderTrainerClassId(void); // battle_tower extern void CopyFrontierBrainTrainerName(u8 *txtPtr); // battle_frontier_2 extern void sub_81D5554(u8 *txtPtr, u16 trainerId); // pokenav extern void GetEreaderTrainerName(u8 *txtPtr); extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2 extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav extern void GetFrontierTrainerName(u8 *dst, u16 trainerId); // this file’s functions static void ChooseMoveUsedParticle(u8 *textPtr); static void ChooseTypeOfMoveUsedString(u8 *dst); static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); // EWRAM vars static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; // const rom data // todo: make some of those names less vague: attacker/target vs pkmn, etc. static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p"); static const u8 sText_EmptyString4[] = _(""); static const u8 sText_ABoosted[] = _(" a boosted"); static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p"); static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p"); static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p"); static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p"); static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?"); static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?"); static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!"); static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("Can’t escape!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!"); static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!"); static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!"); static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!"); static const u8 sText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!"); static const u8 sText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!"); static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!"); static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!"); static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!"); static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!"); static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!"); static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!"); static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!"); static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!"); static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!"); static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!"); static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!"); static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!"); const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!"); static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!"); static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!"); static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!"); static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!"); static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!"); static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!"); static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!"); static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!"); static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!"); static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!"); static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!"); static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p"); static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!"); static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!"); static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!"); static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!"); static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!"); static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!"); static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!"); static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!"); static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!"); static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!"); static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!"); static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); static const u8 sText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!"); static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!"); static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!"); static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!"); static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!"); static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!"); static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!"); static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!"); static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); static const u8 sText_PkmnAttack[] = _("{B_BUFF1}’s attack!"); static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!"); static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!"); static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!"); static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!"); static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!"); static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!"); static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!"); static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!"); static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!"); static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!"); static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!"); static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!"); static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!"); static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!"); static const u8 sText_FireWeakened[] = _("Fire’s power was\nweakened!"); static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}"); static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); static const u8 sText_ButNoEffect[] = _("But it had no effect!"); static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p"); static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p"); static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p"); static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!"); static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!"); static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!"); static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!"); static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!"); static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!"); static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!"); static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!"); static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!"); static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!"); static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!"); const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}’s {B_LAST_ABILITY}\nprevents switching!\p"); static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!"); static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!"); static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!"); static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); static const u8 sText_StatFell[] = _("fell!"); static const u8 sText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); const u8 gText_PkmnsStatChanged2[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}"); static const u8 sText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!"); static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It’s a one-hit KO!"); static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p"); static const u8 sText_AndEllipsis[] = _("And…\p"); static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It’s not very effective…"); static const u8 sText_SuperEffective[] = _("It’s super effective!"); static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p"); static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!"); static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!"); static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!"); static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!"); static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!"); static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!"); static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!"); static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!"); static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!"); static const u8 sText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p"); static const u8 sText_CantEscape[] = _("Can’t escape!\p"); static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p"); static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); static const u8 sText_ButItFailed[] = _("But it failed!"); static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!"); static const u8 sText_StartedToRain[] = _("It started to rain!"); static const u8 sText_DownpourStarted[] = _("A downpour started!"); static const u8 sText_RainContinues[] = _("Rain continues to fall."); static const u8 sText_DownpourContinues[] = _("The downpour continues."); static const u8 sText_RainStopped[] = _("The rain stopped."); static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); static const u8 sText_SandstormRages[] = _("The sandstorm rages."); static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided."); static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!"); static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!"); static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!"); static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); static const u8 sText_BellChimed[] = _("A bell chimed!"); static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!"); static const u8 sText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p"); static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!"); static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!"); static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p"); static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!"); static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!"); static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!"); static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!"); static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!"); static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!"); static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!"); static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!"); static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!"); static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!"); static const u8 sText_WildPkmnPrefix[] = _("Wild "); static const u8 sText_FoePkmnPrefix[] = _("Foe "); static const u8 sText_EmptyString8[] = _( ""); static const u8 sText_FoePkmnPrefix2[] = _("Foe"); static const u8 sText_AllyPkmnPrefix[] = _("Ally"); static const u8 sText_FoePkmnPrefix3[] = _("Foe"); static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); static const u8 sText_FoePkmnPrefix4[] = _("Foe"); static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!"); static const u8 sText_ExclamationMark[] = _("!"); static const u8 sText_ExclamationMark2[] = _("!"); static const u8 sText_ExclamationMark3[] = _("!"); static const u8 sText_ExclamationMark4[] = _("!"); static const u8 sText_ExclamationMark5[] = _("!"); static const u8 sText_HP2[] = _("HP"); static const u8 sText_Attack2[] = _("ATTACK"); static const u8 sText_Defense2[] = _("DEFENSE"); const u8 gText_Speed[] = _("SPEED"); static const u8 sText_SpAtk2[] = _("SP. ATK"); static const u8 sText_SpDef2[] = _("SP. DEF"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); const u8 * const gStatNamesTable[] = { sText_HP2, sText_Attack2, sText_Defense2, gText_Speed, sText_SpAtk2, sText_SpDef2, sText_Accuracy, sText_Evasiveness }; static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); static const u8 sText_PokeblockWasTooDry[] = _("was too dry!"); static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); const u8 * const gPokeblockWasTooXStringTable[] = { sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry, sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter, sText_PokeblockWasTooSour }; static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); static const u8 sText_DontBeAThief[] = _("Don’t be a thief!"); static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!"); static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p"); static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}"); static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); static const u8 sText_Someones[] = _("someone’s"); static const u8 sText_Lanettes[] = _("LANETTE’s"); static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p"); static const u8 sText_ItIsRaining[] = _("It is raining."); static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); static const u8 sText_BerrySuffix[] = _(" BERRY"); static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!"); static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!"); static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!"); static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!"); static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!"); static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!"); static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!"); static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!"); static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!"); static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!"); static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!"); static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!"); // early declaration of strings static const u8 sText_PkmnIncapableOfPower[]; static const u8 sText_GlintAppearsInEye[]; static const u8 sText_PkmnGettingIntoPosition[]; static const u8 sText_PkmnBeganGrowlingDeeply[]; static const u8 sText_PkmnEagerForMore[]; static const u8 sText_DefeatedOpponentByReferee[]; static const u8 sText_LostToOpponentByReferee[]; static const u8 sText_TiedOpponentByReferee[]; static const u8 sText_QuestionForfeitMatch[]; static const u8 sText_ForfeitedMatch[]; static const u8 sText_Trainer1WinText[]; static const u8 sText_Trainer2WinText[]; static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; // New battle strings. static const s8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit using {B_DEF_ABILITY}!"); static const s8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); static const s8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); static const s8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly \npoisoned by the {B_LAST_ITEM}!"); static const s8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); static const s8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY} activates!"); static const u8 sText_GravityIntensified[] = _("GRAVITY intensified!"); static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was \nidentified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind your team!"); static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}"); static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can’t use\nitems anymore!"); static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!"); static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}’s ability\nwas suppressed!"); static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shielded your\nteam from critical hits!"); static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!"); static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!"); static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_LAST_ABILITY}!"); static const u8 sText_PoisonSpikesScattered[] = _("Poison Spikes were scattered all\naround the opposing team’s feet!"); static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!"); static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!"); static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround your foe’s team!"); static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!"); static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} Vanished\ninstantly!"); static const u8 sText_ProtectedTeam[] =_("Wide Guard protected your team!"); static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which\nthe Defense and Sp.Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarra area in which\nPokémon’s held items lose their effects!"); static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); static const u8 sText_TransformedIntoWaterType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the water type!"); static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX} stat changes\nwere removed!"); static const u8 sText_ProtectsTeamFromPriority[] =_("Quick Guard protected your team!"); static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!"); static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}’s HP was restored!"); static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!"); static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}’s move\nwas postponed!"); static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}’s type\nchanged to match the {B_DEF_NAME_WITH_PREFIX}’s!"); static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} recieved {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}"); static const u8 sText_EmbargoEnds[] = _("{B_DEF_NAME_WITH_PREFIX}can\nuse items again!"); static const u8 sText_MagnetRiseEnds[] = _("{B_ATK_NAME_WITH_PREFIX}’s electromagnetism\nwore off!"); static const u8 sText_HealBlockEnds[] = _("{B_DEF_NAME_WITH_PREFIX}’s Heal Block\nwore off!"); static const u8 sText_TelekinesisEnds[] = _("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM}’s tailwind\n petered out!"); static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM}’s Lucky Chant\n wore off!"); static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and\nDefense and Sp. Def stats returned to normal!"); static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and\nheld items’ effects returned to normal!"); static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded."); static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded."); static const u8 sText_GravityEnds[] = _("Gravity returned to normal!"); static const u8 sText_AquaRingHeal[] = _("Aqua Ring restored\n{B_ATK_NAME_WITH_PREFIX}’s HP!"); static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_AuroraVeilEnds[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nwore off!"); static const u8 sText_ElectricTerrainEnds[] = _("{B_ATK_ABILITY} wore off."); static const u8 sText_MistyTerrainEnds[] = _("{B_ATK_ABILITY} wore off."); static const u8 sText_PsychicTerrainEnds[] = _("{B_ATK_ABILITY} wore off."); static const u8 sText_GrassyTerrainEnds[] = _("{B_ATK_ABILITY} wore off."); static const u8 sText_AngryPointActivates[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY} maxed\nits attack!"); static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!"); static const u8 sText_BadDreamsDmg[] = _("The {B_DEF_NAME_WITH_PREFIX} is tormented\nby {B_DEF_ABILITY}!"); static const u8 sText_MoldBreakerEnters[] = _("The {B_DEF_NAME_WITH_PREFIX} breaks the mold!"); static const u8 sText_TeravoltEnters[] = _("{B_ATK_NAME_WITH_PREFIX} is radiating a bursting aura!"); static const u8 sText_TurboblazeEnters[] = _("{B_ATK_NAME_WITH_PREFIX} is radiating a blazing aura!"); static const u8 sText_SlowStartEnters[] = _("{B_ATK_NAME_WITH_PREFIX} can’t get it going!"); static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got its act together!"); static const u8 sText_SolarPowerHpDrop[] = _("The {B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\ntakes its toll!"); static const u8 sText_AftermathDmg[] = _("The {B_DEF_NAME_WITH_PREFIX}\nsuffers the {B_DEF_ABILITY}!"); static const u8 sText_AnticipationActivates[] = _("The {B_ATK_NAME_WITH_PREFIX} shuddered in {B_ATK_ABILITY}!"); static const u8 sText_ForewarnActivates[] = _("{B_ATK_ABILITY} alerted the {B_ATK_NAME_WITH_PREFIX} to the\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!"); static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nhealed it a little bit!"); static const u8 sText_SnowWarningHail[] = _("It started to hail!"); static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); static const u8 sText_UnnerveEnters[] = _("{B_ATK_NAME_WITH_PREFIX} is too nervous to eat Berries!"); static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested its {B_LAST_ITEM}!"); static const u8 sText_MoxieAtkRise[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY} raised its Attack!"); static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX} back!"); static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); static const u8 sText_SymbiosisItemPass[] = _("{B_ATK_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_SCR_ACTIVE_NAME_WITH_PREFIX} through {B_ATK_ABILITY}!"); static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared\nfrom around the opposing team’s feet!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!"); static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!"); static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_LAST_ABILITY}!"); static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { sText_Trainer1LoseText, // 12 sText_PkmnGainedEXP, // 13 sText_PkmnGrewToLv, // 14 sText_PkmnLearnedMove, // 15 sText_TryToLearnMove1, // 16 sText_TryToLearnMove2, // 17 sText_TryToLearnMove3, // 18 sText_PkmnForgotMove, // 19 sText_StopLearningMove, // 20 sText_DidNotLearnMove, // 21 sText_PkmnLearnedMove2, // 22 sText_AttackMissed, // 23 sText_PkmnProtectedItself, // 24 sText_StatsWontIncrease2, // 25 sText_AvoidedDamage, // 26 sText_ItDoesntAffect, // 27 sText_AttackerFainted, // 28 sText_TargetFainted, // 29 sText_PlayerGotMoney, // 30 sText_PlayerWhiteout, // 31 sText_PlayerWhiteout2, // 32 sText_PreventsEscape, // 33 sText_HitXTimes, // 34 sText_PkmnFellAsleep, // 35 sText_PkmnMadeSleep, // 36 sText_PkmnAlreadyAsleep, // 37 sText_PkmnAlreadyAsleep2, // 38 sText_PkmnWasntAffected, // 39 sText_PkmnWasPoisoned, // 40 sText_PkmnPoisonedBy, // 41 sText_PkmnHurtByPoison, // 42 sText_PkmnAlreadyPoisoned, // 43 sText_PkmnBadlyPoisoned, // 44 sText_PkmnEnergyDrained, // 45 sText_PkmnWasBurned, // 46 sText_PkmnBurnedBy, // 47 sText_PkmnHurtByBurn, // 48 sText_PkmnWasFrozen, // 49 sText_PkmnFrozenBy, // 50 sText_PkmnIsFrozen, // 51 sText_PkmnWasDefrosted, // 52 sText_PkmnWasDefrosted2, // 53 sText_PkmnWasDefrostedBy, // 54 sText_PkmnWasParalyzed, // 55 sText_PkmnWasParalyzedBy, // 56 sText_PkmnIsParalyzed, // 57 sText_PkmnIsAlreadyParalyzed, // 58 sText_PkmnHealedParalysis, // 59 sText_PkmnDreamEaten, // 60 sText_StatsWontIncrease, // 61 sText_StatsWontDecrease, // 62 sText_TeamStoppedWorking, // 63 sText_FoeStoppedWorking, // 64 sText_PkmnIsConfused, // 65 sText_PkmnHealedConfusion, // 66 sText_PkmnWasConfused, // 67 sText_PkmnAlreadyConfused, // 68 sText_PkmnFellInLove, // 69 sText_PkmnInLove, // 70 sText_PkmnImmobilizedByLove, // 71 sText_PkmnBlownAway, // 72 sText_PkmnChangedType, // 73 sText_PkmnFlinched, // 74 sText_PkmnRegainedHealth, // 75 sText_PkmnHPFull, // 76 sText_PkmnRaisedSpDef, // 77 sText_PkmnRaisedDef, // 78 sText_PkmnCoveredByVeil, // 79 sText_PkmnUsedSafeguard, // 80 sText_PkmnSafeguardExpired, // 81 sText_PkmnWentToSleep, // 82 sText_PkmnSleptHealthy, // 83 sText_PkmnWhippedWhirlwind, // 84 sText_PkmnTookSunlight, // 85 sText_PkmnLoweredHead, // 86 sText_PkmnIsGlowing, // 87 sText_PkmnFlewHigh, // 88 sText_PkmnDugHole, // 89 sText_PkmnSqueezedByBind, // 90 sText_PkmnTrappedInVortex, // 91 sText_PkmnWrappedBy, // 92 sText_PkmnClamped, // 93 sText_PkmnHurtBy, // 94 sText_PkmnFreedFrom, // 95 sText_PkmnCrashed, // 96 gText_PkmnShroudedInMist, // 97 sText_PkmnProtectedByMist, // 98 gText_PkmnGettingPumped, // 99 sText_PkmnHitWithRecoil, // 100 sText_PkmnProtectedItself2, // 101 sText_PkmnBuffetedBySandstorm, // 102 sText_PkmnPeltedByHail, // 103 sText_PkmnSeeded, // 104 sText_PkmnEvadedAttack, // 105 sText_PkmnSappedByLeechSeed, // 106 sText_PkmnFastAsleep, // 107 sText_PkmnWokeUp, // 108 sText_PkmnUproarKeptAwake, // 109 sText_PkmnWokeUpInUproar, // 110 sText_PkmnCausedUproar, // 111 sText_PkmnMakingUproar, // 112 sText_PkmnCalmedDown, // 113 sText_PkmnCantSleepInUproar, // 114 sText_PkmnStockpiled, // 115 sText_PkmnCantStockpile, // 116 sText_PkmnCantSleepInUproar2, // 117 sText_UproarKeptPkmnAwake, // 118 sText_PkmnStayedAwakeUsing, // 119 sText_PkmnStoringEnergy, // 120 sText_PkmnUnleashedEnergy, // 121 sText_PkmnFatigueConfusion, // 122 sText_PkmnPickedUpItem, // 123 sText_PkmnUnaffected, // 124 sText_PkmnTransformedInto, // 125 sText_PkmnMadeSubstitute, // 126 sText_PkmnHasSubstitute, // 127 sText_SubstituteDamaged, // 128 sText_PkmnSubstituteFaded, // 129 sText_PkmnMustRecharge, // 130 sText_PkmnRageBuilding, // 131 sText_PkmnMoveWasDisabled, // 132 sText_PkmnMoveIsDisabled, // 133 sText_PkmnMoveDisabledNoMore, // 134 sText_PkmnGotEncore, // 135 sText_PkmnEncoreEnded, // 136 sText_PkmnTookAim, // 137 sText_PkmnSketchedMove, // 138 sText_PkmnTryingToTakeFoe, // 139 sText_PkmnTookFoe, // 140 sText_PkmnReducedPP, // 141 sText_PkmnStoleItem, // 142 sText_TargetCantEscapeNow, // 143 sText_PkmnFellIntoNightmare, // 144 sText_PkmnLockedInNightmare, // 145 sText_PkmnLaidCurse, // 146 sText_PkmnAfflictedByCurse, // 147 sText_SpikesScattered, // 148 sText_PkmnHurtBySpikes, // 149 sText_PkmnIdentified, // 150 sText_PkmnPerishCountFell, // 151 sText_PkmnBracedItself, // 152 sText_PkmnEnduredHit, // 153 sText_MagnitudeStrength, // 154 sText_PkmnCutHPMaxedAttack, // 155 sText_PkmnCopiedStatChanges, // 156 sText_PkmnGotFree, // 157 sText_PkmnShedLeechSeed, // 158 sText_PkmnBlewAwaySpikes, // 159 sText_PkmnFledFromBattle, // 160 sText_PkmnForesawAttack, // 161 sText_PkmnTookAttack, // 162 sText_PkmnAttack, // 163 sText_PkmnCenterAttention, // 164 sText_PkmnChargingPower, // 165 sText_NaturePowerTurnedInto, // 166 sText_PkmnStatusNormal, // 167 sText_PkmnHasNoMovesLeft, // 168 sText_PkmnSubjectedToTorment, // 169 sText_PkmnCantUseMoveTorment, // 170 sText_PkmnTighteningFocus, // 171 sText_PkmnFellForTaunt, // 172 sText_PkmnCantUseMoveTaunt, // 173 sText_PkmnReadyToHelp, // 174 sText_PkmnSwitchedItems, // 175 sText_PkmnCopiedFoe, // 176 sText_PkmnMadeWish, // 177 sText_PkmnWishCameTrue, // 178 sText_PkmnPlantedRoots, // 179 sText_PkmnAbsorbedNutrients, // 180 sText_PkmnAnchoredItself, // 181 sText_PkmnWasMadeDrowsy, // 182 sText_PkmnKnockedOff, // 183 sText_PkmnSwappedAbilities, // 184 sText_PkmnSealedOpponentMove, // 185 sText_PkmnCantUseMoveSealed, // 186 sText_PkmnWantsGrudge, // 187 sText_PkmnLostPPGrudge, // 188 sText_PkmnShroudedItself, // 189 sText_PkmnMoveBounced, // 190 sText_PkmnWaitsForTarget, // 191 sText_PkmnSnatchedMove, // 192 sText_PkmnMadeItRain, // 193 sText_PkmnRaisedSpeed, // 194 sText_PkmnProtectedBy, // 195 sText_PkmnPreventsUsage, // 196 sText_PkmnRestoredHPUsing, // 197 sText_PkmnChangedTypeWith, // 198 sText_PkmnPreventsParalysisWith, // 199 sText_PkmnPreventsRomanceWith, // 200 sText_PkmnPreventsPoisoningWith, // 201 sText_PkmnPreventsConfusionWith, // 202 sText_PkmnRaisedFirePowerWith, // 203 sText_PkmnAnchorsItselfWith, // 204 sText_PkmnCutsAttackWith, // 205 sText_PkmnPreventsStatLossWith, // 206 sText_PkmnHurtsWith, // 207 sText_PkmnTraced, // 208 sText_StatSharply, // 209 gText_StatRose, // 210 sText_StatHarshly, // 211 sText_StatFell, // 212 sText_PkmnsStatChanged, // 213 gText_PkmnsStatChanged2, // 214 sText_PkmnsStatChanged3, // 215 sText_PkmnsStatChanged4, // 216 sText_CriticalHit, // 217 sText_OneHitKO, // 218 sText_123Poof, // 219 sText_AndEllipsis, // 220 sText_NotVeryEffective, // 221 sText_SuperEffective, // 222 sText_GotAwaySafely, // 223 sText_WildPkmnFled, // 224 sText_NoRunningFromTrainers, // 225 sText_CantEscape, // 226 sText_DontLeaveBirch, // 227 sText_ButNothingHappened, // 228 sText_ButItFailed, // 229 sText_ItHurtConfusion, // 230 sText_MirrorMoveFailed, // 231 sText_StartedToRain, // 232 sText_DownpourStarted, // 233 sText_RainContinues, // 234 sText_DownpourContinues, // 235 sText_RainStopped, // 236 sText_SandstormBrewed, // 237 sText_SandstormRages, // 238 sText_SandstormSubsided, // 239 sText_SunlightGotBright, // 240 sText_SunlightStrong, // 241 sText_SunlightFaded, // 242 sText_StartedHail, // 243 sText_HailContinues, // 244 sText_HailStopped, // 245 sText_FailedToSpitUp, // 246 sText_FailedToSwallow, // 247 sText_WindBecameHeatWave, // 248 sText_StatChangesGone, // 249 sText_CoinsScattered, // 250 sText_TooWeakForSubstitute, // 251 sText_SharedPain, // 252 sText_BellChimed, // 253 sText_FaintInThree, // 254 sText_NoPPLeft, // 255 sText_ButNoPPLeft, // 256 sText_PlayerUsedItem, // 257 sText_WallyUsedItem, // 258 sText_TrainerBlockedBall, // 259 sText_DontBeAThief, // 260 sText_ItDodgedBall, // 261 sText_YouMissedPkmn, // 262 sText_PkmnBrokeFree, // 263 sText_ItAppearedCaught, // 264 sText_AarghAlmostHadIt, // 265 sText_ShootSoClose, // 266 sText_GotchaPkmnCaught, // 267 sText_GotchaPkmnCaught2, // 268 sText_GiveNicknameCaptured, // 269 sText_PkmnSentToPC, // 270 sText_PkmnDataAddedToDex, // 271 sText_ItIsRaining, // 272 sText_SandstormIsRaging, // 273 sText_CantEscape2, // 274 sText_PkmnIgnoresAsleep, // 275 sText_PkmnIgnoredOrders, // 276 sText_PkmnBeganToNap, // 277 sText_PkmnLoafing, // 278 sText_PkmnWontObey, // 279 sText_PkmnTurnedAway, // 280 sText_PkmnPretendNotNotice, // 281 sText_EnemyAboutToSwitchPkmn, // 282 sText_CreptCloser, // 283 sText_CantGetCloser, // 284 sText_PkmnWatchingCarefully, // 285 sText_PkmnCuriousAboutX, // 286 sText_PkmnEnthralledByX, // 287 sText_PkmnIgnoredX, // 288 sText_ThrewPokeblockAtPkmn, // 289 sText_OutOfSafariBalls, // 290 sText_PkmnsItemCuredParalysis, // 291 sText_PkmnsItemCuredPoison, // 292 sText_PkmnsItemHealedBurn, // 293 sText_PkmnsItemDefrostedIt, // 294 sText_PkmnsItemWokeIt, // 295 sText_PkmnsItemSnappedOut, // 296 sText_PkmnsItemCuredProblem, // 297 sText_PkmnsItemRestoredHealth, // 298 sText_PkmnsItemRestoredPP, // 299 sText_PkmnsItemRestoredStatus, // 300 sText_PkmnsItemRestoredHPALittle, // 301 sText_ItemAllowsOnlyYMove, // 302 sText_PkmnHungOnWithX, // 303 gText_EmptyString3, // 304 sText_PkmnsXPreventsBurns, // 305 sText_PkmnsXBlocksY, // 306 sText_PkmnsXRestoredHPALittle2, // 307 sText_PkmnsXWhippedUpSandstorm, // 308 sText_PkmnsXPreventsYLoss, // 309 sText_PkmnsXInfatuatedY, // 310 sText_PkmnsXMadeYIneffective, // 311 sText_PkmnsXCuredYProblem, // 312 sText_ItSuckedLiquidOoze, // 313 sText_PkmnTransformed, // 314 sText_ElectricityWeakened, // 315 sText_FireWeakened, // 316 sText_PkmnHidUnderwater, // 317 sText_PkmnSprangUp, // 318 sText_HMMovesCantBeForgotten, // 319 sText_XFoundOneY, // 320 sText_PlayerDefeatedLinkTrainerTrainer1, // 321 sText_SoothingAroma, // 322 sText_ItemsCantBeUsedNow, // 323 sText_ForXCommaYZ, // 324 sText_UsingXTheYOfZN, // 325 sText_PkmnUsedXToGetPumped, // 326 sText_PkmnsXMadeYUseless, // 327 sText_PkmnTrappedBySandTomb, // 328 sText_EmptyString4, // 329 sText_ABoosted, // 330 sText_PkmnsXIntensifiedSun, // 331 sText_PkmnMakesGroundMiss, // 332 sText_YouThrowABallNowRight, // 333 sText_PkmnsXTookAttack, // 334 sText_PkmnChoseXAsDestiny, // 335 sText_PkmnLostFocus, // 336 sText_UseNextPkmn, // 337 sText_PkmnFledUsingIts, // 338 sText_PkmnFledUsing, // 339 sText_PkmnWasDraggedOut, // 340 sText_PreventedFromWorking, // 341 sText_PkmnsItemNormalizedStatus, // 342 sText_Trainer1UsedItem, // 343 sText_BoxIsFull, // 344 sText_PkmnAvoidedAttack, // 345 sText_PkmnsXMadeItIneffective, // 346 sText_PkmnsXPreventsFlinching, // 347 sText_PkmnAlreadyHasBurn, // 348 sText_StatsWontDecrease2, // 349 sText_PkmnsXBlocksY2, // 350 sText_PkmnsXWoreOff, // 351 sText_PkmnRaisedDefALittle, // 352 sText_PkmnRaisedSpDefALittle, // 353 sText_TheWallShattered, // 354 sText_PkmnsXPreventsYsZ, // 355 sText_PkmnsXCuredItsYProblem, // 356 sText_AttackerCantEscape, // 357 sText_PkmnObtainedX, // 358 sText_PkmnObtainedX2, // 359 sText_PkmnObtainedXYObtainedZ, // 360 sText_ButNoEffect, // 361 sText_PkmnsXHadNoEffectOnY, // 362 sText_TwoInGameTrainersDefeated, // 363 sText_Trainer2LoseText, // 364 sText_PkmnIncapableOfPower, // 365 sText_GlintAppearsInEye, // 366 sText_PkmnGettingIntoPosition, // 367 sText_PkmnBeganGrowlingDeeply, // 368 sText_PkmnEagerForMore, // 369 sText_DefeatedOpponentByReferee, // 370 sText_LostToOpponentByReferee, // 371 sText_TiedOpponentByReferee, // 372 sText_QuestionForfeitMatch, // 373 sText_ForfeitedMatch, // 374 gText_PkmnTransferredSomeonesPC, // 375 gText_PkmnTransferredLanettesPC, // 376 gText_PkmnBoxSomeonesPCFull, // 377 gText_PkmnBoxLanettesPCFull, // 378 sText_Trainer1WinText, // 379 sText_Trainer2WinText, // 380 // new battle strings sText_EnduredViaSturdy, // 381 sText_PowerHerbActivation, // 382 sText_HurtByItem, // 383 sText_BadlyPoisonedByItem, // 384 sText_BurnedByItem, // 385 sText_TargetAbilityActivates, // 386 sText_GravityIntensified, // 387 sText_TargetIdentified, // 388 sText_TargetWokeUp, // 389 sText_PkmnStoleAndAteItem, // 390 sText_TailWindBlew, // 391 sText_PkmnWentBack, // 392 sText_PkmnCantUseItemsAnymore, // 393 sText_PkmnFlung, // 394 sText_PkmnPreventedFromHealing, // 395 sText_PkmnSwitchedAtkAndDef, // 396 sText_PkmnsAbilitySuppressed, // 397 sText_ShieldedFromCriticalHits, // 398 sText_SwitchedAtkAndSpAtk, // 399 sText_SwitchedDefAndSpDef, // 400 sText_PkmnAcquiredAbility, // 401 sText_PoisonSpikesScattered, // 402 sText_PkmnSwitchedStatChanges, // 403 sText_PkmnSurroundedWithVeilOfWater, // 404 sText_PkmnLevitatedOnElectromagnetism, // 405 sText_PkmnTwistedDimensions, // 406 sText_PointedStonesFloat, // 407 sText_CloakedInMysticalMoonlight, // 408 sText_TrappedBySwirlingMagma, // 409 sText_VanishedInstantly, // 410 sText_ProtectedTeam, // 411 sText_SharedItsGuard, // 412 sText_SharedItsPower, // 413 sText_SwapsDefAndSpDefOfAllPkmn, // 414 sText_BecameNimble, // 415 sText_HurledIntoTheAir, // 416 sText_HeldItemsLoseEffects, // 417 sText_FellStraightDown, // 418 sText_TransformedIntoWaterType, // 419 sText_PkmnAcquiredSimple, // 420 sText_EmptyString4, // 421 sText_KindOffer, // 422 sText_ResetsTargetsStatLevels, // 423 sText_ProtectsTeamFromPriority, // 424 sText_AllySwitchPosition, // 425 sText_RestoreTargetsHealth, // 426 sText_TookPkmnIntoTheSky, // 427 sText_FreedFromSkyDrop, // 428 sText_PostponeTargetMove, // 429 sText_ReflectTargetsType, // 430 sText_TransferHeldItem, // 431 sText_EmbargoEnds, // 432 sText_MagnetRiseEnds, // 433 sText_HealBlockEnds, // 434 sText_TelekinesisEnds, // 435 sText_TailwindEnds, // 436 sText_LuckyChantEnds, // 437 sText_TrickRoomEnds, // 438 sText_WonderRoomEnds, // 439 sText_MagicRoomEnds, // 440 sText_MudSportEnds, // 441 sText_WaterSportEnds, // 442 sText_GravityEnds, // 443 sText_AquaRingHeal, // 444 sText_AuroraVeilEnds, // 445 sText_ElectricTerrainEnds, // 446 sText_MistyTerrainEnds, // 447 sText_PsychicTerrainEnds, // 448 sText_GrassyTerrainEnds, // 449 sText_TargetAbilityRaisedStat, // 450 sText_AngryPointActivates, // 451 sText_AttackerAbilityRaisedStat, // 452 sText_PoisonHealHpUp, // 453 sText_BadDreamsDmg, // 454 sText_MoldBreakerEnters, sText_TeravoltEnters, sText_TurboblazeEnters, sText_SlowStartEnters, sText_SlowStartEnd, sText_SolarPowerHpDrop, sText_AftermathDmg, sText_AnticipationActivates, sText_ForewarnActivates, sText_IceBodyHpGain, sText_SnowWarningHail, sText_FriskActivates, sText_UnnerveEnters, sText_HarvestBerry, sText_MoxieAtkRise, sText_MagicBounceActivates, sText_ProteanTypeChange, sText_SymbiosisItemPass, sText_StealthRockDmg, sText_ToxicSpikesAbsorbed, sText_ToxicSpikesPoisoned, sText_StickyWebSwitchIn, sText_HealingWishCameTrue, sText_HealingWishHealed, sText_LunarDanceCameTrue, sText_CursedBodyDisabled, sText_AttackerAquiredAbility, sText_TargetAbilityLoweredStat, sText_TargetStatWontGoHigher, }; const u16 gHealingWishStringIds[] = { STRINGID_HEALINGWISHCAMETRUE, STRINGID_LUNARDANCECAMETRUE }; const u16 gDmgHazardsStringIds[] = { STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG }; const u16 gSwitchInAbilityStringIds[] = { STRINGID_MOLDBREAKERENTERS, STRINGID_TERAVOLTENTERS, STRINGID_TURBOBLAZEENTERS, STRINGID_SLOWSTARTENTERS, STRINGID_UNNERVEENTERS }; const u16 gMissStringIds[] = { STRINGID_ATTACKMISSED, STRINGID_PKMNPROTECTEDITSELF, STRINGID_PKMNAVOIDEDATTACK, STRINGID_AVOIDEDDAMAGE, STRINGID_PKMNMAKESGROUNDMISS }; const u16 gNoEscapeStringIds[] = { STRINGID_CANTESCAPE, STRINGID_DONTLEAVEBIRCH, STRINGID_PREVENTSESCAPE, STRINGID_CANTESCAPE2, STRINGID_ATTACKERCANTESCAPE }; const u16 gMoveWeatherChangeStringIds[] = { STRINGID_STARTEDTORAIN, STRINGID_DOWNPOURSTARTED, STRINGID_BUTITFAILED, STRINGID_SANDSTORMBREWED, STRINGID_SUNLIGHTGOTBRIGHT, STRINGID_STARTEDHAIL }; const u16 gSandStormHailContinuesStringIds[] = { STRINGID_SANDSTORMRAGES, STRINGID_HAILCONTINUES }; const u16 gSandStormHailDmgStringIds[] = { STRINGID_PKMNBUFFETEDBYSANDSTORM, STRINGID_PKMNPELTEDBYHAIL }; const u16 gSandStormHailEndStringIds[] = { STRINGID_SANDSTORMSUBSIDED, STRINGID_HAILSTOPPED }; const u16 gRainContinuesStringIds[] = { STRINGID_RAINCONTINUES, STRINGID_DOWNPOURCONTINUES, STRINGID_RAINSTOPPED }; const u16 gProtectLikeUsedStringIds[] = { STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED }; const u16 gReflectLightScreenSafeguardStringIds[] = { STRINGID_BUTITFAILED, STRINGID_PKMNRAISEDDEF, STRINGID_PKMNRAISEDDEFALITTLE, STRINGID_PKMNRAISEDSPDEF, STRINGID_PKMNRAISEDSPDEFALITTLE, STRINGID_PKMNCOVEREDBYVEIL }; const u16 gLeechSeedStringIds[] = { STRINGID_PKMNSEEDED, STRINGID_PKMNEVADEDATTACK, STRINGID_ITDOESNTAFFECT, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_ITSUCKEDLIQUIDOOZE, }; const u16 gRestUsedStringIds[] = { STRINGID_PKMNWENTTOSLEEP, STRINGID_PKMNSLEPTHEALTHY }; const u16 gUproarOverTurnStringIds[] = { STRINGID_PKMNMAKINGUPROAR, STRINGID_PKMNCALMEDDOWN }; const u16 gStockpileUsedStringIds[] = { STRINGID_PKMNSTOCKPILED, STRINGID_PKMNCANTSTOCKPILE, }; const u16 gWokeUpStringIds[] = { STRINGID_PKMNWOKEUP, STRINGID_PKMNWOKEUPINUPROAR }; const u16 gSwallowFailStringIds[] = { STRINGID_FAILEDTOSWALLOW, STRINGID_PKMNHPFULL }; const u16 gUproarAwakeStringIds[] = { STRINGID_PKMNCANTSLEEPINUPROAR2, STRINGID_UPROARKEPTPKMNAWAKE, STRINGID_PKMNSTAYEDAWAKEUSING }; const u16 gStatUpStringIds[] = { STRINGID_PKMNSSTATCHANGED, STRINGID_PKMNSSTATCHANGED2, STRINGID_STATSWONTINCREASE, STRINGID_EMPTYSTRING3, STRINGID_USINGXTHEYOFZN, STRINGID_PKMNUSEDXTOGETPUMPED }; const u16 gStatDownStringIds[] = { STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4, STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3 }; const u16 gFirstTurnOfTwoStringIds[] = { STRINGID_PKMNWHIPPEDWHIRLWIND, STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING, STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER, STRINGID_PKMNSPRANGUP }; const u16 gWrappedStringIds[] = { STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNTRAPPEDBYSANDTOMB }; const u16 gMistUsedStringIds[] = { STRINGID_PKMNSHROUDEDINMIST, STRINGID_BUTITFAILED }; const u16 gFocusEnergyUsedStringIds[] = { STRINGID_PKMNGETTINGPUMPED, STRINGID_BUTITFAILED }; const u16 gTransformUsedStringIds[] = { STRINGID_PKMNTRANSFORMEDINTO, STRINGID_BUTITFAILED }; const u16 gSubsituteUsedStringIds[] = { STRINGID_PKMNMADESUBSTITUTE, STRINGID_TOOWEAKFORSUBSTITUTE }; const u16 gGotPoisonedStringIds[] = { STRINGID_PKMNWASPOISONED, STRINGID_PKMNPOISONEDBY }; const u16 gGotParalyzedStringIds[] = { STRINGID_PKMNWASPARALYZED, STRINGID_PKMNWASPARALYZEDBY }; const u16 gFellAsleepStringIds[] = { STRINGID_PKMNFELLASLEEP, STRINGID_PKMNMADESLEEP, }; const u16 gGotBurnedStringIds[] = { STRINGID_PKMNWASBURNED, STRINGID_PKMNBURNEDBY }; const u16 gGotFrozenStringIds[] = { STRINGID_PKMNWASFROZEN, STRINGID_PKMNFROZENBY }; const u16 gGotDefrostedStringIds[] = { STRINGID_PKMNWASDEFROSTED2, STRINGID_PKMNWASDEFROSTEDBY }; const u16 gKOFailedStringIds[] = { STRINGID_ATTACKMISSED, STRINGID_PKMNUNAFFECTED }; const u16 gAttractUsedStringIds[] = { STRINGID_PKMNFELLINLOVE, STRINGID_PKMNSXINFATUATEDY }; const u16 gLeechSeedDrainStringIds[] = { STRINGID_PKMNENERGYDRAINED, STRINGID_ITSUCKEDLIQUIDOOZE }; const u16 gSportsUsedStringIds[] = { STRINGID_ELECTRICITYWEAKENED, STRINGID_FIREWEAKENED }; const u16 gPartyStatusHealStringIds[] = { STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, // interesting how there are four instances of the same string STRINGID_SOOTHINGAROMA }; const u16 gFutureMoveUsedStringIds[] = { STRINGID_PKMNFORESAWATTACK, STRINGID_PKMNCHOSEXASDESTINY }; const u16 gBallEscapeStringIds[] = { STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT, STRINGID_SHOOTSOCLOSE }; const u16 gWeatherContinuesStringIds[] = { STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SANDSTORMISRAGING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING }; const u16 gInobedientStringIds[] = { STRINGID_PKMNLOAFING, STRINGID_PKMNWONTOBEY, STRINGID_PKMNTURNEDAWAY, STRINGID_PKMNPRETENDNOTNOTICE, STRINGID_PKMNINCAPABLEOFPOWER }; const u16 gSafariGetNearStringIds[] = { STRINGID_CREPTCLOSER, STRINGID_CANTGETCLOSER }; const u16 gSafariPokeblockResultStringIds[] = { STRINGID_PKMNCURIOUSABOUTX, STRINGID_PKMNENTHRALLEDBYX, STRINGID_PKMNIGNOREDX }; const u16 gTrainerItemCuredStatusStringIds[] = { STRINGID_PKMNSITEMSNAPPEDOUT, STRINGID_PKMNSITEMCUREDPARALYSIS, STRINGID_PKMNSITEMDEFROSTEDIT, STRINGID_PKMNSITEMHEALEDBURN, STRINGID_PKMNSITEMCUREDPOISON, STRINGID_PKMNSITEMWOKEIT }; const u16 gBerryEffectStringIds[] = { STRINGID_PKMNSITEMCUREDPROBLEM, STRINGID_PKMNSITEMNORMALIZEDSTATUS }; const u16 gBRNPreventionStringIds[] = { STRINGID_PKMNSXPREVENTSBURNS, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY }; const u16 gPRLZPreventionStringIds[] = { STRINGID_PKMNPREVENTSPARALYSISWITH, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY }; const u16 gPSNPreventionStringIds[] = { STRINGID_PKMNPREVENTSPOISONINGWITH, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY }; const u16 gItemSwapStringIds[] = { STRINGID_PKMNOBTAINEDX, STRINGID_PKMNOBTAINEDX2, STRINGID_PKMNOBTAINEDXYOBTAINEDZ }; const u16 gFlashFireStringIds[] = { STRINGID_PKMNRAISEDFIREPOWERWITH, STRINGID_PKMNSXMADEYINEFFECTIVE }; const u16 gCaughtMonStringIds[] = { STRINGID_PKMNTRANSFERREDSOMEONESPC, STRINGID_PKMNTRANSFERREDLANETTESPC, STRINGID_PKMNBOXSOMEONESPCFULL, STRINGID_PKMNBOXLANETTESPCFULL, }; const u16 gTrappingMoves[] = { MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, 0xFFFF }; const u16 gRoomsStringIds[] = { STRINGID_PKMNTWISTEDDIMENSIONS, STRINGID_TRICKROOMENDS, STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON, STRINGID_WONDERROOMENDS, STRINGID_HELDITEMSLOSEEFFECTS, STRINGID_MAGICROOMENDS, STRINGID_EMPTYSTRING3 }; const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{UNKNOWN_A}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); const u8 gText_EllipsisQuestionMark[] = _("……?\p"); const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME_WITH_PREFIX} do?"); const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); const u8 gText_BattleMenu[] = _("FIGHT{CLEAR_TO 56}BAG\nPOKéMON{CLEAR_TO 56}RUN"); const u8 gText_SafariZoneMenu[] = _("BALL{CLEAR_TO 56}{POKEBLOCK}\nGO NEAR{CLEAR_TO 56}RUN"); const u8 gText_MoveInterfacePP[] = _("PP "); const u8 gText_MoveInterfaceType[] = _("TYPE/"); const u8 gText_MoveInterfacePpType[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}PP\nTYPE/"); const u8 gText_MoveInterfaceDynamicColors[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}"); const u8 gText_WhichMoveToForget4[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Which move should\nbe forgotten?"); const u8 gText_BattleYesNoChoice[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Yes\nNo"); const u8 gText_BattleSwitchWhich[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Switch\nwhich?"); const u8 gText_BattleSwitchWhich2[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}"); const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}"); const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}"); const u8 gText_BattleSwitchWhich5[] = _("-"); const u8 sText_HP[] = _("HP"); const u8 gText_Attack[] = _("ATTACK"); const u8 gText_Defense[] = _("DEFENSE"); const u8 gText_SpAtk[] = _("SP. ATK"); const u8 gText_SpDef[] = _("SP. DEF"); const u8 * const gStatNamesTable2[] = { sText_HP, gText_SpAtk, gText_Attack, gText_SpDef, gText_Defense, gText_Speed }; const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GREY}SAFARI BALLS"); const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GREY}Left: $" "{HIGHLIGHT DARK_GREY}"); const u8 gText_Sleep[] = _("sleep"); const u8 gText_Poison[] = _("poison"); const u8 gText_Burn[] = _("burn"); const u8 gText_Paralysis[] = _("paralysis"); const u8 gText_Ice[] = _("ice"); const u8 gText_Confusion[] = _("confusion"); const u8 gText_Love[] = _("love"); const u8 gText_SpaceAndSpace[] = _(" and "); const u8 gText_CommaSpace[] = _(", "); const u8 gText_Space2[] = _(" "); const u8 gText_ScrollTextUp[] = _("\l"); const u8 gText_NewLine[] = _("\n"); const u8 gText_Are[] = _("are"); const u8 gText_Are2[] = _("are"); const u8 gText_BadEgg[] = _("Bad EGG"); const u8 gText_BattleWallyName[] = _("WALLY"); const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("’s"); static const u8 sATypeMove_Table[][17] = { _("a NORMAL move"), _("a FIGHTING move"), _("a FLYING move"), _("a POISON move"), _("a GROUND move"), _("a ROCK move"), _("a BUG move"), _("a GHOST move"), _("a STEEL move"), _("a ??? move"), _("a FIRE move"), _("a WATER move"), _("a GRASS move"), _("an ELECTRIC move"), _("a PSYCHIC move"), _("an ICE move"), _("a DRAGON move"), _("a DARK move") }; const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); static const u8 sText_Round1[] = _("Round 1"); static const u8 sText_Round2[] = _("Round 2"); static const u8 sText_Semifinal[] = _("Semifinal"); static const u8 sText_Final[] = _("Final"); const u8 * const gRoundsStringTable[] = { sText_Round1, sText_Round2, sText_Semifinal, sText_Final }; const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); const u8 gText_WillChampinshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); const u8 gText_PlayerMon1Name[] = _("{B_PLAYER_MON1_NAME}"); const u8 gText_Vs[] = _("VS"); const u8 gText_OpponentMon1Name[] = _("{B_OPPONENT_MON1_NAME}"); const u8 gText_Mind[] = _("Mind"); const u8 gText_Skill[] = _("Skill"); const u8 gText_Body[] = _("Body"); const u8 gText_Judgement[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}"); static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p"); static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!"); static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!"); static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); const u16 gStringIds_85CCF0A[] = { STRINGID_GLINTAPPEARSINEYE, STRINGID_PKMNGETTINGINTOPOSITION, STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE }; static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!"); static const u8 sText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!"); static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p"); static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p"); static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p"); static const u8 sText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p"); static const u8 sText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p"); static const u8 sText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p"); static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); const u8 * const gRefereeStringsTable[] = { sText_RefIfNothingIsDecided, sText_RefThatsIt, sText_RefJudgeMind, sText_RefJudgeSkill, sText_RefJudgeBody, sText_RefJudgement1, sText_RefJudgement2, sText_RefJudgement3, sText_RefCommenceBattle, }; static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!"); static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?"); const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}’s battle result was recorded\non the FRONTIER PASS."); static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}"); static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}"); static const u8 sText_YourTeam[] = _("Your team"); static const u8 sText_OpposingTeam[] = _("The opposing team"); // This is four lists of moves which use a different attack string in Japanese // to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail. static const u16 sGrammarMoveUsedTable[] = { MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_GROWTH, MOVE_HARDEN, MOVE_MINIMIZE, MOVE_SMOKESCREEN, MOVE_WITHDRAW, MOVE_DEFENSE_CURL, MOVE_EGG_BOMB, MOVE_SMOG, MOVE_BONE_CLUB, MOVE_FLASH, MOVE_SPLASH, MOVE_ACID_ARMOR, MOVE_BONEMERANG, MOVE_REST, MOVE_SHARPEN, MOVE_SUBSTITUTE, MOVE_MIND_READER, MOVE_SNORE, MOVE_PROTECT, MOVE_SPIKES, MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SWAGGER, MOVE_SLEEP_TALK, MOVE_HIDDEN_POWER, MOVE_PSYCH_UP, MOVE_EXTREME_SPEED, MOVE_FOLLOW_ME, MOVE_TRICK, MOVE_ASSIST, MOVE_INGRAIN, MOVE_KNOCK_OFF, MOVE_CAMOUFLAGE, MOVE_ASTONISH, MOVE_ODOR_SLEUTH, MOVE_GRASS_WHISTLE, MOVE_SHEER_COLD, MOVE_MUDDY_WATER, MOVE_IRON_DEFENSE, MOVE_BOUNCE, 0, MOVE_TELEPORT, MOVE_RECOVER, MOVE_BIDE, MOVE_AMNESIA, MOVE_FLAIL, MOVE_TAUNT, MOVE_BULK_UP, 0, MOVE_MEDITATE, MOVE_AGILITY, MOVE_MIMIC, MOVE_DOUBLE_TEAM, MOVE_BARRAGE, MOVE_TRANSFORM, MOVE_STRUGGLE, MOVE_SCARY_FACE, MOVE_CHARGE, MOVE_WISH, MOVE_BRICK_BREAK, MOVE_YAWN, MOVE_FEATHER_DANCE, MOVE_TEETER_DANCE, MOVE_MUD_SPORT, MOVE_FAKE_TEARS, MOVE_WATER_SPORT, MOVE_CALM_MIND, 0, MOVE_POUND, MOVE_SCRATCH, MOVE_VICE_GRIP, MOVE_WING_ATTACK, MOVE_FLY, MOVE_BIND, MOVE_SLAM, MOVE_HORN_ATTACK, MOVE_WRAP, MOVE_THRASH, MOVE_TAIL_WHIP, MOVE_LEER, MOVE_BITE, MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_PECK, MOVE_ABSORB, MOVE_STRING_SHOT, MOVE_EARTHQUAKE, MOVE_FISSURE, MOVE_DIG, MOVE_TOXIC, MOVE_SCREECH, MOVE_METRONOME, MOVE_LICK, MOVE_CLAMP, MOVE_CONSTRICT, MOVE_POISON_GAS, MOVE_BUBBLE, MOVE_SLASH, MOVE_SPIDER_WEB, MOVE_NIGHTMARE, MOVE_CURSE, MOVE_FORESIGHT, MOVE_CHARM, MOVE_ATTRACT, MOVE_ROCK_SMASH, MOVE_UPROAR, MOVE_SPIT_UP, MOVE_SWALLOW, MOVE_TORMENT, MOVE_FLATTER, MOVE_ROLE_PLAY, MOVE_ENDEAVOR, MOVE_TICKLE, MOVE_COVET, 0 }; static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0}; static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { { // 0 .fillValue = 0xFF, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, .fgColor = 1, .bgColor = 15, .shadowColor = 6, }, { // 1 .fillValue = 0xFF, .fontId = 1, .x = 1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 15, .shadowColor = 6, }, { // 2 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 3 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 4 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 5 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 6 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 7 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 12, .bgColor = 14, .shadowColor = 11, }, { // 8 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 9 .fillValue = 0xEE, .fontId = 1, .x = 2, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 12, .bgColor = 14, .shadowColor = 11, }, { // 10 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 11 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 12 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 13 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 14 .fillValue = 0x0, .fontId = 1, .x = 32, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 0, .shadowColor = 2, }, { // 15 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 16 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 17 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 18 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 19 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 20 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 21 .fillValue = 0x0, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 0, .shadowColor = 6, }, { // 22 .fillValue = 0x0, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 0, .shadowColor = 6, }, { // 23 .fillValue = 0x0, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 0, .shadowColor = 6, }, }; static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = { { // 0 .fillValue = 0xFF, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, .fgColor = 1, .bgColor = 15, .shadowColor = 6, }, { // 1 .fillValue = 0xFF, .fontId = 1, .x = 1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 15, .shadowColor = 6, }, { // 2 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 3 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 4 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 5 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 6 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 7 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 12, .bgColor = 14, .shadowColor = 11, }, { // 8 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 9 .fillValue = 0xEE, .fontId = 1, .x = 2, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 12, .bgColor = 14, .shadowColor = 11, }, { // 10 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 11 .fillValue = 0xEE, .fontId = 7, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 12 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 13 .fillValue = 0xEE, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 14 .fillValue = 0x0, .fontId = 1, .x = 32, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 0, .shadowColor = 2, }, { // 15 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 1, .bgColor = 14, .shadowColor = 15, }, { // 16 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 17 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 18 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 19 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 20 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 21 .fillValue = 0xEE, .fontId = 1, .x = -1, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 0, .fgColor = 13, .bgColor = 14, .shadowColor = 15, }, { // 22 .fillValue = 0x11, .fontId = 1, .x = 0, .y = 1, .letterSpacing = 0, .lineSpacing = 0, .speed = 1, .fgColor = 2, .bgColor = 1, .shadowColor = 3, }, }; static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] = { sTextOnWindowsInfo_Normal, sTextOnWindowsInfo_Arena }; static const u8 sRecordedBattleTextSpeeds[] = {8, 4, 1, 0}; // code void BufferStringBattle(u16 stringID) { s32 i; const u8 *stringPtr = NULL; gBattleMsgDataPtr = (struct BattleMsgData*)(&gBattleBufferA[gActiveBattler][4]); gLastUsedItem = gBattleMsgDataPtr->lastItem; gLastUsedAbility = gBattleMsgDataPtr->lastAbility; gBattleScripting.battler = gBattleMsgDataPtr->scrActive; *(&gBattleStruct->field_52) = gBattleMsgDataPtr->unk1605E; *(&gBattleStruct->hpScale) = gBattleMsgDataPtr->hpScale; gPotentialItemEffectBattler = gBattleMsgDataPtr->itemEffectBattler; *(&gBattleStruct->stringMoveType) = gBattleMsgDataPtr->moveType; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { sBattlerAbilities[i] = gBattleMsgDataPtr->abilities[i]; } for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++) { gBattleTextBuff1[i] = gBattleMsgDataPtr->textBuffs[0][i]; gBattleTextBuff2[i] = gBattleMsgDataPtr->textBuffs[1][i]; gBattleTextBuff3[i] = gBattleMsgDataPtr->textBuffs[2][i]; } switch (stringID) { case STRINGID_INTROMSG: // first battle msg if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { if (gBattleTypeFlags & BATTLE_TYPE_x800000) { stringPtr = sText_TwoTrainersWantToBattle; } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) stringPtr = sText_TwoLinkTrainersWantToBattlePause; else stringPtr = sText_TwoLinkTrainersWantToBattle; } else { if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) stringPtr = sText_Trainer1WantsToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) stringPtr = sText_LinkTrainerWantsToBattlePause; else stringPtr = sText_LinkTrainerWantsToBattle; } } else { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_TwoTrainersWantToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) stringPtr = sText_TwoTrainersWantToBattle; else stringPtr = sText_Trainer1WantsToBattle; } } else { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_WildPkmnAppeared2; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; else stringPtr = sText_WildPkmnAppeared; } break; case STRINGID_INTROSENDOUT: // poke first send-out if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_InGamePartnerSentOutZGoN; else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) stringPtr = sText_GoTwoPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_LinkPartnerSentOutPkmnGoPkmn; else stringPtr = sText_GoTwoPkmn; } else { stringPtr = sText_GoPkmn; } } else { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) stringPtr = sText_TwoTrainersSentPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_x800000) stringPtr = sText_TwoTrainersSentPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_TwoLinkTrainersSentOutPkmn; else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) stringPtr = sText_LinkTrainerSentOutTwoPkmn; else stringPtr = sText_Trainer1SentOutTwoPkmn; } else { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) stringPtr = sText_Trainer1SentOutPkmn; else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) stringPtr = sText_Trainer1SentOutPkmn; else stringPtr = sText_LinkTrainerSentOutPkmn; } } break; case STRINGID_RETURNMON: // sending poke to ball msg if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0) stringPtr = sText_PkmnThatsEnough; else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; else stringPtr = sText_PkmnGoodComeBack; } else { if (gTrainerBattleOpponent_A == TRAINER_LINK_OPPONENT || gBattleTypeFlags & BATTLE_TYPE_x2000000) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_LinkTrainer2WithdrewPkmn; else stringPtr = sText_LinkTrainer1WithdrewPkmn; } else { stringPtr = sText_Trainer1WithdrewPkmn; } } break; case STRINGID_SWITCHINMON: // switch-in msg if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) stringPtr = sText_DoItPkmn; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_GoForItPkmn; else stringPtr = sText_YourFoesWeakGetEmPkmn; } else { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { if (gBattleTypeFlags & BATTLE_TYPE_x800000) { if (gBattleScripting.battler == 1) stringPtr = sText_Trainer1SentOutPkmn2; else stringPtr = sText_Trainer2SentOutPkmn; } else { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_LinkTrainerMultiSentOutPkmn; else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) stringPtr = sText_Trainer1SentOutPkmn2; else stringPtr = sText_LinkTrainerSentOutPkmn2; } } else { if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { if (gBattleScripting.battler == 1) stringPtr = sText_Trainer1SentOutPkmn2; else stringPtr = sText_Trainer2SentOutPkmn; } else { stringPtr = sText_Trainer1SentOutPkmn2; } } } break; case STRINGID_USEDMOVE: // pokemon used a move msg if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); else StringCopy(gBattleTextBuff3, gMoveNames[gBattleMsgDataPtr->currentMove]); stringPtr = sText_AttackerUsedX; break; case STRINGID_BATTLEEND: // battle end if (gBattleTextBuff1[0] & B_OUTCOME_LINK_BATTLE_RAN) { gBattleTextBuff1[0] &= ~(B_OUTCOME_LINK_BATTLE_RAN); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && gBattleTextBuff1[0] != B_OUTCOME_DREW) gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON); if (gBattleTextBuff1[0] == B_OUTCOME_LOST || gBattleTextBuff1[0] == B_OUTCOME_DREW) stringPtr = sText_GotAwaySafely; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) stringPtr = sText_TwoWildFled; else stringPtr = sText_WildFled; } else { if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && gBattleTextBuff1[0] != B_OUTCOME_DREW) gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { switch (gBattleTextBuff1[0]) { case B_OUTCOME_WON: if (gBattleTypeFlags & BATTLE_TYPE_x800000) stringPtr = sText_TwoInGameTrainersDefeated; else stringPtr = sText_TwoLinkTrainersDefeated; break; case B_OUTCOME_LOST: stringPtr = sText_PlayerLostToTwo; break; case B_OUTCOME_DREW: stringPtr = sText_PlayerBattledToDrawVsTwo; break; } } else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) { switch (gBattleTextBuff1[0]) { case B_OUTCOME_WON: stringPtr = sText_PlayerDefeatedLinkTrainerTrainer1; break; case B_OUTCOME_LOST: stringPtr = sText_PlayerLostAgainstTrainer1; break; case B_OUTCOME_DREW: stringPtr = sText_PlayerBattledToDrawTrainer1; break; } } else { switch (gBattleTextBuff1[0]) { case B_OUTCOME_WON: stringPtr = sText_PlayerDefeatedLinkTrainer; break; case B_OUTCOME_LOST: stringPtr = sText_PlayerLostAgainstLinkTrainer; break; case B_OUTCOME_DREW: stringPtr = sText_PlayerBattledToDrawLinkTrainer; break; } } } break; default: // load a string from the table if (stringID >= BATTLESTRINGS_COUNT + BATTLESTRINGS_ID_ADDER) { gDisplayedStringBattle[0] = EOS; return; } else { stringPtr = gBattleStringsTable[stringID - BATTLESTRINGS_ID_ADDER]; } break; } BattleStringExpandPlaceholdersToDisplayedString(stringPtr); } u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src) { BattleStringExpandPlaceholders(src, gDisplayedStringBattle); } static const u8* TryGetStatusString(u8 *src) { u32 i; u8 status[8]; u32 chars1, chars2; u8* statusPtr; memcpy(status, sDummyWeirdStatusString, 8); statusPtr = status; for (i = 0; i < 8; i++) { if (*src == EOS) break; *statusPtr = *src; src++; statusPtr++; } chars1 = *(u32*)(&status[0]); chars2 = *(u32*)(&status[4]); for (i = 0; i < ARRAY_COUNT(gStatusConditionStringsTable); i++) { if (chars1 == *(u32*)(&gStatusConditionStringsTable[i][0][0]) && chars2 == *(u32*)(&gStatusConditionStringsTable[i][0][4])) return gStatusConditionStringsTable[i][1]; } return NULL; } #define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ toCpy = sText_FoePkmnPrefix; \ else \ toCpy = sText_WildPkmnPrefix; \ while (*toCpy != EOS) \ { \ dst[dstID] = *toCpy; \ dstID++; \ toCpy++; \ } \ GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \ } \ else \ { \ GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \ } \ StringGetEnd10(text); \ toCpy = text; static const u8 *BattleStringGetTrainerName(u16 trainerId, u8 *text, u8 multiplierId) { const u8 *toCpy; if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) { u32 i; for (i = 0; i < ARRAY_COUNT(gBattleResources->secretBase->trainerName); i++) text[i] = gBattleResources->secretBase->trainerName[i]; text[i] = EOS; ConvertInternationalString(text, gBattleResources->secretBase->language); toCpy = text; } else if (trainerId == TRAINER_OPPONENT_C00) { toCpy = gLinkPlayers[multiplierId ^ BIT_SIDE].name; } else if (trainerId == TRAINER_FRONTIER_BRAIN) { CopyFrontierBrainTrainerName(text); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { GetFrontierTrainerName(text, trainerId); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) { sub_81D5554(text, trainerId); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) { GetEreaderTrainerName(text); toCpy = text; } else { toCpy = gTrainers[trainerId].trainerName; } return toCpy; } static const u8 *BattleStringGetTrainerClass(u16 trainerId) { const u8 *toCpy; if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()]; else if (trainerId == TRAINER_OPPONENT_C00) toCpy = gTrainerClassNames[sub_8068BB0()]; else if (trainerId == TRAINER_FRONTIER_BRAIN) toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()]; else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) toCpy = gTrainerClassNames[GetFrontierOpponentClass(trainerId)]; else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) toCpy = gTrainerClassNames[sub_81D5530(trainerId)]; else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) toCpy = gTrainerClassNames[GetEreaderTrainerClassId()]; else toCpy = gTrainerClassNames[gTrainers[trainerId].trainerClass]; return toCpy; } u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; u8 text[30]; u8 multiplayerID; s32 i; if (gBattleTypeFlags & BATTLE_TYPE_x2000000) multiplayerID = gUnknown_0203C7B4; else multiplayerID = GetMultiplayerId(); while (*src != EOS) { toCpy = NULL; if (*src == PLACEHOLDER_BEGIN) { src++; switch (*src) { case B_TXT_BUFF1: if (gBattleTextBuff1[0] == B_BUFF_PLACEHOLDER_BEGIN) { ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gStringVar1); toCpy = gStringVar1; } else { toCpy = TryGetStatusString(gBattleTextBuff1); if (toCpy == NULL) toCpy = gBattleTextBuff1; } break; case B_TXT_BUFF2: if (gBattleTextBuff2[0] == B_BUFF_PLACEHOLDER_BEGIN) { ExpandBattleTextBuffPlaceholders(gBattleTextBuff2, gStringVar2); toCpy = gStringVar2; } else toCpy = gBattleTextBuff2; break; case B_TXT_BUFF3: if (gBattleTextBuff3[0] == B_BUFF_PLACEHOLDER_BEGIN) { ExpandBattleTextBuffPlaceholders(gBattleTextBuff3, gStringVar3); toCpy = gStringVar3; } else toCpy = gBattleTextBuff3; break; case B_TXT_COPY_VAR_1: toCpy = gStringVar1; break; case B_TXT_COPY_VAR_2: toCpy = gStringVar2; break; case B_TXT_COPY_VAR_3: toCpy = gStringVar3; break; case B_TXT_PLAYER_MON1_NAME: // first player poke name GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_OPPONENT_MON1_NAME: // first enemy poke name GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_PLAYER_MON2_NAME: // second player poke name GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_OPPONENT_MON2_NAME: // second enemy poke name GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1 HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))]) break; case B_TXT_ATK_PARTNER_NAME: // attacker partner name if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text); else GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case B_TXT_ATK_NAME_WITH_PREFIX: // attacker name with prefix HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) break; case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]) break; case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler]) break; case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler]) break; case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler]) break; case B_TXT_CURRENT_MOVE: // current move name if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->currentMove]; break; case B_TXT_LAST_MOVE: // originally used move name if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove]; break; case B_TXT_LAST_ITEM: // last used item if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { if (gLastUsedItem == ITEM_ENIGMA_BERRY) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { if ((gBattleScripting.multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE)) || (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE))) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); StringAppend(text, sText_BerrySuffix); toCpy = text; } else { toCpy = sText_EnigmaBerry; } } else { if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); StringAppend(text, sText_BerrySuffix); toCpy = text; } else toCpy = sText_EnigmaBerry; } } else { CopyItemName(gLastUsedItem, text); toCpy = text; } } else { CopyItemName(gLastUsedItem, text); toCpy = text; } break; case B_TXT_LAST_ABILITY: // last used ability toCpy = gAbilityNames[gLastUsedAbility]; break; case B_TXT_ATK_ABILITY: // attacker ability toCpy = gAbilityNames[sBattlerAbilities[gBattlerAttacker]]; break; case B_TXT_DEF_ABILITY: // target ability toCpy = gAbilityNames[sBattlerAbilities[gBattlerTarget]]; break; case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability toCpy = gAbilityNames[sBattlerAbilities[gBattleScripting.battler]]; break; case B_TXT_EFF_ABILITY: // effect battlerId ability toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]]; break; case B_TXT_TRAINER1_CLASS: // trainer class name toCpy = BattleStringGetTrainerClass(gTrainerBattleOpponent_A); break; case B_TXT_TRAINER1_NAME: // trainer1 name toCpy = BattleStringGetTrainerName(gTrainerBattleOpponent_A, text, multiplayerID); break; case B_TXT_1E: // link player name? toCpy = gLinkPlayers[multiplayerID].name; break; case B_TXT_1F: // link partner name? toCpy = gLinkPlayers[GetBattlerMultiplayerId(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; break; case B_TXT_20: // link opponent 1 name? toCpy = gLinkPlayers[GetBattlerMultiplayerId(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; break; case B_TXT_21: // link opponent 2 name? toCpy = gLinkPlayers[GetBattlerMultiplayerId(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; break; case B_TXT_22: // link scripting active name toCpy = gLinkPlayers[GetBattlerMultiplayerId(gBattleScripting.battler)].name; break; case B_TXT_PLAYER_NAME: // player name if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) toCpy = gLinkPlayers[0].name; else toCpy = gSaveBlock2Ptr->playerName; break; case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { sub_81A36D0(2, gTrainerBattleOpponent_A); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) { sub_81D572C(4, gTrainerBattleOpponent_A); toCpy = gStringVar4; } else { toCpy = GetTrainerALoseText(); } break; case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { sub_81A36D0(1, gTrainerBattleOpponent_A); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) { sub_81D572C(3, gTrainerBattleOpponent_A); toCpy = gStringVar4; } break; case B_TXT_26: // ? HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52)); break; case B_TXT_PC_CREATOR_NAME: // lanette pc if (FlagGet(FLAG_SYS_PC_LANETTE)) toCpy = sText_Lanettes; else toCpy = sText_Someones; break; case B_TXT_ATK_PREFIX2: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix2; else toCpy = sText_FoePkmnPrefix3; break; case B_TXT_DEF_PREFIX2: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix2; else toCpy = sText_FoePkmnPrefix3; break; case B_TXT_ATK_PREFIX1: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix; else toCpy = sText_FoePkmnPrefix2; break; case B_TXT_DEF_PREFIX1: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix; else toCpy = sText_FoePkmnPrefix2; break; case B_TXT_ATK_PREFIX3: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix3; else toCpy = sText_FoePkmnPrefix4; break; case B_TXT_DEF_PREFIX3: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) toCpy = sText_AllyPkmnPrefix3; else toCpy = sText_FoePkmnPrefix4; break; case B_TXT_TRAINER2_CLASS: toCpy = BattleStringGetTrainerClass(gTrainerBattleOpponent_B); break; case B_TXT_TRAINER2_NAME: toCpy = BattleStringGetTrainerName(gTrainerBattleOpponent_B, text, multiplayerID); break; case B_TXT_TRAINER2_LOSE_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { sub_81A36D0(2, gTrainerBattleOpponent_B); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) { sub_81D572C(4, gTrainerBattleOpponent_B); toCpy = gStringVar4; } else { toCpy = GetTrainerBLoseText(); } break; case B_TXT_TRAINER2_WIN_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { sub_81A36D0(1, gTrainerBattleOpponent_B); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) { sub_81D572C(3, gTrainerBattleOpponent_B); toCpy = gStringVar4; } break; case B_TXT_PARTNER_CLASS: toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)]; break; case B_TXT_PARTNER_NAME: GetFrontierTrainerName(text, gPartnerTrainerId); toCpy = text; break; case B_TXT_ATK_TRAINER_NAME: switch (GetBattlerPosition(gBattlerAttacker)) { case B_POSITION_PLAYER_LEFT: toCpy = gSaveBlock2Ptr->playerName; break; case B_POSITION_PLAYER_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { GetFrontierTrainerName(text, gPartnerTrainerId); toCpy = text; } else { toCpy = gSaveBlock2Ptr->playerName; } break; case B_POSITION_OPPONENT_LEFT: toCpy = BattleStringGetTrainerName(gTrainerBattleOpponent_A, text, multiplayerID); break; case B_POSITION_OPPONENT_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) toCpy = BattleStringGetTrainerName(gTrainerBattleOpponent_B, text, multiplayerID); else toCpy = BattleStringGetTrainerName(gTrainerBattleOpponent_A, text, multiplayerID); break; } break; case B_TXT_ATK_TRAINER_CLASS: switch (GetBattlerPosition(gBattlerAttacker)) { case B_POSITION_PLAYER_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)]; break; case B_POSITION_OPPONENT_LEFT: toCpy = BattleStringGetTrainerClass(gTrainerBattleOpponent_A); break; case B_POSITION_OPPONENT_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) toCpy = BattleStringGetTrainerClass(gTrainerBattleOpponent_B); else toCpy = BattleStringGetTrainerClass(gTrainerBattleOpponent_A); break; } break; case B_TXT_ATK_TEAM: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) toCpy = sText_YourTeam; else toCpy = sText_OpposingTeam; break; } if (toCpy != NULL) { while (*toCpy != EOS) { dst[dstID] = *toCpy; dstID++; toCpy++; } } if (*src == B_TXT_TRAINER1_LOSE_TEXT || *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER1_WIN_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT) { dst[dstID] = EXT_CTRL_CODE_BEGIN; dstID++; dst[dstID] = 9; dstID++; } } else { dst[dstID] = *src; dstID++; } src++; } dst[dstID] = *src; dstID++; return dstID; } static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { u32 srcID = 1; u32 value = 0; u8 text[12]; u16 hword; *dst = EOS; while (src[srcID] != B_BUFF_EOS) { switch (src[srcID]) { case B_BUFF_STRING: // battle string hword = T1_READ_16(&src[srcID + 1]); StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]); srcID += 3; break; case B_BUFF_NUMBER: // int to string switch (src[srcID + 1]) { case 1: value = src[srcID + 3]; break; case 2: value = T1_READ_16(&src[srcID + 3]); break; case 4: value = T1_READ_32(&src[srcID + 3]); break; } ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]); srcID += src[srcID + 1] + 3; break; case B_BUFF_MOVE: // move name StringAppend(dst, gMoveNames[T1_READ_16(&src[srcID + 1])]); srcID += 3; break; case B_BUFF_TYPE: // type name StringAppend(dst, gTypeNames[src[srcID + 1]]); srcID += 2; break; case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) { GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); } else { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) StringAppend(dst, sText_FoePkmnPrefix); else StringAppend(dst, sText_WildPkmnPrefix); GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); } StringGetEnd10(text); StringAppend(dst, text); srcID += 3; break; case B_BUFF_STAT: // stats StringAppend(dst, gStatNamesTable[src[srcID + 1]]); srcID += 2; break; case B_BUFF_SPECIES: // species name GetSpeciesName(dst, T1_READ_16(&src[srcID + 1])); srcID += 3; break; case B_BUFF_MON_NICK: // poke nick without prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); else GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); StringGetEnd10(dst); srcID += 3; break; case B_BUFF_NEGATIVE_FLAVOR: // flavor table StringAppend(dst, gPokeblockWasTooXStringTable[src[srcID + 1]]); srcID += 2; break; case B_BUFF_ABILITY: // ability names StringAppend(dst, gAbilityNames[src[srcID + 1]]); srcID += 2; break; case B_BUFF_ITEM: // item name hword = T1_READ_16(&src[srcID + 1]); if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { if (hword == ITEM_ENIGMA_BERRY) { if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler) { StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name); StringAppend(dst, sText_BerrySuffix); } else { StringAppend(dst, sText_EnigmaBerry); } } else { CopyItemName(hword, dst); } } else { CopyItemName(hword, dst); } srcID += 3; break; } } } // Loads one of two text strings into the provided buffer. This is functionally // unused, since the value loaded into the buffer is not read; it loaded one of // two particles (either "?" or "?") which works in tandem with ChooseTypeOfMoveUsedString // below to effect changes in the meaning of the line. static void ChooseMoveUsedParticle(u8* textBuff) { s32 counter = 0; u32 i = 0; while (counter != 4) { if (sGrammarMoveUsedTable[i] == 0) counter++; if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove) break; } if (counter >= 0) { if (counter <= 2) StringCopy(textBuff, sText_SpaceIs); // is else if (counter <= 4) StringCopy(textBuff, sText_ApostropheS); // ’s } } // Appends "!" to the text buffer `dst`. In the original Japanese this looked // into the table of moves at sGrammarMoveUsedTable and varied the line accordingly. // // sText_ExclamationMark was a plain "!", used for any attack not on the list. // It resulted in the translation "’s !". // // sText_ExclamationMark2 was "? ????!". This resulted in the translation // " used !", which was used for all attacks in English. // // sText_ExclamationMark3 was "??!". This was used for those moves whose // names were verbs, such as Recover, and resulted in translations like " // recovered itself!". // // sText_ExclamationMark4 was "? ??!" This resulted in a translation of // " did an !". // // sText_ExclamationMark5 was " ????!" This resulted in a translation of // "’s attack!". static void ChooseTypeOfMoveUsedString(u8* dst) { s32 counter = 0; s32 i = 0; while (*dst != EOS) dst++; while (counter != 4) { if (sGrammarMoveUsedTable[i] == MOVE_NONE) counter++; if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove) break; } switch (counter) { case 0: StringCopy(dst, sText_ExclamationMark); break; case 1: StringCopy(dst, sText_ExclamationMark2); break; case 2: StringCopy(dst, sText_ExclamationMark3); break; case 3: StringCopy(dst, sText_ExclamationMark4); break; case 4: StringCopy(dst, sText_ExclamationMark5); break; } } void BattlePutTextOnWindow(const u8 *text, u8 windowId) { const struct BattleWindowText *textInfo = sBattleTextOnWindowsInfo[gBattleScripting.windowsType]; bool32 copyToVram; struct TextSubPrinter textSubPrinter; u8 speed; if (windowId & 0x80) { windowId &= ~(0x80); copyToVram = FALSE; } else { FillWindowPixelBuffer(windowId, textInfo[windowId].fillValue); copyToVram = TRUE; } textSubPrinter.current_text_offset = text; textSubPrinter.windowId = windowId; textSubPrinter.fontId = textInfo[windowId].fontId; textSubPrinter.x = textInfo[windowId].x; textSubPrinter.y = textInfo[windowId].y; textSubPrinter.currentX = textSubPrinter.x; textSubPrinter.currentY = textSubPrinter.y; textSubPrinter.letterSpacing = textInfo[windowId].letterSpacing; textSubPrinter.lineSpacing = textInfo[windowId].lineSpacing; textSubPrinter.fontColor_l = 0; textSubPrinter.fgColor = textInfo[windowId].fgColor; textSubPrinter.bgColor = textInfo[windowId].bgColor; textSubPrinter.shadowColor = textInfo[windowId].shadowColor; if (textSubPrinter.x == 0xFF) { u32 width = sub_80397C4(gBattleScripting.windowsType, windowId); s32 alignX = GetStringCenterAlignXOffsetWithLetterSpacing(textSubPrinter.fontId, textSubPrinter.current_text_offset, width, textSubPrinter.letterSpacing); textSubPrinter.x = textSubPrinter.currentX = alignX; } if (windowId == 0x16) gTextFlags.flag_1 = 0; else gTextFlags.flag_1 = 1; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED)) gTextFlags.flag_2 = 1; else gTextFlags.flag_2 = 0; if (windowId == 0 || windowId == 0x16) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) speed = 1; else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) speed = sRecordedBattleTextSpeeds[GetTextSpeedInRecordedBattle()]; else speed = GetPlayerTextSpeed(); gTextFlags.flag_0 = 1; } else { speed = textInfo[windowId].speed; gTextFlags.flag_0 = 0; } AddTextPrinter(&textSubPrinter, speed, NULL); if (copyToVram) { PutWindowTilemap(windowId); CopyWindowToVram(windowId, 3); } } void SetPpNumbersPaletteInMoveSelection(void) { struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); const u16 *palPtr = gUnknown_08D85620; u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16)); CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16)); } u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp) { if (maxPp == currentPp) { return 3; } else if (maxPp <= 2) { if (currentPp > 1) return 3; else return 2 - currentPp; } else if (maxPp <= 7) { if (currentPp > 2) return 3; else return 2 - currentPp; } else { if (currentPp == 0) return 2; if (currentPp <= maxPp / 4) return 1; if (currentPp > maxPp / 2) return 3; } return 0; }