Compare commits
12 Commits
ec27c14035
...
10aa85e9db
Author | SHA1 | Date | |
---|---|---|---|
|
10aa85e9db | ||
|
7048fbe06f | ||
|
153d8ba557 | ||
|
3fa2088f5b | ||
|
cd1c810c5a | ||
|
d20b7553ef | ||
|
800abc4767 | ||
|
a2a1f3ec24 | ||
|
bb6ec94c02 | ||
|
32496fa585 | ||
|
67babd0e83 | ||
|
cdc4826018 |
Before Width: | Height: | Size: 303 B After Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
BIN
public/images/pokemon/icons/9/1012-artisan.png
Normal file
After Width: | Height: | Size: 353 B |
BIN
public/images/pokemon/icons/9/1012s-artisan.png
Normal file
After Width: | Height: | Size: 359 B |
BIN
public/images/pokemon/icons/9/1013-masterpiece.png
Normal file
After Width: | Height: | Size: 346 B |
BIN
public/images/pokemon/icons/9/1013s-masterpiece.png
Normal file
After Width: | Height: | Size: 352 B |
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 846 B |
Before Width: | Height: | Size: 938 B After Width: | Height: | Size: 938 B |
Before Width: | Height: | Size: 510 B After Width: | Height: | Size: 510 B |
Before Width: | Height: | Size: 513 B After Width: | Height: | Size: 513 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 541 B After Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 557 B After Width: | Height: | Size: 557 B |
BIN
public/images/pokemon/icons/variant/7/778-busted_2.png
Normal file
After Width: | Height: | Size: 471 B |
BIN
public/images/pokemon/icons/variant/7/778-busted_3.png
Normal file
After Width: | Height: | Size: 482 B |
Before Width: | Height: | Size: 697 B After Width: | Height: | Size: 697 B |
Before Width: | Height: | Size: 661 B After Width: | Height: | Size: 661 B |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
41
public/images/trainer/aqua_admin_f.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "aqua_admin_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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/aqua_admin_f.png
Normal file
After Width: | Height: | Size: 865 B |
41
public/images/trainer/aqua_admin_m.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "aqua_admin_m.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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/aqua_admin_m.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
public/images/trainer/flare_admin_f.png
Normal file
After Width: | Height: | Size: 671 B |
41
public/images/trainer/flare_admin_m copy.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "flare_admin_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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
41
public/images/trainer/flare_admin_m.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "flare_admin_m.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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/flare_admin_m.png
Normal file
After Width: | Height: | Size: 789 B |
41
public/images/trainer/galactic_admin_f.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "galactic_admin_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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/galactic_admin_f.png
Normal file
After Width: | Height: | Size: 621 B |
41
public/images/trainer/galactic_admin_m.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "galactic_admin_m.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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:3012867f03f02c4ee67a8ab3ad5a000e:77a5f60f1adc158664b3b2ee17bf30fe:7e8259b5177c0a76e5d02d6bdc66affe$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/galactic_admin_m.png
Normal file
After Width: | Height: | Size: 689 B |
41
public/images/trainer/magma_admin_f.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "magma_admin_m.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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/magma_admin_f.png
Normal file
After Width: | Height: | Size: 847 B |
41
public/images/trainer/magma_admin_m.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "magma_admin_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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/magma_admin_m.png
Normal file
After Width: | Height: | Size: 845 B |
2120
public/images/trainer/plasma_sage.json
Normal file
BIN
public/images/trainer/plasma_sage.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
41
public/images/trainer/rocket_admin_f.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "rocket_admin_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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/rocket_admin_f.png
Normal file
After Width: | Height: | Size: 736 B |
41
public/images/trainer/rocket_admin_m.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "rocket_admin_m.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": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 80,
|
||||||
|
"h": 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/trainer/rocket_admin_m.png
Normal file
After Width: | Height: | Size: 645 B |
@ -464,7 +464,8 @@ export interface FixedBattleConfigs {
|
|||||||
/**
|
/**
|
||||||
* Youngster/Lass on 5
|
* Youngster/Lass on 5
|
||||||
* Rival on 8, 55, 95, 145, 195
|
* Rival on 8, 55, 95, 145, 195
|
||||||
* Evil team grunts on 35, 62, 64, 66, 112, 114
|
* Evil team grunts on 35, 62, 64, and 112
|
||||||
|
* Evil team admin on 66 and 114
|
||||||
* Evil leader on 115, 165
|
* Evil leader on 115, 165
|
||||||
* E4 on 182, 184, 186, 188
|
* E4 on 182, 184, 186, 188
|
||||||
* Champion on 190
|
* Champion on 190
|
||||||
@ -485,13 +486,13 @@ export const classicFixedBattles: FixedBattleConfigs = {
|
|||||||
[64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
|
[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 ], true)),
|
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
|
||||||
[66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
|
[66]: 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 ], true)),
|
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_ADMIN, TrainerType.MAGMA_ADMIN, TrainerType.AQUA_ADMIN, TrainerType.GALACTIC_ADMIN, TrainerType.PLASMA_SAGE, TrainerType.FLARE_ADMIN ], true)),
|
||||||
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
|
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
|
||||||
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
|
.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)
|
[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 ], true)),
|
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
|
||||||
[114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
|
[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 ], true)),
|
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_ADMIN, TrainerType.MAGMA_ADMIN, TrainerType.AQUA_ADMIN, TrainerType.GALACTIC_ADMIN, TrainerType.PLASMA_SAGE, TrainerType.FLARE_ADMIN ], true)),
|
||||||
[115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
|
[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 ])),
|
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])),
|
||||||
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
|
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
|
||||||
|
@ -406,14 +406,7 @@ export class SingleGenerationChallenge extends Challenge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false, checkEvolutions?: boolean): boolean {
|
applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false, checkEvolutions?: boolean): boolean {
|
||||||
/**
|
const generations = [pokemon.generation];
|
||||||
* We have special code below for victini because it is classed as a generation 4 pokemon in the code
|
|
||||||
* despite being a generation 5 pokemon. This is due to UI constraints, the starter select screen has
|
|
||||||
* no more room for pokemon so victini is put in the gen 4 section instead. This code just overrides the
|
|
||||||
* normal generation check to correctly treat victini as gen 5.
|
|
||||||
*/
|
|
||||||
const starterGeneration = pokemon.speciesId === Species.VICTINI ? 5 : pokemon.generation;
|
|
||||||
const generations = [starterGeneration];
|
|
||||||
const checkPokemonEvolutions = checkEvolutions ?? true as boolean;
|
const checkPokemonEvolutions = checkEvolutions ?? true as boolean;
|
||||||
if (soft) {
|
if (soft) {
|
||||||
const speciesToCheck = [pokemon.speciesId];
|
const speciesToCheck = [pokemon.speciesId];
|
||||||
|
@ -459,6 +459,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.ROCKET_ADMIN]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:rocket_admin.encounter.1",
|
||||||
|
"dialogue:rocket_admin.encounter.2",
|
||||||
|
"dialogue:rocket_admin.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:rocket_admin.victory.1",
|
||||||
|
"dialogue:rocket_admin.victory.2",
|
||||||
|
"dialogue:rocket_admin.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.MAGMA_GRUNT]: [
|
[TrainerType.MAGMA_GRUNT]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
@ -469,6 +483,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.MAGMA_ADMIN]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:magma_admin.encounter.1",
|
||||||
|
"dialogue:magma_admin.encounter.2",
|
||||||
|
"dialogue:magma_admin.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:magma_admin.victory.1",
|
||||||
|
"dialogue:magma_admin.victory.2",
|
||||||
|
"dialogue:magma_admin.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.AQUA_GRUNT]: [
|
[TrainerType.AQUA_GRUNT]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
@ -479,6 +507,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.AQUA_ADMIN]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:aqua_admin.encounter.1",
|
||||||
|
"dialogue:aqua_admin.encounter.2",
|
||||||
|
"dialogue:aqua_admin.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:aqua_admin.victory.1",
|
||||||
|
"dialogue:aqua_admin.victory.2",
|
||||||
|
"dialogue:aqua_admin.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.GALACTIC_GRUNT]: [
|
[TrainerType.GALACTIC_GRUNT]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
@ -489,6 +531,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.GALACTIC_ADMIN]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:galactic_admin.encounter.1",
|
||||||
|
"dialogue:galactic_admin.encounter.2",
|
||||||
|
"dialogue:galactic_admin.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:galactic_admin.victory.1",
|
||||||
|
"dialogue:galactic_admin.victory.2",
|
||||||
|
"dialogue:galactic_admin.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.PLASMA_GRUNT]: [
|
[TrainerType.PLASMA_GRUNT]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
@ -499,6 +555,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.PLASMA_SAGE]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:plasma_sage.encounter.1",
|
||||||
|
"dialogue:plasma_sage.encounter.2",
|
||||||
|
"dialogue:plasma_sage.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:plasma_sage.victory.1",
|
||||||
|
"dialogue:plasma_sage.victory.2",
|
||||||
|
"dialogue:plasma_sage.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.FLARE_GRUNT]: [
|
[TrainerType.FLARE_GRUNT]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
@ -509,6 +579,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[TrainerType.FLARE_ADMIN]: [
|
||||||
|
{
|
||||||
|
encounter: [
|
||||||
|
"dialogue:flare_admin.encounter.1",
|
||||||
|
"dialogue:flare_admin.encounter.2",
|
||||||
|
"dialogue:flare_admin.encounter.3",
|
||||||
|
],
|
||||||
|
victory: [
|
||||||
|
"dialogue:flare_admin.victory.1",
|
||||||
|
"dialogue:flare_admin.victory.2",
|
||||||
|
"dialogue:flare_admin.victory.3",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
|
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
|
||||||
{
|
{
|
||||||
encounter: [
|
encounter: [
|
||||||
|
@ -438,7 +438,7 @@ export const speciesEggMoves = {
|
|||||||
[Species.CHEWTLE]: [ Moves.FIRE_FANG, Moves.ACCELEROCK, Moves.SHELL_SMASH, Moves.FISHIOUS_REND ],
|
[Species.CHEWTLE]: [ Moves.FIRE_FANG, Moves.ACCELEROCK, Moves.SHELL_SMASH, Moves.FISHIOUS_REND ],
|
||||||
[Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.ZIPPY_ZAP ],
|
[Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.ZIPPY_ZAP ],
|
||||||
[Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ],
|
[Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ],
|
||||||
[Species.APPLIN]: [ Moves.DRAGON_CHEER, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.STRENGTH_SAP ],
|
[Species.APPLIN]: [ Moves.MATCHA_GOTCHA, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.STRENGTH_SAP ],
|
||||||
[Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.STONE_EDGE, Moves.PRECIPICE_BLADES ],
|
[Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.STONE_EDGE, Moves.PRECIPICE_BLADES ],
|
||||||
[Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ],
|
[Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ],
|
||||||
[Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.ICE_SPINNER, Moves.FILLET_AWAY ],
|
[Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.ICE_SPINNER, Moves.FILLET_AWAY ],
|
||||||
|
@ -13,10 +13,9 @@ import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag";
|
|||||||
import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability";
|
import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability";
|
||||||
import { allAbilities } from "./ability";
|
import { allAbilities } from "./ability";
|
||||||
import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier";
|
import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier";
|
||||||
import { BattlerIndex } from "../battle";
|
import { BattlerIndex, BattleType } from "../battle";
|
||||||
import { Stat } from "./pokemon-stat";
|
import { Stat } from "./pokemon-stat";
|
||||||
import { TerrainType } from "./terrain";
|
import { TerrainType } from "./terrain";
|
||||||
import { SpeciesFormChangeActiveTrigger } from "./pokemon-forms";
|
|
||||||
import { ModifierPoolType } from "#app/modifier/modifier-type";
|
import { ModifierPoolType } from "#app/modifier/modifier-type";
|
||||||
import { Command } from "../ui/command-ui-handler";
|
import { Command } from "../ui/command-ui-handler";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
@ -1817,13 +1816,10 @@ export class MultiHitAttr extends MoveAttr {
|
|||||||
}
|
}
|
||||||
case MultiHitType._2:
|
case MultiHitType._2:
|
||||||
return 2;
|
return 2;
|
||||||
break;
|
|
||||||
case MultiHitType._3:
|
case MultiHitType._3:
|
||||||
return 3;
|
return 3;
|
||||||
break;
|
|
||||||
case MultiHitType._10:
|
case MultiHitType._10:
|
||||||
return 10;
|
return 10;
|
||||||
break;
|
|
||||||
case MultiHitType.BEAT_UP:
|
case MultiHitType.BEAT_UP:
|
||||||
const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty();
|
const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty();
|
||||||
// No status means the ally pokemon can contribute to Beat Up
|
// No status means the ally pokemon can contribute to Beat Up
|
||||||
@ -2631,36 +2627,15 @@ export class GrowthStatChangeAttr extends StatChangeAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class HalfHpStatMaxAttr extends StatChangeAttr {
|
|
||||||
constructor(stat: BattleStat) {
|
|
||||||
super(stat, 12, true, null, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
|
||||||
return new Promise<boolean>(resolve => {
|
|
||||||
user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true);
|
|
||||||
user.updateInfo().then(() => {
|
|
||||||
const ret = super.apply(user, target, move, args);
|
|
||||||
user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", {pokemonName: getPokemonNameWithAffix(user), statName: getBattleStatName(this.stats[BattleStat.ATK])}));
|
|
||||||
resolve(ret);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
getCondition(): MoveConditionFunc {
|
|
||||||
return (user, target, move) => user.getHpRatio() > 0.5 && user.summonData.battleStats[this.stats[BattleStat.ATK]] < 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Add benefit score that considers HP cut
|
|
||||||
}
|
|
||||||
|
|
||||||
export class CutHpStatBoostAttr extends StatChangeAttr {
|
export class CutHpStatBoostAttr extends StatChangeAttr {
|
||||||
private cutRatio: integer;
|
private cutRatio: integer;
|
||||||
|
private messageCallback: ((user: Pokemon) => void) | undefined;
|
||||||
|
|
||||||
constructor(stat: BattleStat | BattleStat[], levels: integer, cutRatio: integer) {
|
constructor(stat: BattleStat | BattleStat[], levels: integer, cutRatio: integer, messageCallback?: ((user: Pokemon) => void) | undefined) {
|
||||||
super(stat, levels, true, null, true);
|
super(stat, levels, true, null, true);
|
||||||
|
|
||||||
this.cutRatio = cutRatio;
|
this.cutRatio = cutRatio;
|
||||||
|
this.messageCallback = messageCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
@ -2668,13 +2643,16 @@ export class CutHpStatBoostAttr extends StatChangeAttr {
|
|||||||
user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true);
|
user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true);
|
||||||
user.updateInfo().then(() => {
|
user.updateInfo().then(() => {
|
||||||
const ret = super.apply(user, target, move, args);
|
const ret = super.apply(user, target, move, args);
|
||||||
|
if (this.messageCallback) {
|
||||||
|
this.messageCallback(user);
|
||||||
|
}
|
||||||
resolve(ret);
|
resolve(ret);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getCondition(): MoveConditionFunc {
|
getCondition(): MoveConditionFunc {
|
||||||
return (user, target, move) => user.getHpRatio() > 1 / this.cutRatio;
|
return (user, target, move) => user.getHpRatio() > 1 / this.cutRatio && this.stats.some(s => user.summonData.battleStats[s] < 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4780,19 +4758,14 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
|||||||
if (switchOutTarget.hp > 0) {
|
if (switchOutTarget.hp > 0) {
|
||||||
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget);
|
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget);
|
||||||
// switchOut below sets the UI to select party(this is not a separate Phase), then adds a SwitchSummonPhase with selected 'mon
|
// switchOut below sets the UI to select party(this is not a separate Phase), then adds a SwitchSummonPhase with selected 'mon
|
||||||
(switchOutTarget as PlayerPokemon).switchOut(this.batonPass, true).then(() => resolve(true));
|
(switchOutTarget as PlayerPokemon).switchOut(this.batonPass).then(() => resolve(true));
|
||||||
} else {
|
} else {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (user.scene.currentBattle.battleType) {
|
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
|
||||||
// Switch out logic for the battle type
|
// Switch out logic for trainer battles
|
||||||
switchOutTarget.resetTurnData();
|
switchOutTarget.leaveField(!this.batonPass);
|
||||||
switchOutTarget.resetSummonData();
|
|
||||||
switchOutTarget.hideInfo();
|
|
||||||
switchOutTarget.setVisible(false);
|
|
||||||
switchOutTarget.scene.field.remove(switchOutTarget);
|
|
||||||
user.scene.triggerPokemonFormChange(switchOutTarget, SpeciesFormChangeActiveTrigger, true);
|
|
||||||
|
|
||||||
if (switchOutTarget.hp > 0) {
|
if (switchOutTarget.hp > 0) {
|
||||||
// for opponent switching out
|
// for opponent switching out
|
||||||
@ -6486,7 +6459,9 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2)
|
new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2)
|
||||||
.attr(ConfuseAttr),
|
.attr(ConfuseAttr),
|
||||||
new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2)
|
new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2)
|
||||||
.attr(HalfHpStatMaxAttr, BattleStat.ATK),
|
.attr(CutHpStatBoostAttr, [BattleStat.ATK], 12, 2, (user) => {
|
||||||
|
user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", {pokemonName: getPokemonNameWithAffix(user), statName: getBattleStatName(BattleStat.ATK)}));
|
||||||
|
}),
|
||||||
new AttackMove(Moves.SLUDGE_BOMB, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2)
|
new AttackMove(Moves.SLUDGE_BOMB, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2)
|
||||||
.attr(StatusEffectAttr, StatusEffect.POISON)
|
.attr(StatusEffectAttr, StatusEffect.POISON)
|
||||||
.ballBombMove(),
|
.ballBombMove(),
|
||||||
|
@ -17287,7 +17287,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
],
|
],
|
||||||
[Species.DIPPLIN]: [
|
[Species.DIPPLIN]: [
|
||||||
[ EVOLVE_MOVE, Moves.DOUBLE_HIT ],
|
[ EVOLVE_MOVE, Moves.DOUBLE_HIT ],
|
||||||
[ RELEARN_MOVE, Moves.INFESTATION ],
|
[ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom
|
||||||
[ 1, Moves.WITHDRAW ],
|
[ 1, Moves.WITHDRAW ],
|
||||||
[ 1, Moves.SWEET_SCENT ],
|
[ 1, Moves.SWEET_SCENT ],
|
||||||
[ 1, Moves.RECYCLE ],
|
[ 1, Moves.RECYCLE ],
|
||||||
|
@ -1671,7 +1671,7 @@ export function initSpecies() {
|
|||||||
new PokemonForm("Fairy", "fairy", Type.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324),
|
new PokemonForm("Fairy", "fairy", Type.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324),
|
||||||
new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324),
|
new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 324),
|
||||||
),
|
),
|
||||||
new PokemonSpecies(Species.VICTINI, 4, false, false, true, "Victory Pokémon", Type.PSYCHIC, Type.FIRE, 0.4, 4, Abilities.VICTORY_STAR, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false),
|
new PokemonSpecies(Species.VICTINI, 5, false, false, true, "Victory Pokémon", Type.PSYCHIC, Type.FIRE, 0.4, 4, Abilities.VICTORY_STAR, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false),
|
||||||
new PokemonSpecies(Species.SNIVY, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.6, 8.1, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
new PokemonSpecies(Species.SNIVY, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.6, 8.1, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
||||||
new PokemonSpecies(Species.SERVINE, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.8, 16, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
new PokemonSpecies(Species.SERVINE, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.8, 16, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
||||||
new PokemonSpecies(Species.SERPERIOR, 5, false, false, false, "Regal Pokémon", Type.GRASS, null, 3.3, 63, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 238, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
new PokemonSpecies(Species.SERPERIOR, 5, false, false, false, "Regal Pokémon", Type.GRASS, null, 3.3, 63, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 238, GrowthRate.MEDIUM_SLOW, 87.5, false),
|
||||||
@ -2946,8 +2946,8 @@ export const speciesStarters = {
|
|||||||
[Species.DARKRAI]: 6,
|
[Species.DARKRAI]: 6,
|
||||||
[Species.SHAYMIN]: 6,
|
[Species.SHAYMIN]: 6,
|
||||||
[Species.ARCEUS]: 9,
|
[Species.ARCEUS]: 9,
|
||||||
[Species.VICTINI]: 7,
|
|
||||||
|
|
||||||
|
[Species.VICTINI]: 7,
|
||||||
[Species.SNIVY]: 3,
|
[Species.SNIVY]: 3,
|
||||||
[Species.TEPIG]: 3,
|
[Species.TEPIG]: 3,
|
||||||
[Species.OSHAWOTT]: 3,
|
[Species.OSHAWOTT]: 3,
|
||||||
|
@ -556,7 +556,7 @@ export class TrainerConfig {
|
|||||||
const nameForCall = this.name.toLowerCase().replace(/\s/g, "_");
|
const nameForCall = this.name.toLowerCase().replace(/\s/g, "_");
|
||||||
this.name = i18next.t(`trainerNames:${nameForCall}`);
|
this.name = i18next.t(`trainerNames:${nameForCall}`);
|
||||||
this.setTitle(title);
|
this.setTitle(title);
|
||||||
this.setMoneyMultiplier(2.25);
|
this.setMoneyMultiplier(2.5);
|
||||||
this.setBoss();
|
this.setBoss();
|
||||||
this.setStaticParty();
|
this.setStaticParty();
|
||||||
this.setBattleBgm("battle_plasma_boss");
|
this.setBattleBgm("battle_plasma_boss");
|
||||||
@ -1187,6 +1187,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
|
[TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR]
|
[TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.ROCKET_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
|
||||||
|
[TrainerPoolTier.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").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
[TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
.setSpeciesPools({
|
.setSpeciesPools({
|
||||||
[TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH],
|
[TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH],
|
||||||
@ -1194,6 +1200,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR],
|
[TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET]
|
[TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.MAGMA_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR],
|
||||||
|
[TrainerPoolTier.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").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
[TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
.setSpeciesPools({
|
.setSpeciesPools({
|
||||||
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL ],
|
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL ],
|
||||||
@ -1201,6 +1213,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA],
|
[TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO]
|
[TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.AQUA_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH ],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA],
|
||||||
|
[TrainerPoolTier.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").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
[TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
.setSpeciesPools({
|
.setSpeciesPools({
|
||||||
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY],
|
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY],
|
||||||
@ -1208,6 +1226,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
|
[TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
|
[TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.GALACTIC_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL ],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
|
||||||
|
[TrainerPoolTier.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").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
.setSpeciesPools({
|
.setSpeciesPools({
|
||||||
[TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH],
|
[TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH],
|
||||||
@ -1215,6 +1239,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK],
|
[TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT]
|
[TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.PLASMA_SAGE]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK],
|
||||||
|
[TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, 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").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
[TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
.setSpeciesPools({
|
.setSpeciesPools({
|
||||||
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK],
|
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK],
|
||||||
@ -1222,6 +1252,12 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD],
|
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD],
|
||||||
[TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON]
|
[TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON]
|
||||||
}),
|
}),
|
||||||
|
[TrainerType.FLARE_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||||
|
.setSpeciesPools({
|
||||||
|
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD],
|
||||||
|
[TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON]
|
||||||
|
}),
|
||||||
[TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"],true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
|
[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.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"),
|
[TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"],true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
|
||||||
|
@ -53,11 +53,17 @@ export enum TrainerType {
|
|||||||
WORKER,
|
WORKER,
|
||||||
YOUNGSTER,
|
YOUNGSTER,
|
||||||
ROCKET_GRUNT,
|
ROCKET_GRUNT,
|
||||||
|
ROCKET_ADMIN,
|
||||||
MAGMA_GRUNT,
|
MAGMA_GRUNT,
|
||||||
|
MAGMA_ADMIN,
|
||||||
AQUA_GRUNT,
|
AQUA_GRUNT,
|
||||||
|
AQUA_ADMIN,
|
||||||
GALACTIC_GRUNT,
|
GALACTIC_GRUNT,
|
||||||
|
GALACTIC_ADMIN,
|
||||||
PLASMA_GRUNT,
|
PLASMA_GRUNT,
|
||||||
|
PLASMA_SAGE,
|
||||||
FLARE_GRUNT,
|
FLARE_GRUNT,
|
||||||
|
FLARE_ADMIN,
|
||||||
ROCKET_BOSS_GIOVANNI_1,
|
ROCKET_BOSS_GIOVANNI_1,
|
||||||
ROCKET_BOSS_GIOVANNI_2,
|
ROCKET_BOSS_GIOVANNI_2,
|
||||||
MAXIE,
|
MAXIE,
|
||||||
|
@ -3161,6 +3161,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return this.randSeedInt((max - min) + 1, min);
|
return this.randSeedInt((max - min) + 1, min);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes a Pokemon to leave the field (such as in preparation for a switch out/escape).
|
||||||
|
* @param clearEffects Indicates if effects should be cleared (true) or passed
|
||||||
|
* to the next pokemon, such as during a baton pass (false)
|
||||||
|
*/
|
||||||
|
leaveField(clearEffects: boolean = true) {
|
||||||
|
this.resetTurnData();
|
||||||
|
if (clearEffects) {
|
||||||
|
this.resetSummonData();
|
||||||
|
this.resetBattleData();
|
||||||
|
}
|
||||||
|
this.hideInfo();
|
||||||
|
this.setVisible(false);
|
||||||
|
this.scene.field.remove(this);
|
||||||
|
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
|
||||||
|
}
|
||||||
|
|
||||||
destroy(): void {
|
destroy(): void {
|
||||||
this.battleInfo?.destroy();
|
this.battleInfo?.destroy();
|
||||||
super.destroy();
|
super.destroy();
|
||||||
@ -3272,25 +3289,21 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
switchOut(batonPass: boolean, removeFromField: boolean = false): Promise<void> {
|
/**
|
||||||
|
* Causes this mon to leave the field (via {@linkcode leaveField}) and then
|
||||||
|
* opens the party switcher UI to switch a new mon in
|
||||||
|
* @param batonPass Indicates if this switch was caused by a baton pass (and
|
||||||
|
* thus should maintain active mon effects)
|
||||||
|
*/
|
||||||
|
switchOut(batonPass: boolean): Promise<void> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
this.resetTurnData();
|
this.leaveField(!batonPass);
|
||||||
if (!batonPass) {
|
|
||||||
this.resetSummonData();
|
|
||||||
}
|
|
||||||
this.hideInfo();
|
|
||||||
this.setVisible(false);
|
|
||||||
|
|
||||||
this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => {
|
this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => {
|
||||||
if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) {
|
if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) {
|
||||||
this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase);
|
this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase);
|
||||||
}
|
}
|
||||||
if (removeFromField) {
|
this.scene.ui.setMode(Mode.MESSAGE).then(resolve);
|
||||||
this.setVisible(false);
|
|
||||||
this.scene.field.remove(this);
|
|
||||||
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
|
|
||||||
}
|
|
||||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve());
|
|
||||||
}, PartyUiHandler.FilterNonFainted);
|
}, PartyUiHandler.FilterNonFainted);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -121,8 +121,8 @@ export default class Trainer extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
// Determine the title to include based on the configuration and includeTitle flag.
|
// Determine the title to include based on the configuration and includeTitle flag.
|
||||||
let title = includeTitle && this.config.title ? this.config.title : null;
|
let title = includeTitle && this.config.title ? this.config.title : null;
|
||||||
|
const evilTeamTitles = ["grunt", "admin", "sage"];
|
||||||
if (this.name === "" && name.toLowerCase().includes("grunt")) {
|
if (this.name === "" && evilTeamTitles.some(t => name.toLocaleLowerCase().includes(t))) {
|
||||||
// This is a evil team grunt so we localize it by only using the "name" as the title
|
// 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, "_")}`);
|
title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`);
|
||||||
console.log("Localized grunt name: " + title);
|
console.log("Localized grunt name: " + title);
|
||||||
|
@ -378,6 +378,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Das war mal wieder ein Schuss in den Ofen!"
|
1: "Das war mal wieder ein Schuss in den Ofen!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"firebreather": {
|
"firebreather": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Meine Flammen werden dich verschlingen!",
|
1: "Meine Flammen werden dich verschlingen!",
|
||||||
@ -410,6 +422,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Wie kann das sein? Ich bin Teil vom mächtigen Team Magma! Wir wollen doch nur die Welt verbessern…"
|
1: "Wie kann das sein? Ich bin Teil vom mächtigen Team Magma! Wir wollen doch nur die Welt verbessern…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!",
|
1: "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!",
|
||||||
@ -418,6 +442,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Vielleicht sollte ich wohl lieber selber über die Planke gehen…",
|
1: "Vielleicht sollte ich wohl lieber selber über die Planke gehen…",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Team Galaktik wird die Welt in eine bessere Welt verwandeln! Und du wirst uns nicht aufhalten!"
|
1: "Team Galaktik wird die Welt in eine bessere Welt verwandeln! Und du wirst uns nicht aufhalten!"
|
||||||
@ -426,6 +462,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Zyrus wird uns für diese Niederlage bestrafen…"
|
1: "Zyrus wird uns für diese Niederlage bestrafen…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Pokémon sollten frei sein! Team Plasma wird sie befreien!"
|
1: "Pokémon sollten frei sein! Team Plasma wird sie befreien!"
|
||||||
@ -434,6 +482,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten…"
|
1: "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `Ich bin ein Mitglied von Team Flare! Das sieht man mir doch an. Mein Stil ist unverkennbar!
|
1: `Ich bin ein Mitglied von Team Flare! Das sieht man mir doch an. Mein Stil ist unverkennbar!
|
||||||
@ -443,6 +503,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Stil ist wohl doch nicht alles…"
|
1: "Stil ist wohl doch nicht alles…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `Ich bin beeindruckt, du hast es bis hierher geschafft!
|
1: `Ich bin beeindruckt, du hast es bis hierher geschafft!
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "Mit diesen Pokémon losziehen?",
|
"confirmStartTeam": "Mit diesen Pokémon losziehen?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "Das ist kein gültiges Team!",
|
"invalidParty": "Das ist kein gültiges Team!",
|
||||||
"gen1": "I",
|
"gen1": "I",
|
||||||
"gen2": "II",
|
"gen2": "II",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "Rüpel von Team Rocket",
|
"rocket_grunt": "Rüpel von Team Rocket",
|
||||||
"rocket_grunt_female": "Rüpel von Team Rocket",
|
"rocket_grunt_female": "Rüpel von Team Rocket",
|
||||||
"rocket_grunts": "Rüpel von Team Rocket",
|
"rocket_grunts": "Rüpel von Team Rocket",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Rüpel von Team Magma",
|
"magma_grunt": "Rüpel von Team Magma",
|
||||||
"magma_grunt_female": "Rüpel von Team Magma",
|
"magma_grunt_female": "Rüpel von Team Magma",
|
||||||
"magma_grunts": "Rüpel von Team Magma",
|
"magma_grunts": "Rüpel von Team Magma",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Rüpel von Team Aqua",
|
"aqua_grunt": "Rüpel von Team Aqua",
|
||||||
"aqua_grunt_female": "Rüpel von Team Aqua",
|
"aqua_grunt_female": "Rüpel von Team Aqua",
|
||||||
"aqua_grunts": "Rüpel von Team Aqua",
|
"aqua_grunts": "Rüpel von Team Aqua",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Rüpel von Team Galaktik",
|
"galactic_grunt": "Rüpel von Team Galaktik",
|
||||||
"galactic_grunt_female": "Rüpel von Team Galaktik",
|
"galactic_grunt_female": "Rüpel von Team Galaktik",
|
||||||
"galactic_grunts": "Rüpel von Team Galaktik",
|
"galactic_grunts": "Rüpel von Team Galaktik",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Rüpel von Team Plasma",
|
"plasma_grunt": "Rüpel von Team Plasma",
|
||||||
"plasma_grunt_female": "Rüpel von Team Plasma",
|
"plasma_grunt_female": "Rüpel von Team Plasma",
|
||||||
"plasma_grunts": "Rüpel von Team Plasma",
|
"plasma_grunts": "Rüpel von Team Plasma",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "Rüpel von Team Flare",
|
"flare_grunt": "Rüpel von Team Flare",
|
||||||
"flare_grunt_female": "Rüpel von Team Flare",
|
"flare_grunt_female": "Rüpel von Team Flare",
|
||||||
"flare_grunts": "Rüpel von Team Flare",
|
"flare_grunts": "Rüpel von Team Flare",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -391,6 +391,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Team Rocket blasting off again!"
|
1: "Team Rocket blasting off again!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
||||||
@ -399,6 +411,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Huh? I lost?!"
|
1: "Huh? I lost?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
||||||
@ -407,6 +431,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "You're kidding me!"
|
1: "You're kidding me!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Don't mess with Team Galactic!"
|
1: "Don't mess with Team Galactic!"
|
||||||
@ -415,6 +451,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Shut down..."
|
1: "Shut down..."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "We won't tolerate people who have different ideas!"
|
1: "We won't tolerate people who have different ideas!"
|
||||||
@ -423,6 +471,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Plasmaaaaaaaaa!"
|
1: "Plasmaaaaaaaaa!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Fashion is most important to us!"
|
1: "Fashion is most important to us!"
|
||||||
@ -431,6 +491,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "The future doesn't look bright for me."
|
1: "The future doesn't look bright for me."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "So! I must say, I am impressed you got here!"
|
1: "So! I must say, I am impressed you got here!"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "Begin with these Pokémon?",
|
"confirmStartTeam": "Begin with these Pokémon?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "This is not a valid starting party!",
|
"invalidParty": "This is not a valid starting party!",
|
||||||
"gen1": "I",
|
"gen1": "I",
|
||||||
"gen2": "II",
|
"gen2": "II",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "Rocket Grunt",
|
"rocket_grunt": "Rocket Grunt",
|
||||||
"rocket_grunts": "Rocket Grunts",
|
"rocket_grunts": "Rocket Grunts",
|
||||||
"rocket_grunt_female": "Rocket Grunt",
|
"rocket_grunt_female": "Rocket Grunt",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Magma Grunt",
|
"magma_grunt": "Magma Grunt",
|
||||||
"magma_grunt_female": "Magma Grunt",
|
"magma_grunt_female": "Magma Grunt",
|
||||||
"magma_grunts": "Magma Grunts",
|
"magma_grunts": "Magma Grunts",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Aqua Grunt",
|
"aqua_grunt": "Aqua Grunt",
|
||||||
"aqua_grunt_female": "Aqua Grunt",
|
"aqua_grunt_female": "Aqua Grunt",
|
||||||
"aqua_grunts": "Aqua Grunts",
|
"aqua_grunts": "Aqua Grunts",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Galactic Grunt",
|
"galactic_grunt": "Galactic Grunt",
|
||||||
"galactic_grunt_female": "Galactic Grunt",
|
"galactic_grunt_female": "Galactic Grunt",
|
||||||
"galactic_grunts": "Galactic Grunts",
|
"galactic_grunts": "Galactic Grunts",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Plasma Grunt",
|
"plasma_grunt": "Plasma Grunt",
|
||||||
"plasma_grunt_female": "Plasma Grunt",
|
"plasma_grunt_female": "Plasma Grunt",
|
||||||
"plasma_grunts": "Plasma Grunts",
|
"plasma_grunts": "Plasma Grunts",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "Flare Grunt",
|
"flare_grunt": "Flare Grunt",
|
||||||
"flare_grunt_female": "Flare Grunt",
|
"flare_grunt_female": "Flare Grunt",
|
||||||
"flare_grunts": "Flare Grunts",
|
"flare_grunts": "Flare Grunts",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "¿Comenzar con estos Pokémon?",
|
"confirmStartTeam": "¿Comenzar con estos Pokémon?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "¡Este equipo no es válido!",
|
"invalidParty": "¡Este equipo no es válido!",
|
||||||
"gen1": "I",
|
"gen1": "I",
|
||||||
"gen2": "II",
|
"gen2": "II",
|
||||||
|
@ -121,21 +121,31 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "Rocket Grunt",
|
"rocket_grunt": "Rocket Grunt",
|
||||||
"rocket_grunts": "Rocket Grunts",
|
"rocket_grunts": "Rocket Grunts",
|
||||||
"rocket_grunt_female": "Rocket Grunt",
|
"rocket_grunt_female": "Rocket Grunt",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Magma Grunt",
|
"magma_grunt": "Magma Grunt",
|
||||||
"magma_grunt_female": "Magma Grunt",
|
"magma_grunt_female": "Magma Grunt",
|
||||||
"magma_grunts": "Magma Grunts",
|
"magma_grunts": "Magma Grunts",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Aqua Grunt",
|
"aqua_grunt": "Aqua Grunt",
|
||||||
"aqua_grunt_female": "Aqua Grunt",
|
"aqua_grunt_female": "Aqua Grunt",
|
||||||
"aqua_grunts": "Aqua Grunts",
|
"aqua_grunts": "Aqua Grunts",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Galactic Grunt",
|
"galactic_grunt": "Galactic Grunt",
|
||||||
"galactic_grunt_female": "Galactic Grunt",
|
"galactic_grunt_female": "Galactic Grunt",
|
||||||
"galactic_grunts": "Galactic Grunts",
|
"galactic_grunts": "Galactic Grunts",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Plasma Grunt",
|
"plasma_grunt": "Plasma Grunt",
|
||||||
"plasma_grunt_female": "Plasma Grunt",
|
"plasma_grunt_female": "Plasma Grunt",
|
||||||
"plasma_grunts": "Plasma Grunts",
|
"plasma_grunts": "Plasma Grunts",
|
||||||
"flare_grunt": "Flare Grunt",
|
"flare_grunt": "Flare Grunt",
|
||||||
"flare_grunt_female": "Flare Grunt",
|
"flare_grunt_female": "Flare Grunt",
|
||||||
"flare_grunts": "Flare Grunts",
|
"flare_grunts": "Flare Grunts",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -264,6 +264,10 @@ export const PGMachv: AchievementTranslationEntries = {
|
|||||||
"MONO_FAIRY": {
|
"MONO_FAIRY": {
|
||||||
name: "Hey ! Listen !",
|
name: "Hey ! Listen !",
|
||||||
},
|
},
|
||||||
|
"FRESH_START": {
|
||||||
|
name: "Du premier coup !",
|
||||||
|
description: "Terminer un challenge « Nouveau départ »."
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version)
|
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version)
|
||||||
@ -530,4 +534,8 @@ export const PGFachv: AchievementTranslationEntries = {
|
|||||||
"MONO_FAIRY": {
|
"MONO_FAIRY": {
|
||||||
name: "Hey ! Listen !",
|
name: "Hey ! Listen !",
|
||||||
},
|
},
|
||||||
|
"FRESH_START": {
|
||||||
|
name: "Du premier coup !",
|
||||||
|
description: "Terminer un challenge « Nouveau départ »."
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales";
|
|||||||
|
|
||||||
export const challenges: TranslationEntries = {
|
export const challenges: TranslationEntries = {
|
||||||
"title": "Paramètres du Challenge",
|
"title": "Paramètres du Challenge",
|
||||||
"illegalEvolution": "{{pokemon}} s’est transformé en Pokémon\ninéligible pour ce challenge !",
|
"illegalEvolution": "{{pokemon}} est devenu\ninéligible pour ce challenge !",
|
||||||
"singleGeneration": {
|
"singleGeneration": {
|
||||||
"name": "Mono-génération",
|
"name": "Mono-génération",
|
||||||
"desc": "Vous ne pouvez choisir que des Pokémon de {{gen}} génération.",
|
"desc": "Vous ne pouvez choisir que des Pokémon de {{gen}} génération.",
|
||||||
@ -23,4 +23,10 @@ export const challenges: TranslationEntries = {
|
|||||||
"desc_default": "Vous ne pouvez choisir que des Pokémon du type sélectionné."
|
"desc_default": "Vous ne pouvez choisir que des Pokémon du type sélectionné."
|
||||||
//type in pokemon-info
|
//type in pokemon-info
|
||||||
},
|
},
|
||||||
|
"freshStart": {
|
||||||
|
"name": "Nouveau départ",
|
||||||
|
"desc": "Vous ne pouvez choisir que les starters de base du jeu, comme si vous le recommenciez.",
|
||||||
|
"value.0": "Non",
|
||||||
|
"value.1": "Oui",
|
||||||
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -2898,6 +2898,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Une fois de plus la Team Rocket s’envole vers d’autres cieux !"
|
1: "Une fois de plus la Team Rocket s’envole vers d’autres cieux !"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !"
|
1: "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !"
|
||||||
@ -2906,6 +2918,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Je…?\nJ’ai perdu ?!"
|
1: "Je…?\nJ’ai perdu ?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour une gamine !"
|
1: "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour une gamine !"
|
||||||
@ -2914,6 +2938,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Comment ça ?"
|
1: "Comment ça ?"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Ne te mets pas en travers de la Team Galaxie !"
|
1: "Ne te mets pas en travers de la Team Galaxie !"
|
||||||
@ -2922,6 +2958,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Désactivation…"
|
1: "Désactivation…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Pas de quatiers à ceux qui ne suivent pas notre idéal !"
|
1: "Pas de quatiers à ceux qui ne suivent pas notre idéal !"
|
||||||
@ -2930,6 +2978,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Plasmaaaaaaaaa !"
|
1: "Plasmaaaaaaaaa !"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Le style et le bon gout, il n’y a que ça qui compte !"
|
1: "Le style et le bon gout, il n’y a que ça qui compte !"
|
||||||
@ -2938,6 +2998,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Mon futur me semble guère radieux."
|
1: "Mon futur me semble guère radieux."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Bien. Je dois admettre que je suis impressionné de te voir ici !"
|
1: "Bien. Je dois admettre que je suis impressionné de te voir ici !"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "Commencer avec ces Pokémon ?",
|
"confirmStartTeam": "Commencer avec ces Pokémon ?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "Cette équipe de départ est invalide !",
|
"invalidParty": "Cette équipe de départ est invalide !",
|
||||||
"gen1": "1G",
|
"gen1": "1G",
|
||||||
"gen2": "2G",
|
"gen2": "2G",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "Sbire de la Team Rocket",
|
"rocket_grunt": "Sbire de la Team Rocket",
|
||||||
"rocket_grunt_female": "Sbire de la Team Rocket",
|
"rocket_grunt_female": "Sbire de la Team Rocket",
|
||||||
"rocket_grunts": "Sbires de la Team Rocket",
|
"rocket_grunts": "Sbires de la Team Rocket",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Sbire de la Team Magma",
|
"magma_grunt": "Sbire de la Team Magma",
|
||||||
"magma_grunt_female": "Sbire de la Team Magma",
|
"magma_grunt_female": "Sbire de la Team Magma",
|
||||||
"magma_grunts": "Sbires de la Team Magma",
|
"magma_grunts": "Sbires de la Team Magma",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Sbire de la Team Aqua",
|
"aqua_grunt": "Sbire de la Team Aqua",
|
||||||
"aqua_grunt_female": "Sbire de la Team Aqua",
|
"aqua_grunt_female": "Sbire de la Team Aqua",
|
||||||
"aqua_grunts": "Sbires de la Team Aqua",
|
"aqua_grunts": "Sbires de la Team Aqua",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Sbire de la Team Galaxie",
|
"galactic_grunt": "Sbire de la Team Galaxie",
|
||||||
"galactic_grunt_female": "Sbire de la Team Galaxie",
|
"galactic_grunt_female": "Sbire de la Team Galaxie",
|
||||||
"galactic_grunts": "Sbires de la Team Galaxie",
|
"galactic_grunts": "Sbires de la Team Galaxie",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Sbire de la Team Plasma",
|
"plasma_grunt": "Sbire de la Team Plasma",
|
||||||
"plasma_grunt_female": "Sbire de la Team Plasma",
|
"plasma_grunt_female": "Sbire de la Team Plasma",
|
||||||
"plasma_grunts": "Sbires de la Team Plasma",
|
"plasma_grunts": "Sbires de la Team Plasma",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "Sbire de la Team Flare",
|
"flare_grunt": "Sbire de la Team Flare",
|
||||||
"flare_grunt_female": "Sbire de la Team Flare",
|
"flare_grunt_female": "Sbire de la Team Flare",
|
||||||
"flare_grunts": "Sbires de la Team Flare",
|
"flare_grunts": "Sbires de la Team Flare",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -391,6 +391,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Team Rocket blasting off again!"
|
1: "Team Rocket blasting off again!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
||||||
@ -399,6 +411,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Huh? I lost?!"
|
1: "Huh? I lost?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
||||||
@ -407,6 +431,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "You're kidding me!"
|
1: "You're kidding me!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Don't mess with Team Galactic!"
|
1: "Don't mess with Team Galactic!"
|
||||||
@ -415,6 +451,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Shut down..."
|
1: "Shut down..."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "We won't tolerate people who have different ideas!"
|
1: "We won't tolerate people who have different ideas!"
|
||||||
@ -423,6 +471,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Plasmaaaaaaaaa!"
|
1: "Plasmaaaaaaaaa!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Fashion is most important to us!"
|
1: "Fashion is most important to us!"
|
||||||
@ -431,6 +491,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "The future doesn't look bright for me."
|
1: "The future doesn't look bright for me."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "So! I must say, I am impressed you got here!"
|
1: "So! I must say, I am impressed you got here!"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "Vuoi iniziare con questi Pokémon?",
|
"confirmStartTeam": "Vuoi iniziare con questi Pokémon?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "Questo squadra iniziale non è valida!",
|
"invalidParty": "Questo squadra iniziale non è valida!",
|
||||||
"gen1": "1ª",
|
"gen1": "1ª",
|
||||||
"gen2": "2ª",
|
"gen2": "2ª",
|
||||||
|
@ -120,23 +120,33 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"workers": "Lavoratori",
|
"workers": "Lavoratori",
|
||||||
"youngster": "Bullo",
|
"youngster": "Bullo",
|
||||||
"rocket_grunt": "Recluta Team Rocket",
|
"rocket_grunt": "Recluta Team Rocket",
|
||||||
"rocket_grunts": "Reclute Team Rocket",
|
|
||||||
"rocket_grunt_female": "Recluta Team Rocket",
|
"rocket_grunt_female": "Recluta Team Rocket",
|
||||||
|
"rocket_grunts": "Reclute Team Rocket",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Recluta Team Magma",
|
"magma_grunt": "Recluta Team Magma",
|
||||||
"magma_grunt_female": "Recluta Team Magma",
|
"magma_grunt_female": "Recluta Team Magma",
|
||||||
"magma_grunts": "Reclute Team Magma",
|
"magma_grunts": "Reclute Team Magma",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Recluta Team Idro",
|
"aqua_grunt": "Recluta Team Idro",
|
||||||
"aqua_grunt_female": "Recluta Team Idro",
|
"aqua_grunt_female": "Recluta Team Idro",
|
||||||
"aqua_grunts": "Recluta Team Idro",
|
"aqua_grunts": "Recluta Team Idro",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Recluta Team Galassia",
|
"galactic_grunt": "Recluta Team Galassia",
|
||||||
"galactic_grunt_female": "Recluta Team Galassia",
|
"galactic_grunt_female": "Recluta Team Galassia",
|
||||||
"galactic_grunts": "Reclute Team Galassia",
|
"galactic_grunts": "Reclute Team Galassia",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Seguace Plasma",
|
"plasma_grunt": "Seguace Plasma",
|
||||||
"plasma_grunt_female": "Seguace Plasma",
|
"plasma_grunt_female": "Seguace Plasma",
|
||||||
"plasma_grunts": "Seguaci Plasma",
|
"plasma_grunts": "Seguaci Plasma",
|
||||||
"flare_grunt": "Recluta Team Flare",
|
"flare_grunt": "Recluta Team Flare",
|
||||||
"flare_grunt_female": "Recluta Team Flare",
|
"flare_grunt_female": "Recluta Team Flare",
|
||||||
"flare_grunts": "Reclute Team Flare",
|
"flare_grunts": "Reclute Team Flare",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -391,6 +391,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "로켓단은 다시 떠오를 거니까!"
|
1: "로켓단은 다시 떠오를 거니까!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "어라 어라… 결국 여기까지 오셨습니까? 꽤 우수한 트레이너인가 보군요.",
|
||||||
|
2: "영웅 놀이는 여기까지랍니다, 꼬마야.",
|
||||||
|
3: "어른이 화를 내면 무섭다는 걸 보여 드리죠!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "크으… 비주기님 용서해 주세요…!",
|
||||||
|
2: "어떻게 이런 일이…",
|
||||||
|
3: "아아… 넌 너무 강하다…"
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: " 마그마단을 방해한다면, 자비는 없닷!"
|
1: " 마그마단을 방해한다면, 자비는 없닷!"
|
||||||
@ -399,6 +411,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "하? 내가 졌어?!"
|
1: "하? 내가 졌어?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "……아하… ……역시 왔네…그치만 안타깝게 됐어……다 끝났거든",
|
||||||
|
2: "……남은……내 일은……너를……막는 것",
|
||||||
|
3: "……너랑……인게이지……하고 싶어……아하하하"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "……룰루리",
|
||||||
|
2: "……재밌쪄",
|
||||||
|
3: "…하아하아……으…하아하아…"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "아쿠아단을 넘본 사람에게는 자비는 없다, 꼬마도 마찬가지야!"
|
1: "아쿠아단을 넘본 사람에게는 자비는 없다, 꼬마도 마찬가지야!"
|
||||||
@ -407,6 +431,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "말도 안돼!"
|
1: "말도 안돼!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "각오하는 게 좋을 거야! 네 얼굴이 눈물로 범벅이 되게 해주겠어!",
|
||||||
|
2: "아앙? 뭐야? 이 건방진 꼬맹이는…",
|
||||||
|
3: "…아니 넌!? 일부러 여기까지 쫓아온 거야?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "하아… 하아…완전 지쳤어",
|
||||||
|
2: "크윽…!? 너무 봐줬나…!",
|
||||||
|
3: "뭐…뭐라고!?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "갤럭시단을 방해하지 마!"
|
1: "갤럭시단을 방해하지 마!"
|
||||||
@ -415,6 +451,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "사격 중지…… "
|
1: "사격 중지…… "
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "나는 갤럭시단에 있는 간부 중의 한 명.",
|
||||||
|
2: "갤럭시단을 방해한다면 일말의 가능성도 모두 제거한다!!",
|
||||||
|
3: "왜 그래? 설마 떨고 있는 거야?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "설마! 내가 졌다고!? 건방진 아이로구나!!",
|
||||||
|
2: "…역시 강해!",
|
||||||
|
3: "어린아이에게 지다니… 방심이란 무섭구나."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "다른 생각을 가진사람들은 용납하지 않겠다!"
|
1: "다른 생각을 가진사람들은 용납하지 않겠다!"
|
||||||
@ -423,6 +471,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "플라-스마-!"
|
1: "플라-스마-!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "너는 플라스마단에게 있어 불안요소가 될 것이다. 여기서 제거하겠다!",
|
||||||
|
2: "이런 이런… 내가 싸워야만 하다니.",
|
||||||
|
3: "여기까지 오다니 대단한 트레이너군."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "게치스…",
|
||||||
|
2: "그건 그렇고 춥구먼. 나는 떨고 있다. 괴롭지만 살아 있다.",
|
||||||
|
3: "흐음. 의외로 똑똑한 트레이너군."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "패션이 우리한텐 가장 중요하다고!"
|
1: "패션이 우리한텐 가장 중요하다고!"
|
||||||
@ -431,6 +491,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "미래가 밝아 보이질 않네."
|
1: "미래가 밝아 보이질 않네."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "왔다! 왔구나! 자! 자! 아직 끝나지 않았다!",
|
||||||
|
2: "너 강하구나. 에너지를 얼마나 갖고 있지?",
|
||||||
|
3: "기다리고 있었어! 너를 조사하겠다. 자 시작한다!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "강하구나, 너는. 응, 정말 강해, 너는.",
|
||||||
|
2: "그렇지만 보스의 꿈이 이루어져 아름다운 세상이 태어날 것이다!",
|
||||||
|
3: "굉장하구나 너! 아주 굉장해! 나는 너를 인정하겠다"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "그래서! 여기까지 오다니, 감탄이 절로 나오는군!"
|
1: "그래서! 여기까지 오다니, 감탄이 절로 나오는군!"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "이 포켓몬들로 시작하시겠습니까?",
|
"confirmStartTeam": "이 포켓몬들로 시작하시겠습니까?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "스타팅 포켓몬 파티에 적합하지 않습니다!",
|
"invalidParty": "스타팅 포켓몬 파티에 적합하지 않습니다!",
|
||||||
"gen1": "1세대",
|
"gen1": "1세대",
|
||||||
"gen2": "2세대",
|
"gen2": "2세대",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "로켓단 조무래기",
|
"rocket_grunt": "로켓단 조무래기",
|
||||||
"rocket_grunt_female": "로켓단 조무래기",
|
"rocket_grunt_female": "로켓단 조무래기",
|
||||||
"rocket_grunts": "로켓단 조무래기들",
|
"rocket_grunts": "로켓단 조무래기들",
|
||||||
|
"rocket_admin": "로켓단 간부",
|
||||||
|
"rocket_admin_female": "로켓단 간부",
|
||||||
"magma_grunt": "마그마단 조무래기",
|
"magma_grunt": "마그마단 조무래기",
|
||||||
"magma_grunt_female": "마그마단 조무래기",
|
"magma_grunt_female": "마그마단 조무래기",
|
||||||
"magma_grunts": "마그마단 조무래기들",
|
"magma_grunts": "마그마단 조무래기들",
|
||||||
|
"magma_admin": "마그마단 간부",
|
||||||
|
"magma_admin_female": "마그마단 간부",
|
||||||
"aqua_grunt": "아쿠아단 조무래기",
|
"aqua_grunt": "아쿠아단 조무래기",
|
||||||
"aqua_grunt_female": "아쿠아단 조무래기",
|
"aqua_grunt_female": "아쿠아단 조무래기",
|
||||||
"aqua_grunts": "아쿠아단 조무래기들",
|
"aqua_grunts": "아쿠아단 조무래기들",
|
||||||
|
"aqua_admin": "아쿠아단 간부",
|
||||||
|
"aqua_admin_female": "아쿠아단 간부",
|
||||||
"galactic_grunt": "갤럭시단 조무래기",
|
"galactic_grunt": "갤럭시단 조무래기",
|
||||||
"galactic_grunt_female": "갤럭시단 조무래기",
|
"galactic_grunt_female": "갤럭시단 조무래기",
|
||||||
"galactic_grunts": "갤럭시단 조무래기들",
|
"galactic_grunts": "갤럭시단 조무래기들",
|
||||||
|
"galactic_admin": "갤럭시단 간부",
|
||||||
|
"galactic_admin_female": "갤럭시단 간부",
|
||||||
"plasma_grunt": "플라스마단 조무래기",
|
"plasma_grunt": "플라스마단 조무래기",
|
||||||
"plasma_grunt_female": "플라스마단 조무래기",
|
"plasma_grunt_female": "플라스마단 조무래기",
|
||||||
"plasma_grunts": "플라스마단 조무래기들",
|
"plasma_grunts": "플라스마단 조무래기들",
|
||||||
|
"plasma_sage": "플라스마단 현인",
|
||||||
"flare_grunt": "플레어단 조무래기",
|
"flare_grunt": "플레어단 조무래기",
|
||||||
"flare_grunt_female": "플레어단 조무래기",
|
"flare_grunt_female": "플레어단 조무래기",
|
||||||
"flare_grunts": "플레어단 조무래기들",
|
"flare_grunts": "플레어단 조무래기들",
|
||||||
|
"flare_admin": "플레어단 간부",
|
||||||
|
"flare_admin_female": "플레어단 간부",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "Começar com esses Pokémon?",
|
"confirmStartTeam": "Começar com esses Pokémon?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "Essa equipe de iniciais não é válida!",
|
"invalidParty": "Essa equipe de iniciais não é válida!",
|
||||||
"gen1": "G1",
|
"gen1": "G1",
|
||||||
"gen2": "G2",
|
"gen2": "G2",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "Recruta da Equipe Rocket",
|
"rocket_grunt": "Recruta da Equipe Rocket",
|
||||||
"rocket_grunt_female": "Recruta da Equipe Rocket",
|
"rocket_grunt_female": "Recruta da Equipe Rocket",
|
||||||
"rocket_grunts": "Recrutas da Equipe Rocket",
|
"rocket_grunts": "Recrutas da Equipe Rocket",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "Recruta da Equipe Magma",
|
"magma_grunt": "Recruta da Equipe Magma",
|
||||||
"magma_grunt_female": "Recruta da Equipe Magma",
|
"magma_grunt_female": "Recruta da Equipe Magma",
|
||||||
"magma_grunts": "Recrutas da Equipe Magma",
|
"magma_grunts": "Recrutas da Equipe Magma",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "Recruta da Equipe Aqua",
|
"aqua_grunt": "Recruta da Equipe Aqua",
|
||||||
"aqua_grunt_female": "Recruta da Equipe Aqua",
|
"aqua_grunt_female": "Recruta da Equipe Aqua",
|
||||||
"aqua_grunts": "Recrutas da Equipe Aqua",
|
"aqua_grunts": "Recrutas da Equipe Aqua",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "Recruta da Equipe Galáctica",
|
"galactic_grunt": "Recruta da Equipe Galáctica",
|
||||||
"galactic_grunt_female": "Recruta da Equipe Galáctica",
|
"galactic_grunt_female": "Recruta da Equipe Galáctica",
|
||||||
"galactic_grunts": "Recrutas da Equipe Galáctica",
|
"galactic_grunts": "Recrutas da Equipe Galáctica",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "Recruta da Equipe Plasma",
|
"plasma_grunt": "Recruta da Equipe Plasma",
|
||||||
"plasma_grunt_female": "Recruta da Equipe Plasma",
|
"plasma_grunt_female": "Recruta da Equipe Plasma",
|
||||||
"plasma_grunts": "Recrutas da Equipe Plasma",
|
"plasma_grunts": "Recrutas da Equipe Plasma",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "Recruta da Equipe Flare",
|
"flare_grunt": "Recruta da Equipe Flare",
|
||||||
"flare_grunt_female": "Recruta da Equipe Flare",
|
"flare_grunt_female": "Recruta da Equipe Flare",
|
||||||
"flare_grunts": "Recrutas da Equipe Flare",
|
"flare_grunts": "Recrutas da Equipe Flare",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -390,6 +390,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "好讨厌的感觉啊!"
|
1: "好讨厌的感觉啊!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "如果你挡在熔岩队路上,那就别指望我们手下留情!"
|
1: "如果你挡在熔岩队路上,那就别指望我们手下留情!"
|
||||||
@ -398,6 +410,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "哈?我输了?!"
|
1: "哈?我输了?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "即使是小孩,如果要和海洋队作对,也别指望我们手下留情!"
|
1: "即使是小孩,如果要和海洋队作对,也别指望我们手下留情!"
|
||||||
@ -406,6 +430,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "你在开玩笑吧?"
|
1: "你在开玩笑吧?"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "别惹银河队!"
|
1: "别惹银河队!"
|
||||||
@ -414,6 +450,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "停机了…"
|
1: "停机了…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "异端不共戴天!"
|
1: "异端不共戴天!"
|
||||||
@ -422,6 +470,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "等离子子子子子子!"
|
1: "等离子子子子子子!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "时尚最重要!"
|
1: "时尚最重要!"
|
||||||
@ -430,6 +490,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "未来一片黑暗啊…"
|
1: "未来一片黑暗啊…"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "我不得不说,能来到这里,你的确很不简单!"
|
1: "我不得不说,能来到这里,你的确很不简单!"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "使用这些宝可梦开始游戏吗?",
|
"confirmStartTeam": "使用这些宝可梦开始游戏吗?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "初始队伍不可用!",
|
"invalidParty": "初始队伍不可用!",
|
||||||
"gen1": "I",
|
"gen1": "I",
|
||||||
"gen2": "II",
|
"gen2": "II",
|
||||||
|
@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"rocket_grunt": "火箭队手下",
|
"rocket_grunt": "火箭队手下",
|
||||||
"rocket_grunt_female": "火箭队手下",
|
"rocket_grunt_female": "火箭队手下",
|
||||||
"rocket_grunts": "火箭队手下们",
|
"rocket_grunts": "火箭队手下们",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "熔岩队手下",
|
"magma_grunt": "熔岩队手下",
|
||||||
"magma_grunt_female": "熔岩队手下",
|
"magma_grunt_female": "熔岩队手下",
|
||||||
"magma_grunts": "熔岩队手下们",
|
"magma_grunts": "熔岩队手下们",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "海洋队手下",
|
"aqua_grunt": "海洋队手下",
|
||||||
"aqua_grunt_female": "海洋队手下",
|
"aqua_grunt_female": "海洋队手下",
|
||||||
"aqua_grunts": "海洋队手下们",
|
"aqua_grunts": "海洋队手下们",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "银河队手下",
|
"galactic_grunt": "银河队手下",
|
||||||
"galactic_grunt_female": "银河队手下",
|
"galactic_grunt_female": "银河队手下",
|
||||||
"galactic_grunts": "银河队手下们",
|
"galactic_grunts": "银河队手下们",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "等离子队手下",
|
"plasma_grunt": "等离子队手下",
|
||||||
"plasma_grunt_female": "等离子队手下",
|
"plasma_grunt_female": "等离子队手下",
|
||||||
"plasma_grunts": "等离子队手下们",
|
"plasma_grunts": "等离子队手下们",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "闪焰队手下",
|
"flare_grunt": "闪焰队手下",
|
||||||
"flare_grunt_female": "闪焰队手下",
|
"flare_grunt_female": "闪焰队手下",
|
||||||
"flare_grunts": "闪焰队手下们",
|
"flare_grunts": "闪焰队手下们",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -390,6 +390,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Team Rocket blasting off again!"
|
1: "Team Rocket blasting off again!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"rocket_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Oh? You managed to get this far? You must be quite the trainer.",
|
||||||
|
2: "That's quite enough of you playing hero, kid.",
|
||||||
|
3: "I'll show you how scary an angry adult can be!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "No! Forgive me Giovanni!",
|
||||||
|
2: "How could this be?",
|
||||||
|
3: "Urgh... You were too strong..."
|
||||||
|
},
|
||||||
|
},
|
||||||
"magma_grunt": {
|
"magma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
1: " If you get in the way of Team Magma, don’t expect any mercy!"
|
||||||
@ -398,6 +410,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Huh? I lost?!"
|
1: "Huh? I lost?!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"magma_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Hehehe! So you've come all the way here! But you're too late!",
|
||||||
|
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
|
||||||
|
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Hehehe... So I lost...",
|
||||||
|
2: "You're disgustingly strong!",
|
||||||
|
3: "Ahahaha! Ouch!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"aqua_grunt": {
|
"aqua_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
1: "No one who crosses Team Aqua gets any mercy, not even kids!"
|
||||||
@ -406,6 +430,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "You're kidding me!"
|
1: "You're kidding me!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"aqua_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
|
||||||
|
2: "Hahn? What's this? Who's this spoiled brat?",
|
||||||
|
3: "What are you doing here? Did you follow us?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "So I lost too...",
|
||||||
|
2: "Ahhh?! Did I go too easy on you?!",
|
||||||
|
3: "Wh-what was that?"
|
||||||
|
},
|
||||||
|
},
|
||||||
"galactic_grunt": {
|
"galactic_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Don't mess with Team Galactic!"
|
1: "Don't mess with Team Galactic!"
|
||||||
@ -414,6 +450,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Shut down..."
|
1: "Shut down..."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"galactic_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "I'm one of Team Galactic's Commanders.",
|
||||||
|
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
|
||||||
|
3: "What's the matter? Don't tell me you're shaking?"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "This can't be?! I lost?! You... you uppity brat!",
|
||||||
|
2: "You, my friend, are tough!",
|
||||||
|
3: "Losing to some child... Being careless cost me too much."
|
||||||
|
},
|
||||||
|
},
|
||||||
"plasma_grunt": {
|
"plasma_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "We won't tolerate people who have different ideas!"
|
1: "We won't tolerate people who have different ideas!"
|
||||||
@ -422,6 +470,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "Plasmaaaaaaaaa!"
|
1: "Plasmaaaaaaaaa!"
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"plasma_sage": {
|
||||||
|
"encounter": {
|
||||||
|
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
|
||||||
|
2: "Oh, for crying out loud... I didn't expect to have to fight!",
|
||||||
|
3: "You're an impressive Trainer to have made it this far."
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "Ghetsis...",
|
||||||
|
2: "It's bitter cold. I'm shivering. I'm suffering.",
|
||||||
|
3: "Hmph. You're a smarter Trainer than I expected."
|
||||||
|
},
|
||||||
|
},
|
||||||
"flare_grunt": {
|
"flare_grunt": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "Fashion is most important to us!"
|
1: "Fashion is most important to us!"
|
||||||
@ -430,6 +490,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
1: "The future doesn't look bright for me."
|
1: "The future doesn't look bright for me."
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"flare_admin": {
|
||||||
|
"encounter": {
|
||||||
|
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||||
|
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||||
|
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||||
|
},
|
||||||
|
"victory": {
|
||||||
|
1: "You're quite strong. Oh yes-very strong, indeed.",
|
||||||
|
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
|
||||||
|
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||||
|
},
|
||||||
|
},
|
||||||
"rocket_boss_giovanni_1": {
|
"rocket_boss_giovanni_1": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "So! I must say, I am impressed you got here!"
|
1: "So! I must say, I am impressed you got here!"
|
||||||
|
@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "使用這些寶可夢開始嗎?",
|
"confirmStartTeam": "使用這些寶可夢開始嗎?",
|
||||||
|
"confirmExit": "Do you want to exit?",
|
||||||
"invalidParty": "此為無效隊伍!",
|
"invalidParty": "此為無效隊伍!",
|
||||||
"gen1": "I",
|
"gen1": "I",
|
||||||
"gen2": "II",
|
"gen2": "II",
|
||||||
|
@ -120,21 +120,32 @@ export const trainerClasses: SimpleTranslationEntries = {
|
|||||||
"workers": "工人組合",
|
"workers": "工人組合",
|
||||||
"youngster": "短褲小子",
|
"youngster": "短褲小子",
|
||||||
"rocket_grunts": "火箭队手下們",
|
"rocket_grunts": "火箭队手下們",
|
||||||
|
"rocket_admin": "Rocket Admin",
|
||||||
|
"rocket_admin_female": "Rocket Admin",
|
||||||
"magma_grunt": "熔岩队手下",
|
"magma_grunt": "熔岩队手下",
|
||||||
"magma_grunt_female": "熔岩队手下",
|
"magma_grunt_female": "熔岩队手下",
|
||||||
"magma_grunts": "熔岩队手下們",
|
"magma_grunts": "熔岩队手下們",
|
||||||
|
"magma_admin": "Magma Admin",
|
||||||
|
"magma_admin_female": "Magma Admin",
|
||||||
"aqua_grunt": "海洋队手下",
|
"aqua_grunt": "海洋队手下",
|
||||||
"aqua_grunt_female": "海洋队手下",
|
"aqua_grunt_female": "海洋队手下",
|
||||||
"aqua_grunts": "海洋队手下們",
|
"aqua_grunts": "海洋队手下們",
|
||||||
|
"aqua_admin": "Aqua Admin",
|
||||||
|
"aqua_admin_female": "Aqua Admin",
|
||||||
"galactic_grunt": "银河队手下",
|
"galactic_grunt": "银河队手下",
|
||||||
"galactic_grunt_female": "银河队手下",
|
"galactic_grunt_female": "银河队手下",
|
||||||
"galactic_grunts": "银河队手下們",
|
"galactic_grunts": "银河队手下們",
|
||||||
|
"galactic_admin": "Galactic Admin",
|
||||||
|
"galactic_admin_female": "Galactic Admin",
|
||||||
"plasma_grunt": "等离子队手下",
|
"plasma_grunt": "等离子队手下",
|
||||||
"plasma_grunt_female": "等离子队手下",
|
"plasma_grunt_female": "等离子队手下",
|
||||||
"plasma_grunts": "等离子队手下們",
|
"plasma_grunts": "等离子队手下們",
|
||||||
|
"plasma_sage": "Plasma Sage",
|
||||||
"flare_grunt": "闪焰队手下",
|
"flare_grunt": "闪焰队手下",
|
||||||
"flare_grunt_female": "闪焰队手下",
|
"flare_grunt_female": "闪焰队手下",
|
||||||
"flare_grunts": "闪焰队手下們",
|
"flare_grunts": "闪焰队手下們",
|
||||||
|
"flare_admin": "Flare Admin",
|
||||||
|
"flare_admin_female": "Flare Admin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// Names of special trainers like gym leaders, elite four, and the champion
|
// Names of special trainers like gym leaders, elite four, and the champion
|
||||||
|
@ -1392,10 +1392,7 @@ export class SummonPhase extends PartyMemberPokemonPhase {
|
|||||||
|
|
||||||
// First check if they're somehow still in play, if so remove them.
|
// First check if they're somehow still in play, if so remove them.
|
||||||
if (partyMember.isOnField()) {
|
if (partyMember.isOnField()) {
|
||||||
partyMember.hideInfo();
|
partyMember.leaveField();
|
||||||
partyMember.setVisible(false);
|
|
||||||
this.scene.field.remove(partyMember);
|
|
||||||
this.scene.triggerPokemonFormChange(partyMember, SpeciesFormChangeActiveTrigger, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const party = this.getParty();
|
const party = this.getParty();
|
||||||
@ -1611,7 +1608,7 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
this.scene.playSound("pb_rel");
|
this.scene.playSound("pb_rel");
|
||||||
pokemon.hideInfo();
|
pokemon.hideInfo(); // this is also done by pokemon.leaveField(), but needs to go earlier for animation purposes
|
||||||
pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn");
|
pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn");
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: pokemon,
|
targets: pokemon,
|
||||||
@ -1619,9 +1616,9 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
ease: "Sine.easeIn",
|
ease: "Sine.easeIn",
|
||||||
scale: 0.5,
|
scale: 0.5,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
pokemon.setVisible(false);
|
// 250ms delay on leaveField is necessary to avoid calling hideInfo() twice
|
||||||
this.scene.field.remove(pokemon);
|
// and double-animating the stats panel slideout
|
||||||
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true);
|
this.scene.time.delayedCall(250, () => pokemon.leaveField(!this.batonPass));
|
||||||
this.scene.time.delayedCall(750, () => this.switchAndSummon());
|
this.scene.time.delayedCall(750, () => this.switchAndSummon());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1629,25 +1626,25 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
|
|
||||||
switchAndSummon() {
|
switchAndSummon() {
|
||||||
const party = this.player ? this.getParty() : this.scene.getEnemyParty();
|
const party = this.player ? this.getParty() : this.scene.getEnemyParty();
|
||||||
const switchedPokemon = party[this.slotIndex];
|
const switchedInPokemon = party[this.slotIndex];
|
||||||
this.lastPokemon = this.getPokemon();
|
this.lastPokemon = this.getPokemon();
|
||||||
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon);
|
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon);
|
||||||
if (this.batonPass && switchedPokemon) {
|
if (this.batonPass && switchedInPokemon) {
|
||||||
(this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.transferTagsBySourceId(this.lastPokemon.id, switchedPokemon.id));
|
(this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.transferTagsBySourceId(this.lastPokemon.id, switchedInPokemon.id));
|
||||||
if (!this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedPokemon.id)) {
|
if (!this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) {
|
||||||
const batonPassModifier = this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier
|
const batonPassModifier = this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier
|
||||||
&& (m as SwitchEffectTransferModifier).pokemonId === this.lastPokemon.id) as SwitchEffectTransferModifier;
|
&& (m as SwitchEffectTransferModifier).pokemonId === this.lastPokemon.id) as SwitchEffectTransferModifier;
|
||||||
if (batonPassModifier && !this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedPokemon.id)) {
|
if (batonPassModifier && !this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id)) {
|
||||||
this.scene.tryTransferHeldItemModifier(batonPassModifier, switchedPokemon, false);
|
this.scene.tryTransferHeldItemModifier(batonPassModifier, switchedInPokemon, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (switchedPokemon) {
|
if (switchedInPokemon) {
|
||||||
party[this.slotIndex] = this.lastPokemon;
|
party[this.slotIndex] = this.lastPokemon;
|
||||||
party[this.fieldIndex] = switchedPokemon;
|
party[this.fieldIndex] = switchedInPokemon;
|
||||||
const showTextAndSummon = () => {
|
const showTextAndSummon = () => {
|
||||||
this.scene.ui.showText(this.player ?
|
this.scene.ui.showText(this.player ?
|
||||||
i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(switchedPokemon) }) :
|
i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(switchedInPokemon) }) :
|
||||||
i18next.t("battle:trainerGo", {
|
i18next.t("battle:trainerGo", {
|
||||||
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
||||||
pokemonName: this.getPokemon().getNameToRender()
|
pokemonName: this.getPokemon().getNameToRender()
|
||||||
@ -1655,8 +1652,8 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
);
|
);
|
||||||
// Ensure improperly persisted summon data (such as tags) is cleared upon switching
|
// Ensure improperly persisted summon data (such as tags) is cleared upon switching
|
||||||
if (!this.batonPass) {
|
if (!this.batonPass) {
|
||||||
party[this.fieldIndex].resetBattleData();
|
switchedInPokemon.resetBattleData();
|
||||||
party[this.fieldIndex].resetSummonData();
|
switchedInPokemon.resetSummonData();
|
||||||
}
|
}
|
||||||
this.summon();
|
this.summon();
|
||||||
};
|
};
|
||||||
@ -1876,14 +1873,11 @@ export class TurnInitPhase extends FieldPhase {
|
|||||||
this.scene.unshiftPhase(new GameOverPhase(this.scene));
|
this.scene.unshiftPhase(new GameOverPhase(this.scene));
|
||||||
} else if (allowedPokemon.length >= this.scene.currentBattle.getBattlerCount() || (this.scene.currentBattle.double && !allowedPokemon[0].isActive(true))) {
|
} else if (allowedPokemon.length >= this.scene.currentBattle.getBattlerCount() || (this.scene.currentBattle.double && !allowedPokemon[0].isActive(true))) {
|
||||||
// If there is at least one pokemon in the back that is legal to switch in, force a switch.
|
// If there is at least one pokemon in the back that is legal to switch in, force a switch.
|
||||||
p.switchOut(false, true);
|
p.switchOut(false);
|
||||||
} else {
|
} else {
|
||||||
// If there are no pokemon in the back but we're not game overing, just hide the pokemon.
|
// If there are no pokemon in the back but we're not game overing, just hide the pokemon.
|
||||||
// This should only happen in double battles.
|
// This should only happen in double battles.
|
||||||
p.hideInfo();
|
p.leaveField();
|
||||||
p.setVisible(false);
|
|
||||||
this.scene.field.remove(p);
|
|
||||||
this.scene.triggerPokemonFormChange(p, SpeciesFormChangeActiveTrigger, true);
|
|
||||||
}
|
}
|
||||||
if (allowedPokemon.length === 1 && this.scene.currentBattle.double) {
|
if (allowedPokemon.length === 1 && this.scene.currentBattle.double) {
|
||||||
this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true));
|
this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true));
|
||||||
|
115
src/test/moves/belly_drum.test.ts
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import GameManager from "#app/test/utils/gameManager";
|
||||||
|
import overrides from "#app/overrides";
|
||||||
|
import {
|
||||||
|
TurnEndPhase,
|
||||||
|
} from "#app/phases";
|
||||||
|
import {getMovePosition} from "#app/test/utils/gameManagerUtils";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import { BattleStat } from "#app/data/battle-stat";
|
||||||
|
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
// RATIO : HP Cost of Move
|
||||||
|
const RATIO = 2;
|
||||||
|
// PREDAMAGE : Amount of extra HP lost
|
||||||
|
const PREDAMAGE = 15;
|
||||||
|
|
||||||
|
describe("Moves - BELLY DRUM", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP);
|
||||||
|
vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX);
|
||||||
|
vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
game.override.moveset([Moves.BELLY_DRUM]);
|
||||||
|
game.override.enemyMoveset([Moves.SPLASH]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Belly_Drum_(move)
|
||||||
|
|
||||||
|
test("Belly Drum raises the user's Attack to its max, at the cost of 1/2 of its maximum HP",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.BELLY_DRUM));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Belly Drum will still take effect if an uninvolved stat is at max",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
// Here - BattleStat.ATK -> -3 and BattleStat.SPATK -> 6
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = -3;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPATK] = 6;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.BELLY_DRUM));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(6);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Belly Drum fails if the pokemon's attack stat is at its maximum",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = 6;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.BELLY_DRUM));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Belly Drum fails if the user's health is less than 1/2",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
leadPokemon.hp = hpLost - PREDAMAGE;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.BELLY_DRUM));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(0);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
});
|
136
src/test/moves/clangorous_soul.test.ts
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import GameManager from "#app/test/utils/gameManager";
|
||||||
|
import overrides from "#app/overrides";
|
||||||
|
import {
|
||||||
|
TurnEndPhase,
|
||||||
|
} from "#app/phases";
|
||||||
|
import {getMovePosition} from "#app/test/utils/gameManagerUtils";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import { BattleStat } from "#app/data/battle-stat";
|
||||||
|
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
// RATIO : HP Cost of Move
|
||||||
|
const RATIO = 3;
|
||||||
|
// PREDAMAGE : Amount of extra HP lost
|
||||||
|
const PREDAMAGE = 15;
|
||||||
|
|
||||||
|
describe("Moves - CLANGOROUS_SOUL", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP);
|
||||||
|
vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX);
|
||||||
|
vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
game.override.moveset([Moves.CLANGOROUS_SOUL]);
|
||||||
|
game.override.enemyMoveset([Moves.SPLASH]);
|
||||||
|
});
|
||||||
|
|
||||||
|
//Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move)
|
||||||
|
|
||||||
|
test("Clangorous Soul raises the user's Attack, Defense, Special Attack, Special Defense and Speed by one stage each, at the cost of 1/3 of its maximum HP",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.CLANGOROUS_SOUL));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(1);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.DEF]).toBe(1);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(1);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPDEF]).toBe(1);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(1);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Clangorous Soul will still take effect if one or more of the involved stats are not at max",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
//Here - BattleStat.SPD -> 0 and BattleStat.SPDEF -> 4
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.DEF] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPDEF] = 4;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.CLANGOROUS_SOUL));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.DEF]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPDEF]).toBe(5);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(1);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Clangorous Soul fails if all stats involved are at max",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.DEF] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPDEF] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPD] = 6;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.CLANGOROUS_SOUL));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.DEF]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPDEF]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(6);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Clangorous Soul fails if the user's health is less than 1/3",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
leadPokemon.hp = hpLost - PREDAMAGE;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.CLANGOROUS_SOUL));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.DEF]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPDEF]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(0);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
});
|
124
src/test/moves/fillet_away.test.ts
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import GameManager from "#app/test/utils/gameManager";
|
||||||
|
import overrides from "#app/overrides";
|
||||||
|
import {
|
||||||
|
TurnEndPhase,
|
||||||
|
} from "#app/phases";
|
||||||
|
import {getMovePosition} from "#app/test/utils/gameManagerUtils";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import { BattleStat } from "#app/data/battle-stat";
|
||||||
|
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
// RATIO : HP Cost of Move
|
||||||
|
const RATIO = 2;
|
||||||
|
// PREDAMAGE : Amount of extra HP lost
|
||||||
|
const PREDAMAGE = 15;
|
||||||
|
|
||||||
|
describe("Moves - FILLET AWAY", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP);
|
||||||
|
vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX);
|
||||||
|
vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100);
|
||||||
|
game.override.moveset([Moves.FILLET_AWAY]);
|
||||||
|
game.override.enemyMoveset([Moves.SPLASH]);
|
||||||
|
});
|
||||||
|
|
||||||
|
//Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move)
|
||||||
|
|
||||||
|
test("Fillet Away raises the user's Attack, Special Attack, and Speed by two stages each, at the cost of 1/2 of its maximum HP",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.FILLET_AWAY));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(2);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(2);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(2);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Fillet Away will still take effect if one or more of the involved stats are not at max",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
|
||||||
|
//Here - BattleStat.SPD -> 0 and BattleStat.SPATK -> 3
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPATK] = 3;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.FILLET_AWAY));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(5);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(2);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Fillet Away fails if all stats involved are at max",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.ATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPATK] = 6;
|
||||||
|
leadPokemon.summonData.battleStats[BattleStat.SPD] = 6;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.FILLET_AWAY));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(6);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(6);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test("Fillet Away fails if the user's health is less than 1/2",
|
||||||
|
async() => {
|
||||||
|
await game.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon();
|
||||||
|
expect(leadPokemon).toBeDefined();
|
||||||
|
const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO);
|
||||||
|
leadPokemon.hp = hpLost - PREDAMAGE;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.FILLET_AWAY));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
|
||||||
|
expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(leadPokemon.summonData.battleStats[BattleStat.SPD]).toBe(0);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
});
|
@ -151,8 +151,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
private filterBarContainer: Phaser.GameObjects.Container;
|
private filterBarContainer: Phaser.GameObjects.Container;
|
||||||
private filterBar: FilterBar;
|
private filterBar: FilterBar;
|
||||||
private shinyOverlay: Phaser.GameObjects.Image;
|
private shinyOverlay: Phaser.GameObjects.Image;
|
||||||
private starterContainer: StarterContainer[] = [];
|
private starterContainers: StarterContainer[] = [];
|
||||||
private filteredStarterContainers: StarterContainer[] = [];
|
private filteredStarterContainers: StarterContainer[] = [];
|
||||||
|
private validStarterContainers: StarterContainer[] = [];
|
||||||
private pokemonNumberText: Phaser.GameObjects.Text;
|
private pokemonNumberText: Phaser.GameObjects.Text;
|
||||||
private pokemonSprite: Phaser.GameObjects.Sprite;
|
private pokemonSprite: Phaser.GameObjects.Sprite;
|
||||||
private pokemonNameText: Phaser.GameObjects.Text;
|
private pokemonNameText: Phaser.GameObjects.Text;
|
||||||
@ -536,7 +537,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
const starterContainer = new StarterContainer(this.scene, species).setVisible(false);
|
const starterContainer = new StarterContainer(this.scene, species).setVisible(false);
|
||||||
this.iconAnimHandler.addOrUpdate(starterContainer.icon, PokemonIconAnimMode.NONE);
|
this.iconAnimHandler.addOrUpdate(starterContainer.icon, PokemonIconAnimMode.NONE);
|
||||||
this.starterContainer.push(starterContainer);
|
this.starterContainers.push(starterContainer);
|
||||||
starterBoxContainer.add(starterContainer);
|
starterBoxContainer.add(starterContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -820,7 +821,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.starterSelectContainer.setVisible(true);
|
this.starterSelectContainer.setVisible(true);
|
||||||
|
|
||||||
this.allSpecies.forEach((species, s) => {
|
this.allSpecies.forEach((species, s) => {
|
||||||
const icon = this.starterContainer[s].icon;
|
const icon = this.starterContainers[s].icon;
|
||||||
const dexEntry = this.scene.gameData.dexData[species.speciesId];
|
const dexEntry = this.scene.gameData.dexData[species.speciesId];
|
||||||
|
|
||||||
if (dexEntry.caughtAttr) {
|
if (dexEntry.caughtAttr) {
|
||||||
@ -1062,14 +1063,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
success = true;
|
success = true;
|
||||||
this.updateInstructions();
|
this.updateInstructions();
|
||||||
} else {
|
} else {
|
||||||
this.blockInput = true;
|
this.tryExit();
|
||||||
this.scene.clearPhaseQueue();
|
|
||||||
if (this.scene.gameMode.isChallenge) {
|
|
||||||
this.scene.pushPhase(new SelectChallengePhase(this.scene));
|
|
||||||
} else {
|
|
||||||
this.scene.pushPhase(new TitlePhase(this.scene));
|
|
||||||
}
|
|
||||||
this.scene.getCurrentPhase().end();
|
|
||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
} else if (this.startCursorObj.visible) { // this checks to see if the start button is selected
|
} else if (this.startCursorObj.visible) { // this checks to see if the start button is selected
|
||||||
@ -1956,14 +1950,31 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
updateStarters = () => {
|
updateStarters = () => {
|
||||||
this.scrollCursor = 0;
|
this.scrollCursor = 0;
|
||||||
this.filteredStarterContainers = [];
|
this.filteredStarterContainers = [];
|
||||||
|
this.validStarterContainers = [];
|
||||||
|
|
||||||
this.pokerusCursorObjs.forEach(cursor => cursor.setVisible(false));
|
this.pokerusCursorObjs.forEach(cursor => cursor.setVisible(false));
|
||||||
this.starterCursorObjs.forEach(cursor => cursor.setVisible(false));
|
this.starterCursorObjs.forEach(cursor => cursor.setVisible(false));
|
||||||
|
|
||||||
this.filterBar.updateFilterLabels();
|
this.filterBar.updateFilterLabels();
|
||||||
|
|
||||||
|
// pre filter for challenges
|
||||||
|
if (this.scene.gameMode.modeId === GameModes.CHALLENGE) {
|
||||||
|
console.log("this.scene.gameMode.modeId", this.scene.gameMode.modeId);
|
||||||
|
this.starterContainers.forEach(container => {
|
||||||
|
const isValidForChallenge = new Utils.BooleanHolder(true);
|
||||||
|
Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, container.species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(container.species, this.scene.gameData.getSpeciesDefaultDexAttr(container.species, false, true)), true);
|
||||||
|
if (isValidForChallenge.value) {
|
||||||
|
this.validStarterContainers.push(container);
|
||||||
|
} else {
|
||||||
|
container.setVisible(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.validStarterContainers = this.starterContainers;
|
||||||
|
}
|
||||||
|
|
||||||
// filter
|
// filter
|
||||||
this.starterContainer.forEach(container => {
|
this.validStarterContainers.forEach(container => {
|
||||||
container.setVisible(false);
|
container.setVisible(false);
|
||||||
|
|
||||||
container.cost = this.scene.gameData.getSpeciesStarterValue(container.species.speciesId);
|
container.cost = this.scene.gameData.getSpeciesStarterValue(container.species.speciesId);
|
||||||
@ -2275,12 +2286,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
const dexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(this.lastSpecies, false, true);
|
const dexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(this.lastSpecies, false, true);
|
||||||
const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr);
|
const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr);
|
||||||
const speciesIndex = this.allSpecies.indexOf(this.lastSpecies);
|
const speciesIndex = this.allSpecies.indexOf(this.lastSpecies);
|
||||||
const lastSpeciesIcon = this.starterContainer[speciesIndex].icon;
|
const lastSpeciesIcon = this.starterContainers[speciesIndex].icon;
|
||||||
this.checkIconId(lastSpeciesIcon, this.lastSpecies, props.female, props.formIndex, props.shiny, props.variant);
|
this.checkIconId(lastSpeciesIcon, this.lastSpecies, props.female, props.formIndex, props.shiny, props.variant);
|
||||||
this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE);
|
this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE);
|
||||||
|
|
||||||
// Resume the animation for the previously selected species
|
// Resume the animation for the previously selected species
|
||||||
const icon = this.starterContainer[speciesIndex].icon;
|
const icon = this.starterContainers[speciesIndex].icon;
|
||||||
this.scene.tweens.getTweensOf(icon).forEach(tween => tween.resume());
|
this.scene.tweens.getTweensOf(icon).forEach(tween => tween.resume());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2376,7 +2387,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
// Pause the animation when the species is selected
|
// Pause the animation when the species is selected
|
||||||
const speciesIndex = this.allSpecies.indexOf(species);
|
const speciesIndex = this.allSpecies.indexOf(species);
|
||||||
const icon = this.starterContainer[speciesIndex].icon;
|
const icon = this.starterContainers[speciesIndex].icon;
|
||||||
|
|
||||||
if (this.isUpgradeAnimationEnabled()) {
|
if (this.isUpgradeAnimationEnabled()) {
|
||||||
this.scene.tweens.getTweensOf(icon).forEach(tween => tween.pause());
|
this.scene.tweens.getTweensOf(icon).forEach(tween => tween.pause());
|
||||||
@ -2813,7 +2824,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
/** Used to detect if this pokemon is registered in starter */
|
/** Used to detect if this pokemon is registered in starter */
|
||||||
const speciesStarterDexEntry = this.scene.gameData.dexData[this.allSpecies[s].speciesId];
|
const speciesStarterDexEntry = this.scene.gameData.dexData[this.allSpecies[s].speciesId];
|
||||||
/** {@linkcode Phaser.GameObjects.Sprite} object of Pokémon for setting the alpha value */
|
/** {@linkcode Phaser.GameObjects.Sprite} object of Pokémon for setting the alpha value */
|
||||||
const speciesSprite = this.starterContainer[s].icon;
|
const speciesSprite = this.starterContainers[s].icon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If remainValue greater than or equal pokemon species and the pokemon is legal for this challenge, the user can select.
|
* If remainValue greater than or equal pokemon species and the pokemon is legal for this challenge, the user can select.
|
||||||
@ -2862,6 +2873,32 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tryExit(): boolean {
|
||||||
|
this.blockInput = true;
|
||||||
|
const ui = this.getUi();
|
||||||
|
|
||||||
|
const cancel = () => {
|
||||||
|
ui.setMode(Mode.STARTER_SELECT);
|
||||||
|
this.clearText();
|
||||||
|
this.blockInput = false;
|
||||||
|
};
|
||||||
|
ui.showText(i18next.t("starterSelectUiHandler:confirmExit"), null, () => {
|
||||||
|
ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
|
ui.setMode(Mode.STARTER_SELECT);
|
||||||
|
this.scene.clearPhaseQueue();
|
||||||
|
if (this.scene.gameMode.isChallenge) {
|
||||||
|
this.scene.pushPhase(new SelectChallengePhase(this.scene));
|
||||||
|
} else {
|
||||||
|
this.scene.pushPhase(new TitlePhase(this.scene));
|
||||||
|
}
|
||||||
|
this.clearText();
|
||||||
|
this.scene.getCurrentPhase().end();
|
||||||
|
}, cancel, null, null, 19);
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
tryStart(manualTrigger: boolean = false): boolean {
|
tryStart(manualTrigger: boolean = false): boolean {
|
||||||
if (!this.starterSpecies.length) {
|
if (!this.starterSpecies.length) {
|
||||||
return false;
|
return false;
|
||||||
|