Compare commits

...

7 Commits

Author SHA1 Message Date
NightKev
4124ad0b93
Create the appropriate startBattle() functions in the helper classes (#3855) 2024-08-27 17:47:09 -07:00
Enoch
214a9275a9
Add missed natureFragment (#3859) 2024-08-27 17:37:20 -07:00
gitlocalize-app[bot]
f34137a950
[Localization][KO] Translate missed things (settings, bgm-name) (#3857)
* Translate bgm-name.json via GitLocalize

* Translate settings.json via GitLocalize

---------

Co-authored-by: Enoch <enoch.jwsong@gmail.com>
2024-08-27 17:34:58 -07:00
Adrian T.
5f3383ff04
[Dev] Cleanup some opponent overrides + add new opp form override (#3733)
* replace interger types, add opp form override

* move code to EnemyPokemon class

* Update src/field/pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2024-08-27 17:34:16 -07:00
gitlocalize-app[bot]
4ba8080333
[Localisation] [DE] Evil Team Dialogue (#3851)
* Translate dialogue-female.json via GitLocalize

* Male dialogue

---------

Co-authored-by: Jannik Tappert <tappertjannik@googlemail.com>
Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>
2024-08-27 23:34:56 +02:00
chaosgrimmon
c154c52517
[Bug] Show variant icons when forms share masterlist entry (#3767) 2024-08-27 13:25:36 -07:00
schmidtc1
d3dfd006f8
[Bug] Fixes Unseen Fist ignoring abilities (#3708)
* Inserts break to prevent fall through in checkFlag

* Adds break to IGNORE_PROTECT case for safety

* Revert "Adds break to IGNORE_PROTECT case for safety"

This reverts commit 2589faf69e.

* Adds break to IGNORE_PROTECT properly
2024-08-27 13:06:21 -07:00
15 changed files with 452 additions and 34 deletions

View File

@ -844,14 +844,13 @@ export default class BattleScene extends SceneBase {
if (Overrides.OPP_SPECIES_OVERRIDE) {
species = getPokemonSpecies(Overrides.OPP_SPECIES_OVERRIDE);
}
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
if (Overrides.OPP_LEVEL_OVERRIDE !== 0) {
pokemon.level = Overrides.OPP_LEVEL_OVERRIDE;
level = Overrides.OPP_LEVEL_OVERRIDE;
}
if (Overrides.OPP_GENDER_OVERRIDE !== null) {
pokemon.gender = Overrides.OPP_GENDER_OVERRIDE;
}
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
overrideModifiers(this, false);
overrideHeldItems(this, pokemon, false);
if (boss && !dataSource) {

View File

@ -601,11 +601,13 @@ export default class Move implements Localizable {
return true;
}
}
break;
case MoveFlags.IGNORE_PROTECT:
if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) &&
this.checkFlag(MoveFlags.MAKES_CONTACT, user, target)) {
return true;
}
break;
}
return !!(this.flags & flag);

View File

@ -306,7 +306,7 @@ export abstract class PokemonSpeciesForm {
let variantDataIndex: integer | string = this.speciesId;
const species = getPokemonSpecies(this.speciesId);
if (species.forms.length > 0 && formIndex !== undefined) {
formkey = species.forms[formIndex]?.formSpriteKey;
formkey = species.forms[formIndex]?.getFormSpriteKey(formIndex);
if (formkey) {
variantDataIndex = `${this.speciesId}-${formkey}`;
}

View File

@ -3758,6 +3758,18 @@ export class EnemyPokemon extends Pokemon {
this.status = new Status(Overrides.OPP_STATUS_OVERRIDE);
}
if (Overrides.OPP_GENDER_OVERRIDE) {
this.gender = Overrides.OPP_GENDER_OVERRIDE;
}
const speciesId = this.species.speciesId;
if (speciesId in Overrides.OPP_FORM_OVERRIDES
&& Overrides.OPP_FORM_OVERRIDES[speciesId]
&& this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]]) {
this.formIndex = Overrides.OPP_FORM_OVERRIDES[speciesId] ?? 0;
}
if (!dataSource) {
this.generateAndPopulateMoveset();

View File

@ -441,7 +441,7 @@
},
"courtney": {
"encounter": {
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
"2": "... Nun dann... Auslöschen...",
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
},
@ -470,7 +470,7 @@
"3": "Was machst du hier? Bist du uns gefolgt?"
},
"victory": {
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
}
@ -655,6 +655,86 @@
"5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen."
}
},
"aether_grunt": {
"encounter": {
"1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!",
"2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!",
"3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!",
"4": "Ich zeige dir die Macht des Æther-Paradies",
"5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!"
},
"victory": {
"1": "Hmph! Du scheinst ziemlich geschickt zu sein.",
"2": "Was hat das zu bedeuten? Was hat das zu bedeuten!",
"3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!",
"4": "Hmm... Es scheint, als hätte ich verloren.",
"5": "Ich hätte das Blitzdings benutzen sollen..."
}
},
"faba": {
"encounter": {
"1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!",
"2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?",
"3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich."
},
"victory": {
"1": "Aiyee!",
"2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...",
"3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann."
}
},
"skull_grunt": {
"encounter": {
"1": "Wir sind nicht böse, wir sind einfach nur nicht nett!",
"2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!",
"3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!",
"4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?",
"5": "Yo, platz hier nich rein, ♪ wien wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider nen Knall, ♪ denn das is nich der Fall! ♪\n$Wir wolln hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
},
"victory": {
"1": "Wie jetzt? Schon vorbei?",
"2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...",
"3": "Wir brauchen deine schwachen Pokémon eh nicht!",
"4": "Was? Deine Stärke spür ich bis in die Knochen...",
"5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?"
}
},
"plumeria": {
"encounter": {
"1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.",
"2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...",
"3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann."
},
"victory": {
"1": "Du bist ziemlich stark. Das muss ich zugeben.",
"2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...",
"3": "Ich denke, ich muss diese Niederlage einfach hinnehmen."
}
},
"macro_grunt": {
"encounter": {
"1": "Achtung hier ist Endstation für dich!",
"2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.",
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?"
},
"victory": {
"1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.",
"2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...",
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine."
}
},
"oleana": {
"encounter": {
"1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!",
"2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.",
"3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!"
},
"victory": {
"1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.",
"2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...",
"3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?"
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!"
@ -787,6 +867,72 @@
"1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen."
},
"victory": {
"1": "Wie kann eine Person nur so grausam sein?!"
},
"defeat": {
"1": "Und jetzt, mein süßes Biest, komm zu Mama!"
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!"
},
"victory": {
"1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen."
},
"defeat": {
"1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!"
},
"victory": {
"1": "Bromley!!! Was ist falsch mit dir?!"
},
"defeat": {
"1": "Ihr seid wirklich selten dämlich."
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!"
},
"victory": {
"1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!"
},
"defeat": {
"1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere."
},
"victory": {
"1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf."
},
"defeat": {
"1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten."
}
},
"brock": {
"encounter": {
"1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!",

View File

@ -441,7 +441,7 @@
},
"courtney": {
"encounter": {
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
"2": "... Nun dann... Auslöschen...",
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
},
@ -470,7 +470,7 @@
"3": "Was machst du hier? Bist du uns gefolgt?"
},
"victory": {
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
}
@ -655,6 +655,86 @@
"5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen."
}
},
"aether_grunt": {
"encounter": {
"1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!",
"2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!",
"3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!",
"4": "Ich zeige dir die Macht des Æther-Paradies",
"5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!"
},
"victory": {
"1": "Hmph! Du scheinst ziemlich geschickt zu sein.",
"2": "Was hat das zu bedeuten? Was hat das zu bedeuten!",
"3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!",
"4": "Hmm... Es scheint, als hätte ich verloren.",
"5": "Ich hätte das Blitzdings benutzen sollen..."
}
},
"faba": {
"encounter": {
"1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!",
"2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?",
"3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich."
},
"victory": {
"1": "Aiyee!",
"2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...",
"3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann."
}
},
"skull_grunt": {
"encounter": {
"1": "Wir sind nicht böse, wir sind einfach nur nicht nett!",
"2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!",
"3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!",
"4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?",
"5": "Yo, platz hier nich rein, ♪ wien wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider nen Knall, ♪ denn das is nich der Fall! ♪\n$Wir wolln hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
},
"victory": {
"1": "Wie jetzt? Schon vorbei?",
"2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...",
"3": "Wir brauchen deine schwachen Pokémon eh nicht!",
"4": "Was? Deine Stärke spür ich bis in die Knochen...",
"5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?"
}
},
"plumeria": {
"encounter": {
"1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.",
"2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...",
"3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann."
},
"victory": {
"1": "Du bist ziemlich stark. Das muss ich zugeben.",
"2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...",
"3": "Ich denke, ich muss diese Niederlage einfach hinnehmen."
}
},
"macro_grunt": {
"encounter": {
"1": "Achtung hier ist Endstation für dich!",
"2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.",
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?"
},
"victory": {
"1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.",
"2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...",
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine."
}
},
"oleana": {
"encounter": {
"1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!",
"2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.",
"3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!"
},
"victory": {
"1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.",
"2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...",
"3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?"
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!"
@ -787,6 +867,72 @@
"1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen."
},
"victory": {
"1": "Wie kann eine Person nur so grausam sein?!"
},
"defeat": {
"1": "Und jetzt, mein süßes Biest, komm zu Mama!"
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!"
},
"victory": {
"1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen."
},
"defeat": {
"1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!"
},
"victory": {
"1": "Bromley!!! Was ist falsch mit dir?!"
},
"defeat": {
"1": "Ihr seid wirklich selten dämlich."
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!"
},
"victory": {
"1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!"
},
"defeat": {
"1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere."
},
"victory": {
"1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf."
},
"defeat": {
"1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten."
}
},
"brock": {
"encounter": {
"1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!",
@ -2463,7 +2609,7 @@
"1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!"
},
"victory": {
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark"
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!"
},
"defeat": {
"1": "Es ist Ok manchmal zu verlieren…"

View File

@ -13,5 +13,32 @@
"metFragment": {
"normal": "met at Lv{{level}},\n{{biome}}.",
"apparently": "apparently met at Lv{{level}},\n{{biome}}."
},
"natureFragment": {
"Hardy": "{{nature}}",
"Lonely": "{{nature}}",
"Brave": "{{nature}}",
"Adamant": "{{nature}}",
"Naughty": "{{nature}}",
"Bold": "{{nature}}",
"Docile": "{{nature}}",
"Relaxed": "{{nature}}",
"Impish": "{{nature}}",
"Lax": "{{nature}}",
"Timid": "{{nature}}",
"Hasty": "{{nature}}",
"Serious": "{{nature}}",
"Jolly": "{{nature}}",
"Naive": "{{nature}}",
"Modest": "{{nature}}",
"Mild": "{{nature}}",
"Quiet": "{{nature}}",
"Bashful": "{{nature}}",
"Rash": "{{nature}}",
"Calm": "{{nature}}",
"Gentle": "{{nature}}",
"Sassy": "{{nature}}",
"Careful": "{{nature}}",
"Quirky": "{{nature}}"
}
}

View File

@ -83,6 +83,9 @@
"battle_aether_grunt": "SM 에테르재단 배틀",
"battle_skull_grunt": "SM 스컬단 배틀",
"battle_macro_grunt": "SWSH 트레이너 배틀",
"battle_galactic_admin": "BDSP 갤럭시단 간부 배틀",
"battle_skull_admin": "SM 스컬단 간부 배틀",
"battle_oleana": "SWSH 올리브 배틀",
"battle_rocket_boss": "USUM 비주기 배틀",
"battle_aqua_magma_boss": "ORAS 아강 & 마적 배틀",
"battle_galactic_boss": "BDSP 태홍 배틀",
@ -91,7 +94,6 @@
"battle_aether_boss": "SM 루자미네 배틀",
"battle_skull_boss": "SM 구즈마 배틀",
"battle_macro_boss": "SWSH 로즈 배틀",
"abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구",
"badlands": "불가사의 던전 하늘의 탐험대 불모의 계곡",
"beach": "불가사의 던전 하늘의 탐험대 축축한 암반",

View File

@ -13,5 +13,32 @@
"metFragment": {
"normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.",
"apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다."
},
"natureFragment": {
"Hardy": "{{nature}}하는 성격",
"Lonely": "{{nature}}을 타는 성격",
"Brave": "{{nature}}한 성격",
"Adamant": "{{nature}}스러운 성격",
"Naughty": "{{nature}}같은 성격",
"Bold": "{{nature}}한 성격",
"Docile": "{{nature}}한 성격",
"Relaxed": "{{nature}}한 성격",
"Impish": "{{nature}}같은 성격",
"Lax": "{{nature}}거리는 성격",
"Timid": "{{nature}}같은 성격",
"Hasty": "{{nature}}한 성격",
"Serious": "{{nature}}한 성격",
"Jolly": "{{nature}}한 성격",
"Naive": "{{nature}}한 성격",
"Modest": "{{nature}}스러운 성격",
"Mild": "{{nature}}한 성격",
"Quiet": "{{nature}}한 성격",
"Bashful": "{{nature}}을 타는 성격",
"Rash": "{{nature}}거리는 성격",
"Calm": "{{nature}}한 성격",
"Gentle": "{{nature}}한 성격",
"Sassy": "{{nature}}진 성격",
"Careful": "{{nature}}한 성격",
"Quirky": "{{nature}}스러운 성격"
}
}

View File

@ -59,10 +59,11 @@
"fusionPaletteSwaps": "셰이더 적용",
"playerGender": "플레이어 성별",
"typeHints": "상성 힌트",
"masterVolume": "전체 볼륨",
"bgmVolume": "배경음악 볼륨",
"masterVolume": "마스터 볼륨",
"bgmVolume": "BGM 볼륨",
"fieldVolume": "전투효과 볼륨",
"seVolume": "조작 볼륨",
"seVolume": "SE 볼륨",
"uiVolume": "UI 볼륨",
"musicPreference": "음악 설정",
"mixed": "믹스",
"gamepadPleasePlug": "게임패드를 연결하거나 버튼을 입력하세요",

View File

@ -46,14 +46,14 @@ class DefaultOverrides {
readonly SEED_OVERRIDE: string = "";
readonly WEATHER_OVERRIDE: WeatherType = WeatherType.NONE;
readonly BATTLE_TYPE_OVERRIDE: "double" | "single" | null = null;
readonly STARTING_WAVE_OVERRIDE: integer = 0;
readonly STARTING_WAVE_OVERRIDE: number = 0;
readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN;
readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null;
/** Multiplies XP gained by this value including 0. Set to null to ignore the override */
readonly XP_MULTIPLIER_OVERRIDE: number | null = null;
readonly NEVER_CRIT_OVERRIDE: boolean = false;
/** default 1000 */
readonly STARTING_MONEY_OVERRIDE: integer = 0;
readonly STARTING_MONEY_OVERRIDE: number = 0;
/** Sets all shop item prices to 0 */
readonly WAIVE_SHOP_FEES_OVERRIDE: boolean = false;
/** Sets reroll price to 0 */
@ -86,14 +86,14 @@ class DefaultOverrides {
readonly STARTER_FORM_OVERRIDES: Partial<Record<Species, number>> = {};
/** default 5 or 20 for Daily */
readonly STARTING_LEVEL_OVERRIDE: integer = 0;
readonly STARTING_LEVEL_OVERRIDE: number = 0;
/**
* SPECIES OVERRIDE
* will only apply to the first starter in your party or each enemy pokemon
* default is 0 to not override
* @example SPECIES_OVERRIDE = Species.Bulbasaur;
*/
readonly STARTER_SPECIES_OVERRIDE: Species | integer = 0;
readonly STARTER_SPECIES_OVERRIDE: Species | number = 0;
readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE;
readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE;
@ -105,7 +105,7 @@ class DefaultOverrides {
// --------------------------
// OPPONENT / ENEMY OVERRIDES
// --------------------------
readonly OPP_SPECIES_OVERRIDE: Species | integer = 0;
readonly OPP_SPECIES_OVERRIDE: Species | number = 0;
readonly OPP_LEVEL_OVERRIDE: number = 0;
readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
@ -114,7 +114,8 @@ class DefaultOverrides {
readonly OPP_MOVESET_OVERRIDE: Array<Moves> = [];
readonly OPP_SHINY_OVERRIDE: boolean = false;
readonly OPP_VARIANT_OVERRIDE: Variant = 0;
readonly OPP_IVS_OVERRIDE: integer | integer[] = [];
readonly OPP_IVS_OVERRIDE: number | number[] = [];
readonly OPP_FORM_OVERRIDES: Partial<Record<Species, number>> = {};
// -------------
// EGG OVERRIDES

View File

@ -1,6 +1,7 @@
import { updateUserInfo } from "#app/account";
import { BattlerIndex } from "#app/battle";
import BattleScene from "#app/battle-scene";
import { BattleStyle } from "#app/enums/battle-style";
import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
import Trainer from "#app/field/trainer";
import { GameModes, getGameMode } from "#app/game-mode";
@ -170,6 +171,8 @@ export default class GameManager {
}
/**
* @deprecated Use `game.classicMode.startBattle()` or `game.dailyMode.startBattle()` instead
*
* Transitions to the start of a battle.
* @param species - Optional array of species to start the battle with.
* @returns A promise that resolves when the battle is started.
@ -177,6 +180,7 @@ export default class GameManager {
async startBattle(species?: Species[]) {
await this.classicMode.runToSummon(species);
if (this.scene.battleStyle === BattleStyle.SWITCH) {
this.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
this.setMode(Mode.MESSAGE);
this.endPhase();
@ -186,6 +190,7 @@ export default class GameManager {
this.setMode(Mode.MESSAGE);
this.endPhase();
}, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase));
}
await this.phaseInterceptor.to(CommandPhase);
console.log("==================[New Turn]==================");

View File

@ -1,8 +1,11 @@
import { BattleStyle } from "#app/enums/battle-style";
import { Species } from "#app/enums/species";
import { GameModes, getGameMode } from "#app/game-mode";
import overrides from "#app/overrides";
import { CommandPhase } from "#app/phases/command-phase";
import { EncounterPhase } from "#app/phases/encounter-phase";
import { SelectStarterPhase } from "#app/phases/select-starter-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
import { Mode } from "#app/ui/ui";
import { generateStarter } from "../gameManagerUtils";
import { GameManagerHelper } from "./gameManagerHelper";
@ -33,4 +36,28 @@ export class ClassicModeHelper extends GameManagerHelper {
this.game.removeEnemyHeldItems();
}
}
/**
* Transitions to the start of a battle.
* @param species - Optional array of species to start the battle with.
* @returns A promise that resolves when the battle is started.
*/
async startBattle(species?: Species[]) {
await this.runToSummon(species);
if (this.game.scene.battleStyle === BattleStyle.SWITCH) {
this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
this.game.setMode(Mode.MESSAGE);
this.game.endPhase();
}, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase));
this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
this.game.setMode(Mode.MESSAGE);
this.game.endPhase();
}, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase));
}
await this.game.phaseInterceptor.to(CommandPhase);
console.log("==================[New Turn]==================");
}
}

