diff --git a/public/audio/bgm/battle_plasma_grunt.mp3 b/public/audio/bgm/battle_plasma_grunt.mp3 new file mode 100644 index 00000000000..fe371f21f9f Binary files /dev/null and b/public/audio/bgm/battle_plasma_grunt.mp3 differ diff --git a/public/audio/bgm/encounter_plasma_grunt.mp3 b/public/audio/bgm/encounter_plasma_grunt.mp3 new file mode 100644 index 00000000000..478d3f8edc5 Binary files /dev/null and b/public/audio/bgm/encounter_plasma_grunt.mp3 differ diff --git a/public/images/trainer/aqua_grunt_f.json b/public/images/trainer/aqua_grunt_f.json new file mode 100644 index 00000000000..20515f30e5e --- /dev/null +++ b/public/images/trainer/aqua_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "aqua_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 71, + "h": 71 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 22, + "y": 8, + "w": 36, + "h": 71 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 71 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:6db25cb5753163d19bca8e2db45849ae:7d8f51509862bfdf8a78bf42dd0005cd:af0aa9494be37941522487032b556989$" + } +} diff --git a/public/images/trainer/aqua_grunt_f.png b/public/images/trainer/aqua_grunt_f.png new file mode 100644 index 00000000000..132d239c0b8 Binary files /dev/null and b/public/images/trainer/aqua_grunt_f.png differ diff --git a/public/images/trainer/aqua_grunt_m.json b/public/images/trainer/aqua_grunt_m.json new file mode 100644 index 00000000000..93408cc40c8 --- /dev/null +++ b/public/images/trainer/aqua_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "aqua_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 73, + "h": 73 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 46, + "h": 73 + }, + "frame": { + "x": 0, + "y": 0, + "w": 46, + "h": 73 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$" + } +} diff --git a/public/images/trainer/aqua_grunt_m.png b/public/images/trainer/aqua_grunt_m.png new file mode 100644 index 00000000000..87dbfd566a1 Binary files /dev/null and b/public/images/trainer/aqua_grunt_m.png differ diff --git a/public/images/trainer/archie.json b/public/images/trainer/archie.json new file mode 100644 index 00000000000..63837d40847 --- /dev/null +++ b/public/images/trainer/archie.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "archie.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 42, + "h": 80 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfa7fdd7b6ac9be68dc9dc562fb8339f:06f87a279450b21b19294ba956b69c26:4b7980be4e3ac1d20c9eaf970913ec63$" + } +} diff --git a/public/images/trainer/archie.png b/public/images/trainer/archie.png new file mode 100644 index 00000000000..c83975c0690 Binary files /dev/null and b/public/images/trainer/archie.png differ diff --git a/public/images/trainer/cyrus.json b/public/images/trainer/cyrus.json new file mode 100644 index 00000000000..8a3044f4034 --- /dev/null +++ b/public/images/trainer/cyrus.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "cyrus.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 0, + "w": 48, + "h": 80 + }, + "frame": { + "x": 0, + "y": 0, + "w": 48, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:5fc65535a23867fca7511cc9d7fc15b3:f328e97821f4faffcbca155cc2c5dc2c:55da82f1e1919212896c9c96b682cbd1$" + } +} diff --git a/public/images/trainer/cyrus.png b/public/images/trainer/cyrus.png new file mode 100644 index 00000000000..f7351340568 Binary files /dev/null and b/public/images/trainer/cyrus.png differ diff --git a/public/images/trainer/flare_grunt_f.json b/public/images/trainer/flare_grunt_f.json new file mode 100644 index 00000000000..e536d28a1aa --- /dev/null +++ b/public/images/trainer/flare_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "flare_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 31, + "y": 0, + "w": 23, + "h": 80 + }, + "frame": { + "x": 0, + "y": 0, + "w": 23, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$" + } +} diff --git a/public/images/trainer/flare_grunt_f.png b/public/images/trainer/flare_grunt_f.png new file mode 100644 index 00000000000..4446675dc44 Binary files /dev/null and b/public/images/trainer/flare_grunt_f.png differ diff --git a/public/images/trainer/flare_grunt_m.json b/public/images/trainer/flare_grunt_m.json new file mode 100644 index 00000000000..4d54acbf810 --- /dev/null +++ b/public/images/trainer/flare_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "flare_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 77, + "h": 77 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 24, + "y": 2, + "w": 31, + "h": 77 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 77 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:a26606e70778f88a1a7053b2f2420dde:84abf0d0f6bc90c6a60f660567b2d641:adc35a4070bac9fe828c2605a3b15744$" + } +} diff --git a/public/images/trainer/flare_grunt_m.png b/public/images/trainer/flare_grunt_m.png new file mode 100644 index 00000000000..79eb98449ca Binary files /dev/null and b/public/images/trainer/flare_grunt_m.png differ diff --git a/public/images/trainer/galactic_grunt_f.json b/public/images/trainer/galactic_grunt_f.json new file mode 100644 index 00000000000..d98809432ca --- /dev/null +++ b/public/images/trainer/galactic_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "galactic_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 68, + "h": 68 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 10, + "y": 11, + "w": 57, + "h": 68 + }, + "frame": { + "x": 0, + "y": 0, + "w": 57, + "h": 68 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:3012867f03f02c4ee67a8ab3ad5a000e:77a5f60f1adc158664b3b2ee17bf30fe:7e8259b5177c0a76e5d02d6bdc66affe$" + } +} diff --git a/public/images/trainer/galactic_grunt_f.png b/public/images/trainer/galactic_grunt_f.png new file mode 100644 index 00000000000..209d8ae09ba Binary files /dev/null and b/public/images/trainer/galactic_grunt_f.png differ diff --git a/public/images/trainer/galactic_grunt_m.json b/public/images/trainer/galactic_grunt_m.json new file mode 100644 index 00000000000..508c3fd182a --- /dev/null +++ b/public/images/trainer/galactic_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "galactic_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 73, + "h": 73 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 20, + "y": 6, + "w": 37, + "h": 73 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 73 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:856b85bb5d7a1ea2e7a76708ebf82d21:1687dff972369c6248e4aa5b0795fe62:259dd316440c335df5dc6008166d69ca$" + } +} diff --git a/public/images/trainer/galactic_grunt_m.png b/public/images/trainer/galactic_grunt_m.png new file mode 100644 index 00000000000..1fff818266c Binary files /dev/null and b/public/images/trainer/galactic_grunt_m.png differ diff --git a/public/images/trainer/lysandre.json b/public/images/trainer/lysandre.json new file mode 100644 index 00000000000..931b1633a32 --- /dev/null +++ b/public/images/trainer/lysandre.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "lysandre.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 14, + "y": 0, + "w": 52, + "h": 80 + }, + "frame": { + "x": 0, + "y": 0, + "w": 52, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:6b887c8bab74885a1b05f2b382759db6:ba102d9d25ddd794a3a17f029b971daf:e6066149f6ec4ccb9fc28faea3d64a7f$" + } +} diff --git a/public/images/trainer/lysandre.png b/public/images/trainer/lysandre.png new file mode 100644 index 00000000000..b83b649d142 Binary files /dev/null and b/public/images/trainer/lysandre.png differ diff --git a/public/images/trainer/magma_grunt_f.json b/public/images/trainer/magma_grunt_f.json new file mode 100644 index 00000000000..05c0512bbf0 --- /dev/null +++ b/public/images/trainer/magma_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "magma_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 60, + "h": 80 + }, + "frame": { + "x": 10, + "y": 0, + "w": 60, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$" + } +} diff --git a/public/images/trainer/magma_grunt_f.png b/public/images/trainer/magma_grunt_f.png new file mode 100644 index 00000000000..215ad83eea1 Binary files /dev/null and b/public/images/trainer/magma_grunt_f.png differ diff --git a/public/images/trainer/magma_grunt_m.json b/public/images/trainer/magma_grunt_m.json new file mode 100644 index 00000000000..ac8cd838c5a --- /dev/null +++ b/public/images/trainer/magma_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "magma_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 80 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 60, + "h": 80 + }, + "frame": { + "x": 10, + "y": 0, + "w": 60, + "h": 80 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:96aa833d987a01bcdcb6f0e7809f5daf:791cce8d026f92b2e52f0b66df8b8e11:35532fd5d9aea30957d50d06f2d2f9a6$" + } +} diff --git a/public/images/trainer/magma_grunt_m.png b/public/images/trainer/magma_grunt_m.png new file mode 100644 index 00000000000..a37b9acbb52 Binary files /dev/null and b/public/images/trainer/magma_grunt_m.png differ diff --git a/public/images/trainer/maxie.json b/public/images/trainer/maxie.json new file mode 100644 index 00000000000..46914ada760 --- /dev/null +++ b/public/images/trainer/maxie.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "maxie.png", + "format": "RGBA8888", + "size": { + "w": 79, + "h": 79 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 35, + "h": 79 + }, + "frame": { + "x": 0, + "y": 0, + "w": 35, + "h": 79 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:a943a18803f18065ae5f19e5089c83bb:33a1c168d314f5fb32f9b34244201178:54a227d24523907b8adf8e907821dcd9$" + } +} diff --git a/public/images/trainer/maxie.png b/public/images/trainer/maxie.png new file mode 100644 index 00000000000..232082f869f Binary files /dev/null and b/public/images/trainer/maxie.png differ diff --git a/public/images/trainer/plasma_grunt_f.json b/public/images/trainer/plasma_grunt_f.json new file mode 100644 index 00000000000..4d23eeeb483 --- /dev/null +++ b/public/images/trainer/plasma_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "plasma_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 75 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 21, + "y": 4, + "w": 37, + "h": 75 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 75 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:c3001e18f1878c01a4825697200e823e:2003e0d4db249f7020c3471872198ac8:b01645b9e941158814978f2126e7e995$" + } +} diff --git a/public/images/trainer/plasma_grunt_f.png b/public/images/trainer/plasma_grunt_f.png new file mode 100644 index 00000000000..95b065f4360 Binary files /dev/null and b/public/images/trainer/plasma_grunt_f.png differ diff --git a/public/images/trainer/plasma_grunt_m.json b/public/images/trainer/plasma_grunt_m.json new file mode 100644 index 00000000000..7c34b16790f --- /dev/null +++ b/public/images/trainer/plasma_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "plasma_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 72, + "h": 72 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 7, + "w": 47, + "h": 72 + }, + "frame": { + "x": 0, + "y": 0, + "w": 47, + "h": 72 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:61f195ebbcde93ab7442408edad7fe7a:28ae203b3cb42a94c4ba4420fdebdccc:9ae0ee174d431d48052a2f6b74e9d40c$" + } +} diff --git a/public/images/trainer/plasma_grunt_m.png b/public/images/trainer/plasma_grunt_m.png new file mode 100644 index 00000000000..e3ec6dd8c35 Binary files /dev/null and b/public/images/trainer/plasma_grunt_m.png differ diff --git a/public/images/trainer/rocket_grunt_f.json b/public/images/trainer/rocket_grunt_f.json new file mode 100644 index 00000000000..091fedd31f0 --- /dev/null +++ b/public/images/trainer/rocket_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "rocket_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 67, + "h": 67 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 18, + "y": 9, + "w": 50, + "h": 67 + }, + "frame": { + "x": 0, + "y": 0, + "w": 50, + "h": 67 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f2e4df704ed3262efeba03b98c4f34b6:856ea7816491331f96e020076871263b:fadb24d665ba1be4d210fe9064954d5b$" + } +} diff --git a/public/images/trainer/rocket_grunt_f.png b/public/images/trainer/rocket_grunt_f.png new file mode 100644 index 00000000000..c4f6e96dec4 Binary files /dev/null and b/public/images/trainer/rocket_grunt_f.png differ diff --git a/public/images/trainer/rocket_grunt_m.json b/public/images/trainer/rocket_grunt_m.json new file mode 100644 index 00000000000..b8417d3b763 --- /dev/null +++ b/public/images/trainer/rocket_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "rocket_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 65, + "h": 65 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 17, + "y": 9, + "w": 42, + "h": 65 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 65 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$" + } +} diff --git a/public/images/trainer/rocket_grunt_m.png b/public/images/trainer/rocket_grunt_m.png new file mode 100644 index 00000000000..027da6cacb0 Binary files /dev/null and b/public/images/trainer/rocket_grunt_m.png differ diff --git a/src/battle-scene.ts b/src/battle-scene.ts index c2097391894..183d47ee6cb 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1820,6 +1820,8 @@ export default class BattleScene extends SceneBase { return 13.940; case "end_summit": //PMD RTDX Sky Tower Summit return 30.025; + case "battle_plasma_grunt": //BW Team Plasma Battle + return 12.974; } return 0; diff --git a/src/battle.ts b/src/battle.ts index 104c35a5e9f..68e16cb28bb 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -423,7 +423,14 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get export interface FixedBattleConfigs { [key: integer]: FixedBattleConfig } - +/** + * Youngster/Lass on 5 + * Rival on 8, 55, 95, 145, 195 + * Evil team grunts on 35, 62, 64, 65, 112, 114 (Not currently spawning) + * Evil leader on 115, 165 (Not currently spawning) + * E4 on 182, 184, 186, 188 + * Champion on 190 + */ export const classicFixedBattles: FixedBattleConfigs = { [5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), @@ -431,12 +438,28 @@ export const classicFixedBattles: FixedBattleConfigs = { .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + // [35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + // [62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), + // [64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), + // [65]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + // [112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), + // [114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), + // [115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])), [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), + // [165]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) + // .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2 ])), [182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])), [184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 2076123610f..5b5e0d865ba 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -449,6 +449,222 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ] } ], + [TrainerType.ROCKET_GRUNT]: [ + { + encounter: [ + "dialogue:rocket_grunt.encounter.1" + ], + victory: [ + "dialogue:rocket_grunt.victory.1" + ] + } + ], + [TrainerType.MAGMA_GRUNT]: [ + { + encounter: [ + "dialogue:magma_grunt.encounter.1" + ], + victory: [ + "dialogue:magma_grunt.victory.1" + ] + } + ], + [TrainerType.AQUA_GRUNT]: [ + { + encounter: [ + "dialogue:aqua_grunt.encounter.1" + ], + victory: [ + "dialogue:aqua_grunt.victory.1" + ] + } + ], + [TrainerType.GALACTIC_GRUNT]: [ + { + encounter: [ + "dialogue:galactic_grunt.encounter.1" + ], + victory: [ + "dialogue:galactic_grunt.victory.1" + ] + } + ], + [TrainerType.PLASMA_GRUNT]: [ + { + encounter: [ + "dialogue:plasma_grunt.encounter.1" + ], + victory: [ + "dialogue:plasma_grunt.victory.1" + ] + } + ], + [TrainerType.FLARE_GRUNT]: [ + { + encounter: [ + "dialogue:flare_grunt.encounter.1" + ], + victory: [ + "dialogue:flare_grunt.victory.1" + ] + } + ], + [TrainerType.ROCKET_BOSS_GIOVANNI_1]: [ + { + encounter: [ + "dialogue:rocket_boss_giovanni_1.encounter.1" + ], + victory: [ + "dialogue:rocket_boss_giovanni_1.victory.1" + ], + defeat: [ + "dialogue:rocket_boss_giovanni_1.defeat.1" + ] + } + ], + [TrainerType.ROCKET_BOSS_GIOVANNI_2]: [ + { + encounter: [ + "dialogue:rocket_boss_giovanni_2.encounter.1" + ], + victory: [ + "dialogue:rocket_boss_giovanni_2.victory.1" + ], + defeat: [ + "dialogue:rocket_boss_giovanni_2.defeat.1" + ] + } + ], + [TrainerType.MAXIE]: [ + { + encounter: [ + "dialogue:magma_boss_maxie_1.encounter.1" + ], + victory: [ + "dialogue:magma_boss_maxie_1.victory.1" + ], + defeat: [ + "dialogue:magma_boss_maxie_1.defeat.1" + ] + } + ], + [TrainerType.MAXIE_2]: [ + { + encounter: [ + "dialogue:magma_boss_maxie_2.encounter.1" + ], + victory: [ + "dialogue:magma_boss_maxie_2.victory.1" + ], + defeat: [ + "dialogue:magma_boss_maxie_2.defeat.1" + ] + } + ], + [TrainerType.ARCHIE]: [ + { + encounter: [ + "dialogue:aqua_boss_archie_1.encounter.1" + ], + victory: [ + "dialogue:aqua_boss_archie_1.victory.1" + ], + defeat: [ + "dialogue:aqua_boss_archie_1.defeat.1" + ] + } + ], + [TrainerType.ARCHIE_2]: [ + { + encounter: [ + "dialogue:aqua_boss_archie_2.encounter.1" + ], + victory: [ + "dialogue:aqua_boss_archie_2.victory.1" + ], + defeat: [ + "dialogue:aqua_boss_archie_2.defeat.1" + ] + } + ], + [TrainerType.CYRUS]: [ + { + encounter: [ + "dialogue:galactic_boss_cyrus_1.encounter.1" + ], + victory: [ + "dialogue:galactic_boss_cyrus_1.victory.1" + ], + defeat: [ + "dialogue:galactic_boss_cyrus_1.defeat.1" + ] + } + ], + [TrainerType.CYRUS_2]: [ + { + encounter: [ + "dialogue:galactic_boss_cyrus_2.encounter.1" + ], + victory: [ + "dialogue:galactic_boss_cyrus_2.victory.1" + ], + defeat: [ + "dialogue:galactic_boss_cyrus_2.defeat.1" + ] + } + ], + [TrainerType.GHETSIS]: [ + { + encounter: [ + "dialogue:plasma_boss_ghetsis_1.encounter.1" + ], + victory: [ + "dialogue:plasma_boss_ghetsis_1.victory.1" + ], + defeat: [ + "dialogue:plasma_boss_ghetsis_1.defeat.1" + ] + } + ], + [TrainerType.GHETSIS_2]: [ + { + encounter: [ + "dialogue:plasma_boss_ghetsis_2.encounter.1" + ], + victory: [ + "dialogue:plasma_boss_ghetsis_2.victory.1" + ], + defeat: [ + "dialogue:plasma_boss_ghetsis_2.defeat.1" + ] + } + ], + [TrainerType.LYSANDRE]: [ + { + encounter: [ + "dialogue:flare_boss_lysandre_1.encounter.1" + ], + victory: [ + "dialogue:flare_boss_lysandre_1.victory.1" + ], + defeat: [ + "dialogue:flare_boss_lysandre_1.defeat.1" + ] + } + ], + [TrainerType.LYSANDRE_2]: [ + { + encounter: [ + "dialogue:flare_boss_lysandre_2.encounter.1" + ], + victory: [ + "dialogue:flare_boss_lysandre_2.victory.1" + ], + defeat: [ + "dialogue:flare_boss_lysandre_2.defeat.1" + ] + } + ], [TrainerType.BROCK]: { encounter: [ "dialogue:brock.encounter.1", diff --git a/src/data/enums/trainer-type.ts b/src/data/enums/trainer-type.ts index 64eb07e22ce..6bd8f567acb 100644 --- a/src/data/enums/trainer-type.ts +++ b/src/data/enums/trainer-type.ts @@ -52,6 +52,24 @@ export enum TrainerType { WAITER, WORKER, YOUNGSTER, + ROCKET_GRUNT, + MAGMA_GRUNT, + AQUA_GRUNT, + GALACTIC_GRUNT, + PLASMA_GRUNT, + FLARE_GRUNT, + ROCKET_BOSS_GIOVANNI_1, + ROCKET_BOSS_GIOVANNI_2, + MAXIE, + MAXIE_2, + ARCHIE, + ARCHIE_2, + CYRUS, + CYRUS_2, + GHETSIS, + GHETSIS_2, + LYSANDRE, + LYSANDRE_2, BROCK = 200, MISTY, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 12c3bdb52d9..1f6513ec3e2 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -295,6 +295,25 @@ export class TrainerConfig { case TrainerType.LARRY_ELITE: trainerType = TrainerType.LARRY; break; + case TrainerType.ROCKET_BOSS_GIOVANNI_1: + case TrainerType.ROCKET_BOSS_GIOVANNI_2: + trainerType = TrainerType.GIOVANNI; + break; + case TrainerType.MAXIE_2: + trainerType = TrainerType.MAXIE; + break; + case TrainerType.ARCHIE_2: + trainerType = TrainerType.ARCHIE; + break; + case TrainerType.CYRUS_2: + trainerType = TrainerType.CYRUS; + break; + case TrainerType.GHETSIS_2: + trainerType = TrainerType.GHETSIS; + break; + case TrainerType.LYSANDRE_2: + trainerType = TrainerType.LYSANDRE; + break; case TrainerType.MARNIE_ELITE: trainerType = TrainerType.MARNIE; break; @@ -508,6 +527,40 @@ export class TrainerConfig { return this; } + /** + * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. + * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. + * @param {Type[]} specialtyTypes - The specialty types for the evil team Leader. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig { + if (!getIsInitialized()) { + initI18n(); + } + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); + console.log(signatureSpecies); + signatureSpecies.forEach((speciesPool, s) => { + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); + this.setSpecialtyTypes(...specialtyTypes); + } + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + this.setTitle(title); + this.setMoneyMultiplier(2.5); + this.setBoss(); + this.setStaticParty(); + this.setBattleBgm("battle_unova_gym"); // TODO: change + this.setVictoryBgm("victory_gym"); // TODO: change + + return this; + } + /** * Initializes the trainer configuration for a Gym Leader. * @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader. @@ -761,6 +814,34 @@ interface TrainerConfigs { [key: integer]: TrainerConfig } +/** + * The function to get variable strength grutns + * @param scene the singleton scene being passed in + * @returns the correct TrainerPartyTemplate + */ +function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { + const waveIndex = scene.currentBattle?.waveIndex; + if (waveIndex < 40) { + return trainerPartyTemplates.TWO_AVG; + } else if (waveIndex < 80) { + switch (waveIndex) { + case 62: + return trainerPartyTemplates.THREE_AVG; + case 64: + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + case 65: + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } + } else { + switch (waveIndex) { + case 112: + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + case 114: + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger + } + } +} + function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; } @@ -1103,6 +1184,54 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools( [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] ), + [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING], + [TrainerPoolTier.UNCOMMON]: [Species.GRIMER, Species.CUBONE, Species.ODDISH, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], + [TrainerPoolTier.RARE]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER], + [TrainerPoolTier.SUPER_RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], + [TrainerPoolTier.ULTRA_RARE]: [Species.DRATINI, Species.LARVITAR] + }), + [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY], + [TrainerPoolTier.UNCOMMON]: [Species.PHANPY, Species.SWINUB, Species.GLIGAR, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], + [TrainerPoolTier.RARE]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA], + [TrainerPoolTier.SUPER_RARE]: [Species.TRAPINCH, Species.HEATMOR], + [TrainerPoolTier.ULTRA_RARE]: [Species.TURTONATOR, Species.CHARCADET] + }), + [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH], + [TrainerPoolTier.UNCOMMON]: [Species.SPHEAL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL ], + [TrainerPoolTier.RARE]: [Species.CLAMPERL, Species.REMORAID, Species.ARROKUDA], + [TrainerPoolTier.SUPER_RARE]: [Species.MANTINE, Species.BASCULEGION], + [TrainerPoolTier.ULTRA_RARE]: [Species.DONDOZO] + }), + [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE], + [TrainerPoolTier.UNCOMMON]: [Species.BRONZOR, Species.DRIFLOON, Species.BURMY], + [TrainerPoolTier.RARE]: [Species.CARNIVINE], + [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], + [TrainerPoolTier.ULTRA_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] + }), + [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE], + [TrainerPoolTier.UNCOMMON]: [ Species.FRILLISH, Species.VENIPEDE, Species.SANDILE, Species.TRUBBISH, Species.GOLETT], + [TrainerPoolTier.RARE]: [Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS, Species.DRILBUR, Species.KLINK, Species.VULLABY], + [TrainerPoolTier.SUPER_RARE]: [Species.PAWNIARD, Species.VULLABY, Species.DRUDDIGON, Species.BOUFFALANT, Species.ZORUA], + [TrainerPoolTier.ULTRA_RARE]: [Species.AXEW, Species.DEINO, Species.DURANT] + }), + [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI], + [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN], + [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL], + [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN], + [TrainerPoolTier.ULTRA_RARE]: [] + }), [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"],true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"],false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"],true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), @@ -1316,7 +1445,6 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); })), - [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) @@ -1381,4 +1509,211 @@ export const trainerConfigs: TrainerConfigs = { const starter = party[0]; return [modifierTypes.TERA_SHARD().generateType(null, [starter.species.type1]).withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; }), + + [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN , Species.ALOLA_PERSIAN])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.NIDOKING , Species.NIDOQUEEN ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RHYPERIOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.MAROWAK , Species.ALOLA_MAROWAK])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR , Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.EXCADRILL ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HIPPOWDON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GASTRODON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEWTWO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIGHTYENA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.GALAR_WEEZING ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MAGMORTAR, Species.TORKOAL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.FLYGON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GREAT_TUSK ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SHIFTRY, Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Chlorophyll + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TORKOAL, Species.NINETALES ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // DROUGHT + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LINOONE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.PELIPPER ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MUK, Species.ALOLA_MUK ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TENTACRUEL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RELICANTH, Species.WAILORD ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.KINGDRA, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BEARTIC, Species.ARMALDO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Swift Swim + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HUNTAIL, Species.GOREBYSS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Swift Swim + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.POLITOED, Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Drizzle + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS, Species.BASCULEGION ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.OVERQWIL ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ELECTRODE, Species.HISUI_ELECTRODE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.ROARING_MOON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HISUI_ZOROARK ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS, Species.RUNERIGUS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BOUFFALANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SEISMITOAD, Species.CARRACOSTA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.EELEKTROSS, Species.GALVANTULA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCARONA ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SLITHER_WING, Species.IRON_MOTH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DURANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DARMANITAN, Species.GALAR_DARMANITAN ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYUREM ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIENSHAO ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.TALONFLAME ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MILOTIC ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GHOLDENGO, Species.AEGISLASH ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), }; diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 5a86d5c4502..1646866189b 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -122,6 +122,14 @@ export default class Trainer extends Phaser.GameObjects.Container { // Determine the title to include based on the configuration and includeTitle flag. let title = includeTitle && this.config.title ? this.config.title : null; + if (this.name === "" && name.toLowerCase().includes("grunt")) { + // This is a evil team grunt so we localize it by only using the "name" as the title + title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`); + console.log("Localized grunt name: " + title); + // Since grunts are not named we can just return the title + return title; + } + // If the trainer has a name (not null or undefined). if (this.name) { // If the title should be included. diff --git a/src/locales/de/dialogue.ts b/src/locales/de/dialogue.ts index 6b0bdc7c16a..1bfff5aa000 100644 --- a/src/locales/de/dialogue.ts +++ b/src/locales/de/dialogue.ts @@ -367,6 +367,17 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "Ich werde für das nächste Rennen tunen." }, }, + "rocket_grunt": { + "encounter": { + 1: `Jetzt gibt es Ärger!… + $und es kommt noch härter! + $Wir wollen über die Erde regieren… + $und naja du kennst den Rest…!` + }, + "victory": { + 1: "Das war mal wieder ein Schuss in den Ofen!" + }, + }, "firebreather": { "encounter": { 1: "Meine Flammen werden dich verschlingen!", @@ -391,6 +402,190 @@ export const PGMdialogue: DialogueTranslationEntries = { 3: "Ich glaube, ich bin der der seekrank ist..." }, }, + "magma_grunt": { + "encounter": { + 1: "Keiner, der sich Team Magma in den Weg stellt, bekommt Gnade, nicht einmal Kinder!" + }, + "victory": { + 1: "Wie kann das sein? Ich bin Teil vom mächtigen Team Magma! Wir wollen doch nur die Welt verbessern…" + }, + }, + "aqua_grunt": { + "encounter": { + 1: "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!", + }, + "victory": { + 1: "Vielleicht sollte ich wohl lieber selber über die Planke gehen…", + }, + }, + "galactic_grunt": { + "encounter": { + 1: "Team Galaktik wird die Welt in eine bessere Welt verwandeln! Und du wirst uns nicht aufhalten!" + }, + "victory": { + 1: "Zyrus wird uns für diese Niederlage bestrafen…" + }, + }, + "plasma_grunt": { + "encounter": { + 1: "Pokémon sollten frei sein! Team Plasma wird sie befreien!" + }, + "victory": { + 1: "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten…" + }, + }, + "flare_grunt": { + "encounter": { + 1: `Ich bin ein Mitglied von Team Flare! Das sieht man mir doch an. Mein Stil ist unverkennbar! + $Du kannst definitiv ein Umstyling gebrauchen!` + }, + "victory": { + 1: "Stil ist wohl doch nicht alles…" + }, + }, + "rocket_boss_giovanni_1": { + "encounter": { + 1: `Ich bin beeindruckt, du hast es bis hierher geschafft! + $Ich bin Giovanni, der Anführer von Team Rocket! + $Wir regieren den Untergrund von Kanto! + $Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!` + + }, + "victory": { + 1: "Ich ziehe mich zurück, aber ich werde zurückkehren! Team Rocket wird niemals besiegt werden!" + }, + "defeat": { + 1: `Merke dir meine Worte. Nicht in der Lage zu sein, + $deine eigene Stärke zu messen, zeigt, dass du immer noch ein Kind bist.` + } + }, + "rocket_boss_giovanni_2": { + "encounter": { + 1: "Du schon wieder… Wie hast du mich gefunden? Team Rocket wird dich endlich aus der Welt schaffen!" + }, + "victory": { + 1: "Wie ist das möglich...? Der kostbare Traum von Team Rocket ist nicht mehr als eine Illusion geworden..." + }, + "defeat": { + 1: "Team Rocket wird niemals besiegt werden! Ich werde zurückkehren!" + } + }, + "magma_boss_maxie_1": { + "encounter": { + 1: `Die Welt ist nicht perfekt. Ich werde sie verbessern, indem ich sie neu erschaffe! + $Wir brauchen mehr Landmassen um zu leben! Team Magma wird dieses Ziel mit aller Macht erreichen!` + }, + "victory": { + 1:"Ugh! Das entspricht nicht meinen Berechnungen! Wie konnte ich verlieren? Wir sehen uns wieder!" + }, + "defeat": { + 1: "Team Magma wird weiterhin die Welt verbessern!" + } + }, + "magma_boss_maxie_2": { + "encounter": { + 1: `Du bist das letzte Hindernis, das zwischen mir und meinen Zielen steht. + $Mach dich bereit durch die Macht von Team Magma besiegt zu werden!` + }, + "victory": { + 1: "Das... Das kann nicht sein...", + }, + "defeat": { + 1: "Und jetzt werde ich diesen Planeten terraformen, um ihn ideal für die Menschheit zu machen." + } + }, + "aqua_boss_archie_1": { + "encounter": { + 1: "Ich bin Adrian, der Anführer von Team Aqua! Wir werden die Welt mit Wasser überfluten!" + }, + "victory": { + 1: "Lass uns mal wieder treffen. Ich werde mir sicher sein, dass ich dieses Gesicht wiedererkenne." + }, + "defeat": { + 1: "Brilliant! Mein Team wird jetzt nicht zurückhalten!" + } + }, + "aqua_boss_archie_2": { + "encounter": { + 1: "Ich habe lange auf diesen Tag gewartet. Das ist die wahre Macht von Team Aqua!" + }, + "victory": { + 1: "So habe ich mir das nicht vorgestellt..." + }, + "defeat": { + 1: "Ich werde alles in dieser Welt in seinen ursprünglichen, reinen Zustand zurückversetzen!!" + } + }, + "galactic_boss_cyrus_1": { + "encounter": { + 1: `Du wurdest von leerer Gefühlsduselei hierher getrieben. + $Ich werde dich bereuen lassen, auf dein Herz gehört zu haben!` + }, + "victory": { + 1: "Interessant. Und ziemlich eigenartig." + }, + "defeat": { + 1: "Ich werde meine neue Welt erschaffen..." + } + }, + "galactic_boss_cyrus_2": { + "encounter": { + 1: `So sehen wir uns wieder. Es scheint, als wären unsere Schicksale miteinander verflochten. + $Aber hier und jetzt werde ich diese Verbindung brechen!` + }, + "victory": { + 1: "Wie? Wie? WIE?!" + }, + "defeat": { + 1: "Bis bald." + } + }, + "plasma_boss_ghetsis_1": { + "encounter": { + 1:"Ich werde nicht zulassen, dass mich jemand aufhält! Egal wer es auch sein mag!" + }, + "victory": { + 1: "Wie kann das sein? Ich bin der Schöpfer von Team Plasma! Ich bin perfekt!" + }, + "defeat": { + 1: "Ich bin der perfekte Herrscher einer perfekten neuen Welt! Mwa ha ha!" + } + }, + "plasma_boss_ghetsis_2": { + "encounter": { + 1: "Komm schon! Ich will dein Gesicht sehen, in dem Moment, in dem du alle Hoffnung verlierst!" + }, + "victory": { + 1: "Meine Berechnungen... Nein! Meine sorgfältigen Pläne! Die Welt sollte mir gehören!" + }, + "defeat": { + 1: "Kyurem! Verwende Absorptionsfusion!" + } + }, + "flare_boss_lysandre_1": { + "encounter": { + 1: "DU willst mich aufhalten? Dann zeig mir deine Stärke in einem Kampf!" + }, + "victory": { + 1: `Du bist hier, um mich aufzuhalten. Aber ich bitte dich zu warten. + $Ich bin so kurz davor, meine Vision zu verwirklichen.` + }, + "defeat": { + 1: "Pokémon... Sollten nicht mehr existieren." + } + }, + "flare_boss_lysandre_2": { + "encounter": { + 1: `Die Zukunft, die du willst, oder die Zukunft, die ich will... + $Lass uns sehen, welche mehr zu existieren verdient, sollen wir?` + }, + "victory": { + 1: "Die Zukunft, die ich erschaffen wollte... Es ist vorbei..." + }, + "defeat": { + 1: "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen." + } + }, "brock": { "encounter": { 1: "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", diff --git a/src/locales/de/trainers.ts b/src/locales/de/trainers.ts index b7d7ec01617..b473bb94094 100644 --- a/src/locales/de/trainers.ts +++ b/src/locales/de/trainers.ts @@ -13,6 +13,12 @@ export const titles: SimpleTranslationEntries = { "rival": "Rivale", "professor": "Professor", "frontier_brain": "Kampfkoryphäen", + "rocket_boss": "Rocket-Boss", + "magma_boss": "Magma-Boss", + "aqua_boss": "Aqua-Boss", + "galactic_boss": "Galaktik-Boss", + "plasma_boss": "Weiser von Team Plasma", // This is on purpose, since "Ghetsis" is never mentioned as the boss of team plasma in the game but as "Weiser" + "flare_boss": "Flare-Boss", // Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc. } as const; @@ -118,7 +124,25 @@ export const trainerClasses: SimpleTranslationEntries = { "worker": "Arbeiter", "worker_female": "Arbeiterin", "workers": "Arbeiter", - "youngster": "Knirps" + "youngster": "Knirps", + "rocket_grunt": "Rüpel von Team Rocket", + "rocket_grunt_female": "Rüpel von Team Rocket", + "rocket_grunts": "Rüpel von Team Rocket", + "magma_grunt": "Rüpel von Team Magma", + "magma_grunt_female": "Rüpel von Team Magma", + "magma_grunts": "Rüpel von Team Magma", + "aqua_grunt": "Rüpel von Team Aqua", + "aqua_grunt_female": "Rüpel von Team Aqua", + "aqua_grunts": "Rüpel von Team Aqua", + "galactic_grunt": "Rüpel von Team Galaktik", + "galactic_grunt_female": "Rüpel von Team Galaktik", + "galactic_grunts": "Rüpel von Team Galaktik", + "plasma_grunt": "Rüpel von Team Plasma", + "plasma_grunt_female": "Rüpel von Team Plasma", + "plasma_grunts": "Rüpel von Team Plasma", + "flare_grunt": "Rüpel von Team Flare", + "flare_grunt_female": "Rüpel von Team Flare", + "flare_grunts": "Rüpel von Team Flare", } as const; // Names of special trainers like gym leaders, elite four, and the champion @@ -247,6 +271,11 @@ export const trainerNames: SimpleTranslationEntries = { "leon": "Delion", "rival": "Finn", "rival_female": "Ivy", + "maxie": "Marc", + "archie": "Adrian", + "cyrus": "Zyrus", + "ghetsis": "G-Cis", + "lysandre": "Flordelis", // Double Names "blue_red_double": "Blau & Rot", diff --git a/src/locales/en/dialogue.ts b/src/locales/en/dialogue.ts index 86167da696c..abf95193bc9 100644 --- a/src/locales/en/dialogue.ts +++ b/src/locales/en/dialogue.ts @@ -383,6 +383,186 @@ export const PGMdialogue: DialogueTranslationEntries = { 3: "I think it's me that's seasick..." }, }, + "rocket_grunt": { + "encounter": { + 1: "Prepare for trouble!" + }, + "victory": { + 1: "Team Rocket blasting off again!" + }, + }, + "magma_grunt": { + "encounter": { + 1: " If you get in the way of Team Magma, don’t expect any mercy!" + }, + "victory": { + 1: "Huh? I lost?!" + }, + }, + "aqua_grunt": { + "encounter": { + 1: "No one who crosses Team Aqua gets any mercy, not even kids!" + }, + "victory": { + 1: "You're kidding me!" + }, + }, + "galactic_grunt": { + "encounter": { + 1: "Don't mess with Team Galactic!" + }, + "victory": { + 1: "Shut down..." + }, + }, + "plasma_grunt": { + "encounter": { + 1: "We won't tolerate people who have different ideas!" + }, + "victory": { + 1: "Plasmaaaaaaaaa!" + }, + }, + "flare_grunt": { + "encounter": { + 1: "Fashion is most important to us!" + }, + "victory": { + 1: "The future doesn't look bright for me." + }, + }, + "rocket_boss_giovanni_1": { + "encounter": { + 1: "So! I must say, I am impressed you got here!" + }, + "victory": { + 1: "WHAT! This cannot be!" + }, + "defeat": { + 1: "Mark my words. Not being able to measure your own strength shows that you are still a child." + } + }, + "rocket_boss_giovanni_2": { + "encounter": { + 1: "My old associates need me... Are you going to get in my way?" + }, + "victory": { + 1: "How is this possible...?\nThe precious dream of Team Rocket has become little more than an illusion..." + }, + "defeat": { + 1: "Team Rocket will be reborn again, and I will rule the world!" + } + }, + "magma_boss_maxie_1": { + "encounter": { + 1: "I will bury you by my own hand. I hope you appreciate this honor!" + }, + "victory": { + 1: "Ugh! You are... quite capable...\nI fell behind, but only by an inch..." + }, + "defeat": { + 1: "Team Magma will prevail!" + } + }, + "magma_boss_maxie_2": { + "encounter": { + 1: "You are the final obstacle remaining between me and my goals.\nBrace yourself for my ultimate attack! Fuhahaha!" + }, + "victory": { + 1: "This... This is not.. Ngh..." + }, + "defeat": { + 1: "And now... I will transform this planet to a land ideal for humanity." + } + }, + "aqua_boss_archie_1": { + "encounter": { + 1: "I'm leader of Team Aqua, so I'm afraid it's the rope's end for you." + }, + "victory": { + 1: "Let's meet again somewhere. I'll be sure to remember that face." + }, + "defeat": { + 1: "Brilliant! My team won't hold back now!" + } + }, + "aqua_boss_archie_2": { + "encounter": { + 1: "I've been waiting so long for this day to come.\nThis is the true power of my team!" + }, + "victory": { + 1: "Like I figured..." + }, + "defeat": { + 1: "I'll return everything in this world to its original, pure state!!" + } + }, + "galactic_boss_cyrus_1": { + "encounter": { + 1: "You were compelled to come here by such vacuous sentimentality\nI will make you regret paying heed to your heart!" + }, + "victory": { + 1: "Interesting. And quite curious." + }, + "defeat": { + 1: "I will create my new world..." + } + }, + "galactic_boss_cyrus_2": { + "encounter": { + 1: "So we meet again. It seems our fates have become intertwined.\nBut here and now, I will finally break that bond!" + }, + "victory": { + 1: "How? How? HOW?!" + }, + "defeat": { + 1: "Farewell." + } + }, + "plasma_boss_ghetsis_1": { + "encounter": { + 1: "I won't allow anyone to stop me! No matter who does what!" + }, + "victory": { + 1: "How can this be? I'm the creator of Team Plasma! I'm perfect!" + }, + "defeat": { + 1: "I am the perfect ruler of a perfect new world! Mwa ha ha!" + } + }, + "plasma_boss_ghetsis_2": { + "encounter": { + 1: "Come now! I want to see your face at the moment you lose all hope!" + }, + "victory": { + 1: "My calculations... No! My careful schemes! The world should be mine!" + }, + "defeat": { + 1: "Kyurem! Use Absofusion!" + } + }, + "flare_boss_lysandre_1": { + "encounter": { + 1: "Do you want to stop me? Show me in battle." + }, + "victory": { + 1: "You are here to stop me. But I ask you to wait. " + }, + "defeat": { + 1: "Pokemon...Shall no longer exist." + } + }, + "flare_boss_lysandre_2": { + "encounter": { + 1: "The future you want, or the future I want... Let us see which one is more deserving, shall we?" + }, + "victory": { + 1: "Whaugh!" + }, + "defeat": { + 1: "Fools with no vision will continue to befoul this beautiful world." + } + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/en/trainers.ts b/src/locales/en/trainers.ts index 701980f8d37..39ca5f7512c 100644 --- a/src/locales/en/trainers.ts +++ b/src/locales/en/trainers.ts @@ -13,6 +13,12 @@ export const titles: SimpleTranslationEntries = { "rival": "Rival", "professor": "Professor", "frontier_brain": "Frontier Brain", + "rocket_boss": "Team Rocket Boss", + "magma_boss": "Team Magma Boss", + "aqua_boss": "Team Aqua Boss", + "galactic_boss": "Team Galactic Boss", + "plasma_boss": "Team Plasma Boss", + "flare_boss": "Team Flare Boss", // Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc. } as const; @@ -118,7 +124,19 @@ export const trainerClasses: SimpleTranslationEntries = { "worker": "Worker", "worker_female": "Worker", "workers": "Workers", - "youngster": "Youngster" + "youngster": "Youngster", + "rocket_grunt": "Rocket Grunt", + "rocket_grunt_female": "Rocket Grunt", + "magma_grunt": "Magma Grunt", + "magma_grunt_female": "Magma Grunt", + "aqua_grunt": "Aqua Grunt", + "aqua_grunt_female": "Aqua Grunt", + "galactic_grunt": "Galactic Grunt", + "galactic_grunt_female": "Galactic Grunt", + "plasma_grunt": "Plasma Grunt", + "plasma_grunt_female": "Plasma Grunt", + "flare_grunt": "Flare Grunt", + "flare_grunt_female": "Flare Grunt", } as const; // Names of special trainers like gym leaders, elite four, and the champion @@ -247,6 +265,11 @@ export const trainerNames: SimpleTranslationEntries = { "leon": "Leon", "rival": "Finn", "rival_female": "Ivy", + "maxie": "Maxie", + "archie": "Archie", + "cyrus": "Cyrus", + "ghetsis": "Ghetsis", + "lysandre": "Lysandre", // Double Names "blue_red_double": "Blue & Red",