Battles begin with the phrase "*ENEMY* wants to battle!" and end with "*ENEMY* was defeated!" This makes sense if "*ENEMY*" is something like "YOUNGSTER JOEY", but it's ungrammatical for plural trainers like "TWINS AMY & MAY". Gen 3 addressed this issue by changing the phrases to "*ENEMY* would like to battle!" and "Player defeated *ENEMY*!" And then Gen 4 changed the starting phrase to "You are challenged by *ENEMY*!" But some people don't like the politeness of Gen 3, or the passive voice of Gen 4. (\*ahem\*) Plus they're both more verbose than the original Gen 2 phrases, which really matters when the textboxes are so small, and the "*ENEMY*" name can take up an entire line (like "MYSTICALMAN EUSINE"). The alternative is to use the correct grammar for plural trainers: "*ENEMIES* **want** to battle!" and "*ENEMIES* **were** defeated!" This is fairly simple to implement. If you've worked with event scripts before but not assembly code, this is a good feature to start with. ## Contents 1. [Define alternative plural phrases](#1-define-alternative-plural-phrases) 2. [Define plural trainer classes](#2-define-plural-trainer-classes) 3. [Use "*ENEMIES* want to battle!"](#3-use-enemies-want-to-battle) 4. [Use "*ENEMIES* were defeated!"](#4-use-enemies-were-defeated) 5. [Use "*ENEMIES* are about to use…"](#5-use-enemies-are-about-to-use) ## 1. Define alternative plural phrases Edit [data/text/battle.asm](../blob/master/data/text/battle.asm): ```diff WantsToBattleText:: text "" line "wants to battle!" prompt + +WantToBattlePluralText:: + text "" + line "want to battle!" + prompt ... BattleText_EnemyWasDefeated: text "" line "was defeated!" prompt + +BattleText_PluralEnemyWereDefeated: + text "" + line "were defeated!" + prompt ... BattleText_EnemyIsAboutToUseWillPlayerChangeMon: text "" line "is about to use" cont "@" text_ram wEnemyMonNickname text "." para "Will " line "change #MON?" done + +BattleText_PluralEnemyAreAboutToUseWillPlayerChangeMon: + text "" + line "are about to use" + cont "@" + text_ram wEnemyMonNickname + text "." + + para "Will " + line "change #MON?" + done ``` (Yes, while looking through the file I found a third phrase using "``" that needed a different plural form. All the rest are okay as-is.) ## 2. Define plural trainer classes Edit [engine/battle/core.asm](../blob/master/engine/battle/core.asm): ```diff IsKantoGymLeader: ld hl, KantoGymLeaders jr IsGymLeaderCommon IsGymLeader: ld hl, GymLeaders IsGymLeaderCommon: push de ld a, [wOtherTrainerClass] ld de, 1 call IsInArray pop de ret INCLUDE "data/trainers/leaders.asm" + +IsPluralTrainer: +; return z for plural trainers + ld a, [wOtherTrainerClass] + cp TWINS + ret ``` `IsPluralTrainer` sets the **z**ero flag if `[wOtherTrainerClass]` is `TWINS`. If you had more plural classes, like `ACE_DUO` or `SIS_AND_BRO`, you could check for them all like this: ``` IsPluralTrainer: ; return z for plural trainers ld a, [wOtherTrainerClass] cp TWINS ret z cp ACE_DUO ret z ; ...etc cp SIS_AND_BRO ret ``` We're not using the more complicated `IsGymLeaderCommon` method, which calls `IsInArray`, because it's overkill without a long list of items to check. Now we just have to find where those three original phrases are used, and call `IsPluralTrainer` to decide whether to use the new phrases instead. ## 3. Use "*ENEMIES* want to battle!" Edit [engine/battle/core.asm](../blob/master/engine/battle/core.asm) again: ```diff BattleStartMessage: ... farcall Battle_GetTrainerName + ld hl, WantToBattlePluralText + call IsPluralTrainer + jr z, .PlaceBattleStartText ld hl, WantsToBattleText jr .PlaceBattleStartText .wild ... ``` ## 4. Use "*ENEMIES* were defeated!" Edit [engine/battle/core.asm](../blob/master/engine/battle/core.asm) again: ```diff WinTrainerBattle: ... callfar Battle_GetTrainerName + ld hl, BattleText_PluralEnemyWereDefeated + call IsPluralTrainer + jr z, .got_defeat_phrase ld hl, BattleText_EnemyWasDefeated +.got_defeat_phrase: call StdBattleTextbox ``` ## 5. Use "*ENEMIES* are about to use…" Edit [engine/battle/core.asm](../blob/master/engine/battle/core.asm) again: ```diff OfferSwitch: ld a, [wCurPartyMon] push af callfar Battle_GetTrainerName + ld hl, BattleText_PluralEnemyAreAboutToUseWillPlayerChangeMon + call IsPluralTrainer + jr z, .got_switch_phrase ld hl, BattleText_EnemyIsAboutToUseWillPlayerChangeMon +.got_switch_phrase: call StdBattleTextbox ... ``` That's all! ![Screenshot](screenshots/plural-twins.png)