(55/654) src/battle_message.c and adjustments to Makefile

This commit is contained in:
Eduardo Quezada
2022-08-02 10:01:09 -04:00
parent 120a11ac12
commit 4e137fb43c
5 changed files with 800 additions and 42 deletions

View File

@@ -52,6 +52,15 @@ jobs:
COMPARE: 0
run: make -j${nproc} all
- name: French Compare
run: make -j${nproc} compare_french
- name: French Modern
env:
MODERN: 1
COMPARE: 0
run: make -j${nproc} french
- name: Move symfiles
if: ${{ github.event_name == 'push' }}
run: |

View File

@@ -45,6 +45,7 @@ TITLE := POKEMON EMER
GAME_CODE := BPE
MAKER_CODE := 01
BUILD_NAME := emerald
BUILD_SUFIX :=
ifeq (modern,$(MAKECMDGOALS))
MODERN := 1
@@ -52,22 +53,27 @@ endif
# Language
ifeq ($(GAME_LANGUAGE), ENGLISH)
BUILD_NAME := $(BUILD_NAME)
GAME_CODE := $(GAME_CODE)E
GAME_CODE := $(GAME_CODE)E
else
ifeq ($(GAME_LANGUAGE), FRENCH)
BUILD_NAME := $(BUILD_NAME)_fr
GAME_CODE := $(GAME_CODE)F
BUILD_SUFIX := _fr
else
$(error unknown language $(GAME_LANGUAGE))
endif
endif
# Rom and build directory names.
BUILD_NAME := $(BUILD_NAME)$(BUILD_SUFIX)
ifeq ($(MODERN),0)
ROM_NAME := poke$(BUILD_NAME).gba
OBJ_DIR_NAME := build/$(BUILD_NAME)
ROM_NAME := poke$(BUILD_NAME).gba
ELF_NAME := $(ROM_NAME:.gba=.elf)
MAP_NAME := $(ROM_NAME:.gba=.map)
else
ROM_NAME := poke$(BUILD_NAME)_modern.gba
OBJ_DIR_NAME := build/modern$(BUILD_SUFIX)
endif
ELF_NAME := $(ROM_NAME:.gba=.elf)
MAP_NAME := $(ROM_NAME:.gba=.map)
# use arm-none-eabi-cpp for macOS
# as macOS's default compiler is clang
@@ -86,10 +92,6 @@ else
CPP := $(PREFIX)cpp
endif
MODERN_ROM_NAME := pokeemerald_modern.gba
MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf)
MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map)
MODERN_OBJ_DIR_NAME := build/modern
SHELL := /bin/bash -o pipefail
@@ -116,18 +118,17 @@ MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) --defsym $(GAME_LANGUAGE)=1
ROM := $(ROM_NAME)
OBJ_DIR := $(OBJ_DIR_NAME)
ifeq ($(MODERN),0)
CC1 := tools/agbcc/bin/agbcc$(EXE)
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g
ROM := $(ROM_NAME)
OBJ_DIR := $(OBJ_DIR_NAME)
LIBPATH := -L ../../tools/agbcc/lib
LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall
else
CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
ROM := $(MODERN_ROM_NAME)
OBJ_DIR := $(MODERN_OBJ_DIR_NAME)
LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))"
LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall
endif
@@ -244,9 +245,6 @@ ifeq ($(COMPARE),1)
@$(SHA1) $(BUILD_NAME).sha1
endif
# For contributors to make sure a change didn't affect the contents of the ROM.
compare: all
clean: mostlyclean clean-tools
clean-tools:
@@ -443,13 +441,19 @@ $(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
$(FIX) $@ -p --silent
modern: all
# "Friendly" target names for convenience sake
en: ; @$(MAKE) GAME_LANGUAGE=ENGLISH
fr: ; @$(MAKE) GAME_LANGUAGE=FRENCH
# "friendly" target names for convenience sake
english: ; @$(MAKE) GAME_LANGUAGE=ENGLISH
french: ; @$(MAKE) GAME_LANGUAGE=FRENCH
compare_english: ; @$(MAKE) GAME_LANGUAGE=ENGLISH COMPARE=1
compare_french: ; @$(MAKE) GAME_LANGUAGE=FRENCH COMPARE=1
# For contributors to make sure a change didn't affect the contents of the ROMs.
compare: ; @$(MAKE) GAME_LANGUAGE=ENGLISH COMPARE=1
compare_en: ; @$(MAKE) GAME_LANGUAGE=ENGLISH COMPARE=1
compare_fr: ; @$(MAKE) GAME_LANGUAGE=FRENCH COMPARE=1
# Use modern compilers to build rom. Will not match with original ROMs.
modern: ; @$(MAKE) GAME_LANGUAGE=ENGLISH MODERN=1
modern_en: ; @$(MAKE) GAME_LANGUAGE=ENGLISH MODERN=1
modern_fr: ; @$(MAKE) GAME_LANGUAGE=FRENCH MODERN=1
libagbsyscall:
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN)

View File

@@ -272,11 +272,6 @@ extern const u8 gText_DefendersStatRose[];
extern const u8 gText_PkmnGettingPumped[];
extern const u8 gText_PkmnShroudedInMist[];
extern const u8 gText_PkmnsXPreventsSwitching[];
extern const u8 gText_TheGreatNewHope[];
extern const u8 gText_WillChampionshipDreamComeTrue[];
extern const u8 gText_AFormerChampion[];
extern const u8 gText_ThePreviousChampion[];
extern const u8 gText_TheUnbeatenChampion[];
extern const u8 gText_PlayerMon1Name[];
extern const u8 gText_Vs[];
extern const u8 gText_OpponentMon1Name[];

View File

@@ -20,7 +20,7 @@
#define ENGLISH 1
#endif
#ifdef ENGLISH
#if ENGLISH
#define UNITS_IMPERIAL
#else
#define UNITS_METRIC

View File

