Fix merge conflicts
2
.github/workflows/deploy.yml
vendored
@ -42,3 +42,5 @@ jobs:
|
|||||||
https://pokerogue.net/
|
https://pokerogue.net/
|
||||||
https://pokerogue.net/index.html
|
https://pokerogue.net/index.html
|
||||||
https://pokerogue.net/manifest.json
|
https://pokerogue.net/manifest.json
|
||||||
|
https://pokerogue.net/manifest.webmanifest
|
||||||
|
https://pokerogue.net/service-worker.js
|
@ -150,6 +150,10 @@ body {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']) #apad #apadStats {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#apad .apadRectBtnContainer + .apadSqBtnContainer {
|
#apad .apadRectBtnContainer + .apadSqBtnContainer {
|
||||||
top: calc(var(--controls-size) * -1.9);
|
top: calc(var(--controls-size) * -1.9);
|
||||||
left: calc(var(--controls-size) * -0.9);
|
left: calc(var(--controls-size) * -0.9);
|
||||||
|
@ -74,6 +74,9 @@
|
|||||||
<div id="apadCycleVariant" class="apadSqBtn apadBtn" data-key="CYCLE_VARIANT">
|
<div id="apadCycleVariant" class="apadSqBtn apadBtn" data-key="CYCLE_VARIANT">
|
||||||
<text class="apadLabel apadLabelSmall">V</text>
|
<text class="apadLabel apadLabelSmall">V</text>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="apadStats" class="apadRectBtn apadBtn" data-key="STATS">
|
||||||
|
<text class="apadLabel apadLabelSmall">C</text>
|
||||||
|
</div>
|
||||||
<div id="apadMenu" class="apadRectBtn apadBtn" data-key="MENU">
|
<div id="apadMenu" class="apadRectBtn apadBtn" data-key="MENU">
|
||||||
<text class="apadLabel apadLabelSmall">Menu</text>
|
<text class="apadLabel apadLabelSmall">Menu</text>
|
||||||
</div>
|
</div>
|
||||||
|
BIN
public/audio/se/shing.wav
Normal file
293
public/images/pbinfo_stat_numbers.json
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_numbers.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 117,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "+1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "+2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 9,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "+3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "+4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 27,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "+5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "+6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 45,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 54,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 63,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 72,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 81,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 90,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 99,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 108,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:794aa4af3291db5abd8a2667626c1998:1a6706ad557b92f9bf099c23e02af4a6:6537c634087637bb27e8a1edb1ee2e35$"
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 458 B After Width: | Height: | Size: 318 B |
BIN
public/images/ui/achv_bar_5.png
Normal file
After Width: | Height: | Size: 458 B |
Before Width: | Height: | Size: 433 B After Width: | Height: | Size: 344 B |
BIN
public/images/ui/legacy/achv_bar_5.png
Normal file
After Width: | Height: | Size: 433 B |
BIN
public/images/ui/legacy/pbinfo_enemy_boss_stats.png
Normal file
After Width: | Height: | Size: 435 B |
BIN
public/images/ui/legacy/pbinfo_enemy_mini_stats.png
Normal file
After Width: | Height: | Size: 666 B |
BIN
public/images/ui/legacy/pbinfo_player_mini_stats.png
Normal file
After Width: | Height: | Size: 674 B |
BIN
public/images/ui/legacy/pbinfo_player_stats.png
Normal file
After Width: | Height: | Size: 285 B |
188
public/images/ui/legacy/pbinfo_stat.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/ui/legacy/pbinfo_stat.png
Normal file
After Width: | Height: | Size: 263 B |
293
public/images/ui/legacy/pbinfo_stat_numbers.json
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_numbers.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 117,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 9,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 27,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 45,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 54,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 63,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 72,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 81,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 90,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 99,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 108,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:1f22b7cb085faf9e9764273fa5e70c28:afc5587ebacca78d178ac7e0c434591b:6537c634087637bb27e8a1edb1ee2e35$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/ui/legacy/pbinfo_stat_numbers.png
Normal file
After Width: | Height: | Size: 392 B |
Before Width: | Height: | Size: 554 B After Width: | Height: | Size: 526 B |
BIN
public/images/ui/pbinfo_enemy_boss_stats.png
Normal file
After Width: | Height: | Size: 257 B |
Before Width: | Height: | Size: 888 B After Width: | Height: | Size: 851 B |
BIN
public/images/ui/pbinfo_enemy_mini_stats.png
Normal file
After Width: | Height: | Size: 642 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 619 B |
Before Width: | Height: | Size: 898 B After Width: | Height: | Size: 860 B |
BIN
public/images/ui/pbinfo_player_mini_stats.png
Normal file
After Width: | Height: | Size: 648 B |
BIN
public/images/ui/pbinfo_player_stats.png
Normal file
After Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.2 KiB |
188
public/images/ui/pbinfo_stat.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 120,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 19,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 19,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 19,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 19,
|
||||||
|
"y": 0,
|
||||||
|
"w": 19,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 17,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 38,
|
||||||
|
"y": 0,
|
||||||
|
"w": 17,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 55,
|
||||||
|
"y": 0,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 68,
|
||||||
|
"y": 0,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 81,
|
||||||
|
"y": 0,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 94,
|
||||||
|
"y": 0,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 107,
|
||||||
|
"y": 0,
|
||||||
|
"w": 13,
|
||||||
|
"h": 7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:86fbd1b45d46271597a7d9de482aaa74:df702dd9d88db50369f1a096f82fd915:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/ui/pbinfo_stat.png
Normal file
After Width: | Height: | Size: 278 B |
293
public/images/ui/pbinfo_stat_numbers.json
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_numbers.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 117,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 9,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 27,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 45,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-1",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 54,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-2",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 63,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-3",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 72,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-4",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 81,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-5",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 90,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "-6",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 99,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 108,
|
||||||
|
"y": 0,
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:b0719fae0d9b670a727148cdc7202249:afc5587ebacca78d178ac7e0c434591b:4825a9f02f72f1fe28a724c6c5dffb37$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/ui/pbinfo_stat_numbers.png
Normal file
After Width: | Height: | Size: 430 B |
@ -3,8 +3,8 @@
|
|||||||
"short_name": "PokéRogue",
|
"short_name": "PokéRogue",
|
||||||
"description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.",
|
"description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.",
|
||||||
"scope": "/",
|
"scope": "/",
|
||||||
"start_url": "/",
|
"start_url": "https://pokerogue.net",
|
||||||
"display": "standalone",
|
"display": "fullscreen",
|
||||||
"background_color": "#8c8c8c",
|
"background_color": "#8c8c8c",
|
||||||
"theme_color": "#8c8c8c",
|
"theme_color": "#8c8c8c",
|
||||||
"icons": [
|
"icons": [
|
||||||
|
@ -85,6 +85,7 @@ export enum Button {
|
|||||||
ACTION,
|
ACTION,
|
||||||
CANCEL,
|
CANCEL,
|
||||||
MENU,
|
MENU,
|
||||||
|
STATS,
|
||||||
CYCLE_SHINY,
|
CYCLE_SHINY,
|
||||||
CYCLE_FORM,
|
CYCLE_FORM,
|
||||||
CYCLE_GENDER,
|
CYCLE_GENDER,
|
||||||
@ -196,25 +197,26 @@ export default class BattleScene extends SceneBase {
|
|||||||
private movementButtonLock: Button;
|
private movementButtonLock: Button;
|
||||||
|
|
||||||
// using a dualshock controller as a map
|
// using a dualshock controller as a map
|
||||||
private gamepadKeyConfig = {
|
private gamepadKeyConfig = {
|
||||||
[Button.UP]: 12, // up
|
[Button.UP]: 12, // up
|
||||||
[Button.DOWN]: 13, // down
|
[Button.DOWN]: 13, // down
|
||||||
[Button.LEFT]: 14, // left
|
[Button.LEFT]: 14, // left
|
||||||
[Button.RIGHT]: 15, // right
|
[Button.RIGHT]: 15, // right
|
||||||
[Button.SUBMIT]: 17, // touchpad
|
[Button.SUBMIT]: 17, // touchpad
|
||||||
[Button.ACTION]: 0, // X
|
[Button.ACTION]: 0, // X
|
||||||
[Button.CANCEL]: 1, // O
|
[Button.CANCEL]: 1, // O
|
||||||
[Button.MENU]: 9, // options
|
[Button.MENU]: 9, // options
|
||||||
[Button.CYCLE_SHINY]: 5, // RB
|
[Button.STATS]: 8, // share
|
||||||
[Button.CYCLE_FORM]: 4, // LB
|
[Button.CYCLE_SHINY]: 5, // RB
|
||||||
[Button.CYCLE_GENDER]: 6, // LT
|
[Button.CYCLE_FORM]: 4, // LB
|
||||||
[Button.CYCLE_ABILITY]: 7, // RT
|
[Button.CYCLE_GENDER]: 6, // LT
|
||||||
[Button.CYCLE_NATURE]: 2, // square
|
[Button.CYCLE_ABILITY]: 7, // RT
|
||||||
[Button.CYCLE_VARIANT]: 3, // triangle
|
[Button.CYCLE_NATURE]: 2, // square
|
||||||
[Button.SPEED_UP]: 10, // L3
|
[Button.CYCLE_VARIANT]: 3, // triangle
|
||||||
[Button.SLOW_DOWN]: 11 // R3
|
[Button.SPEED_UP]: 10, // L3
|
||||||
};
|
[Button.SLOW_DOWN]: 11 // R3
|
||||||
public gamepadButtonStates: boolean[] = new Array(17).fill(false);
|
};
|
||||||
|
public gamepadButtonStates: boolean[] = new Array(17).fill(false);
|
||||||
|
|
||||||
public rngCounter: integer = 0;
|
public rngCounter: integer = 0;
|
||||||
public rngSeedOverride: string = '';
|
public rngSeedOverride: string = '';
|
||||||
@ -615,6 +617,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
[Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z],
|
[Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z],
|
||||||
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
|
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
|
||||||
[Button.MENU]: [keyCodes.ESC, keyCodes.M],
|
[Button.MENU]: [keyCodes.ESC, keyCodes.M],
|
||||||
|
[Button.STATS]: [keyCodes.SHIFT, keyCodes.C],
|
||||||
[Button.CYCLE_SHINY]: [keyCodes.R],
|
[Button.CYCLE_SHINY]: [keyCodes.R],
|
||||||
[Button.CYCLE_FORM]: [keyCodes.F],
|
[Button.CYCLE_FORM]: [keyCodes.F],
|
||||||
[Button.CYCLE_GENDER]: [keyCodes.G],
|
[Button.CYCLE_GENDER]: [keyCodes.G],
|
||||||
@ -1432,8 +1435,16 @@ export default class BattleScene extends SceneBase {
|
|||||||
if (this.ui?.getMode() === Mode.SETTINGS)
|
if (this.ui?.getMode() === Mode.SETTINGS)
|
||||||
(this.ui.getHandler() as SettingsUiHandler).show([]);
|
(this.ui.getHandler() as SettingsUiHandler).show([]);
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
return;
|
let pressed = false;
|
||||||
|
if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) {
|
||||||
|
for (let p of this.getField().filter(p => p?.isActive(true)))
|
||||||
|
p.toggleStats(pressed);
|
||||||
|
if (pressed)
|
||||||
|
this.setLastProcessedMovementTime(Button.STATS);
|
||||||
|
} else
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined')
|
if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined')
|
||||||
navigator.vibrate(vibrationLength || 10);
|
navigator.vibrate(vibrationLength || 10);
|
||||||
}
|
}
|
||||||
@ -1443,7 +1454,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
* or not. It will only return true once, until the key is released and pressed down
|
* or not. It will only return true once, until the key is released and pressed down
|
||||||
* again.
|
* again.
|
||||||
*/
|
*/
|
||||||
gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button) : boolean {
|
gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean {
|
||||||
if (!button || !this.gamepadSupport)
|
if (!button || !this.gamepadSupport)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1463,6 +1474,23 @@ export default class BattleScene extends SceneBase {
|
|||||||
return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]);
|
return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gamepadButtonJustUp returns true if @param button has just been released
|
||||||
|
* or not. It will only return true once, until the key is released and pressed down
|
||||||
|
* again.
|
||||||
|
*/
|
||||||
|
gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean {
|
||||||
|
if (!button || !this.gamepadSupport)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return !this.gamepadButtonStates[button.index];
|
||||||
|
}
|
||||||
|
|
||||||
|
buttonJustReleased(button: Button): boolean {
|
||||||
|
const gamepad = this.input.gamepad?.gamepads[0];
|
||||||
|
return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* repeatInputDurationJustPassed returns true if @param button has been held down long
|
* repeatInputDurationJustPassed returns true if @param button has been held down long
|
||||||
* enough to fire a repeated input. A button must claim the movementButtonLock before
|
* enough to fire a repeated input. A button must claim the movementButtonLock before
|
||||||
|
@ -580,6 +580,35 @@ export class PostDefendStatChangeAbAttr extends PostDefendAbAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class PostDefendHpGatedStatChangeAbAttr extends PostDefendAbAttr {
|
||||||
|
private condition: PokemonDefendCondition;
|
||||||
|
private hpGate: number;
|
||||||
|
private stats: BattleStat[];
|
||||||
|
private levels: integer;
|
||||||
|
private selfTarget: boolean;
|
||||||
|
|
||||||
|
constructor(condition: PokemonDefendCondition, hpGate: number, stats: BattleStat[], levels: integer, selfTarget: boolean = true) {
|
||||||
|
super(true);
|
||||||
|
|
||||||
|
this.condition = condition;
|
||||||
|
this.hpGate = hpGate;
|
||||||
|
this.stats = stats;
|
||||||
|
this.levels = levels;
|
||||||
|
this.selfTarget = selfTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
|
||||||
|
const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate)
|
||||||
|
const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1]
|
||||||
|
if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) {
|
||||||
|
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr {
|
export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr {
|
||||||
private condition: PokemonDefendCondition;
|
private condition: PokemonDefendCondition;
|
||||||
private tagType: ArenaTagType;
|
private tagType: ArenaTagType;
|
||||||
@ -679,6 +708,19 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr {
|
||||||
|
constructor() {
|
||||||
|
super(10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP);
|
||||||
|
}
|
||||||
|
|
||||||
|
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
|
||||||
|
if (attacker.hasAbility(Abilities.OVERCOAT) || attacker.isOfType(Type.GRASS)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return super.applyPostDefend(pokemon, passive, attacker, move, hitResult, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr {
|
export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr {
|
||||||
private chance: integer;
|
private chance: integer;
|
||||||
private tagType: BattlerTagType;
|
private tagType: BattlerTagType;
|
||||||
@ -909,8 +951,8 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr {
|
|||||||
private condition: PokemonAttackCondition;
|
private condition: PokemonAttackCondition;
|
||||||
private powerMultiplier: number;
|
private powerMultiplier: number;
|
||||||
|
|
||||||
constructor(condition: PokemonAttackCondition, powerMultiplier: number) {
|
constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility: boolean = true) {
|
||||||
super(true);
|
super(showAbility);
|
||||||
this.condition = condition;
|
this.condition = condition;
|
||||||
this.powerMultiplier = powerMultiplier;
|
this.powerMultiplier = powerMultiplier;
|
||||||
}
|
}
|
||||||
@ -1599,6 +1641,27 @@ export class BonusCritAbAttr extends AbAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class MultCritAbAttr extends AbAttr {
|
||||||
|
public multAmount: number;
|
||||||
|
|
||||||
|
constructor(multAmount: number) {
|
||||||
|
super(true);
|
||||||
|
|
||||||
|
this.multAmount = multAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
|
||||||
|
const critMult = args[0] as Utils.NumberHolder;
|
||||||
|
if (critMult.value > 1){
|
||||||
|
critMult.value *= this.multAmount;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export class BlockNonDirectDamageAbAttr extends AbAttr {
|
export class BlockNonDirectDamageAbAttr extends AbAttr {
|
||||||
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
|
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
|
||||||
cancelled.value = true;
|
cancelled.value = true;
|
||||||
@ -1725,6 +1788,53 @@ function getAnticipationCondition(): AbAttrCondition {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class ForewarnAbAttr extends PostSummonAbAttr {
|
||||||
|
constructor() {
|
||||||
|
super(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
|
||||||
|
let maxPowerSeen = 0;
|
||||||
|
let maxMove = "";
|
||||||
|
let movePower = 0;
|
||||||
|
for (let opponent of pokemon.getOpponents()) {
|
||||||
|
for (let move of opponent.moveset) {
|
||||||
|
if (move.getMove() instanceof StatusMove) {
|
||||||
|
movePower = 1;
|
||||||
|
} else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) {
|
||||||
|
movePower = 150;
|
||||||
|
} else if (move.getMove().id === Moves.COUNTER || move.getMove().id === Moves.MIRROR_COAT || move.getMove().id === Moves.METAL_BURST) {
|
||||||
|
movePower = 120;
|
||||||
|
} else if (move.getMove().power === -1) {
|
||||||
|
movePower = 80;
|
||||||
|
} else {
|
||||||
|
movePower = move.getMove().power;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (movePower > maxPowerSeen) {
|
||||||
|
maxPowerSeen = movePower;
|
||||||
|
maxMove = move.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FriskAbAttr extends PostSummonAbAttr {
|
||||||
|
constructor() {
|
||||||
|
super(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
|
||||||
|
for (let opponent of pokemon.getOpponents()) {
|
||||||
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "\'s " + opponent.getAbility().name + "!"));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class PostWeatherChangeAbAttr extends AbAttr {
|
export class PostWeatherChangeAbAttr extends AbAttr {
|
||||||
applyPostWeatherChange(pokemon: Pokemon, passive: boolean, weather: WeatherType, args: any[]): boolean {
|
applyPostWeatherChange(pokemon: Pokemon, passive: boolean, weather: WeatherType, args: any[]): boolean {
|
||||||
return false;
|
return false;
|
||||||
@ -2581,7 +2691,7 @@ export function initAbilities() {
|
|||||||
.attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED))
|
.attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED))
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.EFFECT_SPORE, 3)
|
new Ability(Abilities.EFFECT_SPORE, 3)
|
||||||
.attr(PostDefendContactApplyStatusEffectAbAttr, 10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP),
|
.attr(EffectSporeAbAttr),
|
||||||
new Ability(Abilities.SYNCHRONIZE, 3)
|
new Ability(Abilities.SYNCHRONIZE, 3)
|
||||||
.attr(SyncEncounterNatureAbAttr)
|
.attr(SyncEncounterNatureAbAttr)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
@ -2721,7 +2831,7 @@ export function initAbilities() {
|
|||||||
.attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1)
|
.attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.RIVALRY, 4)
|
new Ability(Abilities.RIVALRY, 4)
|
||||||
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25)
|
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25, true)
|
||||||
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75),
|
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75),
|
||||||
new Ability(Abilities.STEADFAST, 4)
|
new Ability(Abilities.STEADFAST, 4)
|
||||||
.attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1),
|
.attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1),
|
||||||
@ -2772,7 +2882,7 @@ export function initAbilities() {
|
|||||||
.attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => move.id !== Moves.HIDDEN_POWER && move.id !== Moves.WEATHER_BALL &&
|
.attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => move.id !== Moves.HIDDEN_POWER && move.id !== Moves.WEATHER_BALL &&
|
||||||
move.id !== Moves.NATURAL_GIFT && move.id !== Moves.JUDGMENT && move.id !== Moves.TECHNO_BLAST),
|
move.id !== Moves.NATURAL_GIFT && move.id !== Moves.JUDGMENT && move.id !== Moves.TECHNO_BLAST),
|
||||||
new Ability(Abilities.SNIPER, 4)
|
new Ability(Abilities.SNIPER, 4)
|
||||||
.unimplemented(),
|
.attr(MultCritAbAttr, 1.5),
|
||||||
new Ability(Abilities.MAGIC_GUARD, 4)
|
new Ability(Abilities.MAGIC_GUARD, 4)
|
||||||
.attr(BlockNonDirectDamageAbAttr),
|
.attr(BlockNonDirectDamageAbAttr),
|
||||||
new Ability(Abilities.NO_GUARD, 4)
|
new Ability(Abilities.NO_GUARD, 4)
|
||||||
@ -2800,7 +2910,7 @@ export function initAbilities() {
|
|||||||
new Ability(Abilities.ANTICIPATION, 4)
|
new Ability(Abilities.ANTICIPATION, 4)
|
||||||
.conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, ' shuddered!')),
|
.conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, ' shuddered!')),
|
||||||
new Ability(Abilities.FOREWARN, 4)
|
new Ability(Abilities.FOREWARN, 4)
|
||||||
.unimplemented(),
|
.attr(ForewarnAbAttr),
|
||||||
new Ability(Abilities.UNAWARE, 4)
|
new Ability(Abilities.UNAWARE, 4)
|
||||||
.attr(IgnoreOpponentStatChangesAbAttr)
|
.attr(IgnoreOpponentStatChangesAbAttr)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
@ -2829,7 +2939,7 @@ export function initAbilities() {
|
|||||||
new Ability(Abilities.HONEY_GATHER, 4)
|
new Ability(Abilities.HONEY_GATHER, 4)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new Ability(Abilities.FRISK, 4)
|
new Ability(Abilities.FRISK, 4)
|
||||||
.unimplemented(),
|
.attr(FriskAbAttr),
|
||||||
new Ability(Abilities.RECKLESS, 4)
|
new Ability(Abilities.RECKLESS, 4)
|
||||||
.attr(MovePowerBoostAbAttr, (user, target, move) => move.getAttrs(RecoilAttr).length && move.id !== Moves.STRUGGLE, 1.2),
|
.attr(MovePowerBoostAbAttr, (user, target, move) => move.getAttrs(RecoilAttr).length && move.id !== Moves.STRUGGLE, 1.2),
|
||||||
new Ability(Abilities.MULTITYPE, 4)
|
new Ability(Abilities.MULTITYPE, 4)
|
||||||
@ -3066,7 +3176,7 @@ export function initAbilities() {
|
|||||||
new Ability(Abilities.STEELWORKER, 7)
|
new Ability(Abilities.STEELWORKER, 7)
|
||||||
.attr(MoveTypePowerBoostAbAttr, Type.STEEL),
|
.attr(MoveTypePowerBoostAbAttr, Type.STEEL),
|
||||||
new Ability(Abilities.BERSERK, 7)
|
new Ability(Abilities.BERSERK, 7)
|
||||||
.unimplemented(),
|
.attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [BattleStat.SPATK], 1),
|
||||||
new Ability(Abilities.SLUSH_RUSH, 7)
|
new Ability(Abilities.SLUSH_RUSH, 7)
|
||||||
.attr(BattleStatMultiplierAbAttr, BattleStat.SPD, 2)
|
.attr(BattleStatMultiplierAbAttr, BattleStat.SPD, 2)
|
||||||
.condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)),
|
.condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)),
|
||||||
@ -3302,7 +3412,8 @@ export function initAbilities() {
|
|||||||
.attr(StatusEffectImmunityAbAttr, StatusEffect.BURN)
|
.attr(StatusEffectImmunityAbAttr, StatusEffect.BURN)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.ANGER_SHELL, 9)
|
new Ability(Abilities.ANGER_SHELL, 9)
|
||||||
.unimplemented(),
|
.attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], 1)
|
||||||
|
.attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.DEF, BattleStat.SPDEF ], -1),
|
||||||
new Ability(Abilities.PURIFYING_SALT, 9)
|
new Ability(Abilities.PURIFYING_SALT, 9)
|
||||||
.attr(StatusEffectImmunityAbAttr)
|
.attr(StatusEffectImmunityAbAttr)
|
||||||
.attr(ReceivedTypeDamageMultiplierAbAttr, Type.GHOST, 0.5)
|
.attr(ReceivedTypeDamageMultiplierAbAttr, Type.GHOST, 0.5)
|
||||||
|
@ -482,6 +482,20 @@ export class GravityTag extends ArenaTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TailwindTag extends ArenaTag {
|
||||||
|
constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) {
|
||||||
|
super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
onAdd(arena: Arena): void {
|
||||||
|
arena.scene.queueMessage(`The Tailwind blew from behind${this.side === ArenaTagSide.PLAYER ? '\nyour' : this.side === ArenaTagSide.ENEMY ? '\nthe opposing' : ''} team!`);
|
||||||
|
}
|
||||||
|
|
||||||
|
onRemove(arena: Arena): void {
|
||||||
|
arena.scene.queueMessage(`${this.side === ArenaTagSide.PLAYER ? 'Your' : this.side === ArenaTagSide.ENEMY ? 'The opposing' : ''} team's Tailwind petered out!`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag {
|
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag {
|
||||||
switch (tagType) {
|
switch (tagType) {
|
||||||
case ArenaTagType.MIST:
|
case ArenaTagType.MIST:
|
||||||
@ -513,5 +527,7 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov
|
|||||||
return new LightScreenTag(turnCount, sourceId, side);
|
return new LightScreenTag(turnCount, sourceId, side);
|
||||||
case ArenaTagType.AURORA_VEIL:
|
case ArenaTagType.AURORA_VEIL:
|
||||||
return new AuroraVeilTag(turnCount, sourceId, side);
|
return new AuroraVeilTag(turnCount, sourceId, side);
|
||||||
|
case ArenaTagType.TAILWIND:
|
||||||
|
return new TailwindTag(turnCount, sourceId, side);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,6 +163,29 @@ export class FlinchedTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class InterruptedTag extends BattlerTag {
|
||||||
|
constructor(sourceMove: Moves){
|
||||||
|
super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove)
|
||||||
|
}
|
||||||
|
|
||||||
|
canAdd(pokemon: Pokemon): boolean {
|
||||||
|
return !!pokemon.getTag(BattlerTagType.FLYING)
|
||||||
|
}
|
||||||
|
|
||||||
|
onAdd(pokemon: Pokemon): void {
|
||||||
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
|
pokemon.getMoveQueue().shift()
|
||||||
|
pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER})
|
||||||
|
}
|
||||||
|
|
||||||
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
|
super.lapse(pokemon, lapseType);
|
||||||
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class ConfusedTag extends BattlerTag {
|
export class ConfusedTag extends BattlerTag {
|
||||||
constructor(turnCount: integer, sourceMove: Moves) {
|
constructor(turnCount: integer, sourceMove: Moves) {
|
||||||
super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove);
|
super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove);
|
||||||
@ -368,6 +391,12 @@ export class FrenzyTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class ChargingTag extends BattlerTag {
|
||||||
|
constructor(sourceMove: Moves, sourceId: integer) {
|
||||||
|
super(BattlerTagType.CHARGING, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class EncoreTag extends BattlerTag {
|
export class EncoreTag extends BattlerTag {
|
||||||
public moveId: Moves;
|
public moveId: Moves;
|
||||||
|
|
||||||
@ -955,6 +984,19 @@ export class HideSpriteTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class TypeImmuneTag extends BattlerTag {
|
||||||
|
public immuneType: Type;
|
||||||
|
constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: Type, length: number) {
|
||||||
|
super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class MagnetRisenTag extends TypeImmuneTag {
|
||||||
|
constructor(tagType: BattlerTagType, sourceMove: Moves) {
|
||||||
|
super(tagType, sourceMove, Type.GROUND, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TypeBoostTag extends BattlerTag {
|
export class TypeBoostTag extends BattlerTag {
|
||||||
public boostedType: Type;
|
public boostedType: Type;
|
||||||
public boostValue: number;
|
public boostValue: number;
|
||||||
@ -1081,6 +1123,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc
|
|||||||
return new RechargingTag(sourceMove);
|
return new RechargingTag(sourceMove);
|
||||||
case BattlerTagType.FLINCHED:
|
case BattlerTagType.FLINCHED:
|
||||||
return new FlinchedTag(sourceMove);
|
return new FlinchedTag(sourceMove);
|
||||||
|
case BattlerTagType.INTERRUPTED:
|
||||||
|
return new InterruptedTag(sourceMove);
|
||||||
case BattlerTagType.CONFUSED:
|
case BattlerTagType.CONFUSED:
|
||||||
return new ConfusedTag(turnCount, sourceMove);
|
return new ConfusedTag(turnCount, sourceMove);
|
||||||
case BattlerTagType.INFATUATED:
|
case BattlerTagType.INFATUATED:
|
||||||
@ -1091,6 +1135,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc
|
|||||||
return new NightmareTag();
|
return new NightmareTag();
|
||||||
case BattlerTagType.FRENZY:
|
case BattlerTagType.FRENZY:
|
||||||
return new FrenzyTag(sourceMove, sourceId);
|
return new FrenzyTag(sourceMove, sourceId);
|
||||||
|
case BattlerTagType.CHARGING:
|
||||||
|
return new ChargingTag(sourceMove, sourceId);
|
||||||
case BattlerTagType.ENCORE:
|
case BattlerTagType.ENCORE:
|
||||||
return new EncoreTag(sourceId);
|
return new EncoreTag(sourceId);
|
||||||
case BattlerTagType.HELPING_HAND:
|
case BattlerTagType.HELPING_HAND:
|
||||||
@ -1178,6 +1224,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc
|
|||||||
return new CursedTag(sourceId);
|
return new CursedTag(sourceId);
|
||||||
case BattlerTagType.CHARGED:
|
case BattlerTagType.CHARGED:
|
||||||
return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true);
|
return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true);
|
||||||
|
case BattlerTagType.MAGNET_RISEN:
|
||||||
|
return new MagnetRisenTag(tagType, sourceMove);
|
||||||
case BattlerTagType.NONE:
|
case BattlerTagType.NONE:
|
||||||
default:
|
default:
|
||||||
return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
|
return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
|
||||||
|
@ -99,6 +99,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
case BerryType.SITRUS:
|
case BerryType.SITRUS:
|
||||||
case BerryType.ENIGMA:
|
case BerryType.ENIGMA:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4));
|
const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4));
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed);
|
||||||
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(),
|
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(),
|
||||||
@ -106,6 +108,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
};
|
};
|
||||||
case BerryType.LUM:
|
case BerryType.LUM:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
if (pokemon.status) {
|
if (pokemon.status) {
|
||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)));
|
||||||
pokemon.resetStatus();
|
pokemon.resetStatus();
|
||||||
@ -119,6 +123,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
case BerryType.APICOT:
|
case BerryType.APICOT:
|
||||||
case BerryType.SALAC:
|
case BerryType.SALAC:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
|
const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
|
||||||
const statLevels = new Utils.NumberHolder(1);
|
const statLevels = new Utils.NumberHolder(1);
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
||||||
@ -126,16 +132,22 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
};
|
};
|
||||||
case BerryType.LANSAT:
|
case BerryType.LANSAT:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
pokemon.addTag(BattlerTagType.CRIT_BOOST);
|
pokemon.addTag(BattlerTagType.CRIT_BOOST);
|
||||||
};
|
};
|
||||||
case BerryType.STARF:
|
case BerryType.STARF:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const statLevels = new Utils.NumberHolder(2);
|
const statLevels = new Utils.NumberHolder(2);
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
||||||
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value));
|
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value));
|
||||||
};
|
};
|
||||||
case BerryType.LEPPA:
|
case BerryType.LEPPA:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio());
|
const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio());
|
||||||
ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0);
|
ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0);
|
||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`));
|
||||||
|
@ -241,10 +241,10 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ]
|
[TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.TALL_GRASS]: {
|
[Biome.TALL_GRASS]: {
|
||||||
@ -487,14 +487,14 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ],
|
[TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ],
|
||||||
[TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ]
|
[TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT ] },
|
[BiomePoolTier.BOSS_RARE]: {
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: {
|
|
||||||
[TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ],
|
[TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ],
|
||||||
[TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ],
|
[TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ],
|
||||||
[TimeOfDay.DUSK]: [],
|
[TimeOfDay.DUSK]: [],
|
||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL, Species.GALAR_STUNFISK ]
|
[TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ]
|
||||||
},
|
},
|
||||||
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.BEACH]: {
|
[Biome.BEACH]: {
|
||||||
@ -521,7 +521,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] },
|
||||||
[BiomePoolTier.BOSS]: {
|
[BiomePoolTier.BOSS]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.STARMIE ],
|
[TimeOfDay.DAWN]: [ Species.STARMIE ],
|
||||||
[TimeOfDay.DAY]: [ Species.STARMIE ],
|
[TimeOfDay.DAY]: [ Species.STARMIE ],
|
||||||
@ -530,7 +530,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ]
|
[TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.LAKE]: {
|
[Biome.LAKE]: {
|
||||||
@ -615,7 +615,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.DAY]: [],
|
[TimeOfDay.DAY]: [],
|
||||||
[TimeOfDay.DUSK]: [],
|
[TimeOfDay.DUSK]: [],
|
||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ]
|
[TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: {
|
[BiomePoolTier.SUPER_RARE]: {
|
||||||
[TimeOfDay.DAWN]: [],
|
[TimeOfDay.DAWN]: [],
|
||||||
@ -640,8 +640,14 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ]
|
[TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ] },
|
[BiomePoolTier.BOSS_RARE]: {
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ] },
|
[TimeOfDay.DAWN]: [],
|
||||||
|
[TimeOfDay.DAY]: [],
|
||||||
|
[TimeOfDay.DUSK]: [],
|
||||||
|
[TimeOfDay.NIGHT]: [],
|
||||||
|
[TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ]
|
||||||
|
},
|
||||||
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] }
|
||||||
},
|
},
|
||||||
[Biome.MOUNTAIN]: {
|
[Biome.MOUNTAIN]: {
|
||||||
@ -840,7 +846,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ]
|
[TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] },
|
||||||
[BiomePoolTier.BOSS]: {
|
[BiomePoolTier.BOSS]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ],
|
[TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ],
|
||||||
[TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ],
|
[TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ],
|
||||||
@ -849,7 +855,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ]
|
[TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.ICE_CAVE]: {
|
[Biome.ICE_CAVE]: {
|
||||||
@ -951,9 +957,9 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ]
|
[TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ] }
|
||||||
},
|
},
|
||||||
[Biome.POWER_PLANT]: {
|
[Biome.POWER_PLANT]: {
|
||||||
[BiomePoolTier.COMMON]: {
|
[BiomePoolTier.COMMON]: {
|
||||||
@ -984,8 +990,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ]
|
[TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI, Species.HISUI_ELECTRODE ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] }
|
||||||
},
|
},
|
||||||
[Biome.VOLCANO]: {
|
[Biome.VOLCANO]: {
|
||||||
@ -1035,9 +1041,9 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.DAY]: [],
|
[TimeOfDay.DAY]: [],
|
||||||
[TimeOfDay.DUSK]: [],
|
[TimeOfDay.DUSK]: [],
|
||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE ]
|
[TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU, Species.HISUI_ARCANINE ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] }
|
||||||
},
|
},
|
||||||
[Biome.GRAVEYARD]: {
|
[Biome.GRAVEYARD]: {
|
||||||
@ -1074,8 +1080,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ]
|
[TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER, Species.HISUI_TYPHLOSION ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] }
|
||||||
},
|
},
|
||||||
[Biome.DOJO]: {
|
[Biome.DOJO]: {
|
||||||
@ -1109,8 +1115,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ]
|
[TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.SIRFETCHD, Species.URSHIFU, Species.HISUI_DECIDUEYE ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] }
|
||||||
},
|
},
|
||||||
[Biome.FACTORY]: {
|
[Biome.FACTORY]: {
|
||||||
@ -1128,8 +1134,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] },
|
[BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] },
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] }, { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
@ -1168,8 +1174,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] }
|
||||||
},
|
},
|
||||||
[Biome.WASTELAND]: {
|
[Biome.WASTELAND]: {
|
||||||
@ -1245,7 +1251,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ]
|
[TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.GALAR_MOLTRES ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ] },
|
||||||
[BiomePoolTier.BOSS]: {
|
[BiomePoolTier.BOSS]: {
|
||||||
[TimeOfDay.DAWN]: [],
|
[TimeOfDay.DAWN]: [],
|
||||||
[TimeOfDay.DAY]: [],
|
[TimeOfDay.DAY]: [],
|
||||||
@ -1253,8 +1259,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ]
|
[TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.HISUI_SAMUROTT ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] }
|
||||||
},
|
},
|
||||||
[Biome.SPACE]: {
|
[Biome.SPACE]: {
|
||||||
@ -1274,10 +1280,10 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ]
|
[TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.CELESTEELA ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] }
|
||||||
},
|
},
|
||||||
[Biome.CONSTRUCTION_SITE]: {
|
[Biome.CONSTRUCTION_SITE]: {
|
||||||
@ -1307,10 +1313,10 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.JUNGLE]: {
|
[Biome.JUNGLE]: {
|
||||||
@ -1319,7 +1325,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ],
|
[TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ],
|
||||||
[TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
[TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
||||||
[TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
[TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
||||||
[TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 36: [ Species.TOUCANNON ] } ]
|
[TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.UNCOMMON]: {
|
[BiomePoolTier.UNCOMMON]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ],
|
[TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ],
|
||||||
@ -1352,7 +1358,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] },
|
||||||
[BiomePoolTier.BOSS]: {
|
[BiomePoolTier.BOSS]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ],
|
[TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ],
|
||||||
[TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ],
|
[TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ],
|
||||||
@ -1367,7 +1373,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ]
|
[TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] }
|
||||||
},
|
},
|
||||||
[Biome.FAIRY_CAVE]: {
|
[Biome.FAIRY_CAVE]: {
|
||||||
@ -1445,10 +1451,10 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] }
|
||||||
},
|
},
|
||||||
[Biome.SLUM]: {
|
[Biome.SLUM]: {
|
||||||
@ -1479,10 +1485,10 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ]
|
[TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM ] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GALAR_WEEZING ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.SNOWY_FOREST]: {
|
[Biome.SNOWY_FOREST]: {
|
||||||
@ -1516,14 +1522,14 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] },
|
[BiomePoolTier.BOSS_RARE]: {
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: {
|
|
||||||
[TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ],
|
[TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ],
|
||||||
[TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ],
|
[TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ],
|
||||||
[TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ],
|
[TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ],
|
||||||
[TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ],
|
[TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ],
|
||||||
[TimeOfDay.ALL]: [ Species.MR_RIME, Species.GLASTRIER, Species.CHIEN_PAO ]
|
[TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ]
|
||||||
},
|
},
|
||||||
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] }
|
||||||
},
|
},
|
||||||
[Biome.ISLAND]: {
|
[Biome.ISLAND]: {
|
||||||
@ -1550,7 +1556,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
},
|
},
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] },
|
||||||
[BiomePoolTier.BOSS]: {
|
[BiomePoolTier.BOSS]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ],
|
[TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ],
|
||||||
[TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ],
|
[TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ],
|
||||||
@ -1559,7 +1565,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ]
|
[TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] },
|
[BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] },
|
||||||
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
[BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }
|
||||||
},
|
},
|
||||||
[Biome.LABORATORY]: {
|
[Biome.LABORATORY]: {
|
||||||
@ -2708,7 +2714,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PORYGON, Type.NORMAL, -1, [
|
[ Species.PORYGON, Type.NORMAL, -1, [
|
||||||
[ Biome.FACTORY, BiomePoolTier.SUPER_RARE ],
|
[ Biome.FACTORY, BiomePoolTier.RARE ],
|
||||||
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
||||||
]
|
]
|
||||||
@ -3165,7 +3171,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PORYGON2, Type.NORMAL, -1, [
|
[ Species.PORYGON2, Type.NORMAL, -1, [
|
||||||
[ Biome.FACTORY, BiomePoolTier.SUPER_RARE ],
|
[ Biome.FACTORY, BiomePoolTier.RARE ],
|
||||||
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
||||||
]
|
]
|
||||||
@ -4371,8 +4377,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.CRESSELIA, Type.PSYCHIC, -1, [
|
[ Species.CRESSELIA, Type.PSYCHIC, -1, [
|
||||||
[ Biome.SPACE, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.BEACH, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PHIONE, Type.WATER, -1, [ ]
|
[ Species.PHIONE, Type.WATER, -1, [ ]
|
||||||
@ -4384,7 +4390,9 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
[ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.SHAYMIN, Type.GRASS, -1, [ ]
|
[ Species.SHAYMIN, Type.GRASS, -1, [
|
||||||
|
[ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ]
|
||||||
|
]
|
||||||
],
|
],
|
||||||
[ Species.ARCEUS, Type.NORMAL, -1, [ ]
|
[ Species.ARCEUS, Type.NORMAL, -1, [ ]
|
||||||
],
|
],
|
||||||
@ -5103,8 +5111,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [
|
[ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [
|
||||||
[ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.GRASS, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.GRASS, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.TORNADUS, Type.FLYING, -1, [
|
[ Species.TORNADUS, Type.FLYING, -1, [
|
||||||
@ -5779,18 +5787,18 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.TAPU_LELE, Type.PSYCHIC, Type.FAIRY, [
|
[ Species.TAPU_LELE, Type.PSYCHIC, Type.FAIRY, [
|
||||||
[ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.TAPU_BULU, Type.GRASS, Type.FAIRY, [
|
[ Species.TAPU_BULU, Type.GRASS, Type.FAIRY, [
|
||||||
[ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.DESERT, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.TAPU_FINI, Type.WATER, Type.FAIRY, [
|
[ Species.TAPU_FINI, Type.WATER, Type.FAIRY, [
|
||||||
[ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.BEACH, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.COSMOG, Type.PSYCHIC, -1, [
|
[ Species.COSMOG, Type.PSYCHIC, -1, [
|
||||||
@ -5840,8 +5848,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GUZZLORD, Type.DARK, Type.DRAGON, [
|
[ Species.GUZZLORD, Type.DARK, Type.DRAGON, [
|
||||||
[ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.SLUM, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.NECROZMA, Type.PSYCHIC, -1, [
|
[ Species.NECROZMA, Type.PSYCHIC, -1, [
|
||||||
@ -5867,8 +5875,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.STAKATAKA, Type.ROCK, Type.STEEL, [
|
[ Species.STAKATAKA, Type.ROCK, Type.STEEL, [
|
||||||
[ Biome.ISLAND, BiomePoolTier.ULTRA_RARE ],
|
[ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ],
|
||||||
[ Biome.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.BLACEPHALON, Type.FIRE, Type.GHOST, [
|
[ Species.BLACEPHALON, Type.FIRE, Type.GHOST, [
|
||||||
@ -6129,21 +6137,21 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.CURSOLA, Type.GHOST, -1, [
|
[ Species.CURSOLA, Type.GHOST, -1, [
|
||||||
[ Biome.SEABED, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SEABED, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SEABED, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.SIRFETCHD, Type.FIGHTING, -1, [
|
[ Species.SIRFETCHD, Type.FIGHTING, -1, [
|
||||||
[ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.DOJO, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.MR_RIME, Type.ICE, Type.PSYCHIC, [
|
[ Species.MR_RIME, Type.ICE, Type.PSYCHIC, [
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [
|
[ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [
|
||||||
[ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ],
|
[ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ],
|
||||||
[ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ]
|
[ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.MILCERY, Type.FAIRY, -1, [
|
[ Species.MILCERY, Type.FAIRY, -1, [
|
||||||
@ -6305,11 +6313,11 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.SNEASLER, Type.FIGHTING, Type.POISON, [
|
[ Species.SNEASLER, Type.FIGHTING, Type.POISON, [
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.OVERQWIL, Type.DARK, Type.POISON, [
|
[ Species.OVERQWIL, Type.DARK, Type.POISON, [
|
||||||
[ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SEABED, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.ENAMORUS, Type.FAIRY, Type.FLYING, [
|
[ Species.ENAMORUS, Type.FAIRY, Type.FLYING, [
|
||||||
@ -6972,7 +6980,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [
|
[ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [
|
||||||
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
||||||
[ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [
|
[ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [
|
||||||
@ -6980,7 +6988,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_WEEZING, Type.POISON, Type.FAIRY, [
|
[ Species.GALAR_WEEZING, Type.POISON, Type.FAIRY, [
|
||||||
[ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SLUM, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_MR_MIME, Type.ICE, Type.PSYCHIC, [
|
[ Species.GALAR_MR_MIME, Type.ICE, Type.PSYCHIC, [
|
||||||
@ -7003,7 +7011,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [
|
[ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [
|
||||||
[ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_CORSOLA, Type.GHOST, -1, [
|
[ Species.GALAR_CORSOLA, Type.GHOST, -1, [
|
||||||
@ -7024,7 +7032,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.GALAR_DARMANITAN, Type.ICE, -1, [
|
[ Species.GALAR_DARMANITAN, Type.ICE, -1, [
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
[ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [
|
[ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [
|
||||||
@ -7033,7 +7041,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [
|
[ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [
|
||||||
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.SWAMP, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_GROWLITHE, Type.FIRE, Type.ROCK, [
|
[ Species.HISUI_GROWLITHE, Type.FIRE, Type.ROCK, [
|
||||||
@ -7041,7 +7049,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_ARCANINE, Type.FIRE, Type.ROCK, [
|
[ Species.HISUI_ARCANINE, Type.FIRE, Type.ROCK, [
|
||||||
[ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_VOLTORB, Type.ELECTRIC, Type.GRASS, [
|
[ Species.HISUI_VOLTORB, Type.ELECTRIC, Type.GRASS, [
|
||||||
@ -7049,11 +7057,11 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_ELECTRODE, Type.ELECTRIC, Type.GRASS, [
|
[ Species.HISUI_ELECTRODE, Type.ELECTRIC, Type.GRASS, [
|
||||||
[ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_TYPHLOSION, Type.FIRE, Type.GHOST, [
|
[ Species.HISUI_TYPHLOSION, Type.FIRE, Type.GHOST, [
|
||||||
[ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_QWILFISH, Type.DARK, Type.POISON, [
|
[ Species.HISUI_QWILFISH, Type.DARK, Type.POISON, [
|
||||||
@ -7065,11 +7073,11 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [
|
[ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [
|
||||||
[ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.ABYSS, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [
|
[ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [
|
||||||
[ Biome.MEADOW, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [
|
[ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [
|
||||||
@ -7078,7 +7086,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [
|
[ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ],
|
[ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ],
|
||||||
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ]
|
[ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [
|
[ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [
|
||||||
@ -7091,7 +7099,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
],
|
],
|
||||||
[ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [
|
[ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [
|
||||||
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
[ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ],
|
||||||
[ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
[ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [
|
[ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [
|
||||||
@ -7099,7 +7107,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.HISUI_DECIDUEYE, Type.GRASS, Type.FIGHTING, [
|
[ Species.HISUI_DECIDUEYE, Type.GRASS, Type.FIGHTING, [
|
||||||
[ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ]
|
[ Biome.DOJO, BiomePoolTier.BOSS_RARE ]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [
|
[ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [
|
||||||
|
@ -458,9 +458,9 @@ export const speciesEggMoves = {
|
|||||||
[Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.SWORDS_DANCE ],
|
[Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.SWORDS_DANCE ],
|
||||||
[Species.CUFANT]: [ Moves.LIQUIDATION, Moves.HEAVY_SLAM, Moves.CLOSE_COMBAT, Moves.GIGATON_HAMMER ],
|
[Species.CUFANT]: [ Moves.LIQUIDATION, Moves.HEAVY_SLAM, Moves.CLOSE_COMBAT, Moves.GIGATON_HAMMER ],
|
||||||
[Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.FIRE_LASH, Moves.DRAGON_DANCE ],
|
[Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.FIRE_LASH, Moves.DRAGON_DANCE ],
|
||||||
[Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
[Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.LIQUIDATION, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
||||||
[Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ],
|
[Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ],
|
||||||
[Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
[Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
||||||
[Species.DURALUDON]: [ Moves.CALM_MIND, Moves.BODY_PRESS, Moves.EARTH_POWER, Moves.RECOVER ],
|
[Species.DURALUDON]: [ Moves.CALM_MIND, Moves.BODY_PRESS, Moves.EARTH_POWER, Moves.RECOVER ],
|
||||||
[Species.DREEPY]: [ Moves.DRAGON_ENERGY, Moves.SHED_TAIL, Moves.BLAZING_TORQUE, Moves.SPECTRAL_THIEF ],
|
[Species.DREEPY]: [ Moves.DRAGON_ENERGY, Moves.SHED_TAIL, Moves.BLAZING_TORQUE, Moves.SPECTRAL_THIEF ],
|
||||||
[Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.BITTER_BLADE, Moves.LEAF_BLADE, Moves.VICTORY_DANCE ],
|
[Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.BITTER_BLADE, Moves.LEAF_BLADE, Moves.VICTORY_DANCE ],
|
||||||
|
@ -15,5 +15,6 @@ export enum ArenaTagType {
|
|||||||
GRAVITY = "GRAVITY",
|
GRAVITY = "GRAVITY",
|
||||||
REFLECT = "REFLECT",
|
REFLECT = "REFLECT",
|
||||||
LIGHT_SCREEN = "LIGHT_SCREEN",
|
LIGHT_SCREEN = "LIGHT_SCREEN",
|
||||||
AURORA_VEIL = "AURORA_VEIL"
|
AURORA_VEIL = "AURORA_VEIL",
|
||||||
|
TAILWIND = "TAILWIND"
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,13 @@ export enum BattlerTagType {
|
|||||||
NONE = "NONE",
|
NONE = "NONE",
|
||||||
RECHARGING = "RECHARGING",
|
RECHARGING = "RECHARGING",
|
||||||
FLINCHED = "FLINCHED",
|
FLINCHED = "FLINCHED",
|
||||||
|
INTERRUPTED = "INTERRUPTED",
|
||||||
CONFUSED = "CONFUSED",
|
CONFUSED = "CONFUSED",
|
||||||
INFATUATED = "INFATUATED",
|
INFATUATED = "INFATUATED",
|
||||||
SEEDED = "SEEDED",
|
SEEDED = "SEEDED",
|
||||||
NIGHTMARE = "NIGHTMARE",
|
NIGHTMARE = "NIGHTMARE",
|
||||||
FRENZY = "FRENZY",
|
FRENZY = "FRENZY",
|
||||||
|
CHARGING = "CHARGING",
|
||||||
ENCORE = "ENCORE",
|
ENCORE = "ENCORE",
|
||||||
HELPING_HAND = "HELPING_HAND",
|
HELPING_HAND = "HELPING_HAND",
|
||||||
INGRAIN = "INGRAIN",
|
INGRAIN = "INGRAIN",
|
||||||
@ -52,5 +54,6 @@ export enum BattlerTagType {
|
|||||||
SALT_CURED = "SALT_CURED",
|
SALT_CURED = "SALT_CURED",
|
||||||
CURSED = "CURSED",
|
CURSED = "CURSED",
|
||||||
CHARGED = "CHARGED",
|
CHARGED = "CHARGED",
|
||||||
GROUNDED = "GROUNDED"
|
GROUNDED = "GROUNDED",
|
||||||
|
MAGNET_RISEN = "MAGNET_RISEN"
|
||||||
}
|
}
|
||||||
|
141
src/data/move.ts
@ -557,7 +557,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
(args[0] as Utils.IntegerHolder).value = Math.floor(target.hp / 2);
|
(args[0] as Utils.IntegerHolder).value = Math.max(Math.floor(target.hp / 2), 1);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -685,7 +685,7 @@ export class RecoilAttr extends MoveEffectAttr {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio),
|
const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio),
|
||||||
!this.useHp && user.turnData.damageDealt ? 1 : 0);
|
user.turnData.damageDealt ? 1 : 0);
|
||||||
if (!recoilDamage)
|
if (!recoilDamage)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1009,6 +1009,25 @@ export class StatusEffectAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class MultiStatusEffectAttr extends StatusEffectAttr {
|
||||||
|
public effects: StatusEffect[];
|
||||||
|
|
||||||
|
constructor(effects: StatusEffect[], selfTarget?: boolean, cureTurn?: integer, overrideStatus?: boolean) {
|
||||||
|
super(effects[0], selfTarget, cureTurn, overrideStatus);
|
||||||
|
this.effects = effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
this.effect = Utils.randSeedItem(this.effects);
|
||||||
|
const result = super.apply(user, target, move, args);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number {
|
||||||
|
return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true) ? Math.floor(move.chance * -0.1) : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class PsychoShiftEffectAttr extends MoveEffectAttr {
|
export class PsychoShiftEffectAttr extends MoveEffectAttr {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(false, MoveEffectTrigger.HIT);
|
super(false, MoveEffectTrigger.HIT);
|
||||||
@ -1306,10 +1325,13 @@ export class ChargeAttr extends OverrideMoveEffectAttr {
|
|||||||
user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true });
|
user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true });
|
||||||
if (this.sameTurn)
|
if (this.sameTurn)
|
||||||
user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], user.moveset.find(m => m.moveId === move.id), true), this.followUpPriority);
|
user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], user.moveset.find(m => m.moveId === move.id), true), this.followUpPriority);
|
||||||
|
user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id);
|
||||||
resolve(true);
|
resolve(true);
|
||||||
});
|
});
|
||||||
} else
|
} else {
|
||||||
|
user.lapseTag(BattlerTagType.CHARGING);
|
||||||
resolve(false);
|
resolve(false);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1568,6 +1590,8 @@ export class CopyStatsAttr extends MoveEffectAttr {
|
|||||||
user.addTag(BattlerTagType.CRIT_BOOST, 0, move.id);
|
user.addTag(BattlerTagType.CRIT_BOOST, 0, move.id);
|
||||||
else
|
else
|
||||||
user.removeTag(BattlerTagType.CRIT_BOOST);
|
user.removeTag(BattlerTagType.CRIT_BOOST);
|
||||||
|
target.updateInfo();
|
||||||
|
user.updateInfo();
|
||||||
|
|
||||||
target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`));
|
target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`));
|
||||||
|
|
||||||
@ -1582,6 +1606,8 @@ export class InvertStatsAttr extends MoveEffectAttr {
|
|||||||
|
|
||||||
for (let s = 0; s < target.summonData.battleStats.length; s++)
|
for (let s = 0; s < target.summonData.battleStats.length; s++)
|
||||||
target.summonData.battleStats[s] *= -1;
|
target.summonData.battleStats[s] *= -1;
|
||||||
|
target.updateInfo();
|
||||||
|
user.updateInfo();
|
||||||
|
|
||||||
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`));
|
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`));
|
||||||
|
|
||||||
@ -1596,6 +1622,8 @@ export class ResetStatsAttr extends MoveEffectAttr {
|
|||||||
|
|
||||||
for (let s = 0; s < target.summonData.battleStats.length; s++)
|
for (let s = 0; s < target.summonData.battleStats.length; s++)
|
||||||
target.summonData.battleStats[s] = 0;
|
target.summonData.battleStats[s] = 0;
|
||||||
|
target.updateInfo();
|
||||||
|
user.updateInfo();
|
||||||
|
|
||||||
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`));
|
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`));
|
||||||
|
|
||||||
@ -1762,13 +1790,13 @@ export class BattleStatRatioPowerAttr extends VariablePowerAttr {
|
|||||||
|
|
||||||
if (this.invert) {
|
if (this.invert) {
|
||||||
// Gyro ball uses a specific formula
|
// Gyro ball uses a specific formula
|
||||||
let userSpeed = user.getStat(this.stat);
|
let userSpeed = user.getBattleStat(this.stat);
|
||||||
if (userSpeed < 1) {
|
if (userSpeed < 1) {
|
||||||
// Gen 6+ always have 1 base power
|
// Gen 6+ always have 1 base power
|
||||||
power.value = 1;
|
power.value = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
let bp = Math.floor(Math.min(150, 25 * target.getStat(this.stat) / userSpeed + 1));
|
let bp = Math.floor(Math.min(150, 25 * target.getBattleStat(this.stat) / userSpeed + 1));
|
||||||
power.value = bp;
|
power.value = bp;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2010,6 +2038,17 @@ export class PresentPowerAttr extends VariablePowerAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class KnockOffPowerAttr extends VariablePowerAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
if(target.getHeldItems().length > 0){
|
||||||
|
(args[0] as Utils.NumberHolder).value *= 1.5;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class VariableAtkAttr extends MoveAttr {
|
export class VariableAtkAttr extends MoveAttr {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@ -2607,7 +2646,7 @@ export class CurseAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
let curseRecoilDamage = Math.floor(user.getMaxHp() / 2);
|
let curseRecoilDamage = Math.floor(user.getMaxHp() / 2);
|
||||||
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
||||||
user.scene.queueMessage(getPokemonMessage(user, ' cut its own HP!'));
|
user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`));
|
||||||
target.addTag(BattlerTagType.CURSED, 0, move.id, user.id);
|
target.addTag(BattlerTagType.CURSED, 0, move.id, user.id);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -3586,6 +3625,23 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SuppressAbilitiesAttr extends MoveEffectAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
if (!super.apply(user, target, move, args))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
target.summonData.abilitySuppressed = true;
|
||||||
|
|
||||||
|
target.scene.queueMessage(getPokemonMessage(target, ` ability\nwas suppressed!`));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCondition(): MoveConditionFunc {
|
||||||
|
return (user, target, move) => !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TransformAttr extends MoveEffectAttr {
|
export class TransformAttr extends MoveEffectAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
@ -3637,6 +3693,20 @@ export class MoneyAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class LastResortAttr extends MoveAttr {
|
||||||
|
getCondition(): MoveConditionFunc {
|
||||||
|
return (user: Pokemon, target: Pokemon, move: Move) => {
|
||||||
|
const uniqueUsedMoveIds = new Set<Moves>();
|
||||||
|
const movesetMoveIds = user.getMoveset().map(m => m.moveId);
|
||||||
|
user.getMoveHistory().map(m => {
|
||||||
|
if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move))
|
||||||
|
uniqueUsedMoveIds.add(m.move);
|
||||||
|
});
|
||||||
|
return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
|
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
|
||||||
|
|
||||||
const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune();
|
const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune();
|
||||||
@ -3698,6 +3768,19 @@ export class FirstMoveCondition extends MoveCondition {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
const multiplier = args[0] as Utils.NumberHolder;
|
||||||
|
if (!user.getTypes().some(type => target.getTypes().includes(type))){
|
||||||
|
multiplier.value = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.getTypes().includes(Type.UNKNOWN);
|
||||||
|
|
||||||
export type MoveTargetSet = {
|
export type MoveTargetSet = {
|
||||||
targets: BattlerIndex[];
|
targets: BattlerIndex[];
|
||||||
multiple: boolean;
|
multiple: boolean;
|
||||||
@ -4181,9 +4264,7 @@ export function initMoves() {
|
|||||||
new SelfStatusMove(Moves.CONVERSION, Type.NORMAL, -1, 30, -1, 0, 1)
|
new SelfStatusMove(Moves.CONVERSION, Type.NORMAL, -1, 30, -1, 0, 1)
|
||||||
.attr(FirstMoveTypeAttr),
|
.attr(FirstMoveTypeAttr),
|
||||||
new AttackMove(Moves.TRI_ATTACK, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1)
|
new AttackMove(Moves.TRI_ATTACK, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1)
|
||||||
.attr(StatusEffectAttr, StatusEffect.PARALYSIS)
|
.attr(MultiStatusEffectAttr, [StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS]),
|
||||||
.attr(StatusEffectAttr, StatusEffect.BURN)
|
|
||||||
.attr(StatusEffectAttr, StatusEffect.FREEZE),
|
|
||||||
new AttackMove(Moves.SUPER_FANG, Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1)
|
new AttackMove(Moves.SUPER_FANG, Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1)
|
||||||
.attr(TargetHalfHpDamageAttr),
|
.attr(TargetHalfHpDamageAttr),
|
||||||
new AttackMove(Moves.SLASH, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1)
|
new AttackMove(Moves.SLASH, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1)
|
||||||
@ -4530,6 +4611,7 @@ export function initMoves() {
|
|||||||
.attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true)
|
.attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true)
|
||||||
.condition((user, target, move) => !target.status),
|
.condition((user, target, move) => !target.status),
|
||||||
new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3)
|
new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3)
|
||||||
|
.attr(KnockOffPowerAttr)
|
||||||
.partial(),
|
.partial(),
|
||||||
new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3)
|
new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3)
|
||||||
.attr(MatchHpAttr)
|
.attr(MatchHpAttr)
|
||||||
@ -4755,8 +4837,8 @@ export function initMoves() {
|
|||||||
.partial(),
|
.partial(),
|
||||||
new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4)
|
new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4)
|
||||||
.windMove()
|
.windMove()
|
||||||
.target(MoveTarget.USER_SIDE)
|
.attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true)
|
||||||
.unimplemented(),
|
.target(MoveTarget.USER_SIDE),
|
||||||
new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4)
|
new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4)
|
||||||
.attr(AcupressureStatChangeAttr)
|
.attr(AcupressureStatChangeAttr)
|
||||||
.target(MoveTarget.USER_OR_NEAR_ALLY),
|
.target(MoveTarget.USER_OR_NEAR_ALLY),
|
||||||
@ -4798,7 +4880,7 @@ export function initMoves() {
|
|||||||
new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4)
|
new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4)
|
new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4)
|
||||||
.unimplemented(),
|
.attr(SuppressAbilitiesAttr),
|
||||||
new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4)
|
new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4)
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5)
|
.attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5)
|
||||||
.target(MoveTarget.USER_SIDE)
|
.target(MoveTarget.USER_SIDE)
|
||||||
@ -4817,15 +4899,7 @@ export function initMoves() {
|
|||||||
new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4)
|
new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4)
|
new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4)
|
||||||
.condition((user, target, move) => {
|
.attr(LastResortAttr),
|
||||||
const uniqueUsedMoveIds = new Set<Moves>();
|
|
||||||
const movesetMoveIds = user.getMoveset().map(m => m.moveId);
|
|
||||||
user.getMoveHistory().map(m => {
|
|
||||||
if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move))
|
|
||||||
uniqueUsedMoveIds.add(m.move);
|
|
||||||
});
|
|
||||||
return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1;
|
|
||||||
}),
|
|
||||||
new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4)
|
new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4)
|
||||||
.attr(AbilityChangeAttr, Abilities.INSOMNIA),
|
.attr(AbilityChangeAttr, Abilities.INSOMNIA),
|
||||||
new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4)
|
new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4)
|
||||||
@ -4838,6 +4912,10 @@ export function initMoves() {
|
|||||||
new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4)
|
new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4)
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true),
|
.attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true),
|
||||||
new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4)
|
new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4)
|
||||||
|
.attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true)
|
||||||
|
.condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) &&
|
||||||
|
!user.getTag(BattlerTagType.IGNORE_FLYING) && !user.getTag(BattlerTagType.INGRAIN) &&
|
||||||
|
!user.getTag(BattlerTagType.MAGNET_RISEN))
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4)
|
new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4)
|
||||||
.attr(RecoilAttr, false, 0.33)
|
.attr(RecoilAttr, false, 0.33)
|
||||||
@ -5064,6 +5142,8 @@ export function initMoves() {
|
|||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5)
|
new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5)
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 5)
|
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 5)
|
||||||
|
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
|
||||||
|
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING])
|
||||||
.attr(HitsTagAttr, BattlerTagType.FLYING, false)
|
.attr(HitsTagAttr, BattlerTagType.FLYING, false)
|
||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5)
|
||||||
@ -5081,7 +5161,8 @@ export function initMoves() {
|
|||||||
.condition(failOnMaxCondition),
|
.condition(failOnMaxCondition),
|
||||||
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS)
|
.target(MoveTarget.ALL_NEAR_OTHERS)
|
||||||
.partial(),
|
.condition(unknownTypeCondition)
|
||||||
|
.attr(hitsSameTypeAttr),
|
||||||
new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5)
|
||||||
.attr(BattleStatRatioPowerAttr, Stat.SPD)
|
.attr(BattleStatRatioPowerAttr, Stat.SPD)
|
||||||
.ballBombMove(),
|
.ballBombMove(),
|
||||||
@ -5151,7 +5232,7 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5)
|
new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5)
|
new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5)
|
||||||
.partial(),
|
.attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().reduce((v, m) => v + m.stackCount, 0))),
|
||||||
new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5)
|
new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5)
|
||||||
.attr(CopyTypeAttr),
|
.attr(CopyTypeAttr),
|
||||||
new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5)
|
new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5)
|
||||||
@ -5281,7 +5362,7 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
|
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6)
|
new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6)
|
||||||
.partial(),
|
.condition((user, target, move) => user.battleData.berriesEaten.length > 0),
|
||||||
new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6)
|
new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6)
|
||||||
.target(MoveTarget.ALL)
|
.target(MoveTarget.ALL)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
@ -5384,7 +5465,7 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6)
|
new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6)
|
||||||
.attr(StatChangeAttr, BattleStat.SPATK, -2),
|
.attr(StatChangeAttr, BattleStat.SPATK, -2),
|
||||||
new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, 100, 0, 6)
|
new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, 100, 0, 6)
|
||||||
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON)
|
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC)
|
||||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||||
new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6)
|
new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6)
|
||||||
.powderMove()
|
.powderMove()
|
||||||
@ -5426,6 +5507,8 @@ export function initMoves() {
|
|||||||
new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 6)
|
new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 6)
|
||||||
.attr(NeutralDamageAgainstFlyingTypeMultiplierAttr)
|
.attr(NeutralDamageAgainstFlyingTypeMultiplierAttr)
|
||||||
.attr(HitsTagAttr, BattlerTagType.FLYING, false)
|
.attr(HitsTagAttr, BattlerTagType.FLYING, false)
|
||||||
|
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
|
||||||
|
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING])
|
||||||
.makesContact(false)
|
.makesContact(false)
|
||||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||||
new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6)
|
new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6)
|
||||||
@ -5997,9 +6080,7 @@ export function initMoves() {
|
|||||||
.soundBased()
|
.soundBased()
|
||||||
.partial(),
|
.partial(),
|
||||||
new AttackMove(Moves.DIRE_CLAW, Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8)
|
new AttackMove(Moves.DIRE_CLAW, Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8)
|
||||||
.attr(StatusEffectAttr, StatusEffect.POISON)
|
.attr(MultiStatusEffectAttr, [StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP]),
|
||||||
.attr(StatusEffectAttr, StatusEffect.PARALYSIS)
|
|
||||||
.attr(StatusEffectAttr, StatusEffect.SLEEP),
|
|
||||||
new AttackMove(Moves.PSYSHIELD_BASH, Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8)
|
new AttackMove(Moves.PSYSHIELD_BASH, Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8)
|
||||||
.attr(StatChangeAttr, BattleStat.DEF, 1, true),
|
.attr(StatChangeAttr, BattleStat.DEF, 1, true),
|
||||||
new SelfStatusMove(Moves.POWER_SHIFT, Type.NORMAL, -1, 10, 100, 0, 8)
|
new SelfStatusMove(Moves.POWER_SHIFT, Type.NORMAL, -1, 10, 100, 0, 8)
|
||||||
@ -6314,8 +6395,7 @@ export function initMoves() {
|
|||||||
}), // TODO Add Instruct/Encore interaction
|
}), // TODO Add Instruct/Encore interaction
|
||||||
new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9)
|
new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9)
|
||||||
.attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5)
|
.attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5)
|
||||||
.target(MoveTarget.ATTACKER)
|
.target(MoveTarget.ATTACKER),
|
||||||
.partial(),
|
|
||||||
new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9)
|
new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9)
|
||||||
.attr(HighCritAttr)
|
.attr(HighCritAttr)
|
||||||
.slicingMove()
|
.slicingMove()
|
||||||
@ -6369,6 +6449,7 @@ export function initMoves() {
|
|||||||
new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9)
|
new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9)
|
||||||
.condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()].command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()].move.move].category !== MoveCategory.STATUS),
|
.condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()].command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()].move.move].category !== MoveCategory.STATUS),
|
||||||
new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9)
|
new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9)
|
||||||
|
.slicingMove()
|
||||||
.ignoresProtect(),
|
.ignoresProtect(),
|
||||||
new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9)
|
new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9)
|
||||||
.attr(MultiHitAttr, MultiHitType._2)
|
.attr(MultiHitAttr, MultiHitType._2)
|
||||||
|
@ -4278,6 +4278,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 30, Moves.ANCIENT_POWER ],
|
[ 30, Moves.ANCIENT_POWER ],
|
||||||
[ 40, Moves.LIFE_DEW ],
|
[ 40, Moves.LIFE_DEW ],
|
||||||
[ 50, Moves.LEECH_SEED ],
|
[ 50, Moves.LEECH_SEED ],
|
||||||
|
[ 55, Moves.HEAL_BLOCK ],
|
||||||
[ 60, Moves.RECOVER ],
|
[ 60, Moves.RECOVER ],
|
||||||
[ 70, Moves.FUTURE_SIGHT ],
|
[ 70, Moves.FUTURE_SIGHT ],
|
||||||
[ 80, Moves.HEALING_WISH ],
|
[ 80, Moves.HEALING_WISH ],
|
||||||
@ -4976,6 +4977,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 23, Moves.ABSORB ],
|
[ 23, Moves.ABSORB ],
|
||||||
[ 29, Moves.SHADOW_SNEAK ],
|
[ 29, Moves.SHADOW_SNEAK ],
|
||||||
[ 36, Moves.FURY_SWIPES ],
|
[ 36, Moves.FURY_SWIPES ],
|
||||||
|
[ 41, Moves.HEAL_BLOCK ],
|
||||||
[ 43, Moves.MIND_READER ],
|
[ 43, Moves.MIND_READER ],
|
||||||
[ 50, Moves.SHADOW_BALL ],
|
[ 50, Moves.SHADOW_BALL ],
|
||||||
[ 57, Moves.SPITE ],
|
[ 57, Moves.SPITE ],
|
||||||
@ -5796,6 +5798,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 25, Moves.COSMIC_POWER ],
|
[ 25, Moves.COSMIC_POWER ],
|
||||||
[ 30, Moves.PSYCHIC ],
|
[ 30, Moves.PSYCHIC ],
|
||||||
|
[ 33, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.STONE_EDGE ],
|
[ 35, Moves.STONE_EDGE ],
|
||||||
[ 40, Moves.FUTURE_SIGHT ],
|
[ 40, Moves.FUTURE_SIGHT ],
|
||||||
[ 45, Moves.MAGIC_ROOM ],
|
[ 45, Moves.MAGIC_ROOM ],
|
||||||
@ -5814,6 +5817,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.ZEN_HEADBUTT ],
|
[ 20, Moves.ZEN_HEADBUTT ],
|
||||||
[ 25, Moves.COSMIC_POWER ],
|
[ 25, Moves.COSMIC_POWER ],
|
||||||
[ 30, Moves.PSYCHIC ],
|
[ 30, Moves.PSYCHIC ],
|
||||||
|
[ 33, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.STONE_EDGE ],
|
[ 35, Moves.STONE_EDGE ],
|
||||||
[ 40, Moves.SOLAR_BEAM ],
|
[ 40, Moves.SOLAR_BEAM ],
|
||||||
[ 45, Moves.WONDER_ROOM ],
|
[ 45, Moves.WONDER_ROOM ],
|
||||||
@ -5890,6 +5894,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 3, Moves.RAPID_SPIN ],
|
[ 3, Moves.RAPID_SPIN ],
|
||||||
[ 6, Moves.CONFUSION ],
|
[ 6, Moves.CONFUSION ],
|
||||||
[ 9, Moves.ROCK_TOMB ],
|
[ 9, Moves.ROCK_TOMB ],
|
||||||
|
[ 10, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.POWER_TRICK ],
|
[ 12, Moves.POWER_TRICK ],
|
||||||
[ 15, Moves.PSYBEAM ],
|
[ 15, Moves.PSYBEAM ],
|
||||||
[ 18, Moves.ANCIENT_POWER ],
|
[ 18, Moves.ANCIENT_POWER ],
|
||||||
@ -5911,6 +5916,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.MUD_SLAP ],
|
[ 1, Moves.MUD_SLAP ],
|
||||||
[ 1, Moves.RAPID_SPIN ],
|
[ 1, Moves.RAPID_SPIN ],
|
||||||
[ 9, Moves.ROCK_TOMB ],
|
[ 9, Moves.ROCK_TOMB ],
|
||||||
|
[ 10, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.POWER_TRICK ],
|
[ 12, Moves.POWER_TRICK ],
|
||||||
[ 15, Moves.PSYBEAM ],
|
[ 15, Moves.PSYBEAM ],
|
||||||
[ 18, Moves.ANCIENT_POWER ],
|
[ 18, Moves.ANCIENT_POWER ],
|
||||||
@ -6506,6 +6512,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[Species.LATIOS]: [
|
[Species.LATIOS]: [
|
||||||
[ 1, Moves.DRAGON_DANCE ],
|
[ 1, Moves.DRAGON_DANCE ],
|
||||||
[ 1, Moves.STORED_POWER ],
|
[ 1, Moves.STORED_POWER ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 5, Moves.HELPING_HAND ],
|
[ 5, Moves.HELPING_HAND ],
|
||||||
[ 10, Moves.RECOVER ],
|
[ 10, Moves.RECOVER ],
|
||||||
[ 15, Moves.CONFUSION ],
|
[ 15, Moves.CONFUSION ],
|
||||||
@ -7364,6 +7371,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 36, Moves.IRON_DEFENSE ],
|
[ 36, Moves.IRON_DEFENSE ],
|
||||||
[ 40, Moves.METAL_SOUND ],
|
[ 40, Moves.METAL_SOUND ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 45, Moves.HEAL_BLOCK ],
|
||||||
],
|
],
|
||||||
[Species.BRONZONG]: [
|
[Species.BRONZONG]: [
|
||||||
[ 0, Moves.BLOCK ],
|
[ 0, Moves.BLOCK ],
|
||||||
@ -7382,6 +7390,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 38, Moves.IRON_DEFENSE ],
|
[ 38, Moves.IRON_DEFENSE ],
|
||||||
[ 44, Moves.METAL_SOUND ],
|
[ 44, Moves.METAL_SOUND ],
|
||||||
[ 50, Moves.FUTURE_SIGHT ],
|
[ 50, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 52, Moves.HEAL_BLOCK ],
|
||||||
[ 56, Moves.RAIN_DANCE ],
|
[ 56, Moves.RAIN_DANCE ],
|
||||||
],
|
],
|
||||||
[Species.BONSLY]: [
|
[Species.BONSLY]: [
|
||||||
@ -9491,6 +9500,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[Species.YAMASK]: [
|
[Species.YAMASK]: [
|
||||||
[ 1, Moves.PROTECT ],
|
[ 1, Moves.PROTECT ],
|
||||||
[ 1, Moves.ASTONISH ],
|
[ 1, Moves.ASTONISH ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 4, Moves.HAZE ],
|
[ 4, Moves.HAZE ],
|
||||||
[ 8, Moves.NIGHT_SHADE ],
|
[ 8, Moves.NIGHT_SHADE ],
|
||||||
[ 12, Moves.DISABLE ],
|
[ 12, Moves.DISABLE ],
|
||||||
@ -9513,6 +9523,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.PROTECT ],
|
[ 1, Moves.PROTECT ],
|
||||||
[ 1, Moves.SCARY_FACE ],
|
[ 1, Moves.SCARY_FACE ],
|
||||||
[ 1, Moves.ASTONISH ],
|
[ 1, Moves.ASTONISH ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.DISABLE ],
|
[ 12, Moves.DISABLE ],
|
||||||
[ 16, Moves.WILL_O_WISP ],
|
[ 16, Moves.WILL_O_WISP ],
|
||||||
[ 20, Moves.CRAFTY_SHIELD ],
|
[ 20, Moves.CRAFTY_SHIELD ],
|
||||||
@ -9720,6 +9731,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
[ 33, Moves.PSYCH_UP ],
|
[ 33, Moves.PSYCH_UP ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 36, Moves.PSYCHIC ],
|
[ 36, Moves.PSYCHIC ],
|
||||||
[ 40, Moves.FLATTER ],
|
[ 40, Moves.FLATTER ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
@ -9735,6 +9747,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.PSYCH_UP ],
|
[ 35, Moves.PSYCH_UP ],
|
||||||
[ 46, Moves.FLATTER ],
|
[ 46, Moves.FLATTER ],
|
||||||
[ 52, Moves.FUTURE_SIGHT ],
|
[ 52, Moves.FUTURE_SIGHT ],
|
||||||
@ -9750,6 +9763,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.PSYCH_UP ],
|
[ 35, Moves.PSYCH_UP ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 48, Moves.FLATTER ],
|
[ 48, Moves.FLATTER ],
|
||||||
@ -9771,6 +9785,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 36, Moves.PSYCHIC ],
|
[ 36, Moves.PSYCHIC ],
|
||||||
[ 40, Moves.SKILL_SWAP ],
|
[ 40, Moves.SKILL_SWAP ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 46, Moves.HEAL_BLOCK ],
|
||||||
[ 48, Moves.WONDER_ROOM ],
|
[ 48, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
[Species.DUOSION]: [
|
[Species.DUOSION]: [
|
||||||
@ -9787,6 +9802,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 35, Moves.PAIN_SPLIT ],
|
[ 35, Moves.PAIN_SPLIT ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 46, Moves.SKILL_SWAP ],
|
[ 46, Moves.SKILL_SWAP ],
|
||||||
|
[ 50, Moves.HEAL_BLOCK ],
|
||||||
[ 52, Moves.FUTURE_SIGHT ],
|
[ 52, Moves.FUTURE_SIGHT ],
|
||||||
[ 58, Moves.WONDER_ROOM ],
|
[ 58, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
@ -9805,6 +9821,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 35, Moves.PAIN_SPLIT ],
|
[ 35, Moves.PAIN_SPLIT ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 48, Moves.SKILL_SWAP ],
|
[ 48, Moves.SKILL_SWAP ],
|
||||||
|
[ 54, Moves.HEAL_BLOCK ],
|
||||||
[ 56, Moves.FUTURE_SIGHT ],
|
[ 56, Moves.FUTURE_SIGHT ],
|
||||||
[ 64, Moves.WONDER_ROOM ],
|
[ 64, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
@ -10209,6 +10226,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.GROWL ],
|
[ 1, Moves.GROWL ],
|
||||||
[ 1, Moves.CONFUSION ],
|
[ 1, Moves.CONFUSION ],
|
||||||
[ 6, Moves.IMPRISON ],
|
[ 6, Moves.IMPRISON ],
|
||||||
|
[ 8, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.TELEPORT ],
|
[ 12, Moves.TELEPORT ],
|
||||||
[ 18, Moves.PSYBEAM ],
|
[ 18, Moves.PSYBEAM ],
|
||||||
[ 24, Moves.GUARD_SPLIT ],
|
[ 24, Moves.GUARD_SPLIT ],
|
||||||
@ -10226,6 +10244,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.TELEPORT ],
|
[ 1, Moves.TELEPORT ],
|
||||||
[ 1, Moves.IMPRISON ],
|
[ 1, Moves.IMPRISON ],
|
||||||
[ 1, Moves.PSYCHIC_TERRAIN ],
|
[ 1, Moves.PSYCHIC_TERRAIN ],
|
||||||
|
[ 8, Moves.HEAL_BLOCK ],
|
||||||
[ 18, Moves.PSYBEAM ],
|
[ 18, Moves.PSYBEAM ],
|
||||||
[ 24, Moves.GUARD_SPLIT ],
|
[ 24, Moves.GUARD_SPLIT ],
|
||||||
[ 24, Moves.POWER_SPLIT ],
|
[ 24, Moves.POWER_SPLIT ],
|
||||||
@ -10884,6 +10903,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.SHOCK_WAVE ],
|
[ 20, Moves.SHOCK_WAVE ],
|
||||||
[ 25, Moves.AGILITY ],
|
[ 25, Moves.AGILITY ],
|
||||||
[ 30, Moves.CHARGE ],
|
[ 30, Moves.CHARGE ],
|
||||||
|
[ 31, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.VOLT_SWITCH ],
|
[ 35, Moves.VOLT_SWITCH ],
|
||||||
[ 40, Moves.CRUNCH ],
|
[ 40, Moves.CRUNCH ],
|
||||||
[ 45, Moves.DISCHARGE ],
|
[ 45, Moves.DISCHARGE ],
|
||||||
@ -11972,6 +11992,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 40, Moves.PLAY_ROUGH ],
|
[ 40, Moves.PLAY_ROUGH ],
|
||||||
[ 44, Moves.MAGIC_ROOM ],
|
[ 44, Moves.MAGIC_ROOM ],
|
||||||
[ 48, Moves.FOUL_PLAY ],
|
[ 48, Moves.FOUL_PLAY ],
|
||||||
|
[ 50, Moves.HEAL_BLOCK ],
|
||||||
[ 52, Moves.LAST_RESORT ],
|
[ 52, Moves.LAST_RESORT ],
|
||||||
],
|
],
|
||||||
[Species.PHANTUMP]: [
|
[Species.PHANTUMP]: [
|
||||||
@ -13045,6 +13066,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 45, Moves.IRON_HEAD ],
|
[ 45, Moves.IRON_HEAD ],
|
||||||
[ 50, Moves.TAKE_DOWN ],
|
[ 50, Moves.TAKE_DOWN ],
|
||||||
[ 55, Moves.DOUBLE_EDGE ],
|
[ 55, Moves.DOUBLE_EDGE ],
|
||||||
|
[ 60, Moves.HEAL_BLOCK ],
|
||||||
],
|
],
|
||||||
[Species.SILVALLY]: [
|
[Species.SILVALLY]: [
|
||||||
[ 0, Moves.MULTI_ATTACK ],
|
[ 0, Moves.MULTI_ATTACK ],
|
||||||
@ -13059,6 +13081,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.ICE_FANG ],
|
[ 1, Moves.ICE_FANG ],
|
||||||
[ 1, Moves.FIRE_FANG ],
|
[ 1, Moves.FIRE_FANG ],
|
||||||
[ 1, Moves.IRON_HEAD ],
|
[ 1, Moves.IRON_HEAD ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 15, Moves.DOUBLE_HIT ],
|
[ 15, Moves.DOUBLE_HIT ],
|
||||||
[ 20, Moves.METAL_SOUND ],
|
[ 20, Moves.METAL_SOUND ],
|
||||||
[ 25, Moves.CRUSH_CLAW ],
|
[ 25, Moves.CRUSH_CLAW ],
|
||||||
|
@ -138,9 +138,9 @@ export abstract class PokemonSpeciesForm {
|
|||||||
this.genderDiffs = genderDiffs;
|
this.genderDiffs = genderDiffs;
|
||||||
}
|
}
|
||||||
|
|
||||||
getRootSpeciesId(): Species {
|
getRootSpeciesId(forStarter: boolean = false): Species {
|
||||||
let ret = this.speciesId;
|
let ret = this.speciesId;
|
||||||
while (pokemonPrevolutions.hasOwnProperty(ret))
|
while (pokemonPrevolutions.hasOwnProperty(ret) && (!forStarter || !speciesStarters.hasOwnProperty(ret)))
|
||||||
ret = pokemonPrevolutions[ret];
|
ret = pokemonPrevolutions[ret];
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -367,8 +367,8 @@ export abstract class PokemonSpeciesForm {
|
|||||||
loadAssets(scene: BattleScene, female: boolean, formIndex?: integer, shiny?: boolean, variant?: Variant, startLoad?: boolean): Promise<void> {
|
loadAssets(scene: BattleScene, female: boolean, formIndex?: integer, shiny?: boolean, variant?: Variant, startLoad?: boolean): Promise<void> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant);
|
const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant);
|
||||||
scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`);
|
|
||||||
scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant));
|
scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant));
|
||||||
|
scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`);
|
||||||
scene.load.once(Phaser.Loader.Events.COMPLETE, () => {
|
scene.load.once(Phaser.Loader.Events.COMPLETE, () => {
|
||||||
const originalWarn = console.warn;
|
const originalWarn = console.warn;
|
||||||
// Ignore warnings for missing frames, because there will be a lot
|
// Ignore warnings for missing frames, because there will be a lot
|
||||||
@ -3156,6 +3156,30 @@ export const noStarterFormKeys: string[] = [
|
|||||||
SpeciesFormKey.ETERNAMAX
|
SpeciesFormKey.ETERNAMAX
|
||||||
].map(k => k.toString());
|
].map(k => k.toString());
|
||||||
|
|
||||||
|
export function getStarterValueFriendshipCap(value: integer): integer {
|
||||||
|
switch (value) {
|
||||||
|
case 1:
|
||||||
|
return 20;
|
||||||
|
case 2:
|
||||||
|
return 40;
|
||||||
|
case 3:
|
||||||
|
return 60;
|
||||||
|
case 4:
|
||||||
|
return 100;
|
||||||
|
case 5:
|
||||||
|
return 140;
|
||||||
|
case 6:
|
||||||
|
return 200;
|
||||||
|
case 7:
|
||||||
|
return 280;
|
||||||
|
case 8:
|
||||||
|
case 9:
|
||||||
|
return 450;
|
||||||
|
default:
|
||||||
|
return 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const starterPassiveAbilities = {
|
export const starterPassiveAbilities = {
|
||||||
[Species.BULBASAUR]: Abilities.SOLAR_POWER,
|
[Species.BULBASAUR]: Abilities.SOLAR_POWER,
|
||||||
[Species.CHARMANDER]: Abilities.INTIMIDATE,
|
[Species.CHARMANDER]: Abilities.INTIMIDATE,
|
||||||
@ -3185,7 +3209,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.BELLSPROUT]: Abilities.CORROSION,
|
[Species.BELLSPROUT]: Abilities.CORROSION,
|
||||||
[Species.TENTACOOL]: Abilities.INNARDS_OUT,
|
[Species.TENTACOOL]: Abilities.INNARDS_OUT,
|
||||||
[Species.GEODUDE]: Abilities.ROCKY_PAYLOAD,
|
[Species.GEODUDE]: Abilities.ROCKY_PAYLOAD,
|
||||||
[Species.PONYTA]: Abilities.PIXILATE,
|
[Species.PONYTA]: Abilities.MAGIC_GUARD,
|
||||||
[Species.SLOWPOKE]: Abilities.UNAWARE,
|
[Species.SLOWPOKE]: Abilities.UNAWARE,
|
||||||
[Species.MAGNEMITE]: Abilities.MOTOR_DRIVE,
|
[Species.MAGNEMITE]: Abilities.MOTOR_DRIVE,
|
||||||
[Species.FARFETCHD]: Abilities.PURE_POWER,
|
[Species.FARFETCHD]: Abilities.PURE_POWER,
|
||||||
@ -3211,7 +3235,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.SCYTHER]: Abilities.SPEED_BOOST,
|
[Species.SCYTHER]: Abilities.SPEED_BOOST,
|
||||||
[Species.PINSIR]: Abilities.SAP_SIPPER,
|
[Species.PINSIR]: Abilities.SAP_SIPPER,
|
||||||
[Species.TAUROS]: Abilities.ROCK_HEAD,
|
[Species.TAUROS]: Abilities.ROCK_HEAD,
|
||||||
[Species.MAGIKARP]: Abilities.BERSERK,
|
[Species.MAGIKARP]: Abilities.MULTISCALE,
|
||||||
[Species.LAPRAS]: Abilities.LIQUID_VOICE,
|
[Species.LAPRAS]: Abilities.LIQUID_VOICE,
|
||||||
[Species.DITTO]: Abilities.GOOEY,
|
[Species.DITTO]: Abilities.GOOEY,
|
||||||
[Species.EEVEE]: Abilities.PROTEAN,
|
[Species.EEVEE]: Abilities.PROTEAN,
|
||||||
@ -3225,16 +3249,16 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.DRATINI]: Abilities.DELTA_STREAM,
|
[Species.DRATINI]: Abilities.DELTA_STREAM,
|
||||||
[Species.MEWTWO]: Abilities.NEUROFORCE,
|
[Species.MEWTWO]: Abilities.NEUROFORCE,
|
||||||
[Species.MEW]: Abilities.PROTEAN,
|
[Species.MEW]: Abilities.PROTEAN,
|
||||||
[Species.CHIKORITA]: Abilities.RIPEN,
|
[Species.CHIKORITA]: Abilities.THICK_FAT,
|
||||||
[Species.CYNDAQUIL]: Abilities.TURBOBLAZE,
|
[Species.CYNDAQUIL]: Abilities.TURBOBLAZE,
|
||||||
[Species.TOTODILE]: Abilities.TOUGH_CLAWS,
|
[Species.TOTODILE]: Abilities.TOUGH_CLAWS,
|
||||||
[Species.SENTRET]: Abilities.FLUFFY,
|
[Species.SENTRET]: Abilities.FLUFFY,
|
||||||
[Species.HOOTHOOT]: Abilities.CURSED_BODY,
|
[Species.HOOTHOOT]: Abilities.CURSED_BODY,
|
||||||
[Species.LEDYBA]: Abilities.SCREEN_CLEANER,
|
[Species.LEDYBA]: Abilities.PRANKSTER,
|
||||||
[Species.SPINARAK]: Abilities.PRANKSTER,
|
[Species.SPINARAK]: Abilities.PRANKSTER,
|
||||||
[Species.CHINCHOU]: Abilities.REGENERATOR,
|
[Species.CHINCHOU]: Abilities.REGENERATOR,
|
||||||
[Species.PICHU]: Abilities.TRANSISTOR,
|
[Species.PICHU]: Abilities.TRANSISTOR,
|
||||||
[Species.CLEFFA]: Abilities.MISTY_SURGE,
|
[Species.CLEFFA]: Abilities.MAGIC_BOUNCE,
|
||||||
[Species.IGGLYBUFF]: Abilities.SERENE_GRACE,
|
[Species.IGGLYBUFF]: Abilities.SERENE_GRACE,
|
||||||
[Species.TOGEPI]: Abilities.OPPORTUNIST,
|
[Species.TOGEPI]: Abilities.OPPORTUNIST,
|
||||||
[Species.NATU]: Abilities.TINTED_LENS,
|
[Species.NATU]: Abilities.TINTED_LENS,
|
||||||
@ -3252,7 +3276,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.DUNSPARCE]: Abilities.MARVEL_SCALE,
|
[Species.DUNSPARCE]: Abilities.MARVEL_SCALE,
|
||||||
[Species.GLIGAR]: Abilities.MERCILESS,
|
[Species.GLIGAR]: Abilities.MERCILESS,
|
||||||
[Species.SNUBBULL]: Abilities.BALL_FETCH,
|
[Species.SNUBBULL]: Abilities.BALL_FETCH,
|
||||||
[Species.QWILFISH]: Abilities.LIQUID_OOZE,
|
[Species.QWILFISH]: Abilities.TOXIC_DEBRIS,
|
||||||
[Species.SHUCKLE]: Abilities.WELL_BAKED_BODY,
|
[Species.SHUCKLE]: Abilities.WELL_BAKED_BODY,
|
||||||
[Species.HERACROSS]: Abilities.QUICK_FEET,
|
[Species.HERACROSS]: Abilities.QUICK_FEET,
|
||||||
[Species.SNEASEL]: Abilities.MOXIE,
|
[Species.SNEASEL]: Abilities.MOXIE,
|
||||||
@ -3268,7 +3292,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.STANTLER]: Abilities.MAGIC_GUARD,
|
[Species.STANTLER]: Abilities.MAGIC_GUARD,
|
||||||
[Species.SMEARGLE]: Abilities.QUICK_DRAW,
|
[Species.SMEARGLE]: Abilities.QUICK_DRAW,
|
||||||
[Species.TYROGUE]: Abilities.STAMINA,
|
[Species.TYROGUE]: Abilities.STAMINA,
|
||||||
[Species.SMOOCHUM]: Abilities.CUTE_CHARM,
|
[Species.SMOOCHUM]: Abilities.DAZZLING,
|
||||||
[Species.ELEKID]: Abilities.IRON_FIST,
|
[Species.ELEKID]: Abilities.IRON_FIST,
|
||||||
[Species.MAGBY]: Abilities.CONTRARY,
|
[Species.MAGBY]: Abilities.CONTRARY,
|
||||||
[Species.MILTANK]: Abilities.GLUTTONY,
|
[Species.MILTANK]: Abilities.GLUTTONY,
|
||||||
@ -3276,10 +3300,10 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.ENTEI]: Abilities.MOXIE,
|
[Species.ENTEI]: Abilities.MOXIE,
|
||||||
[Species.SUICUNE]: Abilities.UNAWARE,
|
[Species.SUICUNE]: Abilities.UNAWARE,
|
||||||
[Species.LARVITAR]: Abilities.SAND_FORCE,
|
[Species.LARVITAR]: Abilities.SAND_FORCE,
|
||||||
[Species.LUGIA]: Abilities.STORM_DRAIN,
|
[Species.LUGIA]: Abilities.DELTA_STREAM,
|
||||||
[Species.HO_OH]: Abilities.MAGIC_GUARD,
|
[Species.HO_OH]: Abilities.MAGIC_GUARD,
|
||||||
[Species.CELEBI]: Abilities.GRASSY_SURGE,
|
[Species.CELEBI]: Abilities.GRASSY_SURGE,
|
||||||
[Species.TREECKO]: Abilities.GRASSY_SURGE,
|
[Species.TREECKO]: Abilities.TINTED_LENS,
|
||||||
[Species.TORCHIC]: Abilities.RECKLESS,
|
[Species.TORCHIC]: Abilities.RECKLESS,
|
||||||
[Species.MUDKIP]: Abilities.REGENERATOR,
|
[Species.MUDKIP]: Abilities.REGENERATOR,
|
||||||
[Species.POOCHYENA]: Abilities.STRONG_JAW,
|
[Species.POOCHYENA]: Abilities.STRONG_JAW,
|
||||||
@ -3296,7 +3320,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.NINCADA]: Abilities.OVERCOAT,
|
[Species.NINCADA]: Abilities.OVERCOAT,
|
||||||
[Species.WHISMUR]: Abilities.PUNK_ROCK,
|
[Species.WHISMUR]: Abilities.PUNK_ROCK,
|
||||||
[Species.MAKUHITA]: Abilities.STAMINA,
|
[Species.MAKUHITA]: Abilities.STAMINA,
|
||||||
[Species.AZURILL]: Abilities.UNNERVE,
|
[Species.AZURILL]: Abilities.MISTY_SURGE,
|
||||||
[Species.NOSEPASS]: Abilities.LEVITATE,
|
[Species.NOSEPASS]: Abilities.LEVITATE,
|
||||||
[Species.SKITTY]: Abilities.SCRAPPY,
|
[Species.SKITTY]: Abilities.SCRAPPY,
|
||||||
[Species.SABLEYE]: Abilities.UNNERVE,
|
[Species.SABLEYE]: Abilities.UNNERVE,
|
||||||
@ -3327,7 +3351,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.BALTOY]: Abilities.OWN_TEMPO,
|
[Species.BALTOY]: Abilities.OWN_TEMPO,
|
||||||
[Species.LILEEP]: Abilities.WATER_ABSORB,
|
[Species.LILEEP]: Abilities.WATER_ABSORB,
|
||||||
[Species.ANORITH]: Abilities.WATER_ABSORB,
|
[Species.ANORITH]: Abilities.WATER_ABSORB,
|
||||||
[Species.FEEBAS]: Abilities.PASTEL_VEIL,
|
[Species.FEEBAS]: Abilities.MAGIC_GUARD,
|
||||||
[Species.CASTFORM]: Abilities.ADAPTABILITY,
|
[Species.CASTFORM]: Abilities.ADAPTABILITY,
|
||||||
[Species.KECLEON]: Abilities.ADAPTABILITY,
|
[Species.KECLEON]: Abilities.ADAPTABILITY,
|
||||||
[Species.SHUPPET]: Abilities.MUMMY,
|
[Species.SHUPPET]: Abilities.MUMMY,
|
||||||
@ -3342,13 +3366,13 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.LUVDISC]: Abilities.PICKUP,
|
[Species.LUVDISC]: Abilities.PICKUP,
|
||||||
[Species.BAGON]: Abilities.GALE_WINGS,
|
[Species.BAGON]: Abilities.GALE_WINGS,
|
||||||
[Species.BELDUM]: Abilities.IRON_FIST,
|
[Species.BELDUM]: Abilities.IRON_FIST,
|
||||||
[Species.REGIROCK]: Abilities.REGENERATOR,
|
[Species.REGIROCK]: Abilities.SAND_STREAM,
|
||||||
[Species.REGICE]: Abilities.ICE_SCALES,
|
[Species.REGICE]: Abilities.SNOW_WARNING,
|
||||||
[Species.REGISTEEL]: Abilities.STEELY_SPIRIT,
|
[Species.REGISTEEL]: Abilities.FILTER,
|
||||||
[Species.LATIAS]: Abilities.SERENE_GRACE,
|
[Species.LATIAS]: Abilities.SOUL_HEART,
|
||||||
[Species.LATIOS]: Abilities.SERENE_GRACE,
|
[Species.LATIOS]: Abilities.TINTED_LENS,
|
||||||
[Species.KYOGRE]: Abilities.HYDRATION,
|
[Species.KYOGRE]: Abilities.HYDRATION,
|
||||||
[Species.GROUDON]: Abilities.EARTH_EATER,
|
[Species.GROUDON]: Abilities.PROTOSYNTHESIS,
|
||||||
[Species.RAYQUAZA]: Abilities.UNNERVE,
|
[Species.RAYQUAZA]: Abilities.UNNERVE,
|
||||||
[Species.JIRACHI]: Abilities.COMATOSE,
|
[Species.JIRACHI]: Abilities.COMATOSE,
|
||||||
[Species.DEOXYS]: Abilities.PROTEAN,
|
[Species.DEOXYS]: Abilities.PROTEAN,
|
||||||
@ -3390,16 +3414,16 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.MANTYKE]: Abilities.STORM_DRAIN,
|
[Species.MANTYKE]: Abilities.STORM_DRAIN,
|
||||||
[Species.SNOVER]: Abilities.SNOW_CLOAK,
|
[Species.SNOVER]: Abilities.SNOW_CLOAK,
|
||||||
[Species.ROTOM]: Abilities.HADRON_ENGINE,
|
[Species.ROTOM]: Abilities.HADRON_ENGINE,
|
||||||
[Species.UXIE]: Abilities.ILLUSION,
|
[Species.UXIE]: Abilities.UNAWARE,
|
||||||
[Species.MESPRIT]: Abilities.MOODY,
|
[Species.MESPRIT]: Abilities.MOODY,
|
||||||
[Species.AZELF]: Abilities.NEUROFORCE,
|
[Species.AZELF]: Abilities.NEUROFORCE,
|
||||||
[Species.DIALGA]: Abilities.SPEED_BOOST,
|
[Species.DIALGA]: Abilities.SPEED_BOOST,
|
||||||
[Species.PALKIA]: Abilities.MAGIC_BOUNCE,
|
[Species.PALKIA]: Abilities.MULTISCALE,
|
||||||
[Species.HEATRAN]: Abilities.ROUGH_SKIN,
|
[Species.HEATRAN]: Abilities.FILTER,
|
||||||
[Species.REGIGIGAS]: Abilities.MINDS_EYE,
|
[Species.REGIGIGAS]: Abilities.MINDS_EYE,
|
||||||
[Species.GIRATINA]: Abilities.SHADOW_TAG,
|
[Species.GIRATINA]: Abilities.SHADOW_SHIELD,
|
||||||
[Species.CRESSELIA]: Abilities.MAGIC_BOUNCE,
|
[Species.CRESSELIA]: Abilities.MAGIC_BOUNCE,
|
||||||
[Species.PHIONE]: Abilities.SWIFT_SWIM,
|
[Species.PHIONE]: Abilities.SIMPLE,
|
||||||
[Species.MANAPHY]: Abilities.SIMPLE,
|
[Species.MANAPHY]: Abilities.SIMPLE,
|
||||||
[Species.DARKRAI]: Abilities.UNNERVE,
|
[Species.DARKRAI]: Abilities.UNNERVE,
|
||||||
[Species.SHAYMIN]: Abilities.FLOWER_VEIL,
|
[Species.SHAYMIN]: Abilities.FLOWER_VEIL,
|
||||||
@ -3407,7 +3431,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.VICTINI]: Abilities.SUPER_LUCK,
|
[Species.VICTINI]: Abilities.SUPER_LUCK,
|
||||||
[Species.SNIVY]: Abilities.MULTISCALE,
|
[Species.SNIVY]: Abilities.MULTISCALE,
|
||||||
[Species.TEPIG]: Abilities.ROCK_HEAD,
|
[Species.TEPIG]: Abilities.ROCK_HEAD,
|
||||||
[Species.OSHAWOTT]: Abilities.MOLD_BREAKER,
|
[Species.OSHAWOTT]: Abilities.QUICK_DRAW,
|
||||||
[Species.PATRAT]: Abilities.STAKEOUT,
|
[Species.PATRAT]: Abilities.STAKEOUT,
|
||||||
[Species.LILLIPUP]: Abilities.BALL_FETCH,
|
[Species.LILLIPUP]: Abilities.BALL_FETCH,
|
||||||
[Species.PURRLOIN]: Abilities.DEFIANT,
|
[Species.PURRLOIN]: Abilities.DEFIANT,
|
||||||
@ -3420,14 +3444,14 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.ROGGENROLA]: Abilities.SOLID_ROCK,
|
[Species.ROGGENROLA]: Abilities.SOLID_ROCK,
|
||||||
[Species.WOOBAT]: Abilities.SOUL_HEART,
|
[Species.WOOBAT]: Abilities.SOUL_HEART,
|
||||||
[Species.DRILBUR]: Abilities.SAND_STREAM,
|
[Species.DRILBUR]: Abilities.SAND_STREAM,
|
||||||
[Species.AUDINO]: Abilities.SERENE_GRACE,
|
[Species.AUDINO]: Abilities.FRIEND_GUARD,
|
||||||
[Species.TIMBURR]: Abilities.STAMINA,
|
[Species.TIMBURR]: Abilities.STAMINA,
|
||||||
[Species.TYMPOLE]: Abilities.MOODY,
|
[Species.TYMPOLE]: Abilities.MOODY,
|
||||||
[Species.THROH]: Abilities.SIMPLE,
|
[Species.THROH]: Abilities.SIMPLE,
|
||||||
[Species.SAWK]: Abilities.DEFIANT,
|
[Species.SAWK]: Abilities.DEFIANT,
|
||||||
[Species.SEWADDLE]: Abilities.SHARPNESS,
|
[Species.SEWADDLE]: Abilities.SHARPNESS,
|
||||||
[Species.VENIPEDE]: Abilities.INTIMIDATE,
|
[Species.VENIPEDE]: Abilities.INTIMIDATE,
|
||||||
[Species.COTTONEE]: Abilities.MISTY_SURGE,
|
[Species.COTTONEE]: Abilities.FLUFFY,
|
||||||
[Species.PETILIL]: Abilities.DANCER,
|
[Species.PETILIL]: Abilities.DANCER,
|
||||||
[Species.BASCULIN]: Abilities.OPPORTUNIST,
|
[Species.BASCULIN]: Abilities.OPPORTUNIST,
|
||||||
[Species.SANDILE]: Abilities.STRONG_JAW,
|
[Species.SANDILE]: Abilities.STRONG_JAW,
|
||||||
@ -3436,7 +3460,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.DWEBBLE]: Abilities.STAMINA,
|
[Species.DWEBBLE]: Abilities.STAMINA,
|
||||||
[Species.SCRAGGY]: Abilities.ROCK_HEAD,
|
[Species.SCRAGGY]: Abilities.ROCK_HEAD,
|
||||||
[Species.SIGILYPH]: Abilities.MAGICIAN,
|
[Species.SIGILYPH]: Abilities.MAGICIAN,
|
||||||
[Species.YAMASK]: Abilities.GOOD_AS_GOLD,
|
[Species.YAMASK]: Abilities.PURIFYING_SALT,
|
||||||
[Species.TIRTOUGA]: Abilities.SHELL_ARMOR,
|
[Species.TIRTOUGA]: Abilities.SHELL_ARMOR,
|
||||||
[Species.ARCHEN]: Abilities.ROCKY_PAYLOAD,
|
[Species.ARCHEN]: Abilities.ROCKY_PAYLOAD,
|
||||||
[Species.TRUBBISH]: Abilities.GOOEY,
|
[Species.TRUBBISH]: Abilities.GOOEY,
|
||||||
@ -3476,16 +3500,16 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.LARVESTA]: Abilities.DROUGHT,
|
[Species.LARVESTA]: Abilities.DROUGHT,
|
||||||
[Species.COBALION]: Abilities.INTREPID_SWORD,
|
[Species.COBALION]: Abilities.INTREPID_SWORD,
|
||||||
[Species.TERRAKION]: Abilities.ROCKY_PAYLOAD,
|
[Species.TERRAKION]: Abilities.ROCKY_PAYLOAD,
|
||||||
[Species.VIRIZION]: Abilities.SYMBIOSIS,
|
[Species.VIRIZION]: Abilities.SHARPNESS,
|
||||||
[Species.TORNADUS]: Abilities.DELTA_STREAM,
|
[Species.TORNADUS]: Abilities.DRIZZLE,
|
||||||
[Species.THUNDURUS]: Abilities.DRIZZLE,
|
[Species.THUNDURUS]: Abilities.DRIZZLE,
|
||||||
[Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE,
|
[Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE,
|
||||||
[Species.ZEKROM]: Abilities.HADRON_ENGINE,
|
[Species.ZEKROM]: Abilities.HADRON_ENGINE,
|
||||||
[Species.LANDORUS]: Abilities.PRANKSTER,
|
[Species.LANDORUS]: Abilities.STORM_DRAIN,
|
||||||
[Species.KYUREM]: Abilities.SNOW_WARNING,
|
[Species.KYUREM]: Abilities.SNOW_WARNING,
|
||||||
[Species.KELDEO]: Abilities.SHARPNESS,
|
[Species.KELDEO]: Abilities.GRIM_NEIGH,
|
||||||
[Species.MELOETTA]: Abilities.PUNK_ROCK,
|
[Species.MELOETTA]: Abilities.MINDS_EYE,
|
||||||
[Species.GENESECT]: Abilities.MEGA_LAUNCHER,
|
[Species.GENESECT]: Abilities.REGENERATOR,
|
||||||
[Species.CHESPIN]: Abilities.IRON_BARBS,
|
[Species.CHESPIN]: Abilities.IRON_BARBS,
|
||||||
[Species.FENNEKIN]: Abilities.MAGIC_BOUNCE,
|
[Species.FENNEKIN]: Abilities.MAGIC_BOUNCE,
|
||||||
[Species.FROAKIE]: Abilities.ADAPTABILITY,
|
[Species.FROAKIE]: Abilities.ADAPTABILITY,
|
||||||
@ -3497,7 +3521,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.SKIDDO]: Abilities.GRASSY_SURGE,
|
[Species.SKIDDO]: Abilities.GRASSY_SURGE,
|
||||||
[Species.PANCHAM]: Abilities.FLUFFY,
|
[Species.PANCHAM]: Abilities.FLUFFY,
|
||||||
[Species.FURFROU]: Abilities.BALL_FETCH,
|
[Species.FURFROU]: Abilities.BALL_FETCH,
|
||||||
[Species.ESPURR]: Abilities.PSYCHIC_SURGE,
|
[Species.ESPURR]: Abilities.FUR_COAT,
|
||||||
[Species.HONEDGE]: Abilities.SHARPNESS,
|
[Species.HONEDGE]: Abilities.SHARPNESS,
|
||||||
[Species.SPRITZEE]: Abilities.MISTY_SURGE,
|
[Species.SPRITZEE]: Abilities.MISTY_SURGE,
|
||||||
[Species.SWIRLIX]: Abilities.WELL_BAKED_BODY,
|
[Species.SWIRLIX]: Abilities.WELL_BAKED_BODY,
|
||||||
@ -3517,14 +3541,14 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.PUMPKABOO]: Abilities.FLASH_FIRE,
|
[Species.PUMPKABOO]: Abilities.FLASH_FIRE,
|
||||||
[Species.BERGMITE]: Abilities.MIRROR_ARMOR,
|
[Species.BERGMITE]: Abilities.MIRROR_ARMOR,
|
||||||
[Species.NOIBAT]: Abilities.PUNK_ROCK,
|
[Species.NOIBAT]: Abilities.PUNK_ROCK,
|
||||||
[Species.XERNEAS]: Abilities.COMPETITIVE,
|
[Species.XERNEAS]: Abilities.MISTY_SURGE,
|
||||||
[Species.YVELTAL]: Abilities.DEFIANT,
|
[Species.YVELTAL]: Abilities.SOUL_HEART,
|
||||||
[Species.ZYGARDE]: Abilities.REGENERATOR,
|
[Species.ZYGARDE]: Abilities.HUGE_POWER,
|
||||||
[Species.DIANCIE]: Abilities.QUEENLY_MAJESTY,
|
[Species.DIANCIE]: Abilities.LEVITATE,
|
||||||
[Species.HOOPA]: Abilities.TRACE,
|
[Species.HOOPA]: Abilities.OPPORTUNIST,
|
||||||
[Species.VOLCANION]: Abilities.FILTER,
|
[Species.VOLCANION]: Abilities.FILTER,
|
||||||
[Species.ROWLET]: Abilities.SNIPER,
|
[Species.ROWLET]: Abilities.SNIPER,
|
||||||
[Species.LITTEN]: Abilities.PRANKSTER,
|
[Species.LITTEN]: Abilities.FLAME_BODY,
|
||||||
[Species.POPPLIO]: Abilities.PUNK_ROCK,
|
[Species.POPPLIO]: Abilities.PUNK_ROCK,
|
||||||
[Species.PIKIPEK]: Abilities.ANGER_POINT,
|
[Species.PIKIPEK]: Abilities.ANGER_POINT,
|
||||||
[Species.YUNGOOS]: Abilities.HUGE_POWER,
|
[Species.YUNGOOS]: Abilities.HUGE_POWER,
|
||||||
@ -3553,39 +3577,39 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.KOMALA]: Abilities.GUTS,
|
[Species.KOMALA]: Abilities.GUTS,
|
||||||
[Species.TURTONATOR]: Abilities.ANGER_SHELL,
|
[Species.TURTONATOR]: Abilities.ANGER_SHELL,
|
||||||
[Species.TOGEDEMARU]: Abilities.STATIC,
|
[Species.TOGEDEMARU]: Abilities.STATIC,
|
||||||
[Species.MIMIKYU]: Abilities.CURSED_BODY,
|
[Species.MIMIKYU]: Abilities.TOUGH_CLAWS,
|
||||||
[Species.BRUXISH]: Abilities.MULTISCALE,
|
[Species.BRUXISH]: Abilities.MULTISCALE,
|
||||||
[Species.DRAMPA]: Abilities.FLASH_FIRE,
|
[Species.DRAMPA]: Abilities.FLASH_FIRE,
|
||||||
[Species.DHELMISE]: Abilities.INFILTRATOR,
|
[Species.DHELMISE]: Abilities.INFILTRATOR,
|
||||||
[Species.JANGMO_O]: Abilities.DANCER,
|
[Species.JANGMO_O]: Abilities.DANCER,
|
||||||
[Species.TAPU_KOKO]: Abilities.GALVANIZE,
|
[Species.TAPU_KOKO]: Abilities.TRANSISTOR,
|
||||||
[Species.TAPU_LELE]: Abilities.BERSERK,
|
[Species.TAPU_LELE]: Abilities.SHEER_FORCE,
|
||||||
[Species.TAPU_BULU]: Abilities.FLOWER_VEIL,
|
[Species.TAPU_BULU]: Abilities.GRASS_PELT,
|
||||||
[Species.TAPU_FINI]: Abilities.FAIRY_AURA,
|
[Species.TAPU_FINI]: Abilities.FAIRY_AURA,
|
||||||
[Species.COSMOG]: Abilities.BEAST_BOOST,
|
[Species.COSMOG]: Abilities.BEAST_BOOST,
|
||||||
[Species.NIHILEGO]: Abilities.POISON_PUPPETEER,
|
[Species.NIHILEGO]: Abilities.LEVITATE,
|
||||||
[Species.BUZZWOLE]: Abilities.MOXIE,
|
[Species.BUZZWOLE]: Abilities.MOXIE,
|
||||||
[Species.PHEROMOSA]: Abilities.MOXIE,
|
[Species.PHEROMOSA]: Abilities.TINTED_LENS,
|
||||||
[Species.XURKITREE]: Abilities.LIGHTNING_ROD,
|
[Species.XURKITREE]: Abilities.TRANSISTOR,
|
||||||
[Species.CELESTEELA]: Abilities.CHLOROPHYLL,
|
[Species.CELESTEELA]: Abilities.HEATPROOF,
|
||||||
[Species.KARTANA]: Abilities.SHARPNESS,
|
[Species.KARTANA]: Abilities.SHARPNESS,
|
||||||
[Species.GUZZLORD]: Abilities.GLUTTONY,
|
[Species.GUZZLORD]: Abilities.INNARDS_OUT,
|
||||||
[Species.NECROZMA]: Abilities.BEAST_BOOST,
|
[Species.NECROZMA]: Abilities.BEAST_BOOST,
|
||||||
[Species.MAGEARNA]: Abilities.STEELY_SPIRIT,
|
[Species.MAGEARNA]: Abilities.STEELY_SPIRIT,
|
||||||
[Species.MARSHADOW]: Abilities.IRON_FIST,
|
[Species.MARSHADOW]: Abilities.IRON_FIST,
|
||||||
[Species.POIPOLE]: Abilities.MERCILESS,
|
[Species.POIPOLE]: Abilities.SHEER_FORCE,
|
||||||
[Species.STAKATAKA]: Abilities.DAUNTLESS_SHIELD,
|
[Species.STAKATAKA]: Abilities.SOLID_ROCK,
|
||||||
[Species.BLACEPHALON]: Abilities.MAGIC_GUARD,
|
[Species.BLACEPHALON]: Abilities.MAGIC_GUARD,
|
||||||
[Species.ZERAORA]: Abilities.MOTOR_DRIVE,
|
[Species.ZERAORA]: Abilities.TOUGH_CLAWS,
|
||||||
[Species.MELTAN]: Abilities.FULL_METAL_BODY,
|
[Species.MELTAN]: Abilities.STEELY_SPIRIT,
|
||||||
[Species.GROOKEY]: Abilities.GRASS_PELT,
|
[Species.GROOKEY]: Abilities.GRASS_PELT,
|
||||||
[Species.SCORBUNNY]: Abilities.RECKLESS,
|
[Species.SCORBUNNY]: Abilities.RECKLESS,
|
||||||
[Species.SOBBLE]: Abilities.SUPER_LUCK,
|
[Species.SOBBLE]: Abilities.SUPER_LUCK,
|
||||||
[Species.SKWOVET]: Abilities.HONEY_GATHER,
|
[Species.SKWOVET]: Abilities.HONEY_GATHER,
|
||||||
[Species.ROOKIDEE]: Abilities.IRON_BARBS,
|
[Species.ROOKIDEE]: Abilities.IRON_BARBS,
|
||||||
[Species.BLIPBUG]: Abilities.TINTED_LENS,
|
[Species.BLIPBUG]: Abilities.PSYCHIC_SURGE,
|
||||||
[Species.NICKIT]: Abilities.INTIMIDATE,
|
[Species.NICKIT]: Abilities.INTIMIDATE,
|
||||||
[Species.GOSSIFLEUR]: Abilities.STORM_DRAIN,
|
[Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE,
|
||||||
[Species.WOOLOO]: Abilities.ROCK_HEAD,
|
[Species.WOOLOO]: Abilities.ROCK_HEAD,
|
||||||
[Species.CHEWTLE]: Abilities.ROCK_HEAD,
|
[Species.CHEWTLE]: Abilities.ROCK_HEAD,
|
||||||
[Species.YAMPER]: Abilities.STAKEOUT,
|
[Species.YAMPER]: Abilities.STAKEOUT,
|
||||||
@ -3600,7 +3624,7 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.SINISTEA]: Abilities.WATER_ABSORB,
|
[Species.SINISTEA]: Abilities.WATER_ABSORB,
|
||||||
[Species.HATENNA]: Abilities.MAGIC_GUARD,
|
[Species.HATENNA]: Abilities.MAGIC_GUARD,
|
||||||
[Species.IMPIDIMP]: Abilities.TANGLING_HAIR,
|
[Species.IMPIDIMP]: Abilities.TANGLING_HAIR,
|
||||||
[Species.MILCERY]: Abilities.WELL_BAKED_BODY,
|
[Species.MILCERY]: Abilities.MISTY_SURGE,
|
||||||
[Species.FALINKS]: Abilities.MOXIE,
|
[Species.FALINKS]: Abilities.MOXIE,
|
||||||
[Species.PINCURCHIN]: Abilities.IRON_BARBS,
|
[Species.PINCURCHIN]: Abilities.IRON_BARBS,
|
||||||
[Species.SNOM]: Abilities.SNOW_WARNING,
|
[Species.SNOM]: Abilities.SNOW_WARNING,
|
||||||
@ -3615,17 +3639,17 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.ARCTOVISH]: Abilities.STRONG_JAW,
|
[Species.ARCTOVISH]: Abilities.STRONG_JAW,
|
||||||
[Species.DURALUDON]: Abilities.MEGA_LAUNCHER,
|
[Species.DURALUDON]: Abilities.MEGA_LAUNCHER,
|
||||||
[Species.DREEPY]: Abilities.PARENTAL_BOND,
|
[Species.DREEPY]: Abilities.PARENTAL_BOND,
|
||||||
[Species.ZACIAN]: Abilities.GUARD_DOG,
|
[Species.ZACIAN]: Abilities.UNNERVE,
|
||||||
[Species.ZAMAZENTA]: Abilities.GUARD_DOG,
|
[Species.ZAMAZENTA]: Abilities.STAMINA,
|
||||||
[Species.ETERNATUS]: Abilities.SUPREME_OVERLORD,
|
[Species.ETERNATUS]: Abilities.SUPREME_OVERLORD,
|
||||||
[Species.KUBFU]: Abilities.IRON_FIST,
|
[Species.KUBFU]: Abilities.IRON_FIST,
|
||||||
[Species.ZARUDE]: Abilities.PRANKSTER,
|
[Species.ZARUDE]: Abilities.GRASSY_SURGE,
|
||||||
[Species.REGIELEKI]: Abilities.LEVITATE,
|
[Species.REGIELEKI]: Abilities.ELECTRIC_SURGE,
|
||||||
[Species.REGIDRAGO]: Abilities.INTIMIDATE,
|
[Species.REGIDRAGO]: Abilities.MULTISCALE,
|
||||||
[Species.GLASTRIER]: Abilities.FILTER,
|
[Species.GLASTRIER]: Abilities.FILTER,
|
||||||
[Species.SPECTRIER]: Abilities.PERISH_BODY,
|
[Species.SPECTRIER]: Abilities.SHADOW_SHIELD,
|
||||||
[Species.CALYREX]: Abilities.HARVEST,
|
[Species.CALYREX]: Abilities.HARVEST,
|
||||||
[Species.ENAMORUS]: Abilities.PRANKSTER,
|
[Species.ENAMORUS]: Abilities.FAIRY_AURA,
|
||||||
[Species.SPRIGATITO]: Abilities.MAGICIAN,
|
[Species.SPRIGATITO]: Abilities.MAGICIAN,
|
||||||
[Species.FUECOCO]: Abilities.EARTH_EATER,
|
[Species.FUECOCO]: Abilities.EARTH_EATER,
|
||||||
[Species.QUAXLY]: Abilities.DANCER,
|
[Species.QUAXLY]: Abilities.DANCER,
|
||||||
@ -3650,9 +3674,9 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.RELLOR]: Abilities.MAGIC_GUARD,
|
[Species.RELLOR]: Abilities.MAGIC_GUARD,
|
||||||
[Species.FLITTLE]: Abilities.COMPETITIVE,
|
[Species.FLITTLE]: Abilities.COMPETITIVE,
|
||||||
[Species.TINKATINK]: Abilities.HUGE_POWER,
|
[Species.TINKATINK]: Abilities.HUGE_POWER,
|
||||||
[Species.WIGLETT]: Abilities.STORM_DRAIN,
|
[Species.WIGLETT]: Abilities.STURDY,
|
||||||
[Species.BOMBIRDIER]: Abilities.UNAWARE,
|
[Species.BOMBIRDIER]: Abilities.UNAWARE,
|
||||||
[Species.FINIZEN]: Abilities.LIQUID_VOICE,
|
[Species.FINIZEN]: Abilities.IRON_FIST,
|
||||||
[Species.VAROOM]: Abilities.SPEED_BOOST,
|
[Species.VAROOM]: Abilities.SPEED_BOOST,
|
||||||
[Species.CYCLIZAR]: Abilities.PROTEAN,
|
[Species.CYCLIZAR]: Abilities.PROTEAN,
|
||||||
[Species.ORTHWORM]: Abilities.HEATPROOF,
|
[Species.ORTHWORM]: Abilities.HEATPROOF,
|
||||||
@ -3664,55 +3688,55 @@ export const starterPassiveAbilities = {
|
|||||||
[Species.DONDOZO]: Abilities.GLUTTONY,
|
[Species.DONDOZO]: Abilities.GLUTTONY,
|
||||||
[Species.TATSUGIRI]: Abilities.WATER_BUBBLE,
|
[Species.TATSUGIRI]: Abilities.WATER_BUBBLE,
|
||||||
[Species.GREAT_TUSK]: Abilities.INTIMIDATE,
|
[Species.GREAT_TUSK]: Abilities.INTIMIDATE,
|
||||||
[Species.SCREAM_TAIL]: Abilities.PIXILATE,
|
[Species.SCREAM_TAIL]: Abilities.UNAWARE,
|
||||||
[Species.BRUTE_BONNET]: Abilities.BEAST_BOOST,
|
[Species.BRUTE_BONNET]: Abilities.BEAST_BOOST,
|
||||||
[Species.FLUTTER_MANE]: Abilities.DAZZLING,
|
[Species.FLUTTER_MANE]: Abilities.DAZZLING,
|
||||||
[Species.SLITHER_WING]: Abilities.MOXIE,
|
[Species.SLITHER_WING]: Abilities.SCRAPPY,
|
||||||
[Species.SANDY_SHOCKS]: Abilities.EARTH_EATER,
|
[Species.SANDY_SHOCKS]: Abilities.EARTH_EATER,
|
||||||
[Species.IRON_TREADS]: Abilities.BULLETPROOF,
|
[Species.IRON_TREADS]: Abilities.STEELY_SPIRIT,
|
||||||
[Species.IRON_BUNDLE]: Abilities.SNOW_WARNING,
|
[Species.IRON_BUNDLE]: Abilities.SNOW_WARNING,
|
||||||
[Species.IRON_HANDS]: Abilities.IRON_FIST,
|
[Species.IRON_HANDS]: Abilities.IRON_FIST,
|
||||||
[Species.IRON_JUGULIS]: Abilities.NO_GUARD,
|
[Species.IRON_JUGULIS]: Abilities.AERILATE,
|
||||||
[Species.IRON_MOTH]: Abilities.LEVITATE,
|
[Species.IRON_MOTH]: Abilities.LEVITATE,
|
||||||
[Species.IRON_THORNS]: Abilities.SAND_STREAM,
|
[Species.IRON_THORNS]: Abilities.SAND_STREAM,
|
||||||
[Species.FRIGIBAX]: Abilities.THICK_FAT,
|
[Species.FRIGIBAX]: Abilities.THICK_FAT,
|
||||||
[Species.GIMMIGHOUL]: Abilities.SUPER_LUCK,
|
[Species.GIMMIGHOUL]: Abilities.SUPER_LUCK,
|
||||||
[Species.WO_CHIEN]: Abilities.TRIAGE,
|
[Species.WO_CHIEN]: Abilities.GRASSY_SURGE,
|
||||||
[Species.CHIEN_PAO]: Abilities.REFRIGERATE,
|
[Species.CHIEN_PAO]: Abilities.INTREPID_SWORD,
|
||||||
[Species.TING_LU]: Abilities.STAMINA,
|
[Species.TING_LU]: Abilities.STAMINA,
|
||||||
[Species.CHI_YU]: Abilities.BLAZE,
|
[Species.CHI_YU]: Abilities.DROUGHT,
|
||||||
[Species.ROARING_MOON]: Abilities.AERILATE,
|
[Species.ROARING_MOON]: Abilities.TOUGH_CLAWS,
|
||||||
[Species.IRON_VALIANT]: Abilities.DOWNLOAD,
|
[Species.IRON_VALIANT]: Abilities.DOWNLOAD,
|
||||||
[Species.KORAIDON]: Abilities.PROTOSYNTHESIS,
|
[Species.KORAIDON]: Abilities.PROTOSYNTHESIS,
|
||||||
[Species.MIRAIDON]: Abilities.QUARK_DRIVE,
|
[Species.MIRAIDON]: Abilities.QUARK_DRIVE,
|
||||||
[Species.WALKING_WAKE]: Abilities.BEAST_BOOST,
|
[Species.WALKING_WAKE]: Abilities.BEAST_BOOST,
|
||||||
[Species.IRON_LEAVES]: Abilities.SHARPNESS,
|
[Species.IRON_LEAVES]: Abilities.SHARPNESS,
|
||||||
[Species.POLTCHAGEIST]: Abilities.FLAME_BODY,
|
[Species.POLTCHAGEIST]: Abilities.FLAME_BODY,
|
||||||
[Species.OKIDOGI]: Abilities.INTIMIDATE,
|
[Species.OKIDOGI]: Abilities.FUR_COAT,
|
||||||
[Species.MUNKIDORI]: Abilities.PRANKSTER,
|
[Species.MUNKIDORI]: Abilities.NEUROFORCE,
|
||||||
[Species.FEZANDIPITI]: Abilities.DAZZLING,
|
[Species.FEZANDIPITI]: Abilities.LEVITATE,
|
||||||
[Species.OGERPON]: Abilities.OPPORTUNIST,
|
[Species.OGERPON]: Abilities.OPPORTUNIST,
|
||||||
[Species.GOUGING_FIRE]: Abilities.BEAST_BOOST,
|
[Species.GOUGING_FIRE]: Abilities.BEAST_BOOST,
|
||||||
[Species.RAGING_BOLT]: Abilities.BEAST_BOOST,
|
[Species.RAGING_BOLT]: Abilities.BEAST_BOOST,
|
||||||
[Species.IRON_BOULDER]: Abilities.SHARPNESS,
|
[Species.IRON_BOULDER]: Abilities.SHARPNESS,
|
||||||
[Species.IRON_CROWN]: Abilities.SHARPNESS,
|
[Species.IRON_CROWN]: Abilities.SHARPNESS,
|
||||||
[Species.TERAPAGOS]: Abilities.PROTEAN,
|
[Species.TERAPAGOS]: Abilities.REGENERATOR,
|
||||||
[Species.PECHARUNT]: Abilities.CORROSION,
|
[Species.PECHARUNT]: Abilities.TOXIC_CHAIN,
|
||||||
[Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH,
|
[Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH,
|
||||||
[Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY,
|
[Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY,
|
||||||
[Species.ALOLA_VULPIX]: Abilities.ICE_BODY,
|
[Species.ALOLA_VULPIX]: Abilities.ICE_BODY,
|
||||||
[Species.ALOLA_DIGLETT]: Abilities.CUTE_CHARM,
|
[Species.ALOLA_DIGLETT]: Abilities.STURDY,
|
||||||
[Species.ALOLA_MEOWTH]: Abilities.UNNERVE,
|
[Species.ALOLA_MEOWTH]: Abilities.UNNERVE,
|
||||||
[Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS,
|
[Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS,
|
||||||
[Species.ALOLA_GRIMER]: Abilities.MERCILESS,
|
[Species.ALOLA_GRIMER]: Abilities.MERCILESS,
|
||||||
[Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD,
|
[Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD,
|
||||||
[Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK,
|
[Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK,
|
||||||
[Species.GALAR_PONYTA]: Abilities.MAGIC_GUARD,
|
[Species.GALAR_PONYTA]: Abilities.PIXILATE,
|
||||||
[Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH,
|
[Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH,
|
||||||
[Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK,
|
[Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK,
|
||||||
[Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE,
|
[Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE,
|
||||||
[Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS,
|
[Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS,
|
||||||
[Species.GALAR_MOLTRES]: Abilities.REGENERATOR,
|
[Species.GALAR_MOLTRES]: Abilities.DARK_AURA,
|
||||||
[Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG,
|
[Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG,
|
||||||
[Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET,
|
[Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET,
|
||||||
[Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE,
|
[Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE,
|
||||||
|
@ -33,6 +33,5 @@ splashMessages.push(...[
|
|||||||
'Also Try Emerald Rogue!',
|
'Also Try Emerald Rogue!',
|
||||||
'Also Try Radical Red!',
|
'Also Try Radical Red!',
|
||||||
'Eevee Expo!',
|
'Eevee Expo!',
|
||||||
'YNOproject!',
|
'YNOproject!'
|
||||||
'Shh, don\'t tell Sam!'
|
|
||||||
]);
|
]);
|
435
src/data/tms.ts
@ -29550,7 +29550,6 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MURKROW,
|
Species.MURKROW,
|
||||||
Species.SLOWKING,
|
Species.SLOWKING,
|
||||||
Species.MISDREAVUS,
|
Species.MISDREAVUS,
|
||||||
Species.UNOWN,
|
|
||||||
Species.GIRAFARIG,
|
Species.GIRAFARIG,
|
||||||
Species.PINECO,
|
Species.PINECO,
|
||||||
Species.FORRETRESS,
|
Species.FORRETRESS,
|
||||||
@ -62012,21 +62011,49 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.ALOLA_MAROWAK,
|
Species.ALOLA_MAROWAK,
|
||||||
],
|
],
|
||||||
[Moves.TERA_BLAST]: [
|
[Moves.TERA_BLAST]: [
|
||||||
|
Species.BULBASAUR,
|
||||||
|
Species.IVYSAUR,
|
||||||
|
Species.VENUSAUR,
|
||||||
Species.CHARMANDER,
|
Species.CHARMANDER,
|
||||||
Species.CHARMELEON,
|
Species.CHARMELEON,
|
||||||
Species.CHARIZARD,
|
Species.CHARIZARD,
|
||||||
|
Species.SQUIRTLE,
|
||||||
|
Species.WARTORTLE,
|
||||||
|
Species.BLASTOISE,
|
||||||
|
Species.BUTTERFREE,
|
||||||
|
Species.BEEDRILL,
|
||||||
|
Species.PIDGEY,
|
||||||
|
Species.PIDGEOTTO,
|
||||||
|
Species.PIDGEOT,
|
||||||
|
Species.RATTATA,
|
||||||
|
Species.RATICATE,
|
||||||
|
Species.SPEAROW,
|
||||||
|
Species.FEAROW,
|
||||||
Species.EKANS,
|
Species.EKANS,
|
||||||
Species.ARBOK,
|
Species.ARBOK,
|
||||||
Species.PIKACHU,
|
Species.PIKACHU,
|
||||||
Species.RAICHU,
|
Species.RAICHU,
|
||||||
Species.SANDSHREW,
|
Species.SANDSHREW,
|
||||||
Species.SANDSLASH,
|
Species.SANDSLASH,
|
||||||
|
Species.NIDORAN_F,
|
||||||
|
Species.NIDORINA,
|
||||||
|
Species.NIDOQUEEN,
|
||||||
|
Species.NIDORAN_M,
|
||||||
|
Species.NIDORINO,
|
||||||
|
Species.NIDOKING,
|
||||||
Species.CLEFAIRY,
|
Species.CLEFAIRY,
|
||||||
Species.CLEFABLE,
|
Species.CLEFABLE,
|
||||||
Species.VULPIX,
|
Species.VULPIX,
|
||||||
Species.NINETALES,
|
Species.NINETALES,
|
||||||
Species.JIGGLYPUFF,
|
Species.JIGGLYPUFF,
|
||||||
Species.WIGGLYTUFF,
|
Species.WIGGLYTUFF,
|
||||||
|
Species.ZUBAT,
|
||||||
|
Species.GOLBAT,
|
||||||
|
Species.ODDISH,
|
||||||
|
Species.GLOOM,
|
||||||
|
Species.VILEPLUME,
|
||||||
|
Species.PARAS,
|
||||||
|
Species.PARASECT,
|
||||||
Species.VENONAT,
|
Species.VENONAT,
|
||||||
Species.VENOMOTH,
|
Species.VENOMOTH,
|
||||||
Species.DIGLETT,
|
Species.DIGLETT,
|
||||||
@ -62042,16 +62069,31 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.POLIWAG,
|
Species.POLIWAG,
|
||||||
Species.POLIWHIRL,
|
Species.POLIWHIRL,
|
||||||
Species.POLIWRATH,
|
Species.POLIWRATH,
|
||||||
|
Species.ABRA,
|
||||||
|
Species.KADABRA,
|
||||||
|
Species.ALAKAZAM,
|
||||||
|
Species.MACHOP,
|
||||||
|
Species.MACHOKE,
|
||||||
|
Species.MACHAMP,
|
||||||
Species.BELLSPROUT,
|
Species.BELLSPROUT,
|
||||||
Species.WEEPINBELL,
|
Species.WEEPINBELL,
|
||||||
Species.VICTREEBEL,
|
Species.VICTREEBEL,
|
||||||
|
Species.TENTACOOL,
|
||||||
|
Species.TENTACRUEL,
|
||||||
Species.GEODUDE,
|
Species.GEODUDE,
|
||||||
Species.GRAVELER,
|
Species.GRAVELER,
|
||||||
Species.GOLEM,
|
Species.GOLEM,
|
||||||
|
Species.PONYTA,
|
||||||
|
Species.RAPIDASH,
|
||||||
Species.SLOWPOKE,
|
Species.SLOWPOKE,
|
||||||
Species.SLOWBRO,
|
Species.SLOWBRO,
|
||||||
Species.MAGNEMITE,
|
Species.MAGNEMITE,
|
||||||
Species.MAGNETON,
|
Species.MAGNETON,
|
||||||
|
Species.FARFETCHD,
|
||||||
|
Species.DODUO,
|
||||||
|
Species.DODRIO,
|
||||||
|
Species.SEEL,
|
||||||
|
Species.DEWGONG,
|
||||||
Species.GRIMER,
|
Species.GRIMER,
|
||||||
Species.MUK,
|
Species.MUK,
|
||||||
Species.SHELLDER,
|
Species.SHELLDER,
|
||||||
@ -62059,20 +62101,52 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.GASTLY,
|
Species.GASTLY,
|
||||||
Species.HAUNTER,
|
Species.HAUNTER,
|
||||||
Species.GENGAR,
|
Species.GENGAR,
|
||||||
|
Species.ONIX,
|
||||||
Species.DROWZEE,
|
Species.DROWZEE,
|
||||||
Species.HYPNO,
|
Species.HYPNO,
|
||||||
|
Species.KRABBY,
|
||||||
|
Species.KINGLER,
|
||||||
Species.VOLTORB,
|
Species.VOLTORB,
|
||||||
Species.ELECTRODE,
|
Species.ELECTRODE,
|
||||||
|
Species.EXEGGCUTE,
|
||||||
|
Species.EXEGGUTOR,
|
||||||
|
Species.CUBONE,
|
||||||
|
Species.MAROWAK,
|
||||||
|
Species.HITMONLEE,
|
||||||
|
Species.HITMONCHAN,
|
||||||
|
Species.LICKITUNG,
|
||||||
Species.KOFFING,
|
Species.KOFFING,
|
||||||
Species.WEEZING,
|
Species.WEEZING,
|
||||||
|
Species.RHYHORN,
|
||||||
|
Species.RHYDON,
|
||||||
Species.CHANSEY,
|
Species.CHANSEY,
|
||||||
|
Species.TANGELA,
|
||||||
|
Species.KANGASKHAN,
|
||||||
|
Species.HORSEA,
|
||||||
|
Species.SEADRA,
|
||||||
|
Species.GOLDEEN,
|
||||||
|
Species.SEAKING,
|
||||||
|
Species.STARYU,
|
||||||
|
Species.STARMIE,
|
||||||
|
Species.MR_MIME,
|
||||||
Species.SCYTHER,
|
Species.SCYTHER,
|
||||||
|
Species.JYNX,
|
||||||
|
Species.ELECTABUZZ,
|
||||||
|
Species.MAGMAR,
|
||||||
|
Species.PINSIR,
|
||||||
Species.TAUROS,
|
Species.TAUROS,
|
||||||
Species.GYARADOS,
|
Species.GYARADOS,
|
||||||
|
Species.LAPRAS,
|
||||||
Species.EEVEE,
|
Species.EEVEE,
|
||||||
Species.VAPOREON,
|
Species.VAPOREON,
|
||||||
Species.JOLTEON,
|
Species.JOLTEON,
|
||||||
Species.FLAREON,
|
Species.FLAREON,
|
||||||
|
Species.PORYGON,
|
||||||
|
Species.OMANYTE,
|
||||||
|
Species.OMASTAR,
|
||||||
|
Species.KABUTO,
|
||||||
|
Species.KABUTOPS,
|
||||||
|
Species.AERODACTYL,
|
||||||
Species.SNORLAX,
|
Species.SNORLAX,
|
||||||
Species.ARTICUNO,
|
Species.ARTICUNO,
|
||||||
Species.ZAPDOS,
|
Species.ZAPDOS,
|
||||||
@ -62082,21 +62156,37 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.DRAGONITE,
|
Species.DRAGONITE,
|
||||||
Species.MEWTWO,
|
Species.MEWTWO,
|
||||||
Species.MEW,
|
Species.MEW,
|
||||||
|
Species.CHIKORITA,
|
||||||
|
Species.BAYLEEF,
|
||||||
|
Species.MEGANIUM,
|
||||||
Species.CYNDAQUIL,
|
Species.CYNDAQUIL,
|
||||||
Species.QUILAVA,
|
Species.QUILAVA,
|
||||||
Species.TYPHLOSION,
|
Species.TYPHLOSION,
|
||||||
|
Species.TOTODILE,
|
||||||
|
Species.CROCONAW,
|
||||||
|
Species.FERALIGATR,
|
||||||
Species.SENTRET,
|
Species.SENTRET,
|
||||||
Species.FURRET,
|
Species.FURRET,
|
||||||
Species.HOOTHOOT,
|
Species.HOOTHOOT,
|
||||||
Species.NOCTOWL,
|
Species.NOCTOWL,
|
||||||
|
Species.LEDYBA,
|
||||||
|
Species.LEDIAN,
|
||||||
Species.SPINARAK,
|
Species.SPINARAK,
|
||||||
Species.ARIADOS,
|
Species.ARIADOS,
|
||||||
|
Species.CROBAT,
|
||||||
|
Species.CHINCHOU,
|
||||||
|
Species.LANTURN,
|
||||||
Species.PICHU,
|
Species.PICHU,
|
||||||
Species.CLEFFA,
|
Species.CLEFFA,
|
||||||
Species.IGGLYBUFF,
|
Species.IGGLYBUFF,
|
||||||
|
Species.TOGEPI,
|
||||||
|
Species.TOGETIC,
|
||||||
|
Species.NATU,
|
||||||
|
Species.XATU,
|
||||||
Species.MAREEP,
|
Species.MAREEP,
|
||||||
Species.FLAAFFY,
|
Species.FLAAFFY,
|
||||||
Species.AMPHAROS,
|
Species.AMPHAROS,
|
||||||
|
Species.BELLOSSOM,
|
||||||
Species.MARILL,
|
Species.MARILL,
|
||||||
Species.AZUMARILL,
|
Species.AZUMARILL,
|
||||||
Species.SUDOWOODO,
|
Species.SUDOWOODO,
|
||||||
@ -62120,8 +62210,12 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.FORRETRESS,
|
Species.FORRETRESS,
|
||||||
Species.DUNSPARCE,
|
Species.DUNSPARCE,
|
||||||
Species.GLIGAR,
|
Species.GLIGAR,
|
||||||
|
Species.STEELIX,
|
||||||
|
Species.SNUBBULL,
|
||||||
|
Species.GRANBULL,
|
||||||
Species.QWILFISH,
|
Species.QWILFISH,
|
||||||
Species.SCIZOR,
|
Species.SCIZOR,
|
||||||
|
Species.SHUCKLE,
|
||||||
Species.HERACROSS,
|
Species.HERACROSS,
|
||||||
Species.SNEASEL,
|
Species.SNEASEL,
|
||||||
Species.TEDDIURSA,
|
Species.TEDDIURSA,
|
||||||
@ -62130,24 +62224,58 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MAGCARGO,
|
Species.MAGCARGO,
|
||||||
Species.SWINUB,
|
Species.SWINUB,
|
||||||
Species.PILOSWINE,
|
Species.PILOSWINE,
|
||||||
|
Species.CORSOLA,
|
||||||
|
Species.REMORAID,
|
||||||
|
Species.OCTILLERY,
|
||||||
Species.DELIBIRD,
|
Species.DELIBIRD,
|
||||||
|
Species.MANTINE,
|
||||||
|
Species.SKARMORY,
|
||||||
Species.HOUNDOUR,
|
Species.HOUNDOUR,
|
||||||
Species.HOUNDOOM,
|
Species.HOUNDOOM,
|
||||||
|
Species.KINGDRA,
|
||||||
Species.PHANPY,
|
Species.PHANPY,
|
||||||
Species.DONPHAN,
|
Species.DONPHAN,
|
||||||
|
Species.PORYGON2,
|
||||||
Species.STANTLER,
|
Species.STANTLER,
|
||||||
|
Species.TYROGUE,
|
||||||
|
Species.HITMONTOP,
|
||||||
|
Species.SMOOCHUM,
|
||||||
|
Species.ELEKID,
|
||||||
|
Species.MAGBY,
|
||||||
|
Species.MILTANK,
|
||||||
Species.BLISSEY,
|
Species.BLISSEY,
|
||||||
|
Species.RAIKOU,
|
||||||
|
Species.ENTEI,
|
||||||
|
Species.SUICUNE,
|
||||||
Species.LARVITAR,
|
Species.LARVITAR,
|
||||||
Species.PUPITAR,
|
Species.PUPITAR,
|
||||||
Species.TYRANITAR,
|
Species.TYRANITAR,
|
||||||
|
Species.LUGIA,
|
||||||
|
Species.HO_OH,
|
||||||
|
Species.CELEBI,
|
||||||
|
Species.TREECKO,
|
||||||
|
Species.GROVYLE,
|
||||||
|
Species.SCEPTILE,
|
||||||
|
Species.TORCHIC,
|
||||||
|
Species.COMBUSKEN,
|
||||||
|
Species.BLAZIKEN,
|
||||||
|
Species.MUDKIP,
|
||||||
|
Species.MARSHTOMP,
|
||||||
|
Species.SWAMPERT,
|
||||||
Species.POOCHYENA,
|
Species.POOCHYENA,
|
||||||
Species.MIGHTYENA,
|
Species.MIGHTYENA,
|
||||||
|
Species.ZIGZAGOON,
|
||||||
|
Species.LINOONE,
|
||||||
|
Species.BEAUTIFLY,
|
||||||
|
Species.DUSTOX,
|
||||||
Species.LOTAD,
|
Species.LOTAD,
|
||||||
Species.LOMBRE,
|
Species.LOMBRE,
|
||||||
Species.LUDICOLO,
|
Species.LUDICOLO,
|
||||||
Species.SEEDOT,
|
Species.SEEDOT,
|
||||||
Species.NUZLEAF,
|
Species.NUZLEAF,
|
||||||
Species.SHIFTRY,
|
Species.SHIFTRY,
|
||||||
|
Species.TAILLOW,
|
||||||
|
Species.SWELLOW,
|
||||||
Species.WINGULL,
|
Species.WINGULL,
|
||||||
Species.PELIPPER,
|
Species.PELIPPER,
|
||||||
Species.RALTS,
|
Species.RALTS,
|
||||||
@ -62160,49 +62288,101 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.SLAKOTH,
|
Species.SLAKOTH,
|
||||||
Species.VIGOROTH,
|
Species.VIGOROTH,
|
||||||
Species.SLAKING,
|
Species.SLAKING,
|
||||||
|
Species.NINCADA,
|
||||||
|
Species.NINJASK,
|
||||||
|
Species.SHEDINJA,
|
||||||
|
Species.WHISMUR,
|
||||||
|
Species.LOUDRED,
|
||||||
|
Species.EXPLOUD,
|
||||||
Species.MAKUHITA,
|
Species.MAKUHITA,
|
||||||
Species.HARIYAMA,
|
Species.HARIYAMA,
|
||||||
Species.AZURILL,
|
Species.AZURILL,
|
||||||
Species.NOSEPASS,
|
Species.NOSEPASS,
|
||||||
|
Species.SKITTY,
|
||||||
|
Species.DELCATTY,
|
||||||
Species.SABLEYE,
|
Species.SABLEYE,
|
||||||
|
Species.MAWILE,
|
||||||
|
Species.ARON,
|
||||||
|
Species.LAIRON,
|
||||||
|
Species.AGGRON,
|
||||||
Species.MEDITITE,
|
Species.MEDITITE,
|
||||||
Species.MEDICHAM,
|
Species.MEDICHAM,
|
||||||
|
Species.ELECTRIKE,
|
||||||
|
Species.MANECTRIC,
|
||||||
|
Species.PLUSLE,
|
||||||
|
Species.MINUN,
|
||||||
Species.VOLBEAT,
|
Species.VOLBEAT,
|
||||||
Species.ILLUMISE,
|
Species.ILLUMISE,
|
||||||
|
Species.ROSELIA,
|
||||||
Species.GULPIN,
|
Species.GULPIN,
|
||||||
Species.SWALOT,
|
Species.SWALOT,
|
||||||
|
Species.CARVANHA,
|
||||||
|
Species.SHARPEDO,
|
||||||
|
Species.WAILMER,
|
||||||
|
Species.WAILORD,
|
||||||
Species.NUMEL,
|
Species.NUMEL,
|
||||||
Species.CAMERUPT,
|
Species.CAMERUPT,
|
||||||
Species.TORKOAL,
|
Species.TORKOAL,
|
||||||
Species.SPOINK,
|
Species.SPOINK,
|
||||||
Species.GRUMPIG,
|
Species.GRUMPIG,
|
||||||
|
Species.SPINDA,
|
||||||
|
Species.TRAPINCH,
|
||||||
|
Species.VIBRAVA,
|
||||||
|
Species.FLYGON,
|
||||||
Species.CACNEA,
|
Species.CACNEA,
|
||||||
Species.CACTURNE,
|
Species.CACTURNE,
|
||||||
Species.SWABLU,
|
Species.SWABLU,
|
||||||
Species.ALTARIA,
|
Species.ALTARIA,
|
||||||
Species.ZANGOOSE,
|
Species.ZANGOOSE,
|
||||||
Species.SEVIPER,
|
Species.SEVIPER,
|
||||||
|
Species.LUNATONE,
|
||||||
|
Species.SOLROCK,
|
||||||
Species.BARBOACH,
|
Species.BARBOACH,
|
||||||
Species.WHISCASH,
|
Species.WHISCASH,
|
||||||
Species.CORPHISH,
|
Species.CORPHISH,
|
||||||
Species.CRAWDAUNT,
|
Species.CRAWDAUNT,
|
||||||
|
Species.BALTOY,
|
||||||
|
Species.CLAYDOL,
|
||||||
|
Species.LILEEP,
|
||||||
|
Species.CRADILY,
|
||||||
|
Species.ANORITH,
|
||||||
|
Species.ARMALDO,
|
||||||
Species.FEEBAS,
|
Species.FEEBAS,
|
||||||
Species.MILOTIC,
|
Species.MILOTIC,
|
||||||
|
Species.CASTFORM,
|
||||||
|
Species.KECLEON,
|
||||||
Species.SHUPPET,
|
Species.SHUPPET,
|
||||||
Species.BANETTE,
|
Species.BANETTE,
|
||||||
Species.DUSKULL,
|
Species.DUSKULL,
|
||||||
Species.DUSCLOPS,
|
Species.DUSCLOPS,
|
||||||
Species.TROPIUS,
|
Species.TROPIUS,
|
||||||
Species.CHIMECHO,
|
Species.CHIMECHO,
|
||||||
|
Species.ABSOL,
|
||||||
Species.SNORUNT,
|
Species.SNORUNT,
|
||||||
Species.GLALIE,
|
Species.GLALIE,
|
||||||
|
Species.SPHEAL,
|
||||||
|
Species.SEALEO,
|
||||||
|
Species.WALREIN,
|
||||||
|
Species.CLAMPERL,
|
||||||
|
Species.HUNTAIL,
|
||||||
|
Species.GOREBYSS,
|
||||||
|
Species.RELICANTH,
|
||||||
Species.LUVDISC,
|
Species.LUVDISC,
|
||||||
Species.BAGON,
|
Species.BAGON,
|
||||||
Species.SHELGON,
|
Species.SHELGON,
|
||||||
Species.SALAMENCE,
|
Species.SALAMENCE,
|
||||||
|
Species.METANG,
|
||||||
|
Species.METAGROSS,
|
||||||
|
Species.REGIROCK,
|
||||||
|
Species.REGICE,
|
||||||
|
Species.REGISTEEL,
|
||||||
|
Species.LATIAS,
|
||||||
|
Species.LATIOS,
|
||||||
Species.KYOGRE,
|
Species.KYOGRE,
|
||||||
Species.GROUDON,
|
Species.GROUDON,
|
||||||
Species.RAYQUAZA,
|
Species.RAYQUAZA,
|
||||||
|
Species.JIRACHI,
|
||||||
|
Species.DEOXYS,
|
||||||
Species.TURTWIG,
|
Species.TURTWIG,
|
||||||
Species.GROTLE,
|
Species.GROTLE,
|
||||||
Species.TORTERRA,
|
Species.TORTERRA,
|
||||||
@ -62215,30 +62395,49 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.STARLY,
|
Species.STARLY,
|
||||||
Species.STARAVIA,
|
Species.STARAVIA,
|
||||||
Species.STARAPTOR,
|
Species.STARAPTOR,
|
||||||
|
Species.BIDOOF,
|
||||||
|
Species.BIBAREL,
|
||||||
Species.KRICKETOT,
|
Species.KRICKETOT,
|
||||||
Species.KRICKETUNE,
|
Species.KRICKETUNE,
|
||||||
Species.SHINX,
|
Species.SHINX,
|
||||||
Species.LUXIO,
|
Species.LUXIO,
|
||||||
Species.LUXRAY,
|
Species.LUXRAY,
|
||||||
|
Species.BUDEW,
|
||||||
|
Species.ROSERADE,
|
||||||
|
Species.CRANIDOS,
|
||||||
|
Species.RAMPARDOS,
|
||||||
|
Species.SHIELDON,
|
||||||
|
Species.BASTIODON,
|
||||||
|
Species.BURMY,
|
||||||
|
Species.WORMADAM,
|
||||||
|
Species.MOTHIM,
|
||||||
Species.COMBEE,
|
Species.COMBEE,
|
||||||
Species.VESPIQUEN,
|
Species.VESPIQUEN,
|
||||||
Species.PACHIRISU,
|
Species.PACHIRISU,
|
||||||
Species.BUIZEL,
|
Species.BUIZEL,
|
||||||
Species.FLOATZEL,
|
Species.FLOATZEL,
|
||||||
|
Species.CHERUBI,
|
||||||
|
Species.CHERRIM,
|
||||||
Species.SHELLOS,
|
Species.SHELLOS,
|
||||||
Species.GASTRODON,
|
Species.GASTRODON,
|
||||||
Species.AMBIPOM,
|
Species.AMBIPOM,
|
||||||
Species.DRIFLOON,
|
Species.DRIFLOON,
|
||||||
Species.DRIFBLIM,
|
Species.DRIFBLIM,
|
||||||
|
Species.BUNEARY,
|
||||||
|
Species.LOPUNNY,
|
||||||
Species.MISMAGIUS,
|
Species.MISMAGIUS,
|
||||||
Species.HONCHKROW,
|
Species.HONCHKROW,
|
||||||
|
Species.GLAMEOW,
|
||||||
|
Species.PURUGLY,
|
||||||
Species.CHINGLING,
|
Species.CHINGLING,
|
||||||
Species.STUNKY,
|
Species.STUNKY,
|
||||||
Species.SKUNTANK,
|
Species.SKUNTANK,
|
||||||
Species.BRONZOR,
|
Species.BRONZOR,
|
||||||
Species.BRONZONG,
|
Species.BRONZONG,
|
||||||
Species.BONSLY,
|
Species.BONSLY,
|
||||||
|
Species.MIME_JR,
|
||||||
Species.HAPPINY,
|
Species.HAPPINY,
|
||||||
|
Species.CHATOT,
|
||||||
Species.SPIRITOMB,
|
Species.SPIRITOMB,
|
||||||
Species.GIBLE,
|
Species.GIBLE,
|
||||||
Species.GABITE,
|
Species.GABITE,
|
||||||
@ -62248,19 +62447,30 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.LUCARIO,
|
Species.LUCARIO,
|
||||||
Species.HIPPOPOTAS,
|
Species.HIPPOPOTAS,
|
||||||
Species.HIPPOWDON,
|
Species.HIPPOWDON,
|
||||||
|
Species.SKORUPI,
|
||||||
|
Species.DRAPION,
|
||||||
Species.CROAGUNK,
|
Species.CROAGUNK,
|
||||||
Species.TOXICROAK,
|
Species.TOXICROAK,
|
||||||
|
Species.CARNIVINE,
|
||||||
Species.FINNEON,
|
Species.FINNEON,
|
||||||
Species.LUMINEON,
|
Species.LUMINEON,
|
||||||
|
Species.MANTYKE,
|
||||||
Species.SNOVER,
|
Species.SNOVER,
|
||||||
Species.ABOMASNOW,
|
Species.ABOMASNOW,
|
||||||
Species.WEAVILE,
|
Species.WEAVILE,
|
||||||
Species.MAGNEZONE,
|
Species.MAGNEZONE,
|
||||||
|
Species.LICKILICKY,
|
||||||
|
Species.RHYPERIOR,
|
||||||
|
Species.TANGROWTH,
|
||||||
|
Species.ELECTIVIRE,
|
||||||
|
Species.MAGMORTAR,
|
||||||
|
Species.TOGEKISS,
|
||||||
Species.YANMEGA,
|
Species.YANMEGA,
|
||||||
Species.LEAFEON,
|
Species.LEAFEON,
|
||||||
Species.GLACEON,
|
Species.GLACEON,
|
||||||
Species.GLISCOR,
|
Species.GLISCOR,
|
||||||
Species.MAMOSWINE,
|
Species.MAMOSWINE,
|
||||||
|
Species.PORYGON_Z,
|
||||||
Species.GALLADE,
|
Species.GALLADE,
|
||||||
Species.PROBOPASS,
|
Species.PROBOPASS,
|
||||||
Species.DUSKNOIR,
|
Species.DUSKNOIR,
|
||||||
@ -62272,39 +62482,127 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.DIALGA,
|
Species.DIALGA,
|
||||||
Species.PALKIA,
|
Species.PALKIA,
|
||||||
Species.HEATRAN,
|
Species.HEATRAN,
|
||||||
|
Species.REGIGIGAS,
|
||||||
Species.GIRATINA,
|
Species.GIRATINA,
|
||||||
Species.CRESSELIA,
|
Species.CRESSELIA,
|
||||||
|
Species.PHIONE,
|
||||||
|
Species.MANAPHY,
|
||||||
|
Species.DARKRAI,
|
||||||
|
Species.SHAYMIN,
|
||||||
Species.ARCEUS,
|
Species.ARCEUS,
|
||||||
|
Species.VICTINI,
|
||||||
|
Species.SNIVY,
|
||||||
|
Species.SERVINE,
|
||||||
|
Species.SERPERIOR,
|
||||||
|
Species.TEPIG,
|
||||||
|
Species.PIGNITE,
|
||||||
|
Species.EMBOAR,
|
||||||
Species.OSHAWOTT,
|
Species.OSHAWOTT,
|
||||||
Species.DEWOTT,
|
Species.DEWOTT,
|
||||||
Species.SAMUROTT,
|
Species.SAMUROTT,
|
||||||
|
Species.PATRAT,
|
||||||
|
Species.WATCHOG,
|
||||||
|
Species.LILLIPUP,
|
||||||
|
Species.HERDIER,
|
||||||
|
Species.STOUTLAND,
|
||||||
|
Species.PURRLOIN,
|
||||||
|
Species.LIEPARD,
|
||||||
|
Species.PANSAGE,
|
||||||
|
Species.SIMISAGE,
|
||||||
|
Species.PANSEAR,
|
||||||
|
Species.SIMISEAR,
|
||||||
|
Species.PANPOUR,
|
||||||
|
Species.SIMIPOUR,
|
||||||
|
Species.MUNNA,
|
||||||
|
Species.MUSHARNA,
|
||||||
|
Species.PIDOVE,
|
||||||
|
Species.TRANQUILL,
|
||||||
|
Species.UNFEZANT,
|
||||||
|
Species.BLITZLE,
|
||||||
|
Species.ZEBSTRIKA,
|
||||||
|
Species.ROGGENROLA,
|
||||||
|
Species.BOLDORE,
|
||||||
|
Species.GIGALITH,
|
||||||
|
Species.WOOBAT,
|
||||||
|
Species.SWOOBAT,
|
||||||
|
Species.DRILBUR,
|
||||||
|
Species.EXCADRILL,
|
||||||
|
Species.AUDINO,
|
||||||
Species.TIMBURR,
|
Species.TIMBURR,
|
||||||
Species.GURDURR,
|
Species.GURDURR,
|
||||||
Species.CONKELDURR,
|
Species.CONKELDURR,
|
||||||
|
Species.TYMPOLE,
|
||||||
|
Species.PALPITOAD,
|
||||||
|
Species.SEISMITOAD,
|
||||||
|
Species.THROH,
|
||||||
|
Species.SAWK,
|
||||||
Species.SEWADDLE,
|
Species.SEWADDLE,
|
||||||
Species.SWADLOON,
|
Species.SWADLOON,
|
||||||
Species.LEAVANNY,
|
Species.LEAVANNY,
|
||||||
|
Species.VENIPEDE,
|
||||||
|
Species.WHIRLIPEDE,
|
||||||
|
Species.SCOLIPEDE,
|
||||||
|
Species.COTTONEE,
|
||||||
|
Species.WHIMSICOTT,
|
||||||
Species.PETILIL,
|
Species.PETILIL,
|
||||||
Species.LILLIGANT,
|
Species.LILLIGANT,
|
||||||
Species.BASCULIN,
|
Species.BASCULIN,
|
||||||
Species.SANDILE,
|
Species.SANDILE,
|
||||||
Species.KROKOROK,
|
Species.KROKOROK,
|
||||||
Species.KROOKODILE,
|
Species.KROOKODILE,
|
||||||
|
Species.DARUMAKA,
|
||||||
|
Species.DARMANITAN,
|
||||||
|
Species.MARACTUS,
|
||||||
|
Species.DWEBBLE,
|
||||||
|
Species.CRUSTLE,
|
||||||
|
Species.SCRAGGY,
|
||||||
|
Species.SCRAFTY,
|
||||||
|
Species.SIGILYPH,
|
||||||
|
Species.YAMASK,
|
||||||
|
Species.COFAGRIGUS,
|
||||||
|
Species.TIRTOUGA,
|
||||||
|
Species.CARRACOSTA,
|
||||||
|
Species.ARCHEN,
|
||||||
|
Species.ARCHEOPS,
|
||||||
|
Species.TRUBBISH,
|
||||||
|
Species.GARBODOR,
|
||||||
Species.ZORUA,
|
Species.ZORUA,
|
||||||
Species.ZOROARK,
|
Species.ZOROARK,
|
||||||
|
Species.MINCCINO,
|
||||||
|
Species.CINCCINO,
|
||||||
Species.GOTHITA,
|
Species.GOTHITA,
|
||||||
Species.GOTHORITA,
|
Species.GOTHORITA,
|
||||||
Species.GOTHITELLE,
|
Species.GOTHITELLE,
|
||||||
|
Species.SOLOSIS,
|
||||||
|
Species.DUOSION,
|
||||||
|
Species.REUNICLUS,
|
||||||
Species.DUCKLETT,
|
Species.DUCKLETT,
|
||||||
Species.SWANNA,
|
Species.SWANNA,
|
||||||
|
Species.VANILLITE,
|
||||||
|
Species.VANILLISH,
|
||||||
|
Species.VANILLUXE,
|
||||||
Species.DEERLING,
|
Species.DEERLING,
|
||||||
Species.SAWSBUCK,
|
Species.SAWSBUCK,
|
||||||
|
Species.EMOLGA,
|
||||||
|
Species.KARRABLAST,
|
||||||
|
Species.ESCAVALIER,
|
||||||
Species.FOONGUS,
|
Species.FOONGUS,
|
||||||
Species.AMOONGUSS,
|
Species.AMOONGUSS,
|
||||||
|
Species.FRILLISH,
|
||||||
|
Species.JELLICENT,
|
||||||
Species.ALOMOMOLA,
|
Species.ALOMOMOLA,
|
||||||
|
Species.JOLTIK,
|
||||||
|
Species.GALVANTULA,
|
||||||
|
Species.FERROSEED,
|
||||||
|
Species.FERROTHORN,
|
||||||
|
Species.KLINK,
|
||||||
|
Species.KLANG,
|
||||||
|
Species.KLINKLANG,
|
||||||
Species.TYNAMO,
|
Species.TYNAMO,
|
||||||
Species.EELEKTRIK,
|
Species.EELEKTRIK,
|
||||||
Species.EELEKTROSS,
|
Species.EELEKTROSS,
|
||||||
|
Species.ELGYEM,
|
||||||
|
Species.BEHEEYEM,
|
||||||
Species.LITWICK,
|
Species.LITWICK,
|
||||||
Species.LAMPENT,
|
Species.LAMPENT,
|
||||||
Species.CHANDELURE,
|
Species.CHANDELURE,
|
||||||
@ -62314,23 +62612,40 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.CUBCHOO,
|
Species.CUBCHOO,
|
||||||
Species.BEARTIC,
|
Species.BEARTIC,
|
||||||
Species.CRYOGONAL,
|
Species.CRYOGONAL,
|
||||||
|
Species.SHELMET,
|
||||||
|
Species.ACCELGOR,
|
||||||
|
Species.STUNFISK,
|
||||||
Species.MIENFOO,
|
Species.MIENFOO,
|
||||||
Species.MIENSHAO,
|
Species.MIENSHAO,
|
||||||
|
Species.DRUDDIGON,
|
||||||
|
Species.GOLETT,
|
||||||
|
Species.GOLURK,
|
||||||
Species.PAWNIARD,
|
Species.PAWNIARD,
|
||||||
Species.BISHARP,
|
Species.BISHARP,
|
||||||
|
Species.BOUFFALANT,
|
||||||
Species.RUFFLET,
|
Species.RUFFLET,
|
||||||
Species.BRAVIARY,
|
Species.BRAVIARY,
|
||||||
Species.VULLABY,
|
Species.VULLABY,
|
||||||
Species.MANDIBUZZ,
|
Species.MANDIBUZZ,
|
||||||
|
Species.HEATMOR,
|
||||||
|
Species.DURANT,
|
||||||
Species.DEINO,
|
Species.DEINO,
|
||||||
Species.ZWEILOUS,
|
Species.ZWEILOUS,
|
||||||
Species.HYDREIGON,
|
Species.HYDREIGON,
|
||||||
Species.LARVESTA,
|
Species.LARVESTA,
|
||||||
Species.VOLCARONA,
|
Species.VOLCARONA,
|
||||||
|
Species.COBALION,
|
||||||
|
Species.TERRAKION,
|
||||||
|
Species.VIRIZION,
|
||||||
Species.TORNADUS,
|
Species.TORNADUS,
|
||||||
Species.THUNDURUS,
|
Species.THUNDURUS,
|
||||||
|
Species.RESHIRAM,
|
||||||
|
Species.ZEKROM,
|
||||||
Species.LANDORUS,
|
Species.LANDORUS,
|
||||||
|
Species.KYUREM,
|
||||||
|
Species.KELDEO,
|
||||||
Species.MELOETTA,
|
Species.MELOETTA,
|
||||||
|
Species.GENESECT,
|
||||||
Species.CHESPIN,
|
Species.CHESPIN,
|
||||||
Species.QUILLADIN,
|
Species.QUILLADIN,
|
||||||
Species.CHESNAUGHT,
|
Species.CHESNAUGHT,
|
||||||
@ -62345,6 +62660,8 @@ export const tmSpecies: TmSpecies = {
|
|||||||
'battle-bond',
|
'battle-bond',
|
||||||
'ash',
|
'ash',
|
||||||
],
|
],
|
||||||
|
Species.BUNNELBY,
|
||||||
|
Species.DIGGERSBY,
|
||||||
Species.FLETCHLING,
|
Species.FLETCHLING,
|
||||||
Species.FLETCHINDER,
|
Species.FLETCHINDER,
|
||||||
Species.TALONFLAME,
|
Species.TALONFLAME,
|
||||||
@ -62354,14 +62671,43 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.LITLEO,
|
Species.LITLEO,
|
||||||
Species.PYROAR,
|
Species.PYROAR,
|
||||||
Species.FLABEBE,
|
Species.FLABEBE,
|
||||||
Species.FLOETTE,
|
[
|
||||||
|
Species.FLOETTE,
|
||||||
|
'red',
|
||||||
|
'yellow',
|
||||||
|
'orange',
|
||||||
|
'blue',
|
||||||
|
'white',
|
||||||
|
],
|
||||||
Species.FLORGES,
|
Species.FLORGES,
|
||||||
Species.SKIDDO,
|
Species.SKIDDO,
|
||||||
Species.GOGOAT,
|
Species.GOGOAT,
|
||||||
|
Species.PANCHAM,
|
||||||
|
Species.PANGORO,
|
||||||
|
Species.FURFROU,
|
||||||
|
Species.ESPURR,
|
||||||
|
Species.MEOWSTIC,
|
||||||
|
Species.HONEDGE,
|
||||||
|
Species.DOUBLADE,
|
||||||
|
Species.AEGISLASH,
|
||||||
|
Species.SPRITZEE,
|
||||||
|
Species.AROMATISSE,
|
||||||
|
Species.SWIRLIX,
|
||||||
|
Species.SLURPUFF,
|
||||||
|
Species.INKAY,
|
||||||
|
Species.MALAMAR,
|
||||||
|
Species.BINACLE,
|
||||||
|
Species.BARBARACLE,
|
||||||
Species.SKRELP,
|
Species.SKRELP,
|
||||||
Species.DRAGALGE,
|
Species.DRAGALGE,
|
||||||
Species.CLAUNCHER,
|
Species.CLAUNCHER,
|
||||||
Species.CLAWITZER,
|
Species.CLAWITZER,
|
||||||
|
Species.HELIOPTILE,
|
||||||
|
Species.HELIOLISK,
|
||||||
|
Species.TYRUNT,
|
||||||
|
Species.TYRANTRUM,
|
||||||
|
Species.AMAURA,
|
||||||
|
Species.AURORUS,
|
||||||
Species.SYLVEON,
|
Species.SYLVEON,
|
||||||
Species.HAWLUCHA,
|
Species.HAWLUCHA,
|
||||||
Species.DEDENNE,
|
Species.DEDENNE,
|
||||||
@ -62372,16 +62718,30 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.KLEFKI,
|
Species.KLEFKI,
|
||||||
Species.PHANTUMP,
|
Species.PHANTUMP,
|
||||||
Species.TREVENANT,
|
Species.TREVENANT,
|
||||||
|
Species.PUMPKABOO,
|
||||||
|
Species.GOURGEIST,
|
||||||
Species.BERGMITE,
|
Species.BERGMITE,
|
||||||
Species.AVALUGG,
|
Species.AVALUGG,
|
||||||
Species.NOIBAT,
|
Species.NOIBAT,
|
||||||
Species.NOIVERN,
|
Species.NOIVERN,
|
||||||
|
Species.XERNEAS,
|
||||||
|
Species.YVELTAL,
|
||||||
|
Species.ZYGARDE,
|
||||||
Species.DIANCIE,
|
Species.DIANCIE,
|
||||||
Species.HOOPA,
|
Species.HOOPA,
|
||||||
Species.VOLCANION,
|
Species.VOLCANION,
|
||||||
Species.ROWLET,
|
Species.ROWLET,
|
||||||
Species.DARTRIX,
|
Species.DARTRIX,
|
||||||
Species.DECIDUEYE,
|
Species.DECIDUEYE,
|
||||||
|
Species.LITTEN,
|
||||||
|
Species.TORRACAT,
|
||||||
|
Species.INCINEROAR,
|
||||||
|
Species.POPPLIO,
|
||||||
|
Species.BRIONNE,
|
||||||
|
Species.PRIMARINA,
|
||||||
|
Species.PIKIPEK,
|
||||||
|
Species.TRUMBEAK,
|
||||||
|
Species.TOUCANNON,
|
||||||
Species.YUNGOOS,
|
Species.YUNGOOS,
|
||||||
Species.GUMSHOOS,
|
Species.GUMSHOOS,
|
||||||
Species.GRUBBIN,
|
Species.GRUBBIN,
|
||||||
@ -62394,28 +62754,84 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.RIBOMBEE,
|
Species.RIBOMBEE,
|
||||||
Species.ROCKRUFF,
|
Species.ROCKRUFF,
|
||||||
Species.LYCANROC,
|
Species.LYCANROC,
|
||||||
|
Species.WISHIWASHI,
|
||||||
Species.MAREANIE,
|
Species.MAREANIE,
|
||||||
Species.TOXAPEX,
|
Species.TOXAPEX,
|
||||||
Species.MUDBRAY,
|
Species.MUDBRAY,
|
||||||
Species.MUDSDALE,
|
Species.MUDSDALE,
|
||||||
|
Species.DEWPIDER,
|
||||||
|
Species.ARAQUANID,
|
||||||
Species.FOMANTIS,
|
Species.FOMANTIS,
|
||||||
Species.LURANTIS,
|
Species.LURANTIS,
|
||||||
|
Species.MORELULL,
|
||||||
|
Species.SHIINOTIC,
|
||||||
Species.SALANDIT,
|
Species.SALANDIT,
|
||||||
Species.SALAZZLE,
|
Species.SALAZZLE,
|
||||||
|
Species.STUFFUL,
|
||||||
|
Species.BEWEAR,
|
||||||
Species.BOUNSWEET,
|
Species.BOUNSWEET,
|
||||||
Species.STEENEE,
|
Species.STEENEE,
|
||||||
Species.TSAREENA,
|
Species.TSAREENA,
|
||||||
|
Species.COMFEY,
|
||||||
Species.ORANGURU,
|
Species.ORANGURU,
|
||||||
Species.PASSIMIAN,
|
Species.PASSIMIAN,
|
||||||
|
Species.WIMPOD,
|
||||||
|
Species.GOLISOPOD,
|
||||||
Species.SANDYGAST,
|
Species.SANDYGAST,
|
||||||
Species.PALOSSAND,
|
Species.PALOSSAND,
|
||||||
|
Species.TYPE_NULL,
|
||||||
|
Species.SILVALLY,
|
||||||
|
Species.MINIOR,
|
||||||
Species.KOMALA,
|
Species.KOMALA,
|
||||||
|
Species.TURTONATOR,
|
||||||
|
Species.TOGEDEMARU,
|
||||||
Species.MIMIKYU,
|
Species.MIMIKYU,
|
||||||
Species.BRUXISH,
|
Species.BRUXISH,
|
||||||
|
Species.DRAMPA,
|
||||||
|
Species.DHELMISE,
|
||||||
Species.JANGMO_O,
|
Species.JANGMO_O,
|
||||||
Species.HAKAMO_O,
|
Species.HAKAMO_O,
|
||||||
Species.KOMMO_O,
|
Species.KOMMO_O,
|
||||||
|
Species.TAPU_KOKO,
|
||||||
|
Species.TAPU_LELE,
|
||||||
|
Species.TAPU_BULU,
|
||||||
|
Species.TAPU_FINI,
|
||||||
|
Species.SOLGALEO,
|
||||||
|
Species.LUNALA,
|
||||||
|
Species.NIHILEGO,
|
||||||
|
Species.BUZZWOLE,
|
||||||
|
Species.PHEROMOSA,
|
||||||
|
Species.XURKITREE,
|
||||||
|
Species.CELESTEELA,
|
||||||
|
Species.KARTANA,
|
||||||
|
Species.GUZZLORD,
|
||||||
|
Species.NECROZMA,
|
||||||
Species.MAGEARNA,
|
Species.MAGEARNA,
|
||||||
|
Species.MARSHADOW,
|
||||||
|
Species.POIPOLE,
|
||||||
|
Species.NAGANADEL,
|
||||||
|
Species.STAKATAKA,
|
||||||
|
Species.BLACEPHALON,
|
||||||
|
Species.ZERAORA,
|
||||||
|
Species.ALOLA_RATTATA,
|
||||||
|
Species.ALOLA_RATICATE,
|
||||||
|
Species.ALOLA_RAICHU,
|
||||||
|
Species.ALOLA_SANDSHREW,
|
||||||
|
Species.ALOLA_SANDSLASH,
|
||||||
|
Species.ALOLA_VULPIX,
|
||||||
|
Species.ALOLA_NINETALES,
|
||||||
|
Species.ALOLA_DIGLETT,
|
||||||
|
Species.ALOLA_DUGTRIO,
|
||||||
|
Species.ALOLA_MEOWTH,
|
||||||
|
Species.ALOLA_PERSIAN,
|
||||||
|
Species.ALOLA_GEODUDE,
|
||||||
|
Species.ALOLA_GRAVELER,
|
||||||
|
Species.ALOLA_GOLEM,
|
||||||
|
Species.ALOLA_GRIMER,
|
||||||
|
Species.ALOLA_MUK,
|
||||||
|
Species.ALOLA_EXEGGUTOR,
|
||||||
|
Species.ALOLA_MAROWAK,
|
||||||
|
Species.ETERNAL_FLOETTE,
|
||||||
Species.GROOKEY,
|
Species.GROOKEY,
|
||||||
Species.THWACKEY,
|
Species.THWACKEY,
|
||||||
Species.RILLABOOM,
|
Species.RILLABOOM,
|
||||||
@ -62596,21 +63012,6 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MUNKIDORI,
|
Species.MUNKIDORI,
|
||||||
Species.FEZANDIPITI,
|
Species.FEZANDIPITI,
|
||||||
Species.OGERPON,
|
Species.OGERPON,
|
||||||
Species.ALOLA_RAICHU,
|
|
||||||
Species.ALOLA_SANDSHREW,
|
|
||||||
Species.ALOLA_SANDSLASH,
|
|
||||||
Species.ALOLA_VULPIX,
|
|
||||||
Species.ALOLA_NINETALES,
|
|
||||||
Species.ALOLA_DIGLETT,
|
|
||||||
Species.ALOLA_DUGTRIO,
|
|
||||||
Species.ALOLA_MEOWTH,
|
|
||||||
Species.ALOLA_PERSIAN,
|
|
||||||
Species.ALOLA_GEODUDE,
|
|
||||||
Species.ALOLA_GRAVELER,
|
|
||||||
Species.ALOLA_GOLEM,
|
|
||||||
Species.ALOLA_GRIMER,
|
|
||||||
Species.ALOLA_MUK,
|
|
||||||
Species.ETERNAL_FLOETTE,
|
|
||||||
Species.GALAR_MEOWTH,
|
Species.GALAR_MEOWTH,
|
||||||
Species.GALAR_SLOWPOKE,
|
Species.GALAR_SLOWPOKE,
|
||||||
Species.GALAR_SLOWBRO,
|
Species.GALAR_SLOWBRO,
|
||||||
|
@ -4,13 +4,13 @@ import { Variant, VariantSet, variantColorCache } from '#app/data/variant';
|
|||||||
import { variantData } from '#app/data/variant';
|
import { variantData } from '#app/data/variant';
|
||||||
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info';
|
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info';
|
||||||
import { Moves } from "../data/enums/moves";
|
import { Moves } from "../data/enums/moves";
|
||||||
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move";
|
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr } from "../data/move";
|
||||||
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, starterPassiveAbilities } from '../data/pokemon-species';
|
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species';
|
||||||
import * as Utils from '../utils';
|
import * as Utils from '../utils';
|
||||||
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type';
|
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type';
|
||||||
import { getLevelTotalExp } from '../data/exp';
|
import { getLevelTotalExp } from '../data/exp';
|
||||||
import { Stat } from '../data/pokemon-stat';
|
import { Stat } from '../data/pokemon-stat';
|
||||||
import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier';
|
import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier';
|
||||||
import { PokeballType } from '../data/pokeball';
|
import { PokeballType } from '../data/pokeball';
|
||||||
import { Gender } from '../data/gender';
|
import { Gender } from '../data/gender';
|
||||||
import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims';
|
import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims';
|
||||||
@ -27,7 +27,7 @@ import { TempBattleStat } from '../data/temp-battle-stat';
|
|||||||
import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag';
|
import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag';
|
||||||
import { ArenaTagType } from "../data/enums/arena-tag-type";
|
import { ArenaTagType } from "../data/enums/arena-tag-type";
|
||||||
import { Biome } from "../data/enums/biome";
|
import { Biome } from "../data/enums/biome";
|
||||||
import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr } from '../data/ability';
|
import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr } from '../data/ability';
|
||||||
import { Abilities } from "#app/data/enums/abilities";
|
import { Abilities } from "#app/data/enums/abilities";
|
||||||
import PokemonData from '../system/pokemon-data';
|
import PokemonData from '../system/pokemon-data';
|
||||||
import Battle, { BattlerIndex } from '../battle';
|
import Battle, { BattlerIndex } from '../battle';
|
||||||
@ -37,13 +37,15 @@ import PartyUiHandler, { PartyOption, PartyUiMode } from '../ui/party-ui-handler
|
|||||||
import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
|
import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
|
||||||
import { LevelMoves } from '../data/pokemon-level-moves';
|
import { LevelMoves } from '../data/pokemon-level-moves';
|
||||||
import { DamageAchv, achvs } from '../system/achv';
|
import { DamageAchv, achvs } from '../system/achv';
|
||||||
import { DexAttr, StarterMoveset } from '../system/game-data';
|
import { DexAttr, StarterDataEntry, StarterMoveset } from '../system/game-data';
|
||||||
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from '@material/material-color-utilities';
|
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from '@material/material-color-utilities';
|
||||||
import { Nature, getNatureStatMultiplier } from '../data/nature';
|
import { Nature, getNatureStatMultiplier } from '../data/nature';
|
||||||
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms';
|
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms';
|
||||||
import { TerrainType } from '../data/terrain';
|
import { TerrainType } from '../data/terrain';
|
||||||
import { TrainerSlot } from '../data/trainer-config';
|
import { TrainerSlot } from '../data/trainer-config';
|
||||||
import { ABILITY_OVERRIDE, MOVE_OVERRIDE, MOVE_OVERRIDE_2, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_MOVE_OVERRIDE_2, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides';
|
import { ABILITY_OVERRIDE, MOVE_OVERRIDE, MOVE_OVERRIDE_2, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_MOVE_OVERRIDE_2, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides';
|
||||||
|
import { BerryType } from '../data/berry';
|
||||||
|
import i18next from '../plugins/i18n';
|
||||||
|
|
||||||
export enum FieldPosition {
|
export enum FieldPosition {
|
||||||
CENTER,
|
CENTER,
|
||||||
@ -455,6 +457,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getHeldItems(): PokemonHeldItemModifier[] {
|
||||||
|
if (!this.scene)
|
||||||
|
return [];
|
||||||
|
return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[];
|
||||||
|
}
|
||||||
|
|
||||||
updateScale(): void {
|
updateScale(): void {
|
||||||
this.setScale(this.getSpriteScale());
|
this.setScale(this.getSpriteScale());
|
||||||
}
|
}
|
||||||
@ -581,6 +589,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
ret *= 1.5;
|
ret *= 1.5;
|
||||||
break;
|
break;
|
||||||
case Stat.SPD:
|
case Stat.SPD:
|
||||||
|
// Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon
|
||||||
|
if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER))
|
||||||
|
|| (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)))
|
||||||
|
ret *= 2;
|
||||||
|
|
||||||
if (this.getTag(BattlerTagType.SLOW_START))
|
if (this.getTag(BattlerTagType.SLOW_START))
|
||||||
ret >>= 1;
|
ret >>= 1;
|
||||||
if (this.status && this.status.effect === StatusEffect.PARALYSIS)
|
if (this.status && this.status.effect === StatusEffect.PARALYSIS)
|
||||||
@ -1184,6 +1197,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return this.battleInfo.updateInfo(this, instant);
|
return this.battleInfo.updateInfo(this, instant);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleStats(visible: boolean): void {
|
||||||
|
this.battleInfo.toggleStats(visible);
|
||||||
|
}
|
||||||
|
|
||||||
addExp(exp: integer) {
|
addExp(exp: integer) {
|
||||||
const maxExpLevel = this.scene.getMaxExpLevel();
|
const maxExpLevel = this.scene.getMaxExpLevel();
|
||||||
const initialExp = this.exp;
|
const initialExp = this.exp;
|
||||||
@ -1320,7 +1337,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
const sourceAtk = new Utils.IntegerHolder(source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK, this, null, isCritical));
|
const sourceAtk = new Utils.IntegerHolder(source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK, this, null, isCritical));
|
||||||
const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source, move, isCritical));
|
const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source, move, isCritical));
|
||||||
const criticalMultiplier = isCritical ? 1.5 : 1;
|
const criticalMultiplier = new Utils.NumberHolder(isCritical ? 1.5 : 1);
|
||||||
|
applyAbAttrs(MultCritAbAttr, source, null, criticalMultiplier);
|
||||||
const screenMultiplier = new Utils.NumberHolder(1);
|
const screenMultiplier = new Utils.NumberHolder(1);
|
||||||
if (!isCritical) {
|
if (!isCritical) {
|
||||||
this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, move.category, this.scene.currentBattle.double, screenMultiplier);
|
this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, move.category, this.scene.currentBattle.double, screenMultiplier);
|
||||||
@ -1343,7 +1361,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
applyMoveAttrs(VariableDefAttr, source, this, move, targetDef);
|
applyMoveAttrs(VariableDefAttr, source, this, move, targetDef);
|
||||||
|
|
||||||
if (!isTypeImmune) {
|
if (!isTypeImmune) {
|
||||||
damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier);
|
damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value);
|
||||||
if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) {
|
if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) {
|
||||||
const burnDamageReductionCancelled = new Utils.BooleanHolder(false);
|
const burnDamageReductionCancelled = new Utils.BooleanHolder(false);
|
||||||
applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled);
|
applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled);
|
||||||
@ -1411,7 +1429,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo);
|
damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo);
|
||||||
this.turnData.damageTaken += damage.value;
|
this.turnData.damageTaken += damage.value;
|
||||||
if (isCritical)
|
if (isCritical)
|
||||||
this.scene.queueMessage('A critical hit!');
|
this.scene.queueMessage(i18next.t('battle:hitResultCriticalHit'));
|
||||||
this.scene.setPhaseQueueSplice();
|
this.scene.setPhaseQueueSplice();
|
||||||
if (source.isPlayer()) {
|
if (source.isPlayer()) {
|
||||||
this.scene.validateAchvs(DamageAchv, damage);
|
this.scene.validateAchvs(DamageAchv, damage);
|
||||||
@ -1429,16 +1447,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (source.turnData.hitsLeft === 1) {
|
if (source.turnData.hitsLeft === 1) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case HitResult.SUPER_EFFECTIVE:
|
case HitResult.SUPER_EFFECTIVE:
|
||||||
this.scene.queueMessage('It\'s super effective!');
|
this.scene.queueMessage(i18next.t('battle:hitResultSuperEffective'));
|
||||||
break;
|
break;
|
||||||
case HitResult.NOT_VERY_EFFECTIVE:
|
case HitResult.NOT_VERY_EFFECTIVE:
|
||||||
this.scene.queueMessage('It\'s not very effective…');
|
this.scene.queueMessage(i18next.t('battle:hitResultNotVeryEffective'));
|
||||||
break;
|
break;
|
||||||
case HitResult.NO_EFFECT:
|
case HitResult.NO_EFFECT:
|
||||||
this.scene.queueMessage(`It doesn\'t affect ${this.name}!`);
|
this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name }));
|
||||||
break;
|
break;
|
||||||
case HitResult.ONE_HIT_KO:
|
case HitResult.ONE_HIT_KO:
|
||||||
this.scene.queueMessage('It\'s a one-hit KO!');
|
this.scene.queueMessage(i18next.t('battle:hitResultOneHitKO'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1455,7 +1473,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier));
|
defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier));
|
||||||
}
|
}
|
||||||
if (!typeMultiplier.value)
|
if (!typeMultiplier.value)
|
||||||
this.scene.queueMessage(`It doesn\'t affect ${this.name}!`);
|
this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name }));
|
||||||
result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS;
|
result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1625,6 +1643,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
this.summonData.tags.push(tag);
|
this.summonData.tags.push(tag);
|
||||||
if (this instanceof PlayerPokemon && source.summonData.battleStats.find(bs => bs === 6))
|
if (this instanceof PlayerPokemon && source.summonData.battleStats.find(bs => bs === 6))
|
||||||
this.scene.validateAchv(achvs.TRANSFER_MAX_BATTLE_STAT);
|
this.scene.validateAchv(achvs.TRANSFER_MAX_BATTLE_STAT);
|
||||||
|
this.updateInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
getMoveHistory(): TurnMove[] {
|
getMoveHistory(): TurnMove[] {
|
||||||
@ -1925,6 +1944,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
this.summonDataPrimer = null;
|
this.summonDataPrimer = null;
|
||||||
}
|
}
|
||||||
|
this.updateInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
resetBattleData(): void {
|
resetBattleData(): void {
|
||||||
@ -2354,6 +2374,37 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addFriendship(friendship: integer): void {
|
||||||
|
const starterSpeciesId = this.species.getRootSpeciesId();
|
||||||
|
const fusionStarterSpeciesId = this.isFusion() ? this.fusionSpecies.getRootSpeciesId() : 0;
|
||||||
|
const starterData = [
|
||||||
|
this.scene.gameData.starterData[starterSpeciesId],
|
||||||
|
fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null
|
||||||
|
].filter(d => d);
|
||||||
|
const amount = new Utils.IntegerHolder(friendship);
|
||||||
|
const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1)));
|
||||||
|
if (amount.value > 0) {
|
||||||
|
this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount);
|
||||||
|
this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount);
|
||||||
|
|
||||||
|
this.friendship = Math.min(this.friendship + amount.value, 255);
|
||||||
|
if (this.friendship === 255)
|
||||||
|
this.scene.validateAchv(achvs.MAX_FRIENDSHIP);
|
||||||
|
starterData.forEach((sd: StarterDataEntry, i: integer) => {
|
||||||
|
const speciesId = !i ? starterSpeciesId : fusionStarterSpeciesId as Species;
|
||||||
|
sd.friendship = (sd.friendship || 0) + starterAmount.value;
|
||||||
|
if (sd.friendship >= getStarterValueFriendshipCap(speciesStarters[speciesId])) {
|
||||||
|
this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1);
|
||||||
|
sd.friendship = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.friendship = Math.max(this.friendship + amount.value, 0);
|
||||||
|
for (let sd of starterData)
|
||||||
|
sd.friendship = Math.max((sd.friendship || 0) + starterAmount.value, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getPossibleEvolution(evolution: SpeciesFormEvolution): Promise<Pokemon> {
|
getPossibleEvolution(evolution: SpeciesFormEvolution): Promise<Pokemon> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const evolutionSpecies = getPokemonSpecies(evolution.speciesId);
|
const evolutionSpecies = getPokemonSpecies(evolution.speciesId);
|
||||||
@ -2420,13 +2471,18 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
|
|
||||||
private handleSpecialEvolutions(evolution: SpeciesFormEvolution) {
|
private handleSpecialEvolutions(evolution: SpeciesFormEvolution) {
|
||||||
const isFusion = evolution instanceof FusionSpeciesFormEvolution;
|
const isFusion = evolution instanceof FusionSpeciesFormEvolution;
|
||||||
if ((!isFusion ? this.species : this.fusionSpecies).speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) {
|
|
||||||
const newEvolution = pokemonEvolutions[this.species.speciesId][1];
|
const evoSpecies = (!isFusion ? this.species : this.fusionSpecies)
|
||||||
|
if (evoSpecies.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) {
|
||||||
|
const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1];
|
||||||
|
|
||||||
if (newEvolution.condition.predicate(this)) {
|
if (newEvolution.condition.predicate(this)) {
|
||||||
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature);
|
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature);
|
||||||
newPokemon.natureOverride = this.natureOverride;
|
newPokemon.natureOverride = this.natureOverride;
|
||||||
newPokemon.passive = this.passive;
|
newPokemon.passive = this.passive;
|
||||||
newPokemon.moveset = this.moveset.slice();
|
newPokemon.moveset = this.moveset.slice();
|
||||||
|
newPokemon.moveset = this.copyMoveset();
|
||||||
|
newPokemon.luck = this.luck;
|
||||||
newPokemon.fusionSpecies = this.fusionSpecies;
|
newPokemon.fusionSpecies = this.fusionSpecies;
|
||||||
newPokemon.fusionFormIndex = this.fusionFormIndex;
|
newPokemon.fusionFormIndex = this.fusionFormIndex;
|
||||||
newPokemon.fusionAbilityIndex = this.fusionAbilityIndex;
|
newPokemon.fusionAbilityIndex = this.fusionAbilityIndex;
|
||||||
@ -2434,8 +2490,9 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
newPokemon.fusionVariant = this.fusionVariant;
|
newPokemon.fusionVariant = this.fusionVariant;
|
||||||
newPokemon.fusionGender = this.fusionGender;
|
newPokemon.fusionGender = this.fusionGender;
|
||||||
newPokemon.fusionLuck = this.fusionLuck;
|
newPokemon.fusionLuck = this.fusionLuck;
|
||||||
|
|
||||||
this.scene.getParty().push(newPokemon);
|
this.scene.getParty().push(newPokemon);
|
||||||
newPokemon.evolve(newEvolution);
|
newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution));
|
||||||
const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
|
const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
|
||||||
&& (m as PokemonHeldItemModifier).pokemonId === this.id, true) as PokemonHeldItemModifier[];
|
&& (m as PokemonHeldItemModifier).pokemonId === this.id, true) as PokemonHeldItemModifier[];
|
||||||
modifiers.forEach(m => {
|
modifiers.forEach(m => {
|
||||||
@ -2533,6 +2590,15 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
this.updateFusionPalette();
|
this.updateFusionPalette();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns a deep copy of this Pokemon's moveset array */
|
||||||
|
copyMoveset(): PokemonMove[] {
|
||||||
|
let newMoveset = [];
|
||||||
|
this.moveset.forEach(move =>
|
||||||
|
newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual)));
|
||||||
|
|
||||||
|
return newMoveset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EnemyPokemon extends Pokemon {
|
export class EnemyPokemon extends Pokemon {
|
||||||
@ -2671,9 +2737,13 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
let targetScores: integer[] = [];
|
let targetScores: integer[] = [];
|
||||||
|
|
||||||
for (let mt of moveTargets[move.id]) {
|
for (let mt of moveTargets[move.id]) {
|
||||||
|
// Prevent a target score from being calculated when there isn't a target
|
||||||
|
if (mt === -1)
|
||||||
|
break;
|
||||||
|
|
||||||
const target = this.scene.getField()[mt];
|
const target = this.scene.getField()[mt];
|
||||||
let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1);
|
let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1);
|
||||||
if (move.name.endsWith(' (N)'))
|
if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move))
|
||||||
targetScore = -20;
|
targetScore = -20;
|
||||||
else if (move instanceof AttackMove) {
|
else if (move instanceof AttackMove) {
|
||||||
const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove);
|
const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove);
|
||||||
@ -2741,8 +2811,14 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0;
|
return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!sortedBenefitScores.length)
|
if (!sortedBenefitScores.length) {
|
||||||
|
// Set target to -1 when using a counter move
|
||||||
|
// This is the same as when the player does so
|
||||||
|
if (!!move.findAttr(attr => attr instanceof CounterDamageAttr))
|
||||||
|
return [-1];
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
let targetWeights = sortedBenefitScores.map(s => s[1]);
|
let targetWeights = sortedBenefitScores.map(s => s[1]);
|
||||||
const lowestWeight = targetWeights[targetWeights.length - 1];
|
const lowestWeight = targetWeights[targetWeights.length - 1];
|
||||||
@ -2993,6 +3069,7 @@ export class PokemonSummonData {
|
|||||||
export class PokemonBattleData {
|
export class PokemonBattleData {
|
||||||
public hitCount: integer = 0;
|
public hitCount: integer = 0;
|
||||||
public endured: boolean = false;
|
public endured: boolean = false;
|
||||||
|
public berriesEaten: BerryType[] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export class PokemonBattleSummonData {
|
export class PokemonBattleSummonData {
|
||||||
|
@ -39,15 +39,21 @@ export class LoadingScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
this.loadAtlas('namebox', 'ui');
|
this.loadAtlas('namebox', 'ui');
|
||||||
this.loadImage('pbinfo_player', 'ui');
|
this.loadImage('pbinfo_player', 'ui');
|
||||||
|
this.loadImage('pbinfo_player_stats', 'ui');
|
||||||
this.loadImage('pbinfo_player_mini', 'ui');
|
this.loadImage('pbinfo_player_mini', 'ui');
|
||||||
|
this.loadImage('pbinfo_player_mini_stats', 'ui');
|
||||||
this.loadAtlas('pbinfo_player_type', 'ui');
|
this.loadAtlas('pbinfo_player_type', 'ui');
|
||||||
this.loadAtlas('pbinfo_player_type1', 'ui');
|
this.loadAtlas('pbinfo_player_type1', 'ui');
|
||||||
this.loadAtlas('pbinfo_player_type2', 'ui');
|
this.loadAtlas('pbinfo_player_type2', 'ui');
|
||||||
this.loadImage('pbinfo_enemy_mini', 'ui');
|
this.loadImage('pbinfo_enemy_mini', 'ui');
|
||||||
|
this.loadImage('pbinfo_enemy_mini_stats', 'ui');
|
||||||
this.loadImage('pbinfo_enemy_boss', 'ui');
|
this.loadImage('pbinfo_enemy_boss', 'ui');
|
||||||
|
this.loadImage('pbinfo_enemy_boss_stats', 'ui');
|
||||||
this.loadAtlas('pbinfo_enemy_type', 'ui');
|
this.loadAtlas('pbinfo_enemy_type', 'ui');
|
||||||
this.loadAtlas('pbinfo_enemy_type1', 'ui');
|
this.loadAtlas('pbinfo_enemy_type1', 'ui');
|
||||||
this.loadAtlas('pbinfo_enemy_type2', 'ui');
|
this.loadAtlas('pbinfo_enemy_type2', 'ui');
|
||||||
|
this.loadAtlas('pbinfo_stat', 'ui');
|
||||||
|
this.loadAtlas('pbinfo_stat_numbers', 'ui');
|
||||||
this.loadImage('overlay_lv', 'ui');
|
this.loadImage('overlay_lv', 'ui');
|
||||||
this.loadAtlas('numbers', 'ui');
|
this.loadAtlas('numbers', 'ui');
|
||||||
this.loadAtlas('numbers_red', 'ui');
|
this.loadAtlas('numbers_red', 'ui');
|
||||||
@ -61,6 +67,7 @@ export class LoadingScene extends SceneBase {
|
|||||||
this.loadImage('achv_bar_2', 'ui');
|
this.loadImage('achv_bar_2', 'ui');
|
||||||
this.loadImage('achv_bar_3', 'ui');
|
this.loadImage('achv_bar_3', 'ui');
|
||||||
this.loadImage('achv_bar_4', 'ui');
|
this.loadImage('achv_bar_4', 'ui');
|
||||||
|
this.loadImage('achv_bar_5', 'ui');
|
||||||
this.loadImage('shiny_star', 'ui', 'shiny.png');
|
this.loadImage('shiny_star', 'ui', 'shiny.png');
|
||||||
this.loadImage('shiny_star_1', 'ui', 'shiny_1.png');
|
this.loadImage('shiny_star_1', 'ui', 'shiny_1.png');
|
||||||
this.loadImage('shiny_star_2', 'ui', 'shiny_2.png');
|
this.loadImage('shiny_star_2', 'ui', 'shiny_2.png');
|
||||||
@ -216,6 +223,7 @@ export class LoadingScene extends SceneBase {
|
|||||||
this.loadSe('sparkle');
|
this.loadSe('sparkle');
|
||||||
this.loadSe('restore');
|
this.loadSe('restore');
|
||||||
this.loadSe('shine');
|
this.loadSe('shine');
|
||||||
|
this.loadSe('shing');
|
||||||
this.loadSe('charge');
|
this.loadSe('charge');
|
||||||
this.loadSe('beam');
|
this.loadSe('beam');
|
||||||
this.loadSe('upgrade');
|
this.loadSe('upgrade');
|
||||||
|
52
src/locales/de/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} erscheint.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nmöchte kämpfen!",
|
||||||
|
"singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!",
|
||||||
|
"multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!",
|
||||||
|
"playerComeBack": "Komm zurück, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!",
|
||||||
|
"playerGo": "Los! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!",
|
||||||
|
"switchQuestion": "Willst du\n{{pokemonName}} auswechseln?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Los! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!",
|
||||||
|
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.",
|
||||||
|
"moveDisabled": "{{moveName}} ist deaktiviert!",
|
||||||
|
"noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.",
|
||||||
|
"noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!",
|
||||||
|
"noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!",
|
||||||
|
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!",
|
||||||
|
"noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.",
|
||||||
|
"noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "auswechseln",
|
||||||
|
"escapeVerbFlee": "flucht",
|
||||||
|
"notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
6
src/locales/de/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POWER",
|
||||||
|
} as const;
|
@ -35,33 +35,13 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?",
|
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?",
|
||||||
"boy": "Junge",
|
"boy": "Junge",
|
||||||
"girl": "Mädchen",
|
"girl": "Mädchen",
|
||||||
"bossAppeared": "{{bossName}} erscheint.",
|
|
||||||
"trainerAppeared": "{{trainerName}}\nmöchte kämpfen!",
|
|
||||||
"singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!",
|
|
||||||
"multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!",
|
|
||||||
"playerComeBack": "Komm zurück, {{pokemonName}}!",
|
|
||||||
"trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!",
|
|
||||||
"playerGo": "Los! {{pokemonName}}!",
|
|
||||||
"trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!",
|
|
||||||
"switchQuestion": "Willst du\n{{pokemonName}} auswechseln?",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "Los! {{pokemonName}}!",
|
|
||||||
"levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!",
|
|
||||||
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.",
|
|
||||||
"moveDisabled": "{{moveName}} ist deaktiviert!",
|
|
||||||
"noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.",
|
|
||||||
"noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!",
|
|
||||||
"noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!",
|
|
||||||
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!",
|
|
||||||
"noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.",
|
|
||||||
"noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!",
|
|
||||||
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!",
|
|
||||||
"escapeVerbSwitch": "auswechseln",
|
|
||||||
"escapeVerbFlee": "flucht",
|
|
||||||
"notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online",
|
||||||
|
"empty":"Empty",
|
||||||
|
"yes":"Yes",
|
||||||
|
"no":"No",
|
||||||
|
"confirmStartTeam":'Begin with these Pokémon?',
|
||||||
} as const;
|
} as const;
|
@ -605,208 +605,208 @@ export const pokemon: SimpleTranslationEntries = {
|
|||||||
"tynamo": "Zapplardin",
|
"tynamo": "Zapplardin",
|
||||||
"eelektrik": "Zapplalek",
|
"eelektrik": "Zapplalek",
|
||||||
"eelektross": "Zapplarang",
|
"eelektross": "Zapplarang",
|
||||||
"elgyem": "Elgyem",
|
"elgyem": "Pygraulon",
|
||||||
"beheeyem": "Beheeyem",
|
"beheeyem": "Megalon",
|
||||||
"litwick": "Litwick",
|
"litwick": "Lichtel",
|
||||||
"lampent": "Lampent",
|
"lampent": "Laternecto",
|
||||||
"chandelure": "Chandelure",
|
"chandelure": "Skelabra",
|
||||||
"axew": "Axew",
|
"axew": "Milza",
|
||||||
"fraxure": "Fraxure",
|
"fraxure": "Scharfax",
|
||||||
"haxorus": "Haxorus",
|
"haxorus": "Maxax",
|
||||||
"cubchoo": "Cubchoo",
|
"cubchoo": "Petznief",
|
||||||
"beartic": "Beartic",
|
"beartic": "Siberio",
|
||||||
"cryogonal": "Cryogonal",
|
"cryogonal": "Frigometri",
|
||||||
"shelmet": "Shelmet",
|
"shelmet": "Schnuthelm",
|
||||||
"accelgor": "Accelgor",
|
"accelgor": "Hydragil",
|
||||||
"stunfisk": "Stunfisk",
|
"stunfisk": "Flunschlik",
|
||||||
"mienfoo": "Mienfoo",
|
"mienfoo": "Lin-Fu",
|
||||||
"mienshao": "Mienshao",
|
"mienshao": "Wie-Shu",
|
||||||
"druddigon": "Druddigon",
|
"druddigon": "Shardrago",
|
||||||
"golett": "Golett",
|
"golett": "Golbit",
|
||||||
"golurk": "Golurk",
|
"golurk": "Golgantes",
|
||||||
"pawniard": "Pawniard",
|
"pawniard": "Gladiantri",
|
||||||
"bisharp": "Bisharp",
|
"bisharp": "Ceasurio",
|
||||||
"bouffalant": "Bouffalant",
|
"bouffalant": "Bisofank",
|
||||||
"rufflet": "Rufflet",
|
"rufflet": "Geronimatz",
|
||||||
"braviary": "Braviary",
|
"braviary": "Washakwil",
|
||||||
"vullaby": "Vullaby",
|
"vullaby": "Skallyk",
|
||||||
"mandibuzz": "Mandibuzz",
|
"mandibuzz": "Grypheldis",
|
||||||
"heatmor": "Heatmor",
|
"heatmor": "Furnifraß",
|
||||||
"durant": "Durant",
|
"durant": "Fermicula",
|
||||||
"deino": "Deino",
|
"deino": "Kapuno",
|
||||||
"zweilous": "Zweilous",
|
"zweilous": "Duodino",
|
||||||
"hydreigon": "Hydreigon",
|
"hydreigon": "Trikephalo",
|
||||||
"larvesta": "Larvesta",
|
"larvesta": "Ignivor",
|
||||||
"volcarona": "Volcarona",
|
"volcarona": "Ramoth",
|
||||||
"cobalion": "Cobalion",
|
"cobalion": "Kobalium",
|
||||||
"terrakion": "Terrakion",
|
"terrakion": "Terrakium",
|
||||||
"virizion": "Virizion",
|
"virizion": "Viridium",
|
||||||
"tornadus": "Tornadus",
|
"tornadus": "Boreos",
|
||||||
"thundurus": "Thundurus",
|
"thundurus": "Voltolos",
|
||||||
"reshiram": "Reshiram",
|
"reshiram": "Reshiram",
|
||||||
"zekrom": "Zekrom",
|
"zekrom": "Zekrom",
|
||||||
"landorus": "Landorus",
|
"landorus": "Dementeros",
|
||||||
"kyurem": "Kyurem",
|
"kyurem": "Kyurem",
|
||||||
"keldeo": "Keldeo",
|
"keldeo": "Keldeo",
|
||||||
"meloetta": "Meloetta",
|
"meloetta": "Meloetta",
|
||||||
"genesect": "Genesect",
|
"genesect": "Genesect",
|
||||||
"chespin": "Chespin",
|
"chespin": "Igamaro",
|
||||||
"quilladin": "Quilladin",
|
"quilladin": "Igastarnish",
|
||||||
"chesnaught": "Chesnaught",
|
"chesnaught": "Brigaron",
|
||||||
"fennekin": "Fennekin",
|
"fennekin": "Fynx",
|
||||||
"braixen": "Braixen",
|
"braixen": "Rutena",
|
||||||
"delphox": "Delphox",
|
"delphox": "Fennexis",
|
||||||
"froakie": "Froakie",
|
"froakie": "Froxy",
|
||||||
"frogadier": "Frogadier",
|
"frogadier": "Amphizel",
|
||||||
"greninja": "Greninja",
|
"greninja": "Quajutsu",
|
||||||
"bunnelby": "Bunnelby",
|
"bunnelby": "Scoppel",
|
||||||
"diggersby": "Diggersby",
|
"diggersby": "Grebbit",
|
||||||
"fletchling": "Fletchling",
|
"fletchling": "Dartiri",
|
||||||
"fletchinder": "Fletchinder",
|
"fletchinder": "Dartignis",
|
||||||
"talonflame": "Talonflame",
|
"talonflame": "Fiaro",
|
||||||
"scatterbug": "Scatterbug",
|
"scatterbug": "Purmel",
|
||||||
"spewpa": "Spewpa",
|
"spewpa": "Puponcho",
|
||||||
"vivillon": "Vivillon",
|
"vivillon": "Vivillon",
|
||||||
"litleo": "Litleo",
|
"litleo": "Leufeo",
|
||||||
"pyroar": "Pyroar",
|
"pyroar": "Pyroleo",
|
||||||
"flabebe": "Flabébé",
|
"flabebe": "Flabébé",
|
||||||
"floette": "Floette",
|
"floette": "Floette",
|
||||||
"florges": "Florges",
|
"florges": "Florges",
|
||||||
"skiddo": "Skiddo",
|
"skiddo": "Mähikel",
|
||||||
"gogoat": "Gogoat",
|
"gogoat": "Chevrumm",
|
||||||
"pancham": "Pancham",
|
"pancham": "Pam-Pam",
|
||||||
"pangoro": "Pangoro",
|
"pangoro": "Pandrago",
|
||||||
"furfrou": "Furfrou",
|
"furfrou": "Coiffwaff",
|
||||||
"espurr": "Espurr",
|
"espurr": "Psiau",
|
||||||
"meowstic": "Meowstic",
|
"meowstic": "Psiaugon",
|
||||||
"honedge": "Honedge",
|
"honedge": "Gramokles",
|
||||||
"doublade": "Doublade",
|
"doublade": "Duokles",
|
||||||
"aegislash": "Aegislash",
|
"aegislash": "Durengard",
|
||||||
"spritzee": "Spritzee",
|
"spritzee": "Parfi",
|
||||||
"aromatisse": "Aromatisse",
|
"aromatisse": "Parfinesse",
|
||||||
"swirlix": "Swirlix",
|
"swirlix": "Flauschling",
|
||||||
"slurpuff": "Slurpuff",
|
"slurpuff": "Sabbaione",
|
||||||
"inkay": "Inkay",
|
"inkay": "Iscalar",
|
||||||
"malamar": "Malamar",
|
"malamar": "Calamanero",
|
||||||
"binacle": "Binacle",
|
"binacle": "Bithora",
|
||||||
"barbaracle": "Barbaracle",
|
"barbaracle": "Thanathora",
|
||||||
"skrelp": "Skrelp",
|
"skrelp": "Algitt",
|
||||||
"dragalge": "Dragalge",
|
"dragalge": "Tandrak",
|
||||||
"clauncher": "Clauncher",
|
"clauncher": "Scampisto",
|
||||||
"clawitzer": "Clawitzer",
|
"clawitzer": "Wummer",
|
||||||
"helioptile": "Helioptile",
|
"helioptile": "Eguana",
|
||||||
"heliolisk": "Heliolisk",
|
"heliolisk": "Elezard",
|
||||||
"tyrunt": "Tyrunt",
|
"tyrunt": "Balgoras",
|
||||||
"tyrantrum": "Tyrantrum",
|
"tyrantrum": "Monargoras",
|
||||||
"amaura": "Amaura",
|
"amaura": "Amarino",
|
||||||
"aurorus": "Aurorus",
|
"aurorus": "Amagarga",
|
||||||
"sylveon": "Sylveon",
|
"sylveon": "Feelinara",
|
||||||
"hawlucha": "Hawlucha",
|
"hawlucha": "Resladero",
|
||||||
"dedenne": "Dedenne",
|
"dedenne": "Dedenne",
|
||||||
"carbink": "Carbink",
|
"carbink": "Rocara",
|
||||||
"goomy": "Goomy",
|
"goomy": "Viscora",
|
||||||
"sliggoo": "Sliggoo",
|
"sliggoo": "Viscargot",
|
||||||
"goodra": "Goodra",
|
"goodra": "Viscogon",
|
||||||
"klefki": "Klefki",
|
"klefki": "Clavion",
|
||||||
"phantump": "Phantump",
|
"phantump": "Paragoni",
|
||||||
"trevenant": "Trevenant",
|
"trevenant": "Trombork",
|
||||||
"pumpkaboo": "Pumpkaboo",
|
"pumpkaboo": "Irrbis",
|
||||||
"gourgeist": "Gourgeist",
|
"gourgeist": "Pumpdjinn",
|
||||||
"bergmite": "Bergmite",
|
"bergmite": "Arktip",
|
||||||
"avalugg": "Avalugg",
|
"avalugg": "Arktilas",
|
||||||
"noibat": "Noibat",
|
"noibat": "eF-eM",
|
||||||
"noivern": "Noivern",
|
"noivern": "UHaFnir",
|
||||||
"xerneas": "Xerneas",
|
"xerneas": "Xerneas",
|
||||||
"yveltal": "Yveltal",
|
"yveltal": "Yveltal",
|
||||||
"zygarde": "Zygarde",
|
"zygarde": "Zygarde",
|
||||||
"diancie": "Diancie",
|
"diancie": "Diancie",
|
||||||
"hoopa": "Hoopa",
|
"hoopa": "Hoopa",
|
||||||
"volcanion": "Volcanion",
|
"volcanion": "Volcanion",
|
||||||
"rowlet": "Rowlet",
|
"rowlet": "Bauz",
|
||||||
"dartrix": "Dartrix",
|
"dartrix": "Arboretoss",
|
||||||
"decidueye": "Decidueye",
|
"decidueye": "Silvarro",
|
||||||
"litten": "Litten",
|
"litten": "Flamiau",
|
||||||
"torracat": "Torracat",
|
"torracat": "Miezunder",
|
||||||
"incineroar": "Incineroar",
|
"incineroar": "Fuegro",
|
||||||
"popplio": "Popplio",
|
"popplio": "Robball",
|
||||||
"brionne": "Brionne",
|
"brionne": "Marikeck",
|
||||||
"primarina": "Primarina",
|
"primarina": "Primarene",
|
||||||
"pikipek": "Pikipek",
|
"pikipek": "Peppeck",
|
||||||
"trumbeak": "Trumbeak",
|
"trumbeak": "Trompeck",
|
||||||
"toucannon": "Toucannon",
|
"toucannon": "Tukanon",
|
||||||
"yungoos": "Yungoos",
|
"yungoos": "Mangunior",
|
||||||
"gumshoos": "Gumshoos",
|
"gumshoos": "Manguspektor",
|
||||||
"grubbin": "Grubbin",
|
"grubbin": "Mabula",
|
||||||
"charjabug": "Charjabug",
|
"charjabug": "Akkup",
|
||||||
"vikavolt": "Vikavolt",
|
"vikavolt": "Donarion",
|
||||||
"crabrawler": "Crabrawler",
|
"crabrawler": "Krabbox",
|
||||||
"crabominable": "Crabominable",
|
"crabominable": "Krawell",
|
||||||
"oricorio": "Oricorio",
|
"oricorio": "Choreogel",
|
||||||
"cutiefly": "Cutiefly",
|
"cutiefly": "Wommel",
|
||||||
"ribombee": "Ribombee",
|
"ribombee": "Bandelby",
|
||||||
"rockruff": "Rockruff",
|
"rockruff": "Wuffels",
|
||||||
"lycanroc": "Lycanroc",
|
"lycanroc": "Wolwerock",
|
||||||
"wishiwashi": "Wishiwashi",
|
"wishiwashi": "Lusardin",
|
||||||
"mareanie": "Mareanie",
|
"mareanie": "Garstella",
|
||||||
"toxapex": "Toxapex",
|
"toxapex": "Aggrostella",
|
||||||
"mudbray": "Mudbray",
|
"mudbray": "Pampuli",
|
||||||
"mudsdale": "Mudsdale",
|
"mudsdale": "Pampross",
|
||||||
"dewpider": "Dewpider",
|
"dewpider": "Araqua",
|
||||||
"araquanid": "Araquanid",
|
"araquanid": "Aranestro",
|
||||||
"fomantis": "Fomantis",
|
"fomantis": "Imantis",
|
||||||
"lurantis": "Lurantis",
|
"lurantis": "Mantidea",
|
||||||
"morelull": "Morelull",
|
"morelull": "Bubungus",
|
||||||
"shiinotic": "Shiinotic",
|
"shiinotic": "Lamellus",
|
||||||
"salandit": "Salandit",
|
"salandit": "Molunk",
|
||||||
"salazzle": "Salazzle",
|
"salazzle": "Amfira",
|
||||||
"stufful": "Stufful",
|
"stufful": "Velursi",
|
||||||
"bewear": "Bewear",
|
"bewear": "Kosturso",
|
||||||
"bounsweet": "Bounsweet",
|
"bounsweet": "Frubberl",
|
||||||
"steenee": "Steenee",
|
"steenee": "Frubaila",
|
||||||
"tsareena": "Tsareena",
|
"tsareena": "Fruyal",
|
||||||
"comfey": "Comfey",
|
"comfey": "Curelei",
|
||||||
"oranguru": "Oranguru",
|
"oranguru": "Kommandutan",
|
||||||
"passimian": "Passimian",
|
"passimian": "Quartermak",
|
||||||
"wimpod": "Wimpod",
|
"wimpod": "Reißlaus",
|
||||||
"golisopod": "Golisopod",
|
"golisopod": "Tectass",
|
||||||
"sandygast": "Sandygast",
|
"sandygast": "Sankabuh",
|
||||||
"palossand": "Palossand",
|
"palossand": "Colossand",
|
||||||
"pyukumuku": "Pyukumuku",
|
"pyukumuku": "Gufa",
|
||||||
"type_null": "Type: Null",
|
"type_null": "Typ:Null",
|
||||||
"silvally": "Silvally",
|
"silvally": "Amigento",
|
||||||
"minior": "Minior",
|
"minior": "Meteno",
|
||||||
"komala": "Komala",
|
"komala": "Koalelu",
|
||||||
"turtonator": "Turtonator",
|
"turtonator": "Turtonator",
|
||||||
"togedemaru": "Togedemaru",
|
"togedemaru": "Togedemaru",
|
||||||
"mimikyu": "Mimikyu",
|
"mimikyu": "Mimigma",
|
||||||
"bruxish": "Bruxish",
|
"bruxish": "Knirfish",
|
||||||
"drampa": "Drampa",
|
"drampa": "Sen-Long",
|
||||||
"dhelmise": "Dhelmise",
|
"dhelmise": "Moruda",
|
||||||
"jangmo_o": "Jangmo-o",
|
"jangmo_o": "Miniras",
|
||||||
"hakamo_o": "Hakamo-o",
|
"hakamo_o": "Mediras",
|
||||||
"kommo_o": "Kommo-o",
|
"kommo_o": "Grandiras",
|
||||||
"tapu_koko": "Tapu Koko",
|
"tapu_koko": "Kapu-Riki",
|
||||||
"tapu_lele": "Tapu Lele",
|
"tapu_lele": "Kapu-Fala",
|
||||||
"tapu_bulu": "Tapu Bulu",
|
"tapu_bulu": "Kapu-Toro",
|
||||||
"tapu_fini": "Tapu Fini",
|
"tapu_fini": "Kapu-Kime",
|
||||||
"cosmog": "Cosmog",
|
"cosmog": "Cosmog",
|
||||||
"cosmoem": "Cosmoem",
|
"cosmoem": "Cosmovum",
|
||||||
"solgaleo": "Solgaleo",
|
"solgaleo": "Solgaleo",
|
||||||
"lunala": "Lunala",
|
"lunala": "Lunala",
|
||||||
"nihilego": "Nihilego",
|
"nihilego": "Anego",
|
||||||
"buzzwole": "Buzzwole",
|
"buzzwole": "Masskito",
|
||||||
"pheromosa": "Pheromosa",
|
"pheromosa": "Schabelle",
|
||||||
"xurkitree": "Xurkitree",
|
"xurkitree": "Voltriant",
|
||||||
"celesteela": "Celesteela",
|
"celesteela": "Kaguron",
|
||||||
"kartana": "Kartana",
|
"kartana": "Katagami",
|
||||||
"guzzlord": "Guzzlord",
|
"guzzlord": "Schlingking",
|
||||||
"necrozma": "Necrozma",
|
"necrozma": "Necrozma",
|
||||||
"magearna": "Magearna",
|
"magearna": "Magearna",
|
||||||
"marshadow": "Marshadow",
|
"marshadow": "Marshadow",
|
||||||
"poipole": "Poipole",
|
"poipole": "Venicro",
|
||||||
"naganadel": "Naganadel",
|
"naganadel": "Agoyon",
|
||||||
"stakataka": "Stakataka",
|
"stakataka": "Muramura",
|
||||||
"blacephalon": "Blacephalon",
|
"blacephalon": "Kopplosio",
|
||||||
"zeraora": "Zeraora",
|
"zeraora": "Zeraora",
|
||||||
"meltan": "Meltan",
|
"meltan": "Meltan",
|
||||||
"melmetal": "Melmetal",
|
"melmetal": "Melmetal",
|
||||||
|
@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
"pokerus": `A daily random 3 selectable starters have a purple border.
|
"pokerus": `A daily random 3 selectable starters have a purple border.
|
||||||
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
||||||
|
|
||||||
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
$Most non-consumable item effects will stack in various ways.
|
$Most non-consumable item effects will stack in various ways.
|
||||||
|
52
src/locales/en/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} appeared.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
||||||
|
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
||||||
|
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
||||||
|
"playerComeBack": "Come back, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
||||||
|
"playerGo": "Go! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
||||||
|
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Go! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
||||||
|
"moveDisabled": "{{moveName}} is disabled!",
|
||||||
|
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
||||||
|
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
||||||
|
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
||||||
|
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
||||||
|
"noEscapeForce": "An unseen force\nprevents escape.",
|
||||||
|
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "switching",
|
||||||
|
"escapeVerbFlee": "fleeing",
|
||||||
|
"notDisabled": "{{moveName}} is disabled\nno more!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
@ -35,52 +35,13 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Are you a boy or a girl?",
|
"boyOrGirl": "Are you a boy or a girl?",
|
||||||
"boy": "Boy",
|
"boy": "Boy",
|
||||||
"girl": "Girl",
|
"girl": "Girl",
|
||||||
"bossAppeared": "{{bossName}} appeared.",
|
|
||||||
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
|
||||||
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
|
||||||
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
|
||||||
"playerComeBack": "Come back, {{pokemonName}}!",
|
|
||||||
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
|
||||||
"playerGo": "Go! {{pokemonName}}!",
|
|
||||||
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
|
||||||
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
|
||||||
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
|
||||||
"pokemonCaught": "{{pokemonName}} was caught!",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "Go! {{pokemonName}}!",
|
|
||||||
"attackFailed": "But it failed!",
|
|
||||||
"attackHitsCount": `Hit {{count}} time(s)!`,
|
|
||||||
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
|
||||||
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
|
||||||
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
|
||||||
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
|
||||||
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
|
||||||
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
|
||||||
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
|
||||||
"moveDisabled": "{{moveName}} is disabled!",
|
|
||||||
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
|
||||||
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
|
||||||
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
|
||||||
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
|
||||||
"noEscapeForce": "An unseen force\nprevents escape.",
|
|
||||||
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
|
||||||
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
|
||||||
"runAwaySuccess": "You got away safely!",
|
|
||||||
"runAwayCannotEscape": 'You can\'t escape!',
|
|
||||||
"escapeVerbSwitch": "switching",
|
|
||||||
"escapeVerbFlee": "fleeing",
|
|
||||||
"notDisabled": "{{moveName}} is disabled\nno more!",
|
|
||||||
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
|
||||||
"eggHatching": "Oh?",
|
|
||||||
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online",
|
||||||
|
"empty":"Empty",
|
||||||
|
"yes":"Yes",
|
||||||
|
"no":"No",
|
||||||
|
"confirmStartTeam":'Begin with these Pokémon?',
|
||||||
} as const;
|
} as const;
|
@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
"pokerus": `A daily random 3 selectable starters have a purple border.
|
"pokerus": `A daily random 3 selectable starters have a purple border.
|
||||||
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
||||||
|
|
||||||
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
$Most non-consumable item effects will stack in various ways.
|
$Most non-consumable item effects will stack in various ways.
|
||||||
|
52
src/locales/es/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "¡{{bossName}} te corta el paso!",
|
||||||
|
"trainerAppeared": "¡{{trainerName}}\nte desafía!",
|
||||||
|
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!",
|
||||||
|
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!",
|
||||||
|
"playerComeBack": "¡{{pokemonName}}, ven aquí!",
|
||||||
|
"trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!",
|
||||||
|
"playerGo": "¡Adelante, {{pokemonName}}!",
|
||||||
|
"trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!",
|
||||||
|
"switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": "¡Has derrotado a\n{{trainerName}}!",
|
||||||
|
"pokemonCaught": "¡{{pokemonName}} atrapado!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "¡Adelante, {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "¡Pero ha fallado!",
|
||||||
|
"attackHitsCount": `N.º de golpes: {{count}}.`,
|
||||||
|
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",
|
||||||
|
"levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!",
|
||||||
|
"learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.",
|
||||||
|
"learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.",
|
||||||
|
"levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.",
|
||||||
|
"moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!",
|
||||||
|
"noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.",
|
||||||
|
"noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!",
|
||||||
|
"noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!",
|
||||||
|
"noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!",
|
||||||
|
"noEscapeForce": "Una fuerza misteriosa\nte impide huir.",
|
||||||
|
"noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!",
|
||||||
|
"noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!",
|
||||||
|
"runAwaySuccess": "¡Escapas sin problemas!",
|
||||||
|
"runAwayCannotEscape": "¡No has podido escapar!",
|
||||||
|
"escapeVerbSwitch": "cambiar",
|
||||||
|
"escapeVerbFlee": "huir",
|
||||||
|
"notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!",
|
||||||
|
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
||||||
|
"eggHatching": "¿Y esto?",
|
||||||
|
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?"
|
||||||
|
} as const;
|
@ -2,7 +2,7 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
|||||||
|
|
||||||
export const commandUiHandler: SimpleTranslationEntries = {
|
export const commandUiHandler: SimpleTranslationEntries = {
|
||||||
"fight": "Luchar",
|
"fight": "Luchar",
|
||||||
"ball": "Ball",
|
"ball": "Balls",
|
||||||
"pokemon": "Pokémon",
|
"pokemon": "Pokémon",
|
||||||
"run": "Huir",
|
"run": "Huir",
|
||||||
"actionMessage": "¿Qué debería\nhacer {{pokemonName}}?",
|
"actionMessage": "¿Qué debería\nhacer {{pokemonName}}?",
|
||||||
|
6
src/locales/es/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POTENCIA",
|
||||||
|
} as const;
|
@ -19,52 +19,13 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "¿Eres un chico o una chica?",
|
"boyOrGirl": "¿Eres un chico o una chica?",
|
||||||
"boy": "Chico",
|
"boy": "Chico",
|
||||||
"girl": "Chica",
|
"girl": "Chica",
|
||||||
"bossAppeared": "¡{{bossName}} te corta el paso!",
|
"dailyRankings": "Rankings Diarios",
|
||||||
"trainerAppeared": "¡{{trainerName}}\nte desafía!",
|
"weeklyRankings": "Rankings Semanales",
|
||||||
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!",
|
"noRankings": "Sin Rankings",
|
||||||
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!",
|
"loading": "Cargando…",
|
||||||
"playerComeBack": "¡{{pokemonName}}, ven aquí!",
|
"playersOnline": "Jugadores en Línea",
|
||||||
"trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!",
|
"empty":"Vacío",
|
||||||
"playerGo": "¡Adelante, {{pokemonName}}!",
|
"yes":"Sí",
|
||||||
"trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!",
|
"no":"No",
|
||||||
"switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?",
|
"confirmStartTeam":'¿Comenzar con estos Pokémon?',
|
||||||
"trainerDefeated": "¡Has derrotado a\n{{trainerName}}!",
|
|
||||||
"pokemonCaught": "¡{{pokemonName}} atrapado!",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "¡Adelante, {{pokemonName}}!",
|
|
||||||
"attackFailed": "¡Pero ha fallado!",
|
|
||||||
"attackHitsCount": `N.º de golpes: {{count}}.`,
|
|
||||||
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",
|
|
||||||
"levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!",
|
|
||||||
"learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.",
|
|
||||||
"learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?",
|
|
||||||
"learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.",
|
|
||||||
"levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!",
|
|
||||||
"moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.",
|
|
||||||
"moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!",
|
|
||||||
"noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.",
|
|
||||||
"noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!",
|
|
||||||
"noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!",
|
|
||||||
"noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!",
|
|
||||||
"noEscapeForce": "Una fuerza misteriosa\nte impide huir.",
|
|
||||||
"noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!",
|
|
||||||
"noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!",
|
|
||||||
"runAwaySuccess": "¡Escapas sin problemas!",
|
|
||||||
"runAwayCannotEscape": "¡No has podido escapar!",
|
|
||||||
"escapeVerbSwitch": "cambiar",
|
|
||||||
"escapeVerbFlee": "huir",
|
|
||||||
"notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!",
|
|
||||||
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
|
||||||
"eggHatching": "¿Y esto?",
|
|
||||||
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
|
||||||
"noRankings": "No Rankings",
|
|
||||||
"loading": "Loading…",
|
|
||||||
"playersOnline": "Players Online"
|
|
||||||
} as const;
|
} as const;
|
@ -1,38 +1,49 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
export const tutorial: SimpleTranslationEntries = {
|
export const tutorial: SimpleTranslationEntries = {
|
||||||
"intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements.
|
"intro": `¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite.
|
||||||
$This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used.
|
$Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de
|
||||||
$The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community.
|
$los recursos con copyright utilizados.
|
||||||
$If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`,
|
$El juego está en proceso, pero es completamente jugable.\nPara reportar bugs, por favor, hazlo en nuestra
|
||||||
|
$comunidad de Discord.
|
||||||
|
$Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los
|
||||||
|
$ajustes de tu navegador.`,
|
||||||
|
|
||||||
"accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`,
|
"accessMenu": `Para acceder al menú, pulsa M o Escape cuando\ntengas el control.
|
||||||
|
$El menú contiene la configuración y otras funciones.`,
|
||||||
|
|
||||||
"menu": `From this menu you can access the settings.
|
"menu": `Desde este menú podrás acceder a la configuración.
|
||||||
$From the settings you can change game speed, window style, and other options.
|
$Podrás cambiar la velocidad del juego, el estilo de la ventana y demás.
|
||||||
$There are also various other features here, so be sure to check them all!`,
|
$Hay más opciones, ¡así que pruébalas todas!`,
|
||||||
|
|
||||||
"starterSelect": `From this screen, you can select your starters.\nThese are your initial party members.
|
"starterSelect": `En esta pantalla podrás elegir tus iniciales. Estos serán tus\nmiembros de equipo al comenzar la partida.
|
||||||
$Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10.
|
$Cada inicial tiene un valor. Tu equipo puede contener hasta 6\nmiembros mientras el valor total no pase de 10.
|
||||||
$You can also select gender, ability, and form depending on\nthe variants you've caught or hatched.
|
$También puedes elegir su género, habilidad y forma\ndependiendo de las variantes que hayas conseguido.
|
||||||
$The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`,
|
$Los IVs de los iniciales corresponderán al valor más alto de\nlos Pokémon de la misma especie que hayas obtenido.
|
||||||
|
$¡Así que intenta conseguir muchos Pokémon de la misma\nespecie!`,
|
||||||
|
|
||||||
"pokerus": `A daily random 3 selectable starters have a purple border.
|
"pokerus": `Cada día, 3 iniciales aleatorios tendrán un borde morado.
|
||||||
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
$Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"statChange": `Los cambios de estadísticas se mantienen entre combates\nmientras que el Pokémon no vuelva a la Poké Ball.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$Tus Pokémon vuelven a sus Poké Balls antes de combates contra entrenadores y de entrar a un nuevo bioma.
|
||||||
$Most non-consumable item effects will stack in various ways.
|
$También puedes ver los cambios de estadísticas del Pokémon en campo manteniendo pulsado C o Shift.`,
|
||||||
$Some items will only show up if they can be used, such as evolution items.
|
|
||||||
$You can also transfer held items between Pokémon using the transfer option.
|
|
||||||
$The transfer option will appear in the bottom right once you have obtained a held item.
|
|
||||||
$You may purchase consumable items with money, and a larger variety will be available the further you get.
|
|
||||||
$Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`,
|
|
||||||
|
|
||||||
"eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs.
|
"selectItem": `Tras cada combate, tendrás la opción de elegir entre tres objetos aleatorios. Solo podrás escoger uno.
|
||||||
$Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch.
|
$Estos objetos pueden ser consumibles, objetos equipables u objetos pasivos permanentes (hasta acabar la partida).
|
||||||
$Hatched Pokémon also won't be added to your party, they will\nbe added to your starters.
|
$La mayoría de los efectos de objetos no consumibles se acumularán de varias maneras.
|
||||||
$Pokémon hatched from eggs generally have better IVs than\nwild Pokémon.
|
$Algunos objetos solo aparecerán si pueden ser utilizados, como las piedras evolutivas.
|
||||||
$Some Pokémon can only even be obtained from eggs.
|
$También puedes transferir objetos equipados entre Pokémon utilizando la opción de transferir.
|
||||||
$There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`,
|
$La opción de transferir aparecerá en la parte inferior derecha una vez hayas obtenido un objeto equipable.
|
||||||
|
$También puedes comprar objetos consumibles con dinero y su variedad irá aumentando según tu avance.
|
||||||
|
$Asegúrate de comprar antes de escoger un objeto aleatorio, ya que se avanzará al siguiente combate.`,
|
||||||
|
|
||||||
|
"eggGacha": `En esta pantalla podrás canjear tus vales por huevos\nde Pokémon.
|
||||||
|
$Los huevos deben eclosionar y estarán más cerca de\nhacerlo tras cada combate.
|
||||||
|
$Los huevos más raros tardarán más en eclosionar.
|
||||||
|
$Los Pokémon que hayan salido del huevo no se\nañadirán a tu equipo, pero sí a tus iniciales.
|
||||||
|
$Los Pokémon salidos de un huevo suelen tener mejores\nIVs que los Pokémon salvajes.
|
||||||
|
$Algunos Pokémon solo pueden ser obtenidos de huevos.
|
||||||
|
$Hay 3 máquinas diferentes entre las que elegir, cada\nuna con zdiferentes bonificaciones.
|
||||||
|
$¡Así que escoge la que más te interese!`,
|
||||||
} as const;
|
} as const;
|
52
src/locales/fr/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "Un {{bossName}} apparaît.",
|
||||||
|
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
|
||||||
|
"singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !",
|
||||||
|
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
|
||||||
|
"playerComeBack": "{{pokemonName}}, on change !\nReviens !",
|
||||||
|
"trainerComeBack": "{{trainerName}} retire {{pokemonName}} !",
|
||||||
|
"playerGo": "{{pokemonName}} ! Go !",
|
||||||
|
"trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !",
|
||||||
|
"switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?",
|
||||||
|
"trainerDefeated": `Vous avez battu\n{{trainerName}} !`,
|
||||||
|
"pokemonCaught": "Vous avez attrapé {{pokemonName}} !",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "{{pokemonName}} ! Go !",
|
||||||
|
"hitResultCriticalHit": "Coup critique !",
|
||||||
|
"hitResultSuperEffective": "C’est super efficace !",
|
||||||
|
"hitResultNotVeryEffective": "Ce n’est pas très efficace…",
|
||||||
|
"hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…",
|
||||||
|
"hitResultOneHitKO": "K.O. en un coup !",
|
||||||
|
"attackFailed": "Mais cela échoue !",
|
||||||
|
"attackHitsCount": `Touché {{count}} fois !`,
|
||||||
|
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
||||||
|
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
||||||
|
"learnMove": "{{pokemonName}} apprend \n{{moveName}} !",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
||||||
|
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
||||||
|
"learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
||||||
|
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
||||||
|
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
||||||
|
"moveDisabled": "{{moveName}} est sous entrave !",
|
||||||
|
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
||||||
|
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
||||||
|
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !",
|
||||||
|
"noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !",
|
||||||
|
"noEscapeForce": "Une force mystérieuse\nempêche la fuite.",
|
||||||
|
"noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !",
|
||||||
|
"noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !",
|
||||||
|
"runAwaySuccess": "Vous prenez la fuite !",
|
||||||
|
"runAwayCannotEscape": "Fuite impossible !",
|
||||||
|
"escapeVerbSwitch": "le changement",
|
||||||
|
"escapeVerbFlee": "la fuite",
|
||||||
|
"notDisabled": "{{moveName}} n’est plus sous entrave !",
|
||||||
|
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
||||||
|
"eggHatching": "Oh ?",
|
||||||
|
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?"
|
||||||
|
} as const;
|
@ -13,9 +13,9 @@ export const menuUiHandler: SimpleTranslationEntries = {
|
|||||||
"LOG_OUT": "Déconnexion",
|
"LOG_OUT": "Déconnexion",
|
||||||
"slot": "Emplacement {{slotNumber}}",
|
"slot": "Emplacement {{slotNumber}}",
|
||||||
"importSession": "Importer session",
|
"importSession": "Importer session",
|
||||||
"importSlotSelect": "Sélectionnez l'emplacement vers lequel importer les données.",
|
"importSlotSelect": "Sélectionnez l’emplacement vers lequel importer les données.",
|
||||||
"exportSession": "Exporter session",
|
"exportSession": "Exporter session",
|
||||||
"exportSlotSelect": "Sélectionnez l'emplacement depuis lequel exporter les données.",
|
"exportSlotSelect": "Sélectionnez l’emplacement depuis lequel exporter les données.",
|
||||||
"importData": "Importer données",
|
"importData": "Importer données",
|
||||||
"exportData": "Exporter données",
|
"exportData": "Exporter données",
|
||||||
"cancel": "Retour",
|
"cancel": "Retour",
|
||||||
|
@ -30,52 +30,13 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Es-tu un garçon ou une fille ?",
|
"boyOrGirl": "Es-tu un garçon ou une fille ?",
|
||||||
"boy": "Garçon",
|
"boy": "Garçon",
|
||||||
"girl": "Fille",
|
"girl": "Fille",
|
||||||
"bossAppeared": "Un {{bossName}} apparaît.",
|
|
||||||
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
|
|
||||||
"singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !",
|
|
||||||
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
|
|
||||||
"playerComeBack": "{{pokemonName}}, on change !\nReviens !",
|
|
||||||
"trainerComeBack": "{{trainerName}} retire {{pokemonName}} !",
|
|
||||||
"playerGo": "{{pokemonName}} ! Go !",
|
|
||||||
"trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !",
|
|
||||||
"switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?",
|
|
||||||
"trainerDefeated": `Vous avez battu\n{{trainerName}} !`,
|
|
||||||
"pokemonCaught": "Vous avez attrapé {{pokemonName}} !",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "{{pokemonName}} ! Go !",
|
|
||||||
"attackFailed": "Mais cela échoue !",
|
|
||||||
"attackHitsCount": `Touché {{count}} fois !`,
|
|
||||||
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
|
||||||
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
|
||||||
"learnMove": "{{pokemonName}} apprend \n{{moveName}} !",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
|
||||||
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
|
||||||
"learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
|
||||||
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
|
||||||
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
|
||||||
"moveDisabled": "{{moveName}} est sous entrave !",
|
|
||||||
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
|
||||||
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
|
||||||
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!",
|
|
||||||
"noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !",
|
|
||||||
"noEscapeForce": "Une force mystérieuse\nempêche la fuite.",
|
|
||||||
"noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !",
|
|
||||||
"noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !",
|
|
||||||
"runAwaySuccess": "Vous prenez la fuite !",
|
|
||||||
"runAwayCannotEscape": "Fuite impossible !",
|
|
||||||
"escapeVerbSwitch": "le changement",
|
|
||||||
"escapeVerbFlee": "la fuite",
|
|
||||||
"notDisabled": "{{moveName}} n’est plus sous entrave !",
|
|
||||||
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
|
||||||
"eggHatching": "Oh ?",
|
|
||||||
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?",
|
|
||||||
"rankings": "Classement",
|
|
||||||
"dailyRankings": "Classement du Jour",
|
"dailyRankings": "Classement du Jour",
|
||||||
|
"weeklyRankings": "Classement de la Semaine",
|
||||||
"noRankings": "Pas de Classement",
|
"noRankings": "Pas de Classement",
|
||||||
"loading": "Chargement…",
|
"loading": "Chargement…",
|
||||||
"playersOnline": "Joueurs Connectés"
|
"playersOnline": "Joueurs Connectés",
|
||||||
|
"empty":"Vide",
|
||||||
|
"yes":"Oui",
|
||||||
|
"no":"Non",
|
||||||
|
"confirmStartTeam":'Commencer avec ces Pokémon ?',
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -8,7 +8,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$Tout signalement de bugs passe par le serveur Discord.
|
$Tout signalement de bugs passe par le serveur Discord.
|
||||||
$Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`,
|
$Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`,
|
||||||
|
|
||||||
"accessMenu": `Accédez au menu avec M ou Échap lors de l'attente d’une\naction.
|
"accessMenu": `Accédez au menu avec M ou Échap lors de l’attente d’une\naction.
|
||||||
$Il contient les paramètres et diverses fonctionnalités`,
|
$Il contient les paramètres et diverses fonctionnalités`,
|
||||||
|
|
||||||
"menu": `Vous pouvez accéder aux paramètres depuis ce menu.
|
"menu": `Vous pouvez accéder aux paramètres depuis ce menu.
|
||||||
@ -17,13 +17,17 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$jetez-y un œil !`,
|
$jetez-y un œil !`,
|
||||||
|
|
||||||
"starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ.
|
"starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ.
|
||||||
$Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un coût de 10.
|
$Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un cout de 10.
|
||||||
$Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.
|
$Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.
|
||||||
$Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`,
|
$Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`,
|
||||||
|
|
||||||
"pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour
|
"pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour
|
||||||
$violet. Si un starter que vous possédez l’a, essayez de
|
$violet. Si un starter que vous possédez l’a, essayez de
|
||||||
$ l’ajouter à votre équipe. Vérifiez bien son résumé !`,
|
$l’ajouter à votre équipe. Vérifiez bien son résumé !`,
|
||||||
|
|
||||||
|
"statChange": `Les changements de stats restent à travers les combats tant que le Pokémon n’est pas rappelé.
|
||||||
|
$Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer dans un nouveau biome.
|
||||||
|
$Vous pouvez également voir en combat les changements de stats d’un Pokémon en maintenant C ou Maj.`,
|
||||||
|
|
||||||
"selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.
|
"selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.
|
||||||
$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.
|
$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.
|
||||||
|
52
src/locales/it/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} appeared.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
||||||
|
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
||||||
|
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
||||||
|
"playerComeBack": "Come back, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
||||||
|
"playerGo": "Go! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
||||||
|
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Go! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
||||||
|
"moveDisabled": "{{moveName}} is disabled!",
|
||||||
|
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
||||||
|
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
||||||
|
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
||||||
|
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
||||||
|
"noEscapeForce": "An unseen force\nprevents escape.",
|
||||||
|
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "switching",
|
||||||
|
"escapeVerbFlee": "fleeing",
|
||||||
|
"notDisabled": "{{moveName}} is disabled\nno more!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
6
src/locales/it/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POWER",
|
||||||
|
} as const;
|
@ -1,5 +1,10 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
|
||||||
|
* contents or directly related to Pokemon data. This includes menu navigation, settings,
|
||||||
|
* account interactions, descriptive text, etc.
|
||||||
|
*/
|
||||||
export const menu: SimpleTranslationEntries = {
|
export const menu: SimpleTranslationEntries = {
|
||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
"continue": "Continua",
|
"continue": "Continua",
|
||||||
@ -7,9 +12,36 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"loadGame": "Carica Partita",
|
"loadGame": "Carica Partita",
|
||||||
"dailyRun": "Corsa Giornaliera (Beta)",
|
"dailyRun": "Corsa Giornaliera (Beta)",
|
||||||
"selectGameMode": "Seleziona una modalità di gioco.",
|
"selectGameMode": "Seleziona una modalità di gioco.",
|
||||||
"rankings": "Rankings",
|
"logInOrCreateAccount": "Log in or create an account to start. No email required!",
|
||||||
|
"username": "Username",
|
||||||
|
"password": "Password",
|
||||||
|
"login": "Login",
|
||||||
|
"register": "Register",
|
||||||
|
"emptyUsername": "Username must not be empty",
|
||||||
|
"invalidLoginUsername": "The provided username is invalid",
|
||||||
|
"invalidRegisterUsername": "Username must only contain letters, numbers, or underscores",
|
||||||
|
"invalidLoginPassword": "The provided password is invalid",
|
||||||
|
"invalidRegisterPassword": "Password must be 6 characters or longer",
|
||||||
|
"usernameAlreadyUsed": "The provided username is already in use",
|
||||||
|
"accountNonExistent": "The provided user does not exist",
|
||||||
|
"unmatchingPassword": "The provided password does not match",
|
||||||
|
"passwordNotMatchingConfirmPassword": "Password must match confirm password",
|
||||||
|
"confirmPassword": "Confirm Password",
|
||||||
|
"registrationAgeWarning": "By registering, you confirm you are of 13 years of age or older.",
|
||||||
|
"backToLogin": "Back to Login",
|
||||||
|
"failedToLoadSaveData": "Failed to load save data. Please reload the page.\nIf this continues, please contact the administrator.",
|
||||||
|
"sessionSuccess": "Session loaded successfully.",
|
||||||
|
"failedToLoadSession": "Your session data could not be loaded.\nIt may be corrupted.",
|
||||||
|
"boyOrGirl": "Are you a boy or a girl?",
|
||||||
|
"boy": "Boy",
|
||||||
|
"girl": "Girl",
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online",
|
||||||
|
"empty":"Empty",
|
||||||
|
"yes":"Yes",
|
||||||
|
"no":"No",
|
||||||
|
"confirmStartTeam":'Begin with these Pokémon?',
|
||||||
} as const;
|
} as const;
|
@ -1,16 +1,16 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
export const pokemonStat: SimpleTranslationEntries = {
|
export const pokemonStat: SimpleTranslationEntries = {
|
||||||
"HP": "Max. HP",
|
"HP": "PS Max",
|
||||||
"HPshortened": "MaxHP",
|
"HPshortened": "PS",
|
||||||
"ATK": "Attack",
|
"ATK": "Attacco",
|
||||||
"ATKshortened": "Atk",
|
"ATKshortened": "Att",
|
||||||
"DEF": "Defense",
|
"DEF": "Difesa",
|
||||||
"DEFshortened": "Def",
|
"DEFshortened": "Dif",
|
||||||
"SPATK": "Sp. Atk",
|
"SPATK": "Att. Sp.",
|
||||||
"SPATKshortened": "SpAtk",
|
"SPATKshortened": "AttSp",
|
||||||
"SPDEF": "Sp. Def",
|
"SPDEF": "Dif. Sp.",
|
||||||
"SPDEFshortened": "SpDef",
|
"SPDEFshortened": "DifSp",
|
||||||
"SPD": "Speed",
|
"SPD": "Velocità",
|
||||||
"SPDshortened": "Spd"
|
"SPDshortened": "Vel"
|
||||||
} as const;
|
} as const;
|
@ -1,38 +1,42 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
export const tutorial: SimpleTranslationEntries = {
|
export const tutorial: SimpleTranslationEntries = {
|
||||||
"intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements.
|
"intro": `Benvenuto in PokéRogue! Questo gioco si concentra sulle battaglie, con elementi roguelite.
|
||||||
$This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used.
|
$Questo gioco non è monetizzato e non siamo proprietari di Pokemon e Assets presenti nel gioco.
|
||||||
$The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community.
|
$Il gioco è work-in-progress ma giocabile al 100%.\nPer reportare eventuali bugs è possibile discuterne sul nostro Discord.
|
||||||
$If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`,
|
$Se il game risulta 'lento', assicurati di aver abilitato l'Accelerazione Hardware nelle impostazioni del tuo Browser`,
|
||||||
|
|
||||||
"accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`,
|
"accessMenu": `Per accedere al menù, press M o Esc.\nDal menù puoi cambiare impostazioni, controllare la wiki e accedere a varie features.`,
|
||||||
|
|
||||||
"menu": `From this menu you can access the settings.
|
"menu": `Da questo menù puoi accedere alle impostazioni.
|
||||||
$From the settings you can change game speed, window style, and other options.
|
$Dalle impostazioni puoi cambiare velocità di gioco, stile di finestra e altre opzioni.
|
||||||
$There are also various other features here, so be sure to check them all!`,
|
$Ci sono varie funzionalità, controlla bene e non perderti nulla!`,
|
||||||
|
|
||||||
"starterSelect": `From this screen, you can select your starters.\nThese are your initial party members.
|
"starterSelect": `Da questa schermata puoi selezionare il tuo starter.\nQuesti sono i membri iniziali del tuo parti.
|
||||||
$Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10.
|
$Ogni starter ha un valore. Puoi avere fino a \n6 Pokèmon, avendo a disposizione un massimo di 10 punti.
|
||||||
$You can also select gender, ability, and form depending on\nthe variants you've caught or hatched.
|
$Puoi anche selezionare Sesso, Abilità, e Forma a seconda delle\nvarianti che hai catturato o schiuso.
|
||||||
$The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`,
|
$Le IVs di una specie sono le migliori rispetto a tutte quelle che hai\ncatturato o schiuso, quindi prova a catturarne il piu possibile!`,
|
||||||
|
|
||||||
"pokerus": `A daily random 3 selectable starters have a purple border.
|
"pokerus": `Giornalmente 3 Starter casuali disponibili avranno il bordo viola.
|
||||||
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
|
$Se possiedi uno di questi starter,\nprova ad aggiungerlo al party. Ricorda di controllare le info!`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"statChange": `I cambiamenti alle statistiche persistono fintanto che i tuoi pokèmon resteranno in campo.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$I tuoi pokemon verranno richiamati quando incontrerai un allenatore o al cambiamento di bioma.
|
||||||
$Most non-consumable item effects will stack in various ways.
|
$Puoi anche vedere i cambiamenti alle statistiche in corso tenendo premuto C o Shift`,
|
||||||
$Some items will only show up if they can be used, such as evolution items.
|
|
||||||
$You can also transfer held items between Pokémon using the transfer option.
|
|
||||||
$The transfer option will appear in the bottom right once you have obtained a held item.
|
|
||||||
$You may purchase consumable items with money, and a larger variety will be available the further you get.
|
|
||||||
$Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`,
|
|
||||||
|
|
||||||
"eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs.
|
"selectItem": `Dopo ogni battaglia avrai disponibili tre item.\nPotrai prenderne solo uno.
|
||||||
$Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch.
|
$Questi spaziano tra consumabili, item tenuti da Pokèmon o con un effetto passivo permanente.
|
||||||
$Hatched Pokémon also won't be added to your party, they will\nbe added to your starters.
|
$La maggior parte degli Item non Consumabili possono stackare in diversi modi.
|
||||||
$Pokémon hatched from eggs generally have better IVs than\nwild Pokémon.
|
$Alcuni Item risulteranno disponibili solo se possono essere usati, come Item Evolutivi.
|
||||||
$Some Pokémon can only even be obtained from eggs.
|
$Puoi anche passare un Item tenuto da un Pokèmon ad un altro attraverso l'opzione 'trasferisci strumento'.
|
||||||
$There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`,
|
$L'opzione 'trasferisci strumento' sarà disponibile solo dopo aver assegnato uno strumento ad un Pokèmon.
|
||||||
|
$Puoi acquistare consumabili con le monete, progredendo saranno poi disponibili ulteriori oggetti.
|
||||||
|
$Assicurati di fare un acquisto prima di selezionare un item casuale, poichè passerai subito alla lotta successiva.`,
|
||||||
|
|
||||||
|
"eggGacha": `Da questa schermata, puoi riscattare i tuoi vouchers in cambio di\nuova Pokèmon.
|
||||||
|
$Le uova vanno schiuse e saranno sempre più vicine alla schiusura dopo\nogni battaglia. Le uova più rare impiegheranno più battaglie per la schiusura.
|
||||||
|
$I Pokémon schiusi non verranno aggiunti alla tua squadra, saranno\naggiunti ai tuoi starters.
|
||||||
|
$I Pokémon schiusi generalmente hanno IVs migliori rispetto ai\n Pokémon selvatici.
|
||||||
|
$Alcuni Pokémon possono essere ottenuti solo tramite uova.
|
||||||
|
$Ci sono 3 diversi macchinari con differenti\nbonus, scegli quello che preferisci!`,
|
||||||
} as const;
|
} as const;
|
17
src/main.ts
@ -9,6 +9,23 @@ import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext';
|
|||||||
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js';
|
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js';
|
||||||
import { LoadingScene } from './loading-scene';
|
import { LoadingScene } from './loading-scene';
|
||||||
|
|
||||||
|
|
||||||
|
// Catch global errors and display them in an alert so users can report the issue.
|
||||||
|
window.onerror = function (message, source, lineno, colno, error) {
|
||||||
|
console.error(error);
|
||||||
|
let errorString = `Received unhandled error. Open browser console and click OK to see details.\nError: ${message}\nSource: ${source}\nLine: ${lineno}\nColumn: ${colno}\nStack: ${error.stack}`;
|
||||||
|
//alert(errorString);
|
||||||
|
// Avoids logging the error a second time.
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Catch global promise rejections and display them in an alert so users can report the issue.
|
||||||
|
window.addEventListener('unhandledrejection', (event) => {
|
||||||
|
let errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`;
|
||||||
|
console.error(event.reason);
|
||||||
|
//alert(errorString);
|
||||||
|
});
|
||||||
|
|
||||||
const config: Phaser.Types.Core.GameConfig = {
|
const config: Phaser.Types.Core.GameConfig = {
|
||||||
type: Phaser.WEBGL,
|
type: Phaser.WEBGL,
|
||||||
parent: 'app',
|
parent: 'app',
|
||||||
|
@ -1058,7 +1058,6 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10),
|
new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10),
|
||||||
new WeightedModifierType(modifierTypes.TM_ULTRA, 8),
|
new WeightedModifierType(modifierTypes.TM_ULTRA, 8),
|
||||||
new WeightedModifierType(modifierTypes.RARER_CANDY, 4),
|
new WeightedModifierType(modifierTypes.RARER_CANDY, 4),
|
||||||
new WeightedModifierType(modifierTypes.SOOTHE_BELL, (party: Pokemon[]) => party.find(p => (pokemonEvolutions.hasOwnProperty(p.species.speciesId) && pokemonEvolutions[p.species.speciesId].find(e => e.condition && e.condition instanceof SpeciesFriendshipEvolutionCondition)) || p.moveset.find(m => m.moveId === Moves.RETURN)) ? 16 : 0, 16),
|
|
||||||
new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2),
|
new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2),
|
||||||
new WeightedModifierType(modifierTypes.IV_SCANNER, 4),
|
new WeightedModifierType(modifierTypes.IV_SCANNER, 4),
|
||||||
new WeightedModifierType(modifierTypes.EXP_CHARM, 8),
|
new WeightedModifierType(modifierTypes.EXP_CHARM, 8),
|
||||||
@ -1078,6 +1077,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.BATON, 2),
|
new WeightedModifierType(modifierTypes.BATON, 2),
|
||||||
new WeightedModifierType(modifierTypes.SOUL_DEW, 8),
|
new WeightedModifierType(modifierTypes.SOUL_DEW, 8),
|
||||||
//new WeightedModifierType(modifierTypes.OVAL_CHARM, 6),
|
//new WeightedModifierType(modifierTypes.OVAL_CHARM, 6),
|
||||||
|
new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4),
|
||||||
new WeightedModifierType(modifierTypes.ABILITY_CHARM, 6),
|
new WeightedModifierType(modifierTypes.ABILITY_CHARM, 6),
|
||||||
new WeightedModifierType(modifierTypes.FOCUS_BAND, 5),
|
new WeightedModifierType(modifierTypes.FOCUS_BAND, 5),
|
||||||
new WeightedModifierType(modifierTypes.KINGS_ROCK, 3),
|
new WeightedModifierType(modifierTypes.KINGS_ROCK, 3),
|
||||||
|
@ -1111,9 +1111,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier {
|
|||||||
pokemon.levelExp = 0;
|
pokemon.levelExp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const friendshipIncrease = new Utils.IntegerHolder(5);
|
pokemon.addFriendship(5);
|
||||||
pokemon.scene.applyModifier(PokemonFriendshipBoosterModifier, true, pokemon, friendshipIncrease);
|
|
||||||
pokemon.friendship = Math.min(pokemon.friendship + friendshipIncrease.value, 255);
|
|
||||||
|
|
||||||
pokemon.scene.unshiftPhase(new LevelUpPhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.level - levelCount.value, pokemon.level));
|
pokemon.scene.unshiftPhase(new LevelUpPhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.level - levelCount.value, pokemon.level));
|
||||||
|
|
||||||
@ -1392,13 +1390,14 @@ export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply(args: any[]): boolean {
|
apply(args: any[]): boolean {
|
||||||
(args[1] as Utils.IntegerHolder).value *= 1 + 0.5 * this.getStackCount();
|
const friendship = args[1] as Utils.IntegerHolder;
|
||||||
|
friendship.value = Math.floor(friendship.value * (1 + 0.5 * this.getStackCount()));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
getMaxHeldItemCount(pokemon: Pokemon): integer {
|
getMaxHeldItemCount(pokemon: Pokemon): integer {
|
||||||
return 5;
|
return 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
129
src/phases.ts
@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov
|
|||||||
import { Mode } from './ui/ui';
|
import { Mode } from './ui/ui';
|
||||||
import { Command } from "./ui/command-ui-handler";
|
import { Command } from "./ui/command-ui-handler";
|
||||||
import { Stat } from "./data/pokemon-stat";
|
import { Stat } from "./data/pokemon-stat";
|
||||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, PokemonFriendshipBoosterModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier";
|
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier";
|
||||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
||||||
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
||||||
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
||||||
@ -19,7 +19,7 @@ import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } fr
|
|||||||
import { biomeLinks, getBiomeName } from "./data/biomes";
|
import { biomeLinks, getBiomeName } from "./data/biomes";
|
||||||
import { Biome } from "./data/enums/biome";
|
import { Biome } from "./data/enums/biome";
|
||||||
import { ModifierTier } from "./modifier/modifier-tier";
|
import { ModifierTier } from "./modifier/modifier-tier";
|
||||||
import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type";
|
import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type";
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
||||||
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
||||||
@ -331,6 +331,8 @@ export class TitlePhase extends Phase {
|
|||||||
this.scene.sessionPlayTime = 0;
|
this.scene.sessionPlayTime = 0;
|
||||||
this.end();
|
this.end();
|
||||||
});
|
});
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("Failed to load daily run:\n", err);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -815,14 +817,14 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
const enemyField = this.scene.getEnemyField();
|
const enemyField = this.scene.getEnemyField();
|
||||||
|
|
||||||
if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
|
if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
|
||||||
return i18next.t('menu:bossAppeared', {bossName: enemyField[0].name});
|
return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name});
|
||||||
|
|
||||||
if (this.scene.currentBattle.battleType === BattleType.TRAINER)
|
if (this.scene.currentBattle.battleType === BattleType.TRAINER)
|
||||||
return i18next.t('menu:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
|
return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
|
||||||
|
|
||||||
return enemyField.length === 1
|
return enemyField.length === 1
|
||||||
? i18next.t('menu:singleWildAppeared', {pokemonName: enemyField[0].name})
|
? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name})
|
||||||
: i18next.t('menu:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name})
|
: i18next.t('battle:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name})
|
||||||
}
|
}
|
||||||
|
|
||||||
doEncounterCommon(showEncounterMessage: boolean = true) {
|
doEncounterCommon(showEncounterMessage: boolean = true) {
|
||||||
@ -1187,7 +1189,7 @@ export class SummonPhase extends PartyMemberPokemonPhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.player) {
|
if (this.player) {
|
||||||
this.scene.ui.showText(i18next.t('menu:playerGo', { pokemonName: this.getPokemon().name }));
|
this.scene.ui.showText(i18next.t('battle:playerGo', { pokemonName: this.getPokemon().name }));
|
||||||
if (this.player)
|
if (this.player)
|
||||||
this.scene.pbTray.hide();
|
this.scene.pbTray.hide();
|
||||||
this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`);
|
this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`);
|
||||||
@ -1355,8 +1357,8 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon);
|
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon);
|
||||||
|
|
||||||
this.scene.ui.showText(this.player ?
|
this.scene.ui.showText(this.player ?
|
||||||
i18next.t('menu:playerComeBack', { pokemonName: pokemon.name }) :
|
i18next.t('battle:playerComeBack', { pokemonName: pokemon.name }) :
|
||||||
i18next.t('menu:trainerComeBack', {
|
i18next.t('battle:trainerComeBack', {
|
||||||
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: pokemon.name
|
pokemonName: pokemon.name
|
||||||
})
|
})
|
||||||
@ -1396,8 +1398,8 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
party[this.fieldIndex] = switchedPokemon;
|
party[this.fieldIndex] = switchedPokemon;
|
||||||
const showTextAndSummon = () => {
|
const showTextAndSummon = () => {
|
||||||
this.scene.ui.showText(this.player ?
|
this.scene.ui.showText(this.player ?
|
||||||
i18next.t('menu:playerGo', { pokemonName: switchedPokemon.name }) :
|
i18next.t('battle:playerGo', { pokemonName: switchedPokemon.name }) :
|
||||||
i18next.t('menu: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().name
|
pokemonName: this.getPokemon().name
|
||||||
})
|
})
|
||||||
@ -1544,7 +1546,7 @@ export class CheckSwitchPhase extends BattlePhase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('menu:pokemon') }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('battle:pokemon') }), null, () => {
|
||||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex);
|
this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex);
|
||||||
@ -1564,7 +1566,7 @@ export class SummonMissingPhase extends SummonPhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
preSummon(): void {
|
preSummon(): void {
|
||||||
this.scene.ui.showText(i18next.t('menu:sendOutPokemon', { pokemonName: this.getPokemon().name}));
|
this.scene.ui.showText(i18next.t('battle:sendOutPokemon', { pokemonName: this.getPokemon().name}));
|
||||||
this.scene.time.delayedCall(250, () => this.summon());
|
this.scene.time.delayedCall(250, () => this.summon());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1579,7 +1581,7 @@ export class LevelCapPhase extends FieldPhase {
|
|||||||
|
|
||||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true);
|
this.scene.ui.showText(i18next.t('battle:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true);
|
||||||
this.executeForAll(pokemon => pokemon.updateInfo(true));
|
this.executeForAll(pokemon => pokemon.updateInfo(true));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1673,7 +1675,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
const move = playerPokemon.getMoveset()[cursor];
|
const move = playerPokemon.getMoveset()[cursor];
|
||||||
if (move.getName().endsWith(' (N)')) {
|
if (move.getName().endsWith(' (N)')) {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => {
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1684,6 +1686,8 @@ export class CommandPhase extends FieldPhase {
|
|||||||
console.log(moveTargets, playerPokemon.name);
|
console.log(moveTargets, playerPokemon.name);
|
||||||
if (moveTargets.targets.length <= 1 || moveTargets.multiple)
|
if (moveTargets.targets.length <= 1 || moveTargets.multiple)
|
||||||
turnCommand.move.targets = moveTargets.targets;
|
turnCommand.move.targets = moveTargets.targets;
|
||||||
|
else if(playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1)
|
||||||
|
turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets;
|
||||||
else
|
else
|
||||||
this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex));
|
this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex));
|
||||||
this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand;
|
this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand;
|
||||||
@ -1692,7 +1696,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
const move = playerPokemon.getMoveset()[cursor];
|
const move = playerPokemon.getMoveset()[cursor];
|
||||||
if (playerPokemon.summonData.disabledMove === move.moveId) {
|
if (playerPokemon.summonData.disabledMove === move.moveId) {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:moveDisabled', { moveName: move.getName() }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:moveDisabled', { moveName: move.getName() }), null, () => {
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1703,14 +1707,14 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballForce'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballForce'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
} else if (this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
} else if (this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballTrainer'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballTrainer'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1719,7 +1723,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (targets.length > 1) {
|
if (targets.length > 1) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballMulti'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballMulti'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1728,7 +1732,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) {
|
if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballStrong'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballStrong'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1748,14 +1752,14 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (!isSwitch && this.scene.arena.biomeType === Biome.END) {
|
if (!isSwitch && this.scene.arena.biomeType === Biome.END) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noEscapeForce'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noEscapeForce'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
} else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
} else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noEscapeTrainer'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noEscapeTrainer'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1778,10 +1782,10 @@ export class CommandPhase extends FieldPhase {
|
|||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
}
|
}
|
||||||
this.scene.ui.showText(
|
this.scene.ui.showText(
|
||||||
i18next.t('menu:noEscapePokemon', {
|
i18next.t('battle:noEscapePokemon', {
|
||||||
pokemonName: this.scene.getPokemonById(trapTag.sourceId).name,
|
pokemonName: this.scene.getPokemonById(trapTag.sourceId).name,
|
||||||
moveName: trapTag.getMoveName(),
|
moveName: trapTag.getMoveName(),
|
||||||
escapeVerb: isSwitch ? i18next.t('menu:escapeVerbSwitch') : i18next.t('menu:escapeVerbFlee')
|
escapeVerb: isSwitch ? i18next.t('battle:escapeVerbSwitch') : i18next.t('battle:escapeVerbFlee')
|
||||||
}),
|
}),
|
||||||
null,
|
null,
|
||||||
() => {
|
() => {
|
||||||
@ -2031,7 +2035,7 @@ export class TurnEndPhase extends FieldPhase {
|
|||||||
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
||||||
|
|
||||||
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
||||||
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('menu:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
||||||
pokemon.summonData.disabledMove = Moves.NONE;
|
pokemon.summonData.disabledMove = Moves.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2325,13 +2329,14 @@ export class MovePhase extends BattlePhase {
|
|||||||
|
|
||||||
showMoveText(): void {
|
showMoveText(): void {
|
||||||
if (this.move.getMove().getAttrs(ChargeAttr).length) {
|
if (this.move.getMove().getAttrs(ChargeAttr).length) {
|
||||||
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
|
||||||
const lastMove = this.pokemon.getLastXMoves() as TurnMove[];
|
const lastMove = this.pokemon.getLastXMoves() as TurnMove[];
|
||||||
if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER)
|
if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER){
|
||||||
|
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.pokemon.getTag(BattlerTagType.RECHARGING))
|
if (this.pokemon.getTag(BattlerTagType.RECHARGING || BattlerTagType.INTERRUPTED))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
||||||
@ -2339,7 +2344,7 @@ export class MovePhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
showFailedText(failedText: string = null): void {
|
showFailedText(failedText: string = null): void {
|
||||||
this.scene.queueMessage(failedText || i18next.t('menu:attackFailed'));
|
this.scene.queueMessage(failedText || i18next.t('battle:attackFailed'));
|
||||||
}
|
}
|
||||||
|
|
||||||
end() {
|
end() {
|
||||||
@ -2402,7 +2407,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
moveHistoryEntry.result = MoveResult.MISS;
|
moveHistoryEntry.result = MoveResult.MISS;
|
||||||
applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove());
|
applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove());
|
||||||
} else {
|
} else {
|
||||||
this.scene.queueMessage(i18next.t('menu:attackFailed'));
|
this.scene.queueMessage(i18next.t('battle:attackFailed'));
|
||||||
moveHistoryEntry.result = MoveResult.FAIL;
|
moveHistoryEntry.result = MoveResult.FAIL;
|
||||||
}
|
}
|
||||||
return this.end();
|
return this.end();
|
||||||
@ -2486,7 +2491,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
else {
|
else {
|
||||||
const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0);
|
const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0);
|
||||||
if (hitsTotal > 1)
|
if (hitsTotal > 1)
|
||||||
this.scene.queueMessage(i18next.t('menu:attackHitsCount', { count: hitsTotal }));
|
this.scene.queueMessage(i18next.t('battle:attackHitsCount', { count: hitsTotal }));
|
||||||
this.scene.applyModifiers(HitHealModifier, this.player, user);
|
this.scene.applyModifiers(HitHealModifier, this.player, user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2671,7 +2676,6 @@ export class StatChangePhase extends PokemonPhase {
|
|||||||
|
|
||||||
let random = false;
|
let random = false;
|
||||||
|
|
||||||
const allStats = Utils.getEnumValues(BattleStat);
|
|
||||||
if (this.stats.length === 1 && this.stats[0] === BattleStat.RAND) {
|
if (this.stats.length === 1 && this.stats[0] === BattleStat.RAND) {
|
||||||
this.stats[0] = this.getRandomStat();
|
this.stats[0] = this.getRandomStat();
|
||||||
random = true;
|
random = true;
|
||||||
@ -2712,8 +2716,11 @@ export class StatChangePhase extends PokemonPhase {
|
|||||||
for (let stat of filteredStats)
|
for (let stat of filteredStats)
|
||||||
pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6);
|
pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6);
|
||||||
|
|
||||||
applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget)
|
applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget);
|
||||||
this.end();
|
|
||||||
|
pokemon.updateInfo();
|
||||||
|
|
||||||
|
handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end());
|
||||||
};
|
};
|
||||||
|
|
||||||
if (relLevels.filter(l => l).length && this.scene.moveAnimations) {
|
if (relLevels.filter(l => l).length && this.scene.moveAnimations) {
|
||||||
@ -3150,8 +3157,8 @@ export class FaintPhase extends PokemonPhase {
|
|||||||
this.scene.getField(true).filter(p => p !== pokemon).forEach(p => p.removeTagsBySourceId(pokemon.id));
|
this.scene.getField(true).filter(p => p !== pokemon).forEach(p => p.removeTagsBySourceId(pokemon.id));
|
||||||
|
|
||||||
pokemon.faintCry(() => {
|
pokemon.faintCry(() => {
|
||||||
const friendshipDecrease = new Utils.IntegerHolder(10);
|
if (pokemon instanceof PlayerPokemon)
|
||||||
pokemon.friendship = Math.max(pokemon.friendship - friendshipDecrease.value, 0);
|
pokemon.addFriendship(-10);
|
||||||
pokemon.hideInfo();
|
pokemon.hideInfo();
|
||||||
this.scene.playSound('faint');
|
this.scene.playSound('faint');
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
@ -3222,13 +3229,8 @@ export class VictoryPhase extends PokemonPhase {
|
|||||||
for (let partyMember of expPartyMembers) {
|
for (let partyMember of expPartyMembers) {
|
||||||
const pId = partyMember.id;
|
const pId = partyMember.id;
|
||||||
const participated = participantIds.has(pId);
|
const participated = participantIds.has(pId);
|
||||||
if (participated) {
|
if (participated)
|
||||||
const friendshipIncrease = new Utils.IntegerHolder(2);
|
partyMember.addFriendship(2);
|
||||||
this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, partyMember, friendshipIncrease);
|
|
||||||
partyMember.friendship = Math.min(partyMember.friendship + friendshipIncrease.value, 255);
|
|
||||||
if (partyMember.friendship === 255)
|
|
||||||
this.scene.validateAchv(achvs.MAX_FRIENDSHIP);
|
|
||||||
}
|
|
||||||
else if (!expShareModifier) {
|
else if (!expShareModifier) {
|
||||||
partyMemberExp.push(0);
|
partyMemberExp.push(0);
|
||||||
continue;
|
continue;
|
||||||
@ -3337,10 +3339,10 @@ export class TrainerVictoryPhase extends BattlePhase {
|
|||||||
const trainerType = this.scene.currentBattle.trainer.config.trainerType;
|
const trainerType = this.scene.currentBattle.trainer.config.trainerType;
|
||||||
if (vouchers.hasOwnProperty(TrainerType[trainerType])) {
|
if (vouchers.hasOwnProperty(TrainerType[trainerType])) {
|
||||||
if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer.config.isBoss)
|
if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer.config.isBoss)
|
||||||
this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.VOUCHER));
|
this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType]));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => {
|
||||||
const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages();
|
const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages();
|
||||||
const showMessage = () => {
|
const showMessage = () => {
|
||||||
let message: string;
|
let message: string;
|
||||||
@ -3607,7 +3609,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
let exp = new Utils.NumberHolder(this.expValue);
|
let exp = new Utils.NumberHolder(this.expValue);
|
||||||
this.scene.applyModifiers(ExpBoosterModifier, true, exp);
|
this.scene.applyModifiers(ExpBoosterModifier, true, exp);
|
||||||
exp.value = Math.floor(exp.value);
|
exp.value = Math.floor(exp.value);
|
||||||
this.scene.ui.showText(i18next.t('menu:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => {
|
||||||
const lastLevel = pokemon.level;
|
const lastLevel = pokemon.level;
|
||||||
let newLevel: integer;
|
let newLevel: integer;
|
||||||
pokemon.addExp(exp.value);
|
pokemon.addExp(exp.value);
|
||||||
@ -3695,7 +3697,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
pokemon.calculateStats();
|
pokemon.calculateStats();
|
||||||
pokemon.updateInfo();
|
pokemon.updateInfo();
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true);
|
this.scene.ui.showText(i18next.t('battle:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true);
|
||||||
if (this.level <= 100) {
|
if (this.level <= 100) {
|
||||||
const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1);
|
const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1);
|
||||||
for (let lm of levelMoves)
|
for (let lm of levelMoves)
|
||||||
@ -3744,7 +3746,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
||||||
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
|
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
|
||||||
this.end();
|
this.end();
|
||||||
}, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true);
|
}, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true);
|
||||||
@ -3753,15 +3755,15 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveReplaceQuestion', { moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveReplaceQuestion', { moveName: move.name }), null, () => {
|
||||||
const noHandler = () => {
|
const noHandler = () => {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveStopTeaching', { moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveStopTeaching', { moveName: move.name }), null, () => {
|
||||||
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true);
|
this.scene.ui.showText(i18next.t('battle:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true);
|
||||||
}, () => {
|
}, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
||||||
@ -3772,7 +3774,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
};
|
};
|
||||||
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveForgetQuestion'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveForgetQuestion'), null, () => {
|
||||||
this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
|
this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
|
||||||
if (moveIndex === 4) {
|
if (moveIndex === 4) {
|
||||||
noHandler();
|
noHandler();
|
||||||
@ -3780,7 +3782,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
}
|
}
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => {
|
this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => {
|
||||||
this.scene.ui.showText('And…', null, () => {
|
this.scene.ui.showText('And…', null, () => {
|
||||||
pokemon.setMove(moveIndex, Moves.NONE);
|
pokemon.setMove(moveIndex, Moves.NONE);
|
||||||
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
||||||
@ -4093,9 +4095,9 @@ export class AttemptCapturePhase extends PokemonPhase {
|
|||||||
|
|
||||||
this.scene.pokemonInfoContainer.show(pokemon, true);
|
this.scene.pokemonInfoContainer.show(pokemon, true);
|
||||||
|
|
||||||
this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs);
|
this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs);
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:pokemonCaught', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:pokemonCaught', { pokemonName: pokemon.name }), null, () => {
|
||||||
const end = () => {
|
const end = () => {
|
||||||
this.scene.pokemonInfoContainer.hide();
|
this.scene.pokemonInfoContainer.hide();
|
||||||
this.removePb();
|
this.removePb();
|
||||||
@ -4181,7 +4183,7 @@ export class AttemptRunPhase extends PokemonPhase {
|
|||||||
|
|
||||||
if (playerPokemon.randSeedInt(256) < escapeChance.value) {
|
if (playerPokemon.randSeedInt(256) < escapeChance.value) {
|
||||||
this.scene.playSound('flee');
|
this.scene.playSound('flee');
|
||||||
this.scene.queueMessage(i18next.t('menu:runAwaySuccess'), null, true, 500);
|
this.scene.queueMessage(i18next.t('battle:runAwaySuccess'), null, true, 500);
|
||||||
|
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: [ this.scene.arenaEnemy, enemyField ].flat(),
|
targets: [ this.scene.arenaEnemy, enemyField ].flat(),
|
||||||
@ -4202,7 +4204,7 @@ export class AttemptRunPhase extends PokemonPhase {
|
|||||||
this.scene.pushPhase(new BattleEndPhase(this.scene));
|
this.scene.pushPhase(new BattleEndPhase(this.scene));
|
||||||
this.scene.pushPhase(new NewBattlePhase(this.scene));
|
this.scene.pushPhase(new NewBattlePhase(this.scene));
|
||||||
} else
|
} else
|
||||||
this.scene.queueMessage(i18next.t('menu:runAwayCannotEscape'), null, true, 500);
|
this.scene.queueMessage(i18next.t('battle:runAwayCannotEscape'), null, true, 500);
|
||||||
|
|
||||||
this.end();
|
this.end();
|
||||||
}
|
}
|
||||||
@ -4234,7 +4236,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
|
|
||||||
const modifierSelectCallback = (rowCursor: integer, cursor: integer) => {
|
const modifierSelectCallback = (rowCursor: integer, cursor: integer) => {
|
||||||
if (rowCursor < 0 || cursor < 0) {
|
if (rowCursor < 0 || cursor < 0) {
|
||||||
this.scene.ui.showText(i18next.t('menu:skipItemQuestion'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:skipItemQuestion'), null, () => {
|
||||||
this.scene.ui.setOverlayMode(Mode.CONFIRM, () => {
|
this.scene.ui.setOverlayMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.revertMode();
|
this.scene.ui.revertMode();
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
@ -4338,6 +4340,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
const isMoveModifier = modifierType instanceof PokemonMoveModifierType;
|
const isMoveModifier = modifierType instanceof PokemonMoveModifierType;
|
||||||
const isTmModifier = modifierType instanceof TmModifierType;
|
const isTmModifier = modifierType instanceof TmModifierType;
|
||||||
const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType;
|
const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType;
|
||||||
|
const isPpRestoreModifier = modifierType instanceof PokemonPpRestoreModifierType;
|
||||||
const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER
|
const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER
|
||||||
: isTmModifier ? PartyUiMode.TM_MODIFIER
|
: isTmModifier ? PartyUiMode.TM_MODIFIER
|
||||||
: isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER
|
: isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER
|
||||||
@ -4357,7 +4360,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
});
|
});
|
||||||
} else
|
} else
|
||||||
this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers));
|
this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers));
|
||||||
}, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId);
|
}, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
applyModifier(modifierType.newModifier());
|
applyModifier(modifierType.newModifier());
|
||||||
@ -4412,7 +4415,7 @@ export class EggLapsePhase extends Phase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (eggsToHatch.length) {
|
if (eggsToHatch.length) {
|
||||||
this.scene.queueMessage(i18next.t('menu:eggHatching'));
|
this.scene.queueMessage(i18next.t('battle:eggHatching'));
|
||||||
|
|
||||||
for (let egg of eggsToHatch)
|
for (let egg of eggsToHatch)
|
||||||
this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg));
|
this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg));
|
||||||
@ -4506,7 +4509,7 @@ export class ScanIvsPhase extends PokemonPhase {
|
|||||||
|
|
||||||
const pokemon = this.getPokemon();
|
const pokemon = this.getPokemon();
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => {
|
||||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
|
@ -13,6 +13,12 @@ import { menuUiHandler as frMenuUiHandler } from '../locales/fr/menu-ui-handler.
|
|||||||
import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js';
|
import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js';
|
||||||
import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js';
|
import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js';
|
||||||
|
|
||||||
|
import { battle as enBattle } from '../locales/en/battle';
|
||||||
|
import { battle as esBattle } from '../locales/es/battle';
|
||||||
|
import { battle as itBattle } from '../locales/it/battle';
|
||||||
|
import { battle as frBattle } from '../locales/fr/battle';
|
||||||
|
import { battle as deBattle } from '../locales/de/battle';
|
||||||
|
|
||||||
import { move as enMove } from '../locales/en/move';
|
import { move as enMove } from '../locales/en/move';
|
||||||
import { move as esMove } from '../locales/es/move';
|
import { move as esMove } from '../locales/es/move';
|
||||||
import { move as frMove } from '../locales/fr/move';
|
import { move as frMove } from '../locales/fr/move';
|
||||||
@ -45,7 +51,10 @@ import { commandUiHandler as frCommandUiHandler } from '../locales/fr/command-ui
|
|||||||
import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler';
|
import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler';
|
||||||
|
|
||||||
import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler';
|
import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler';
|
||||||
|
import { fightUiHandler as esFightUiHandler } from '../locales/es/fight-ui-handler';
|
||||||
import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler';
|
import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler';
|
||||||
|
import { fightUiHandler as itFightUiHandler } from '../locales/it/fight-ui-handler';
|
||||||
|
import { fightUiHandler as deFightUiHandler } from '../locales/de/fight-ui-handler';
|
||||||
|
|
||||||
import { tutorial as enTutorial } from '../locales/en/tutorial';
|
import { tutorial as enTutorial } from '../locales/en/tutorial';
|
||||||
import { tutorial as esTutorial } from '../locales/es/tutorial';
|
import { tutorial as esTutorial } from '../locales/es/tutorial';
|
||||||
@ -113,6 +122,7 @@ export function initI18n(): void {
|
|||||||
en: {
|
en: {
|
||||||
menu: enMenu,
|
menu: enMenu,
|
||||||
menuUiHandler: enMenuUiHandler,
|
menuUiHandler: enMenuUiHandler,
|
||||||
|
battle: enBattle,
|
||||||
move: enMove,
|
move: enMove,
|
||||||
ability: enAbility,
|
ability: enAbility,
|
||||||
pokeball: enPokeball,
|
pokeball: enPokeball,
|
||||||
@ -125,17 +135,20 @@ export function initI18n(): void {
|
|||||||
es: {
|
es: {
|
||||||
menu: esMenu,
|
menu: esMenu,
|
||||||
menuUiHandler: esMenuUiHandler,
|
menuUiHandler: esMenuUiHandler,
|
||||||
|
battle: esBattle,
|
||||||
move: esMove,
|
move: esMove,
|
||||||
ability: esAbility,
|
ability: esAbility,
|
||||||
pokeball: esPokeball,
|
pokeball: esPokeball,
|
||||||
pokemon: esPokemon,
|
pokemon: esPokemon,
|
||||||
pokemonStat: esPokemonStat,
|
pokemonStat: esPokemonStat,
|
||||||
commandUiHandler: esCommandUiHandler,
|
commandUiHandler: esCommandUiHandler,
|
||||||
|
fightUiHandler: esFightUiHandler,
|
||||||
tutorial: esTutorial,
|
tutorial: esTutorial,
|
||||||
},
|
},
|
||||||
fr: {
|
fr: {
|
||||||
menu: frMenu,
|
menu: frMenu,
|
||||||
menuUiHandler: frMenuUiHandler,
|
menuUiHandler: frMenuUiHandler,
|
||||||
|
battle: frBattle,
|
||||||
move: frMove,
|
move: frMove,
|
||||||
ability: frAbility,
|
ability: frAbility,
|
||||||
pokeball: frPokeball,
|
pokeball: frPokeball,
|
||||||
@ -148,18 +161,22 @@ export function initI18n(): void {
|
|||||||
it: {
|
it: {
|
||||||
menu: itMenu,
|
menu: itMenu,
|
||||||
menuUiHandler: itMenuUiHandler,
|
menuUiHandler: itMenuUiHandler,
|
||||||
|
battle: itBattle,
|
||||||
pokemonStat: itPokemonStat,
|
pokemonStat: itPokemonStat,
|
||||||
|
fightUiHandler: itFightUiHandler,
|
||||||
tutorial: itTutorial,
|
tutorial: itTutorial,
|
||||||
},
|
},
|
||||||
de: {
|
de: {
|
||||||
menu: deMenu,
|
menu: deMenu,
|
||||||
menuUiHandler: deMenuUiHandler,
|
menuUiHandler: deMenuUiHandler,
|
||||||
|
battle: deBattle,
|
||||||
move: deMove,
|
move: deMove,
|
||||||
ability: deAbility,
|
ability: deAbility,
|
||||||
pokeball: dePokeball,
|
pokeball: dePokeball,
|
||||||
pokemon: dePokemon,
|
pokemon: dePokemon,
|
||||||
pokemonStat: dePokemonStat,
|
pokemonStat: dePokemonStat,
|
||||||
commandUiHandler: deCommandUiHandler,
|
commandUiHandler: deCommandUiHandler,
|
||||||
|
fightUiHandler: deFightUiHandler,
|
||||||
tutorial: deTutorial,
|
tutorial: deTutorial,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -173,6 +190,7 @@ declare module 'i18next' {
|
|||||||
menu: typeof enMenu;
|
menu: typeof enMenu;
|
||||||
menuUiHandler: typeof enMenuUiHandler;
|
menuUiHandler: typeof enMenuUiHandler;
|
||||||
move: typeof enMove;
|
move: typeof enMove;
|
||||||
|
battle: typeof enBattle,
|
||||||
ability: typeof enAbility;
|
ability: typeof enAbility;
|
||||||
pokeball: typeof enPokeball;
|
pokeball: typeof enPokeball;
|
||||||
pokemon: typeof enPokemon;
|
pokemon: typeof enPokemon;
|
||||||
|
@ -7,6 +7,7 @@ export enum AchvTier {
|
|||||||
COMMON,
|
COMMON,
|
||||||
GREAT,
|
GREAT,
|
||||||
ULTRA,
|
ULTRA,
|
||||||
|
ROGUE,
|
||||||
MASTER
|
MASTER
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,8 +51,10 @@ export class Achv {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTier(): AchvTier {
|
getTier(): AchvTier {
|
||||||
if (this.score >= 100)
|
if (this.score >= 150)
|
||||||
return AchvTier.MASTER;
|
return AchvTier.MASTER;
|
||||||
|
if (this.score >= 100)
|
||||||
|
return AchvTier.ROGUE;
|
||||||
if (this.score >= 50)
|
if (this.score >= 50)
|
||||||
return AchvTier.ULTRA;
|
return AchvTier.ULTRA;
|
||||||
if (this.score >= 25)
|
if (this.score >= 25)
|
||||||
|
@ -169,6 +169,7 @@ export interface StarterDataEntry {
|
|||||||
moveset: StarterMoveset | StarterFormMoveData;
|
moveset: StarterMoveset | StarterFormMoveData;
|
||||||
eggMoves: integer;
|
eggMoves: integer;
|
||||||
candyCount: integer;
|
candyCount: integer;
|
||||||
|
friendship: integer;
|
||||||
abilityAttr: integer;
|
abilityAttr: integer;
|
||||||
passiveAttr: integer;
|
passiveAttr: integer;
|
||||||
valueReduction: integer;
|
valueReduction: integer;
|
||||||
@ -988,6 +989,7 @@ export class GameData {
|
|||||||
moveset: null,
|
moveset: null,
|
||||||
eggMoves: 0,
|
eggMoves: 0,
|
||||||
candyCount: 0,
|
candyCount: 0,
|
||||||
|
friendship: 0,
|
||||||
abilityAttr: defaultStarterSpecies.includes(speciesId) ? AbilityAttr.ABILITY_1 : 0,
|
abilityAttr: defaultStarterSpecies.includes(speciesId) ? AbilityAttr.ABILITY_1 : 0,
|
||||||
passiveAttr: 0,
|
passiveAttr: 0,
|
||||||
valueReduction: 0
|
valueReduction: 0
|
||||||
@ -1035,6 +1037,7 @@ export class GameData {
|
|||||||
|
|
||||||
const hasPrevolution = pokemonPrevolutions.hasOwnProperty(species.speciesId);
|
const hasPrevolution = pokemonPrevolutions.hasOwnProperty(species.speciesId);
|
||||||
const newCatch = !caughtAttr;
|
const newCatch = !caughtAttr;
|
||||||
|
const hasNewAttr = (caughtAttr & dexAttr) !== dexAttr;
|
||||||
|
|
||||||
if (incrementCount) {
|
if (incrementCount) {
|
||||||
if (!fromEgg) {
|
if (!fromEgg) {
|
||||||
@ -1057,7 +1060,7 @@ export class GameData {
|
|||||||
this.gameStats.shinyPokemonHatched++;
|
this.gameStats.shinyPokemonHatched++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasPrevolution)
|
if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr || fromEgg))
|
||||||
this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * Math.pow(2, pokemon.variant || 0) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1));
|
this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * Math.pow(2, pokemon.variant || 0) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ export class Voucher {
|
|||||||
case VoucherType.PREMIUM:
|
case VoucherType.PREMIUM:
|
||||||
return AchvTier.ULTRA;
|
return AchvTier.ULTRA;
|
||||||
case VoucherType.GOLDEN:
|
case VoucherType.GOLDEN:
|
||||||
return AchvTier.MASTER;
|
return AchvTier.ROGUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ export enum Tutorial {
|
|||||||
Menu = "MENU",
|
Menu = "MENU",
|
||||||
Starter_Select = "STARTER_SELECT",
|
Starter_Select = "STARTER_SELECT",
|
||||||
Pokerus = "POKERUS",
|
Pokerus = "POKERUS",
|
||||||
|
Stat_Change = "STAT_CHANGE",
|
||||||
Select_Item = "SELECT_ITEM",
|
Select_Item = "SELECT_ITEM",
|
||||||
Egg_Gacha = "EGG_GACHA"
|
Egg_Gacha = "EGG_GACHA"
|
||||||
}
|
}
|
||||||
@ -42,6 +43,11 @@ const tutorialHandlers = {
|
|||||||
scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true);
|
scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
[Tutorial.Stat_Change]: (scene: BattleScene) => {
|
||||||
|
return new Promise<void>(resolve => {
|
||||||
|
scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:statChange"), null, () => scene.ui.showText('', null, () => scene.hideFieldOverlay(1000).then(() => resolve())), null, true));
|
||||||
|
});
|
||||||
|
},
|
||||||
[Tutorial.Select_Item]: (scene: BattleScene) => {
|
[Tutorial.Select_Item]: (scene: BattleScene) => {
|
||||||
return new Promise<void>(resolve => {
|
return new Promise<void>(resolve => {
|
||||||
scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => {
|
scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => {
|
||||||
|
@ -7,6 +7,9 @@ import { StatusEffect } from '../data/status-effect';
|
|||||||
import BattleScene from '../battle-scene';
|
import BattleScene from '../battle-scene';
|
||||||
import { Type, getTypeRgb } from '../data/type';
|
import { Type, getTypeRgb } from '../data/type';
|
||||||
import { getVariantTint } from '#app/data/variant';
|
import { getVariantTint } from '#app/data/variant';
|
||||||
|
import { BattleStat } from '#app/data/battle-stat';
|
||||||
|
|
||||||
|
const battleStatOrder = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.ACC, BattleStat.EVA, BattleStat.SPD ];
|
||||||
|
|
||||||
export default class BattleInfo extends Phaser.GameObjects.Container {
|
export default class BattleInfo extends Phaser.GameObjects.Container {
|
||||||
private player: boolean;
|
private player: boolean;
|
||||||
@ -24,6 +27,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
private lastLevelExp: integer;
|
private lastLevelExp: integer;
|
||||||
private lastLevel: integer;
|
private lastLevel: integer;
|
||||||
private lastLevelCapped: boolean;
|
private lastLevelCapped: boolean;
|
||||||
|
private lastBattleStats: string;
|
||||||
|
|
||||||
private box: Phaser.GameObjects.Sprite;
|
private box: Phaser.GameObjects.Sprite;
|
||||||
private nameText: Phaser.GameObjects.Text;
|
private nameText: Phaser.GameObjects.Text;
|
||||||
@ -46,6 +50,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
public expMaskRect: Phaser.GameObjects.Graphics;
|
public expMaskRect: Phaser.GameObjects.Graphics;
|
||||||
|
|
||||||
|
private statsContainer: Phaser.GameObjects.Container;
|
||||||
|
private statsBox: Phaser.GameObjects.Sprite;
|
||||||
|
private statValuesContainer: Phaser.GameObjects.Container;
|
||||||
|
private statNumbers: Phaser.GameObjects.Sprite[];
|
||||||
|
|
||||||
constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) {
|
constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) {
|
||||||
super(scene, x, y);
|
super(scene, x, y);
|
||||||
this.player = player;
|
this.player = player;
|
||||||
@ -138,18 +147,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5);
|
this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5);
|
||||||
this.levelContainer.add(this.levelNumbersContainer);
|
this.levelContainer.add(this.levelNumbersContainer);
|
||||||
|
|
||||||
this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`);
|
|
||||||
this.type1Icon.setOrigin(0, 0);
|
|
||||||
this.add(this.type1Icon);
|
|
||||||
|
|
||||||
this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`);
|
|
||||||
this.type2Icon.setOrigin(0, 0);
|
|
||||||
this.add(this.type2Icon);
|
|
||||||
|
|
||||||
this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`);
|
|
||||||
this.type3Icon.setOrigin(0, 0);
|
|
||||||
this.add(this.type3Icon);
|
|
||||||
|
|
||||||
if (this.player) {
|
if (this.player) {
|
||||||
this.hpNumbersContainer = this.scene.add.container(-15, 10);
|
this.hpNumbersContainer = this.scene.add.container(-15, 10);
|
||||||
this.add(this.hpNumbersContainer);
|
this.add(this.hpNumbersContainer);
|
||||||
@ -171,6 +168,46 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.expBar = expBar;
|
this.expBar = expBar;
|
||||||
this.expMaskRect = expMaskRect;
|
this.expMaskRect = expMaskRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.statsContainer = this.scene.add.container(0, 0);
|
||||||
|
this.statsContainer.setAlpha(0);
|
||||||
|
this.add(this.statsContainer);
|
||||||
|
|
||||||
|
this.statsBox = this.scene.add.sprite(0, 0, `${this.getTextureName()}_stats`);
|
||||||
|
this.statsBox.setOrigin(1, 0.5);
|
||||||
|
this.statsContainer.add(this.statsBox);
|
||||||
|
|
||||||
|
const statLabels: Phaser.GameObjects.Sprite[] = [];
|
||||||
|
this.statNumbers = [];
|
||||||
|
|
||||||
|
this.statValuesContainer = this.scene.add.container(0, 0);
|
||||||
|
this.statsContainer.add(this.statValuesContainer);
|
||||||
|
|
||||||
|
battleStatOrder.map((s, i) => {
|
||||||
|
const statX = i > 1 ? this.statNumbers[i - 2].x + this.statNumbers[i - 2].width + 4 : -this.statsBox.width + 8;
|
||||||
|
const statY = -this.statsBox.height / 2 + 4 + (i < battleStatOrder.length - 1 ? (i % 2 ? 10 : 0) : 5);
|
||||||
|
const statLabel = this.scene.add.sprite(statX, statY, 'pbinfo_stat', BattleStat[s]);
|
||||||
|
statLabel.setOrigin(0, 0);
|
||||||
|
statLabels.push(statLabel);
|
||||||
|
this.statValuesContainer.add(statLabel);
|
||||||
|
|
||||||
|
const statNumber = this.scene.add.sprite(statX + statLabel.width, statY, 'pbinfo_stat_numbers', '3');
|
||||||
|
statNumber.setOrigin(0, 0);
|
||||||
|
this.statNumbers.push(statNumber);
|
||||||
|
this.statValuesContainer.add(statNumber);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`);
|
||||||
|
this.type1Icon.setOrigin(0, 0);
|
||||||
|
this.add(this.type1Icon);
|
||||||
|
|
||||||
|
this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`);
|
||||||
|
this.type2Icon.setOrigin(0, 0);
|
||||||
|
this.add(this.type2Icon);
|
||||||
|
|
||||||
|
this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`);
|
||||||
|
this.type3Icon.setOrigin(0, 0);
|
||||||
|
this.add(this.type3Icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
initInfo(pokemon: Pokemon) {
|
initInfo(pokemon: Pokemon) {
|
||||||
@ -258,7 +295,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510;
|
this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510;
|
||||||
this.lastExp = pokemon.exp;
|
this.lastExp = pokemon.exp;
|
||||||
this.lastLevelExp = pokemon.levelExp;
|
this.lastLevelExp = pokemon.levelExp;
|
||||||
|
|
||||||
|
this.statValuesContainer.setPosition(8, 7)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const battleStats = battleStatOrder.map(() => 0);
|
||||||
|
|
||||||
|
this.lastBattleStats = battleStats.join('');
|
||||||
|
this.updateBattleStats(battleStats);
|
||||||
}
|
}
|
||||||
|
|
||||||
getTextureName(): string {
|
getTextureName(): string {
|
||||||
@ -272,6 +316,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.mini = mini;
|
this.mini = mini;
|
||||||
|
|
||||||
this.box.setTexture(this.getTextureName());
|
this.box.setTexture(this.getTextureName());
|
||||||
|
this.statsBox.setTexture(`${this.getTextureName()}_stats`);
|
||||||
|
|
||||||
if (this.player)
|
if (this.player)
|
||||||
this.y -= 12 * (mini ? 1 : -1);
|
this.y -= 12 * (mini ? 1 : -1);
|
||||||
@ -284,21 +329,34 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
el.y += -8 * (mini ? 1 : -1);
|
el.y += -8 * (mini ? 1 : -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.statValuesContainer.x += 2 * (mini ? 1 : -1);
|
||||||
|
this.statValuesContainer.y += -7 * (mini ? 1 : -1);
|
||||||
|
|
||||||
const toggledElements = [ this.hpNumbersContainer, this.expBar ];
|
const toggledElements = [ this.hpNumbersContainer, this.expBar ];
|
||||||
toggledElements.forEach(el => el.setVisible(!mini));
|
toggledElements.forEach(el => el.setVisible(!mini));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleStats(visible: boolean): void {
|
||||||
|
this.scene.tweens.add({
|
||||||
|
targets: this.statsContainer,
|
||||||
|
duration: Utils.fixedInt(125),
|
||||||
|
ease: 'Sine.easeInOut',
|
||||||
|
alpha: visible ? 1 : 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
updateBossSegments(pokemon: EnemyPokemon): void {
|
updateBossSegments(pokemon: EnemyPokemon): void {
|
||||||
const boss = !!pokemon.bossSegments;
|
const boss = !!pokemon.bossSegments;
|
||||||
|
|
||||||
if (boss !== this.boss) {
|
if (boss !== this.boss) {
|
||||||
this.boss = boss;
|
this.boss = boss;
|
||||||
|
|
||||||
[ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer ].map(e => e.x += 48 * (boss ? -1 : 1));
|
[ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer, this.statValuesContainer ].map(e => e.x += 48 * (boss ? -1 : 1));
|
||||||
this.hpBar.x += 38 * (boss ? -1 : 1);
|
this.hpBar.x += 38 * (boss ? -1 : 1);
|
||||||
this.hpBar.y += 2 * (this.boss ? -1 : 1);
|
this.hpBar.y += 2 * (this.boss ? -1 : 1);
|
||||||
this.hpBar.setTexture(`overlay_hp${boss ? '_boss' : ''}`);
|
this.hpBar.setTexture(`overlay_hp${boss ? '_boss' : ''}`);
|
||||||
this.box.setTexture(this.getTextureName());
|
this.box.setTexture(this.getTextureName());
|
||||||
|
this.statsBox.setTexture(`${this.getTextureName()}_stats`);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bossSegments = boss ? pokemon.bossSegments : 0;
|
this.bossSegments = boss ? pokemon.bossSegments : 0;
|
||||||
@ -317,6 +375,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040)
|
const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040)
|
||||||
divider.setOrigin(0.5, 0);
|
divider.setOrigin(0.5, 0);
|
||||||
this.add(divider);
|
this.add(divider);
|
||||||
|
this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer);
|
||||||
|
|
||||||
divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1);
|
divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1);
|
||||||
this.hpBarSegmentDividers.push(divider);
|
this.hpBarSegmentDividers.push(divider);
|
||||||
@ -439,6 +498,16 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.lastLevel = pokemon.level;
|
this.lastLevel = pokemon.level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const battleStats = pokemon.summonData
|
||||||
|
? pokemon.summonData.battleStats
|
||||||
|
: battleStatOrder.map(() => 0);
|
||||||
|
const battleStatsStr = battleStats.join('');
|
||||||
|
|
||||||
|
if (this.lastBattleStats !== battleStatsStr) {
|
||||||
|
this.updateBattleStats(battleStats);
|
||||||
|
this.lastBattleStats = battleStatsStr;
|
||||||
|
}
|
||||||
|
|
||||||
this.shinyIcon.setVisible(pokemon.isShiny());
|
this.shinyIcon.setVisible(pokemon.isShiny());
|
||||||
|
|
||||||
resolve();
|
resolve();
|
||||||
@ -513,7 +582,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setLevel(level: integer) {
|
setLevel(level: integer): void {
|
||||||
const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel();
|
const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel();
|
||||||
this.levelNumbersContainer.removeAll(true);
|
this.levelNumbersContainer.removeAll(true);
|
||||||
const levelStr = level.toString();
|
const levelStr = level.toString();
|
||||||
@ -522,7 +591,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0));
|
this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
setHpNumbers(hp: integer, maxHp: integer) {
|
setHpNumbers(hp: integer, maxHp: integer): void {
|
||||||
if (!this.player || !this.scene)
|
if (!this.player || !this.scene)
|
||||||
return;
|
return;
|
||||||
this.hpNumbersContainer.removeAll(true);
|
this.hpNumbersContainer.removeAll(true);
|
||||||
@ -535,6 +604,12 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
for (let i = hpStr.length - 1; i >= 0; i--)
|
for (let i = hpStr.length - 1; i >= 0; i--)
|
||||||
this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, 'numbers', hpStr[i]));
|
this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, 'numbers', hpStr[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateBattleStats(battleStats: integer[]): void {
|
||||||
|
battleStatOrder.map((s, i) => {
|
||||||
|
this.statNumbers[i].setFrame(battleStats[s].toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class PlayerBattleInfo extends BattleInfo {
|
export class PlayerBattleInfo extends BattleInfo {
|
||||||
|
@ -5,6 +5,7 @@ import * as Utils from "../utils";
|
|||||||
import MessageUiHandler from "./message-ui-handler";
|
import MessageUiHandler from "./message-ui-handler";
|
||||||
import { getStatName, Stat } from "../data/pokemon-stat";
|
import { getStatName, Stat } from "../data/pokemon-stat";
|
||||||
import { addWindow } from "./ui-theme";
|
import { addWindow } from "./ui-theme";
|
||||||
|
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
|
|
||||||
export default class BattleMessageUiHandler extends MessageUiHandler {
|
export default class BattleMessageUiHandler extends MessageUiHandler {
|
||||||
private levelUpStatsContainer: Phaser.GameObjects.Container;
|
private levelUpStatsContainer: Phaser.GameObjects.Container;
|
||||||
@ -209,7 +210,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
|||||||
} else
|
} else
|
||||||
shownStats = stats;
|
shownStats = stats;
|
||||||
for (let s of stats)
|
for (let s of stats)
|
||||||
levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s) : '???'}\n`;
|
levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s, pokemonId) : '???'}\n`;
|
||||||
this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
|
this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
|
||||||
this.levelUpStatsIncrContent.setVisible(false);
|
this.levelUpStatsIncrContent.setVisible(false);
|
||||||
this.levelUpStatsContainer.setVisible(true);
|
this.levelUpStatsContainer.setVisible(true);
|
||||||
@ -222,9 +223,10 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getIvDescriptor(value: integer, typeIv: integer): string {
|
getIvDescriptor(value: integer, typeIv: integer, pokemonId: integer): string {
|
||||||
let starterIvs: number[] = this.scene.gameData.dexData[this.scene.getEnemyPokemon().species.speciesId].ivs;
|
const starterSpecies = this.scene.getPokemonById(pokemonId).species.getRootSpeciesId(true);
|
||||||
let uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible
|
const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs;
|
||||||
|
const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible
|
||||||
|
|
||||||
// Function to wrap text in color based on comparison
|
// Function to wrap text in color based on comparison
|
||||||
const coloredText = (text: string, isBetter: boolean) => {
|
const coloredText = (text: string, isBetter: boolean) => {
|
||||||
|
@ -69,6 +69,8 @@ export default class CandyBar extends Phaser.GameObjects.Container {
|
|||||||
if (this.tween)
|
if (this.tween)
|
||||||
this.tween.stop();
|
this.tween.stop();
|
||||||
|
|
||||||
|
(this.scene as BattleScene).playSound('shing');
|
||||||
|
|
||||||
this.tween = this.scene.tweens.add({
|
this.tween = this.scene.tweens.add({
|
||||||
targets: this,
|
targets: this,
|
||||||
x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5),
|
x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import BattleScene, { Button } from "../battle-scene";
|
import BattleScene, { Button } from "../battle-scene";
|
||||||
import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler";
|
import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler";
|
||||||
import { Mode } from "./ui";
|
import { Mode } from "./ui";
|
||||||
|
import i18next from "i18next";
|
||||||
|
|
||||||
export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler {
|
export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler {
|
||||||
private switchCheck: boolean;
|
private switchCheck: boolean;
|
||||||
@ -19,14 +20,14 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler {
|
|||||||
const config: OptionSelectConfig = {
|
const config: OptionSelectConfig = {
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
label: 'Yes',
|
label: i18next.t("menu:yes"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
args[0]();
|
args[0]();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'No',
|
label: i18next.t("menu:no"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
args[1]();
|
args[1]();
|
||||||
return true;
|
return true;
|
||||||
|
@ -11,6 +11,7 @@ interface RankingEntry {
|
|||||||
wave: integer
|
wave: integer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't forget to update translations when adding a new category
|
||||||
enum ScoreboardCategory {
|
enum ScoreboardCategory {
|
||||||
DAILY,
|
DAILY,
|
||||||
WEEKLY
|
WEEKLY
|
||||||
@ -40,7 +41,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN);
|
const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN);
|
||||||
this.add(titleWindow);
|
this.add(titleWindow);
|
||||||
|
|
||||||
this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:dailyRankings'), TextStyle.WINDOW, { fontSize: '64px' });
|
this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:loading'), TextStyle.WINDOW, { fontSize: '64px' });
|
||||||
this.titleLabel.setOrigin(0.5, 0.5);
|
this.titleLabel.setOrigin(0.5, 0.5);
|
||||||
this.add(this.titleLabel);
|
this.add(this.titleLabel);
|
||||||
|
|
||||||
@ -156,7 +157,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
.then(jsonResponse => {
|
.then(jsonResponse => {
|
||||||
this.page = page;
|
this.page = page;
|
||||||
this.category = category;
|
this.category = category;
|
||||||
this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} ${i18next.t("menu:rankings")}`);
|
this.titleLabel.setText(`${i18next.t(`menu:${ScoreboardCategory[category].toLowerCase()}Rankings`)}`);
|
||||||
this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5);
|
this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5);
|
||||||
this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5);
|
this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5);
|
||||||
this.pageNumberLabel.setText(page.toString());
|
this.pageNumberLabel.setText(page.toString());
|
||||||
@ -166,7 +167,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
} else
|
} else
|
||||||
this.loadingLabel.setText(i18next.t('menu:noRankings'));
|
this.loadingLabel.setText(i18next.t('menu:noRankings'));
|
||||||
});
|
});
|
||||||
});
|
}).catch(err => { console.error("Failed to load daily rankings:\n", err) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +90,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter;
|
private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter;
|
||||||
private moveSelectFilter: PokemonMoveSelectFilter;
|
private moveSelectFilter: PokemonMoveSelectFilter;
|
||||||
private tmMoveId: Moves;
|
private tmMoveId: Moves;
|
||||||
|
private showMovePp: boolean;
|
||||||
|
|
||||||
private iconAnimHandler: PokemonIconAnimHandler;
|
private iconAnimHandler: PokemonIconAnimHandler;
|
||||||
|
|
||||||
@ -185,6 +186,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
? args[4] as PokemonMoveSelectFilter
|
? args[4] as PokemonMoveSelectFilter
|
||||||
: PartyUiHandler.FilterAllMoves;
|
: PartyUiHandler.FilterAllMoves;
|
||||||
this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE;
|
this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE;
|
||||||
|
this.showMovePp = args.length > 6 && args[6];
|
||||||
|
|
||||||
this.partyContainer.setVisible(true);
|
this.partyContainer.setVisible(true);
|
||||||
this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? '_double' : ''}`);
|
this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? '_double' : ''}`);
|
||||||
@ -663,7 +665,14 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
case PartyOption.MOVE_2:
|
case PartyOption.MOVE_2:
|
||||||
case PartyOption.MOVE_3:
|
case PartyOption.MOVE_3:
|
||||||
case PartyOption.MOVE_4:
|
case PartyOption.MOVE_4:
|
||||||
optionName = pokemon.moveset[option - PartyOption.MOVE_1].getName();
|
const move = pokemon.moveset[option - PartyOption.MOVE_1];
|
||||||
|
if(this.showMovePp) {
|
||||||
|
const maxPP = move.getMovePp();
|
||||||
|
const currPP = maxPP - move.ppUsed;
|
||||||
|
optionName = `${move.getName()} ${currPP}/${maxPP}`;
|
||||||
|
} else {
|
||||||
|
optionName = move.getName();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
||||||
|
@ -161,8 +161,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
|
|||||||
if (isFusion)
|
if (isFusion)
|
||||||
this.pokemonFusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant));
|
this.pokemonFusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant));
|
||||||
|
|
||||||
const originalIvs: integer[] = this.scene.gameData.dexData[pokemon.species.speciesId].caughtAttr
|
const starterSpeciesId = pokemon.species.getRootSpeciesId(true);
|
||||||
? this.scene.gameData.dexData[pokemon.species.speciesId].ivs
|
const originalIvs: integer[] = this.scene.gameData.dexData[starterSpeciesId].caughtAttr
|
||||||
|
? this.scene.gameData.dexData[starterSpeciesId].ivs
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
this.statsContainer.updateIvs(pokemon.ivs, originalIvs);
|
this.statsContainer.updateIvs(pokemon.ivs, originalIvs);
|
||||||
|
@ -8,6 +8,7 @@ import * as Utils from "../utils";
|
|||||||
import PokemonData from "../system/pokemon-data";
|
import PokemonData from "../system/pokemon-data";
|
||||||
import { PokemonHeldItemModifier } from "../modifier/modifier";
|
import { PokemonHeldItemModifier } from "../modifier/modifier";
|
||||||
import MessageUiHandler from "./message-ui-handler";
|
import MessageUiHandler from "./message-ui-handler";
|
||||||
|
import i18next from "i18next";
|
||||||
|
|
||||||
const sessionSlotCount = 5;
|
const sessionSlotCount = 5;
|
||||||
|
|
||||||
@ -258,7 +259,7 @@ class SessionSlot extends Phaser.GameObjects.Container {
|
|||||||
async setupWithData(data: SessionSaveData) {
|
async setupWithData(data: SessionSaveData) {
|
||||||
this.remove(this.loadingLabel, true);
|
this.remove(this.loadingLabel, true);
|
||||||
|
|
||||||
const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode].getName()} - Wave ${data.waveIndex}`, TextStyle.WINDOW);
|
const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode]?.getName() || 'Unknown'} - Wave ${data.waveIndex}`, TextStyle.WINDOW);
|
||||||
this.add(gameModeLabel);
|
this.add(gameModeLabel);
|
||||||
|
|
||||||
const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW);
|
const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW);
|
||||||
@ -314,7 +315,7 @@ class SessionSlot extends Phaser.GameObjects.Container {
|
|||||||
this.scene.gameData.getSession(this.slotId).then(async sessionData => {
|
this.scene.gameData.getSession(this.slotId).then(async sessionData => {
|
||||||
if (!sessionData) {
|
if (!sessionData) {
|
||||||
this.hasData = false;
|
this.hasData = false;
|
||||||
this.loadingLabel.setText('Empty');
|
this.loadingLabel.setText(i18next.t("menu:empty"));
|
||||||
resolve(false);
|
resolve(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import { argbFromRgba } from "@material/material-color-utilities";
|
|||||||
import { OptionSelectItem } from "./abstact-option-select-ui-handler";
|
import { OptionSelectItem } from "./abstact-option-select-ui-handler";
|
||||||
import { pokemonPrevolutions } from "#app/data/pokemon-evolutions";
|
import { pokemonPrevolutions } from "#app/data/pokemon-evolutions";
|
||||||
import { Variant, getVariantTint } from "#app/data/variant";
|
import { Variant, getVariantTint } from "#app/data/variant";
|
||||||
|
import i18next from "i18next";
|
||||||
|
|
||||||
export type StarterSelectCallback = (starters: Starter[]) => void;
|
export type StarterSelectCallback = (starters: Starter[]) => void;
|
||||||
|
|
||||||
@ -1653,7 +1654,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.clearText();
|
this.clearText();
|
||||||
};
|
};
|
||||||
|
|
||||||
ui.showText('Begin with these Pokémon?', null, () => {
|
ui.showText(i18next.t("menu:confirmStartTeam"), null, () => {
|
||||||
ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
const startRun = (gameMode: GameModes) => {
|
const startRun = (gameMode: GameModes) => {
|
||||||
this.scene.gameMode = gameModes[gameMode];
|
this.scene.gameMode = gameModes[gameMode];
|
||||||
|
@ -4,7 +4,8 @@ import { Stat, getStatName } from "../data/pokemon-stat";
|
|||||||
import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text";
|
import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text";
|
||||||
|
|
||||||
const ivChartSize = 24;
|
const ivChartSize = 24;
|
||||||
const ivChartStatCoordMultipliers = [ [ 0, 1 ], [ 0.825, 0.5 ], [ 0.825, -0.5 ], [ 0, -1 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ] ];
|
const ivChartStatCoordMultipliers = [ [ 0, -1 ], [ 0.825, -0.5 ], [ 0.825, 0.5 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ], [ 0, 1 ] ];
|
||||||
|
const ivChartStatIndexes = [0,1,2,5,4,3] // swap special attack and speed
|
||||||
const defaultIvChartData = new Array(12).fill(null).map(() => 0);
|
const defaultIvChartData = new Array(12).fill(null).map(() => 0);
|
||||||
|
|
||||||
export class StatsContainer extends Phaser.GameObjects.Container {
|
export class StatsContainer extends Phaser.GameObjects.Container {
|
||||||
@ -22,7 +23,7 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[i][0], ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat();
|
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat();
|
||||||
|
|
||||||
const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625);
|
const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625);
|
||||||
ivChartBg.setOrigin(0, 0);
|
ivChartBg.setOrigin(0, 0);
|
||||||
@ -62,7 +63,7 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
updateIvs(ivs: integer[], originalIvs?: integer[]): void {
|
updateIvs(ivs: integer[], originalIvs?: integer[]): void {
|
||||||
if (ivs) {
|
if (ivs) {
|
||||||
const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][0], (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat();
|
const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat();
|
||||||
const lastIvChartData = this.statsIvsCache || defaultIvChartData;
|
const lastIvChartData = this.statsIvsCache || defaultIvChartData;
|
||||||
this.statsIvsCache = ivChartData.slice(0);
|
this.statsIvsCache = ivChartData.slice(0);
|
||||||
|
|
||||||
|
@ -441,6 +441,7 @@ export default class SummaryUiHandler extends UiHandler {
|
|||||||
const selectedMove = this.getSelectedMove();
|
const selectedMove = this.getSelectedMove();
|
||||||
|
|
||||||
if (selectedMove) {
|
if (selectedMove) {
|
||||||
|
this.moveDescriptionText.setY(84);
|
||||||
this.movePowerText.setText(selectedMove.power >= 0 ? selectedMove.power.toString() : '---');
|
this.movePowerText.setText(selectedMove.power >= 0 ? selectedMove.power.toString() : '---');
|
||||||
this.moveAccuracyText.setText(selectedMove.accuracy >= 0 ? selectedMove.accuracy.toString() : '---');
|
this.moveAccuracyText.setText(selectedMove.accuracy >= 0 ? selectedMove.accuracy.toString() : '---');
|
||||||
this.moveCategoryIcon.setFrame(MoveCategory[selectedMove.category].toLowerCase());
|
this.moveCategoryIcon.setFrame(MoveCategory[selectedMove.category].toLowerCase());
|
||||||
@ -457,7 +458,6 @@ export default class SummaryUiHandler extends UiHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (moveDescriptionLineCount > 3) {
|
if (moveDescriptionLineCount > 3) {
|
||||||
this.moveDescriptionText.setY(84);
|
|
||||||
this.descriptionScrollTween = this.scene.tweens.add({
|
this.descriptionScrollTween = this.scene.tweens.add({
|
||||||
targets: this.moveDescriptionText,
|
targets: this.moveDescriptionText,
|
||||||
delay: Utils.fixedInt(2000),
|
delay: Utils.fixedInt(2000),
|
||||||
|
@ -65,6 +65,9 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
|
|||||||
this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
|
this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
|
||||||
if (this.splashMessage === battleCountSplashMessage)
|
if (this.splashMessage === battleCountSplashMessage)
|
||||||
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
|
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error("Failed to fetch title stats:\n", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|