View File

@ -1,7 +1,10 @@
import { BattleStyle } from "#app/enums/battle-style";
import { Button } from "#app/enums/buttons";
import overrides from "#app/overrides";
import { CommandPhase } from "#app/phases/command-phase";
import { EncounterPhase } from "#app/phases/encounter-phase";
import { TitlePhase } from "#app/phases/title-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
import SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler";
import { Mode } from "#app/ui/ui";
import { GameManagerHelper } from "./gameManagerHelper";
@ -34,4 +37,27 @@ export class DailyModeHelper extends GameManagerHelper {
this.game.removeEnemyHeldItems();
}
}
/**
* Transitions to the start of a battle.
* @returns A promise that resolves when the battle is started.
*/
async startBattle() {
await this.runToSummon();
if (this.game.scene.battleStyle === BattleStyle.SWITCH) {
this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
this.game.setMode(Mode.MESSAGE);
this.game.endPhase();
}, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase));
this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
this.game.setMode(Mode.MESSAGE);
this.game.endPhase();
}, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase));
}
await this.game.phaseInterceptor.to(CommandPhase);
console.log("==================[New Turn]==================");
}
}

View File

@ -825,10 +825,7 @@ export default class SummaryUiHandler extends UiHandler {
biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
}),
natureFragment:
i18next.exists(`pokemonSummary:natureFragment.${rawNature}`) ?
i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) :
nature,
natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature })
});
const memoText = addBBCodeTextObject(this.scene, 7, 113, String(memoString), TextStyle.WINDOW_ALT);