2017-10-07 14:15:47 +01:00
# include "global.h"
# include "battle.h"
# include "battle_message.h"
2018-02-07 23:35:13 +00:00
# include "constants/battle_string_ids.h"
2017-12-11 18:27:51 +00:00
# include "constants/moves.h"
2017-10-07 14:15:47 +01:00
# include "text.h"
# include "string_util.h"
2017-12-05 17:55:48 +00:00
# include "constants/items.h"
2017-10-07 18:59:41 +01:00
# include "event_data.h"
# include "link.h"
# include "item.h"
2017-10-08 13:54:51 +01:00
# include "window.h"
# include "palette.h"
# include "battle_controllers.h"
2017-12-01 20:25:13 +00:00
# include "battle_setup.h"
2018-02-09 00:09:02 +00:00
# include "menu.h"
# include "recorded_battle.h"
# include "international_string_util.h"
2017-10-07 14:15:47 +01:00
2018-02-06 22:09:39 +00:00
extern u8 gBattlerAbilities [ MAX_BATTLERS_COUNT ] ;
2017-10-08 13:54:51 +01:00
extern u8 gUnknown_0203C7B4 ;
extern struct StringInfoBattle * gStringInfo ;
2017-10-07 14:15:47 +01:00
extern const u8 gMoveNames [ LAST_MOVE_INDEX + 1 ] [ 13 ] ;
2017-10-07 18:59:41 +01:00
extern const u8 gTrainerClassNames [ ] [ 13 ] ;
2017-10-08 13:54:51 +01:00
extern const u16 gUnknown_08D85620 [ ] ;
2017-10-07 14:15:47 +01:00
// strings
extern const u8 gText_PkmnBoxSomeonesPCFull [ ] ;
extern const u8 gText_PkmnBoxLanettesPCFull [ ] ;
extern const u8 gText_PkmnTransferredSomeonesPC [ ] ;
extern const u8 gText_PkmnTransferredLanettesPC [ ] ;
2017-10-07 18:59:41 +01:00
extern u16 sub_8068BB0 ( void ) ; // pokemon_1
extern u8 sub_81A4D00 ( 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 sub_81A4D50 ( 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 ) ;
2017-10-07 14:15:47 +01:00
// this file's functions
2017-10-08 13:54:51 +01:00
static void sub_814F8F8 ( u8 * textPtr ) ;
static void sub_814F950 ( u8 * dst ) ;
2017-10-07 18:59:41 +01:00
static void ExpandBattleTextBuffPlaceholders ( const u8 * src , u8 * dst ) ;
2017-10-07 14:15:47 +01:00
// ewram variables
EWRAM_DATA u8 gDisplayedStringBattle [ 300 ] = { 0 } ;
EWRAM_DATA u8 gBattleTextBuff1 [ TEXT_BUFF_ARRAY_COUNT ] = { 0 } ;
EWRAM_DATA u8 gBattleTextBuff2 [ TEXT_BUFF_ARRAY_COUNT ] = { 0 } ;
EWRAM_DATA u8 gBattleTextBuff3 [ TEXT_BUFF_ARRAY_COUNT ] = { 0 } ;
// const rom data
2017-10-08 13:54:51 +01:00
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
2017-10-07 14:15:47 +01:00
const u8 gText_Trainer1LoseText [ ] = _ ( " {B_TRAINER1_LOSE_TEXT} " ) ;
const u8 gText_PkmnGainedEXP [ ] = _ ( " {B_BUFF1} gained{B_BUFF2} \n {B_BUFF3} EXP. Points! \ p " ) ;
const u8 gText_EmptyString4 [ ] = _ ( " " ) ;
const u8 gText_ABoosted [ ] = _ ( " a boosted " ) ;
const u8 gText_PkmnGrewToLv [ ] = _ ( " {B_BUFF1} grew to \n LV. {B_BUFF2}!{UNKNOWN_A} \ p " ) ;
const u8 gText_PkmnLearnedMove [ ] = _ ( " {B_BUFF1} learned \n {B_BUFF2}!{UNKNOWN_A} \ p " ) ;
const u8 gText_TryToLearnMove1 [ ] = _ ( " {B_BUFF1} is trying to \n learn {B_BUFF2}. \ p " ) ;
const u8 gText_TryToLearnMove2 [ ] = _ ( " But, {B_BUFF1} can’ t learn \n more than four moves. \ p " ) ;
const u8 gText_TryToLearnMove3 [ ] = _ ( " Delete a move to make \n room for {B_BUFF2}? " ) ;
const u8 gText_PkmnForgotMove [ ] = _ ( " {B_BUFF1} forgot \n {B_BUFF2}. \ p " ) ;
const u8 gText_StopLearningMove [ ] = _ ( " {PAUSE 32}Stop learning \n {B_BUFF2}? " ) ;
const u8 gText_DidNotLearnMove [ ] = _ ( " {B_BUFF1} did not learn \n {B_BUFF2}. \ p " ) ;
const u8 gText_UseNextPkmn [ ] = _ ( " Use next POKéMON? " ) ;
const u8 gText_AttackMissed [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s \n attack missed! " ) ;
const u8 gText_PkmnProtectedItself [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} \n protected itself! " ) ;
const u8 gText_AvoidedDamage [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} avoided \n damage with {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnMakesGroundMiss [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} makes GROUND \n moves miss with {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnAvoidedAttack [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} avoided \n the attack! " ) ;
const u8 gText_ItDoesntAffect [ ] = _ ( " It doesn’ t affect \n {B_DEF_NAME_WITH_PREFIX}… " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_AttackerFainted [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} \n fainted! \ p " ) ;
const u8 gText_TargetFainted [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} \n fainted! \ p " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PlayerGotMoney [ ] = _ ( " {B_PLAYER_NAME} got ¥{B_BUFF1} \n for winning! \ p " ) ;
const u8 gText_PlayerWhiteout [ ] = _ ( " {B_PLAYER_NAME} is out of \n usable POKéMON! \ p " ) ;
const u8 gText_PlayerWhiteout2 [ ] = _ ( " {B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS} " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PreventsEscape [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents \n escape with {B_SCR_ACTIVE_ABILITY}! \ p " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_CantEscape2 [ ] = _ ( " Can’ t escape! \ p " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_AttackerCantEscape [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} can’ t escape! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_HitXTimes [ ] = _ ( " Hit {B_BUFF1} time(s)! " ) ;
const u8 gText_PkmnFellAsleep [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} \n fell asleep! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnMadeSleep [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n made {B_EFF_NAME_WITH_PREFIX} sleep! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnAlreadyAsleep [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} is \n already asleep! " ) ;
const u8 gText_PkmnAlreadyAsleep2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is \n already asleep! " ) ;
const u8 gText_PkmnWasntAffected [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} \n wasn’ t affected! " ) ;
const u8 gText_PkmnWasPoisoned [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} \n was poisoned! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnPoisonedBy [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n poisoned {B_EFF_NAME_WITH_PREFIX}! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnHurtByPoison [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is hurt \n by poison! " ) ;
const u8 gText_PkmnAlreadyPoisoned [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} is already \n poisoned. " ) ;
const u8 gText_PkmnBadlyPoisoned [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} is badly \n poisoned! " ) ;
const u8 gText_PkmnEnergyDrained [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} had its \n energy drained! " ) ;
const u8 gText_PkmnWasBurned [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} was burned! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnBurnedBy [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n burned {B_EFF_NAME_WITH_PREFIX}! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnHurtByBurn [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is hurt \n by its burn! " ) ;
const u8 gText_PkmnAlreadyHasBurn [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} already \n has a burn. " ) ;
const u8 gText_PkmnWasFrozen [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} was \n frozen solid! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnFrozenBy [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n froze {B_EFF_NAME_WITH_PREFIX} solid! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnIsFrozen [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is \n frozen solid! " ) ;
const u8 gText_PkmnWasDefrosted [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was \n defrosted! " ) ;
const u8 gText_PkmnWasDefrosted2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} was \n defrosted! " ) ;
const u8 gText_PkmnWasDefrostedBy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} was \n defrosted by {B_CURRENT_MOVE}! " ) ;
const u8 gText_PkmnWasParalyzed [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} is paralyzed! \n It may be unable to move! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnWasParalyzedBy [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n paralyzed {B_EFF_NAME_WITH_PREFIX}! \ lIt may be unable to move! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnIsParalyzed [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is paralyzed! \n It can’ t move! " ) ;
const u8 gText_PkmnIsAlreadyParalyzed [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} is \n already paralyzed! " ) ;
const u8 gText_PkmnHealedParalysis [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was \n healed of paralysis! " ) ;
const u8 gText_PkmnDreamEaten [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s \n dream was eaten! " ) ;
const u8 gText_StatsWontIncrease [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_BUFF1} \n won’ t go higher! " ) ;
const u8 gText_StatsWontDecrease [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_BUFF1} \n won’ t go lower! " ) ;
const u8 gText_TeamStoppedWorking [ ] = _ ( " Your team’ s {B_BUFF1} \n stopped working! " ) ;
const u8 gText_FoeStoppedWorking [ ] = _ ( " The foe’ s {B_BUFF1} \n stopped working! " ) ;
const u8 gText_PkmnIsConfused [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is \n confused! " ) ;
const u8 gText_PkmnHealedConfusion [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} snapped \n out of confusion! " ) ;
const u8 gText_PkmnWasConfused [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX} became \n confused! " ) ;
const u8 gText_PkmnAlreadyConfused [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} is \n already confused! " ) ;
const u8 gText_PkmnFellInLove [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} \n fell in love! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnInLove [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is in love \n with {B_SCR_ACTIVE_NAME_WITH_PREFIX}! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnImmobilizedByLove [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is \n immobilized by love! " ) ;
const u8 gText_PkmnBlownAway [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was \n blown away! " ) ;
const u8 gText_PkmnChangedType [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} transformed \n into the {B_BUFF1} type! " ) ;
const u8 gText_PkmnFlinched [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} flinched! " ) ;
const u8 gText_PkmnRegainedHealth [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} regained \n health! " ) ;
const u8 gText_PkmnHPFull [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s \n HP is full! " ) ;
const u8 gText_PkmnRaisedSpDef [ ] = _ ( " {B_ATK_PREFIX2}’ s {B_CURRENT_MOVE} \n raised SP. DEF! " ) ;
const u8 gText_PkmnRaisedSpDefALittle [ ] = _ ( " {B_ATK_PREFIX2}’ s {B_CURRENT_MOVE} \n raised SP. DEF a little! " ) ;
const u8 gText_PkmnRaisedDef [ ] = _ ( " {B_ATK_PREFIX2}’ s {B_CURRENT_MOVE} \n raised DEFENSE! " ) ;
const u8 gText_PkmnRaisedDefALittle [ ] = _ ( " {B_ATK_PREFIX2}’ s {B_CURRENT_MOVE} \n raised DEFENSE a little! " ) ;
const u8 gText_PkmnCoveredByVeil [ ] = _ ( " {B_ATK_PREFIX2}’ s party is covered \n by a veil! " ) ;
const u8 gText_PkmnUsedSafeguard [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s party is protected \n by SAFEGUARD! " ) ;
const u8 gText_PkmnSafeguardExpired [ ] = _ ( " {B_ATK_PREFIX3}’ s party is no longer \n protected by SAFEGUARD! " ) ;
const u8 gText_PkmnWentToSleep [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} went \n to sleep! " ) ;
const u8 gText_PkmnSleptHealthy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} slept and \n became healthy! " ) ;
const u8 gText_PkmnWhippedWhirlwind [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} whipped \n up a whirlwind! " ) ;
const u8 gText_PkmnTookSunlight [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} took \n in sunlight! " ) ;
const u8 gText_PkmnLoweredHead [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} lowered \n its head! " ) ;
const u8 gText_PkmnIsGlowing [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is glowing! " ) ;
const u8 gText_PkmnFlewHigh [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} flew \n up high! " ) ;
const u8 gText_PkmnDugHole [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} dug a hole! " ) ;
const u8 gText_PkmnHidUnderwater [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} hid \n underwater! " ) ;
const u8 gText_PkmnSprangUp [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} sprang up! " ) ;
const u8 gText_PkmnSqueezedByBind [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was squeezed by \n {B_ATK_NAME_WITH_PREFIX}’ s BIND! " ) ;
const u8 gText_PkmnTrappedInVortex [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was trapped \n in the vortex! " ) ;
const u8 gText_PkmnTrappedBySandTomb [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was trapped \n by SAND TOMB! " ) ;
const u8 gText_PkmnWrappedBy [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was WRAPPED by \n {B_ATK_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnClamped [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} CLAMPED \n {B_DEF_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnHurtBy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is hurt \n by {B_BUFF1}! " ) ;
const u8 gText_PkmnFreedFrom [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} was freed \n from {B_BUFF1}! " ) ;
const u8 gText_PkmnCrashed [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} kept going \n and crashed! " ) ;
const u8 gText_PkmnShroudedInMist [ ] = _ ( " {B_ATK_PREFIX2} became \n shrouded in MIST! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnProtectedByMist [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected \n by MIST! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnGettingPumped [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is getting \n pumped! " ) ;
const u8 gText_PkmnHitWithRecoil [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is hit \n with recoil! " ) ;
const u8 gText_PkmnProtectedItself2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} protected \n itself! " ) ;
const u8 gText_PkmnBuffetedBySandstorm [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is buffeted \n by the sandstorm! " ) ;
const u8 gText_PkmnPeltedByHail [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is pelted \n by HAIL! " ) ;
const u8 gText_PkmnsXWoreOff [ ] = _ ( " {B_ATK_PREFIX1}’ s {B_BUFF1} \n wore off! " ) ;
const u8 gText_PkmnSeeded [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was seeded! " ) ;
const u8 gText_PkmnEvadedAttack [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} evaded \n the attack! " ) ;
const u8 gText_PkmnSappedByLeechSeed [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s health is \n sapped by LEECH SEED! " ) ;
const u8 gText_PkmnFastAsleep [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is fast \n asleep. " ) ;
const u8 gText_PkmnWokeUp [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} woke up! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnUproarKeptAwake [ ] = _ ( " But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s UPROAR \n kept it awake! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnWokeUpInUproar [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} woke up \n in the UPROAR! " ) ;
const u8 gText_PkmnCausedUproar [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} caused \n an UPROAR! " ) ;
const u8 gText_PkmnMakingUproar [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is making \n an UPROAR! " ) ;
const u8 gText_PkmnCalmedDown [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} calmed down. " ) ;
const u8 gText_PkmnCantSleepInUproar [ ] = _ ( " But {B_DEF_NAME_WITH_PREFIX} can’ t \n sleep in an UPROAR! " ) ;
const u8 gText_PkmnStockpiled [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} STOCKPILED \n {B_BUFF1}! " ) ;
const u8 gText_PkmnCantStockpile [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} can’ t \n STOCKPILE any more! " ) ;
const u8 gText_PkmnCantSleepInUproar2 [ ] = _ ( " But {B_DEF_NAME_WITH_PREFIX} can’ t \n sleep in an UPROAR! " ) ;
const u8 gText_UproarKeptPkmnAwake [ ] = _ ( " But the UPROAR kept \n {B_DEF_NAME_WITH_PREFIX} awake! " ) ;
const u8 gText_PkmnStayedAwakeUsing [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} stayed awake \n using its {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnStoringEnergy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is storing \n energy! " ) ;
const u8 gText_PkmnUnleashedEnergy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} unleashed \n energy! " ) ;
const u8 gText_PkmnFatigueConfusion [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} became \n confused due to fatigue! " ) ;
const u8 gText_PkmnPickedUpItem [ ] = _ ( " {B_PLAYER_NAME} picked up \n ¥{B_BUFF1}! \ p " ) ;
const u8 gText_PkmnUnaffected [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} is \n unaffected! " ) ;
const u8 gText_PkmnTransformedInto [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} transformed \n into {B_BUFF1}! " ) ;
const u8 gText_PkmnMadeSubstitute [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} made \n a SUBSTITUTE! " ) ;
const u8 gText_PkmnHasSubstitute [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} already \n has a SUBSTITUTE! " ) ;
const u8 gText_SubstituteDamaged [ ] = _ ( " The SUBSTITUTE took damage \n for {B_DEF_NAME_WITH_PREFIX}! \ p " ) ;
const u8 gText_PkmnSubstituteFaded [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s \n SUBSTITUTE faded! \ p " ) ;
const u8 gText_PkmnMustRecharge [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} must \n recharge! " ) ;
const u8 gText_PkmnRageBuilding [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s RAGE \n is building! " ) ;
const u8 gText_PkmnMoveWasDisabled [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_BUFF1} \n was disabled! " ) ;
const u8 gText_PkmnMoveDisabledNoMore [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is disabled \n no more! " ) ;
const u8 gText_PkmnGotEncore [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} got \n an ENCORE! " ) ;
const u8 gText_PkmnEncoreEnded [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s ENCORE \n ended! " ) ;
const u8 gText_PkmnTookAim [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} took aim \n at {B_DEF_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnSketchedMove [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} SKETCHED \n {B_BUFF1}! " ) ;
const u8 gText_PkmnTryingToTakeFoe [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is trying \n to take its foe with it! " ) ;
const u8 gText_PkmnTookFoe [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} took \n {B_ATK_NAME_WITH_PREFIX} with it! " ) ;
const u8 gText_PkmnReducedPP [ ] = _ ( " Reduced {B_DEF_NAME_WITH_PREFIX}’ s \n {B_BUFF1} by {B_BUFF2}! " ) ;
const u8 gText_PkmnStoleItem [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} stole \n {B_DEF_NAME_WITH_PREFIX}’ s {B_LAST_ITEM}! " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_TargetCantEscapeNow [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} can’ t \n escape now! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnFellIntoNightmare [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} fell into \n a NIGHTMARE! " ) ;
const u8 gText_PkmnLockedInNightmare [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is locked \n in a NIGHTMARE! " ) ;
const u8 gText_PkmnLaidCurse [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} cut its own HP and \n laid a CURSE on {B_DEF_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnAfflictedByCurse [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is afflicted \n by the CURSE! " ) ;
const u8 gText_SpikesScattered [ ] = _ ( " SPIKES were scattered all around \n the opponent’ s side! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnHurtBySpikes [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt \n by SPIKES! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnIdentified [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} identified \n {B_DEF_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnPerishCountFell [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s PERISH count \n fell to {B_BUFF1}! " ) ;
const u8 gText_PkmnBracedItself [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} braced \n itself! " ) ;
const u8 gText_PkmnEnduredHit [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} ENDURED \n the hit! " ) ;
const u8 gText_MagnitudeStrength [ ] = _ ( " MAGNITUDE {B_BUFF1}! " ) ;
const u8 gText_PkmnCutHPMaxedAttack [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} cut its own HP \n and maximized ATTACK! " ) ;
const u8 gText_PkmnCopiedStatChanges [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} copied \n {B_DEF_NAME_WITH_PREFIX}’ s stat changes! " ) ;
const u8 gText_PkmnGotFree [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} got free of \n {B_DEF_NAME_WITH_PREFIX}’ s {B_BUFF1}! " ) ;
const u8 gText_PkmnShedLeechSeed [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} shed \n LEECH SEED! " ) ;
const u8 gText_PkmnBlewAwaySpikes [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} blew away \n SPIKES! " ) ;
const u8 gText_PkmnFledFromBattle [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} fled from \n battle! " ) ;
const u8 gText_PkmnForesawAttack [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} foresaw \n an attack! " ) ;
const u8 gText_PkmnTookAttack [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} took the \n {B_BUFF1} attack! " ) ;
const u8 gText_PkmnChoseXAsDestiny [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} chose \n {B_CURRENT_MOVE} as its destiny! " ) ;
const u8 gText_PkmnAttack [ ] = _ ( " {B_BUFF1}’ s attack! " ) ;
const u8 gText_PkmnCenterAttention [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} became the \n center of attention! " ) ;
const u8 gText_PkmnChargingPower [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} began \n charging power! " ) ;
const u8 gText_NaturePowerTurnedInto [ ] = _ ( " NATURE POWER turned into \n {B_CURRENT_MOVE}! " ) ;
const u8 gText_PkmnStatusNormal [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s status \n returned to normal! " ) ;
const u8 gText_PkmnSubjectedToTorment [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was subjected \n to TORMENT! " ) ;
const u8 gText_PkmnTighteningFocus [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is tightening \n its focus! " ) ;
const u8 gText_PkmnFellForTaunt [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} fell for \n the TAUNT! " ) ;
const u8 gText_PkmnReadyToHelp [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is ready to \n help {B_DEF_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnSwitchedItems [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} switched \n items with its opponent! " ) ;
const u8 gText_PkmnObtainedX [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} obtained \n {B_BUFF1}. " ) ;
const u8 gText_PkmnObtainedX2 [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} obtained \n {B_BUFF2}. " ) ;
const u8 gText_PkmnObtainedXYObtainedZ [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} obtained \n {B_BUFF1}. \ p{B_DEF_NAME_WITH_PREFIX} obtained \n {B_BUFF2}. " ) ;
const u8 gText_PkmnCopiedFoe [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} copied \n {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnMadeWish [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} made a WISH! " ) ;
const u8 gText_PkmnWishCameTrue [ ] = _ ( " {B_BUFF1}’ s WISH \n came true! " ) ;
const u8 gText_PkmnPlantedRoots [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} planted its roots! " ) ;
const u8 gText_PkmnAbsorbedNutrients [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} absorbed \n nutrients with its roots! " ) ;
const u8 gText_PkmnAnchoredItself [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} anchored \n itself with its roots! " ) ;
const u8 gText_PkmnWasMadeDrowsy [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} made \n {B_DEF_NAME_WITH_PREFIX} drowsy! " ) ;
const u8 gText_PkmnKnockedOff [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} knocked off \n {B_DEF_NAME_WITH_PREFIX}’ s {B_LAST_ITEM}! " ) ;
const u8 gText_PkmnSwappedAbilities [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} swapped abilities \n with its opponent! " ) ;
const u8 gText_PkmnSealedOpponentMove [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} sealed the \n opponent’ s move(s)! " ) ;
const u8 gText_PkmnWantsGrudge [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} wants the \n opponent to bear a GRUDGE! " ) ;
const u8 gText_PkmnLostPPGrudge [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_BUFF1} lost \n all its PP due to the GRUDGE! " ) ;
const u8 gText_PkmnShroudedItself [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} shrouded \n itself in {B_CURRENT_MOVE}! " ) ;
const u8 gText_PkmnMoveBounced [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_CURRENT_MOVE} \n was bounced back by MAGIC COAT! " ) ;
const u8 gText_PkmnWaitsForTarget [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} waits for a target \n to make a move! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnSnatchedMove [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} SNATCHED \n {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s move! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_ElectricityWeakened [ ] = _ ( " Electricity’ s power was \n weakened! " ) ;
const u8 gText_FireWeakened [ ] = _ ( " Fire’ s power was \n weakened! " ) ;
const u8 gText_XFoundOneY [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} found \n one {B_LAST_ITEM}! " ) ;
const u8 gText_SoothingAroma [ ] = _ ( " A soothing aroma wafted \n through the area! " ) ;
const u8 gText_ItemsCantBeUsedNow [ ] = _ ( " Items can’ t be used now.{PAUSE 64} " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_ForXCommaYZ [ ] = _ ( " For {B_SCR_ACTIVE_NAME_WITH_PREFIX}, \n {B_LAST_ITEM} {B_BUFF1} " ) ;
const u8 gText_PkmnUsedXToGetPumped [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} used \n {B_LAST_ITEM} to get pumped! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnLostFocus [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} lost its \n focus and couldn’ t move! " ) ;
const u8 gText_PkmnWasDraggedOut [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was \n dragged out! \ p " ) ;
const u8 gText_TheWallShattered [ ] = _ ( " The wall shattered! " ) ;
const u8 gText_ButNoEffect [ ] = _ ( " But it had no effect! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnHasNoMovesLeft [ ] = _ ( " {B_ACTIVE_NAME_WITH_PREFIX} has no \n moves left! \ p " ) ;
const u8 gText_PkmnMoveIsDisabled [ ] = _ ( " {B_ACTIVE_NAME_WITH_PREFIX}’ s {B_CURRENT_MOVE} \n is disabled! \ p " ) ;
const u8 gText_PkmnCantUseMoveTorment [ ] = _ ( " {B_ACTIVE_NAME_WITH_PREFIX} can’ t use the same \n move in a row due to the TORMENT! \ p " ) ;
const u8 gText_PkmnCantUseMoveTaunt [ ] = _ ( " {B_ACTIVE_NAME_WITH_PREFIX} can’ t use \n {B_CURRENT_MOVE} after the TAUNT! \ p " ) ;
const u8 gText_PkmnCantUseMoveSealed [ ] = _ ( " {B_ACTIVE_NAME_WITH_PREFIX} can’ t use the \n sealed {B_CURRENT_MOVE}! \ p " ) ;
const u8 gText_PkmnMadeItRain [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n made it rain! " ) ;
const u8 gText_PkmnRaisedSpeed [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n raised its SPEED! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnProtectedBy [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} was protected \n by {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnPreventsUsage [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevents {B_ATK_NAME_WITH_PREFIX} \ lfrom using {B_CURRENT_MOVE}! " ) ;
const u8 gText_PkmnRestoredHPUsing [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} restored HP \n using its {B_DEF_ABILITY}! " ) ;
const u8 gText_PkmnsXMadeYUseless [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n made {B_CURRENT_MOVE} useless! " ) ;
const u8 gText_PkmnChangedTypeWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n made it the {B_BUFF1} type! " ) ;
const u8 gText_PkmnPreventsParalysisWith [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevents paralysis! " ) ;
const u8 gText_PkmnPreventsRomanceWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevents romance! " ) ;
const u8 gText_PkmnPreventsPoisoningWith [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevents poisoning! " ) ;
const u8 gText_PkmnPreventsConfusionWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevents confusion! " ) ;
const u8 gText_PkmnRaisedFirePowerWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n raised its FIRE power! " ) ;
const u8 gText_PkmnAnchorsItselfWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} anchors \n itself with {B_DEF_ABILITY}! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnCutsAttackWith [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n cuts {B_DEF_NAME_WITH_PREFIX}’ s ATTACK! " ) ;
const u8 gText_PkmnPreventsStatLossWith [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n prevents stat loss! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnHurtsWith [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n hurt {B_ATK_NAME_WITH_PREFIX}! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnTraced [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED \n {B_BUFF1}’ s {B_BUFF2}! " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_PkmnsXPreventsBurns [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX}’ s {B_EFF_ABILITY} \n prevents burns! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnsXBlocksY [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n blocks {B_CURRENT_MOVE}! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnsXBlocksY2 [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n blocks {B_CURRENT_MOVE}! " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_PkmnsXRestoredHPALittle2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_ATK_ABILITY} \n restored its HP a little! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnsXWhippedUpSandstorm [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n whipped up a sandstorm! " ) ;
const u8 gText_PkmnsXIntensifiedSun [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n intensified the sun’ s rays! " ) ;
const u8 gText_PkmnsXPreventsYLoss [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n prevents {B_BUFF1} loss! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnsXInfatuatedY [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n infatuated {B_ATK_NAME_WITH_PREFIX}! " ) ;
const u8 gText_PkmnsXMadeYIneffective [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n made {B_CURRENT_MOVE} ineffective! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnsXCuredYProblem [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n cured its {B_BUFF1} problem! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_ItSuckedLiquidOoze [ ] = _ ( " It sucked up the \n LIQUID OOZE! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnTransformed [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnsXTookAttack [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n took the attack! " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_PkmnsXPreventsSwitching [ ] = _ ( " {B_BUFF1}’ s {B_LAST_ABILITY} \n prevents switching! \ p " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PreventedFromWorking [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_DEF_ABILITY} \n prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s \ l{B_BUFF1} from working! " ) ;
const u8 gText_PkmnsXMadeItIneffective [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n made it ineffective! " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_PkmnsXPreventsFlinching [ ] = _ ( " {B_EFF_NAME_WITH_PREFIX}’ s {B_EFF_ABILITY} \n prevents flinching! " ) ;
const u8 gText_PkmnsXPreventsYsZ [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_ATK_ABILITY} \n prevents {B_DEF_NAME_WITH_PREFIX}’ s \ l{B_DEF_ABILITY} from working! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnsXCuredItsYProblem [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n cured its {B_BUFF1} problem! " ) ;
const u8 gText_PkmnsXHadNoEffectOnY [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_SCR_ACTIVE_ABILITY} \n had no effect on {B_EFF_NAME_WITH_PREFIX}! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_StatSharply [ ] = _ ( " sharply " ) ;
const u8 gText_StatRose [ ] = _ ( " rose! " ) ;
const u8 gText_StatHarshly [ ] = _ ( " harshly " ) ;
const u8 gText_StatFell [ ] = _ ( " fell! " ) ;
const u8 gText_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} " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_UsingXTheYOfZN [ ] = _ ( " Using {B_LAST_ITEM}, the {B_BUFF1} \n of {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2} " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_PkmnsStatChanged3 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s {B_BUFF1} \n {B_BUFF2} " ) ;
const u8 gText_PkmnsStatChanged4 [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s {B_BUFF1} \n {B_BUFF2} " ) ;
const u8 gText_StatsWontIncrease2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX}’ s stats won’ t \n go any higher! " ) ;
const u8 gText_StatsWontDecrease2 [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX}’ s stats won’ t \n go any lower! " ) ;
const u8 gText_CriticalHit [ ] = _ ( " A critical hit! " ) ;
const u8 gText_OneHitKO [ ] = _ ( " It’ s a one-hit KO! " ) ;
const u8 gText_123Poof [ ] = _ ( " {PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof! \ p " ) ;
const u8 gText_AndEllipsis [ ] = _ ( " And… \ p " ) ;
const u8 gText_HMMovesCantBeForgotten [ ] = _ ( " HM moves can’ t be \n forgotten now. \ p " ) ;
const u8 gText_NotVeryEffective [ ] = _ ( " It’ s not very effective… " ) ;
const u8 gText_SuperEffective [ ] = _ ( " It’ s super effective! " ) ;
const u8 gText_GotAwaySafely [ ] = _ ( " {PLAY_SE 0x0011}Got away safely! \ p " ) ;
const u8 gText_PkmnFledUsingIts [ ] = _ ( " {PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled \n using its {B_LAST_ITEM}! \ p " ) ;
2017-10-08 13:54:51 +01:00
const u8 gText_PkmnFledUsing [ ] = _ ( " {PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled \n using {B_ATK_ABILITY}! \ p " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_WildPkmnFled [ ] = _ ( " {PLAY_SE 0x0011}Wild {B_BUFF1} fled! " ) ;
const u8 gText_PlayerDefeatedLinkTrainer [ ] = _ ( " Player defeated \n {B_20}! " ) ;
const u8 gText_TwoLinkTrainersDefeated [ ] = _ ( " Player beat {B_20} \n and {B_21}! " ) ;
const u8 gText_PlayerLostAgainstLinkTrainer [ ] = _ ( " Player lost against \n {B_20}! " ) ;
const u8 gText_PlayerLostToTwo [ ] = _ ( " Player lost to {B_20} \n and {B_21}! " ) ;
const u8 gText_PlayerBattledToDrawLinkTrainer [ ] = _ ( " Player battled to a draw against \n {B_20}! " ) ;
const u8 gText_PlayerBattledToDrawVsTwo [ ] = _ ( " Player battled to a draw against \n {B_20} and {B_21}! " ) ;
const u8 gText_WildFled [ ] = _ ( " {PLAY_SE 0x0011}{B_20} fled! " ) ;
const u8 gText_TwoWildFled [ ] = _ ( " {PLAY_SE 0x0011}{B_20} and \n {B_21} fled! " ) ;
const u8 gText_NoRunningFromTrainers [ ] = _ ( " No! There’ s no running \n from a TRAINER battle! \ p " ) ;
const u8 gText_CantEscape [ ] = _ ( " Can’ t escape! \ p " ) ;
const u8 gText_DontLeaveBirch [ ] = _ ( " PROF. BIRCH: Don’ t leave me like this! \ p " ) ;
const u8 gText_ButNothingHappened [ ] = _ ( " But nothing happened! " ) ;
const u8 gText_ButItFailed [ ] = _ ( " But it failed! " ) ;
const u8 gText_ItHurtConfusion [ ] = _ ( " It hurt itself in its \n confusion! " ) ;
const u8 gText_MirrorMoveFailed [ ] = _ ( " The MIRROR MOVE failed! " ) ;
const u8 gText_StartedToRain [ ] = _ ( " It started to rain! " ) ;
const u8 gText_DownpourStarted [ ] = _ ( " A downpour started! " ) ;
const u8 gText_RainContinues [ ] = _ ( " Rain continues to fall. " ) ;
const u8 gText_DownpourContinues [ ] = _ ( " The downpour continues. " ) ;
const u8 gText_RainStopped [ ] = _ ( " The rain stopped. " ) ;
const u8 gText_SandstormBrewed [ ] = _ ( " A sandstorm brewed! " ) ;
const u8 gText_SandstormRages [ ] = _ ( " The sandstorm rages. " ) ;
const u8 gText_SandstormSubsided [ ] = _ ( " The sandstorm subsided. " ) ;
const u8 gText_SunlightGotBright [ ] = _ ( " The sunlight got bright! " ) ;
const u8 gText_SunlightStrong [ ] = _ ( " The sunlight is strong. " ) ;
const u8 gText_SunlightFaded [ ] = _ ( " The sunlight faded. " ) ;
const u8 gText_StartedHail [ ] = _ ( " It started to hail! " ) ;
const u8 gText_HailContinues [ ] = _ ( " Hail continues to fall. " ) ;
const u8 gText_HailStopped [ ] = _ ( " The hail stopped. " ) ;
const u8 gText_FailedToSpitUp [ ] = _ ( " But it failed to SPIT UP \n a thing! " ) ;
const u8 gText_FailedToSwallow [ ] = _ ( " But it failed to SWALLOW \n a thing! " ) ;
const u8 gText_WindBecameHeatWave [ ] = _ ( " The wind turned into a \n HEAT WAVE! " ) ;
const u8 gText_StatChangesGone [ ] = _ ( " All stat changes were \n eliminated! " ) ;
const u8 gText_CoinsScattered [ ] = _ ( " Coins scattered everywhere! " ) ;
const u8 gText_TooWeakForSubstitute [ ] = _ ( " It was too weak to make \n a SUBSTITUTE! " ) ;
const u8 gText_SharedPain [ ] = _ ( " The battlers shared \n their pain! " ) ;
const u8 gText_BellChimed [ ] = _ ( " A bell chimed! " ) ;
const u8 gText_FaintInThree [ ] = _ ( " All affected POKéMON will \n faint in three turns! " ) ;
const u8 gText_NoPPLeft [ ] = _ ( " There’ s no PP left for \n this move! \ p " ) ;
const u8 gText_ButNoPPLeft [ ] = _ ( " But there was no PP left \n for the move! " ) ;
const u8 gText_PkmnIgnoresAsleep [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} ignored \n orders while asleep! " ) ;
const u8 gText_PkmnIgnoredOrders [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} ignored \n orders! " ) ;
const u8 gText_PkmnBeganToNap [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} began to nap! " ) ;
const u8 gText_PkmnLoafing [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} is \n loafing around! " ) ;
const u8 gText_PkmnWontObey [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} won’ t \n obey! " ) ;
const u8 gText_PkmnTurnedAway [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} turned away! " ) ;
const u8 gText_PkmnPretendNotNotice [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} pretended \n not to notice! " ) ;
const u8 gText_EnemyAboutToSwitchPkmn [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} is \n about to use {B_BUFF2}. \ pWill {B_PLAYER_NAME} change \n POKéMON? " ) ;
const u8 gText_PkmnLearnedMove2 [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} learned \n {B_BUFF1}! " ) ;
const u8 gText_PlayerDefeatedLinkTrainerTrainer1 [ ] = _ ( " Player defeated \n {B_TRAINER1_CLASS} {B_TRAINER1_NAME}! \ p " ) ;
const u8 gText_CreptCloser [ ] = _ ( " {B_PLAYER_NAME} crept closer to \n {B_OPPONENT_MON1_NAME}! " ) ;
const u8 gText_CantGetCloser [ ] = _ ( " {B_PLAYER_NAME} can’ t get any closer! " ) ;
const u8 gText_PkmnWatchingCarefully [ ] = _ ( " {B_OPPONENT_MON1_NAME} is watching \n carefully! " ) ;
const u8 gText_PkmnCuriousAboutX [ ] = _ ( " {B_OPPONENT_MON1_NAME} is curious about \n the {B_BUFF1}! " ) ;
const u8 gText_PkmnEnthralledByX [ ] = _ ( " {B_OPPONENT_MON1_NAME} is enthralled by \n the {B_BUFF1}! " ) ;
const u8 gText_PkmnIgnoredX [ ] = _ ( " {B_OPPONENT_MON1_NAME} completely ignored \n the {B_BUFF1}! " ) ;
const u8 gText_ThrewPokeblockAtPkmn [ ] = _ ( " {B_PLAYER_NAME} threw a {POKEBLOCK} \n at the {B_OPPONENT_MON1_NAME}! " ) ;
const u8 gText_OutOfSafariBalls [ ] = _ ( " {PLAY_SE 0x0049}ANNOUNCER: You’ re out of \n SAFARI BALLS! Game over! \ p " ) ;
const u8 gText_OpponentMon1Appeared [ ] = _ ( " {B_OPPONENT_MON1_NAME} appeared! \ p " ) ;
const u8 gText_WildPkmnAppeared [ ] = _ ( " Wild {B_OPPONENT_MON1_NAME} appeared! \ p " ) ;
const u8 gText_WildPkmnAppeared2 [ ] = _ ( " Wild {B_OPPONENT_MON1_NAME} appeared! \ p " ) ;
const u8 gText_WildPkmnAppearedPause [ ] = _ ( " Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127} " ) ;
const u8 gText_TwoWildPkmnAppeared [ ] = _ ( " Wild {B_OPPONENT_MON1_NAME} and \n {B_OPPONENT_MON2_NAME} appeared! \ p " ) ;
const u8 gText_Trainer1WantsToBattle [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} \n would like to battle! \ p " ) ;
const u8 gText_LinkTrainerWantsToBattle [ ] = _ ( " {B_20} \n wants to battle! " ) ;
const u8 gText_TwoLinkTrainersWantToBattle [ ] = _ ( " {B_20} and {B_21} \n want to battle! " ) ;
const u8 gText_Trainer1SentOutPkmn [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent \n out {B_OPPONENT_MON1_NAME}! " ) ;
const u8 gText_Trainer1SentOutTwoPkmn [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent \n out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}! " ) ;
const u8 gText_Trainer1SentOutPkmn2 [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent \n out {B_BUFF1}! " ) ;
const u8 gText_LinkTrainerSentOutPkmn [ ] = _ ( " {B_20} sent out \n {B_OPPONENT_MON1_NAME}! " ) ;
const u8 gText_LinkTrainerSentOutTwoPkmn [ ] = _ ( " {B_20} sent out \n {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}! " ) ;
const u8 gText_TwoLinkTrainersSentOutPkmn [ ] = _ ( " {B_20} sent out {B_LINK_OPPONENT_MON1_NAME}! \n {B_21} sent out {B_LINK_OPPONENT_MON2_NAME}! " ) ;
const u8 gText_LinkTrainerSentOutPkmn2 [ ] = _ ( " {B_20} sent out \n {B_BUFF1}! " ) ;
const u8 gText_LinkTrainerMultiSentOutPkmn [ ] = _ ( " {B_22} sent out \n {B_BUFF1}! " ) ;
const u8 gText_GoPkmn [ ] = _ ( " Go! {B_PLAYER_MON1_NAME}! " ) ;
const u8 gText_GoTwoPkmn [ ] = _ ( " Go! {B_PLAYER_MON1_NAME} and \n {B_PLAYER_MON2_NAME}! " ) ;
const u8 gText_GoPkmn2 [ ] = _ ( " Go! {B_BUFF1}! " ) ;
const u8 gText_DoItPkmn [ ] = _ ( " Do it! {B_BUFF1}! " ) ;
const u8 gText_GoForItPkmn [ ] = _ ( " Go for it, {B_BUFF1}! " ) ;
const u8 gText_YourFoesWeakGetEmPkmn [ ] = _ ( " Your foe’ s weak! \n Get ’ em, {B_BUFF1}! " ) ;
const u8 gText_LinkPartnerSentOutPkmnGoPkmn [ ] = _ ( " {B_1F} sent out {B_LINK_PLAYER_MON2_NAME}! \n Go! {B_LINK_PLAYER_MON1_NAME}! " ) ;
const u8 gText_PkmnThatsEnough [ ] = _ ( " {B_BUFF1}, that’ s enough! \n Come back! " ) ;
const u8 gText_PkmnComeBack [ ] = _ ( " {B_BUFF1}, come back! " ) ;
const u8 gText_PkmnOkComeBack [ ] = _ ( " {B_BUFF1}, OK! \n Come back! " ) ;
const u8 gText_PkmnGoodComeBack [ ] = _ ( " {B_BUFF1}, good! \n Come back! " ) ;
const u8 gText_Trainer1WithdrewPkmn [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} \n withdrew {B_BUFF1}! " ) ;
const u8 gText_LinkTrainer1WithdrewPkmn [ ] = _ ( " {B_20} withdrew \n {B_BUFF1}! " ) ;
const u8 gText_LinkTrainer2WithdrewPkmn [ ] = _ ( " {B_22} withdrew \n {B_BUFF1}! " ) ;
const u8 gText_WildPkmnPrefix [ ] = _ ( " Wild " ) ;
const u8 gText_FoePkmnPrefix [ ] = _ ( " Foe " ) ;
const u8 gText_EmptyString8 [ ] = _ ( " " ) ;
const u8 gText_FoePkmnPrefix2 [ ] = _ ( " Foe " ) ;
const u8 gText_AllyPkmnPrefix [ ] = _ ( " Ally " ) ;
const u8 gText_FoePkmnPrefix3 [ ] = _ ( " Foe " ) ;
const u8 gText_AllyPkmnPrefix2 [ ] = _ ( " Ally " ) ;
const u8 gText_FoePkmnPrefix4 [ ] = _ ( " Foe " ) ;
const u8 gText_AllyPkmnPrefix3 [ ] = _ ( " Ally " ) ;
const u8 gText_AttackerUsedX [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} used \n {B_BUFF2} " ) ;
const u8 gText_ExclamationMark [ ] = _ ( " ! " ) ;
const u8 gText_ExclamationMark2 [ ] = _ ( " ! " ) ;
const u8 gText_ExclamationMark3 [ ] = _ ( " ! " ) ;
const u8 gText_ExclamationMark4 [ ] = _ ( " ! " ) ;
const u8 gText_ExclamationMark5 [ ] = _ ( " ! " ) ;
const u8 gText_HP2 [ ] = _ ( " HP " ) ;
const u8 gText_Attack2 [ ] = _ ( " ATTACK " ) ;
const u8 gText_Defense2 [ ] = _ ( " DEFENSE " ) ;
const u8 gText_Speed [ ] = _ ( " SPEED " ) ;
const u8 gText_SpAtk2 [ ] = _ ( " SP. ATK " ) ;
const u8 gText_SpDef2 [ ] = _ ( " SP. DEF " ) ;
const u8 gText_Accuracy [ ] = _ ( " accuracy " ) ;
const u8 gText_Evasiveness [ ] = _ ( " evasiveness " ) ;
const u8 * const gStatNamesTable [ ] =
{
gText_HP2 , gText_Attack2 , gText_Defense2 ,
gText_Speed , gText_SpAtk2 , gText_SpDef2 ,
gText_Accuracy , gText_Evasiveness
} ;
const u8 gText_PokeblockWasTooSpicy [ ] = _ ( " was too spicy! " ) ;
const u8 gText_PokeblockWasTooDry [ ] = _ ( " was too dry! " ) ;
const u8 gText_PokeblockWasTooSweet [ ] = _ ( " was too sweet! " ) ;
const u8 gText_PokeblockWasTooBitter [ ] = _ ( " was too bitter! " ) ;
const u8 gText_PokeblockWasTooSour [ ] = _ ( " was too sour! " ) ;
const u8 * const gPokeblockWasTooXStringTable [ ] =
{
gText_PokeblockWasTooSpicy , gText_PokeblockWasTooDry ,
gText_PokeblockWasTooSweet , gText_PokeblockWasTooBitter ,
gText_PokeblockWasTooSour
} ;
const u8 gText_PlayerUsedItem [ ] = _ ( " {B_PLAYER_NAME} used \n {B_LAST_ITEM}! " ) ;
const u8 gText_WallyUsedItem [ ] = _ ( " WALLY used \n {B_LAST_ITEM}! " ) ;
const u8 gText_Trainer1UsedItem [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} \n used {B_LAST_ITEM}! " ) ;
const u8 gText_TrainerBlockedBall [ ] = _ ( " The TRAINER blocked the BALL! " ) ;
const u8 gText_DontBeAThief [ ] = _ ( " Don’ t be a thief! " ) ;
const u8 gText_ItDodgedBall [ ] = _ ( " It dodged the thrown BALL! \n This POKéMON can’ t be caught! " ) ;
const u8 gText_YouMissedPkmn [ ] = _ ( " You missed the POKéMON! " ) ;
const u8 gText_PkmnBrokeFree [ ] = _ ( " Oh, no! \n The POKéMON broke free! " ) ;
const u8 gText_ItAppearedCaught [ ] = _ ( " Aww! \n It appeared to be caught! " ) ;
const u8 gText_AarghAlmostHadIt [ ] = _ ( " Aargh! \n Almost had it! " ) ;
const u8 gText_ShootSoClose [ ] = _ ( " Shoot! \n It was so close, too! " ) ;
2017-12-22 07:46:19 +00:00
const u8 gText_GotchaPkmnCaught [ ] = _ ( " Gotcha! \n {B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22} \ p " ) ;
const u8 gText_GotchaPkmnCaught2 [ ] = _ ( " Gotcha! \n {B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127} " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_GiveNicknameCaptured [ ] = _ ( " Give a nickname to the \n captured {B_OPPONENT_MON1_NAME}? " ) ;
const u8 gText_PkmnSentToPC [ ] = _ ( " {B_OPPONENT_MON1_NAME} was sent to \n {B_PC_CREATOR_NAME} PC. " ) ;
const u8 gText_Someones [ ] = _ ( " someone’ s " ) ;
const u8 gText_Lanettes [ ] = _ ( " LANETTE’ s " ) ;
const u8 gText_PkmnDataAddedToDex [ ] = _ ( " {B_OPPONENT_MON1_NAME}’ s data was \n added to the POKéDEX. \ p " ) ;
const u8 gText_ItIsRaining [ ] = _ ( " It is raining. " ) ;
const u8 gText_SandstormIsRaging [ ] = _ ( " A sandstorm is raging. " ) ;
const u8 gText_BoxIsFull [ ] = _ ( " The BOX is full! \n You can’ t catch any more! \ p " ) ;
const u8 gText_EnigmaBerry [ ] = _ ( " ENIGMA BERRY " ) ;
const u8 gText_BerrySuffix [ ] = _ ( " BERRY " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_PkmnsItemCuredParalysis [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n cured paralysis! " ) ;
const u8 gText_PkmnsItemCuredPoison [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n cured poison! " ) ;
const u8 gText_PkmnsItemHealedBurn [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n healed its burn! " ) ;
const u8 gText_PkmnsItemDefrostedIt [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n defrosted it! " ) ;
const u8 gText_PkmnsItemWokeIt [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n woke it from its sleep! " ) ;
const u8 gText_PkmnsItemSnappedOut [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n snapped it out of confusion! " ) ;
const u8 gText_PkmnsItemCuredProblem [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n cured its {B_BUFF1} problem! " ) ;
const u8 gText_PkmnsItemNormalizedStatus [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n normalized its status! " ) ;
const u8 gText_PkmnsItemRestoredHealth [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n restored health! " ) ;
const u8 gText_PkmnsItemRestoredPP [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n restored {B_BUFF1}’ s PP! " ) ;
const u8 gText_PkmnsItemRestoredStatus [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n restored its status! " ) ;
const u8 gText_PkmnsItemRestoredHPALittle [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s {B_LAST_ITEM} \n restored its HP a little! " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_ItemAllowsOnlyYMove [ ] = _ ( " {B_LAST_ITEM} allows the \n use of only {B_CURRENT_MOVE}! \ p " ) ;
const u8 gText_PkmnHungOnWithX [ ] = _ ( " {B_DEF_NAME_WITH_PREFIX} hung on \n using its {B_LAST_ITEM}! " ) ;
const u8 gText_EmptyString3 [ ] = _ ( " " ) ;
const u8 gText_YouThrowABallNowRight [ ] = _ ( " You throw a BALL now, right? \n I… I’ ll do my best! " ) ;
// early declaration of strings
const u8 gText_PkmnIncapableOfPower [ ] ;
const u8 gText_GlintAppearsInEye [ ] ;
const u8 gText_PkmnGettingIntoPosition [ ] ;
const u8 gText_PkmnBeganGrowlingDeeply [ ] ;
const u8 gText_PkmnEagerForMore [ ] ;
const u8 gText_DefeatedOpponentByReferee [ ] ;
const u8 gText_LostToOpponentByReferee [ ] ;
const u8 gText_TiedOpponentByReferee [ ] ;
const u8 gText_QuestionForfeitMatch [ ] ;
const u8 gText_ForfeitedMatch [ ] ;
const u8 gText_Trainer1WinText [ ] ;
const u8 gText_Trainer2WinText [ ] ;
const u8 gText_TwoInGameTrainersDefeated [ ] ;
const u8 gText_Trainer2LoseText [ ] ;
const u8 * const gBattleStringsTable [ BATTLESTRINGS_COUNT ] =
{
2018-02-20 01:01:51 +00:00
gText_Trainer1LoseText , // 12
gText_PkmnGainedEXP , // 13
gText_PkmnGrewToLv , // 14
gText_PkmnLearnedMove , // 15
gText_TryToLearnMove1 , // 16
gText_TryToLearnMove2 , // 17
gText_TryToLearnMove3 , // 18
gText_PkmnForgotMove , // 19
gText_StopLearningMove , // 20
gText_DidNotLearnMove , // 21
gText_PkmnLearnedMove2 , // 22
gText_AttackMissed , // 23
gText_PkmnProtectedItself , // 24
gText_StatsWontIncrease2 , // 25
gText_AvoidedDamage , // 26
gText_ItDoesntAffect , // 27
gText_AttackerFainted , // 28
gText_TargetFainted , // 29
gText_PlayerGotMoney , // 30
gText_PlayerWhiteout , // 31
gText_PlayerWhiteout2 , // 32
gText_PreventsEscape , // 33
gText_HitXTimes , // 34
gText_PkmnFellAsleep , // 35
gText_PkmnMadeSleep , // 36
gText_PkmnAlreadyAsleep , // 37
gText_PkmnAlreadyAsleep2 , // 38
gText_PkmnWasntAffected , // 39
gText_PkmnWasPoisoned , // 40
gText_PkmnPoisonedBy , // 41
gText_PkmnHurtByPoison , // 42
gText_PkmnAlreadyPoisoned , // 43
gText_PkmnBadlyPoisoned , // 44
gText_PkmnEnergyDrained , // 45
gText_PkmnWasBurned , // 46
gText_PkmnBurnedBy , // 47
gText_PkmnHurtByBurn , // 48
gText_PkmnWasFrozen , // 49
gText_PkmnFrozenBy , // 50
gText_PkmnIsFrozen , // 51
gText_PkmnWasDefrosted , // 52
gText_PkmnWasDefrosted2 , // 53
gText_PkmnWasDefrostedBy , // 54
gText_PkmnWasParalyzed , // 55
gText_PkmnWasParalyzedBy , // 56
gText_PkmnIsParalyzed , // 57
gText_PkmnIsAlreadyParalyzed , // 58
gText_PkmnHealedParalysis , // 59
gText_PkmnDreamEaten , // 60
gText_StatsWontIncrease , // 61
gText_StatsWontDecrease , // 62
gText_TeamStoppedWorking , // 63
gText_FoeStoppedWorking , // 64
gText_PkmnIsConfused , // 65
gText_PkmnHealedConfusion , // 66
gText_PkmnWasConfused , // 67
gText_PkmnAlreadyConfused , // 68
gText_PkmnFellInLove , // 69
gText_PkmnInLove , // 70
gText_PkmnImmobilizedByLove , // 71
gText_PkmnBlownAway , // 72
gText_PkmnChangedType , // 73
gText_PkmnFlinched , // 74
gText_PkmnRegainedHealth , // 75
gText_PkmnHPFull , // 76
gText_PkmnRaisedSpDef , // 77
gText_PkmnRaisedDef , // 78
gText_PkmnCoveredByVeil , // 79
gText_PkmnUsedSafeguard , // 80
gText_PkmnSafeguardExpired , // 81
gText_PkmnWentToSleep , // 82
gText_PkmnSleptHealthy , // 83
gText_PkmnWhippedWhirlwind , // 84
gText_PkmnTookSunlight , // 85
gText_PkmnLoweredHead , // 86
gText_PkmnIsGlowing , // 87
gText_PkmnFlewHigh , // 88
gText_PkmnDugHole , // 89
gText_PkmnSqueezedByBind , // 90
gText_PkmnTrappedInVortex , // 91
gText_PkmnWrappedBy , // 92
gText_PkmnClamped , // 93
gText_PkmnHurtBy , // 94
gText_PkmnFreedFrom , // 95
gText_PkmnCrashed , // 96
gText_PkmnShroudedInMist , // 97
gText_PkmnProtectedByMist , // 98
gText_PkmnGettingPumped , // 99
gText_PkmnHitWithRecoil , // 100
gText_PkmnProtectedItself2 , // 101
gText_PkmnBuffetedBySandstorm , // 102
gText_PkmnPeltedByHail , // 103
gText_PkmnSeeded , // 104
gText_PkmnEvadedAttack , // 105
gText_PkmnSappedByLeechSeed , // 106
gText_PkmnFastAsleep , // 107
gText_PkmnWokeUp , // 108
gText_PkmnUproarKeptAwake , // 109
gText_PkmnWokeUpInUproar , // 110
gText_PkmnCausedUproar , // 111
gText_PkmnMakingUproar , // 112
gText_PkmnCalmedDown , // 113
gText_PkmnCantSleepInUproar , // 114
gText_PkmnStockpiled , // 115
gText_PkmnCantStockpile , // 116
gText_PkmnCantSleepInUproar2 , // 117
gText_UproarKeptPkmnAwake , // 118
gText_PkmnStayedAwakeUsing , // 119
gText_PkmnStoringEnergy , // 120
gText_PkmnUnleashedEnergy , // 121
gText_PkmnFatigueConfusion , // 122
gText_PkmnPickedUpItem , // 123
gText_PkmnUnaffected , // 124
gText_PkmnTransformedInto , // 125
gText_PkmnMadeSubstitute , // 126
gText_PkmnHasSubstitute , // 127
gText_SubstituteDamaged , // 128
gText_PkmnSubstituteFaded , // 129
gText_PkmnMustRecharge , // 130
gText_PkmnRageBuilding , // 131
gText_PkmnMoveWasDisabled , // 132
gText_PkmnMoveIsDisabled , // 133
gText_PkmnMoveDisabledNoMore , // 134
gText_PkmnGotEncore , // 135
gText_PkmnEncoreEnded , // 136
gText_PkmnTookAim , // 137
gText_PkmnSketchedMove , // 138
gText_PkmnTryingToTakeFoe , // 139
gText_PkmnTookFoe , // 140
gText_PkmnReducedPP , // 141
gText_PkmnStoleItem , // 142
gText_TargetCantEscapeNow , // 143
gText_PkmnFellIntoNightmare , // 144
gText_PkmnLockedInNightmare , // 145
gText_PkmnLaidCurse , // 146
gText_PkmnAfflictedByCurse , // 147
gText_SpikesScattered , // 148
gText_PkmnHurtBySpikes , // 149
gText_PkmnIdentified , // 150
gText_PkmnPerishCountFell , // 151
gText_PkmnBracedItself , // 152
gText_PkmnEnduredHit , // 153
gText_MagnitudeStrength , // 154
gText_PkmnCutHPMaxedAttack , // 155
gText_PkmnCopiedStatChanges , // 156
gText_PkmnGotFree , // 157
gText_PkmnShedLeechSeed , // 158
gText_PkmnBlewAwaySpikes , // 159
gText_PkmnFledFromBattle , // 160
gText_PkmnForesawAttack , // 161
gText_PkmnTookAttack , // 162
gText_PkmnAttack , // 163
gText_PkmnCenterAttention , // 164
gText_PkmnChargingPower , // 165
gText_NaturePowerTurnedInto , // 166
gText_PkmnStatusNormal , // 167
gText_PkmnHasNoMovesLeft , // 168
gText_PkmnSubjectedToTorment , // 169
gText_PkmnCantUseMoveTorment , // 170
gText_PkmnTighteningFocus , // 171
gText_PkmnFellForTaunt , // 172
gText_PkmnCantUseMoveTaunt , // 173
gText_PkmnReadyToHelp , // 174
gText_PkmnSwitchedItems , // 175
gText_PkmnCopiedFoe , // 176
gText_PkmnMadeWish , // 177
gText_PkmnWishCameTrue , // 178
gText_PkmnPlantedRoots , // 179
gText_PkmnAbsorbedNutrients , // 180
gText_PkmnAnchoredItself , // 181
gText_PkmnWasMadeDrowsy , // 182
gText_PkmnKnockedOff , // 183
gText_PkmnSwappedAbilities , // 184
gText_PkmnSealedOpponentMove , // 185
gText_PkmnCantUseMoveSealed , // 186
gText_PkmnWantsGrudge , // 187
gText_PkmnLostPPGrudge , // 188
gText_PkmnShroudedItself , // 189
gText_PkmnMoveBounced , // 190
gText_PkmnWaitsForTarget , // 191
gText_PkmnSnatchedMove , // 192
gText_PkmnMadeItRain , // 193
gText_PkmnRaisedSpeed , // 194
gText_PkmnProtectedBy , // 195
gText_PkmnPreventsUsage , // 196
gText_PkmnRestoredHPUsing , // 197
gText_PkmnChangedTypeWith , // 198
gText_PkmnPreventsParalysisWith , // 199
gText_PkmnPreventsRomanceWith , // 200
gText_PkmnPreventsPoisoningWith , // 201
gText_PkmnPreventsConfusionWith , // 202
gText_PkmnRaisedFirePowerWith , // 203
gText_PkmnAnchorsItselfWith , // 204
gText_PkmnCutsAttackWith , // 205
gText_PkmnPreventsStatLossWith , // 206
gText_PkmnHurtsWith , // 207
gText_PkmnTraced , // 208
gText_StatSharply , // 209
gText_StatRose , // 210
gText_StatHarshly , // 211
gText_StatFell , // 212
gText_PkmnsStatChanged , // 213
gText_PkmnsStatChanged2 , // 214
gText_PkmnsStatChanged3 , // 215
gText_PkmnsStatChanged4 , // 216
gText_CriticalHit , // 217
gText_OneHitKO , // 218
gText_123Poof , // 219
gText_AndEllipsis , // 220
gText_NotVeryEffective , // 221
gText_SuperEffective , // 222
gText_GotAwaySafely , // 223
gText_WildPkmnFled , // 224
gText_NoRunningFromTrainers , // 225
gText_CantEscape , // 226
gText_DontLeaveBirch , // 227
gText_ButNothingHappened , // 228
gText_ButItFailed , // 229
gText_ItHurtConfusion , // 230
gText_MirrorMoveFailed , // 231
gText_StartedToRain , // 232
gText_DownpourStarted , // 233
gText_RainContinues , // 234
gText_DownpourContinues , // 235
gText_RainStopped , // 236
gText_SandstormBrewed , // 237
gText_SandstormRages , // 238
gText_SandstormSubsided , // 239
gText_SunlightGotBright , // 240
gText_SunlightStrong , // 241
gText_SunlightFaded , // 242
gText_StartedHail , // 243
gText_HailContinues , // 244
gText_HailStopped , // 245
gText_FailedToSpitUp , // 246
gText_FailedToSwallow , // 247
gText_WindBecameHeatWave , // 248
gText_StatChangesGone , // 249
gText_CoinsScattered , // 250
gText_TooWeakForSubstitute , // 251
gText_SharedPain , // 252
gText_BellChimed , // 253
gText_FaintInThree , // 254
gText_NoPPLeft , // 255
gText_ButNoPPLeft , // 256
gText_PlayerUsedItem , // 257
gText_WallyUsedItem , // 258
gText_TrainerBlockedBall , // 259
gText_DontBeAThief , // 260
gText_ItDodgedBall , // 261
gText_YouMissedPkmn , // 262
gText_PkmnBrokeFree , // 263
gText_ItAppearedCaught , // 264
gText_AarghAlmostHadIt , // 265
gText_ShootSoClose , // 266
gText_GotchaPkmnCaught , // 267
gText_GotchaPkmnCaught2 , // 268
gText_GiveNicknameCaptured , // 269
gText_PkmnSentToPC , // 270
gText_PkmnDataAddedToDex , // 271
gText_ItIsRaining , // 272
gText_SandstormIsRaging , // 273
gText_CantEscape2 , // 274
gText_PkmnIgnoresAsleep , // 275
gText_PkmnIgnoredOrders , // 276
gText_PkmnBeganToNap , // 277
gText_PkmnLoafing , // 278
gText_PkmnWontObey , // 279
gText_PkmnTurnedAway , // 280
gText_PkmnPretendNotNotice , // 281
gText_EnemyAboutToSwitchPkmn , // 282
gText_CreptCloser , // 283
gText_CantGetCloser , // 284
gText_PkmnWatchingCarefully , // 285
gText_PkmnCuriousAboutX , // 286
gText_PkmnEnthralledByX , // 287
gText_PkmnIgnoredX , // 288
gText_ThrewPokeblockAtPkmn , // 289
gText_OutOfSafariBalls , // 290
gText_PkmnsItemCuredParalysis , // 291
gText_PkmnsItemCuredPoison , // 292
gText_PkmnsItemHealedBurn , // 293
gText_PkmnsItemDefrostedIt , // 294
gText_PkmnsItemWokeIt , // 295
gText_PkmnsItemSnappedOut , // 296
gText_PkmnsItemCuredProblem , // 297
gText_PkmnsItemRestoredHealth , // 298
gText_PkmnsItemRestoredPP , // 299
gText_PkmnsItemRestoredStatus , // 300
gText_PkmnsItemRestoredHPALittle , // 301
gText_ItemAllowsOnlyYMove , // 302
gText_PkmnHungOnWithX , // 303
gText_EmptyString3 , // 304
gText_PkmnsXPreventsBurns , // 305
gText_PkmnsXBlocksY , // 306
gText_PkmnsXRestoredHPALittle2 , // 307
gText_PkmnsXWhippedUpSandstorm , // 308
gText_PkmnsXPreventsYLoss , // 309
gText_PkmnsXInfatuatedY , // 310
gText_PkmnsXMadeYIneffective , // 311
gText_PkmnsXCuredYProblem , // 312
gText_ItSuckedLiquidOoze , // 313
gText_PkmnTransformed , // 314
gText_ElectricityWeakened , // 315
gText_FireWeakened , // 316
gText_PkmnHidUnderwater , // 317
gText_PkmnSprangUp , // 318
gText_HMMovesCantBeForgotten , // 319
gText_XFoundOneY , // 320
gText_PlayerDefeatedLinkTrainerTrainer1 , // 321
gText_SoothingAroma , // 322
gText_ItemsCantBeUsedNow , // 323
gText_ForXCommaYZ , // 324
gText_UsingXTheYOfZN , // 325
gText_PkmnUsedXToGetPumped , // 326
gText_PkmnsXMadeYUseless , // 327
gText_PkmnTrappedBySandTomb , // 328
gText_EmptyString4 , // 329
gText_ABoosted , // 330
gText_PkmnsXIntensifiedSun , // 331
gText_PkmnMakesGroundMiss , // 332
gText_YouThrowABallNowRight , // 333
gText_PkmnsXTookAttack , // 334
gText_PkmnChoseXAsDestiny , // 335
gText_PkmnLostFocus , // 336
gText_UseNextPkmn , // 337
gText_PkmnFledUsingIts , // 338
gText_PkmnFledUsing , // 339
gText_PkmnWasDraggedOut , // 340
gText_PreventedFromWorking , // 341
gText_PkmnsItemNormalizedStatus , // 342
gText_Trainer1UsedItem , // 343
gText_BoxIsFull , // 344
gText_PkmnAvoidedAttack , // 345
gText_PkmnsXMadeItIneffective , // 346
gText_PkmnsXPreventsFlinching , // 347
gText_PkmnAlreadyHasBurn , // 348
gText_StatsWontDecrease2 , // 349
gText_PkmnsXBlocksY2 , // 350
gText_PkmnsXWoreOff , // 351
gText_PkmnRaisedDefALittle , // 352
gText_PkmnRaisedSpDefALittle , // 353
gText_TheWallShattered , // 354
gText_PkmnsXPreventsYsZ , // 355
gText_PkmnsXCuredItsYProblem , // 356
gText_AttackerCantEscape , // 357
gText_PkmnObtainedX , // 358
gText_PkmnObtainedX2 , // 359
gText_PkmnObtainedXYObtainedZ , // 360
gText_ButNoEffect , // 361
gText_PkmnsXHadNoEffectOnY , // 362
gText_TwoInGameTrainersDefeated , // 363
gText_Trainer2LoseText , // 364
gText_PkmnIncapableOfPower , // 365
gText_GlintAppearsInEye , // 366
gText_PkmnGettingIntoPosition , // 367
gText_PkmnBeganGrowlingDeeply , // 368
gText_PkmnEagerForMore , // 369
gText_DefeatedOpponentByReferee , // 370
gText_LostToOpponentByReferee , // 371
gText_TiedOpponentByReferee , // 372
gText_QuestionForfeitMatch , // 373
gText_ForfeitedMatch , // 374
gText_PkmnTransferredSomeonesPC , // 375
gText_PkmnTransferredLanettesPC , // 376
gText_PkmnBoxSomeonesPCFull , // 377
gText_PkmnBoxLanettesPCFull , // 378
gText_Trainer1WinText , // 379
gText_Trainer2WinText , // 380
2017-10-07 14:15:47 +01:00
} ;
const u16 gMissStringIds [ ] =
{
STRINGID_ATTACKMISSED , STRINGID_PKMNPROTECTEDITSELF ,
STRINGID_PKMNAVOIDEDATTACK , STRINGID_AVOIDEDDAMAGE ,
STRINGID_PKMNMAKESGROUNDMISS
} ;
2017-10-08 13:54:51 +01:00
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
} ;
2017-11-25 23:33:40 +00:00
const u16 gSandStormHailEndStringIds [ ] =
2017-10-07 14:15:47 +01:00
{
2017-11-25 23:33:40 +00:00
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 ,
2017-10-08 13:54:51 +01:00
STRINGID_ITDOESNTAFFECT , STRINGID_PKMNSAPPEDBYLEECHSEED , STRINGID_ITSUCKEDLIQUIDOOZE ,
2017-11-25 23:33:40 +00:00
} ;
const u16 gRestUsedStringIds [ ] =
{
STRINGID_PKMNWENTTOSLEEP , STRINGID_PKMNSLEPTHEALTHY
} ;
2017-11-26 16:26:11 +00:00
const u16 gUproarOverTurnStringIds [ ] =
2017-11-25 23:33:40 +00:00
{
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 [ ] =
{
2017-10-08 13:54:51 +01:00
STRINGID_ITISRAINING , STRINGID_ITISRAINING , STRINGID_ITISRAINING ,
STRINGID_ITISRAINING , STRINGID_ITISRAINING , STRINGID_ITISRAINING ,
2017-11-25 23:33:40 +00:00
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 [ ] =
{
2017-10-08 13:54:51 +01:00
STRINGID_PKMNSITEMSNAPPEDOUT , STRINGID_PKMNSITEMCUREDPARALYSIS , STRINGID_PKMNSITEMDEFROSTEDIT ,
2017-11-25 23:33:40 +00:00
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 ,
2017-10-07 14:15:47 +01:00
} ;
const u16 gTrappingMoves [ ] =
{
MOVE_BIND , MOVE_WRAP , MOVE_FIRE_SPIN , MOVE_CLAMP , MOVE_WHIRLPOOL , MOVE_SAND_TOMB , 0xFFFF
} ;
const u8 gText_PkmnIsEvolving [ ] = _ ( " What? \n {STR_VAR_1} is evolving! " ) ;
const u8 gText_CongratsPkmnEvolved [ ] = _ ( " Congratulations! Your {STR_VAR_1} \n evolved into {STR_VAR_2}!{UNKNOWN_A} \ p " ) ;
const u8 gText_PkmnStoppedEvolving [ ] = _ ( " Huh? {STR_VAR_1} \n stopped evolving! \ p " ) ;
const u8 gText_EllipsisQuestionMark [ ] = _ ( " ……? \ p " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_WhatWillPkmnDo [ ] = _ ( " What will \n {B_ACTIVE_NAME_WITH_PREFIX} do? " ) ;
2017-10-07 14:15:47 +01:00
const u8 gText_WhatWillPkmnDo2 [ ] = _ ( " What will \n {B_PLAYER_NAME} do? " ) ;
const u8 gText_WhatWillWallyDo [ ] = _ ( " What will \n WALLY do? " ) ;
const u8 gText_LinkStandby [ ] = _ ( " {PAUSE 16}Link standby… " ) ;
const u8 gText_BattleMenu [ ] = _ ( " FIGHT{CLEAR_TO 56}BAG \n POKéMON{CLEAR_TO 56}RUN " ) ;
const u8 gText_SafariZoneMenu [ ] = _ ( " BALL{CLEAR_TO 56}{POKEBLOCK} \n GO 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 \n TYPE/ " ) ;
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 \n be forgotten? " ) ;
const u8 gText_BattleYesNoChoice [ ] = _ ( " {PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Yes \n No " ) ;
const u8 gText_BattleSwitchWhich [ ] = _ ( " {PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Switch \n which? " ) ;
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 gText_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 [ ] =
{
gText_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 " ) ;
const u8 gText_SpaceIs [ ] = _ ( " is " ) ;
const u8 gText_ApostropheS [ ] = _ ( " ’ s" ) ;
const u8 gText_UnknownMoveTypes [ ] [ 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 " ) ;
const u8 gText_Round1 [ ] = _ ( " Round 1 " ) ;
const u8 gText_Round2 [ ] = _ ( " Round 2 " ) ;
const u8 gText_Semifinal [ ] = _ ( " Semifinal " ) ;
const u8 gText_Final [ ] = _ ( " Final " ) ;
const u8 * const gRoundsStringTable [ ] =
{
gText_Round1 ,
gText_Round2 ,
gText_Semifinal ,
gText_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} " ) ;
const u8 gText_TwoTrainersSentPkmn [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent \n out {B_OPPONENT_MON1_NAME}! \ p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent \n out {B_OPPONENT_MON2_NAME}! " ) ;
const u8 gText_Trainer2SentOutPkmn [ ] = _ ( " {B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent \n out {B_BUFF1}! " ) ;
const u8 gText_TwoTrainersWantToBattle [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and \n {B_TRAINER2_CLASS} {B_TRAINER2_NAME} \ lwant to battle! \ p " ) ;
const u8 gText_InGamePartnerSentOutZGoN [ ] = _ ( " {B_PARTNER_CLASS} {B_PARTNER_NAME} sent \n out {B_PLAYER_MON2_NAME}! \ lGo, {B_PLAYER_MON1_NAME}! " ) ;
const u8 gText_TwoInGameTrainersDefeated [ ] = _ ( " {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and \n {B_TRAINER2_CLASS} {B_TRAINER2_NAME} \ lwere defeated! \ p " ) ;
const u8 gText_Trainer2LoseText [ ] = _ ( " {B_TRAINER2_LOSE_TEXT} " ) ;
const u8 gText_PkmnIncapableOfPower [ ] = _ ( " {B_ATK_NAME_WITH_PREFIX} appears incapable \n of using its power! " ) ;
2017-10-07 18:59:41 +01:00
const u8 gText_GlintAppearsInEye [ ] = _ ( " A glint appears in \n {B_SCR_ACTIVE_NAME_WITH_PREFIX}’ s eyes! " ) ;
const u8 gText_PkmnGettingIntoPosition [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into \n position! " ) ;
const u8 gText_PkmnBeganGrowlingDeeply [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply! " ) ;
const u8 gText_PkmnEagerForMore [ ] = _ ( " {B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more! " ) ;
2017-10-07 14:15:47 +01:00
2017-11-25 23:33:40 +00:00
const u16 gStringIds_85CCF0A [ ] =
2017-10-07 14:15:47 +01:00
{
2017-11-25 23:33:40 +00:00
STRINGID_GLINTAPPEARSINEYE , STRINGID_PKMNGETTINGINTOPOSITION ,
STRINGID_PKMNBEGANGROWLINGDEEPLY , STRINGID_PKMNEAGERFORMORE
2017-10-07 14:15:47 +01:00
} ;
const u8 gText_RefIfNothingIsDecided [ ] = _ ( " REFEREE: If nothing is decided in \n 3 turns, we will go to judging! " ) ;
const u8 gText_RefThatsIt [ ] = _ ( " REFEREE: That’ s it! We will now go to \n judging to determine the winner! " ) ;
const u8 gText_RefJudgeMind [ ] = _ ( " REFEREE: Judging category 1, Mind! \n The POKéMON showing the most guts! \ p " ) ;
const u8 gText_RefJudgeSkill [ ] = _ ( " REFEREE: Judging category 2, Skill! \n The POKéMON using moves the best! \ p " ) ;
const u8 gText_RefJudgeBody [ ] = _ ( " REFEREE: Judging category 3, Body! \n The POKéMON with the most vitality! \ p " ) ;
const u8 gText_RefJudgement1 [ ] = _ ( " REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! \n The winner is {B_PLAYER_NAME}’ s {B_PLAYER_MON1_NAME}! \ p " ) ;
const u8 gText_RefJudgement2 [ ] = _ ( " REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! \n The winner is {B_TRAINER1_NAME}’ s {B_OPPONENT_MON1_NAME}! \ p " ) ;
const u8 gText_RefJudgement3 [ ] = _ ( " REFEREE: Judgment: 3 to 3! \n We have a draw! \ p " ) ;
const u8 gText_DefeatedOpponentByReferee [ ] = _ ( " {B_PLAYER_MON1_NAME} defeated the opponent \n {B_OPPONENT_MON1_NAME} in a REFEREE’ s decision! " ) ;
const u8 gText_LostToOpponentByReferee [ ] = _ ( " {B_PLAYER_MON1_NAME} lost to the opponent \n {B_OPPONENT_MON1_NAME} in a REFEREE’ s decision! " ) ;
const u8 gText_TiedOpponentByReferee [ ] = _ ( " {B_PLAYER_MON1_NAME} tied the opponent \n {B_OPPONENT_MON1_NAME} in a REFEREE’ s decision! " ) ;
const u8 gText_RefCommenceBattle [ ] = _ ( " REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}! \n Commence battling! " ) ;
const u8 * const gRefereeStringsTable [ ] =
{
gText_RefIfNothingIsDecided ,
gText_RefThatsIt ,
gText_RefJudgeMind ,
gText_RefJudgeSkill ,
gText_RefJudgeBody ,
gText_RefJudgement1 ,
gText_RefJudgement2 ,
gText_RefJudgement3 ,
gText_RefCommenceBattle ,
} ;
const u8 gText_QuestionForfeitMatch [ ] = _ ( " Would you like to forfeit the match \n and quit now? " ) ;
const u8 gText_ForfeitedMatch [ ] = _ ( " {B_PLAYER_NAME} forfeited the match! " ) ;
const u8 gText_Trainer1WinText [ ] = _ ( " {B_TRAINER1_WIN_TEXT} " ) ;
const u8 gText_Trainer2WinText [ ] = _ ( " {B_TRAINER2_WIN_TEXT} " ) ;
const u8 gText_Trainer1Fled [ ] = _ ( " {PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled! " ) ;
const u8 gText_PlayerLostAgainstTrainer1 [ ] = _ ( " Player lost against \n {B_TRAINER1_CLASS} {B_TRAINER1_NAME}! " ) ;
const u8 gText_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 \n on your FRONTIER PASS? " ) ;
const u8 gText_BattleRecordedOnPass [ ] = _ ( " {B_PLAYER_NAME}’ s battle result was recorded \n on the FRONTIER PASS. " ) ;
const u8 gText_LinkTrainerWantsToBattlePause [ ] = _ ( " {B_20} \n wants to battle!{PAUSE 49} " ) ;
const u8 gText_TwoLinkTrainersWantToBattlePause [ ] = _ ( " {B_20} and {B_21} \n want to battle!{PAUSE 49} " ) ;
2018-01-17 19:33:23 +00:00
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for sub_814F950 for more detail.
2017-10-08 13:54:51 +01:00
static const u16 sUnknownMoveTable [ ] =
2017-10-07 14:15:47 +01:00
{
2017-10-08 13:54:51 +01:00
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 ,
2018-01-17 19:33:23 +00:00
MOVE_IRON_DEFENSE , MOVE_BOUNCE , 0 ,
2017-10-08 13:54:51 +01:00
MOVE_TELEPORT , MOVE_RECOVER , MOVE_BIDE , MOVE_AMNESIA ,
2018-01-17 19:33:23 +00:00
MOVE_FLAIL , MOVE_TAUNT , MOVE_BULK_UP , 0 ,
2017-10-08 13:54:51 +01:00
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 ,
2018-01-17 19:33:23 +00:00
MOVE_FAKE_TEARS , MOVE_WATER_SPORT , MOVE_CALM_MIND , 0 ,
2017-10-08 13:54:51 +01:00
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 ,
2018-01-17 19:33:23 +00:00
MOVE_COVET , 0
2017-10-07 14:15:47 +01:00
} ;
2017-10-08 13:54:51 +01:00
static const u8 sDummyWeirdStatusString [ ] = { EOS , EOS , EOS , EOS , EOS , EOS , EOS , EOS , 0 , 0 } ;
2017-10-07 14:15:47 +01:00
2017-12-17 22:45:27 +00:00
static const u8 sUnknown_085CD42C [ ] =
2017-10-07 14:15:47 +01:00
{
2017-10-09 22:33:41 +01:00
0xFF , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x1 , 0x1 , 0xF , 0x6 , 0x0 , 0x0 , 0xFF , 0x1 ,
0x1 , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0xF , 0x6 , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 ,
0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 ,
0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD ,
0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE ,
0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF ,
0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xC , 0xE , 0xB , 0x0 , 0x0 ,
0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE ,
0x1 , 0x2 , 0x1 , 0x0 , 0x0 , 0x0 , 0xC , 0xE , 0xB , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 ,
0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 ,
0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 ,
0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD ,
0xE , 0xF , 0x0 , 0x0 , 0x0 , 0x1 , 0x20 , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x2 ,
0x0 , 0x0 , 0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 ,
0x0 , 0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 ,
0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE ,
0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 ,
0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0xFF ,
0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0x0 , 0x1 , 0xFF , 0x1 , 0x0 ,
0x0 , 0x0 , 0x1 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 ,
0x6 , 0x0 , 0x0 , 0x0 , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x6 , 0x0 , 0x0
2017-10-07 14:15:47 +01:00
} ;
2017-12-17 22:45:27 +00:00
static const u8 sUnknown_085CD54C [ ] =
2017-10-07 14:15:47 +01:00
{
2017-10-09 22:38:40 +01:00
0xFF , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x1 , 0x1 , 0xF , 0x6 , 0x0 , 0x0 , 0xFF , 0x1 ,
0x1 , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0xF , 0x6 , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 ,
0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 ,
0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD ,
0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE ,
0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF ,
0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xC , 0xE , 0xB , 0x0 , 0x0 ,
0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE ,
0x1 , 0x2 , 0x1 , 0x0 , 0x0 , 0x0 , 0xC , 0xE , 0xB , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 ,
0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x7 , 0x0 , 0x1 , 0x0 ,
0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 ,
0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xD ,
0xE , 0xF , 0x0 , 0x0 , 0x0 , 0x1 , 0x20 , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x2 ,
0x0 , 0x0 , 0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0x1 , 0xE , 0xF , 0x0 ,
0x0 , 0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 ,
0xEE , 0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE ,
0x1 , 0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 ,
0xFF , 0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0xFF ,
0x1 , 0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0xEE , 0x1 , 0xFF , 0x1 ,
0x0 , 0x0 , 0x0 , 0xD , 0xE , 0xF , 0x0 , 0x0 , 0x11 , 0x1 , 0x0 , 0x1 , 0x0 , 0x0 ,
0x1 , 0x2 , 0x1 , 0x3 , 0x0 , 0x0
2017-10-07 14:15:47 +01:00
} ;
2017-10-08 13:54:51 +01:00
static const u8 * const gUnknown_085CD660 [ ] =
2017-10-07 14:15:47 +01:00
{
2017-12-17 22:45:27 +00:00
sUnknown_085CD42C , sUnknown_085CD54C
2017-10-07 14:15:47 +01:00
} ;
2017-10-08 13:54:51 +01:00
static const u8 sRecordedBattleTextSpeeds [ ] = { 8 , 4 , 1 , 0 } ;
2017-10-07 14:15:47 +01:00
void BufferStringBattle ( u16 stringID )
{
s32 i ;
const u8 * stringPtr = NULL ;
2018-02-06 01:46:59 +00:00
gStringInfo = ( struct StringInfoBattle * ) ( & gBattleBufferA [ gActiveBattler ] [ 4 ] ) ;
2017-10-07 14:15:47 +01:00
gLastUsedItem = gStringInfo - > lastItem ;
gLastUsedAbility = gStringInfo - > lastAbility ;
2018-02-06 01:46:59 +00:00
gBattleScripting . battler = gStringInfo - > scrActive ;
2017-10-07 14:15:47 +01:00
* ( & gBattleStruct - > field_52 ) = gStringInfo - > unk1605E ;
* ( & gBattleStruct - > hpScale ) = gStringInfo - > hpScale ;
2018-02-08 11:13:29 +00:00
gPotentialItemEffectBattler = gStringInfo - > StringBank ;
2017-10-07 14:15:47 +01:00
* ( & gBattleStruct - > stringMoveType ) = gStringInfo - > moveType ;
2018-02-06 01:46:59 +00:00
for ( i = 0 ; i < MAX_BATTLERS_COUNT ; i + + )
2017-10-07 14:15:47 +01:00
{
2018-02-06 22:09:39 +00:00
gBattlerAbilities [ i ] = gStringInfo - > abilities [ i ] ;
2017-10-07 14:15:47 +01:00
}
for ( i = 0 ; i < TEXT_BUFF_ARRAY_COUNT ; i + + )
{
gBattleTextBuff1 [ i ] = gStringInfo - > textBuffs [ 0 ] [ i ] ;
gBattleTextBuff2 [ i ] = gStringInfo - > textBuffs [ 1 ] [ i ] ;
gBattleTextBuff3 [ i ] = gStringInfo - > 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 = gText_TwoTrainersWantToBattle ;
}
else if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
{
if ( gBattleTypeFlags & BATTLE_TYPE_RECORDED )
stringPtr = gText_TwoLinkTrainersWantToBattlePause ;
else
stringPtr = gText_TwoLinkTrainersWantToBattle ;
}
else
{
if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
stringPtr = gText_Trainer1WantsToBattle ;
else if ( gBattleTypeFlags & BATTLE_TYPE_RECORDED )
stringPtr = gText_LinkTrainerWantsToBattlePause ;
else
stringPtr = gText_LinkTrainerWantsToBattle ;
}
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER )
stringPtr = gText_TwoTrainersWantToBattle ;
else if ( gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS )
stringPtr = gText_TwoTrainersWantToBattle ;
else
stringPtr = gText_Trainer1WantsToBattle ;
}
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_LEGENDARY )
stringPtr = gText_WildPkmnAppeared2 ;
else if ( gBattleTypeFlags & BATTLE_TYPE_DOUBLE ) // interesting, looks like they had something planned for wild double battles
stringPtr = gText_TwoWildPkmnAppeared ;
else if ( gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL )
stringPtr = gText_WildPkmnAppearedPause ;
else
stringPtr = gText_WildPkmnAppeared ;
}
break ;
case STRINGID_INTROSENDOUT : // poke first send-out
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( gActiveBattler ) = = B_SIDE_PLAYER )
2017-10-07 14:15:47 +01:00
{
if ( gBattleTypeFlags & BATTLE_TYPE_DOUBLE )
{
if ( gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER )
stringPtr = gText_InGamePartnerSentOutZGoN ;
else if ( gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS )
stringPtr = gText_GoTwoPkmn ;
else if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
stringPtr = gText_LinkPartnerSentOutPkmnGoPkmn ;
else
stringPtr = gText_GoTwoPkmn ;
}
else
{
stringPtr = gText_GoPkmn ;
}
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_DOUBLE )
{
if ( gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS )
stringPtr = gText_TwoTrainersSentPkmn ;
else if ( gBattleTypeFlags & BATTLE_TYPE_x800000 )
stringPtr = gText_TwoTrainersSentPkmn ;
else if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
stringPtr = gText_TwoLinkTrainersSentOutPkmn ;
else if ( gBattleTypeFlags & ( BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 ) )
stringPtr = gText_LinkTrainerSentOutTwoPkmn ;
else
stringPtr = gText_Trainer1SentOutTwoPkmn ;
}
else
{
if ( ! ( gBattleTypeFlags & ( BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 ) ) )
stringPtr = gText_Trainer1SentOutPkmn ;
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
stringPtr = gText_Trainer1SentOutPkmn ;
else
stringPtr = gText_LinkTrainerSentOutPkmn ;
}
}
break ;
case STRINGID_RETURNMON : // sending poke to ball msg
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( gActiveBattler ) = = B_SIDE_PLAYER )
2017-10-07 14:15:47 +01:00
{
if ( * ( & gBattleStruct - > hpScale ) = = 0 )
stringPtr = gText_PkmnThatsEnough ;
else if ( * ( & gBattleStruct - > hpScale ) = = 1 | | gBattleTypeFlags & BATTLE_TYPE_DOUBLE )
stringPtr = gText_PkmnComeBack ;
else if ( * ( & gBattleStruct - > hpScale ) = = 2 )
stringPtr = gText_PkmnOkComeBack ;
else
stringPtr = gText_PkmnGoodComeBack ;
}
else
{
if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_800 | | gBattleTypeFlags & BATTLE_TYPE_x2000000 )
{
if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
stringPtr = gText_LinkTrainer2WithdrewPkmn ;
else
stringPtr = gText_LinkTrainer1WithdrewPkmn ;
}
else
{
stringPtr = gText_Trainer1WithdrewPkmn ;
}
}
break ;
case STRINGID_SWITCHINMON : // switch-in msg
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( gBattleScripting . battler ) = = B_SIDE_PLAYER )
2017-10-07 14:15:47 +01:00
{
if ( * ( & gBattleStruct - > hpScale ) = = 0 | | gBattleTypeFlags & BATTLE_TYPE_DOUBLE )
stringPtr = gText_GoPkmn2 ;
else if ( * ( & gBattleStruct - > hpScale ) = = 1 )
stringPtr = gText_DoItPkmn ;
else if ( * ( & gBattleStruct - > hpScale ) = = 2 )
stringPtr = gText_GoForItPkmn ;
else
stringPtr = gText_YourFoesWeakGetEmPkmn ;
}
else
{
if ( gBattleTypeFlags & ( BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 ) )
{
if ( gBattleTypeFlags & BATTLE_TYPE_x800000 )
{
2018-02-06 01:46:59 +00:00
if ( gBattleScripting . battler = = 1 )
2017-10-07 14:15:47 +01:00
stringPtr = gText_Trainer1SentOutPkmn2 ;
else
stringPtr = gText_Trainer2SentOutPkmn ;
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
stringPtr = gText_LinkTrainerMultiSentOutPkmn ;
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
stringPtr = gText_Trainer1SentOutPkmn2 ;
else
stringPtr = gText_LinkTrainerSentOutPkmn2 ;
}
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS )
{
2018-02-06 01:46:59 +00:00
if ( gBattleScripting . battler = = 1 )
2017-10-07 14:15:47 +01:00
stringPtr = gText_Trainer1SentOutPkmn2 ;
else
stringPtr = gText_Trainer2SentOutPkmn ;
}
else
{
stringPtr = gText_Trainer1SentOutPkmn2 ;
}
}
}
break ;
case STRINGID_USEDMOVE : // pokemon used a move msg
2017-10-08 13:54:51 +01:00
sub_814F8F8 ( gBattleTextBuff1 ) ; // buff1 doesn't appear in the string, leftover from japanese move names?
2017-10-07 14:15:47 +01:00
if ( gStringInfo - > currentMove > LAST_MOVE_INDEX )
StringCopy ( gBattleTextBuff2 , gText_UnknownMoveTypes [ * ( & gBattleStruct - > stringMoveType ) ] ) ;
else
StringCopy ( gBattleTextBuff2 , gMoveNames [ gStringInfo - > currentMove ] ) ;
sub_814F950 ( gBattleTextBuff2 ) ;
stringPtr = gText_AttackerUsedX ;
break ;
case STRINGID_BATTLEEND : // battle end
2018-01-16 21:12:38 +00:00
if ( gBattleTextBuff1 [ 0 ] & B_OUTCOME_LINK_BATTLE_RAN )
2017-10-07 14:15:47 +01:00
{
2018-01-16 21:12:38 +00:00
gBattleTextBuff1 [ 0 ] & = ~ ( B_OUTCOME_LINK_BATTLE_RAN ) ;
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( gActiveBattler ) = = B_SIDE_OPPONENT & & gBattleTextBuff1 [ 0 ] ! = B_OUTCOME_DREW )
2018-01-16 21:12:38 +00:00
gBattleTextBuff1 [ 0 ] ^ = ( B_OUTCOME_LOST | B_OUTCOME_WON ) ;
2017-10-07 14:15:47 +01:00
2018-01-16 21:12:38 +00:00
if ( gBattleTextBuff1 [ 0 ] = = B_OUTCOME_LOST | | gBattleTextBuff1 [ 0 ] = = B_OUTCOME_DREW )
2017-10-07 14:15:47 +01:00
stringPtr = gText_GotAwaySafely ;
else if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
stringPtr = gText_TwoWildFled ;
else
stringPtr = gText_WildFled ;
}
else
{
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( gActiveBattler ) = = B_SIDE_OPPONENT & & gBattleTextBuff1 [ 0 ] ! = B_OUTCOME_DREW )
2018-01-16 21:12:38 +00:00
gBattleTextBuff1 [ 0 ] ^ = ( B_OUTCOME_LOST | B_OUTCOME_WON ) ;
2017-10-07 14:15:47 +01:00
if ( gBattleTypeFlags & BATTLE_TYPE_MULTI )
{
switch ( gBattleTextBuff1 [ 0 ] )
{
2018-01-16 21:12:38 +00:00
case B_OUTCOME_WON :
2017-10-07 14:15:47 +01:00
if ( gBattleTypeFlags & BATTLE_TYPE_x800000 )
stringPtr = gText_TwoInGameTrainersDefeated ;
else
stringPtr = gText_TwoLinkTrainersDefeated ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_LOST :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerLostToTwo ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_DREW :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerBattledToDrawVsTwo ;
break ;
}
}
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
{
switch ( gBattleTextBuff1 [ 0 ] )
{
2018-01-16 21:12:38 +00:00
case B_OUTCOME_WON :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerDefeatedLinkTrainerTrainer1 ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_LOST :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerLostAgainstTrainer1 ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_DREW :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerBattledToDrawTrainer1 ;
break ;
}
}
else
{
switch ( gBattleTextBuff1 [ 0 ] )
{
2018-01-16 21:12:38 +00:00
case B_OUTCOME_WON :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerDefeatedLinkTrainer ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_LOST :
2017-10-07 14:15:47 +01:00
stringPtr = gText_PlayerLostAgainstLinkTrainer ;
break ;
2018-01-16 21:12:38 +00:00
case B_OUTCOME_DREW :
2017-10-07 14:15:47 +01:00
stringPtr = gText_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 ) ;
}
2017-10-07 18:59:41 +01:00
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(bank, monIndex) \
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( bank ) ! = B_SIDE_PLAYER ) \
2017-10-07 18:59:41 +01:00
{ \
if ( gBattleTypeFlags & BATTLE_TYPE_TRAINER ) \
toCpy = gText_FoePkmnPrefix ; \
else \
toCpy = gText_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 ;
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 )
{
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
2018-02-06 19:48:02 +00:00
GetMonData ( & gPlayerParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( B_POSITION_PLAYER_LEFT ) ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_OPPONENT_MON1_NAME : // first enemy poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gEnemyParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( B_POSITION_OPPONENT_LEFT ) ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_PLAYER_MON2_NAME : // second player poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gPlayerParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( B_POSITION_PLAYER_RIGHT ) ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_OPPONENT_MON2_NAME : // second enemy poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gEnemyParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( B_POSITION_OPPONENT_RIGHT ) ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_LINK_PLAYER_MON1_NAME : // link first player poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gPlayerParty [ gBattlerPartyIndexes [ gLinkPlayers [ multiplayerID ] . lp_field_18 ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_LINK_OPPONENT_MON1_NAME : // link first opponent poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gEnemyParty [ gBattlerPartyIndexes [ gLinkPlayers [ multiplayerID ] . lp_field_18 ^ 1 ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_LINK_PLAYER_MON2_NAME : // link second player poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gPlayerParty [ gBattlerPartyIndexes [ gLinkPlayers [ multiplayerID ] . lp_field_18 ^ 2 ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_LINK_OPPONENT_MON2_NAME : // link second opponent poke name
2018-02-06 19:48:02 +00:00
GetMonData ( & gEnemyParty [ gBattlerPartyIndexes [ gLinkPlayers [ multiplayerID ] . lp_field_18 ^ 3 ] ] ,
2017-10-07 18:59:41 +01:00
MON_DATA_NICKNAME , text ) ;
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_ATK_NAME_WITH_PREFIX_MON1 : // attacker name with prefix, only bank 0/1
2018-02-06 22:09:39 +00:00
HANDLE_NICKNAME_STRING_CASE ( gBattlerAttacker ,
gBattlerPartyIndexes [ GetBattlerAtPosition ( GET_BATTLER_SIDE ( gBattlerAttacker ) ) ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_ATK_PARTNER_NAME : // attacker partner name
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerAttacker ) = = B_SIDE_PLAYER )
GetMonData ( & gPlayerParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( GET_BATTLER_SIDE ( gBattlerAttacker ) ) + 2 ] ] , MON_DATA_NICKNAME , text ) ;
2017-10-07 18:59:41 +01:00
else
2018-02-06 22:09:39 +00:00
GetMonData ( & gEnemyParty [ gBattlerPartyIndexes [ GetBattlerAtPosition ( GET_BATTLER_SIDE ( gBattlerAttacker ) ) + 2 ] ] , MON_DATA_NICKNAME , text ) ;
2017-10-07 18:59:41 +01:00
StringGetEnd10 ( text ) ;
toCpy = text ;
break ;
case B_TXT_ATK_NAME_WITH_PREFIX : // attacker name with prefix
2018-02-06 22:09:39 +00:00
HANDLE_NICKNAME_STRING_CASE ( gBattlerAttacker , gBattlerPartyIndexes [ gBattlerAttacker ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_DEF_NAME_WITH_PREFIX : // target name with prefix
2018-02-06 22:09:39 +00:00
HANDLE_NICKNAME_STRING_CASE ( gBattlerTarget , gBattlerPartyIndexes [ gBattlerTarget ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_EFF_NAME_WITH_PREFIX : // effect bank name with prefix
2018-02-08 10:17:41 +00:00
HANDLE_NICKNAME_STRING_CASE ( gEffectBattler , gBattlerPartyIndexes [ gEffectBattler ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_ACTIVE_NAME_WITH_PREFIX : // active bank name with prefix
2018-02-06 19:48:02 +00:00
HANDLE_NICKNAME_STRING_CASE ( gActiveBattler , gBattlerPartyIndexes [ gActiveBattler ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX : // scripting active bank name with prefix
2018-02-06 19:48:02 +00:00
HANDLE_NICKNAME_STRING_CASE ( gBattleScripting . battler , gBattlerPartyIndexes [ gBattleScripting . battler ] )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_CURRENT_MOVE : // current move name
if ( gStringInfo - > currentMove > LAST_MOVE_INDEX )
toCpy = gText_UnknownMoveTypes [ gBattleStruct - > stringMoveType ] ;
else
toCpy = gMoveNames [ gStringInfo - > currentMove ] ;
break ;
2017-11-26 13:17:02 +00:00
case B_TXT_LAST_MOVE : // originally used move name
if ( gStringInfo - > originallyUsedMove > LAST_MOVE_INDEX )
2017-10-07 18:59:41 +01:00
toCpy = gText_UnknownMoveTypes [ gBattleStruct - > stringMoveType ] ;
else
2017-11-26 13:17:02 +00:00
toCpy = gMoveNames [ gStringInfo - > originallyUsedMove ] ;
2017-10-07 18:59:41 +01:00
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 ) )
{
2018-02-08 11:13:29 +00:00
if ( ( gBattleScripting . multiplayerId ! = 0 & & ( gPotentialItemEffectBattler & BIT_SIDE ) )
| | ( gBattleScripting . multiplayerId = = 0 & & ! ( gPotentialItemEffectBattler & BIT_SIDE ) ) )
2017-10-07 18:59:41 +01:00
{
2018-02-08 11:13:29 +00:00
StringCopy ( text , gEnigmaBerries [ gPotentialItemEffectBattler ] . name ) ;
2017-10-07 18:59:41 +01:00
StringAppend ( text , gText_BerrySuffix ) ;
toCpy = text ;
}
else
{
toCpy = gText_EnigmaBerry ;
}
}
else
{
2018-02-08 11:13:29 +00:00
if ( gLinkPlayers [ gBattleScripting . multiplayerId ] . lp_field_18 = = gPotentialItemEffectBattler )
2017-10-07 18:59:41 +01:00
{
2018-02-08 11:13:29 +00:00
StringCopy ( text , gEnigmaBerries [ gPotentialItemEffectBattler ] . name ) ;
2017-10-07 18:59:41 +01:00
StringAppend ( text , gText_BerrySuffix ) ;
toCpy = text ;
}
else
toCpy = gText_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
2018-02-06 22:09:39 +00:00
toCpy = gAbilityNames [ gBattlerAbilities [ gBattlerAttacker ] ] ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_DEF_ABILITY : // target ability
2018-02-06 22:09:39 +00:00
toCpy = gAbilityNames [ gBattlerAbilities [ gBattlerTarget ] ] ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_SCR_ACTIVE_ABILITY : // scripting active ability
2018-02-06 22:09:39 +00:00
toCpy = gAbilityNames [ gBattlerAbilities [ gBattleScripting . battler ] ] ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_EFF_ABILITY : // effect bank ability
2018-02-08 10:17:41 +00:00
toCpy = gAbilityNames [ gBattlerAbilities [ gEffectBattler ] ] ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_TRAINER1_CLASS : // trainer class name
if ( gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE )
2018-02-11 16:35:01 +00:00
toCpy = gTrainerClassNames [ GetSecretBaseTrainerClass ( ) ] ;
2017-10-07 18:59:41 +01:00
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
toCpy = gTrainerClassNames [ sub_8068BB0 ( ) ] ;
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_3FE )
toCpy = gTrainerClassNames [ sub_81A4D00 ( ) ] ;
else if ( gBattleTypeFlags & BATTLE_TYPE_FRONTIER )
toCpy = gTrainerClassNames [ GetFrontierOpponentClass ( gTrainerBattleOpponent_A ) ] ;
else if ( gBattleTypeFlags & BATTLE_TYPE_x4000000 )
toCpy = gTrainerClassNames [ sub_81D5530 ( gTrainerBattleOpponent_A ) ] ;
else if ( gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER )
toCpy = gTrainerClassNames [ GetEreaderTrainerClassId ( ) ] ;
else
toCpy = gTrainerClassNames [ gTrainers [ gTrainerBattleOpponent_A ] . trainerClass ] ;
break ;
case B_TXT_TRAINER1_NAME : // trainer1 name
if ( gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE )
{
for ( i = 0 ; i < ( s32 ) ARRAY_COUNT ( gBattleResources - > secretBase - > trainerName ) ; i + + )
text [ i ] = gBattleResources - > secretBase - > trainerName [ i ] ;
text [ i ] = EOS ;
ConvertInternationalString ( text , gBattleResources - > secretBase - > language ) ;
toCpy = text ;
}
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_C00 )
{
toCpy = gLinkPlayers [ multiplayerID ^ BIT_SIDE ] . name ;
}
else if ( gTrainerBattleOpponent_A = = TRAINER_OPPONENT_3FE )
{
sub_81A4D50 ( text ) ;
toCpy = text ;
}
else if ( gBattleTypeFlags & BATTLE_TYPE_FRONTIER )
{
GetFrontierTrainerName ( text , gTrainerBattleOpponent_A ) ;
toCpy = text ;
}
else if ( gBattleTypeFlags & BATTLE_TYPE_x4000000 )
{
sub_81D5554 ( text , gTrainerBattleOpponent_A ) ;
toCpy = text ;
}
else if ( gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER )
{
GetEreaderTrainerName ( text ) ;
toCpy = text ;
}
else
{
toCpy = gTrainers [ gTrainerBattleOpponent_A ] . trainerName ;
}
break ;
case B_TXT_1E : // link player name?
toCpy = gLinkPlayers [ multiplayerID ] . name ;
break ;
case B_TXT_1F : // link partner name?
2018-02-06 19:48:02 +00:00
toCpy = gLinkPlayers [ GetBattlerMultiplayerId ( 2 ^ gLinkPlayers [ multiplayerID ] . lp_field_18 ) ] . name ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_20 : // link opponent 1 name?
2018-02-06 19:48:02 +00:00
toCpy = gLinkPlayers [ GetBattlerMultiplayerId ( 1 ^ gLinkPlayers [ multiplayerID ] . lp_field_18 ) ] . name ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_21 : // link opponent 2 name?
2018-02-06 19:48:02 +00:00
toCpy = gLinkPlayers [ GetBattlerMultiplayerId ( 3 ^ gLinkPlayers [ multiplayerID ] . lp_field_18 ) ] . name ;
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_22 : // link scripting active name
2018-02-06 19:48:02 +00:00
toCpy = gLinkPlayers [ GetBattlerMultiplayerId ( gBattleScripting . battler ) ] . name ;
2017-10-07 18:59:41 +01:00
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
{
2017-12-01 20:25:13 +00:00
toCpy = GetTrainerALoseText ( ) ;
2017-10-07 18:59:41 +01:00
}
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 : // ?
2018-02-06 01:46:59 +00:00
HANDLE_NICKNAME_STRING_CASE ( gBattleScripting . battler , * ( & gBattleStruct - > field_52 ) )
2017-10-07 18:59:41 +01:00
break ;
case B_TXT_PC_CREATOR_NAME : // lanette pc
2017-11-08 21:20:10 +00:00
if ( FlagGet ( FLAG_SYS_PC_LANETTE ) )
2017-10-07 18:59:41 +01:00
toCpy = gText_Lanettes ;
else
toCpy = gText_Someones ;
break ;
case B_TXT_ATK_PREFIX2 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerAttacker ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix2 ;
else
toCpy = gText_FoePkmnPrefix3 ;
break ;
case B_TXT_DEF_PREFIX2 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerTarget ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix2 ;
else
toCpy = gText_FoePkmnPrefix3 ;
break ;
case B_TXT_ATK_PREFIX1 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerAttacker ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix ;
else
toCpy = gText_FoePkmnPrefix2 ;
break ;
case B_TXT_DEF_PREFIX1 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerTarget ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix ;
else
toCpy = gText_FoePkmnPrefix2 ;
break ;
case B_TXT_ATK_PREFIX3 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerAttacker ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix3 ;
else
toCpy = gText_FoePkmnPrefix4 ;
break ;
case B_TXT_DEF_PREFIX3 :
2018-02-06 22:09:39 +00:00
if ( GetBattlerSide ( gBattlerTarget ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
toCpy = gText_AllyPkmnPrefix3 ;
else
toCpy = gText_FoePkmnPrefix4 ;
break ;
case B_TXT_TRAINER2_CLASS :
if ( gBattleTypeFlags & BATTLE_TYPE_FRONTIER )
toCpy = gTrainerClassNames [ GetFrontierOpponentClass ( gTrainerBattleOpponent_B ) ] ;
else if ( gBattleTypeFlags & BATTLE_TYPE_x4000000 )
toCpy = gTrainerClassNames [ sub_81D5530 ( gTrainerBattleOpponent_B ) ] ;
else
toCpy = gTrainerClassNames [ gTrainers [ gTrainerBattleOpponent_B ] . trainerClass ] ;
break ;
case B_TXT_TRAINER2_NAME :
if ( gBattleTypeFlags & BATTLE_TYPE_FRONTIER )
{
GetFrontierTrainerName ( text , gTrainerBattleOpponent_B ) ;
toCpy = text ;
}
else if ( gBattleTypeFlags & BATTLE_TYPE_x4000000 )
{
sub_81D5554 ( text , gTrainerBattleOpponent_B ) ;
toCpy = text ;
}
else
{
toCpy = gTrainers [ gTrainerBattleOpponent_B ] . trainerName ;
}
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
{
2017-12-01 20:25:13 +00:00
toCpy = GetTrainerBLoseText ( ) ;
2017-10-07 18:59:41 +01:00
}
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 ;
}
// missing if (toCpy != NULL) check
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 ;
}
// TODO: move these to a general header like util.h
# define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
# define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
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 = ByteRead16 ( & 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 = ByteRead16 ( & src [ srcID + 3 ] ) ;
break ;
case 4 :
value = ByteRead32 ( & 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 [ ByteRead16 ( & 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
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( src [ srcID + 1 ] ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
{
GetMonData ( & gPlayerParty [ src [ srcID + 2 ] ] , MON_DATA_NICKNAME , text ) ;
}
else
{
if ( gBattleTypeFlags & BATTLE_TYPE_TRAINER )
StringAppend ( dst , gText_FoePkmnPrefix ) ;
else
StringAppend ( dst , gText_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 , ByteRead16 ( & src [ srcID + 1 ] ) ) ;
srcID + = 3 ;
break ;
case B_BUFF_MON_NICK : // poke nick without prefix
2018-02-06 01:46:59 +00:00
if ( GetBattlerSide ( src [ srcID + 1 ] ) = = B_SIDE_PLAYER )
2017-10-07 18:59:41 +01:00
GetMonData ( & gPlayerParty [ src [ srcID + 2 ] ] , MON_DATA_NICKNAME , dst ) ;
else
GetMonData ( & gEnemyParty [ src [ srcID + 2 ] ] , MON_DATA_NICKNAME , dst ) ;
StringGetEnd10 ( dst ) ;
srcID + = 3 ;
break ;
2017-11-27 19:03:41 +00:00
case B_BUFF_NEGATIVE_FLAVOR : // flavor table
2017-10-07 18:59:41 +01:00
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 = ByteRead16 ( & src [ srcID + 1 ] ) ;
if ( gBattleTypeFlags & ( BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 ) )
{
if ( hword = = ITEM_ENIGMA_BERRY )
{
2018-02-08 11:13:29 +00:00
if ( gLinkPlayers [ gBattleScripting . multiplayerId ] . lp_field_18 = = gPotentialItemEffectBattler )
2017-10-07 18:59:41 +01:00
{
2018-02-08 11:13:29 +00:00
StringCopy ( dst , gEnigmaBerries [ gPotentialItemEffectBattler ] . name ) ;
2017-10-07 18:59:41 +01:00
StringAppend ( dst , gText_BerrySuffix ) ;
}
else
StringAppend ( dst , gText_EnigmaBerry ) ;
}
else
CopyItemName ( hword , dst ) ;
}
else
CopyItemName ( hword , dst ) ;
srcID + = 3 ;
break ;
}
}
}
2017-10-08 13:54:51 +01:00
2018-01-17 19:33:23 +00:00
// 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 sub_814F950
// below to effect changes in the meaning of the line.
2017-10-08 13:54:51 +01:00
static void sub_814F8F8 ( u8 * textBuff )
{
s32 counter = 0 ;
u32 i = 0 ;
while ( counter ! = 4 )
{
2018-01-17 19:33:23 +00:00
if ( sUnknownMoveTable [ i ] = = 0 )
2017-10-08 13:54:51 +01:00
counter + + ;
if ( sUnknownMoveTable [ i + + ] = = gStringInfo - > currentMove )
break ;
}
if ( counter > = 0 )
{
if ( counter < = 2 )
StringCopy ( textBuff , gText_SpaceIs ) ; // is
else if ( counter < = 4 )
StringCopy ( textBuff , gText_ApostropheS ) ; // 's
}
}
2018-01-17 19:33:23 +00:00
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
// into the table of moves at sUnknownMoveTable and varied the line accordingly.
2018-02-07 23:00:25 +00:00
//
2018-01-17 19:33:23 +00:00
// gText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "<NAME>'s <ATTACK>!".
2018-02-07 23:00:25 +00:00
//
2018-01-17 19:33:23 +00:00
// gText_ExclamationMark2 was "を つかった!". This resulted in the translation
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
2018-02-07 23:00:25 +00:00
//
2018-01-17 19:33:23 +00:00
// gText_ExclamationMark3 was "した!". This was used for those moves whose
// names were verbs, such as Recover, and resulted in translations like "<NAME>
// recovered itself!".
2018-02-07 23:00:25 +00:00
//
2018-01-17 19:33:23 +00:00
// gText_ExclamationMark4 was "を した!" This resulted in a translation of
// "<NAME> did an <ATTACK>!".
2018-02-07 23:00:25 +00:00
//
2018-01-17 19:33:23 +00:00
// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
2017-10-08 13:54:51 +01:00
static void sub_814F950 ( u8 * dst )
{
s32 counter = 0 ;
s32 i = 0 ;
while ( * dst ! = EOS )
dst + + ;
while ( counter ! = 4 )
{
if ( sUnknownMoveTable [ i ] = = MOVE_NONE )
counter + + ;
if ( sUnknownMoveTable [ i + + ] = = gStringInfo - > currentMove )
break ;
}
switch ( counter )
{
case 0 :
StringCopy ( dst , gText_ExclamationMark ) ;
break ;
case 1 :
StringCopy ( dst , gText_ExclamationMark2 ) ;
break ;
case 2 :
StringCopy ( dst , gText_ExclamationMark3 ) ;
break ;
case 3 :
StringCopy ( dst , gText_ExclamationMark4 ) ;
break ;
case 4 :
StringCopy ( dst , gText_ExclamationMark5 ) ;
break ;
}
}
2017-10-22 00:04:02 +01:00
void BattleHandleAddTextPrinter ( const u8 * text , u8 arg1 )
2017-10-08 13:54:51 +01:00
{
const u8 * r8 = gUnknown_085CD660 [ gBattleScripting . field_24 ] ;
bool32 r9 ;
struct TextSubPrinter textSubPrinter ;
u8 speed ;
if ( arg1 & 0x80 )
{
arg1 & = ~ ( 0x80 ) ;
r9 = FALSE ;
}
else
{
FillWindowPixelBuffer ( arg1 , r8 [ 12 * arg1 ] ) ;
r9 = TRUE ;
}
textSubPrinter . current_text_offset = text ;
textSubPrinter . windowId = arg1 ;
textSubPrinter . fontId = r8 [ ( 12 * arg1 ) + 1 ] ;
textSubPrinter . x = r8 [ ( 12 * arg1 ) + 2 ] ;
textSubPrinter . y = r8 [ ( 12 * arg1 ) + 3 ] ;
textSubPrinter . currentX = textSubPrinter . x ;
textSubPrinter . currentY = textSubPrinter . y ;
textSubPrinter . letterSpacing = r8 [ ( 12 * arg1 ) + 4 ] ;
textSubPrinter . lineSpacing = r8 [ ( 12 * arg1 ) + 5 ] ;
textSubPrinter . fontColor_l = 0 ;
2018-01-25 21:25:35 +00:00
textSubPrinter . fgColor = r8 [ ( 12 * arg1 ) + 7 ] ;
2017-10-08 13:54:51 +01:00
textSubPrinter . bgColor = r8 [ ( 12 * arg1 ) + 8 ] ;
textSubPrinter . shadowColor = r8 [ ( 12 * arg1 ) + 9 ] ;
if ( textSubPrinter . x = = 0xFF )
{
s32 var2 ;
u32 var = sub_80397C4 ( gBattleScripting . field_24 , arg1 ) ;
var2 = GetStringCenterAlignXOffsetWithLetterSpacing ( textSubPrinter . fontId , textSubPrinter . current_text_offset , var , textSubPrinter . letterSpacing ) ;
textSubPrinter . x = textSubPrinter . currentX = var2 ;
}
if ( arg1 = = 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 ( arg1 = = 0 | | arg1 = = 0x16 )
{
if ( gBattleTypeFlags & ( BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 ) )
speed = 1 ;
else if ( gBattleTypeFlags & BATTLE_TYPE_RECORDED )
2017-11-13 17:07:23 +00:00
speed = sRecordedBattleTextSpeeds [ GetTextSpeedInRecordedBattle ( ) ] ;
2017-10-08 13:54:51 +01:00
else
2017-11-18 15:11:34 +00:00
speed = GetPlayerTextSpeed ( ) ;
2017-10-08 13:54:51 +01:00
gTextFlags . flag_0 = 1 ;
}
else
{
speed = r8 [ ( 12 * arg1 ) + 6 ] ;
gTextFlags . flag_0 = 0 ;
}
AddTextPrinter ( & textSubPrinter , speed , NULL ) ;
if ( r9 )
{
PutWindowTilemap ( arg1 ) ;
CopyWindowToVram ( arg1 , 3 ) ;
}
}
void SetPpNumbersPaletteInMoveSelection ( void )
{
2018-02-06 01:46:59 +00:00
struct ChooseMoveStruct * chooseMoveStruct = ( struct ChooseMoveStruct * ) ( & gBattleBufferA [ gActiveBattler ] [ 4 ] ) ;
2017-10-08 13:54:51 +01:00
const u16 * palPtr = gUnknown_08D85620 ;
2018-02-06 01:46:59 +00:00
u8 var = GetCurrentPpToMaxPpState ( chooseMoveStruct - > currentPp [ gMoveSelectionCursor [ gActiveBattler ] ] ,
chooseMoveStruct - > maxPp [ gMoveSelectionCursor [ gActiveBattler ] ] ) ;
2017-10-08 13:54:51 +01:00
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 ;
}