From 40419505f71217cf078eda831de8747dc4a3854f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 12 Apr 2025 18:55:31 +0200 Subject: [PATCH 01/13] Add clarification for underlying math in EV caps (#6580) --- src/caps.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/caps.c b/src/caps.c index 941509c2a4..f8e171c898 100644 --- a/src/caps.c +++ b/src/caps.c @@ -84,17 +84,16 @@ u32 GetSoftLevelCapExpValue(u32 level, u32 expValue) u32 GetCurrentEVCap(void) { - static const u16 sEvCapFlagMap[][2] = { // Define EV caps for each milestone - {FLAG_BADGE01_GET, 30}, - {FLAG_BADGE02_GET, 90}, - {FLAG_BADGE03_GET, 150}, - {FLAG_BADGE04_GET, 210}, - {FLAG_BADGE05_GET, 270}, - {FLAG_BADGE06_GET, 330}, - {FLAG_BADGE07_GET, 390}, - {FLAG_BADGE08_GET, 450}, + {FLAG_BADGE01_GET, MAX_TOTAL_EVS * 1 / 17}, + {FLAG_BADGE02_GET, MAX_TOTAL_EVS * 3 / 17}, + {FLAG_BADGE03_GET, MAX_TOTAL_EVS * 5 / 17}, + {FLAG_BADGE04_GET, MAX_TOTAL_EVS * 7 / 17}, + {FLAG_BADGE05_GET, MAX_TOTAL_EVS * 9 / 17}, + {FLAG_BADGE06_GET, MAX_TOTAL_EVS * 11 / 17}, + {FLAG_BADGE07_GET, MAX_TOTAL_EVS * 13 / 17}, + {FLAG_BADGE08_GET, MAX_TOTAL_EVS * 15 / 17}, {FLAG_IS_CHAMPION, MAX_TOTAL_EVS}, }; From 563e094ea8c30c9003a6b25be9e6b753e936db9d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 12 Apr 2025 18:56:30 +0200 Subject: [PATCH 02/13] Add clarification for EVO_SCRIPT_TRIGGER_DMG (#6579) --- include/constants/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index dc6d399acf..7c70129609 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -283,7 +283,7 @@ enum EvolutionMethods { EVO_LEVEL_NATURE_AMPED, // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. EVO_LEVEL_NATURE_LOW_KEY, // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. EVO_CRITICAL_HITS, // Pokémon performs specified number of critical hits in one battle - EVO_SCRIPT_TRIGGER_DMG, // Pokémon has specified HP below max, then player interacts trigger + EVO_SCRIPT_TRIGGER_DMG, // Pokémon has specified HP below max, then player interacts with script calling "tryspecialevo EVO_SCRIPT_TRIGGER_DMG" EVO_DARK_SCROLL, // interacts with Scroll of Darkness EVO_WATER_SCROLL, // interacts with Scroll of Waters EVO_ITEM_NIGHT, // specified item is used on Pokémon, is night From d173e42372a87af089f55eabcf3c76ce60c04d6f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 13 Apr 2025 11:22:14 +0200 Subject: [PATCH 03/13] Remove redundant AI defines (#6590) --- include/constants/battle_ai.h | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 8ba2c72096..dfc023676a 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -1,19 +1,6 @@ #ifndef GUARD_CONSTANTS_BATTLE_AI_H #define GUARD_CONSTANTS_BATTLE_AI_H -// battlers -#define AI_TARGET 0 -#define AI_USER 1 -#define AI_TARGET_PARTNER 2 -#define AI_USER_PARTNER 3 - -// get_type command -#define AI_TYPE1_TARGET 0 -#define AI_TYPE1_USER 1 -#define AI_TYPE2_TARGET 2 -#define AI_TYPE2_USER 3 -#define AI_TYPE_MOVE 4 - // AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts // See docs/ai_flags.md for more details. #define AI_FLAG_CHECK_BAD_MOVE (1 << 0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. From 353e4ae6191f6fc741ff83d93af8fab1270423f8 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:41:00 +0100 Subject: [PATCH 04/13] Fixes Dynamax reversion animation when fainting (#6597) --- data/battle_scripts_1.s | 3 +++ test/battle/gimmick/dynamax.c | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 20010ff1d8..a394ae30db 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9994,9 +9994,12 @@ BattleScript_DynamaxEnds:: BattleScript_DynamaxEnds_Ret:: flushtextbox + spriteignore0hp TRUE updatedynamax playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE waitanimation + spriteignore0hp FALSE + pause B_WAIT_TIME_SHORT return BattleScript_MoveBlockedByDynamax:: diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 988f19581d..abe5ee2814 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -68,6 +68,29 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax Level increases HP and max HP multipliers b } } +SINGLE_BATTLE_TEST("Dynamax: Dynamax expires when fainted") +{ + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (dynamax) + MESSAGE("Wobbuffet used Max Strike!"); + else + MESSAGE("Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + if (dynamax) // Expect to have visual reversion when fainting. + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Wobbuffet fainted!"); + } +} + SINGLE_BATTLE_TEST("Dynamax: Dynamax expires after three turns", u16 hp) { u32 dynamax; From f3c76e866b12ce4f65b0e58696c40d3cc7688889 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 13 Apr 2025 19:06:44 +0200 Subject: [PATCH 05/13] Fix potential compile error caused by sTeraIndicatorDataPtrs (#6599) --- src/data/graphics/gimmicks.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/graphics/gimmicks.h b/src/data/graphics/gimmicks.h index 483cf2218b..06cff2d48e 100644 --- a/src/data/graphics/gimmicks.h +++ b/src/data/graphics/gimmicks.h @@ -99,7 +99,7 @@ static const u16 sMiscIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mis static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); static const u16 sTeraIndicatorPal[] = INCBIN_U16("graphics/battle_interface/tera_indicator.gbapal"); -static const u8 *sTeraIndicatorDataPtrs[] = +static const u8 *const sTeraIndicatorDataPtrs[] = { sNormalIndicatorGfx, sNormalIndicatorGfx, From 3b53995691bb209a9fb8ac13c04dd22dae26fe05 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sun, 13 Apr 2025 15:04:58 -0400 Subject: [PATCH 06/13] Air Balloon AI tests (#6604) --- test/battle/ai/ai.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 1c57c88732..d11f146fc1 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -860,3 +860,34 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI considers Focus Sash when det TURN { MOVE(player, MOVE_AIR_SLASH); EXPECT_MOVE(opponent, MOVE_FLAMETHROWER); } } } + +AI_SINGLE_BATTLE_TEST("AI sees popped Air Balloon") +{ + GIVEN { + ASSUME(ItemId_GetHoldEffect(ITEM_AIR_BALLOON) == HOLD_EFFECT_AIR_BALLOON); + ASSUME(GetMoveType(MOVE_EARTHQUAKE) == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_TORCHIC) { Item(ITEM_AIR_BALLOON); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_GEODUDE) { Moves(MOVE_TACKLE, MOVE_EARTHQUAKE); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI sees popped Air Balloon after Air Balloon mon switches out and back in") +{ + GIVEN { + ASSUME(ItemId_GetHoldEffect(ITEM_AIR_BALLOON) == HOLD_EFFECT_AIR_BALLOON); + ASSUME(GetMoveType(MOVE_EARTHQUAKE) == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_TORCHIC) { Item(ITEM_AIR_BALLOON); Moves(MOVE_TACKLE); } + PLAYER(SPECIES_TORCHIC) { Item(ITEM_AIR_BALLOON); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_GEODUDE) { Moves(MOVE_TACKLE, MOVE_EARTHQUAKE); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); SEND_OUT(player, 1); } + } +} From 075efd36c1bd1aa7ef978fc2cd6424b833249497 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 13 Apr 2025 21:16:05 +0200 Subject: [PATCH 07/13] Big Root tests (#6601) --- test/battle/hold_effect/big_root.c | 80 ++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 test/battle/hold_effect/big_root.c diff --git a/test/battle/hold_effect/big_root.c b/test/battle/hold_effect/big_root.c new file mode 100644 index 0000000000..0b3d9b4af6 --- /dev/null +++ b/test/battle/hold_effect/big_root.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_BIG_ROOT].holdEffect == HOLD_EFFECT_BIG_ROOT); +} + +SINGLE_BATTLE_TEST("Big Root increases healing from absorbing moves", s16 damage, s16 heal) +{ + u32 item; + + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_BIG_ROOT; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + HP_BAR(player, captureDamage: &results[i].heal); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Damage is unaffected + EXPECT_MUL_EQ(results[1].heal, Q_4_12(5234 / 4096), results[0].heal); + } +} + +SINGLE_BATTLE_TEST("Big Root increases the damage restored from Leech Seed, Ingrain and Aqua Ring", s16 heal, s16 damage) +{ + KNOWN_FAILING; + + u32 item; + u32 move; + + PARAMETRIZE { item = ITEM_NONE; move = MOVE_LEECH_SEED; } + PARAMETRIZE { item = ITEM_BIG_ROOT; move = MOVE_LEECH_SEED; } + PARAMETRIZE { item = ITEM_NONE; move = MOVE_INGRAIN; } + PARAMETRIZE { item = ITEM_BIG_ROOT; move = MOVE_INGRAIN; } + PARAMETRIZE { item = ITEM_NONE; move = MOVE_AQUA_RING; } + PARAMETRIZE { item = ITEM_BIG_ROOT; move = MOVE_AQUA_RING; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (move == MOVE_LEECH_SEED) + HP_BAR(opponent, captureDamage: &results[i].damage); + HP_BAR(player, captureDamage: &results[i].heal); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Damage is unaffected + EXPECT_MUL_EQ(results[1].heal, Q_4_12(5234 / 4096), results[0].heal); + EXPECT_MUL_EQ(results[3].heal, Q_4_12(5234 / 4096), results[2].heal); + EXPECT_MUL_EQ(results[5].heal, Q_4_12(5234 / 4096), results[4].heal); + } +} + +SINGLE_BATTLE_TEST("Big Root increases damage from absorbing Liquid Ooze", s16 damage) +{ + u32 item; + + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_BIG_ROOT; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); Item(item); } + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(5234 / 4096), results[0].damage); + } +} From a4bfbea3cbb232c00883e33b4624bb063f338412 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 14 Apr 2025 00:17:10 +0200 Subject: [PATCH 08/13] Revert wrongly done Embody Aspect fix (#6607) --- include/battle.h | 1 - src/battle_util.c | 8 +++----- test/battle/ability/embody_aspect.c | 23 ----------------------- 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/include/battle.h b/include/battle.h index 30e7a13158..3e4907050b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -834,7 +834,6 @@ struct BattleStruct u8 usedMicleBerry; struct MessageStatus slideMessageStatus; u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT]; - u8 embodyAspectBoost[NUM_BATTLE_SIDES]; u16 savedMove; // backup current move for mid-turn switching, e.g. Red Card u16 opponentMonCanTera:6; u16 opponentMonCanDynamax:6; diff --git a/src/battle_util.c b/src/battle_util.c index b012b177e3..b9b43ab663 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4764,8 +4764,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_IMPOSTER: { - u32 diagonalBattler = BATTLE_OPPOSITE(battler); - if (IsDoubleBattle()) + u32 diagonalBattler = BATTLE_OPPOSITE(battler); + if (IsDoubleBattle()) diagonalBattler = BATTLE_PARTNER(diagonalBattler); if (IsBattlerAlive(diagonalBattler) && !(gBattleMons[diagonalBattler].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) @@ -5303,8 +5303,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK: case ABILITY_EMBODY_ASPECT_WELLSPRING_MASK: case ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK: - if (!gSpecialStatuses[battler].switchInAbilityDone - && !(gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) + if (!gSpecialStatuses[battler].switchInAbilityDone) { u32 stat; @@ -5323,7 +5322,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; SET_STATCHANGER(stat, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); effect++; diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index 22b28dea22..fffc8cf423 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -57,26 +57,3 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); } } - -SINGLE_BATTLE_TEST("Embody Aspect raises Speed only once per battle") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_OGERPON_TEAL_TERA) { Ability(ABILITY_EMBODY_ASPECT_TEAL_MASK); } - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { SWITCH(opponent, 1); } - TURN { SWITCH(opponent, 0); } - } SCENE { - ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); - NONE_OF { - ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); - } - } THEN { - EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); - } -} From cb98106db070e90d1e644d1362b12d0ba2a12f67 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 13 Apr 2025 22:49:38 -0300 Subject: [PATCH 09/13] Corrected Dexnav config related comment (#6610) --- include/config/dexnav.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/dexnav.h b/include/config/dexnav.h index 7b4e3ba285..7ef65ae9b4 100644 --- a/include/config/dexnav.h +++ b/include/config/dexnav.h @@ -19,7 +19,7 @@ #define DEXNAV_CHAIN_MAX 100 // maximum chain value -// hidden pokemon options - an approximation of values to due to lack of available data +// hidden pokemon options - an approximation of values due to lack of available data #define HIDDEN_MON_STEP_COUNT 100 // Look for hidden pokemon every x steps #define HIDDEN_MON_SEARCH_RATE 25 // x% chance of finding hidden pokemon every x steps #define HIDDEN_MON_PROBABILTY 15 // x% chance of finding hidden mon compared to regular encounter data From 40c5ad50433145ca7d615eceec0a6228ad745537 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 14 Apr 2025 17:07:59 +0200 Subject: [PATCH 10/13] Fix Magma Storm getting stuck (#6605) Co-authored-by: Hedara --- data/battle_anim_scripts.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4891c3ef53..09913a9e6f 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -3642,7 +3642,7 @@ gBattleAnimMove_MagmaStorm:: call FireSpinEffect restorebg waitbgfadeout - setarg 7, 0xFFFF + setarg 7, 0xFFF waitbgfadein clearmonbg ANIM_DEF_PARTNER blendoff @@ -28313,7 +28313,7 @@ Status_MagmaStorm: call FireSpinEffect restorebg waitbgfadeout - setarg 7, 0xFFFF + setarg 7, 0xFFF waitbgfadein stopsound clearmonbg ANIM_DEF_PARTNER From 3b05d7934fa84e98f5a4d960cd6f3f44a9f4dd05 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:17:24 +0100 Subject: [PATCH 11/13] Fixes wrong battler's Illusion wearing off when the Attacker faints and fixes Illusion tests (#6596) --- data/battle_scripts_1.s | 4 +-- src/battle_message.c | 2 +- src/battle_script_commands.c | 1 + src/battle_util.c | 30 ++++++++--------- test/battle/ability/illusion.c | 47 +++++++++++++++++++++++++++ test/battle/move_effect/ally_switch.c | 4 --- 6 files changed, 66 insertions(+), 22 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a394ae30db..e8224b25fa 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7030,9 +7030,9 @@ BattleScript_BattlerFormChangeWithStringEnd3:: BattleScript_IllusionOff:: spriteignore0hp TRUE - playanimation BS_TARGET, B_ANIM_ILLUSION_OFF + playanimation BS_SCRIPTING, B_ANIM_ILLUSION_OFF waitanimation - updatenick BS_TARGET + updatenick BS_SCRIPTING waitstate spriteignore0hp FALSE printstring STRINGID_ILLUSIONWOREOFF diff --git a/src/battle_message.c b/src/battle_message.c index 995f7756c6..7b02496ac7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -699,7 +699,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_AIRBALLOONPOP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"), [STRINGID_INCINERATEBURN] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} was burnt up!"), [STRINGID_BUGBITE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"), - [STRINGID_ILLUSIONWOREOFF] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s illusion wore off!"), + [STRINGID_ILLUSIONWOREOFF] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s illusion wore off!"), [STRINGID_ATTACKERCUREDTARGETSTATUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cured {B_DEF_NAME_WITH_PREFIX2}'s problem!"), [STRINGID_ATTACKERLOSTFIRETYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} burned itself out!"), [STRINGID_HEALERCURE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_NAME_WITH_PREFIX2}'s problem!"), diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3a2690fb55..ee367133dd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10178,6 +10178,7 @@ static void Cmd_various(void) VARIOUS_ARGS(); if (GetIllusionMonPtr(battler) != NULL) { + gBattleScripting.battler = battler; gBattlescriptCurrInstr = cmd->nextInstr; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_IllusionOff; diff --git a/src/battle_util.c b/src/battle_util.c index b9b43ab663..1597674c17 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6013,6 +6013,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_ILLUSION: if (gBattleStruct->illusion[gBattlerTarget].on && !gBattleStruct->illusion[gBattlerTarget].broken && IsBattlerTurnDamaged(gBattlerTarget)) { + gBattleScripting.battler = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_IllusionOff; effect++; @@ -11269,19 +11270,12 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battler) { struct Pokemon *party, *partnerMon; s32 i, id; - u8 side, partyCount; gBattleStruct->illusion[battler].set = 1; if (GetMonAbility(mon) != ABILITY_ILLUSION) return FALSE; party = GetBattlerParty(battler); - side = GetBattlerSide(battler); - partyCount = side == B_SIDE_PLAYER ? gPlayerPartyCount : gEnemyPartyCount; - - // If this pokemon is last in the party, ignore Illusion. - if (&party[partyCount - 1] == mon) - return FALSE; if (IsBattlerAlive(BATTLE_PARTNER(battler))) partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]; @@ -11294,15 +11288,21 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battler) id = i; if (GetMonData(&party[id], MON_DATA_SANITY_HAS_SPECIES) && GetMonData(&party[id], MON_DATA_HP) - && !GetMonData(&party[id], MON_DATA_IS_EGG) - && &party[id] != mon - && &party[id] != partnerMon) + && !GetMonData(&party[id], MON_DATA_IS_EGG)) { - gBattleStruct->illusion[battler].on = 1; - gBattleStruct->illusion[battler].broken = 0; - gBattleStruct->illusion[battler].partyId = id; - gBattleStruct->illusion[battler].mon = &party[id]; - return TRUE; + if (&party[id] != mon && &party[id] != partnerMon) + { + gBattleStruct->illusion[battler].on = 1; + gBattleStruct->illusion[battler].broken = 0; + gBattleStruct->illusion[battler].partyId = id; + gBattleStruct->illusion[battler].mon = &party[id]; + return TRUE; + } + else if (&party[id] == mon) + { + // If this pokemon is last in the party, ignore Illusion. + return FALSE; + } } } diff --git a/test/battle/ability/illusion.c b/test/battle/ability/illusion.c index ca3bcb2ee0..8afe89817d 100644 --- a/test/battle/ability/illusion.c +++ b/test/battle/ability/illusion.c @@ -22,3 +22,50 @@ SINGLE_BATTLE_TEST("Illusion can only imitate Normal Form terapagos") TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } } } + +SINGLE_BATTLE_TEST("Illusion breaks if the target faints") +{ + GIVEN { + PLAYER(SPECIES_ZOROARK) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, player); + MESSAGE("Zoroark's illusion wore off!"); + } +} + +SINGLE_BATTLE_TEST("Illusion breaks if the attacker faints") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FINAL_GAMBIT) == EFFECT_FINAL_GAMBIT); + PLAYER(SPECIES_ZOROARK) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FINAL_GAMBIT); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FINAL_GAMBIT, player); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, player); + MESSAGE("Zoroark's illusion wore off!"); + } +} + +SINGLE_BATTLE_TEST("Illusion cannot imitate if the user is on the last slot") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ZOROARK); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); } + } THEN { + EXPECT_EQ(player->species, SPECIES_ZOROARK); + EXPECT_EQ(gBattleStruct->illusion[0].on, FALSE); // Battler is Zoroark and not Illusioned + } +} diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index 7222f34587..520de60106 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -277,11 +277,8 @@ DOUBLE_BATTLE_TEST("Ally switch swaps opposing sky drop targets if partner is be } } -// Test passes in isolation but fails on CI -/* DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") { - KNOWN_FAILING; // Test passes in isolation but fails on CI GIVEN { ASSUME(GetMoveEffect(MOVE_ALLY_SWITCH) == EFFECT_ALLY_SWITCH); PLAYER(SPECIES_HOOPA); @@ -295,7 +292,6 @@ DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") EXPECT(&gPlayerParty[2] == gBattleStruct->illusion[0].mon); } } -*/ // Triple Battles required to test //TO_DO_BATTLE_TEST("Ally Switch fails if the user is in the middle of the field in a Triple Battle"); From 8ff081655a079612cb3ad1f50356a8aabf6706c5 Mon Sep 17 00:00:00 2001 From: sayseong <70845428+sayseong@users.noreply.github.com> Date: Tue, 15 Apr 2025 21:37:39 +0800 Subject: [PATCH 12/13] Update union_room.h --- src/data/union_room.h | 438 +++++++++++++++++++++--------------------- 1 file changed, 219 insertions(+), 219 deletions(-) diff --git a/src/data/union_room.h b/src/data/union_room.h index 42c02c5a58..e4694884ab 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -1,11 +1,11 @@ ALIGNED(4) static const u8 sText_EmptyString[] = _(""); ALIGNED(4) static const u8 sText_Colon[] = _(":"); ALIGNED(4) static const u8 sText_ID[] = _("{ID}"); -ALIGNED(4) static const u8 sText_PleaseStartOver[] = _("Please start over from the beginning."); -ALIGNED(4) static const u8 sText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); -ALIGNED(4) static const u8 sText_AwaitingCommunucation2[] = _("Awaiting communication\nfrom another player."); // Unused -ALIGNED(4) static const u8 sText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); -ALIGNED(4) static const u8 sText_AwaitingLinkPressStart[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); +ALIGNED(4) static const u8 sText_PleaseStartOver[] = _("请从起始的地方开始。"); +ALIGNED(4) static const u8 sText_WirelessSearchCanceled[] = _("无线通讯\n系统搜索被取消了。"); +ALIGNED(4) static const u8 sText_AwaitingCommunucation2[] = _("等待其他\n选手的通信。"); // Unused +ALIGNED(4) static const u8 sText_AwaitingCommunication[] = _("{STR_VAR_1}!等待\n其他选手的通信。"); +ALIGNED(4) static const u8 sText_AwaitingLinkPressStart[] = _("{STR_VAR_1}!等待连接!\n当所有人准备完毕后按开始键。"); ALIGNED(4) static const u8 sJPText_SingleBattle[] = _("シングルバトルを かいさいする"); ALIGNED(4) static const u8 sJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); ALIGNED(4) static const u8 sJPText_MultiBattle[] = _("マルチバトルを かいさいする"); @@ -38,14 +38,14 @@ static const u8 *const sJPLinkGroupActionTexts[] = { sJPText_HoldSpinShop }; -static const u8 sText_1PlayerNeeded[] = _("1 player\nneeded."); -static const u8 sText_2PlayersNeeded[] = _("2 players\nneeded."); -static const u8 sText_3PlayersNeeded[] = _("3 players\nneeded."); -static const u8 sText_4PlayersNeeded[] = _("4 players\nneeded."); -static const u8 sText_2PlayerMode[] = _("2-PLAYER\nMODE"); -static const u8 sText_3PlayerMode[] = _("3-PLAYER\nMODE"); -static const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE"); -static const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE"); +static const u8 sText_1PlayerNeeded[] = _("需要\n1个玩家。"); +static const u8 sText_2PlayersNeeded[] = _("需要\n2个玩家。"); +static const u8 sText_3PlayersNeeded[] = _("需要\n3个玩家。"); +static const u8 sText_4PlayersNeeded[] = _("需要\n4个玩家。"); +static const u8 sText_2PlayerMode[] = _("2个玩家\n模式"); +static const u8 sText_3PlayerMode[] = _("3个玩家\n模式"); +static const u8 sText_4PlayerMode[] = _("4个玩家\n模式"); +static const u8 sText_5PlayerMode[] = _("5个玩家\n模式"); static const u8 *const sPlayersNeededOrModeTexts[][5] = { // 2 players required @@ -85,38 +85,38 @@ static const u8 *const sPlayersNeededOrModeTexts[][5] = { } }; -ALIGNED(4) static const u8 sText_BButtonCancel[] = _("{B_BUTTON}CANCEL"); +ALIGNED(4) static const u8 sText_BButtonCancel[] = _("{B_BUTTON}取消"); ALIGNED(4) static const u8 sJPText_SearchingForParticipants[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); // Unused, may have been cut off -ALIGNED(4) static const u8 sText_PlayerContactedYouForXAccept[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); -ALIGNED(4) static const u8 sText_PlayerContactedYouShareX[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); -ALIGNED(4) static const u8 sText_PlayerContactedYouAddToMembers[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); -ALIGNED(4) static const u8 sText_AreTheseMembersOK[] = _("{STR_VAR_1}!\nAre these members OK?"); -ALIGNED(4) static const u8 sText_CancelModeWithTheseMembers[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); -ALIGNED(4) static const u8 sText_AnOKWasSentToPlayer[] = _("An “OK” was sent\nto {STR_VAR_1}."); -ALIGNED(4) static const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER doesn't appear\nto be available now…\p"); -ALIGNED(4) static const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); -ALIGNED(4) static const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); +ALIGNED(4) static const u8 sText_PlayerContactedYouForXAccept[] = _("{STR_VAR_2}想要与你连接\n\n{STR_VAR_1}接受吗?"); +ALIGNED(4) static const u8 sText_PlayerContactedYouShareX[] = _("{STR_VAR_2}连接上了你。\n想要交换{STR_VAR_1}?"); +ALIGNED(4) static const u8 sText_PlayerContactedYouAddToMembers[] = _("{STR_VAR_2}连接上了你。\n添加到成员?"); +ALIGNED(4) static const u8 sText_AreTheseMembersOK[] = _("{STR_VAR_1}!\n这些成员可以吗?"); +ALIGNED(4) static const u8 sText_CancelModeWithTheseMembers[] = _("取消和其他成员的\n{STR_VAR_1}模式"); +ALIGNED(4) static const u8 sText_AnOKWasSentToPlayer[] = _("已向\n{STR_VAR_1}提交确认。"); // 待定 +ALIGNED(4) static const u8 sText_OtherTrainerUnavailableNow[] = _("其他训练师好像\n现在不可见…\p"); +ALIGNED(4) static const u8 sText_CantTransmitTrainerTooFar[] = _(" 你不能和一个太远的\n训练师进行通信。\p"); +ALIGNED(4) static const u8 sText_TrainersNotReadyYet[] = _("其他训练师没有\n准备好。\p"); static const u8 *const sCantTransmitToTrainerTexts[] = { [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar, [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet }; -ALIGNED(4) static const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); -ALIGNED(4) static const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); +ALIGNED(4) static const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("和其他成员的{STR_VAR_1}模式\n将要被取消。{PAUSE 60}"); +ALIGNED(4) static const u8 sText_MemberNoLongerAvailable[] = _("对方好像不太方便……\p"); static const u8 *const sPlayerUnavailableTexts[] = { sText_OtherTrainerUnavailableNow, sText_MemberNoLongerAvailable }; -ALIGNED(4) static const u8 sText_TrainerAppearsUnavailable[] = _("The other TRAINER appears\nunavailable…\p"); -ALIGNED(4) static const u8 sText_PlayerSentBackOK[] = _("{STR_VAR_1} sent back an “OK”!"); -ALIGNED(4) static const u8 sText_PlayerOKdRegistration[] = _("{STR_VAR_1} OK'd your registration as\na member."); -ALIGNED(4) static const u8 sText_PlayerRepliedNo[] = _("{STR_VAR_1} replied, “No…”\p"); -ALIGNED(4) static const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting other members!"); -ALIGNED(4) static const u8 sText_QuitBeingMember[] = _("Quit being a member?"); -ALIGNED(4) static const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); +ALIGNED(4) static const u8 sText_TrainerAppearsUnavailable[] = _("其他训练师\n断开了…\p"); +ALIGNED(4) static const u8 sText_PlayerSentBackOK[] = _("{STR_VAR_1}回复“是”!"); +ALIGNED(4) static const u8 sText_PlayerOKdRegistration[] = _("{STR_VAR_1}确认被你登录为\n成员。"); +ALIGNED(4) static const u8 sText_PlayerRepliedNo[] = _("{STR_VAR_1}回复,“否…”\p"); +ALIGNED(4) static const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\n等待其他成员!"); +ALIGNED(4) static const u8 sText_QuitBeingMember[] = _("取消加入?"); +ALIGNED(4) static const u8 sText_StoppedBeingMember[] = _("你停止加入。\p"); static const u8 *const sPlayerDisconnectedTexts[] = { [RFU_STATUS_OK] = NULL, @@ -131,10 +131,10 @@ static const u8 *const sPlayerDisconnectedTexts[] = { [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember }; -ALIGNED(4) static const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); -ALIGNED(4) static const u8 sText_WirelessLinkDropped[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); -ALIGNED(4) static const u8 sText_LinkWithFriendDropped[] = _("The link with your friend has been\ndropped…"); -ALIGNED(4) static const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); +ALIGNED(4) static const u8 sText_WirelessLinkEstablished[] = _("无线通讯\n系统连接已确定。"); +ALIGNED(4) static const u8 sText_WirelessLinkDropped[] = _("无线通讯\n系统连接失败…"); +ALIGNED(4) static const u8 sText_LinkWithFriendDropped[] = _("与好友的连接\n失败…"); +ALIGNED(4) static const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1}回复,“否…”"); static const u8 *const sLinkDroppedTexts[] = { [RFU_STATUS_OK] = NULL, @@ -149,8 +149,8 @@ static const u8 *const sLinkDroppedTexts[] = { [RFU_STATUS_LEAVE_GROUP] = NULL }; -ALIGNED(4) static const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); -ALIGNED(4) static const u8 sText_DoYouWantXMode2[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) static const u8 sText_DoYouWantXMode[] = _("你想要加入{STR_VAR_2}\n模式?"); +ALIGNED(4) static const u8 sText_DoYouWantXMode2[] = _("你想要加入{STR_VAR_2}\n模式?"); // Unused static const u8 *const sDoYouWantModeTexts[] = { @@ -158,13 +158,13 @@ static const u8 *const sDoYouWantModeTexts[] = { sText_DoYouWantXMode2 }; -ALIGNED(4) static const u8 sText_CommunicatingPleaseWait[] = _("Communicating…\nPlease wait."); // Unused -ALIGNED(4) static const u8 sText_AwaitingPlayersResponseAboutTrade[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); -ALIGNED(4) static const u8 sText_Communicating[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" +ALIGNED(4) static const u8 sText_CommunicatingPleaseWait[] = _("连接中…\n请稍后。"); // Unused +ALIGNED(4) static const u8 sText_AwaitingPlayersResponseAboutTrade[] = _("等待{STR_VAR_1}的\n交换回复…"); +ALIGNED(4) static const u8 sText_Communicating[] = _("连接中{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) static const u8 sText_CommunicatingWithPlayer[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" +ALIGNED(4) static const u8 sText_CommunicatingWithPlayer[] = _("正在与{STR_VAR_1}连接……{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" +ALIGNED(4) static const u8 sText_PleaseWaitAWhile[] = _("请稍等……{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n" "{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); static const u8 *const sCommunicatingWaitTexts[] = { @@ -173,10 +173,10 @@ static const u8 *const sCommunicatingWaitTexts[] = { sText_PleaseWaitAWhile }; -ALIGNED(4) static const u8 sText_HiDoSomethingMale[] = _("Hiya! Is there something that you\nwanted to do?"); -ALIGNED(4) static const u8 sText_HiDoSomethingFemale[] = _("Hello!\nWould you like to do something?"); -ALIGNED(4) static const u8 sText_HiDoSomethingAgainMale[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); -ALIGNED(4) static const u8 sText_HiDoSomethingAgainFemale[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); +ALIGNED(4) static const u8 sText_HiDoSomethingMale[] = _("嘿!有什么\n想做的吗?"); +ALIGNED(4) static const u8 sText_HiDoSomethingFemale[] = _("你好!\n想要做什么??"); +ALIGNED(4) static const u8 sText_HiDoSomethingAgainMale[] = _("{STR_VAR_1}:嘿,我们又见面了!\n最近怎么样?"); +ALIGNED(4) static const u8 sText_HiDoSomethingAgainFemale[] = _("{STR_VAR_1}:哦!{PLAYER},你好!\n想要做什么?"); static const u8 *const sHiDoSomethingTexts[][GENDER_COUNT] = { { @@ -188,10 +188,10 @@ static const u8 *const sHiDoSomethingTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) static const u8 sText_DoSomethingMale[] = _("Want to do something?"); -ALIGNED(4) static const u8 sText_DoSomethingFemale[] = _("Would you like to do something?"); -ALIGNED(4) static const u8 sText_DoSomethingAgainMale[] = _("{STR_VAR_1}: What would you like to\ndo now?"); -ALIGNED(4) static const u8 sText_DoSomethingAgainFemale[] = _("{STR_VAR_1}: Want to do anything else?"); // Unused +ALIGNED(4) static const u8 sText_DoSomethingMale[] = _("想做点什么??"); +ALIGNED(4) static const u8 sText_DoSomethingFemale[] = _("想做点什么?"); +ALIGNED(4) static const u8 sText_DoSomethingAgainMale[] = _("{STR_VAR_1}:你现在想要\n做什么??"); +ALIGNED(4) static const u8 sText_DoSomethingAgainFemale[] = _("{STR_VAR_1}:想做点其他的不??"); // Unused // Unused static const u8 *const sDoSomethingTexts[][GENDER_COUNT] = { @@ -204,31 +204,31 @@ static const u8 *const sDoSomethingTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) static const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}"); -ALIGNED(4) static const u8 sText_PlayerHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_SomebodyHasContactedYou[] = _("有人连接上了你。{PAUSE 60}"); +ALIGNED(4) static const u8 sText_PlayerHasContactedYou[] = _("{STR_VAR_1}连接上了你。{PAUSE 60}"); static const u8 *const sPlayerContactedYouTexts[] = { sText_SomebodyHasContactedYou, sText_PlayerHasContactedYou }; -ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); -ALIGNED(4) static const u8 sText_AwaitingResponseFromPlayer[] = _("Awaiting a response from\n{STR_VAR_1}…"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer[] = _("等待\n另一个训练师回复…"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromPlayer[] = _("等待\n{STR_VAR_1}的回复…"); static const u8 *const sAwaitingResponseTexts[] = { sText_AwaitingResponseFromTrainer, sText_AwaitingResponseFromPlayer }; -ALIGNED(4) static const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); -ALIGNED(4) static const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); -ALIGNED(4) static const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); -ALIGNED(4) static const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?"); -ALIGNED(4) static const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); -ALIGNED(4) static const u8 sText_ChatDropped[] = _("The chat has been dropped.\p"); -ALIGNED(4) static const u8 sText_OfferDeclined1[] = _("You declined the offer.\p"); -ALIGNED(4) static const u8 sText_OfferDeclined2[] = _("You declined the offer.\p"); -ALIGNED(4) static const u8 sText_ChatEnded[] = _("The chat was ended.\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCard[] = _("其他训练师展示\n给你看他们的训练师卡片。\p你也要展示\n训练师卡片?"); +ALIGNED(4) static const u8 sText_BattleChallenge[] = _("其他训练师想通过\n宝可梦对战挑战你。\p你想要接受\n挑战吗?"); +ALIGNED(4) static const u8 sText_ChatInvitation[] = _("其他训练师邀请你\n聊天。\p你想要接受\n聊天申请吗?"); +ALIGNED(4) static const u8 sText_OfferToTradeMon[] = _("有人愿意用一只\n等级{DYNAMIC 0}的{DYNAMIC 1}\p与你登记的等级{DYNAMIC 2}\n的{DYNAMIC 3}交换。\p你同意吗?"); +ALIGNED(4) static const u8 sText_OfferToTradeEgg[] = _("有人想要交换你\n登记的蛋。\l你想要接受交换申请吗?"); +ALIGNED(4) static const u8 sText_ChatDropped[] = _("聊天断开。\p"); +ALIGNED(4) static const u8 sText_OfferDeclined1[] = _("你拒绝了请求。\p"); +ALIGNED(4) static const u8 sText_OfferDeclined2[] = _(" 你拒绝了请求。\p"); +ALIGNED(4) static const u8 sText_ChatEnded[] = _("聊天停止了。\p"); // Unused static const u8 *const sInvitationTexts[] = { @@ -238,10 +238,10 @@ static const u8 *const sInvitationTexts[] = { sText_OfferToTradeMon }; -ALIGNED(4) static const u8 sText_JoinChatMale[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); -ALIGNED(4) static const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); -ALIGNED(4) static const u8 sText_JoinChatFemale[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); -ALIGNED(4) static const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); +ALIGNED(4) static const u8 sText_JoinChatMale[] = _("嘿!我们正在聊天。\n想要加入我们吗?"); +ALIGNED(4) static const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}:嘿,{PLAYER}!\n我们正在聊天。\l想要加入我们吗?"); +ALIGNED(4) static const u8 sText_JoinChatFemale[] = _(" 哦,你好!我们正在聊天。\n想要加入我们吗?"); +ALIGNED(4) static const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}:你好,{PLAYER}!\n我们在聊天。\l想要加入我们吗??"); static const u8 *const sJoinChatTexts[][GENDER_COUNT] = { { @@ -253,13 +253,13 @@ static const u8 *const sJoinChatTexts[][GENDER_COUNT] = { } }; -ALIGNED(4) static const u8 sText_TrainerAppearsBusy[] = _("……\nThe TRAINER appears to be busy…\p"); -ALIGNED(4) static const u8 sText_WaitForBattleMale[] = _("A battle, huh?\nAll right, just give me some time."); -ALIGNED(4) static const u8 sText_WaitForChatMale[] = _("You want to chat, huh?\nSure, just wait a little."); -ALIGNED(4) static const u8 sText_ShowTrainerCardMale[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); -ALIGNED(4) static const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I need\ntime to get ready."); -ALIGNED(4) static const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); -ALIGNED(4) static const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); +ALIGNED(4) static const u8 sText_TrainerAppearsBusy[] = _("……\n训练师好像正在忙…\p\p"); +ALIGNED(4) static const u8 sText_WaitForBattleMale[] = _("宝可梦对战,嗯?\n好吧,等我一下。"); +ALIGNED(4) static const u8 sText_WaitForChatMale[] = _("想要聊天,嗯?\n好的,等一下。"); +ALIGNED(4) static const u8 sText_ShowTrainerCardMale[] = _("当然!作为“问候”\n这是我的训练师卡片。"); +ALIGNED(4) static const u8 sText_WaitForBattleFemale[] = _("宝可梦对战?当然,但是\n我需要准备一下。"); +ALIGNED(4) static const u8 sText_WaitForChatFemale[] = _("你想聊天?\n好的,但是请稍等。"); +ALIGNED(4) static const u8 sText_ShowTrainerCardFemale[] = _("作为自我介绍,我会展示\n给你我的训练师卡片。"); static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { { @@ -275,14 +275,14 @@ static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) static const u8 sText_WaitForChatMale2[] = _("You want to chat, huh?\nSure, just wait a little."); // Unused -ALIGNED(4) static const u8 sText_DoneWaitingBattleMale[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); -ALIGNED(4) static const u8 sText_DoneWaitingChatMale[] = _("All right!\nLet's chat!{PAUSE 60}"); -ALIGNED(4) static const u8 sText_DoneWaitingBattleFemale[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); -ALIGNED(4) static const u8 sText_DoneWaitingChatFemale[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); -ALIGNED(4) static const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{PAUSE 60}"); -ALIGNED(4) static const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); -ALIGNED(4) static const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); +ALIGNED(4) static const u8 sText_WaitForChatMale2[] = _("想聊天,嗯?\n好,等下。"); // Unused +ALIGNED(4) static const u8 sText_DoneWaitingBattleMale[] = _("感谢您的等待!\n让我们的宝可梦对战\p开始吧!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingChatMale[] = _("好的!\n开始聊天!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingBattleFemale[] = _("抱歉让你久等了!\n让我们开始吧!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_DoneWaitingChatFemale[] = _("抱歉让你久等了!\n开始聊天吧。{PAUSE 60}"); +ALIGNED(4) static const u8 sText_TradeWillBeStarted[] = _("交换开始。{PAUSE 60}"); +ALIGNED(4) static const u8 sText_BattleWillBeStarted[] = _("宝可梦对战开始。{PAUSE 60}"); +ALIGNED(4) static const u8 sText_EnteringChat[] = _("进入聊天中…{PAUSE 60}"); static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { { @@ -308,36 +308,36 @@ static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { } }; -ALIGNED(4) static const u8 sText_BattleDeclinedMale[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); -ALIGNED(4) static const u8 sText_BattleDeclinedFemale[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); +ALIGNED(4) static const u8 sText_BattleDeclinedMale[] = _("对不起!我的宝可梦看\n起来好像不太好。\l下次再战斗吧。\p"); +ALIGNED(4) static const u8 sText_BattleDeclinedFemale[] = _("非常抱歉,但是我的\n宝可梦现在很不好…\p下次再战斗吧。\p"); static const u8 *const sBattleDeclinedTexts[GENDER_COUNT] = { sText_BattleDeclinedMale, sText_BattleDeclinedFemale }; -ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedMale[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); -ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedFemale[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedMale[] = _("嗯?我的训练师卡片…\n找不到了?\l对不起!下次展示给你吧!\p"); +ALIGNED(4) static const u8 sText_ShowTrainerCardDeclinedFemale[] = _("哦?我的\n训练师卡片呢?…\l对不起!以后展示给你看吧!\p"); static const u8 *const sShowTrainerCardDeclinedTexts[GENDER_COUNT] = { sText_ShowTrainerCardDeclinedMale, sText_ShowTrainerCardDeclinedFemale }; -ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingMale[] = _("If you want to do something with\nme, just give me a shout!\p"); -ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingFemale[] = _("If you want to do something with\nme, don't be shy.\p"); +ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingMale[] = _("如果以后有什么事找我\n尽管叫我!\p"); +ALIGNED(4) static const u8 sText_IfYouWantToDoSomethingFemale[] = _("如果以后有什么事找我\n不要客气啊。\p"); static const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = { sText_IfYouWantToDoSomethingMale, sText_IfYouWantToDoSomethingFemale }; -ALIGNED(4) static const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); -ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); -ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); +ALIGNED(4) static const u8 sText_TrainerBattleBusy[] = _("哎呦!抱歉,但是我有事\n要做。\l下次吧,好吧?\p"); +ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("如果想要宝可梦对战,你\n需要两只宝可梦必须是\l等级30以下的。\p"); +ALIGNED(4) static const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("如果想要宝可梦对战,你\n需要宝可梦必须是\l等级30以下的。\p"); -ALIGNED(4) static const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); -ALIGNED(4) static const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p"); +ALIGNED(4) static const u8 sText_DeclineChatMale[] = _("好吧。\n随时可以来看我,好吧?\p"); +ALIGNED(4) static const u8 stext_DeclineChatFemale[] = _("哦…\n请随时过来看我。\p"); // Response from partner when player declines chat static const u8 *const sDeclineChatTexts[GENDER_COUNT] = { @@ -345,8 +345,8 @@ static const u8 *const sDeclineChatTexts[GENDER_COUNT] = { stext_DeclineChatFemale }; -ALIGNED(4) static const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); -ALIGNED(4) static const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); +ALIGNED(4) static const u8 sText_ChatDeclinedMale[] = _("不好意思!\n不能聊了。\l下次再说吧。\p"); +ALIGNED(4) static const u8 sText_ChatDeclinedFemale[] = _("不好意思。\n现在我有事要做。\l下次再说吧。\p"); // Response from partner when they decline chat static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { @@ -354,14 +354,14 @@ static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { sText_ChatDeclinedFemale }; -ALIGNED(4) static const u8 sText_YoureToughMale[] = _("Whoa!\nI can tell you're pretty tough!\p"); -ALIGNED(4) static const u8 sText_UsedGoodMoveMale[] = _("You used that move?\nThat's good strategy!\p"); -ALIGNED(4) static const u8 sText_BattleSurpriseMale[] = _("Way to go!\nThat was an eye-opener!\p"); -ALIGNED(4) static const u8 sText_SwitchedMonsMale[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); -ALIGNED(4) static const u8 sText_YoureToughFemale[] = _("That POKéMON…\nIt's been raised really well!\p"); -ALIGNED(4) static const u8 sText_UsedGoodMoveFemale[] = _("That's it!\nThis is the right move now!\p"); -ALIGNED(4) static const u8 sText_BattleSurpriseFemale[] = _("That's awesome!\nYou can battle that way?\p"); -ALIGNED(4) static const u8 sText_SwitchedMonsFemale[] = _("You have exquisite timing for\nswitching POKéMON!\p"); +ALIGNED(4) static const u8 sText_YoureToughMale[] = _("哇!\n你太坚强了!\p"); +ALIGNED(4) static const u8 sText_UsedGoodMoveMale[] = _("你用了那个技能?\n真是好办法!\p"); +ALIGNED(4) static const u8 sText_BattleSurpriseMale[] = _("就这么做!\n真是令人大开眼界!\p"); +ALIGNED(4) static const u8 sText_SwitchedMonsMale[] = _("你竟然可以在那种情况下\n使用那只宝可梦?\p"); +ALIGNED(4) static const u8 sText_YoureToughFemale[] = _("那个宝可梦…\n培养的真好!\p\p"); +ALIGNED(4) static const u8 sText_UsedGoodMoveFemale[] = _("就是这样!\n现在就是适当的技能!\p"); +ALIGNED(4) static const u8 sText_BattleSurpriseFemale[] = _("太可怕了!\n你竟然以这种方式战斗?\p"); +ALIGNED(4) static const u8 sText_SwitchedMonsFemale[] = _("你真有\n选择宝可梦的天赋!\p"); static const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = { { @@ -378,14 +378,14 @@ static const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) static const u8 sText_LearnedSomethingMale[] = _("Oh, I see!\nThis is educational!\p"); -ALIGNED(4) static const u8 sText_ThatsFunnyMale[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); -ALIGNED(4) static const u8 sText_RandomChatMale1[] = _("Oh?\nSomething like that happened.\p"); -ALIGNED(4) static const u8 sText_RandomChatMale2[] = _("Hmhm… What?\nSo is this what you're saying?\p"); -ALIGNED(4) static const u8 sText_LearnedSomethingFemale[] = _("Is that right?\nI didn't know that.\p"); -ALIGNED(4) static const u8 sText_ThatsFunnyFemale[] = _("Ahaha!\nWhat is that about?\p"); -ALIGNED(4) static const u8 sText_RandomChatFemale1[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); -ALIGNED(4) static const u8 sText_RandomChatFemale2[] = _("In other words…\nYes! That's right!\p"); +ALIGNED(4) static const u8 sText_LearnedSomethingMale[] = _("我知道了!\n受教了!\p"); +ALIGNED(4) static const u8 sText_ThatsFunnyMale[] = _("不要再说些搞笑的事了!\n从笑声中我感到痛苦!\p"); +ALIGNED(4) static const u8 sText_RandomChatMale1[] = _("O哦?\n那种事发生了。\p"); +ALIGNED(4) static const u8 sText_RandomChatMale2[] = _("嗯…什么?\n这就是你说的?\p\p"); +ALIGNED(4) static const u8 sText_LearnedSomethingFemale[] = _("那样好吗?\n我不知道。\p"); +ALIGNED(4) static const u8 sText_ThatsFunnyFemale[] = _("哈哈!\n关于什么?\p\p"); +ALIGNED(4) static const u8 sText_RandomChatFemale1[] = _("就是那样!\n我就是这个意思。\p"); +ALIGNED(4) static const u8 sText_RandomChatFemale2[] = _("换言之…\n是!就是那样!\p"); static const u8 *const sChatReactionTexts[GENDER_COUNT][4] = { { @@ -402,10 +402,10 @@ static const u8 *const sChatReactionTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) static const u8 sText_ShowedTrainerCardMale1[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); -ALIGNED(4) static const u8 sText_ShowedTrainerCardMale2[] = _("I hope I get to know you better!\p"); -ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale1[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); -ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale2[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardMale1[] = _("展示训练师卡片\n作为我的礼貌。\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardMale2[] = _("我希望我可以更好地认识你!\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale1[] = _("我们互相展示\n训练师卡片以求互相认识。\p\p"); +ALIGNED(4) static const u8 sText_ShowedTrainerCardFemale2[] = _("很高兴见到你。\n不要认生啊!\p\p"); static const u8 *const sTrainerCardReactionTexts[GENDER_COUNT][2] = { { @@ -418,10 +418,10 @@ static const u8 *const sTrainerCardReactionTexts[GENDER_COUNT][2] = { } }; -ALIGNED(4) static const u8 sText_MaleTraded1[] = _("Yeahah!\nI really wanted this POKéMON!\p"); -ALIGNED(4) static const u8 sText_MaleTraded2[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); -ALIGNED(4) static const u8 sText_FemaleTraded1[] = _("I'm trading POKéMON right now.\p"); -ALIGNED(4) static const u8 sText_FemaleTraded2[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); +ALIGNED(4) static const u8 sText_MaleTraded1[] = _("哈哈!\n我确实很想要这只宝可梦!\p\p"); +ALIGNED(4) static const u8 sText_MaleTraded2[] = _("最终,一场交换使得\n宝可梦到手,圆了我\n长久的梦。\p"); +ALIGNED(4) static const u8 sText_FemaleTraded1[] = _("我正在交换宝可梦。\p"); +ALIGNED(4) static const u8 sText_FemaleTraded2[] = _("这只宝可梦是我在\n一场交换中获得的!\p\p"); static const u8 *const sTradeReactionTexts[GENDER_COUNT][4] = { { @@ -434,37 +434,37 @@ static const u8 *const sTradeReactionTexts[GENDER_COUNT][4] = { } }; -ALIGNED(4) static const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); -ALIGNED(4) static const u8 sText_RegisterMonAtTradingBoard[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); -ALIGNED(4) static const u8 sText_TradingBoardInfo[] = _("This TRADING BOARD is used for\n" - "offering a POKéMON for a trade.\p" - "All you need to do is register a\n" - "POKéMON for a trade.\p" - "Another TRAINER may offer a party\n" - "POKéMON in return for the trade.\p" - "We hope you will register POKéMON\n" - "and trade them with many, many\l" - "other TRAINERS.\p" - "Would you like to register one of\nyour POKéMON?"); -ALIGNED(4) static const u8 sText_ThankYouForRegistering[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); // unused -ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); // unused -ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); -ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); -ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p"); -ALIGNED(4) static const u8 sText_RegistrationCompleted[] = _("Registration has been completed.\p"); -ALIGNED(4) static const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p"); -ALIGNED(4) static const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); -ALIGNED(4) static const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?"); -ALIGNED(4) static const u8 sText_RegistrationCanceled2[] = _("The registration has been canceled.\p"); -ALIGNED(4) static const u8 sText_TradeTrainersWillBeListed[] = _("TRAINERS wishing to make a trade\nwill be listed."); // unused -ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith2[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); // unused -ALIGNED(4) static const u8 sText_AskTrainerToMakeTrade[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); -ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer2[] = _("Awaiting a response from\nthe other TRAINER…"); // unused -ALIGNED(4) static const u8 sText_NotRegisteredAMonForTrade[] = _("You have not registered a POKéMON\nfor trading.\p"); // unused -ALIGNED(4) static const u8 sText_DontHaveTypeTrainerWants[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); -ALIGNED(4) static const u8 sText_DontHaveEggTrainerWants[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); -ALIGNED(4) static const u8 sText_PlayerCantTradeForYourMon[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); -ALIGNED(4) static const u8 sText_CantTradeForPartnersMon[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); +ALIGNED(4) static const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1}检查了\n交换平台。\p"); +ALIGNED(4) static const u8 sText_RegisterMonAtTradingBoard[] = _("欢迎来到交换平台。\p你需要登记宝可梦\n来进行交换。\p你现在需要登记\n你的精灵宝可梦吗?"); +ALIGNED(4) static const u8 sText_TradingBoardInfo[] = _("交换平台是用来\n" + "提供宝可梦进行交换的。\p" + "你所做的就是把\n" + "宝可梦进行登记。\p" + "其他训练师可能会提供\n" + "你想要交换的宝可梦。\p" + "我们希望你可以登记宝可梦\n" + "用来交换给\l" + "更多更多其他训练师。\p" + "你现在需要登记\n你的宝可梦吗?"); +ALIGNED(4) static const u8 sText_ThankYouForRegistering[] = _("我们已经登记了你的宝可梦\n放在交换平台用来交换。\p感谢使用这项服务!\p"); // unused +ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("没人登记宝可梦\n在交换平台用来交换。\p\n"); // unused +ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("请选择宝可梦类型\n用于交换。\n"); +ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("你将会拿什么宝可梦\n用来交换呢?\p"); +ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("登记取消。\p"); +ALIGNED(4) static const u8 sText_RegistrationCompleted[] = _("登记完成。\p"); +ALIGNED(4) static const u8 sText_TradeCanceled[] = _("交换被取消了。\p"); +ALIGNED(4) static const u8 sText_CancelRegistrationOfMon[] = _("取消登记你的\n等级{STR_VAR_2}的{STR_VAR_1}?"); +ALIGNED(4) static const u8 sText_CancelRegistrationOfEgg[] = _("取消登记你的蛋??"); +ALIGNED(4) static const u8 sText_RegistrationCanceled2[] = _("登记取消。\p"); +ALIGNED(4) static const u8 sText_TradeTrainersWillBeListed[] = _("训练师想要进行的交换\n会用表格列出来。"); // unused +ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith2[] = _("请选择训练师\n用来交换宝可梦。"); // unused +ALIGNED(4) static const u8 sText_AskTrainerToMakeTrade[] = _("你想要和{STR_VAR_1}\n进行交换?"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromTrainer2[] = _("等待训练师\n的回复…"); // unused +ALIGNED(4) static const u8 sText_NotRegisteredAMonForTrade[] = _("还没有登记宝可梦\n用于交换。\p\p"); // unused +ALIGNED(4) static const u8 sText_DontHaveTypeTrainerWants[] = _("你还没有{STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); +ALIGNED(4) static const u8 sText_DontHaveEggTrainerWants[] = _("你还没有蛋是\n{STR_VAR_1}需要的。\p"); +ALIGNED(4) static const u8 sText_PlayerCantTradeForYourMon[] = _("{STR_VAR_1}还不能和你交换\n你的宝可梦。\p"); +ALIGNED(4) static const u8 sText_CantTradeForPartnersMon[] = _("你还不能交换\n{STR_VAR_1}的宝可梦呢。\p"); // Unused static const u8 *const sCantTradeMonTexts[] = { @@ -472,28 +472,28 @@ static const u8 *const sCantTradeMonTexts[] = { sText_CantTradeForPartnersMon }; -ALIGNED(4) static const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p"); -ALIGNED(4) static const u8 sText_EggTrade[] = _("EGG TRADE"); -ALIGNED(4) static const u8 sText_ChooseJoinCancel[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); -ALIGNED(4) static const u8 sText_ChooseTrainer[] = _("Please choose a TRAINER."); -ALIGNED(4) static const u8 sText_ChooseTrainerSingleBattle[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); -ALIGNED(4) static const u8 sText_ChooseTrainerDoubleBattle[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); -ALIGNED(4) static const u8 sText_ChooseLeaderMultiBattle[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); -ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER to\ntrade with."); -ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderCards[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); -ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderNews[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); -ALIGNED(4) static const u8 sText_ChooseLeaderPokemonJump[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBerryCrush[] = _("BERRY CRUSH!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBerryPicking[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBerryBlender[] = _("BERRY BLENDER!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderRecordCorner[] = _("RECORD CORNER!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderCoolContest[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBeautyContest[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderCuteContest[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderSmartContest[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderToughContest[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerLv50[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); -ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); +ALIGNED(4) static const u8 sText_TradeOfferRejected[] = _("你的交换请求被拒绝。\p"); +ALIGNED(4) static const u8 sText_EggTrade[] = _("蛋的交换"); +ALIGNED(4) static const u8 sText_ChooseJoinCancel[] = _("{DPAD_UPDOWN}选择{A_BUTTON}加入{B_BUTTON}取消"); +ALIGNED(4) static const u8 sText_ChooseTrainer[] = _("请选择一名训练师。"); +ALIGNED(4) static const u8 sText_ChooseTrainerSingleBattle[] = _("请选择一名训练师来进行\n单打对战。"); +ALIGNED(4) static const u8 sText_ChooseTrainerDoubleBattle[] = _("请选择一名训练师来进行\n双打对战。"); +ALIGNED(4) static const u8 sText_ChooseLeaderMultiBattle[] = _("请选择队长\n进行多人对战。"); +ALIGNED(4) static const u8 sText_ChooseTrainerToTradeWith[] = _("请选择训练师来进行\n交换。"); +ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderCards[] = _("请选择一名训练师\n可以共享奇异卡片。"); +ALIGNED(4) static const u8 sText_ChooseTrainerToShareWonderNews[] = _("请选择一名训练师\n可以共享奇异新闻。"); +ALIGNED(4) static const u8 sText_ChooseLeaderPokemonJump[] = _("和宝可梦一起跳!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryCrush[] = _("混合树果!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryPicking[] = _("嘟嘟利摘树果!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBerryBlender[] = _("树果混合机!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderRecordCorner[] = _("联机中心!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderCoolContest[] = _("帅气组!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBeautyContest[] = _("美丽组!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderCuteContest[] = _("可爱组!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderSmartContest[] = _("聪明组!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderToughContest[] = _("强壮组!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerLv50[] = _("等级50对战塔!\n请选择队长。"); +ALIGNED(4) static const u8 sText_ChooseLeaderBattleTowerOpenLv[] = _("对战塔!\n请选择队长。"); static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] = { @@ -521,53 +521,53 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] = [LINK_GROUP_BATTLE_TOWER_OPEN] = sText_ChooseLeaderBattleTowerOpenLv }; -ALIGNED(4) static const u8 sText_SearchingForWirelessSystemWait[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); -ALIGNED(4) static const u8 sText_MustHaveTwoMonsForDoubleBattle[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); // Unused -ALIGNED(4) static const u8 sText_AwaitingPlayersResponse[] = _("Awaiting {STR_VAR_1}'s response…"); -ALIGNED(4) static const u8 sText_PlayerHasBeenAskedToRegisterYouPleaseWait[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); -ALIGNED(4) static const u8 sText_AwaitingResponseFromWirelessSystem[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); -ALIGNED(4) static const u8 sText_PleaseWaitForOtherTrainersToGather[] = _("Please wait for other TRAINERS to\ngather and get ready."); // Unused -ALIGNED(4) static const u8 sText_NoCardsSharedRightNow[] = _("No CARDS appear to be shared \nright now."); -ALIGNED(4) static const u8 sText_NoNewsSharedRightNow[] = _("No NEWS appears to be shared\nright now."); +ALIGNED(4) static const u8 sText_SearchingForWirelessSystemWait[] = _("搜索一个无线通讯系统。\n等待…"); +ALIGNED(4) static const u8 sText_MustHaveTwoMonsForDoubleBattle[] = _("参加双打对战,你至少要有\n两只宝可梦。\p"); // Unused +ALIGNED(4) static const u8 sText_AwaitingPlayersResponse[] = _("等待{STR_VAR_1}的回复…"); +ALIGNED(4) static const u8 sText_PlayerHasBeenAskedToRegisterYouPleaseWait[] = _("{STR_VAR_1}想要登记你\n为成员。请稍后。"); +ALIGNED(4) static const u8 sText_AwaitingResponseFromWirelessSystem[] = _("等待\n从无线通讯系统来的回复。"); +ALIGNED(4) static const u8 sText_PleaseWaitForOtherTrainersToGather[] = _("请等待其他训练师\n加入并准备完毕。"); // Unused +ALIGNED(4) static const u8 sText_NoCardsSharedRightNow[] = _("好像没有卡片\n正在共享。"); +ALIGNED(4) static const u8 sText_NoNewsSharedRightNow[] = _("好像没有新闻\n正在共享。"); static const u8 *const sNoWonderSharedTexts[] = { sText_NoCardsSharedRightNow, sText_NoNewsSharedRightNow }; -ALIGNED(4) static const u8 sText_Battle[] = _("BATTLE"); -ALIGNED(4) static const u8 sText_Chat2[] = _("CHAT"); -ALIGNED(4) static const u8 sText_Greetings[] = _("GREETINGS"); -ALIGNED(4) static const u8 sText_Exit[] = _("EXIT"); -ALIGNED(4) static const u8 sText_Exit2[] = _("EXIT"); -ALIGNED(4) static const u8 sText_Info[] = _("INFO"); -ALIGNED(4) static const u8 sText_NameWantedOfferLv[] = _("NAME{CLEAR_TO 60}WANTED{CLEAR_TO 110}OFFER{CLEAR_TO 198}LV."); -ALIGNED(4) static const u8 sText_SingleBattle[] = _("SINGLE BATTLE"); -ALIGNED(4) static const u8 sText_DoubleBattle[] = _("DOUBLE BATTLE"); -ALIGNED(4) static const u8 sText_MultiBattle[] = _("MULTI BATTLE"); -ALIGNED(4) static const u8 sText_PokemonTrades[] = _("POKéMON TRADES"); -ALIGNED(4) static const u8 sText_Chat[] = _("CHAT"); -ALIGNED(4) static const u8 sText_Cards[] = _("CARDS"); -ALIGNED(4) static const u8 sText_WonderCards[] = _("WONDER CARDS"); -ALIGNED(4) static const u8 sText_WonderNews[] = _("WONDER NEWS"); -ALIGNED(4) static const u8 sText_PokemonJump[] = _("POKéMON JUMP"); -ALIGNED(4) static const u8 sText_BerryCrush[] = _("BERRY CRUSH"); -ALIGNED(4) static const u8 sText_BerryPicking[] = _("BERRY-PICKING"); -ALIGNED(4) static const u8 sText_Search[] = _("SEARCH"); -ALIGNED(4) static const u8 sText_BerryBlender[] = _("BERRY BLENDER"); -ALIGNED(4) static const u8 sText_RecordCorner[] = _("RECORD CORNER"); -ALIGNED(4) static const u8 sText_CoolContest[] = _("COOL CONTEST"); -ALIGNED(4) static const u8 sText_BeautyContest[] = _("BEAUTY CONTEST"); -ALIGNED(4) static const u8 sText_CuteContest[] = _("CUTE CONTEST"); -ALIGNED(4) static const u8 sText_SmartContest[] = _("SMART CONTEST"); -ALIGNED(4) static const u8 sText_ToughContest[] = _("TOUGH CONTEST"); -ALIGNED(4) static const u8 sText_BattleTowerLv50[] = _("BATTLE TOWER LV. 50"); -ALIGNED(4) static const u8 sText_BattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL"); -ALIGNED(4) static const u8 sText_ItsNormalCard[] = _("It's a NORMAL CARD."); -ALIGNED(4) static const u8 sText_ItsBronzeCard[] = _("It's a BRONZE CARD!"); -ALIGNED(4) static const u8 sText_ItsCopperCard[] = _("It's a COPPER CARD!"); -ALIGNED(4) static const u8 sText_ItsSilverCard[] = _("It's a SILVER CARD!"); -ALIGNED(4) static const u8 sText_ItsGoldCard[] = _("It's a GOLD CARD!"); +ALIGNED(4) static const u8 sText_Battle[] = _("宝可梦对战"); +ALIGNED(4) static const u8 sText_Chat2[] = _("聊天"); +ALIGNED(4) static const u8 sText_Greetings[] = _("问候"); +ALIGNED(4) static const u8 sText_Exit[] = _("退出"); +ALIGNED(4) static const u8 sText_Exit2[] = _("退出"); +ALIGNED(4) static const u8 sText_Info[] = _("说明"); +ALIGNED(4) static const u8 sText_NameWantedOfferLv[] = _("名字{CLEAR_TO 60}需求{CLEAR_TO 110}提供{CLEAR_TO 198}等级"); +ALIGNED(4) static const u8 sText_SingleBattle[] = _("单打对战"); +ALIGNED(4) static const u8 sText_DoubleBattle[] = _("双打对战"); +ALIGNED(4) static const u8 sText_MultiBattle[] = _("多人对战"); +ALIGNED(4) static const u8 sText_PokemonTrades[] = _("宝可梦交换"); +ALIGNED(4) static const u8 sText_Chat[] = _("聊天"); +ALIGNED(4) static const u8 sText_Cards[] = _("卡片"); +ALIGNED(4) static const u8 sText_WonderCards[] = _("奇异卡片"); +ALIGNED(4) static const u8 sText_WonderNews[] = _("奇异新闻"); +ALIGNED(4) static const u8 sText_PokemonJump[] = _("宝可梦跳跃"); +ALIGNED(4) static const u8 sText_BerryCrush[] = _("树果混合"); +ALIGNED(4) static const u8 sText_BerryPicking[] = _("摘树果"); +ALIGNED(4) static const u8 sText_Search[] = _("搜索"); +ALIGNED(4) static const u8 sText_BerryBlender[] = _("树果混合机"); +ALIGNED(4) static const u8 sText_RecordCorner[] = _("联机中心"); +ALIGNED(4) static const u8 sText_CoolContest[] = _("帅气组"); +ALIGNED(4) static const u8 sText_BeautyContest[] = _("美丽组"); +ALIGNED(4) static const u8 sText_CuteContest[] = _("可爱组"); +ALIGNED(4) static const u8 sText_SmartContest[] = _("聪明组"); +ALIGNED(4) static const u8 sText_ToughContest[] = _("强壮组"); +ALIGNED(4) static const u8 sText_BattleTowerLv50[] = _("等级50对战塔"); +ALIGNED(4) static const u8 sText_BattleTowerOpenLv[] = _("对战塔"); +ALIGNED(4) static const u8 sText_ItsNormalCard[] = _("这是普通卡。"); +ALIGNED(4) static const u8 sText_ItsBronzeCard[] = _("这是蓝钴卡!"); +ALIGNED(4) static const u8 sText_ItsCopperCard[] = _("这是青铜卡!"); +ALIGNED(4) static const u8 sText_ItsSilverCard[] = _("这是白银卡"); +ALIGNED(4) static const u8 sText_ItsGoldCard[] = _("这是黄金卡!"); static const u8 *const sCardColorTexts[] = { sText_ItsNormalCard, @@ -577,17 +577,17 @@ static const u8 *const sCardColorTexts[] = { sText_ItsGoldCard }; -ALIGNED(4) static const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p"); -ALIGNED(4) static const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p"); -ALIGNED(4) static const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}"); -ALIGNED(4) static const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_TrainerCardInfoPage1[] = _("这是{DYNAMIC 0} {DYNAMIC 1}'s\n训练师卡片…\l{DYNAMIC 2}\p图鉴:{DYNAMIC 3}\n时间:{DYNAMIC 4}:{DYNAMIC 5}\p"); +ALIGNED(4) static const u8 sText_TrainerCardInfoPage2[] = _(" 对战:胜:{DYNAMIC 0} 负:{DYNAMIC 2}\n交换次数:{DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p"); +ALIGNED(4) static const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: 很高兴认识了你!{PAUSE 60}"); +ALIGNED(4) static const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: 很高兴认识你!{PAUSE 60}"); static const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = { sText_GladToMeetYouMale, sText_GladToMeetYouFemale }; -ALIGNED(4) static const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}"); +ALIGNED(4) static const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("{DYNAMIC 1}的训练师卡片\n确认完毕。{PAUSE 60}"); static const u8 *const sLinkGroupActivityNameTexts[] = { [ACTIVITY_NONE] = sText_EmptyString, From dfd0ceb0112affcde05a46d3df2f8b2a8e5736f3 Mon Sep 17 00:00:00 2001 From: RoamerX <20692776+RoamerX@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:19:40 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 盒子、属性等 --- src/data/union_room.h | 2 +- src/pokemon_storage_system.c | 24 ++++++++++++------------ src/strings.c | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/data/union_room.h b/src/data/union_room.h index e4694884ab..9529675942 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -448,7 +448,7 @@ ALIGNED(4) static const u8 sText_TradingBoardInfo[] = _("交换平台是用来\n "你现在需要登记\n你的宝可梦吗?"); ALIGNED(4) static const u8 sText_ThankYouForRegistering[] = _("我们已经登记了你的宝可梦\n放在交换平台用来交换。\p感谢使用这项服务!\p"); // unused ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("没人登记宝可梦\n在交换平台用来交换。\p\n"); // unused -ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("请选择宝可梦类型\n用于交换。\n"); +ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("请选择宝可梦属性\n用于交换。\n"); ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("你将会拿什么宝可梦\n用来交换呢?\p"); ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("登记取消。\p"); ALIGNED(4) static const u8 sText_RegistrationCompleted[] = _("登记完成。\p"); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 3df3841c12..82a9603082 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -850,7 +850,7 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); static const u8 gText_JustOnePkmn[] = _("这样就没有可战斗的宝可梦了!"); static const u8 gText_PartyFull[] = _("同行的宝可梦已经满了!"); -static const u8 gText_Box[] = _("箱子 "); +static const u8 gText_Box[] = _("盒子 "); struct { const u8 *text; @@ -1038,29 +1038,29 @@ static const struct SpriteTemplate sSpriteTemplate_DisplayMon = .callback = SpriteCallbackDummy, }; -static const u8 gText_PkmnIsSelected[] = _("要对{DYNAMIC 0}做什么?"); +static const u8 gText_PkmnIsSelected[] = _("要拿{DYNAMIC 0}怎么办?"); static const struct StorageMessage sMessages[] = { - [MSG_EXIT_BOX] = {COMPOUND_STRING("要停止对箱子的操作吗?"), MSG_VAR_NONE}, - [MSG_WHAT_YOU_DO] = {COMPOUND_STRING("要对这个箱子做什么?"), MSG_VAR_NONE}, + [MSG_EXIT_BOX] = {COMPOUND_STRING("要停止对盒子的操作吗?"), MSG_VAR_NONE}, + [MSG_WHAT_YOU_DO] = {COMPOUND_STRING("要对这个盒子做什么?"), MSG_VAR_NONE}, [MSG_PICK_A_THEME] = {COMPOUND_STRING("要选择哪一种壁纸主题?"), MSG_VAR_NONE}, [MSG_PICK_A_WALLPAPER] = {COMPOUND_STRING("要选择哪一种壁纸?"), MSG_VAR_NONE}, [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1}, - [MSG_JUMP_TO_WHICH_BOX] = {COMPOUND_STRING("要跳转到哪个箱子?"), MSG_VAR_NONE}, - [MSG_DEPOSIT_IN_WHICH_BOX] = {COMPOUND_STRING("要存放到哪个箱子中?"), MSG_VAR_NONE}, + [MSG_JUMP_TO_WHICH_BOX] = {COMPOUND_STRING("要跳转到哪个盒子?"), MSG_VAR_NONE}, + [MSG_DEPOSIT_IN_WHICH_BOX] = {COMPOUND_STRING("要存放到哪个盒子中?"), MSG_VAR_NONE}, [MSG_WAS_DEPOSITED] = {COMPOUND_STRING("存放了{DYNAMIC 0}!"), MSG_VAR_MON_NAME_1}, - [MSG_BOX_IS_FULL] = {COMPOUND_STRING("这个箱子已经满了!"), MSG_VAR_NONE}, + [MSG_BOX_IS_FULL] = {COMPOUND_STRING("这个盒子已经满了!"), MSG_VAR_NONE}, [MSG_RELEASE_POKE] = {COMPOUND_STRING("真的要放生吗?"), MSG_VAR_NONE}, [MSG_WAS_RELEASED] = {COMPOUND_STRING("已将{DYNAMIC 0}放生了!"), MSG_VAR_RELEASE_MON_1}, [MSG_BYE_BYE] = {COMPOUND_STRING("再见了!{DYNAMIC 0}!"), MSG_VAR_RELEASE_MON_3}, [MSG_MARK_POKE] = {COMPOUND_STRING("请选择标记。"), MSG_VAR_NONE}, - [MSG_LAST_POKE] = {COMPOUND_STRING("没有可以战斗的宝可梦了!"), MSG_VAR_NONE}, + [MSG_LAST_POKE] = {COMPOUND_STRING("这样就没有可战斗的宝可梦了!"), MSG_VAR_NONE}, [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE}, [MSG_HOLDING_POKE] = {COMPOUND_STRING("正在抓着宝可梦!"), MSG_VAR_NONE}, [MSG_WHICH_ONE_WILL_TAKE] = {COMPOUND_STRING("请选择要带走的宝可梦!"), MSG_VAR_NONE}, - [MSG_CANT_RELEASE_EGG] = {COMPOUND_STRING("你不能放生宝可梦蛋!"), MSG_VAR_NONE}, - [MSG_CONTINUE_BOX] = {COMPOUND_STRING("要继续对箱子的操作吗?"), MSG_VAR_NONE}, + [MSG_CANT_RELEASE_EGG] = {COMPOUND_STRING("无法将蛋放生!"), MSG_VAR_NONE}, + [MSG_CONTINUE_BOX] = {COMPOUND_STRING("要继续对盒子的操作吗?"), MSG_VAR_NONE}, [MSG_CAME_BACK] = {COMPOUND_STRING("{DYNAMIC 0}回来了!"), MSG_VAR_MON_NAME_1}, [MSG_WORRIED] = {COMPOUND_STRING("它是在担心你吗?"), MSG_VAR_NONE}, [MSG_SURPRISE] = {COMPOUND_STRING("… … … … !"), MSG_VAR_NONE}, @@ -8004,7 +8004,7 @@ static const u8 *const sMenuTexts[] = { [MENU_CANCEL] = COMPOUND_STRING("取消"), [MENU_STORE] = COMPOUND_STRING("寄放"), - [MENU_WITHDRAW] = COMPOUND_STRING("同行"), + [MENU_WITHDRAW] = COMPOUND_STRING("带走"), [MENU_MOVE] = COMPOUND_STRING("移动"), [MENU_SHIFT] = COMPOUND_STRING("交换"), [MENU_PLACE] = COMPOUND_STRING("放下"), @@ -8017,7 +8017,7 @@ static const u8 *const sMenuTexts[] = [MENU_TAKE] = COMPOUND_STRING("取下"), [MENU_GIVE] = gPCText_Give, [MENU_GIVE_2] = gPCText_Give, - [MENU_SWITCH] = COMPOUND_STRING("调换"), + [MENU_SWITCH] = COMPOUND_STRING("移动"), [MENU_BAG] = COMPOUND_STRING("放回包包"), [MENU_INFO] = COMPOUND_STRING("查看信息"), [MENU_SCENERY_1] = COMPOUND_STRING("风景1"), diff --git a/src/strings.c b/src/strings.c index 9ef21f4fe4..bf3d94c3df 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1095,7 +1095,7 @@ const u8 gText_FromSpace[] = _("从"); const u8 gText_MixingRecords[] = _("混合存档中…"); const u8 gText_RecordMixingComplete[] = _("存档混合完成。\n感谢您的等待。"); const u8 gText_YourName[] = _("你的名字?"); -const u8 gText_BoxName[] = _("箱子的名字?"); +const u8 gText_BoxName[] = _("盒子的名字?"); const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}的昵称?"); const u8 gText_TellHimTheWords[] = _("告诉他那个单词。"); const u8 gText_MoveOkBack[] = _("{DPAD_NONE}移动 {A_BUTTON}确认 {B_BUTTON}返回");