@@ -1,4 +1,7 @@
#include "global.h"
#if FRENCH
#include "malloc.h"
#endif
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
@@ -52,6 +55,7 @@ EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
#if ENGLISH
static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
static const u8 sText_EmptyString4[] = _("");
@@ -337,7 +341,7 @@ static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!");
static const u8 sText_StartedToRain[] = _("It started to rain!");
static const u8 sText_DownpourStarted[] = _("A downpour started!"); // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC
static const u8 sText_RainContinues[] = _("Rain continues to fall.");
static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused
static const u8 sText_DownpourContinues[] = _("The downpour continues."); // Unused
static const u8 sText_RainStopped[] = _("The rain stopped.");
static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!");
static const u8 sText_SandstormRages[] = _("The sandstorm rages.");
@@ -430,6 +434,386 @@ static const u8 sText_SpAtk2[] = _("SP. ATK");
static const u8 sText_SpDef2[] = _("SP. DEF");
static const u8 sText_Accuracy[] = _("accuracy");
static const u8 sText_Evasiveness[] = _("evasiveness");
#elif FRENCH
static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} a gagné{B_BUFF2}\n{B_BUFF3} points EXP.!\p");
static const u8 sText_EmptyString4[] = _("");
static const u8 sText_ABoosted[] = _(" un bonus de");
static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} monte au\nN. {B_BUFF2}!{WAIT_SE}\p");
static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} apprend\n{B_BUFF2}!{WAIT_SE}\p");
static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} tente dapprendre\n{B_BUFF2}.\p");
static const u8 sText_TryToLearnMove2[] = _("Mais {B_BUFF1} ne peut pas\navoir plus de quatre capacités.\p");
static const u8 sText_TryToLearnMove3[] = _("Effacer une ancienne\ncapacité pour {B_BUFF2}?");
static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} oublie\n{B_BUFF2}.\p");
static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Arrêter dapprendre\n{B_BUFF2}?");
static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} na pas appris\n{B_BUFF2}.\p");
static const u8 sText_UseNextPkmn[] = _("Utiliser un autre POKéMON?");
static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}\nrate son attaque!");
static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nse protège!");
static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} évite les\ndégâts avec {B_DEF_ABILITY}!");
static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} fait échouer les\ncapacités SOL avec {B_DEF_ABILITY}!");
static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} évite\nlattaque!");
static const u8 sText_ItDoesntAffect[] = _("Ça naffecte pas\n{B_DEF_NAME_WITH_PREFIX}…");
static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nest K.O.!\p");
static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nest K.O.!\p");
static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} remporte {B_BUFF1}¥!\p");
static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} na plus de\nPOKéMON en forme!\p");
static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} est hors-jeu!{PAUSE_UNTIL_PRESS}");
static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} empêche la\nfuite avec {B_SCR_ACTIVE_ABILITY}!\p");
static const u8 sText_CantEscape2[] = _("Fuite impossible!\p");
static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} ne peut\npas fuir!");
static const u8 sText_HitXTimes[] = _("Touché {B_BUFF1} fois!");
static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nsendort!");
static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_ABILITY} de {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nfait dormir {B_EFF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} dort déjà!");
static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} dort déjà!");
static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX} nest pas \naffecté!");
static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nest empoisonné!");
static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_ABILITY} de {B_SCR_ACTIVE_NAME_WITH_PREFIX}\na empoisonné {B_EFF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX}\nsouffre du poison!");
static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} est déjà\nempoisonné.");
static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} est gravement\nempoisonné!");
static const u8 sText_PkmnEnergyDrained[] = _("Lénergie du {B_DEF_NAME_WITH_PREFIX}\nest drainée!");
static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} est brûlé!");
static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_ABILITY} de\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} brûle\l{B_EFF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} souffre de\nsa brûlure!");
static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} est déjà\nbrûlé.");
static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} est gelé!");
static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_ABILITY} de {B_SCR_ACTIVE_NAME_WITH_PREFIX}\ngèle {B_EFF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} est gelé!");
static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} est dégelé!");
static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} est dégelé!");
static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} est dégelé\npar {B_CURRENT_MOVE}!");
static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} est paralysé!\nIl peut ne plus attaquer!");
static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_ABILITY} de {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nparalyse {B_EFF_NAME_WITH_PREFIX}!\lIl peut ne plus attaquer!");
static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} est paralysé!\nIl ne peut plus attaquer!");
static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} est déjà\nparalysé!");
static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} nest plus\nparalysé!");
static const u8 sText_PkmnDreamEaten[] = _("Le rêve de {B_DEF_NAME_WITH_PREFIX}\nest dévoré!");
static const u8 sText_StatsWontIncrease[] = _("Ah, {B_BUFF1} de {B_ATK_NAME_WITH_PREFIX}\nnira pas plus haut!");
static const u8 sText_StatsWontDecrease[] = _("Ah, {B_BUFF1} de {B_DEF_NAME_WITH_PREFIX}\nnira pas plus bas!");
static const u8 sText_TeamStoppedWorking[] = _("{B_BUFF1} ne fonctionne\nplus dans votre équipe!");
static const u8 sText_FoeStoppedWorking[] = _("{B_BUFF1} ne fonctionne\nplus dans léquipe ennemie!");
static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} est confus!");
static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} nest plus\nconfus!");
static const u8 sText_PkmnWasConfused[] = _("Cela rend {B_EFF_NAME_WITH_PREFIX}\nconfus!");
static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} est\ndéjà confus!");
static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX} est amoureux!");
static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} est amoureux\nde {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnImmobilizedByLove[] = _("Lamour empêche {B_ATK_NAME_WITH_PREFIX}\ndattaquer!");
static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} est soufflé!");
static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} prend le\ntype {B_BUFF1}!");
static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} a la trouille!");
static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} récupère\nson énergie!");
static const u8 sText_PkmnHPFull[] = _("Les PV du {B_DEF_NAME_WITH_PREFIX} sont\nau maximum!");
static const u8 sText_PkmnRaisedSpDef[] = _("{B_CURRENT_MOVE} du POKéMON {B_ATK_PREFIX2} \naugmente sa DEF. SPE.!");
static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_CURRENT_MOVE} du POKéMON {B_ATK_PREFIX2} \naugmente un peu sa DEF. SPE.!");
static const u8 sText_PkmnRaisedDef[] = _("{B_CURRENT_MOVE} du POKéMON {B_ATK_PREFIX2}\naugmente sa DEFENSE!");
static const u8 sText_PkmnRaisedDefALittle[] = _("{B_CURRENT_MOVE} du POKéMON {B_ATK_PREFIX2}\naugmente un peu sa DEFENSE!");
static const u8 sText_PkmnCoveredByVeil[] = _("Léquipe du POKéMON {B_ATK_PREFIX2} est\nrecouverte par un voile!");
static const u8 sText_PkmnUsedSafeguard[] = _("Léquipe de {B_DEF_NAME_WITH_PREFIX} est\nprotégée par RUNE PROTECT!");
static const u8 sText_PkmnSafeguardExpired[] = _("Léquipe du POKéMON {B_ATK_PREFIX3} nest\nplus protégée par RUNE PROTECT!");
static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} sendort!");
static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} dort et\nrécupère son énergie!");
static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} déclenche un\ncyclone!");
static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} rayonne!");
static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} baisse la tête!");
static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} est entouré dune\nlumière intense!");
static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} senvole!");
static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} creuse un trou!");
static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} se cache sous\nleau!");
static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} bondit!");
static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} est pris dans\nlETREINTE du {B_ATK_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} est piégé dans\nle tourbillon!");
static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} est piégé par\nle TOURBI-SABLE!");
static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} est LIGOTE\npar {B_ATK_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnClamped[] = _("{B_DEF_NAME_WITH_PREFIX} est pris dans\nle CLAQUOIR du {B_ATK_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} est blessé par\n{B_BUFF1}!");
static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} est libéré de\n{B_BUFF1}!");
static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} sécrase au\nsol!");
const u8 gText_PkmnShroudedInMist[] = _("Le POKéMON {B_ATK_PREFIX2} sentoure de\nBRUME!");
static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} est protégé par\nla BRUME!");
const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} se gonfle!");
static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} se blesse en\nfrappant!");
static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} est prêt à\nse protéger!");
static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} est secoué\npar la tempête de sable!");
static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} est frappé par\nla GRELE!");
static const u8 sText_PkmnsXWoreOff[] = _("{B_BUFF1} du POKéMON {B_ATK_PREFIX1} \nprend fin!");
static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} est infecté!");
static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} évite lattaque!");
static const u8 sText_PkmnSappedByLeechSeed[] = _("VAMPIGRAINE draine\nlénergie de {B_ATK_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} dort\nprofondément.");
static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} se réveille!");
static const u8 sText_PkmnUproarKeptAwake[] = _("Mais le BROUHAHA du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} le tient éveillé!");
static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} est réveillé par\nle BROUHAHA!");
static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} provoque\nun BROUHAHA!");
static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} fait un\nBROUHAHA!");
static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} se calme.");
static const u8 sText_PkmnCantSleepInUproar[] = _("Mais le BROUHAHA empêche\n{B_DEF_NAME_WITH_PREFIX} de dormir!");
static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} utilise STOCKAGE\n{B_BUFF1} fois!");
static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} ne peut plus\nutiliser STOCKAGE!");
static const u8 sText_PkmnCantSleepInUproar2[] = _("Mais le BROUHAHA empêche\n{B_DEF_NAME_WITH_PREFIX} de dormir!");
static const u8 sText_UproarKeptPkmnAwake[] = _("Mais le BROUHAHA tient\n{B_DEF_NAME_WITH_PREFIX} éveillé!");
static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} reste éveillé\ngrâce à {B_DEF_ABILITY}!");
static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} se concentre!");
static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} envoie la sauce!");
static const u8 sText_PkmnFatigueConfusion[] = _("La fatigue rend {B_ATK_NAME_WITH_PREFIX}\nconfus!");
static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} obtient {B_BUFF1}¥!\p");
static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} nest pas\naffecté!");
static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} se transforme\nen {B_BUFF1}!");
static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} crée un CLONE!");
static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} a déjà un CLONE!");
static const u8 sText_SubstituteDamaged[] = _("Le CLONE prend les\ndégâts du {B_DEF_NAME_WITH_PREFIX}!\p");
static const u8 sText_PkmnSubstituteFaded[] = _("Le CLONE du {B_DEF_NAME_WITH_PREFIX}\ndisparaît!\p");
static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} doit\nse recharger!");
static const u8 sText_PkmnRageBuilding[] = _("La FRENESIE du {B_DEF_NAME_WITH_PREFIX}\naugmente!");
static const u8 sText_PkmnMoveWasDisabled[] = _("{B_BUFF1} du {B_DEF_NAME_WITH_PREFIX}\nest mis sous ENTRAVE!");
static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} nest plus\nsous ENTRAVE!");
static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX}, ENCORE\nune fois!");
static const u8 sText_PkmnEncoreEnded[] = _("ENCORE du {B_ATK_NAME_WITH_PREFIX}\nest terminé!");
static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} vise\n{B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} GRIBOUILLE\n{B_BUFF1}!");
static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} veut emmener son\nennemi au tapis!");
static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} emmène\n{B_ATK_NAME_WITH_PREFIX} au tapis!");
static const u8 sText_PkmnReducedPP[] = _("{B_BUFF1} du {B_DEF_NAME_WITH_PREFIX}\nbaisse de {B_BUFF2}!");
static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} vole\n{B_LAST_ITEM} au\l{B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} ne peut pas\nséchapper!");
static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} commence un\nCAUCHEMAR!");
static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} est prisonnier\ndun CAUCHEMAR!");
static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} sacrifie ses PV\net lance une MALEDICTION\lau {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} est touché par\nla MALEDICTION!");
static const u8 sText_SpikesScattered[] = _("Des PICOTS séparpillent autour\nde léquipe de lennemi!");
static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} est blessé par\nles PICOTS!");
static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identifie\n{B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnPerishCountFell[] = _("Le compte du REQUIEM du\n{B_ATK_NAME_WITH_PREFIX} descend à {B_BUFF1}!");
static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} rassemble ses \nforces!");
static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} est TENACE\nface au coup!");
static const u8 sText_MagnitudeStrength[] = _("AMPLEUR {B_BUFF1}!");
static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} sacrifie ses PV\net monte son ATTAQUE au max!");
static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copie les\nchangements\lde stats du {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} se libère\nde {B_BUFF1}\ldu {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} repousse\nVAMPIGRAINE!");
static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} repousse les\nPICOTS!");
static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} senfuit!");
static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} prévoit une\nattaque!");
static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} prend lattaque\nde {B_BUFF1}!");
static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} prépare\n{B_CURRENT_MOVE}!");
static const u8 sText_PkmnAttack[] = _("Attaque de {B_BUFF1}!");
static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} devient le centre\ndattention!");
static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} se met à\ncharger son énergie!");
static const u8 sText_NaturePowerTurnedInto[] = _("FORCE-NATURE se transforme\nen {B_CURRENT_MOVE}!");
static const u8 sText_PkmnStatusNormal[] = _("Le statut du {B_ATK_NAME_WITH_PREFIX}\nrevient à la normale!");
static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} est victime de la\nTOURMENTE!");
static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} se concentre\ndavantage!");
static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} répond à\nla PROVOC!");
static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} est prêt à aider\n{B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} change dobjet\navec lautre POKéMON!");
static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtient\n{B_BUFF1}!");
static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtient\n{B_BUFF2}!");
static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtient\n{B_BUFF1}!\p{B_DEF_NAME_WITH_PREFIX} obtient\n{B_BUFF2}!");
static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copie\n{B_DEF_ABILITY}\ldu {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} fait un VOEU!");
static const u8 sText_PkmnWishCameTrue[] = _("Le VOEU du {B_BUFF1}\nse réalise!");
static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} plante ses\nracines!");
static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbe des\nnutriments avec ses racines!");
static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} saccroche\navec ses racines!");
static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} rend\n{B_DEF_NAME_WITH_PREFIX} somnolent!");
static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} fait tomber\n{B_LAST_ITEM}\ldu {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} et le POKéMON\néchangent leur capacité spéciale!");
static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} bloque une ou\nplusieurs capacités de ladversaire!");
static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} veut que\nladversaire ait de la RANCUNE!");
static const u8 sText_PkmnLostPPGrudge[] = _("{B_BUFF1} du {B_ATK_NAME_WITH_PREFIX}\nperd ses PP à cause de la RANCUNE!");
static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} sentoure\nde {B_CURRENT_MOVE}!");
static const u8 sText_PkmnMoveBounced[] = _("{B_CURRENT_MOVE} du {B_ATK_NAME_WITH_PREFIX}\nest renvoyé par le REFLET MAGIK!");
static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} attend que son\nennemi attaque!");
static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} utilise SAISIE\nsur la capacité du\l{B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
static const u8 sText_ElectricityWeakened[] = _("La puissance de lélectricité\nest affaiblie!");
static const u8 sText_FireWeakened[] = _("La puissance du feu\nest affaiblie!");
static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} trouve\n{B_LAST_ITEM}!");
static const u8 sText_SoothingAroma[] = _("Une odeur apaisante\nflotte dans les airs!");
static const u8 sText_ItemsCantBeUsedNow[] = _("Objets inutilisables\nici.{PAUSE 64}");
static const u8 sText_ForXCommaYZ[] = _("Pour {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} est plein\ndénergie grâce à {B_LAST_ITEM}!");
static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} est déconcentré\net ne peut pas attaquer!");
static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} est traîné de\nforce au combat!\p");
static const u8 sText_TheWallShattered[] = _("Le mur vole en éclats!");
static const u8 sText_ButNoEffect[] = _("Mais ça na aucun effet!");
static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} na plus\nde capacités!\p");
static const u8 sText_PkmnMoveIsDisabled[] = _("Il y a une ENTRAVE sur {B_CURRENT_MOVE}\ndu {B_ACTIVE_NAME_WITH_PREFIX}!\p");
static const u8 sText_PkmnCantUseMoveTorment[] = _("La TOURMENTE empêche\n{B_ACTIVE_NAME_WITH_PREFIX} dutiliser une\lcapacité deux fois de suite!\p");
static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} ne peut pas\nutiliser {B_CURRENT_MOVE} après PROVOC!\p");
static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} ne peut pas\nutiliser {B_CURRENT_MOVE} bloqué!\p");
static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_ABILITY} du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} fait tomber\lla pluie!");
static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_ABILITY} de {B_SCR_ACTIVE_NAME_WITH_PREFIX}\naugmente sa VITESSE!");
static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} est protégé\npar {B_DEF_ABILITY}!");
static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_ABILITY} de\n{B_DEF_NAME_WITH_PREFIX} \pempêche {B_ATK_NAME_WITH_PREFIX}\ndutiliser {B_CURRENT_MOVE}!");
static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restaure ses PV\ngrâce à {B_DEF_ABILITY}!");
static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nrend {B_CURRENT_MOVE} inutile!");
static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nle transforme en type {B_BUFF1}!");
static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_DEF_ABILITY} du {B_EFF_NAME_WITH_PREFIX}\nempêche la paralysie!");
static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nempêche la romance!");
static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_DEF_ABILITY} du {B_EFF_NAME_WITH_PREFIX}\nempêche lempoisonnement!");
static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nempêche la confusion!");
static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\naugmente sa puissance de FEU!");
static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} saccroche\navec {B_DEF_ABILITY}!");
static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_ABILITY} du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} réduit\llATTAQUE du {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nempêche la perte de stats!");
static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nblesse {B_ATK_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} CALQUE\n{B_BUFF2} du\l{B_BUFF1}!");
static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_ABILITY} du {B_EFF_NAME_WITH_PREFIX}\nempêche les brûlures!");
static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nbloque {B_CURRENT_MOVE}!");
static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nbloque {B_CURRENT_MOVE}!");
static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_ABILITY} du {B_ATK_NAME_WITH_PREFIX}\nrestaure un peu ses PV!");
static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nprovoque une tempête de sable!");
static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nintensifie les rayons du soleil!");
static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nempêche {B_BUFF1} de baisser!");
static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nrend {B_ATK_NAME_WITH_PREFIX} amoureux!");
static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nrend {B_CURRENT_MOVE} inefficace!");
static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nguérit son problème de {B_BUFF1}!");
static const u8 sText_ItSuckedLiquidOoze[] = _("Il aspire le\nSUINTEMENT!");
static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} se transforme!");
static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nreçoit lattaque!");
const u8 gText_PkmnsXPreventsSwitching[] = _("{B_LAST_ABILITY} du {B_BUFF1}\nempêche léchange!\p");
static const u8 sText_PreventedFromWorking[] = _("{B_DEF_ABILITY} du {B_DEF_NAME_WITH_PREFIX}\nempêche {B_BUFF1} du\l{B_SCR_ACTIVE_NAME_WITH_PREFIX} de fonctionner!");
static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle rend inefficace!");
static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_ABILITY} du {B_EFF_NAME_WITH_PREFIX}\nempêche la peur!");
static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_ABILITY} du {B_ATK_NAME_WITH_PREFIX}\nempêche {B_DEF_ABILITY} du\l{B_DEF_NAME_WITH_PREFIX} de fonctionner!");
static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_ABILITY} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nguérit son problème de {B_BUFF1}!");
static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_ABILITY} du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}\pest inefficace sur\n{B_EFF_NAME_WITH_PREFIX}!");
static const u8 sText_StatSharply[] = _("monte beaucoup!");
const u8 gText_StatRose[] = _("augmente!");
static const u8 sText_StatHarshly[] = _("baisse beaucoup!");
static const u8 sText_StatFell[] = _("baisse!");
static const u8 sText_AttackersStatRose[] = _("Ah, {B_BUFF1} du {B_ATK_NAME_WITH_PREFIX}\n{B_BUFF2}");
const u8 gText_DefendersStatRose[] = _("Ah, {B_BUFF1} du {B_DEF_NAME_WITH_PREFIX}\n{B_BUFF2}");
static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Avec {B_LAST_ITEM}, {B_BUFF1} du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
static const u8 sText_AttackersStatFell[] = _("{B_BUFF1} du {B_ATK_NAME_WITH_PREFIX}\n{B_BUFF2}");
static const u8 sText_DefendersStatFell[] = _("Ah, {B_BUFF1} du {B_DEF_NAME_WITH_PREFIX}\n{B_BUFF2}");
static const u8 sText_StatsWontIncrease2[] = _("Les stats du {B_ATK_NAME_WITH_PREFIX}\nniront pas plus haut!");
static const u8 sText_StatsWontDecrease2[] = _("Les stats du {B_DEF_NAME_WITH_PREFIX}\nniront pas plus bas!");
static const u8 sText_CriticalHit[] = _("Coup critique!");
static const u8 sText_OneHitKO[] = _("K.O. en un coup!");
static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2 et{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Tadaa!\p");
static const u8 sText_AndEllipsis[] = _("Et…\p");
static const u8 sText_HMMovesCantBeForgotten[] = _("Impossible doublier les\ncapacités CS maintenant.\p");
static const u8 sText_NotVeryEffective[] = _("Ce nest pas très efficace…");
static const u8 sText_SuperEffective[] = _("Cest super efficace!");
static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}Vous prenez la fuite!\p");
static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fuit en\nutilisant {B_LAST_ITEM}!\p");
static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fuit en\nutilisant {B_ATK_ABILITY}!\p");
static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}{B_BUFF1} sauvage fuit!");
static const u8 sText_PlayerDefeatedLinkTrainer[] = _("{B_LINK_OPPONENT1_NAME} a perdu!");
static const u8 sText_TwoLinkTrainersDefeated[] = _("{B_LINK_OPPONENT2_NAME} et {B_LINK_OPPONENT1_NAME}\nont perdu!");
static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("{B_LINK_OPPONENT1_NAME} a gagné!");
static const u8 sText_PlayerLostToTwo[] = _("{B_LINK_OPPONENT2_NAME} et {B_LINK_OPPONENT1_NAME}\nont gagné!");
static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Egalité avec \n{B_LINK_OPPONENT1_NAME}!");
static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Egalité avec\n{B_LINK_OPPONENT2_NAME} et {B_LINK_OPPONENT1_NAME}!");
static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} senfuit!");
static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} et\n{B_LINK_OPPONENT2_NAME} senfuient!");
static const u8 sText_NoRunningFromTrainers[] = _("On ne senfuit pas dun\ncombat de DRESSEURS!\p");
static const u8 sText_CantEscape[] = _("Fuite impossible!\p");
static const u8 sText_DontLeaveBirch[] = _("PROF. SEKO: Ne me laisse pas\ncomme ça!\p");
static const u8 sText_ButNothingHappened[] = _("Mais rien ne se passe!");
static const u8 sText_ButItFailed[] = _("Mais cela échoue!");
static const u8 sText_ItHurtConfusion[] = _("Il se blesse dans sa\nconfusion.");
static const u8 sText_MirrorMoveFailed[] = _("La MIMIQUE échoue!");
static const u8 sText_StartedToRain[] = _("Il commence à pleuvoir!");
static const u8 sText_DownpourStarted[] = _("Une pluie torrentielle commence!");
static const u8 sText_RainContinues[] = _("La pluie continue de tomber.");
static const u8 sText_DownpourContinues[] = _("La pluie torrentielle continue."); // Unused
static const u8 sText_RainStopped[] = _("La pluie sest arrêtée.");
static const u8 sText_SandstormBrewed[] = _("Une tempête de sable\nse prépare!");
static const u8 sText_SandstormRages[] = _("La tempête de sable\nfait rage.");
static const u8 sText_SandstormSubsided[] = _("La tempête de sable\nse calme.");
static const u8 sText_SunlightGotBright[] = _("Les rayons du soleil brillent!");
static const u8 sText_SunlightStrong[] = _("Les rayons du soleil sont forts.");
static const u8 sText_SunlightFaded[] = _("Les rayons du soleil saffaiblissent.");
static const u8 sText_StartedHail[] = _("Il commence à grêler!");
static const u8 sText_HailContinues[] = _("La grêle continue.");
static const u8 sText_HailStopped[] = _("La grêle sest arrêtée.");
static const u8 sText_FailedToSpitUp[] = _("Mais la RELACHE a échoué!");
static const u8 sText_FailedToSwallow[] = _("Mais AVALE a échoué!");
static const u8 sText_WindBecameHeatWave[] = _("Le vent se transforme\nen CANICULE!");
static const u8 sText_StatChangesGone[] = _("Les changements de stats\nont tous été annulés!");
static const u8 sText_CoinsScattered[] = _("Une pluie de pièces!");
static const u8 sText_TooWeakForSubstitute[] = _("Trop faible pour créer\nun CLONE!");
static const u8 sText_SharedPain[] = _("Les adversaires se partagent\nles dégâts!");
static const u8 sText_BellChimed[] = _("Un GRELOT sonne!");
static const u8 sText_FaintInThree[] = _("Les POKéMON au combat seront\nK.O. dans 3 tours!");
static const u8 sText_NoPPLeft[] = _("Il ny a plus de PP pour\ncette capacité!\p");
static const u8 sText_ButNoPPLeft[] = _("Mais il ny a plus de PP pour\ncette capacité!");
static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignore les ordres\net pionce!");
static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignore les\nordres!");
static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} fait la sieste!");
static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} paresse!");
static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} nobéit pas!");
static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} tourne le dos!");
static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} fait semblant de\nne rien remarquer!");
static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_BUFF2} va être envoyé par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}.\pVoulez-vous changer\nde POKéMON?");
static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} apprend\n{B_BUFF1}!");
static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Vous avez battu\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} se rapproche de\n{B_OPPONENT_MON1_NAME}!");
static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} ne peut pas\nsapprocher plus!");
static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} surveille\nattentivement!");
static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} est intéressé par\n{B_BUFF1}!");
static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} est captivé par\n{B_BUFF1}!");
static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} ignore complètement\n{B_BUFF1}!");
static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} lance un {POKEBLOCK}\nà {B_OPPONENT_MON1_NAME}!");
static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNONCEUR: Vous navez plus de\nSAFARI BALLS! Perdu!\p");
static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
static const u8 sText_WildPkmnAppeared[] = _("Un {B_OPPONENT_MON1_NAME} sauvage apparaît!\p");
static const u8 sText_LegendaryPkmnAppeared[] = _("Un {B_OPPONENT_MON1_NAME} sauvage apparaît!\p");
static const u8 sText_WildPkmnAppearedPause[] = _("Un {B_OPPONENT_MON1_NAME} sauvage apparaît!{PAUSE 127}");
static const u8 sText_TwoWildPkmnAppeared[] = _("Un {B_OPPONENT_MON2_NAME} et un {B_OPPONENT_MON1_NAME}\nsauvages apparaissent!\p");
static const u8 sText_Trainer1WantsToBattle[] = _("Un combat est lancé\npar {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nveut se battre!");
static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} et {B_LINK_OPPONENT2_NAME}\nveulent se battre!");
static const u8 sText_Trainer1SentOutPkmn[] = _("{B_OPPONENT_MON1_NAME} est envoyé par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_OPPONENT_MON1_NAME} et {B_OPPONENT_MON2_NAME} sont\nenvoyés par\l{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_BUFF1} est envoyé par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} envoie\n{B_OPPONENT_MON1_NAME}!");
static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} envoie\n{B_OPPONENT_MON1_NAME} et {B_OPPONENT_MON2_NAME}!");
static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} envoie\n{B_LINK_OPPONENT_MON1_NAME}!\p{B_LINK_OPPONENT2_NAME} envoie\n{B_LINK_OPPONENT_MON2_NAME}!");
static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} envoie\n{B_BUFF1}!");
static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} envoie\n{B_BUFF1}!");
static const u8 sText_GoPkmn[] = _("{B_PLAYER_MON1_NAME}! Go!");
static const u8 sText_GoTwoPkmn[] = _("{B_PLAYER_MON1_NAME} et\n{B_PLAYER_MON2_NAME}! Go!");
static const u8 sText_GoPkmn2[] = _("{B_BUFF1}! Go!");
static const u8 sText_DoItPkmn[] = _("{B_BUFF1}! Fonce!");
static const u8 sText_GoForItPkmn[] = _("En avant, {B_BUFF1}!");
static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Lennemi est faible!\nAttaque, {B_BUFF1}!");
static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} envoie\n{B_LINK_PLAYER_MON2_NAME}!\p{B_LINK_PLAYER_MON1_NAME}! Go!");
static const u8 sText_PkmnThatsEnough[] = _("Ça suffit, {B_BUFF1}!\nReviens!");
static const u8 sText_PkmnComeBack[] = _("Reviens, {B_BUFF1}!");
static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nReviens!");
static const u8 sText_PkmnGoodComeBack[] = _("Bien, {B_BUFF1}!\nReviens!");
static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_BUFF1} est retiré par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} retire\n{B_BUFF1}!");
static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} retire\n{B_BUFF1}!");
static const u8 sText_WildPkmnPrefix[] = _(" sauvage");
static const u8 sText_FoePkmnPrefix[] = _(" ennemi");
static const u8 sText_EmptyString8[] = _("");
static const u8 sText_FoePkmnPrefix2[] = _("ennemi");
static const u8 sText_AllyPkmnPrefix[] = _("ami");
static const u8 sText_FoePkmnPrefix3[] = _("ennemi");
static const u8 sText_AllyPkmnPrefix2[] = _("ami");
static const u8 sText_FoePkmnPrefix4[] = _("ennemi");
static const u8 sText_AllyPkmnPrefix3[] = _("ami");
static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} utilise\n{B_BUFF2}");
static const u8 sText_ExclamationMark[] = _("!");
static const u8 sText_ExclamationMark2[] = _("!");
static const u8 sText_ExclamationMark3[] = _("!");
static const u8 sText_ExclamationMark4[] = _("!");
static const u8 sText_ExclamationMark5[] = _("!");
static const u8 sText_HP2[] = _("PV");
static const u8 sText_Attack2[] = _("ATTAQUE");
static const u8 sText_Defense2[] = _("DEFENSE");
static const u8 sText_Speed[] = _("VITESSE");
static const u8 sText_SpAtk2[] = _("ATQ SP");
static const u8 sText_SpDef2[] = _("DEF SP");
static const u8 sText_Accuracy[] = _("précision");
static const u8 sText_Evasiveness[] = _("esquive");
#endif
const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
{
@@ -443,11 +827,19 @@ const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
[STAT_EVASION] = sText_Evasiveness,
};
#if ENGLISH
static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
static const u8 sText_PokeblockWasTooDry[] = _("was too dry!");
static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
#elif FRENCH
static const u8 sText_PokeblockWasTooSpicy[] = _("était trop épicée!");
static const u8 sText_PokeblockWasTooDry[] = _("était trop sèche!");
static const u8 sText_PokeblockWasTooSweet[] = _("était trop sucrée!");
static const u8 sText_PokeblockWasTooBitter[] = _("était trop amère!");
static const u8 sText_PokeblockWasTooSour[] = _("était trop acide!");
#endif
const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
{
@@ -457,7 +849,7 @@ const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
[FLAVOR_BITTER] = sText_PokeblockWasTooBitter,
[FLAVOR_SOUR] = sText_PokeblockWasTooSour
};
#if ENGLISH
static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!");
static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
@@ -497,6 +889,47 @@ static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse o
static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
const u8 gText_EmptyString3[] = _("");
static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!");
#elif FRENCH
static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} utilise\n{B_LAST_ITEM}!");
static const u8 sText_WallyUsedItem[] = _("TIMMY utilise\n{B_LAST_ITEM}!");
static const u8 sText_Trainer1UsedItem[] = _("{B_LAST_ITEM} est utilisé(e) par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
static const u8 sText_TrainerBlockedBall[] = _("Le DRESSEUR détourne la BALL!");
static const u8 sText_DontBeAThief[] = _("Voler, cest mal!");
static const u8 sText_ItDodgedBall[] = _("Il a évité la BALL!\nCe POKéMON ne se laisse pas faire!");
static const u8 sText_YouMissedPkmn[] = _("Vous manquez le POKéMON!");
static const u8 sText_PkmnBrokeFree[] = _("Oh, non!\nLe POKéMON sest libéré!");
static const u8 sText_ItAppearedCaught[] = _("Raaah!\nÇa y était presque!");
static const u8 sText_AarghAlmostHadIt[] = _("Aaaaaah!\nPresque!");
static const u8 sText_ShootSoClose[] = _("Mince!\nÇa y était presque!");
static const u8 sText_GotchaPkmnCaught[] = _("Et hop!\n{B_OPPONENT_MON1_NAME} est attrapé!{WAIT_SE}{PLAY_BGM}{0x60}À\p");
static const u8 sText_GotchaPkmnCaught2[] = _("Et hop!\n{B_OPPONENT_MON1_NAME} est attrapé!{WAIT_SE}{PLAY_BGM}{0x60}À{PAUSE 127}");
static const u8 sText_GiveNicknameCaptured[] = _("Donner un surnom au\n{B_OPPONENT_MON1_NAME} capturé?");
static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} est envoyé au\nPC {B_PC_CREATOR_NAME}.");
static const u8 sText_Someones[] = _("de quelquun");
static const u8 sText_Lanettes[] = _("dANNETTE");
static const u8 sText_PkmnDataAddedToDex[] = _("Les données de {B_OPPONENT_MON1_NAME} sont\najoutées au POKéDEX.\p");
static const u8 sText_ItIsRaining[] = _("Il pleut.");
static const u8 sText_SandstormIsRaging[] = _("La tempête de sable\nfait rage.");
static const u8 sText_BoxIsFull[] = _("La BOITE est pleine!\nVous ne pouvez plus rien attraper!\p");
static const u8 sText_EnigmaBerry[] = _("BAIE ENIGMA");
static const u8 sText_BerrySuffix[] = _("BAIE {B_COPY_VAR_3}");
static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle sort de sa paralysie!");
static const u8 sText_PkmnsItemCuredPoison[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle guérit de son empoisonnement!");
static const u8 sText_PkmnsItemHealedBurn[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle guérit de sa brûlure!");
static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle dégèle!");
static const u8 sText_PkmnsItemWokeIt[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle sort de son sommeil!");
static const u8 sText_PkmnsItemSnappedOut[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nle tire de sa confusion!");
static const u8 sText_PkmnsItemCuredProblem[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nguérit son problème de {B_BUFF1}!");
static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nramène son statut à la normale!");
static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nrestaure son énergie!");
static const u8 sText_PkmnsItemRestoredPP[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nrestaure les PP de {B_BUFF1}!");
static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nrestaure son statut!");
static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_LAST_ITEM} du {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nrestaure un peu ses PV!");
static const u8 sText_ItemAllowsOnlyYMove[] = _("Avec {B_LAST_ITEM}, seule la capacité\n{B_CURRENT_MOVE} peut être utilisée!\p");
static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} tient bon grâce\nà {B_LAST_ITEM}!");
const u8 gText_EmptyString3[] = _("");
static const u8 sText_YouThrowABallNowRight[] = _("Il faut lancer une BALL, non?\nJe… je ferai de mon mieux!");
#endif
// early declaration of strings
static const u8 sText_PkmnIncapableOfPower[];
@@ -739,7 +1172,7 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S
[STRINGID_STARTEDTORAIN - BATTLESTRINGS_TABLE_START] = sText_StartedToRain,
[STRINGID_DOWNPOURSTARTED - BATTLESTRINGS_TABLE_START] = sText_DownpourStarted,
[STRINGID_RAINCONTINUES - BATTLESTRINGS_TABLE_START] = sText_RainContinues,
[STRINGID_DOWNPOURCONTINUES - BATTLESTRINGS_TABLE_START] = sText_DownpourContinues,
[STRINGID_DOWNPOURCONTINUES - BATTLESTRINGS_TABLE_START] = sText_DownpourContinues, // Unused
[STRINGID_RAINSTOPPED - BATTLESTRINGS_TABLE_START] = sText_RainStopped,
[STRINGID_SANDSTORMBREWED - BATTLESTRINGS_TABLE_START] = sText_SandstormBrewed,
[STRINGID_SANDSTORMRAGES - BATTLESTRINGS_TABLE_START] = sText_SandstormRages,
@@ -1264,6 +1697,7 @@ const u16 gTrappingMoves[NUM_TRAPPING_MOVES + 1] =
0xFFFF // Never read
};
#if ENGLISH
const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p");
const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p");
@@ -1291,6 +1725,35 @@ static const u8 sText_Attack[] = _("ATTACK");
static const u8 sText_Defense[] = _("DEFENSE");
static const u8 sText_SpAtk[] = _("SP. ATK");
static const u8 sText_SpDef[] = _("SP. DEF");
#elif FRENCH
const u8 gText_PkmnIsEvolving[] = _("Quoi?\n{B_COPY_VAR_1} évolue!");
const u8 gText_CongratsPkmnEvolved[] = _("Félicitations! Votre {B_COPY_VAR_1}\névolue en {B_COPY_VAR_2}!{WAIT_SE}\p");
const u8 gText_PkmnStoppedEvolving[] = _("Hein? {B_COPY_VAR_1}\nnévolue plus!\p");
const u8 gText_EllipsisQuestionMark[] = _("……?\p");
const u8 gText_WhatWillPkmnDo[] = _("Que doit faire\n{B_ACTIVE_NAME_WITH_PREFIX}?");
const u8 gText_WhatWillPkmnDo2[] = _("Que doit faire\n{B_PLAYER_NAME}?");
const u8 gText_WhatWillWallyDo[] = _("Que doit faire\nTIMMY?");
const u8 gText_LinkStandby[] = _("{PAUSE 16}Connexion en cours…");
const u8 gText_BattleMenu[] = _("ATTAQUE{CLEAR_TO 56}SAC\nPOKéMON{CLEAR_TO 56}FUITE");
const u8 gText_SafariZoneMenu[] = _("BALL{CLEAR_TO 56}{POKEBLOCK}\nSE RAP.{CLEAR_TO 56}FUITE");
const u8 gText_MoveInterfacePP[] = _("PP ");
const u8 gText_MoveInterfaceType[] = _("TYPE/");
const u8 gText_MoveInterfacePpType[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}PP\nTYPE/");
const u8 gText_MoveInterfaceDynamicColors[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}");
const u8 gText_WhichMoveToForget4[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Which move should\nbe forgotten?");
const u8 gText_BattleYesNoChoice[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}OUI\nNON");
const u8 gText_BattleSwitchWhich[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}Changer\nlequel?");
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[] = _("-");
static const u8 sText_HP[] = _("PV");
static const u8 sText_Attack[] = _("ATTAQUE");
static const u8 sText_Defense[] = _("DEFENSE");
static const u8 sText_SpAtk[] = _("ATQ SP");
static const u8 sText_SpDef[] = _("DEF SP");
#endif
// Unused
static const u8 * const sStatNamesTable2[] =
@@ -1298,7 +1761,7 @@ static const u8 * const sStatNamesTable2[] =
sText_HP, sText_SpAtk, sText_Attack,
sText_SpDef, sText_Defense, sText_Speed
};
#if ENGLISH
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS");
const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GRAY}Left: $" "{HIGHLIGHT DARK_GRAY}");
const u8 gText_Sleep[] = _("sleep");
@@ -1351,6 +1814,60 @@ static const u8 sText_Round1[] = _("Round 1");
static const u8 sText_Round2[] = _("Round 2");
static const u8 sText_Semifinal[] = _("Semifinal");
static const u8 sText_Final[] = _("Final");
#elif FRENCH
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS");
const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GRAY}Nb: $" "{HIGHLIGHT DARK_GRAY}");
const u8 gText_Sleep[] = _("sommeil");
const u8 gText_Poison[] = _("poison");
const u8 gText_Burn[] = _("brûlure");
const u8 gText_Paralysis[] = _("paralysie");
const u8 gText_Ice[] = _("gel");
const u8 gText_Confusion[] = _("confusion");
const u8 gText_Love[] = _("cœur");
const u8 gText_SpaceAndSpace[] = _(" et ");
const u8 gText_CommaSpace[] = _(", ");
const u8 gText_Space2[] = _(" ");
const u8 gText_LineBreak[] = _("\l");
const u8 gText_NewLine[] = _("\n");
const u8 gText_Are[] = _("sont");
const u8 gText_Are2[] = _("sont");
const u8 gText_BadEgg[] = _("Mauv. OEUF");
const u8 gText_BattleWallyName[] = _("TIMMY");
const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Victoire");
const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Défaite");
const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Egalité");
static const u8 sText_SpaceIs[] = _(" est");
static const u8 sText_ApostropheS[] = _("de ");
// For displaying names of invalid moves
static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][22] =
{
[TYPE_NORMAL] = _("une capacité NORMAL"),
[TYPE_FIGHTING] = _("une capacité COMBAT"),
[TYPE_FLYING] = _("une capacité VOL"),
[TYPE_POISON] = _("une capacité POISON"),
[TYPE_GROUND] = _("une capacité SOL"),
[TYPE_ROCK] = _("une capacité ROCHE"),
[TYPE_BUG] = _("une capacité INSECTE"),
[TYPE_GHOST] = _("une capacité SPECTRE"),
[TYPE_STEEL] = _("une capacité ACIER"),
[TYPE_MYSTERY] = _("une capacité ???"),
[TYPE_FIRE] = _("une capacité FEU"),
[TYPE_WATER] = _("une capacité EAU"),
[TYPE_GRASS] = _("une capacité PLANTE"),
[TYPE_ELECTRIC] = _("une capacité ELECTRIK"),
[TYPE_PSYCHIC] = _("une capacité PSY"),
[TYPE_ICE] = _("une capacité GLACE"),
[TYPE_DRAGON] = _("une capacité DRAGON"),
[TYPE_DARK] = _("une capacité TENEBRES")
};
const u8 gText_BattleTourney[] = _("TOURNOI DE COMBAT");
static const u8 sText_Round1[] = _("Premier tour");
static const u8 sText_Round2[] = _("Deuxième tour");
static const u8 sText_Semifinal[] = _("Demi-finale");
static const u8 sText_Final[] = _("Finale");
#endif
const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] =
{
@@ -1359,12 +1876,12 @@ const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] =
[DOME_SEMIFINAL] = sText_Semifinal,
[DOME_FINAL] = sText_Final
};
const u8 gText_TheGreatNewHope[] = _("The great new hope!\p");
const u8 gText_WillChampionshipDreamComeTrue[] = _("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");
#if ENGLISH
static const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); // Unused
static const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); // Unused
static const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); // Unused
static const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); // Unused
static const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); // Unused
const u8 gText_PlayerMon1Name[] = _("{B_PLAYER_MON1_NAME}");
const u8 gText_Vs[] = _("VS");
const u8 gText_OpponentMon1Name[] = _("{B_OPPONENT_MON1_NAME}");
@@ -1383,6 +1900,31 @@ static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE
static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!");
static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
#elif FRENCH
static const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); // Unused
static const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); // Unused
static const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); // Unused
static const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); // Unused
static const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); // Unused
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[] = _("Mental");
const u8 gText_Skill[] = _("Technique");
const u8 gText_Body[] = _("Physique");
const u8 gText_Judgement[] = _("{B_BUFF1}{CLEAR 13}Jugement{CLEAR 13}{B_BUFF2}");
static const u8 sText_TwoTrainersSentPkmn[] = _("{B_OPPONENT_MON1_NAME} est envoyé par\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p{B_OPPONENT_MON2_NAME} est envoyé par\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!");
static const u8 sText_Trainer2SentOutPkmn[] = _("{B_BUFF1} est envoyé par\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!");
static const u8 sText_TwoTrainersWantToBattle[] = _("Un combat est lancé\npar {B_TRAINER1_CLASS} {B_TRAINER1_NAME} et\l{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p");
static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PLAYER_MON2_NAME} est envoyé par\n{B_PARTNER_CLASS} {B_PARTNER_NAME}!\p{B_PLAYER_MON1_NAME}! Go!");
static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} et\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lont perdu!\p");
static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}");
static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} est incapable\ndutiliser sa puissance!");
static const u8 sText_GlintAppearsInEye[] = _("Une lueur apparaît dans les\nyeux de {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} se met\nen position!");
static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} commence\nà grogner méchamment!");
static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} en veut encore!");
#endif
const u16 gBattlePalaceFlavorTextTable[] =
{
@@ -1391,7 +1933,7 @@ const u16 gBattlePalaceFlavorTextTable[] =
[B_MSG_GROWL_DEEPLY] = STRINGID_PKMNBEGANGROWLINGDEEPLY,
[B_MSG_EAGER_FOR_MORE] = STRINGID_PKMNEAGERFORMORE,
};
#if ENGLISH
static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
static const u8 sText_RefThatsIt[] = _("REFEREE: That's it! We will now go to\njudging to determine the winner!");
static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p");
@@ -1404,6 +1946,20 @@ static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defe
static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!");
static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!");
static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
#elif FRENCH
static const u8 sText_RefIfNothingIsDecided[] = _("ARBITRE: Si rien nest décidé en 3\ntours, nous donnerons notre jugement!");
static const u8 sText_RefThatsIt[] = _("ARBITRE: Nous allons maintenant\ndécider du vainqueur.");
static const u8 sText_RefJudgeMind[] = _("ARBITRE: Catégorie 1, le mental!\nLe POKéMON le plus agressif!\p");
static const u8 sText_RefJudgeSkill[] = _("ARBITRE: Catégorie 2, la technique!\nLe POKéMON qui maîtrise le mieux\lses capacités!\p");
static const u8 sText_RefJudgeBody[] = _("ARBITRE: Catégorie 3, le physique!\nLe POKéMON le plus résistant!\p");
static const u8 sText_RefPlayerWon[] = _("ARBITRE: Jugement: {B_BUFF1} à {B_BUFF2}! Le gagnant\nest le {B_PLAYER_MON1_NAME} de {B_PLAYER_NAME}!\p");
static const u8 sText_RefOpponentWon[] = _("ARBITRE: Jugement: {B_BUFF1} à {B_BUFF2}! Le gagnant \nest le {B_OPPONENT_MON1_NAME} de {B_TRAINER1_NAME}!\p");
static const u8 sText_RefDraw[] = _("ARBITRE: Jugement: 3 à 3!\nCest un match nul!\p");
static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} bat {B_OPPONENT_MON1_NAME} sur\ndécision de lARBITRE!");
static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} perd contre {B_OPPONENT_MON1_NAME}\nsur décision de lARBITRE!");
static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} est à égalité avec\n{B_OPPONENT_MON1_NAME} sur décision de lARBITRE!");
static const u8 sText_RefCommenceBattle[] = _("ARBITRE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommencez le combat!");
#endif
const u8 * const gRefereeStringsTable[] =
{
@@ -1417,7 +1973,7 @@ const u8 * const gRefereeStringsTable[] =
[B_MSG_REF_DRAW] = sText_RefDraw,
[B_MSG_REF_COMMENCE_BATTLE] = sText_RefCommenceBattle,
};
#if ENGLISH
static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?");
static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
@@ -1429,6 +1985,19 @@ const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\no
const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the FRONTIER PASS.");
static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!{PAUSE 49}");
static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!{PAUSE 49}");
#elif FRENCH
static const u8 sText_QuestionForfeitMatch[] = _("Voulez-vous abandonner et\nquitter le combat?");
static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} abandonne le match!");
static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
static const u8 sText_Trainer1Fled[] = _("{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
static const u8 sText_PlayerLostAgainstTrainer1[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} a\ngagné!");
static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Egalité avec \n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
const u8 gText_RecordBattleToPass[] = _("Voulez-vous enregistrer votre\ncombat sur le PASSE ZONE?");
const u8 gText_BattleRecordedOnPass[] = _("Le résultat de {B_PLAYER_NAME} est\nenregistré sur le PASSE ZONE.");
static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nveut se battre!{PAUSE 49}");
static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} et {B_LINK_OPPONENT2_NAME}\nveulent se battre!{PAUSE 49}");
#endif
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail.
@@ -1472,7 +2041,11 @@ static const u16 sGrammarMoveUsedTable[] =
MOVE_COVET, 0
};
#if ENGLISH
static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0};
#elif FRENCH
static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS};
#endif
static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
{
@@ -2058,6 +2631,10 @@ void BufferStringBattle(u16 stringID)
{
s32 i;
const u8 *stringPtr = NULL;
#if FRENCH
u32 size;
u8 *txtBuff;
#endif
gBattleMsgDataPtr = (struct BattleMsgData *)(&gBattleBufferA[gActiveBattler][4]);
gLastUsedItem = gBattleMsgDataPtr->lastItem;
@@ -2343,7 +2920,71 @@ void BufferStringBattle(u16 stringID)
break;
}
#if ENGLISH
BattleStringExpandPlaceholdersToDisplayedString(stringPtr);
#elif FRENCH
// This swaps Team's Aqua/Magma class / name ; Team Aqua Grunt -> Grunt(Sbire in French) Team Aqua
size = StringLength(stringPtr) + 1;
txtBuff = Alloc(size);
memcpy(txtBuff, stringPtr, size);
if (!(gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
&& gTrainerBattleOpponent_A != TRAINER_UNION_ROOM && gTrainerBattleOpponent_A != TRAINER_FRONTIER_BRAIN
&& !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL)))
{
u8 *toSwap, *txt;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A < TRAINERS_COUNT)
{
if (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_TEAM_MAGMA || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_TEAM_AQUA)
{
toSwap = NULL, txt = txtBuff;
while (*txt != EOS)
{
if (*txt == PLACEHOLDER_BEGIN)
{
txt++;
if (*txt == B_TXT_TRAINER1_CLASS)
{
toSwap = txt;
}
else if (*txt == B_TXT_TRAINER1_NAME && toSwap != NULL)
{
*toSwap = B_TXT_TRAINER1_NAME;
*txt = B_TXT_TRAINER1_CLASS;
}
}
txt++;
}
}
}
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && gTrainerBattleOpponent_B < TRAINERS_COUNT)
{
if (gTrainers[gTrainerBattleOpponent_B].trainerClass == TRAINER_CLASS_TEAM_MAGMA || gTrainers[gTrainerBattleOpponent_B].trainerClass == TRAINER_CLASS_TEAM_AQUA)
{
toSwap = NULL, txt = txtBuff;
while (*txt != EOS)
{
if (*txt == PLACEHOLDER_BEGIN)
{
txt++;
if (*txt == B_TXT_TRAINER2_CLASS)
{
toSwap = txt;
}
else if (*txt == B_TXT_TRAINER2_NAME && toSwap != NULL)
{
*toSwap = B_TXT_TRAINER2_NAME;
*txt = B_TXT_TRAINER2_CLASS;
}
}
txt++;
}
}
}
}
BattleStringExpandPlaceholdersToDisplayedString(txtBuff);
Free(txtBuff);
#endif
}
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src)
@@ -2381,6 +3022,7 @@ static const u8 *TryGetStatusString(u8 *src)
return NULL;
}
#if ENGLISH
#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
{ \
@@ -2402,6 +3044,28 @@ static const u8 *TryGetStatusString(u8 *src)
} \
StringGet_Nickname(text); \
toCpy = text;
#elif FRENCH
// wild Pokemon -> Pokemon wild
#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
{ \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
toCpy = sText_FoePkmnPrefix; \
else \
toCpy = sText_WildPkmnPrefix; \
\
GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
StringGet_Nickname(text); \
StringAppend(text, toCpy); \
} \
else \
{ \
GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
StringGet_Nickname(text); \
} \
\
toCpy = text;
#endif
u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
@@ -2556,6 +3220,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
#if ENGLISH
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
if ((gBattleScripting.multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE))
@@ -2581,6 +3246,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
else
toCpy = sText_EnigmaBerry;
}
#elif FRENCH
CopyItemName(gLastUsedItem, text);
toCpy = text;
#endif
}
else
{
@@ -2610,6 +3279,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
#if ENGLISH
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
@@ -2625,6 +3295,32 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
else
toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass];
break;
#elif FRENCH
{
s32 gender = -1, trClass;
const u8 *trName = NULL;
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
trClass = GetSecretBaseTrainerClass();
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
trClass = GetUnionRoomTrainerClass();
else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
trClass = GetFrontierBrainTrainerClass();
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
trClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A), gender = IsFrontierTrainerFemale(gTrainerBattleOpponent_A);
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
trClass = GetTrainerHillOpponentClass(gTrainerBattleOpponent_A);
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
trClass = GetEreaderTrainerClassId();
else
{
trClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
gender = gTrainers[gTrainerBattleOpponent_A].encounterMusic_gender & 0x7F;
trName = gTrainers[gTrainerBattleOpponent_A].trainerName;
}
toCpy = GetTrainerClassNameGenderSpecific(trClass, gender, trName);
break;
}
#endif
case B_TXT_TRAINER1_NAME: // trainer1 name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
{
@@ -2758,6 +3454,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_TRAINER2_CLASS:
#if ENGLISH
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_B)];
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
@@ -2765,6 +3462,24 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
else
toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_B].trainerClass];
break;
#elif FRENCH
{
s32 gender = -1, trClass;
const u8 *trName = NULL;
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
trClass = GetFrontierOpponentClass(gTrainerBattleOpponent_B), gender = IsFrontierTrainerFemale(gTrainerBattleOpponent_B);
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
trClass = GetTrainerHillOpponentClass(gTrainerBattleOpponent_B);
else
{
trClass = gTrainers[gTrainerBattleOpponent_B].trainerClass;
gender = gTrainers[gTrainerBattleOpponent_B].encounterMusic_gender & 0x7F;
trName = gTrainers[gTrainerBattleOpponent_B].trainerName;
}
toCpy = GetTrainerClassNameGenderSpecific(trClass, gender, trName);
break;
}
#endif
case B_TXT_TRAINER2_NAME:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
{
@@ -2810,8 +3525,17 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
break;
case B_TXT_PARTNER_CLASS:
#if ENGLISH
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)];
break;
#elif FRENCH
{
s32 trClass = GetFrontierOpponentClass(gPartnerTrainerId);
s32 gender = IsFrontierTrainerFemale(gPartnerTrainerId);
toCpy = GetTrainerClassNameGenderSpecific(trClass, gender, NULL);
break;
}
#endif
case B_TXT_PARTNER_NAME:
GetFrontierTrainerName(text, gPartnerTrainerId);
toCpy = text;
@@ -2862,6 +3586,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
case B_BUFF_STRING: // battle string
hword = T1_READ_16(&src[srcID + 1]);
#if FRENCH
if (hword == STRINGID_STATSHARPLY || hword == STRINGID_STATHARSHLY)
srcID += 3;
#endif
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_TABLE_START]);
srcID += 3;
break;
@@ -2890,6 +3618,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
srcID += 2;
break;
case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix
#if ENGLISH
if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
{
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
@@ -2905,6 +3634,23 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
}
StringGet_Nickname(text);
StringAppend(dst, text);
#elif FRENCH
if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
{
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
StringGet_Nickname(text);
StringAppend(dst, text);
}
else
{
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
StringGet_Nickname(dst);
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
StringAppend(dst, sText_FoePkmnPrefix);
else
StringAppend(dst, sText_WildPkmnPrefix);
}
#endif
srcID += 3;
break;
case B_BUFF_STAT: // stats
@@ -2937,6 +3683,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
if (hword == ITEM_ENIGMA_BERRY)
{
#if ENGLISH
if (gLinkPlayers[gBattleScripting.multiplayerId].id == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
@@ -2946,6 +3693,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
StringAppend(dst, sText_EnigmaBerry);
}
#elif FRENCH
CopyItemName(hword, dst);
#endif
}
else
{