From 4e137fb43c3c2e0e64c9c8cced2972e1535b980c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 2 Aug 2022 10:01:09 -0400 Subject: [PATCH] (55/654) src/battle_message.c and adjustments to Makefile --- .github/workflows/build.yml | 9 + Makefile | 52 +-- include/battle_message.h | 5 - include/config.h | 2 +- src/battle_message.c | 774 +++++++++++++++++++++++++++++++++++- 5 files changed, 800 insertions(+), 42 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 283e6f8fb5..8587e43d45 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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: | diff --git a/Makefile b/Makefile index e506f7e322..d342c51425 100644 --- a/Makefile +++ b/Makefile @@ -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) diff --git a/include/battle_message.h b/include/battle_message.h index cc18a13d22..a286aba877 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -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[]; diff --git a/include/config.h b/include/config.h index 6810580574..636841135c 100644 --- a/include/config.h +++ b/include/config.h @@ -20,7 +20,7 @@ #define ENGLISH 1 #endif -#ifdef ENGLISH +#if ENGLISH #define UNITS_IMPERIAL #else #define UNITS_METRIC diff --git a/src/battle_message.c b/src/battle_message.c index 677bb2fe38..9813ce295b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -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 d’apprendre\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 d’apprendre\n{B_BUFF2}?"); +static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} n’a 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\nl’attaque!"); +static const u8 sText_ItDoesntAffect[] = _("Ça n’affecte 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} n’a 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}\ns’endort!"); +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} n’est 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} n’est 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}\nn’ira pas plus haut!"); +static const u8 sText_StatsWontDecrease[] = _("Ah, {B_BUFF1} de {B_DEF_NAME_WITH_PREFIX}\nn’ira 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} n’est 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[] = _("L’amour empêche {B_ATK_NAME_WITH_PREFIX}\nd’attaquer!"); +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} n’est\nplus protégée par RUNE PROTECT!"); +static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} s’endort!"); +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é d’une\nlumière intense!"); +static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} s’envole!"); +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\nl’eau!"); +static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} bondit!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} est pris dans\nl’ETREINTE 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} s’entoure 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 l’attaque!"); +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} n’est 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} n’est 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\nd’un 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 l’ennemi!"); +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} s’enfuit!"); +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 l’attaque\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\nd’attention!"); +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 d’objet\navec l’autre 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} s’accroche\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 l’adversaire!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} veut que\nl’adversaire 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} s’entoure\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 n’a aucun effet!"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} n’a 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} d’utiliser 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}\nd’utiliser {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 l’empoisonnement!"); +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} s’accroche\navec {B_DEF_ABILITY}!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_ABILITY} du\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} réduit\ll’ATTAQUE 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 l’attaque!"); +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}\nn’iront pas plus haut!"); +static const u8 sText_StatsWontDecrease2[] = _("Les stats du {B_DEF_NAME_WITH_PREFIX}\nn’iront 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 d’oublier les\ncapacités CS maintenant.\p"); +static const u8 sText_NotVeryEffective[] = _("Ce n’est pas très efficace…"); +static const u8 sText_SuperEffective[] = _("C’est 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} s’enfuit!"); +static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} et\n{B_LINK_OPPONENT2_NAME} s’enfuient!"); +static const u8 sText_NoRunningFromTrainers[] = _("On ne s’enfuit pas d’un\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 s’est 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 s’affaiblissent."); +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 s’est 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 n’y a plus de PP pour\ncette capacité!\p"); +static const u8 sText_ButNoPPLeft[] = _("Mais il n’y 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} n’obé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\ns’approcher 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 n’avez 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[] = _("L’ennemi 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, c’est 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 s’est 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 quelqu’un"); +static const u8 sText_Lanettes[] = _("d’ANNETTE"); +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\nd’utiliser 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 n’est 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!\nC’est un match nul!\p"); +static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} bat {B_OPPONENT_MON1_NAME} sur\ndécision de l’ARBITRE!"); +static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} perd contre {B_OPPONENT_MON1_NAME}\nsur décision de l’ARBITRE!"); +static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} est à égalité avec\n{B_OPPONENT_MON1_NAME} sur décision de l’ARBITRE!"); +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 {