Merge branch 'beta' into chillyRecep_expri_re
28
index.css
@ -26,10 +26,36 @@ body {
|
|||||||
#app {
|
#app {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#app > div:first-child {
|
#app > div:first-child {
|
||||||
transform-origin: top !important;
|
transform-origin: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Supports automatic vertical centering as suggested in PR#1114, but only via CSS
|
||||||
|
|
||||||
|
Condition factorized to deduce CSS rules:
|
||||||
|
true if (isLandscape && !isMobile() && !hasTouchscreen() || (hasTouchscreen() && !isTouchControlsEnabled))
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* isLandscape && !isMobile() && !hasTouchscreen() */
|
||||||
|
@media (orientation: landscape) and (pointer: fine) {
|
||||||
|
#app {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (pointer: coarse) {
|
||||||
|
/* hasTouchscreen() && !isTouchControlsEnabled */
|
||||||
|
body:has(> #touchControls[class=visible]) #app {
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> #touchControls[class=visible]) #app > div:first-child {
|
||||||
|
transform-origin: top !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#layout:fullscreen #dpad, #layout:fullscreen {
|
#layout:fullscreen #dpad, #layout:fullscreen {
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -115,7 +115,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -215,7 +215,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -315,7 +315,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -414,7 +414,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -538,7 +538,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 23,
|
"x": 23,
|
||||||
@ -685,7 +685,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -19,
|
"x": -19,
|
||||||
@ -784,7 +784,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 26,
|
"x": 26,
|
||||||
@ -883,7 +883,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 23.5,
|
"x": 23.5,
|
||||||
@ -994,7 +994,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 9,
|
"x": 9,
|
||||||
@ -1069,7 +1069,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -18.5,
|
"x": -18.5,
|
||||||
@ -1157,7 +1157,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 37.5,
|
"x": 37.5,
|
||||||
@ -1221,7 +1221,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1284,7 +1284,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1348,7 +1348,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1448,7 +1448,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1548,7 +1548,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1647,7 +1647,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@ -1759,7 +1759,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -25.5,
|
"x": -25.5,
|
||||||
@ -1870,7 +1870,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 12,
|
"x": 12,
|
||||||
@ -1957,7 +1957,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -27,
|
"x": -27,
|
||||||
@ -2044,7 +2044,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -16,
|
"x": -16,
|
||||||
@ -2143,7 +2143,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -26.5,
|
"x": -26.5,
|
||||||
@ -2230,7 +2230,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 23,
|
"x": 23,
|
||||||
@ -2306,7 +2306,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": 24,
|
"x": 24,
|
||||||
@ -2346,7 +2346,7 @@
|
|||||||
"opacity": 255,
|
"opacity": 255,
|
||||||
"locked": true,
|
"locked": true,
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
"focus": 2
|
"focus": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x": -27,
|
"x": -27,
|
||||||
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
BIN
public/images/items/leaders_crest.png
Normal file
After Width: | Height: | Size: 694 B |
BIN
public/images/items/moon_flute.png
Normal file
After Width: | Height: | Size: 336 B |
BIN
public/images/items/sun_flute.png
Normal file
After Width: | Height: | Size: 347 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.9 KiB |
@ -1,440 +1,230 @@
|
|||||||
{
|
{
|
||||||
"textures": [
|
"textures": [
|
||||||
{
|
{
|
||||||
"image": "745.png",
|
"image": "745.png",
|
||||||
"format": "RGBA8888",
|
"format": "RGBA8888",
|
||||||
"size": {
|
"size": {
|
||||||
"w": 300,
|
"w": 181,
|
||||||
"h": 300
|
"h": 181
|
||||||
},
|
},
|
||||||
"scale": 1,
|
"scale": 1,
|
||||||
"frames": [
|
"frames": [
|
||||||
{
|
{
|
||||||
"filename": "0005.png",
|
"filename": "0004.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"y": 4,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0006.png",
|
"filename": "0008.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"y": 4,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 60,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0015.png",
|
"filename": "0005.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"y": 4,
|
"y": 1,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 60
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 120,
|
"x": 71,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 60
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0016.png",
|
"filename": "0007.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"y": 4,
|
"y": 1,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 60
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 180,
|
"x": 71,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 67
|
"h": 60
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0004.png",
|
"filename": "0006.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"y": 3,
|
"y": 2,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 68
|
"h": 59
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 240,
|
"x": 71,
|
||||||
"y": 0,
|
"y": 60,
|
||||||
"w": 60,
|
"w": 71,
|
||||||
"h": 68
|
"h": 59
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0008.png",
|
"filename": "0003.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 3,
|
"y": 0,
|
||||||
"w": 61,
|
"w": 70,
|
||||||
"h": 68
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 67,
|
"y": 61,
|
||||||
"w": 61,
|
"w": 70,
|
||||||
"h": 68
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0014.png",
|
"filename": "0009.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 0,
|
||||||
"y": 3,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 70,
|
||||||
"h": 68
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 61,
|
"x": 0,
|
||||||
"y": 67,
|
"y": 61,
|
||||||
"w": 60,
|
"w": 70,
|
||||||
"h": 68
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0018.png",
|
"filename": "0001.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 0,
|
"x": 1,
|
||||||
"y": 3,
|
"y": 2,
|
||||||
"w": 61,
|
"w": 68,
|
||||||
"h": 68
|
"h": 59
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 121,
|
"x": 0,
|
||||||
"y": 67,
|
"y": 122,
|
||||||
"w": 61,
|
"w": 68,
|
||||||
"h": 68
|
"h": 59
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0007.png",
|
"filename": "0002.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 0,
|
||||||
"y": 2,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 69,
|
||||||
"h": 69
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 182,
|
"x": 70,
|
||||||
"y": 68,
|
"y": 119,
|
||||||
"w": 60,
|
"w": 69,
|
||||||
"h": 69
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0017.png",
|
"filename": "0010.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 61,
|
"w": 72,
|
||||||
"h": 71
|
"h": 61
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 0,
|
||||||
"y": 2,
|
"y": 0,
|
||||||
"w": 60,
|
"w": 69,
|
||||||
"h": 69
|
"h": 61
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 70,
|
||||||
"y": 135,
|
"y": 119,
|
||||||
"w": 60,
|
"w": 69,
|
||||||
"h": 69
|
"h": 61
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
{
|
]
|
||||||
"filename": "0003.png",
|
}
|
||||||
"rotated": false,
|
],
|
||||||
"trimmed": true,
|
"meta": {
|
||||||
"sourceSize": {
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
"w": 61,
|
"version": "3.0",
|
||||||
"h": 71
|
"smartupdate": "$TexturePacker:SmartUpdate:9bdd7250af45db121574c90e718874a8:ca85d052f16849220d83acd876b20b8b:f9304907e03a5223c5bc78c934419106$"
|
||||||
},
|
}
|
||||||
"spriteSourceSize": {
|
}
|
||||||
"x": 0,
|
|
||||||
"y": 1,
|
|
||||||
"w": 61,
|
|
||||||
"h": 70
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 60,
|
|
||||||
"y": 135,
|
|
||||||
"w": 61,
|
|
||||||
"h": 70
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0013.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": true,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 1,
|
|
||||||
"w": 61,
|
|
||||||
"h": 70
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 121,
|
|
||||||
"y": 135,
|
|
||||||
"w": 61,
|
|
||||||
"h": 70
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0001.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 182,
|
|
||||||
"y": 137,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0011.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 182,
|
|
||||||
"y": 137,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0002.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 205,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0009.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 61,
|
|
||||||
"y": 205,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0019.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 61,
|
|
||||||
"y": 205,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0010.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 122,
|
|
||||||
"y": 208,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0020.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 122,
|
|
||||||
"y": 208,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "0012.png",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": false,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
},
|
|
||||||
"frame": {
|
|
||||||
"x": 183,
|
|
||||||
"y": 208,
|
|
||||||
"w": 61,
|
|
||||||
"h": 71
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meta": {
|
|
||||||
"app": "https://www.codeandweb.com/texturepacker",
|
|
||||||
"version": "3.0",
|
|
||||||
"smartupdate": "$TexturePacker:SmartUpdate:8d47c2cedd75d15c81c3aa0a0b14133c:28c19026319cfbbb59916e3d1b92f732:f9304907e03a5223c5bc78c934419106$"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 2.9 KiB |
@ -1,167 +1,524 @@
|
|||||||
{
|
{
|
||||||
"textures": [
|
"textures": [
|
||||||
{
|
{
|
||||||
"image": "745.png",
|
"image": "745.png",
|
||||||
"format": "RGBA8888",
|
"format": "RGBA8888",
|
||||||
"size": {
|
"size": {
|
||||||
"w": 189,
|
"w": 286,
|
||||||
"h": 189
|
"h": 286
|
||||||
},
|
},
|
||||||
"scale": 1,
|
"scale": 1,
|
||||||
"frames": [
|
"frames": [
|
||||||
{
|
{
|
||||||
"filename": "0006.png",
|
"filename": "0007.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 3,
|
||||||
"w": 65,
|
"w": 60,
|
||||||
"h": 58
|
"h": 55
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 65,
|
"w": 60,
|
||||||
"h": 58
|
"h": 55
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0005.png",
|
"filename": "0008.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 1,
|
"y": 3,
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 57
|
"h": 55
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 65,
|
"x": 60,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 57
|
"h": 55
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0007.png",
|
"filename": "0019.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 2,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 3,
|
||||||
"w": 64,
|
"w": 60,
|
||||||
"h": 58
|
"h": 55
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 65,
|
"x": 120,
|
||||||
"y": 57,
|
"y": 0,
|
||||||
"w": 64,
|
"w": 60,
|
||||||
"h": 58
|
"h": 55
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0003.png",
|
"filename": "0020.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 2,
|
"x": 0,
|
||||||
"y": 1,
|
"y": 3,
|
||||||
"w": 64,
|
"w": 60,
|
||||||
"h": 57
|
"h": 55
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 180,
|
||||||
"y": 58,
|
"y": 0,
|
||||||
"w": 64,
|
"w": 60,
|
||||||
"h": 57
|
"h": 55
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0004.png",
|
"filename": "0005.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 1,
|
"x": 0,
|
||||||
"y": 2,
|
"y": 1,
|
||||||
"w": 65,
|
"w": 60,
|
||||||
"h": 56
|
"h": 57
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 115,
|
"y": 55,
|
||||||
"w": 65,
|
"w": 60,
|
||||||
"h": 56
|
"h": 57
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0001.png",
|
"filename": "0006.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 3,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 1,
|
||||||
"w": 62,
|
"w": 60,
|
||||||
"h": 58
|
"h": 57
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 65,
|
"x": 60,
|
||||||
"y": 115,
|
"y": 55,
|
||||||
"w": 62,
|
"w": 60,
|
||||||
"h": 58
|
"h": 57
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "0002.png",
|
"filename": "0009.png",
|
||||||
"rotated": false,
|
"rotated": false,
|
||||||
"trimmed": true,
|
"trimmed": true,
|
||||||
"sourceSize": {
|
"sourceSize": {
|
||||||
"w": 66,
|
"w": 60,
|
||||||
"h": 58
|
"h": 58
|
||||||
},
|
},
|
||||||
"spriteSourceSize": {
|
"spriteSourceSize": {
|
||||||
"x": 3,
|
"x": 0,
|
||||||
"y": 0,
|
"y": 1,
|
||||||
"w": 62,
|
"w": 60,
|
||||||
"h": 58
|
"h": 57
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 127,
|
"x": 120,
|
||||||
"y": 115,
|
"y": 55,
|
||||||
"w": 62,
|
"w": 60,
|
||||||
"h": 58
|
"h": 57
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
"filename": "0010.png",
|
||||||
],
|
"rotated": false,
|
||||||
"meta": {
|
"trimmed": true,
|
||||||
"app": "https://www.codeandweb.com/texturepacker",
|
"sourceSize": {
|
||||||
"version": "3.0",
|
"w": 60,
|
||||||
"smartupdate": "$TexturePacker:SmartUpdate:1b95a218abc87c12576165b943d3cb77:4d796dc75302ca2e18ce15e67dcf3f0f:f9304907e03a5223c5bc78c934419106$"
|
"h": 58
|
||||||
}
|
},
|
||||||
}
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 55,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0022.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 55,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0017.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 112,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0018.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 60,
|
||||||
|
"y": 112,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0021.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 1,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 120,
|
||||||
|
"y": 112,
|
||||||
|
"w": 60,
|
||||||
|
"h": 57
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0001.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 112,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0013.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 112,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0002.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 169,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0014.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 169,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0003.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 60,
|
||||||
|
"y": 169,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0004.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 120,
|
||||||
|
"y": 169,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0011.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 170,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0012.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 227,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0024.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 227,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0015.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 60,
|
||||||
|
"y": 227,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0016.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 120,
|
||||||
|
"y": 227,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "0023.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 180,
|
||||||
|
"y": 228,
|
||||||
|
"w": 60,
|
||||||
|
"h": 58
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:d67741bfb78b7ff0c920c5395dd91fc2:e78172ef76e3b6327173461a595a8a6b:f9304907e03a5223c5bc78c934419106$"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 4.6 KiB |
188
public/images/statuses_ca_ES.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_ca_ES.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_ca_ES.png
Normal file
After Width: | Height: | Size: 441 B |
188
public/images/statuses_de.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_de.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_de.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
188
public/images/statuses_es.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_es.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_es.png
Normal file
After Width: | Height: | Size: 441 B |
188
public/images/statuses_fr.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_fr.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_fr.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
188
public/images/statuses_it.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_it.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_it.png
Normal file
After Width: | Height: | Size: 441 B |
188
public/images/statuses_ja.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_ja.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_ja.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
188
public/images/statuses_ko.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_ko.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_ko.png
Normal file
After Width: | Height: | Size: 441 B |
188
public/images/statuses_pt_BR.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_pt_BR.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_pt_BR.png
Normal file
After Width: | Height: | Size: 519 B |
188
public/images/statuses_zh_CN.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses_zh_CN.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_zh_CN.png
Normal file
After Width: | Height: | Size: 441 B |
188
public/images/statuses_zh_TW.json
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "statuses.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 64
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "pokerus",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 22,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "burn",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "faint",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "freeze",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "paralysis",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 32,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "poison",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 40,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "sleep",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 48,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "toxic",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 56,
|
||||||
|
"w": 20,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/statuses_zh_TW.png
Normal file
After Width: | Height: | Size: 441 B |
@ -813,10 +813,6 @@ export default class Move implements Localizable {
|
|||||||
power.value *= typeBoost.boostValue;
|
power.value *= typeBoost.boostValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() && this.type === Type.GROUND && this.moveTarget === MoveTarget.ALL_NEAR_OTHERS) {
|
|
||||||
power.value /= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
applyMoveAttrs(VariablePowerAttr, source, target, this, power);
|
applyMoveAttrs(VariablePowerAttr, source, target, this, power);
|
||||||
|
|
||||||
source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power);
|
source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power);
|
||||||
@ -6971,6 +6967,7 @@ export function initMoves() {
|
|||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1)
|
new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1)
|
||||||
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
|
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
|
||||||
|
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||||
.makesContact(false)
|
.makesContact(false)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||||
new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
||||||
@ -7364,6 +7361,7 @@ export function initMoves() {
|
|||||||
new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2)
|
new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2)
|
||||||
.attr(PreMoveMessageAttr, magnitudeMessageFunc)
|
.attr(PreMoveMessageAttr, magnitudeMessageFunc)
|
||||||
.attr(MagnitudePowerAttr)
|
.attr(MagnitudePowerAttr)
|
||||||
|
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||||
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
|
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
|
||||||
.makesContact(false)
|
.makesContact(false)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||||
@ -8238,6 +8236,7 @@ export function initMoves() {
|
|||||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||||
new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5)
|
new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5)
|
||||||
.attr(StatStageChangeAttr, [ Stat.SPD ], -1)
|
.attr(StatStageChangeAttr, [ Stat.SPD ], -1)
|
||||||
|
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||||
.makesContact(false)
|
.makesContact(false)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||||
new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5)
|
new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5)
|
||||||
@ -9127,7 +9126,7 @@ export function initMoves() {
|
|||||||
.condition(failIfDampCondition)
|
.condition(failIfDampCondition)
|
||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new AttackMove(Moves.GRASSY_GLIDE, Type.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8)
|
new AttackMove(Moves.GRASSY_GLIDE, Type.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8)
|
||||||
.attr(IncrementMovePriorityAttr, (user, target, move) =>user.scene.arena.getTerrainType()===TerrainType.GRASSY&&user.isGrounded()),
|
.attr(IncrementMovePriorityAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()),
|
||||||
new AttackMove(Moves.RISING_VOLTAGE, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8)
|
new AttackMove(Moves.RISING_VOLTAGE, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8)
|
||||||
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1),
|
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1),
|
||||||
new AttackMove(Moves.TERRAIN_PULSE, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8)
|
new AttackMove(Moves.TERRAIN_PULSE, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8)
|
||||||
|
@ -10,6 +10,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount
|
|||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
||||||
|
import {PokemonMove} from "#app/field/pokemon";
|
||||||
|
|
||||||
const OPTION_1_REQUIRED_MOVE = Moves.SURF;
|
const OPTION_1_REQUIRED_MOVE = Moves.SURF;
|
||||||
const OPTION_2_REQUIRED_MOVE = Moves.FLY;
|
const OPTION_2_REQUIRED_MOVE = Moves.FLY;
|
||||||
@ -44,8 +45,8 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
const encounter = scene.currentBattle.mysteryEncounter!;
|
const encounter = scene.currentBattle.mysteryEncounter!;
|
||||||
|
|
||||||
encounter.setDialogueToken("damagePercentage", String(DAMAGE_PERCENTAGE));
|
encounter.setDialogueToken("damagePercentage", String(DAMAGE_PERCENTAGE));
|
||||||
encounter.setDialogueToken("option1RequiredMove", Moves[OPTION_1_REQUIRED_MOVE]);
|
encounter.setDialogueToken("option1RequiredMove", new PokemonMove(OPTION_1_REQUIRED_MOVE).getName());
|
||||||
encounter.setDialogueToken("option2RequiredMove", Moves[OPTION_2_REQUIRED_MOVE]);
|
encounter.setDialogueToken("option2RequiredMove", new PokemonMove(OPTION_2_REQUIRED_MOVE).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
|
@ -87,6 +87,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter =
|
|||||||
);
|
);
|
||||||
const e4Template = trainerPartyTemplates.ELITE_FOUR;
|
const e4Template = trainerPartyTemplates.ELITE_FOUR;
|
||||||
const brutalConfig = trainerConfigs[brutalTrainerType].clone();
|
const brutalConfig = trainerConfigs[brutalTrainerType].clone();
|
||||||
|
brutalConfig.title = trainerConfigs[brutalTrainerType].title;
|
||||||
brutalConfig.setPartyTemplates(e4Template);
|
brutalConfig.setPartyTemplates(e4Template);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
brutalConfig.partyTemplateFunc = null; // Overrides gym leader party template func
|
brutalConfig.partyTemplateFunc = null; // Overrides gym leader party template func
|
||||||
|
@ -17,7 +17,8 @@ export enum SpeciesWildEvolutionDelay {
|
|||||||
SHORT,
|
SHORT,
|
||||||
MEDIUM,
|
MEDIUM,
|
||||||
LONG,
|
LONG,
|
||||||
VERY_LONG
|
VERY_LONG,
|
||||||
|
NEVER
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum EvolutionItem {
|
export enum EvolutionItem {
|
||||||
@ -39,19 +40,34 @@ export enum EvolutionItem {
|
|||||||
TART_APPLE,
|
TART_APPLE,
|
||||||
STRAWBERRY_SWEET,
|
STRAWBERRY_SWEET,
|
||||||
UNREMARKABLE_TEACUP,
|
UNREMARKABLE_TEACUP,
|
||||||
|
UPGRADE,
|
||||||
CHIPPED_POT = 51,
|
DUBIOUS_DISC,
|
||||||
BLACK_AUGURITE,
|
DRAGON_SCALE,
|
||||||
|
PRISM_SCALE,
|
||||||
|
RAZOR_CLAW,
|
||||||
|
RAZOR_FANG,
|
||||||
|
REAPER_CLOTH,
|
||||||
|
ELECTIRIZER,
|
||||||
|
MAGMARIZER,
|
||||||
|
PROTECTOR,
|
||||||
|
SACHET,
|
||||||
|
WHIPPED_DREAM,
|
||||||
|
SYRUPY_APPLE,
|
||||||
|
CHIPPED_POT,
|
||||||
GALARICA_CUFF,
|
GALARICA_CUFF,
|
||||||
GALARICA_WREATH,
|
GALARICA_WREATH,
|
||||||
PEAT_BLOCK,
|
|
||||||
AUSPICIOUS_ARMOR,
|
AUSPICIOUS_ARMOR,
|
||||||
MALICIOUS_ARMOR,
|
MALICIOUS_ARMOR,
|
||||||
MASTERPIECE_TEACUP,
|
MASTERPIECE_TEACUP,
|
||||||
|
SUN_FLUTE,
|
||||||
|
MOON_FLUTE,
|
||||||
|
|
||||||
|
BLACK_AUGURITE = 51,
|
||||||
|
PEAT_BLOCK,
|
||||||
METAL_ALLOY,
|
METAL_ALLOY,
|
||||||
SCROLL_OF_DARKNESS,
|
SCROLL_OF_DARKNESS,
|
||||||
SCROLL_OF_WATERS,
|
SCROLL_OF_WATERS,
|
||||||
SYRUPY_APPLE
|
LEADERS_CREST
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -222,7 +238,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
],
|
],
|
||||||
[Species.SLOWPOKE]: [
|
[Species.SLOWPOKE]: [
|
||||||
new SpeciesEvolution(Species.SLOWBRO, 37, null, null),
|
new SpeciesEvolution(Species.SLOWBRO, 37, null, null),
|
||||||
new SpeciesEvolution(Species.SLOWKING, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* King's Rock */), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.SLOWKING, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.MAGNEMITE]: [
|
[Species.MAGNEMITE]: [
|
||||||
new SpeciesEvolution(Species.MAGNETON, 30, null, null)
|
new SpeciesEvolution(Species.MAGNETON, 30, null, null)
|
||||||
@ -249,8 +265,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.ELECTRODE, 30, null, null)
|
new SpeciesEvolution(Species.ELECTRODE, 30, null, null)
|
||||||
],
|
],
|
||||||
[Species.CUBONE]: [
|
[Species.CUBONE]: [
|
||||||
new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.MEDIUM),
|
new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.MAROWAK, 28, null, null)
|
new SpeciesEvolution(Species.MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.TYROGUE]: [
|
[Species.TYROGUE]: [
|
||||||
new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] > p.stats[Stat.DEF])),
|
new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] > p.stats[Stat.DEF])),
|
||||||
@ -258,8 +274,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] === p.stats[Stat.DEF]))
|
new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] === p.stats[Stat.DEF]))
|
||||||
],
|
],
|
||||||
[Species.KOFFING]: [
|
[Species.KOFFING]: [
|
||||||
new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.METROPOLIS || p.scene.arena.biomeType === Biome.SLUM), SpeciesWildEvolutionDelay.MEDIUM),
|
new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.WEEZING, 35, null, null)
|
new SpeciesEvolution(Species.WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.RHYHORN]: [
|
[Species.RHYHORN]: [
|
||||||
new SpeciesEvolution(Species.RHYDON, 42, null, null)
|
new SpeciesEvolution(Species.RHYDON, 42, null, null)
|
||||||
@ -304,7 +320,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.QUILAVA, 14, null, null)
|
new SpeciesEvolution(Species.QUILAVA, 14, null, null)
|
||||||
],
|
],
|
||||||
[Species.QUILAVA]: [
|
[Species.QUILAVA]: [
|
||||||
new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.TOTODILE]: [
|
[Species.TOTODILE]: [
|
||||||
@ -652,7 +668,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.DEWOTT, 17, null, null)
|
new SpeciesEvolution(Species.DEWOTT, 17, null, null)
|
||||||
],
|
],
|
||||||
[Species.DEWOTT]: [
|
[Species.DEWOTT]: [
|
||||||
new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.PATRAT]: [
|
[Species.PATRAT]: [
|
||||||
@ -800,10 +816,10 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.BISHARP, 52, null, null)
|
new SpeciesEvolution(Species.BISHARP, 52, null, null)
|
||||||
],
|
],
|
||||||
[Species.BISHARP]: [
|
[Species.BISHARP]: [
|
||||||
new SpeciesEvolution(Species.KINGAMBIT, 64, null, null)
|
new SpeciesEvolution(Species.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.RUFFLET]: [
|
[Species.RUFFLET]: [
|
||||||
new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.VULLABY]: [
|
[Species.VULLABY]: [
|
||||||
@ -883,20 +899,20 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.CLAWITZER, 37, null, null)
|
new SpeciesEvolution(Species.CLAWITZER, 37, null, null)
|
||||||
],
|
],
|
||||||
[Species.TYRUNT]: [
|
[Species.TYRUNT]: [
|
||||||
new SpeciesEvolution(Species.TYRANTRUM, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.TYRANTRUM, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.AMAURA]: [
|
[Species.AMAURA]: [
|
||||||
new SpeciesEvolution(Species.AURORUS, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
new SpeciesEvolution(Species.AURORUS, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
||||||
],
|
],
|
||||||
[Species.GOOMY]: [
|
[Species.GOOMY]: [
|
||||||
new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.SLIGGOO]: [
|
[Species.SLIGGOO]: [
|
||||||
new SpeciesEvolution(Species.GOODRA, 50, null, new SpeciesEvolutionCondition(p => [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ].indexOf(p.scene.arena.weather?.weatherType || WeatherType.NONE) > -1), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.GOODRA, 50, null, new SpeciesEvolutionCondition(p => [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ].indexOf(p.scene.arena.weather?.weatherType || WeatherType.NONE) > -1), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.BERGMITE]: [
|
[Species.BERGMITE]: [
|
||||||
new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.NOIBAT]: [
|
[Species.NOIBAT]: [
|
||||||
@ -906,7 +922,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.DARTRIX, 17, null, null)
|
new SpeciesEvolution(Species.DARTRIX, 17, null, null)
|
||||||
],
|
],
|
||||||
[Species.DARTRIX]: [
|
[Species.DARTRIX]: [
|
||||||
new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)),
|
||||||
new SpeciesEvolution(Species.DECIDUEYE, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.DECIDUEYE, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.LITTEN]: [
|
[Species.LITTEN]: [
|
||||||
@ -928,7 +944,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.TOUCANNON, 28, null, null)
|
new SpeciesEvolution(Species.TOUCANNON, 28, null, null)
|
||||||
],
|
],
|
||||||
[Species.YUNGOOS]: [
|
[Species.YUNGOOS]: [
|
||||||
new SpeciesEvolution(Species.GUMSHOOS, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.GUMSHOOS, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.GRUBBIN]: [
|
[Species.GRUBBIN]: [
|
||||||
new SpeciesEvolution(Species.CHARJABUG, 20, null, null)
|
new SpeciesEvolution(Species.CHARJABUG, 20, null, null)
|
||||||
@ -946,7 +962,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.ARAQUANID, 22, null, null)
|
new SpeciesEvolution(Species.ARAQUANID, 22, null, null)
|
||||||
],
|
],
|
||||||
[Species.FOMANTIS]: [
|
[Species.FOMANTIS]: [
|
||||||
new SpeciesEvolution(Species.LURANTIS, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
new SpeciesEvolution(Species.LURANTIS, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY))
|
||||||
],
|
],
|
||||||
[Species.MORELULL]: [
|
[Species.MORELULL]: [
|
||||||
new SpeciesEvolution(Species.SHIINOTIC, 24, null, null)
|
new SpeciesEvolution(Species.SHIINOTIC, 24, null, null)
|
||||||
@ -973,17 +989,17 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.KOMMO_O, 45, null, null)
|
new SpeciesEvolution(Species.KOMMO_O, 45, null, null)
|
||||||
],
|
],
|
||||||
[Species.COSMOG]: [
|
[Species.COSMOG]: [
|
||||||
new SpeciesEvolution(Species.COSMOEM, 43, null, null)
|
new SpeciesEvolution(Species.COSMOEM, 23, null, null)
|
||||||
],
|
],
|
||||||
[Species.COSMOEM]: [
|
[Species.COSMOEM]: [
|
||||||
new SpeciesEvolution(Species.SOLGALEO, 53, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)),
|
new SpeciesEvolution(Species.SOLGALEO, 53, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG),
|
||||||
new SpeciesEvolution(Species.LUNALA, 53, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
new SpeciesEvolution(Species.LUNALA, 53, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.MELTAN]: [
|
[Species.MELTAN]: [
|
||||||
new SpeciesEvolution(Species.MELMETAL, 48, null, null)
|
new SpeciesEvolution(Species.MELMETAL, 48, null, null)
|
||||||
],
|
],
|
||||||
[Species.ALOLA_RATTATA]: [
|
[Species.ALOLA_RATTATA]: [
|
||||||
new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
||||||
],
|
],
|
||||||
[Species.ALOLA_DIGLETT]: [
|
[Species.ALOLA_DIGLETT]: [
|
||||||
new SpeciesEvolution(Species.ALOLA_DUGTRIO, 26, null, null)
|
new SpeciesEvolution(Species.ALOLA_DUGTRIO, 26, null, null)
|
||||||
@ -1090,7 +1106,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.GALAR_RAPIDASH, 40, null, null)
|
new SpeciesEvolution(Species.GALAR_RAPIDASH, 40, null, null)
|
||||||
],
|
],
|
||||||
[Species.GALAR_FARFETCHD]: [
|
[Species.GALAR_FARFETCHD]: [
|
||||||
new SpeciesEvolution(Species.SIRFETCHD, 30, null, null)
|
new SpeciesEvolution(Species.SIRFETCHD, 30, null, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.GALAR_SLOWPOKE]: [
|
[Species.GALAR_SLOWPOKE]: [
|
||||||
new SpeciesEvolution(Species.GALAR_SLOWBRO, 1, EvolutionItem.GALARICA_CUFF, null, SpeciesWildEvolutionDelay.VERY_LONG),
|
new SpeciesEvolution(Species.GALAR_SLOWBRO, 1, EvolutionItem.GALARICA_CUFF, null, SpeciesWildEvolutionDelay.VERY_LONG),
|
||||||
@ -1106,7 +1122,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.GALAR_LINOONE, 20, null, null)
|
new SpeciesEvolution(Species.GALAR_LINOONE, 20, null, null)
|
||||||
],
|
],
|
||||||
[Species.GALAR_LINOONE]: [
|
[Species.GALAR_LINOONE]: [
|
||||||
new SpeciesEvolution(Species.OBSTAGOON, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
new SpeciesEvolution(Species.OBSTAGOON, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
||||||
],
|
],
|
||||||
[Species.GALAR_YAMASK]: [
|
[Species.GALAR_YAMASK]: [
|
||||||
new SpeciesEvolution(Species.RUNERIGUS, 34, null, null)
|
new SpeciesEvolution(Species.RUNERIGUS, 34, null, null)
|
||||||
@ -1214,7 +1230,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.GLIMMORA, 35, null, null)
|
new SpeciesEvolution(Species.GLIMMORA, 35, null, null)
|
||||||
],
|
],
|
||||||
[Species.GREAVARD]: [
|
[Species.GREAVARD]: [
|
||||||
new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT))
|
||||||
],
|
],
|
||||||
[Species.FRIGIBAX]: [
|
[Species.FRIGIBAX]: [
|
||||||
new SpeciesEvolution(Species.ARCTIBAX, 35, null, null)
|
new SpeciesEvolution(Species.ARCTIBAX, 35, null, null)
|
||||||
@ -1226,8 +1242,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.CLODSIRE, 20, null, null)
|
new SpeciesEvolution(Species.CLODSIRE, 20, null, null)
|
||||||
],
|
],
|
||||||
[Species.PIKACHU]: [
|
[Species.PIKACHU]: [
|
||||||
new SpeciesFormEvolution(Species.ALOLA_RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.ALOLA_RAICHU, "", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesFormEvolution(Species.RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
@ -1255,7 +1271,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
],
|
],
|
||||||
[Species.POLIWHIRL]: [
|
[Species.POLIWHIRL]: [
|
||||||
new SpeciesEvolution(Species.POLIWRATH, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.POLIWRATH, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesEvolution(Species.POLITOED, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* King's Rock */), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.POLITOED, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.WEEPINBELL]: [
|
[Species.WEEPINBELL]: [
|
||||||
new SpeciesEvolution(Species.VICTREEBEL, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.VICTREEBEL, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
@ -1267,7 +1283,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.CLOYSTER, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.CLOYSTER, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.EXEGGCUTE]: [
|
[Species.EXEGGCUTE]: [
|
||||||
new SpeciesEvolution(Species.ALOLA_EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.ALOLA_EXEGGUTOR, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.TANGELA]: [
|
[Species.TANGELA]: [
|
||||||
@ -1280,12 +1296,12 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.EEVEE]: [
|
[Species.EEVEE]: [
|
||||||
new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
@ -1329,10 +1345,10 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.DUDUNSPARCE, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.DUDUNSPARCE, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.GLIGAR]: [
|
[Species.GLIGAR]: [
|
||||||
new SpeciesEvolution(Species.GLISCOR, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor fang at night*/), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor fang at night*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.SNEASEL]: [
|
[Species.SNEASEL]: [
|
||||||
new SpeciesEvolution(Species.WEAVILE, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor claw at night*/), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor claw at night*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.URSARING]: [
|
[Species.URSARING]: [
|
||||||
new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna
|
new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna
|
||||||
@ -1362,8 +1378,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.SUDOWOODO, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM)
|
new SpeciesEvolution(Species.SUDOWOODO, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM)
|
||||||
],
|
],
|
||||||
[Species.MIME_JR]: [
|
[Species.MIME_JR]: [
|
||||||
new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.biomeType === Biome.ICE_CAVE || p.scene.arena.biomeType === Biome.SNOWY_FOREST)), SpeciesWildEvolutionDelay.MEDIUM),
|
new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), SpeciesWildEvolutionDelay.MEDIUM),
|
||||||
new SpeciesEvolution(Species.MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM)
|
new SpeciesEvolution(Species.MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)), SpeciesWildEvolutionDelay.MEDIUM)
|
||||||
],
|
],
|
||||||
[Species.PANSAGE]: [
|
[Species.PANSAGE]: [
|
||||||
new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
@ -1381,8 +1397,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.WHIMSICOTT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.WHIMSICOTT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.PETILIL]: [
|
[Species.PETILIL]: [
|
||||||
new SpeciesEvolution(Species.HISUI_LILLIGANT, 1, EvolutionItem.SUN_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.VERY_LONG),
|
new SpeciesEvolution(Species.HISUI_LILLIGANT, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.BASCULIN]: [
|
[Species.BASCULIN]: [
|
||||||
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG),
|
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG),
|
||||||
@ -1435,7 +1451,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.CLOBBOPUS]: [
|
[Species.CLOBBOPUS]: [
|
||||||
new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TAUNT).length > 0), SpeciesWildEvolutionDelay.MEDIUM)
|
new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TAUNT).length > 0)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/)
|
||||||
],
|
],
|
||||||
[Species.SINISTEA]: [
|
[Species.SINISTEA]: [
|
||||||
new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
@ -1472,7 +1488,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.OVERQWIL, 28, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.BARB_BARRAGE).length > 0), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.OVERQWIL, 28, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.BARB_BARRAGE).length > 0), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.HISUI_SNEASEL]: [
|
[Species.HISUI_SNEASEL]: [
|
||||||
new SpeciesEvolution(Species.SNEASLER, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY /* Razor claw at day*/), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY /* Razor claw at day*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.CHARCADET]: [
|
[Species.CHARCADET]: [
|
||||||
new SpeciesEvolution(Species.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG),
|
new SpeciesEvolution(Species.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG),
|
||||||
@ -1512,10 +1528,10 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
SpeciesWildEvolutionDelay.VERY_LONG)
|
SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.RHYDON]: [
|
[Species.RHYDON]: [
|
||||||
new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Protector */), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.SEADRA]: [
|
[Species.SEADRA]: [
|
||||||
new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Dragon scale*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.SCYTHER]: [
|
[Species.SCYTHER]: [
|
||||||
new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(
|
new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(
|
||||||
@ -1524,22 +1540,22 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.ELECTABUZZ]: [
|
[Species.ELECTABUZZ]: [
|
||||||
new SpeciesEvolution(Species.ELECTIVIRE, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Electirizer*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.ELECTIVIRE, 1, EvolutionItem.ELECTIRIZER, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.MAGMAR]: [
|
[Species.MAGMAR]: [
|
||||||
new SpeciesEvolution(Species.MAGMORTAR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Magmarizer*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.MAGMORTAR, 1, EvolutionItem.MAGMARIZER, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.PORYGON]: [
|
[Species.PORYGON]: [
|
||||||
new SpeciesEvolution(Species.PORYGON2, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Upgrade*/), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.PORYGON2, 1, EvolutionItem.UPGRADE, null, SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.PORYGON2]: [
|
[Species.PORYGON2]: [
|
||||||
new SpeciesEvolution(Species.PORYGON_Z, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Dubious disc*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.PORYGON_Z, 1, EvolutionItem.DUBIOUS_DISC, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.FEEBAS]: [
|
[Species.FEEBAS]: [
|
||||||
new SpeciesEvolution(Species.MILOTIC, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Prism scale*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.MILOTIC, 1, EvolutionItem.PRISM_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.DUSCLOPS]: [
|
[Species.DUSCLOPS]: [
|
||||||
new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Reaper cloth*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.CLAMPERL]: [
|
[Species.CLAMPERL]: [
|
||||||
new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG),
|
new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG),
|
||||||
@ -1558,10 +1574,10 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.KARRABLAST].caughtAttr), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.KARRABLAST].caughtAttr), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.SPRITZEE]: [
|
[Species.SPRITZEE]: [
|
||||||
new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Sachet*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.SWIRLIX]: [
|
[Species.SWIRLIX]: [
|
||||||
new SpeciesEvolution(Species.SLURPUFF, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Whipped Dream*/), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.SLURPUFF, 1, EvolutionItem.WHIPPED_DREAM, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.PHANTUMP]: [
|
[Species.PHANTUMP]: [
|
||||||
new SpeciesEvolution(Species.TREVENANT, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.TREVENANT, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
@ -1576,7 +1592,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.RAGE_FIST).length > 0), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.RAGE_FIST).length > 0), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.GOLBAT]: [
|
[Species.GOLBAT]: [
|
||||||
new SpeciesEvolution(Species.CROBAT, 1, null, new SpeciesFriendshipEvolutionCondition(110), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesEvolution(Species.CROBAT, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
],
|
],
|
||||||
[Species.CHANSEY]: [
|
[Species.CHANSEY]: [
|
||||||
new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG)
|
||||||
@ -1610,29 +1626,29 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||||||
new SpeciesEvolution(Species.CHANSEY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT)
|
new SpeciesEvolution(Species.CHANSEY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT)
|
||||||
],
|
],
|
||||||
[Species.MUNCHLAX]: [
|
[Species.MUNCHLAX]: [
|
||||||
new SpeciesEvolution(Species.SNORLAX, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.SNORLAX, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.RIOLU]: [
|
[Species.RIOLU]: [
|
||||||
new SpeciesEvolution(Species.LUCARIO, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.LUCARIO, 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.WOOBAT]: [
|
[Species.WOOBAT]: [
|
||||||
new SpeciesEvolution(Species.SWOOBAT, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM)
|
new SpeciesEvolution(Species.SWOOBAT, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM)
|
||||||
],
|
],
|
||||||
[Species.SWADLOON]: [
|
[Species.SWADLOON]: [
|
||||||
new SpeciesEvolution(Species.LEAVANNY, 1, null, new SpeciesFriendshipEvolutionCondition(110), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.LEAVANNY, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.TYPE_NULL]: [
|
[Species.TYPE_NULL]: [
|
||||||
new SpeciesEvolution(Species.SILVALLY, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.SILVALLY, 1, null, new SpeciesFriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.ALOLA_MEOWTH]: [
|
[Species.ALOLA_MEOWTH]: [
|
||||||
new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
[Species.SNOM]: [
|
[Species.SNOM]: [
|
||||||
new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM)
|
new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM)
|
||||||
],
|
],
|
||||||
[Species.GIMMIGHOUL]: [
|
[Species.GIMMIGHOUL]: [
|
||||||
new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG),
|
new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesEvolutionCondition( p => p.evoCounter > 9 ), SpeciesWildEvolutionDelay.VERY_LONG),
|
||||||
new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG)
|
new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesEvolutionCondition( p => p.evoCounter > 9 ), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -684,7 +684,7 @@ export const pokemonFormChanges: PokemonFormChanges = {
|
|||||||
new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB))
|
new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB))
|
||||||
],
|
],
|
||||||
[Species.RAYQUAZA]: [
|
[Species.RAYQUAZA]: [
|
||||||
new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE), new SpeciesFormChangeMoveLearnedTrigger(Moves.DRAGON_ASCENT)))
|
new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE))
|
||||||
],
|
],
|
||||||
[Species.DEOXYS]: [
|
[Species.DEOXYS]: [
|
||||||
new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)),
|
new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)),
|
||||||
|
@ -1609,6 +1609,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 12, Moves.DRAGON_BREATH ],
|
[ 12, Moves.DRAGON_BREATH ],
|
||||||
[ 16, Moves.CURSE ],
|
[ 16, Moves.CURSE ],
|
||||||
[ 20, Moves.ROCK_SLIDE ],
|
[ 20, Moves.ROCK_SLIDE ],
|
||||||
|
[ 22, Moves.GYRO_BALL ], //Custom, from USUM
|
||||||
[ 24, Moves.SCREECH ],
|
[ 24, Moves.SCREECH ],
|
||||||
[ 28, Moves.SAND_TOMB ],
|
[ 28, Moves.SAND_TOMB ],
|
||||||
[ 32, Moves.STEALTH_ROCK ],
|
[ 32, Moves.STEALTH_ROCK ],
|
||||||
@ -2121,7 +2122,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.DOUBLE_HIT ],
|
[ 20, Moves.DOUBLE_HIT ],
|
||||||
[ 24, Moves.SLASH ],
|
[ 24, Moves.SLASH ],
|
||||||
[ 28, Moves.FOCUS_ENERGY ],
|
[ 28, Moves.FOCUS_ENERGY ],
|
||||||
[ 30, Moves.STEEL_WING ],
|
[ 30, Moves.STEEL_WING ], //Custom
|
||||||
[ 32, Moves.AGILITY ],
|
[ 32, Moves.AGILITY ],
|
||||||
[ 36, Moves.AIR_SLASH ],
|
[ 36, Moves.AIR_SLASH ],
|
||||||
[ 40, Moves.X_SCISSOR ],
|
[ 40, Moves.X_SCISSOR ],
|
||||||
@ -7549,14 +7550,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.POUND ],
|
[ 1, Moves.POUND ],
|
||||||
[ 1, Moves.COPYCAT ],
|
[ 1, Moves.COPYCAT ],
|
||||||
[ 1, Moves.BARRIER ],
|
[ 1, Moves.BARRIER ],
|
||||||
|
[ 1, Moves.TICKLE ], //USUM
|
||||||
[ 4, Moves.BATON_PASS ],
|
[ 4, Moves.BATON_PASS ],
|
||||||
[ 8, Moves.ENCORE ],
|
[ 8, Moves.ENCORE ],
|
||||||
[ 12, Moves.CONFUSION ],
|
[ 12, Moves.CONFUSION ],
|
||||||
[ 16, Moves.ROLE_PLAY ],
|
[ 16, Moves.MIMIC ], //Custom, swapped with Role Play to be closer to USUM
|
||||||
[ 20, Moves.PROTECT ],
|
[ 20, Moves.PROTECT ],
|
||||||
[ 24, Moves.RECYCLE ],
|
[ 24, Moves.RECYCLE ],
|
||||||
[ 28, Moves.PSYBEAM ],
|
[ 28, Moves.PSYBEAM ],
|
||||||
[ 32, Moves.MIMIC ],
|
[ 32, Moves.ROLE_PLAY ], //Custom, swapped with Mimic
|
||||||
[ 36, Moves.LIGHT_SCREEN ],
|
[ 36, Moves.LIGHT_SCREEN ],
|
||||||
[ 36, Moves.REFLECT ],
|
[ 36, Moves.REFLECT ],
|
||||||
[ 36, Moves.SAFEGUARD ],
|
[ 36, Moves.SAFEGUARD ],
|
||||||
|
@ -3348,6 +3348,7 @@ export function getStarterValueFriendshipCap(value: integer): integer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const POKERUS_STARTER_COUNT = 5; //adjust here!
|
||||||
/**
|
/**
|
||||||
* Method to get the daily list of starters with Pokerus.
|
* Method to get the daily list of starters with Pokerus.
|
||||||
* @param scene {@linkcode BattleScene} used as part of RNG
|
* @param scene {@linkcode BattleScene} used as part of RNG
|
||||||
@ -3356,10 +3357,9 @@ export function getStarterValueFriendshipCap(value: integer): integer {
|
|||||||
export function getPokerusStarters(scene: BattleScene): PokemonSpecies[] {
|
export function getPokerusStarters(scene: BattleScene): PokemonSpecies[] {
|
||||||
const pokerusStarters: PokemonSpecies[] = [];
|
const pokerusStarters: PokemonSpecies[] = [];
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
const starterCount = 3; //for easy future adjustment!
|
|
||||||
date.setUTCHours(0, 0, 0, 0);
|
date.setUTCHours(0, 0, 0, 0);
|
||||||
scene.executeWithSeedOffset(() => {
|
scene.executeWithSeedOffset(() => {
|
||||||
while (pokerusStarters.length < starterCount) {
|
while (pokerusStarters.length < POKERUS_STARTER_COUNT) {
|
||||||
const randomSpeciesId = parseInt(Utils.randSeedItem(Object.keys(speciesStarters)), 10);
|
const randomSpeciesId = parseInt(Utils.randSeedItem(Object.keys(speciesStarters)), 10);
|
||||||
const species = getPokemonSpecies(randomSpeciesId);
|
const species = getPokemonSpecies(randomSpeciesId);
|
||||||
if (!pokerusStarters.includes(species)) {
|
if (!pokerusStarters.includes(species)) {
|
||||||
|
@ -255,7 +255,9 @@ export class TrainerConfig {
|
|||||||
name = i18next.t("trainerNames:rival");
|
name = i18next.t("trainerNames:rival");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,6 +901,20 @@ export class TrainerConfig {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a localized name for the trainer. This should only be used for trainers that dont use a "initFor" function and are considered "named" trainers
|
||||||
|
* @param name - The name of the trainer.
|
||||||
|
* @returns {TrainerConfig} The updated TrainerConfig instance.
|
||||||
|
*/
|
||||||
|
setLocalizedName(name: string): TrainerConfig {
|
||||||
|
// Check if the internationalization (i18n) system is initialized.
|
||||||
|
if (!getIsInitialized()) {
|
||||||
|
initI18n();
|
||||||
|
}
|
||||||
|
this.name = i18next.t(`trainerNames:${name.toLowerCase()}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the title for the trainer based on the provided trainer slot and variant.
|
* Retrieves the title for the trainer based on the provided trainer slot and variant.
|
||||||
* @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE.
|
* @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE.
|
||||||
@ -2270,21 +2286,22 @@ export const trainerConfigs: TrainerConfigs = {
|
|||||||
}
|
}
|
||||||
p.pokeball = PokeballType.MASTER_BALL;
|
p.pokeball = PokeballType.MASTER_BALL;
|
||||||
})),
|
})),
|
||||||
[TrainerType.VICTOR]: new TrainerConfig(++t).setName("Victor").setTitle("The Winstrates")
|
[TrainerType.VICTOR]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Victor")
|
||||||
.setMoneyMultiplier(1) // The Winstrate trainers have total money multiplier of 6
|
.setMoneyMultiplier(1) // The Winstrate trainers have total money multiplier of 6
|
||||||
.setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG),
|
.setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG),
|
||||||
[TrainerType.VICTORIA]: new TrainerConfig(++t).setName("Victoria").setTitle("The Winstrates")
|
[TrainerType.VICTORIA]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Victoria")
|
||||||
.setMoneyMultiplier(1)
|
.setMoneyMultiplier(1)
|
||||||
.setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG),
|
.setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG),
|
||||||
[TrainerType.VIVI]: new TrainerConfig(++t).setName("Vivi").setTitle("The Winstrates")
|
[TrainerType.VIVI]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vivi")
|
||||||
.setMoneyMultiplier(1)
|
.setMoneyMultiplier(1)
|
||||||
.setPartyTemplates(trainerPartyTemplates.TWO_AVG_ONE_STRONG),
|
.setPartyTemplates(trainerPartyTemplates.TWO_AVG_ONE_STRONG),
|
||||||
[TrainerType.VICKY]: new TrainerConfig(++t).setName("Vicky").setTitle("The Winstrates")
|
[TrainerType.VICKY]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vicky")
|
||||||
.setMoneyMultiplier(1)
|
.setMoneyMultiplier(1)
|
||||||
.setPartyTemplates(trainerPartyTemplates.ONE_AVG),
|
.setPartyTemplates(trainerPartyTemplates.ONE_AVG),
|
||||||
[TrainerType.VITO]: new TrainerConfig(++t).setName("Vito").setTitle("The Winstrates")
|
[TrainerType.VITO]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vito")
|
||||||
.setMoneyMultiplier(2)
|
.setMoneyMultiplier(2)
|
||||||
.setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))),
|
.setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))),
|
||||||
[TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER)
|
[TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER)
|
||||||
.setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ 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, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
|
import { Stat, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
|
||||||
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier } from "../modifier/modifier";
|
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier } 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";
|
||||||
@ -95,10 +95,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
public metLevel: integer;
|
public metLevel: integer;
|
||||||
public metBiome: Biome | -1;
|
public metBiome: Biome | -1;
|
||||||
public metSpecies: Species;
|
public metSpecies: Species;
|
||||||
|
public metWave: number;
|
||||||
public luck: integer;
|
public luck: integer;
|
||||||
public pauseEvolutions: boolean;
|
public pauseEvolutions: boolean;
|
||||||
public pokerus: boolean;
|
public pokerus: boolean;
|
||||||
public wildFlee: boolean;
|
public wildFlee: boolean;
|
||||||
|
public evoCounter: integer;
|
||||||
|
|
||||||
public fusionSpecies: PokemonSpecies | null;
|
public fusionSpecies: PokemonSpecies | null;
|
||||||
public fusionFormIndex: integer;
|
public fusionFormIndex: integer;
|
||||||
@ -193,8 +195,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
this.luck = dataSource.luck;
|
this.luck = dataSource.luck;
|
||||||
this.metBiome = dataSource.metBiome;
|
this.metBiome = dataSource.metBiome;
|
||||||
this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true));
|
this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true));
|
||||||
|
this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0);
|
||||||
this.pauseEvolutions = dataSource.pauseEvolutions;
|
this.pauseEvolutions = dataSource.pauseEvolutions;
|
||||||
this.pokerus = !!dataSource.pokerus;
|
this.pokerus = !!dataSource.pokerus;
|
||||||
|
this.evoCounter = dataSource.evoCounter ?? 0;
|
||||||
this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : dataSource.fusionSpecies ? getPokemonSpecies(dataSource.fusionSpecies) : null;
|
this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : dataSource.fusionSpecies ? getPokemonSpecies(dataSource.fusionSpecies) : null;
|
||||||
this.fusionFormIndex = dataSource.fusionFormIndex;
|
this.fusionFormIndex = dataSource.fusionFormIndex;
|
||||||
this.fusionAbilityIndex = dataSource.fusionAbilityIndex;
|
this.fusionAbilityIndex = dataSource.fusionAbilityIndex;
|
||||||
@ -238,6 +242,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
this.metLevel = level;
|
this.metLevel = level;
|
||||||
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
|
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
|
||||||
this.metSpecies = species.speciesId;
|
this.metSpecies = species.speciesId;
|
||||||
|
this.metWave = scene.currentBattle ? scene.currentBattle.waveIndex : -1;
|
||||||
this.pokerus = false;
|
this.pokerus = false;
|
||||||
|
|
||||||
if (level > 1) {
|
if (level > 1) {
|
||||||
@ -592,8 +597,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
// Resetting properties should not be shown on the field
|
// Resetting properties should not be shown on the field
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
|
|
||||||
// Reset field position
|
// Remove the offset from having a Substitute active
|
||||||
this.setFieldPosition(FieldPosition.CENTER);
|
|
||||||
if (this.isOffsetBySubstitute()) {
|
if (this.isOffsetBySubstitute()) {
|
||||||
this.x -= this.getSubstituteOffset()[0];
|
this.x -= this.getSubstituteOffset()[0];
|
||||||
this.y -= this.getSubstituteOffset()[1];
|
this.y -= this.getSubstituteOffset()[1];
|
||||||
@ -2621,10 +2625,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isCritical) {
|
|
||||||
this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// In case of fatal damage, this tag would have gotten cleared before we could lapse it.
|
// In case of fatal damage, this tag would have gotten cleared before we could lapse it.
|
||||||
const destinyTag = this.getTag(BattlerTagType.DESTINY_BOND);
|
const destinyTag = this.getTag(BattlerTagType.DESTINY_BOND);
|
||||||
|
|
||||||
@ -2667,6 +2667,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isCritical) {
|
||||||
|
this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit"));
|
||||||
|
}
|
||||||
|
|
||||||
// want to include is.Fainted() in case multi hit move ends early, still want to render message
|
// want to include is.Fainted() in case multi hit move ends early, still want to render message
|
||||||
if (source.turnData.hitsLeft === 1 || this.isFainted()) {
|
if (source.turnData.hitsLeft === 1 || this.isFainted()) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
@ -4047,6 +4051,12 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
this.updateInfo(true).then(() => resolve());
|
this.updateInfo(true).then(() => resolve());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
if (preEvolution.speciesId === Species.GIMMIGHOUL) {
|
||||||
|
const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null;
|
||||||
|
if (evotracker) {
|
||||||
|
this.scene.removeModifier(evotracker);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!this.scene.gameMode.isDaily || this.metBiome > -1) {
|
if (!this.scene.gameMode.isDaily || this.metBiome > -1) {
|
||||||
this.scene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs);
|
this.scene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs);
|
||||||
this.scene.gameData.setPokemonSeen(this, false);
|
this.scene.gameData.setPokemonSeen(this, false);
|
||||||
@ -4074,6 +4084,7 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
newPokemon.metLevel = this.metLevel;
|
newPokemon.metLevel = this.metLevel;
|
||||||
newPokemon.metBiome = this.metBiome;
|
newPokemon.metBiome = this.metBiome;
|
||||||
newPokemon.metSpecies = this.metSpecies;
|
newPokemon.metSpecies = this.metSpecies;
|
||||||
|
newPokemon.metWave = this.metWave;
|
||||||
newPokemon.fusionSpecies = this.fusionSpecies;
|
newPokemon.fusionSpecies = this.fusionSpecies;
|
||||||
newPokemon.fusionFormIndex = this.fusionFormIndex;
|
newPokemon.fusionFormIndex = this.fusionFormIndex;
|
||||||
newPokemon.fusionAbilityIndex = this.fusionAbilityIndex;
|
newPokemon.fusionAbilityIndex = this.fusionAbilityIndex;
|
||||||
@ -4081,6 +4092,7 @@ 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;
|
||||||
|
newPokemon.usedTMs = this.usedTMs;
|
||||||
|
|
||||||
this.scene.getParty().push(newPokemon);
|
this.scene.getParty().push(newPokemon);
|
||||||
newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies);
|
newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies);
|
||||||
@ -4772,6 +4784,7 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
this.pokeball = pokeballType;
|
this.pokeball = pokeballType;
|
||||||
this.metLevel = this.level;
|
this.metLevel = this.level;
|
||||||
this.metBiome = this.scene.arena.biomeType;
|
this.metBiome = this.scene.arena.biomeType;
|
||||||
|
this.metWave = this.scene.currentBattle.waveIndex;
|
||||||
this.metSpecies = this.species.speciesId;
|
this.metSpecies = this.species.speciesId;
|
||||||
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this);
|
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this);
|
||||||
|
|
||||||
|
@ -241,12 +241,15 @@ export class LoadingScene extends SceneBase {
|
|||||||
const lang = i18next.resolvedLanguage;
|
const lang = i18next.resolvedLanguage;
|
||||||
if (lang !== "en") {
|
if (lang !== "en") {
|
||||||
if (Utils.verifyLang(lang)) {
|
if (Utils.verifyLang(lang)) {
|
||||||
|
this.loadAtlas(`statuses_${lang}`, "");
|
||||||
this.loadAtlas(`types_${lang}`, "");
|
this.loadAtlas(`types_${lang}`, "");
|
||||||
} else {
|
} else {
|
||||||
// Fallback to English
|
// Fallback to English
|
||||||
|
this.loadAtlas("statuses", "");
|
||||||
this.loadAtlas("types", "");
|
this.loadAtlas("types", "");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
this.loadAtlas("statuses", "");
|
||||||
this.loadAtlas("types", "");
|
this.loadAtlas("types", "");
|
||||||
}
|
}
|
||||||
const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"];
|
const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"];
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"memoString": "Wesen: {{natureFragment}}\n{{metFragment}}",
|
"memoString": "Wesen: {{natureFragment}}\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.",
|
"normal": "Herkunft: {{biome}} - Welle {{wave}}\nMit Lv. {{level}} erhalten.",
|
||||||
"apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten."
|
"apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten."
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -240,6 +240,8 @@
|
|||||||
"TOXIC_ORB": { "name": "Toxic Orb", "description": "It's a bizarre orb that exudes toxins when touched and will badly poison the holder during battle." },
|
"TOXIC_ORB": { "name": "Toxic Orb", "description": "It's a bizarre orb that exudes toxins when touched and will badly poison the holder during battle." },
|
||||||
"FLAME_ORB": { "name": "Flame Orb", "description": "It's a bizarre orb that gives off heat when touched and will affect the holder with a burn during battle." },
|
"FLAME_ORB": { "name": "Flame Orb", "description": "It's a bizarre orb that gives off heat when touched and will affect the holder with a burn during battle." },
|
||||||
|
|
||||||
|
"EVOLUTION_TRACKER_GIMMIGHOUL": { "name": "Treasures", "description": "This Pokémon loves treasure! Keep collecting treasure and something might happen!"},
|
||||||
|
|
||||||
"BATON": { "name": "Baton", "description": "Allows passing along effects when switching Pokémon, which also bypasses traps." },
|
"BATON": { "name": "Baton", "description": "Allows passing along effects when switching Pokémon, which also bypasses traps." },
|
||||||
|
|
||||||
"SHINY_CHARM": { "name": "Shiny Charm", "description": "Dramatically increases the chance of a wild Pokémon being Shiny." },
|
"SHINY_CHARM": { "name": "Shiny Charm", "description": "Dramatically increases the chance of a wild Pokémon being Shiny." },
|
||||||
@ -330,6 +332,21 @@
|
|||||||
"TART_APPLE": "Tart Apple",
|
"TART_APPLE": "Tart Apple",
|
||||||
"STRAWBERRY_SWEET": "Strawberry Sweet",
|
"STRAWBERRY_SWEET": "Strawberry Sweet",
|
||||||
"UNREMARKABLE_TEACUP": "Unremarkable Teacup",
|
"UNREMARKABLE_TEACUP": "Unremarkable Teacup",
|
||||||
|
"UPGRADE": "Upgrade",
|
||||||
|
"DUBIOUS_DISC": "Dubious Disc",
|
||||||
|
"DRAGON_SCALE": "Dragon Scale",
|
||||||
|
"PRISM_SCALE": "Prism Scale",
|
||||||
|
"RAZOR_CLAW": "Razor Claw",
|
||||||
|
"RAZOR_FANG": "Razor Fang",
|
||||||
|
"REAPER_CLOTH": "Reaper Cloth",
|
||||||
|
"ELECTIRIZER": "Electirizer",
|
||||||
|
"MAGMARIZER": "Magmarizer",
|
||||||
|
"PROTECTOR": "Protector",
|
||||||
|
"SACHET": "Sachet",
|
||||||
|
"WHIPPED_DREAM": "Whipped Dream",
|
||||||
|
"LEADERS_CREST": "Leader's Crest",
|
||||||
|
"SUN_FLUTE": "Sun Flute",
|
||||||
|
"MOON_FLUTE": "Moon Flute",
|
||||||
|
|
||||||
"CHIPPED_POT": "Chipped Pot",
|
"CHIPPED_POT": "Chipped Pot",
|
||||||
"BLACK_AUGURITE": "Black Augurite",
|
"BLACK_AUGURITE": "Black Augurite",
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"1": {
|
"1": {
|
||||||
"label": "Dig for Valuables",
|
"label": "Dig for Valuables",
|
||||||
"tooltip": "(-) Lose Healing Items in Shops\n(+) Gain Amazing Items",
|
"tooltip": "(-) Items in Shops Cost 3x\n(+) Gain Amazing Items",
|
||||||
"selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!$You'll just have to make do without shop healing items.$However, you found some incredible items in the garbage!"
|
"selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeeper would\nsell you items at the normal rate in your grimy state!$You'll have to pay extra for items now.$However, you found some incredible items in the garbage!"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"label": "Investigate Further",
|
"label": "Investigate Further",
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"ALL": "All",
|
"ALL": "All",
|
||||||
"PASS_BATON": "Pass Baton",
|
"PASS_BATON": "Pass Baton",
|
||||||
"UNPAUSE_EVOLUTION": "Unpause Evolution",
|
"UNPAUSE_EVOLUTION": "Unpause Evolution",
|
||||||
|
"PAUSE_EVOLUTION": "Pause Evolution",
|
||||||
"REVIVE": "Revive",
|
"REVIVE": "Revive",
|
||||||
"RENAME": "Rename",
|
"RENAME": "Rename",
|
||||||
"SELECT": "Select",
|
"SELECT": "Select",
|
||||||
@ -24,6 +25,7 @@
|
|||||||
"tooManyItems": "{{pokemonName}} has too many\nof this item!",
|
"tooManyItems": "{{pokemonName}} has too many\nof this item!",
|
||||||
"anyEffect": "It won't have any effect.",
|
"anyEffect": "It won't have any effect.",
|
||||||
"unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.",
|
"unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.",
|
||||||
|
"pausedEvolutions": "Evolutions have been paused for {{pokemonName}}.",
|
||||||
"unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.",
|
"unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.",
|
||||||
"wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.",
|
"wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.",
|
||||||
"releaseConfirmation": "Do you really want to release {{pokemonName}}?",
|
"releaseConfirmation": "Do you really want to release {{pokemonName}}?",
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"memoString": "{{natureFragment}} nature,\n{{metFragment}}",
|
"memoString": "{{natureFragment}} nature,\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "met at Lv{{level}},\n{{biome}}.",
|
"normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.",
|
||||||
"apparently": "apparently met at Lv{{level}},\n{{biome}}."
|
"apparently": "apparently met at Lv{{level}},\n{{biome}}."
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
"renamePokemon": "Renombrar Pokémon.",
|
"renamePokemon": "Renombrar Pokémon.",
|
||||||
"rename": "Renombrar",
|
"rename": "Renombrar",
|
||||||
"nickname": "Apodo",
|
"nickname": "Apodo",
|
||||||
"errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta, el juego se reconectará automáticamente.",
|
"errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.",
|
||||||
"noSaves": "No tienes ninguna partida guardada registrada!",
|
"noSaves": "No tienes ninguna partida guardada registrada!",
|
||||||
"tooManySaves": "¡Tienes demasiadas partidas guardadas registradas!"
|
"tooManySaves": "¡Tienes demasiadas partidas guardadas registradas!"
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Salir",
|
"cancel": "Salir",
|
||||||
"memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}",
|
"memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "encontrado al Nv. {{level}},\n{{biome}}.",
|
"normal": "encontrado al Nv. {{level}},\n{{biome}}, Oleada {{wave}}.",
|
||||||
"apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}."
|
"apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,10 @@
|
|||||||
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
||||||
"moveNoPP": "Il n’y a plus de PP pour\ncette capacité !",
|
"moveNoPP": "Il n’y a plus de PP pour\ncette capacité !",
|
||||||
"moveDisabled": "{{moveName}} est sous entrave !",
|
"moveDisabled": "{{moveName}} est sous entrave !",
|
||||||
|
"canOnlyUseMove": "{{pokemonName}} ne peut utiliser\nque la capacité {{moveName}} !",
|
||||||
|
"moveCannotBeSelected": "La capacité {{moveName}}\nne peut pas être choisie !",
|
||||||
"disableInterruptedMove": "Il y a une entrave sur la capacité {{moveName}}\nde{{pokemonNameWithAffix}} !",
|
"disableInterruptedMove": "Il y a une entrave sur la capacité {{moveName}}\nde{{pokemonNameWithAffix}} !",
|
||||||
|
"throatChopInterruptedMove": "Exécu-Son empêche {{pokemonName}}\nd’utiliser la capacité !",
|
||||||
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
||||||
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
"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 !",
|
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !",
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
"yes": "Oui",
|
"yes": "Oui",
|
||||||
"no": "Non",
|
"no": "Non",
|
||||||
"disclaimer": "AVERTISSEMENT",
|
"disclaimer": "AVERTISSEMENT",
|
||||||
"disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.",
|
"disclaimerDescription": "Ce jeu n’est pas un produit fini.\nIl peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait à tout moment cesser d’être mis à jour.",
|
||||||
"choosePokemon": "Sélectionnez un Pokémon.",
|
"choosePokemon": "Sélectionnez un Pokémon.",
|
||||||
"renamePokemon": "Renommer le Pokémon",
|
"renamePokemon": "Renommer le Pokémon",
|
||||||
"rename": "Renommer",
|
"rename": "Renommer",
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !",
|
"switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !",
|
||||||
"sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !",
|
"sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !",
|
||||||
"sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !",
|
"sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !",
|
||||||
|
"shiftedStats": "{{pokemonName}} échange {{statToSwitch}} et {{statToSwitchWith}} !",
|
||||||
"goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !",
|
"goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !",
|
||||||
"regainedHealth": "{{pokemonName}}\nrécupère des PV !",
|
"regainedHealth": "{{pokemonName}}\nrécupère des PV !",
|
||||||
"keptGoingAndCrashed": "{{pokemonName}}\ns’écrase au sol !",
|
"keptGoingAndCrashed": "{{pokemonName}}\ns’écrase au sol !",
|
||||||
@ -68,5 +69,7 @@
|
|||||||
"chillyReception": "{{pokemonName}} s’apprête\nà faire un mauvais jeu de mots…",
|
"chillyReception": "{{pokemonName}} s’apprête\nà faire un mauvais jeu de mots…",
|
||||||
"exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !",
|
"exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !",
|
||||||
"safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !",
|
"safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !",
|
||||||
|
"substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !",
|
||||||
|
"substituteNotEnoughHp": "Mais il est trop faible\npour créer un clone !",
|
||||||
"afterYou": "{{pokemonName}} accepte\navec joie !"
|
"afterYou": "{{pokemonName}} accepte\navec joie !"
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"ALL": "Tout",
|
"ALL": "Tout",
|
||||||
"PASS_BATON": "Relais",
|
"PASS_BATON": "Relais",
|
||||||
"UNPAUSE_EVOLUTION": "Réactiver Évolution",
|
"UNPAUSE_EVOLUTION": "Réactiver Évolution",
|
||||||
|
"PAUSE_EVOLUTION": "Interrompre Évolution",
|
||||||
"REVIVE": "Ranimer",
|
"REVIVE": "Ranimer",
|
||||||
"RENAME": "Renommer",
|
"RENAME": "Renommer",
|
||||||
"choosePokemon": "Sélectionnez un Pokémon.",
|
"choosePokemon": "Sélectionnez un Pokémon.",
|
||||||
@ -23,6 +24,7 @@
|
|||||||
"tooManyItems": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !",
|
"tooManyItems": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !",
|
||||||
"anyEffect": "Cela n’aura aucun effet.",
|
"anyEffect": "Cela n’aura aucun effet.",
|
||||||
"unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.",
|
"unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.",
|
||||||
|
"pausedEvolutions": "{{pokemonName}} ne peut plus évoluer.",
|
||||||
"unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.",
|
"unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.",
|
||||||
"wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.",
|
"wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.",
|
||||||
"releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?",
|
"releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?",
|
||||||
@ -44,4 +46,4 @@
|
|||||||
"untilWeMeetAgain": "À la prochaine, {{pokemonName}} !",
|
"untilWeMeetAgain": "À la prochaine, {{pokemonName}} !",
|
||||||
"sayonara": "Sayonara, {{pokemonName}} !",
|
"sayonara": "Sayonara, {{pokemonName}} !",
|
||||||
"smellYaLater": "À la revoyure, {{pokemonName}} !"
|
"smellYaLater": "À la revoyure, {{pokemonName}} !"
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"memoString": "{{natureFragment}} de nature,\n{{metFragment}}",
|
"memoString": "{{natureFragment}} de nature,\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "rencontré au N.{{level}},\n{{biome}}.",
|
"normal": "rencontré au N.{{level}},\n{{biome}}, Vague {{wave}}.",
|
||||||
"apparently": "apparemment rencontré au N.{{level}},\n{{biome}}."
|
"apparently": "apparemment rencontré au N.{{level}},\n{{biome}}."
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -94,7 +94,7 @@
|
|||||||
"caitlin": "Percila",
|
"caitlin": "Percila",
|
||||||
"malva": "Malva",
|
"malva": "Malva",
|
||||||
"siebold": "Narcisse",
|
"siebold": "Narcisse",
|
||||||
"wikstrom": "Tileo",
|
"wikstrom": "Thyméo",
|
||||||
"drasna": "Dracéna",
|
"drasna": "Dracéna",
|
||||||
"hala": "Pectorius",
|
"hala": "Pectorius",
|
||||||
"molayne": "Molène",
|
"molayne": "Molène",
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez l’a, essayez de l’ajouter à votre équipe. Vérifiez bien son résumé !",
|
"pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez l’a, essayez de l’ajouter à votre équipe. Vérifiez bien son résumé !",
|
||||||
"statChange": "Les changements de stats persistent à travers\nles combats tant que le Pokémon n’est pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant d’entrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\nd’un Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de l’adversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.",
|
"statChange": "Les changements de stats persistent à travers\nles combats tant que le Pokémon n’est pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant d’entrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\nd’un Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de l’adversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.",
|
||||||
"selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets n’apparaitront que s’ils ont une utilité immédiate, comme les objets d’évolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant l’option de transfert.\n$L’option de transfert apparait en bas à droite dès\nqu’un Pokémon de l’équipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nl’argent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.",
|
"selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets n’apparaitront que s’ils ont une utilité immédiate, comme les objets d’évolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant l’option de transfert.\n$L’option de transfert apparait en bas à droite dès\nqu’un Pokémon de l’équipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nl’argent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.",
|
||||||
"eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats. Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !"
|
"eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats.\n$Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !"
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
"memoString": "Natura {{natureFragment}},\n{{metFragment}}",
|
"memoString": "Natura {{natureFragment}},\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "incontrato al Lv.{{level}},\n{{biome}}.",
|
"normal": "incontrato al Lv.{{level}},\n{{biome}}, Onda {{wave}}.",
|
||||||
"apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}."
|
"apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "キャンセル",
|
"cancel": "キャンセル",
|
||||||
"memoString": "{{natureFragment}}な性格。\n{{metFragment}}",
|
"memoString": "{{natureFragment}}な性格。\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "{{biome}}で\nLv.{{level}}の時に出会った。",
|
"normal": "ラウンド{{wave}}に{{biome}}で\nLv.{{level}}の時に出会った。",
|
||||||
"apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。"
|
"apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。"
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "그만둔다",
|
"cancel": "그만둔다",
|
||||||
"memoString": "{{natureFragment}}.\n{{metFragment}}",
|
"memoString": "{{natureFragment}}.\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.",
|
"normal": "{{biome}}에서 웨이브{{wave}},\n레벨 {{level}}일 때 만났다.",
|
||||||
"apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다."
|
"apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다."
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"memoString": "Natureza {{natureFragment}},\n{{metFragment}}",
|
"memoString": "Natureza {{natureFragment}},\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "encontrado no Nv.{{level}},\n{{biome}}.",
|
"normal": "encontrado no Nv.{{level}},\n{{biome}}, Onda {{wave}}.",
|
||||||
"apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}."
|
"apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}."
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
"memoString": "{{natureFragment}} 性格,\n{{metFragment}}",
|
"memoString": "{{natureFragment}} 性格,\n{{metFragment}}",
|
||||||
"metFragment": {
|
"metFragment": {
|
||||||
"normal": "met at Lv{{level}},\n{{biome}}.",
|
"normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.",
|
||||||
"apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。"
|
"apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。"
|
||||||
},
|
},
|
||||||
"natureFragment": {
|
"natureFragment": {
|
||||||
|
@ -1109,11 +1109,11 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const evolutionItemPool = [
|
const evolutionItemPool = [
|
||||||
party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId)).map(p => {
|
party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId) && (!p.pauseEvolutions || p.species.speciesId === Species.SLOWPOKE || p.species.speciesId === Species.EEVEE)).map(p => {
|
||||||
const evolutions = pokemonEvolutions[p.species.speciesId];
|
const evolutions = pokemonEvolutions[p.species.speciesId];
|
||||||
return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFormKey()) && (!e.condition || e.condition.predicate(p)));
|
return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFormKey()) && (!e.condition || e.condition.predicate(p)));
|
||||||
}).flat(),
|
}).flat(),
|
||||||
party.filter(p => p.isFusion() && p.fusionSpecies && pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId)).map(p => {
|
party.filter(p => p.isFusion() && p.fusionSpecies && pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId) && (!p.pauseEvolutions || p.fusionSpecies.speciesId === Species.SLOWPOKE || p.fusionSpecies.speciesId === Species.EEVEE)).map(p => {
|
||||||
const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId];
|
const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId];
|
||||||
return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFusionFormKey()) && (!e.condition || e.condition.predicate(p)));
|
return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFusionFormKey()) && (!e.condition || e.condition.predicate(p)));
|
||||||
}).flat()
|
}).flat()
|
||||||
@ -1372,6 +1372,8 @@ export const modifierTypes = {
|
|||||||
FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(false),
|
FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(false),
|
||||||
RARE_FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(true),
|
RARE_FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(true),
|
||||||
|
|
||||||
|
EVOLUTION_TRACKER_GIMMIGHOUL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL", "relic_gold", (type, _args) => new Modifiers.EvoTrackerModifier(type, (_args[0] as Pokemon).id, Species.GIMMIGHOUL, 10)),
|
||||||
|
|
||||||
MEGA_BRACELET: () => new ModifierType("modifierType:ModifierType.MEGA_BRACELET", "mega_bracelet", (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type)),
|
MEGA_BRACELET: () => new ModifierType("modifierType:ModifierType.MEGA_BRACELET", "mega_bracelet", (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type)),
|
||||||
DYNAMAX_BAND: () => new ModifierType("modifierType:ModifierType.DYNAMAX_BAND", "dynamax_band", (type, _args) => new Modifiers.GigantamaxAccessModifier(type)),
|
DYNAMAX_BAND: () => new ModifierType("modifierType:ModifierType.DYNAMAX_BAND", "dynamax_band", (type, _args) => new Modifiers.GigantamaxAccessModifier(type)),
|
||||||
TERA_ORB: () => new ModifierType("modifierType:ModifierType.TERA_ORB", "tera_orb", (type, _args) => new Modifiers.TerastallizeAccessModifier(type)),
|
TERA_ORB: () => new ModifierType("modifierType:ModifierType.TERA_ORB", "tera_orb", (type, _args) => new Modifiers.TerastallizeAccessModifier(type)),
|
||||||
|
@ -840,6 +840,41 @@ export class BaseStatModifier extends PokemonHeldItemModifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class EvoTrackerModifier extends PokemonHeldItemModifier {
|
||||||
|
protected species: Species;
|
||||||
|
protected required: integer;
|
||||||
|
readonly isTransferrable: boolean = false;
|
||||||
|
|
||||||
|
constructor(type: ModifierType, pokemonId: integer, species: Species, required: integer, stackCount?: integer) {
|
||||||
|
super(type, pokemonId, stackCount);
|
||||||
|
this.species = species;
|
||||||
|
this.required = required;
|
||||||
|
}
|
||||||
|
|
||||||
|
matchType(modifier: Modifier): boolean {
|
||||||
|
if (modifier instanceof EvoTrackerModifier) {
|
||||||
|
return (modifier as EvoTrackerModifier).species === this.species;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
clone(): PersistentModifier {
|
||||||
|
return new EvoTrackerModifier(this.type, this.pokemonId, this.species, this.stackCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
getArgs(): any[] {
|
||||||
|
return super.getArgs().concat(this.species);
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(args: any[]): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMaxHeldItemCount(_pokemon: Pokemon): integer {
|
||||||
|
return this.required;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currently used by Shuckle Juice item
|
* Currently used by Shuckle Juice item
|
||||||
*/
|
*/
|
||||||
@ -1272,7 +1307,7 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier {
|
|||||||
* Applies Specific Type item boosts (e.g., Magnet)
|
* Applies Specific Type item boosts (e.g., Magnet)
|
||||||
*/
|
*/
|
||||||
export class AttackTypeBoosterModifier extends PokemonHeldItemModifier {
|
export class AttackTypeBoosterModifier extends PokemonHeldItemModifier {
|
||||||
private moveType: Type;
|
public moveType: Type;
|
||||||
private boostMultiplier: number;
|
private boostMultiplier: number;
|
||||||
|
|
||||||
constructor(type: ModifierType, pokemonId: integer, moveType: Type, boostPercent: number, stackCount?: integer) {
|
constructor(type: ModifierType, pokemonId: integer, moveType: Type, boostPercent: number, stackCount?: integer) {
|
||||||
@ -2372,6 +2407,15 @@ export class MoneyRewardModifier extends ConsumableModifier {
|
|||||||
|
|
||||||
scene.addMoney(moneyAmount.value);
|
scene.addMoney(moneyAmount.value);
|
||||||
|
|
||||||
|
scene.getParty().map(p => {
|
||||||
|
if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) {
|
||||||
|
p.evoCounter++;
|
||||||
|
const modifierType: ModifierType = modifierTypes.EVOLUTION_TRACKER_GIMMIGHOUL();
|
||||||
|
const modifier = modifierType!.newModifier(p);
|
||||||
|
scene.addModifier(modifier);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,8 @@ class DefaultOverrides {
|
|||||||
[PokeballType.MASTER_BALL]: 0,
|
[PokeballType.MASTER_BALL]: 0,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
/** Set to `true` to show all tutorials */
|
||||||
|
readonly BYPASS_TUTORIAL_SKIP: boolean = false;
|
||||||
|
|
||||||
// ----------------
|
// ----------------
|
||||||
// PLAYER OVERRIDES
|
// PLAYER OVERRIDES
|
||||||
|
@ -216,8 +216,8 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
|
|
||||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
||||||
if (!this.loaded) {
|
if (!this.loaded) {
|
||||||
//@ts-ignore
|
this.trySetWeatherIfNewBiome(); // Set weather before session gets saved
|
||||||
this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || this.scene.lastSavePlayTime >= 300).then(success => { // TODO: get rid of ts-ignore
|
this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || (this.scene.lastSavePlayTime ?? 0) >= 300).then(success => {
|
||||||
this.scene.disableMenu = false;
|
this.scene.disableMenu = false;
|
||||||
if (!success) {
|
if (!success) {
|
||||||
return this.scene.reset(true);
|
return this.scene.reset(true);
|
||||||
@ -250,10 +250,6 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.loaded) {
|
|
||||||
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
const enemyField = this.scene.getEnemyField();
|
const enemyField = this.scene.getEnemyField();
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(),
|
targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(),
|
||||||
@ -519,4 +515,18 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set biome weather if and only if this encounter is the start of a new biome.
|
||||||
|
*
|
||||||
|
* By using function overrides, this should happen if and only if this phase
|
||||||
|
* is exactly a NewBiomeEncounterPhase or an EncounterPhase (to account for
|
||||||
|
* Wave 1 of a Daily Run), but NOT NextEncounterPhase (which starts the next
|
||||||
|
* wave in the same biome).
|
||||||
|
*/
|
||||||
|
trySetWeatherIfNewBiome(): void {
|
||||||
|
if (!this.loaded) {
|
||||||
|
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
* (and not random target) and failed the hit check against its target (MISS), log the move
|
* (and not random target) and failed the hit check against its target (MISS), log the move
|
||||||
* as FAILed or MISSed (depending on the conditions above) and end this phase.
|
* as FAILed or MISSed (depending on the conditions above) and end this phase.
|
||||||
*/
|
*/
|
||||||
if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]])) {
|
if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag))) {
|
||||||
this.stopMultiHit();
|
this.stopMultiHit();
|
||||||
if (hasActiveTargets) {
|
if (hasActiveTargets) {
|
||||||
this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget()? getPokemonNameWithAffix(this.getTarget()!) : "" }));
|
this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget()? getPokemonNameWithAffix(this.getTarget()!) : "" }));
|
||||||
@ -125,20 +125,6 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
/** Has the move successfully hit a target (for damage) yet? */
|
/** Has the move successfully hit a target (for damage) yet? */
|
||||||
let hasHit: boolean = false;
|
let hasHit: boolean = false;
|
||||||
for (const target of targets) {
|
for (const target of targets) {
|
||||||
/**
|
|
||||||
* If the move missed a target, stop all future hits against that target
|
|
||||||
* and move on to the next target (if there is one).
|
|
||||||
*/
|
|
||||||
if (!targetHitChecks[target.getBattlerIndex()]) {
|
|
||||||
this.stopMultiHit(target);
|
|
||||||
this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) }));
|
|
||||||
if (moveHistoryEntry.result === MoveResult.PENDING) {
|
|
||||||
moveHistoryEntry.result = MoveResult.MISS;
|
|
||||||
}
|
|
||||||
user.pushMoveHistory(moveHistoryEntry);
|
|
||||||
applyMoveAttrs(MissEffectAttr, user, null, move);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** The {@linkcode ArenaTagSide} to which the target belongs */
|
/** The {@linkcode ArenaTagSide} to which the target belongs */
|
||||||
const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY;
|
const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY;
|
||||||
@ -156,6 +142,21 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
&& (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType)))
|
&& (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType)))
|
||||||
|| (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType))));
|
|| (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType))));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the move missed a target, stop all future hits against that target
|
||||||
|
* and move on to the next target (if there is one).
|
||||||
|
*/
|
||||||
|
if (!isProtected && !targetHitChecks[target.getBattlerIndex()]) {
|
||||||
|
this.stopMultiHit(target);
|
||||||
|
this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) }));
|
||||||
|
if (moveHistoryEntry.result === MoveResult.PENDING) {
|
||||||
|
moveHistoryEntry.result = MoveResult.MISS;
|
||||||
|
}
|
||||||
|
user.pushMoveHistory(moveHistoryEntry);
|
||||||
|
applyMoveAttrs(MissEffectAttr, user, null, move);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/** Does this phase represent the invoked move's first strike? */
|
/** Does this phase represent the invoked move's first strike? */
|
||||||
const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount);
|
const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount);
|
||||||
|
|
||||||
|
@ -17,8 +17,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
|
|
||||||
|
|
||||||
for (const pokemon of this.scene.getParty().filter(p => p.isOnField())) {
|
for (const pokemon of this.scene.getParty().filter(p => p.isOnField())) {
|
||||||
applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null);
|
applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null);
|
||||||
}
|
}
|
||||||
@ -41,4 +39,11 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set biome weather.
|
||||||
|
*/
|
||||||
|
trySetWeatherIfNewBiome(): void {
|
||||||
|
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,4 +67,10 @@ export class NextEncounterPhase extends EncounterPhase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do nothing (since this is simply the next wave in the same biome).
|
||||||
|
*/
|
||||||
|
trySetWeatherIfNewBiome(): void {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,14 @@ export default class PokemonData {
|
|||||||
public status: Status | null;
|
public status: Status | null;
|
||||||
public friendship: integer;
|
public friendship: integer;
|
||||||
public metLevel: integer;
|
public metLevel: integer;
|
||||||
public metBiome: Biome | -1;
|
public metBiome: Biome | -1; // -1 for starters
|
||||||
public metSpecies: Species;
|
public metSpecies: Species;
|
||||||
|
public metWave: number; // 0 for unknown (previous saves), -1 for starters
|
||||||
public luck: integer;
|
public luck: integer;
|
||||||
public pauseEvolutions: boolean;
|
public pauseEvolutions: boolean;
|
||||||
public pokerus: boolean;
|
public pokerus: boolean;
|
||||||
public usedTMs: Moves[];
|
public usedTMs: Moves[];
|
||||||
|
public evoCounter: integer;
|
||||||
|
|
||||||
public fusionSpecies: Species;
|
public fusionSpecies: Species;
|
||||||
public fusionFormIndex: integer;
|
public fusionFormIndex: integer;
|
||||||
@ -89,9 +91,11 @@ export default class PokemonData {
|
|||||||
this.metLevel = source.metLevel || 5;
|
this.metLevel = source.metLevel || 5;
|
||||||
this.metBiome = source.metBiome !== undefined ? source.metBiome : -1;
|
this.metBiome = source.metBiome !== undefined ? source.metBiome : -1;
|
||||||
this.metSpecies = source.metSpecies;
|
this.metSpecies = source.metSpecies;
|
||||||
|
this.metWave = source.metWave ?? (this.metBiome === -1 ? -1 : 0);
|
||||||
this.luck = source.luck !== undefined ? source.luck : (source.shiny ? (source.variant + 1) : 0);
|
this.luck = source.luck !== undefined ? source.luck : (source.shiny ? (source.variant + 1) : 0);
|
||||||
if (!forHistory) {
|
if (!forHistory) {
|
||||||
this.pauseEvolutions = !!source.pauseEvolutions;
|
this.pauseEvolutions = !!source.pauseEvolutions;
|
||||||
|
this.evoCounter = source.evoCounter ?? 0;
|
||||||
}
|
}
|
||||||
this.pokerus = !!source.pokerus;
|
this.pokerus = !!source.pokerus;
|
||||||
|
|
||||||
|
71
src/test/arena/grassy_terrain.test.ts
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import { allMoves } from "#app/data/move";
|
||||||
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import GameManager from "#test/utils/gameManager";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
|
||||||
|
describe("Arena - Grassy Terrain", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
game.override
|
||||||
|
.battleType("single")
|
||||||
|
.disableCrits()
|
||||||
|
.enemyLevel(1)
|
||||||
|
.enemySpecies(Species.SHUCKLE)
|
||||||
|
.enemyAbility(Abilities.STURDY)
|
||||||
|
.enemyMoveset(Moves.FLY)
|
||||||
|
.moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE])
|
||||||
|
.ability(Abilities.NO_GUARD);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("halves the damage of Earthquake", async () => {
|
||||||
|
await game.classicMode.startBattle([Species.TAUROS]);
|
||||||
|
|
||||||
|
const eq = allMoves[Moves.EARTHQUAKE];
|
||||||
|
vi.spyOn(eq, "calculateBattlePower");
|
||||||
|
|
||||||
|
game.move.select(Moves.EARTHQUAKE);
|
||||||
|
await game.toNextTurn();
|
||||||
|
|
||||||
|
expect(eq.calculateBattlePower).toHaveReturnedWith(100);
|
||||||
|
|
||||||
|
game.move.select(Moves.GRASSY_TERRAIN);
|
||||||
|
await game.toNextTurn();
|
||||||
|
|
||||||
|
game.move.select(Moves.EARTHQUAKE);
|
||||||
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
|
|
||||||
|
expect(eq.calculateBattlePower).toHaveReturnedWith(50);
|
||||||
|
}, TIMEOUT);
|
||||||
|
|
||||||
|
it("Does not halve the damage of Earthquake if opponent is not grounded", async () => {
|
||||||
|
await game.classicMode.startBattle([Species.NINJASK]);
|
||||||
|
|
||||||
|
const eq = allMoves[Moves.EARTHQUAKE];
|
||||||
|
vi.spyOn(eq, "calculateBattlePower");
|
||||||
|
|
||||||
|
game.move.select(Moves.GRASSY_TERRAIN);
|
||||||
|
await game.toNextTurn();
|
||||||
|
|
||||||
|
game.move.select(Moves.EARTHQUAKE);
|
||||||
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
|
|
||||||
|
expect(eq.calculateBattlePower).toHaveReturnedWith(100);
|
||||||
|
}, TIMEOUT);
|
||||||
|
});
|
@ -24,7 +24,8 @@ import { Moves } from "#enums/moves";
|
|||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
import { Biome } from "#app/enums/biome";
|
||||||
|
|
||||||
describe("Test Battle Phase", () => {
|
describe("Test Battle Phase", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
@ -290,22 +291,27 @@ describe("Test Battle Phase", () => {
|
|||||||
expect(game.scene.currentBattle.turn).toBeGreaterThan(turn);
|
expect(game.scene.currentBattle.turn).toBeGreaterThan(turn);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("to next wave with pokemon killed, single", async () => {
|
it("does not set new weather if staying in same biome", async () => {
|
||||||
const moveToUse = Moves.SPLASH;
|
const moveToUse = Moves.SPLASH;
|
||||||
game.override.battleType("single");
|
game.override
|
||||||
game.override.starterSpecies(Species.MEWTWO);
|
.battleType("single")
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.starterSpecies(Species.MEWTWO)
|
||||||
game.override.enemyAbility(Abilities.HYDRATION);
|
.enemySpecies(Species.RATTATA)
|
||||||
game.override.ability(Abilities.ZEN_MODE);
|
.enemyAbility(Abilities.HYDRATION)
|
||||||
game.override.startingLevel(2000);
|
.ability(Abilities.ZEN_MODE)
|
||||||
game.override.startingWave(3);
|
.startingLevel(2000)
|
||||||
game.override.moveset([moveToUse]);
|
.startingWave(3)
|
||||||
|
.startingBiome(Biome.LAKE)
|
||||||
|
.moveset([moveToUse]);
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
||||||
await game.startBattle();
|
await game.classicMode.startBattle();
|
||||||
const waveIndex = game.scene.currentBattle.waveIndex;
|
const waveIndex = game.scene.currentBattle.waveIndex;
|
||||||
game.move.select(moveToUse);
|
game.move.select(moveToUse);
|
||||||
|
|
||||||
|
vi.spyOn(game.scene.arena, "trySetWeather");
|
||||||
await game.doKillOpponents();
|
await game.doKillOpponents();
|
||||||
await game.toNextWave();
|
await game.toNextWave();
|
||||||
|
expect(game.scene.arena.trySetWeather).not.toHaveBeenCalled();
|
||||||
expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex);
|
expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
|
93
src/test/moves/baneful_bunker.test.ts
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
import Phaser from "phaser";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
|
||||||
|
import GameManager from "../utils/gameManager";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { BattlerIndex } from "#app/battle";
|
||||||
|
import { StatusEffect } from "#app/enums/status-effect";
|
||||||
|
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
|
||||||
|
describe("Moves - Baneful Bunker", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
|
||||||
|
game.override.battleType("single");
|
||||||
|
|
||||||
|
game.override.moveset(Moves.SLASH);
|
||||||
|
|
||||||
|
game.override.enemySpecies(Species.SNORLAX);
|
||||||
|
game.override.enemyAbility(Abilities.INSOMNIA);
|
||||||
|
game.override.enemyMoveset(Moves.BANEFUL_BUNKER);
|
||||||
|
|
||||||
|
game.override.startingLevel(100);
|
||||||
|
game.override.enemyLevel(100);
|
||||||
|
});
|
||||||
|
test(
|
||||||
|
"should protect the user and poison attackers that make contact",
|
||||||
|
async () => {
|
||||||
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
game.move.select(Moves.SLASH);
|
||||||
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
|
await game.phaseInterceptor.to("BerryPhase", false);
|
||||||
|
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy();
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
test(
|
||||||
|
"should protect the user and poison attackers that make contact, regardless of accuracy checks",
|
||||||
|
async () => {
|
||||||
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
game.move.select(Moves.SLASH);
|
||||||
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
|
||||||
|
await game.move.forceMiss();
|
||||||
|
await game.phaseInterceptor.to("BerryPhase", false);
|
||||||
|
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy();
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test(
|
||||||
|
"should not poison attackers that don't make contact",
|
||||||
|
async () => {
|
||||||
|
game.override.moveset(Moves.FLASH_CANNON);
|
||||||
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
|
const leadPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
game.move.select(Moves.FLASH_CANNON);
|
||||||
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
|
||||||
|
await game.move.forceMiss();
|
||||||
|
await game.phaseInterceptor.to("BerryPhase", false);
|
||||||
|
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
||||||
|
expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeFalsy();
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
});
|
@ -43,6 +43,23 @@ describe("Moves - Obstruct", () => {
|
|||||||
expect(enemy.getStatStage(Stat.DEF)).toBe(-2);
|
expect(enemy.getStatStage(Stat.DEF)).toBe(-2);
|
||||||
}, TIMEOUT);
|
}, TIMEOUT);
|
||||||
|
|
||||||
|
it("bypasses accuracy checks when applying protection and defense reduction", async () => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.ICE_PUNCH));
|
||||||
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
|
game.move.select(Moves.OBSTRUCT);
|
||||||
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
await game.move.forceMiss();
|
||||||
|
|
||||||
|
const player = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemy = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to("TurnEndPhase");
|
||||||
|
expect(player.isFullHp()).toBe(true);
|
||||||
|
expect(enemy.getStatStage(Stat.DEF)).toBe(-2);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => {
|
it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => {
|
||||||
game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN));
|
game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN));
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
@ -3,7 +3,6 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount
|
|||||||
import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { Biome } from "#app/enums/biome";
|
import { Biome } from "#app/enums/biome";
|
||||||
import { Moves } from "#app/enums/moves";
|
|
||||||
import { MysteryEncounterType } from "#app/enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#app/enums/mystery-encounter-type";
|
||||||
import { Species } from "#app/enums/species";
|
import { Species } from "#app/enums/species";
|
||||||
import GameManager from "#app/test/utils/gameManager";
|
import GameManager from "#app/test/utils/gameManager";
|
||||||
@ -16,6 +15,7 @@ import BattleScene from "#app/battle-scene";
|
|||||||
import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases";
|
import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases";
|
||||||
import { PartyExpPhase } from "#app/phases/party-exp-phase";
|
import { PartyExpPhase } from "#app/phases/party-exp-phase";
|
||||||
|
|
||||||
|
|
||||||
const namespace = "mysteryEncounter:lostAtSea";
|
const namespace = "mysteryEncounter:lostAtSea";
|
||||||
/** Blastoise for surf. Pidgeot for fly. Abra for none. */
|
/** Blastoise for surf. Pidgeot for fly. Abra for none. */
|
||||||
const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA];
|
const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA];
|
||||||
@ -102,8 +102,8 @@ describe("Lost at Sea - Mystery Encounter", () => {
|
|||||||
const onInitResult = onInit!(scene);
|
const onInitResult = onInit!(scene);
|
||||||
|
|
||||||
expect(LostAtSeaEncounter.dialogueTokens?.damagePercentage).toBe("25");
|
expect(LostAtSeaEncounter.dialogueTokens?.damagePercentage).toBe("25");
|
||||||
expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe(Moves[Moves.SURF]);
|
expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe("Surf");
|
||||||
expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe(Moves[Moves.FLY]);
|
expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe("Fly");
|
||||||
expect(onInitResult).toBe(true);
|
expect(onInitResult).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -38,16 +38,15 @@ describe("Reload", () => {
|
|||||||
it("should not have RNG inconsistencies after a biome switch", async () => {
|
it("should not have RNG inconsistencies after a biome switch", async () => {
|
||||||
game.override
|
game.override
|
||||||
.startingWave(10)
|
.startingWave(10)
|
||||||
.startingBiome(Biome.CAVE) // Will lead to biomes with randomly generated weather
|
|
||||||
.battleType("single")
|
.battleType("single")
|
||||||
.startingLevel(100)
|
.startingLevel(100) // Avoid levelling up
|
||||||
.enemyLevel(1000)
|
.enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents()
|
||||||
.disableTrainerWaves()
|
.disableTrainerWaves()
|
||||||
.moveset([Moves.KOWTOW_CLEAVE])
|
.moveset([Moves.KOWTOW_CLEAVE])
|
||||||
.enemyMoveset(Moves.SPLASH);
|
.enemyMoveset(Moves.SPLASH);
|
||||||
await game.dailyMode.startBattle();
|
await game.dailyMode.startBattle();
|
||||||
|
|
||||||
// Transition from Daily Run Wave 10 to Wave 11 in order to trigger biome switch
|
// Transition from Wave 10 to Wave 11 in order to trigger biome switch
|
||||||
game.move.select(Moves.KOWTOW_CLEAVE);
|
game.move.select(Moves.KOWTOW_CLEAVE);
|
||||||
await game.phaseInterceptor.to("DamagePhase");
|
await game.phaseInterceptor.to("DamagePhase");
|
||||||
await game.doKillOpponents();
|
await game.doKillOpponents();
|
||||||
@ -63,6 +62,34 @@ describe("Reload", () => {
|
|||||||
expect(preReloadRngState).toBe(postReloadRngState);
|
expect(preReloadRngState).toBe(postReloadRngState);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
|
it("should not have weather inconsistencies after a biome switch", async () => {
|
||||||
|
game.override
|
||||||
|
.startingWave(10)
|
||||||
|
.startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather
|
||||||
|
.battleType("single")
|
||||||
|
.startingLevel(100) // Avoid levelling up
|
||||||
|
.enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents()
|
||||||
|
.disableTrainerWaves()
|
||||||
|
.moveset([Moves.KOWTOW_CLEAVE])
|
||||||
|
.enemyMoveset(Moves.SPLASH);
|
||||||
|
await game.classicMode.startBattle(); // Apparently daily mode would override the biome
|
||||||
|
|
||||||
|
// Transition from Wave 10 to Wave 11 in order to trigger biome switch
|
||||||
|
game.move.select(Moves.KOWTOW_CLEAVE);
|
||||||
|
await game.phaseInterceptor.to("DamagePhase");
|
||||||
|
await game.doKillOpponents();
|
||||||
|
await game.toNextWave();
|
||||||
|
expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase");
|
||||||
|
|
||||||
|
const preReloadWeather = game.scene.arena.weather;
|
||||||
|
|
||||||
|
await game.reload.reloadSession();
|
||||||
|
|
||||||
|
const postReloadWeather = game.scene.arena.weather;
|
||||||
|
|
||||||
|
expect(postReloadWeather).toStrictEqual(preReloadWeather);
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => {
|
it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => {
|
||||||
await game.dailyMode.startBattle();
|
await game.dailyMode.startBattle();
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import TargetSelectUiHandler from "#app/ui/target-select-ui-handler";
|
|||||||
import { Mode } from "#app/ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { ExpNotification } from "#enums/exp-notification";
|
import { ExpNotification } from "#enums/exp-notification";
|
||||||
import { GameDataType } from "#enums/game-data-type";
|
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils";
|
import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils";
|
||||||
@ -371,13 +370,11 @@ export default class GameManager {
|
|||||||
* @returns A promise that resolves with the exported save data.
|
* @returns A promise that resolves with the exported save data.
|
||||||
*/
|
*/
|
||||||
exportSaveToTest(): Promise<string> {
|
exportSaveToTest(): Promise<string> {
|
||||||
|
const saveKey = "x0i2O7WRiANTqPmZ";
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
await this.scene.gameData.saveAll(this.scene, true, true, true, true);
|
const sessionSaveData = this.scene.gameData.getSessionSaveData(this.scene);
|
||||||
this.scene.reset(true);
|
const encryptedSaveData = AES.encrypt(JSON.stringify(sessionSaveData), saveKey).toString();
|
||||||
await waitUntil(() => this.scene.ui?.getMode() === Mode.TITLE);
|
resolve(encryptedSaveData);
|
||||||
await this.scene.gameData.tryExportData(GameDataType.SESSION, 0);
|
|
||||||
await waitUntil(() => localStorage.hasOwnProperty("toExport"));
|
|
||||||
return resolve(localStorage.getItem("toExport")!); // TODO: is this bang correct?;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,11 +5,27 @@ import { vi } from "vitest";
|
|||||||
import { BattleStyle } from "#app/enums/battle-style";
|
import { BattleStyle } from "#app/enums/battle-style";
|
||||||
import { CommandPhase } from "#app/phases/command-phase";
|
import { CommandPhase } from "#app/phases/command-phase";
|
||||||
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
||||||
|
import { SessionSaveData } from "#app/system/game-data";
|
||||||
|
import GameManager from "../gameManager";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper to allow reloading sessions in unit tests.
|
* Helper to allow reloading sessions in unit tests.
|
||||||
*/
|
*/
|
||||||
export class ReloadHelper extends GameManagerHelper {
|
export class ReloadHelper extends GameManagerHelper {
|
||||||
|
sessionData: SessionSaveData;
|
||||||
|
|
||||||
|
constructor(game: GameManager) {
|
||||||
|
super(game);
|
||||||
|
|
||||||
|
// Whenever the game saves the session, save it to the reloadHelper instead
|
||||||
|
vi.spyOn(game.scene.gameData, "saveAll").mockImplementation((scene) => {
|
||||||
|
return new Promise<boolean>((resolve, reject) => {
|
||||||
|
this.sessionData = scene.gameData.getSessionSaveData(scene);
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simulate reloading the session from the title screen, until reaching the
|
* Simulate reloading the session from the title screen, until reaching the
|
||||||
* beginning of the first turn (equivalent to running `startBattle()`) for
|
* beginning of the first turn (equivalent to running `startBattle()`) for
|
||||||
@ -17,7 +33,6 @@ export class ReloadHelper extends GameManagerHelper {
|
|||||||
*/
|
*/
|
||||||
async reloadSession() : Promise<void> {
|
async reloadSession() : Promise<void> {
|
||||||
const scene = this.game.scene;
|
const scene = this.game.scene;
|
||||||
const sessionData = scene.gameData.getSessionSaveData(scene);
|
|
||||||
const titlePhase = new TitlePhase(scene);
|
const titlePhase = new TitlePhase(scene);
|
||||||
|
|
||||||
scene.clearPhaseQueue();
|
scene.clearPhaseQueue();
|
||||||
@ -25,7 +40,7 @@ export class ReloadHelper extends GameManagerHelper {
|
|||||||
// Set the last saved session to the desired session data
|
// Set the last saved session to the desired session data
|
||||||
vi.spyOn(scene.gameData, "getSession").mockReturnValue(
|
vi.spyOn(scene.gameData, "getSession").mockReturnValue(
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
resolve(sessionData);
|
resolve(this.sessionData);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
scene.unshiftPhase(titlePhase);
|
scene.unshiftPhase(titlePhase);
|
||||||
|
105
src/tutorial.ts
@ -1,7 +1,9 @@
|
|||||||
import BattleScene from "./battle-scene";
|
import BattleScene from "./battle-scene";
|
||||||
import AwaitableUiHandler from "./ui/awaitable-ui-handler";
|
import AwaitableUiHandler from "./ui/awaitable-ui-handler";
|
||||||
|
import UiHandler from "./ui/ui-handler";
|
||||||
import { Mode } from "./ui/ui";
|
import { Mode } from "./ui/ui";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
import Overrides from "#app/overrides";
|
||||||
|
|
||||||
export enum Tutorial {
|
export enum Tutorial {
|
||||||
Intro = "INTRO",
|
Intro = "INTRO",
|
||||||
@ -39,7 +41,7 @@ const tutorialHandlers = {
|
|||||||
scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText("", null, () => resolve()), null, true);
|
scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText("", null, () => resolve()), null, true);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[Tutorial.Pokerus]: (scene: BattleScene) => {
|
[Tutorial.Pokerus]: (scene: BattleScene) => {
|
||||||
return new Promise<void>(resolve => {
|
return new Promise<void>(resolve => {
|
||||||
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);
|
||||||
});
|
});
|
||||||
@ -63,26 +65,87 @@ const tutorialHandlers = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise<boolean> {
|
/**
|
||||||
return new Promise<boolean>(resolve => {
|
* Run through the specified tutorial if it hasn't been seen before and mark it as seen once done
|
||||||
if (!scene.enableTutorials) {
|
* This will show a tutorial overlay if defined in the current {@linkcode AwaitableUiHandler}
|
||||||
return resolve(false);
|
* The main menu will also get disabled while the tutorial is running
|
||||||
}
|
* @param scene the current {@linkcode BattleScene}
|
||||||
|
* @param tutorial the {@linkcode Tutorial} to play
|
||||||
|
* @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise
|
||||||
|
*/
|
||||||
|
export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise<boolean> {
|
||||||
|
if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (scene.gameData.getTutorialFlags()[tutorial]) {
|
if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP) {
|
||||||
return resolve(false);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const handler = scene.ui.getHandler();
|
const handler = scene.ui.getHandler();
|
||||||
if (handler instanceof AwaitableUiHandler) {
|
const isMenuDisabled = scene.disableMenu;
|
||||||
handler.tutorialActive = true;
|
|
||||||
}
|
// starting tutorial, disable menu
|
||||||
tutorialHandlers[tutorial](scene).then(() => {
|
scene.disableMenu = true;
|
||||||
scene.gameData.saveTutorialFlag(tutorial, true);
|
if (handler instanceof AwaitableUiHandler) {
|
||||||
if (handler instanceof AwaitableUiHandler) {
|
handler.tutorialActive = true;
|
||||||
handler.tutorialActive = false;
|
}
|
||||||
}
|
|
||||||
resolve(true);
|
await showTutorialOverlay(scene, handler);
|
||||||
});
|
await tutorialHandlers[tutorial](scene);
|
||||||
});
|
await hideTutorialOverlay(scene, handler);
|
||||||
|
|
||||||
|
// tutorial finished and overlay gone, re-enable menu, save tutorial as seen
|
||||||
|
scene.disableMenu = isMenuDisabled;
|
||||||
|
scene.gameData.saveTutorialFlag(tutorial, true);
|
||||||
|
if (handler instanceof AwaitableUiHandler) {
|
||||||
|
handler.tutorialActive = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the tutorial overlay if there is one
|
||||||
|
* @param scene the current BattleScene
|
||||||
|
* @param handler the current UiHandler
|
||||||
|
* @returns `true` once the overlay has finished appearing, or if there is no overlay
|
||||||
|
*/
|
||||||
|
async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) {
|
||||||
|
if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) {
|
||||||
|
scene.tweens.add({
|
||||||
|
targets: handler.tutorialOverlay,
|
||||||
|
alpha: 0.5,
|
||||||
|
duration: 750,
|
||||||
|
ease: "Sine.easeOut",
|
||||||
|
onComplete: () => {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the tutorial overlay if there is one
|
||||||
|
* @param scene the current BattleScene
|
||||||
|
* @param handler the current UiHandler
|
||||||
|
* @returns `true` once the overlay has finished disappearing, or if there is no overlay
|
||||||
|
*/
|
||||||
|
async function hideTutorialOverlay(scene: BattleScene, handler: UiHandler) {
|
||||||
|
if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) {
|
||||||
|
scene.tweens.add({
|
||||||
|
targets: handler.tutorialOverlay,
|
||||||
|
alpha: 0,
|
||||||
|
duration: 500,
|
||||||
|
ease: "Sine.easeOut",
|
||||||
|
onComplete: () => {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ export default abstract class AwaitableUiHandler extends UiHandler {
|
|||||||
protected awaitingActionInput: boolean;
|
protected awaitingActionInput: boolean;
|
||||||
protected onActionInput: Function | null;
|
protected onActionInput: Function | null;
|
||||||
public tutorialActive: boolean = false;
|
public tutorialActive: boolean = false;
|
||||||
|
public tutorialOverlay: Phaser.GameObjects.Rectangle;
|
||||||
|
|
||||||
constructor(scene: BattleScene, mode: Mode | null = null) {
|
constructor(scene: BattleScene, mode: Mode | null = null) {
|
||||||
super(scene, mode);
|
super(scene, mode);
|
||||||
@ -24,4 +25,21 @@ export default abstract class AwaitableUiHandler extends UiHandler {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a semi transparent overlay that will get shown during tutorials
|
||||||
|
* @param container the container to add the overlay to
|
||||||
|
*/
|
||||||
|
initTutorialOverlay(container: Phaser.GameObjects.Container) {
|
||||||
|
if (!this.tutorialOverlay) {
|
||||||
|
this.tutorialOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x070707);
|
||||||
|
this.tutorialOverlay.setName("tutorial-overlay");
|
||||||
|
this.tutorialOverlay.setOrigin(0, 0);
|
||||||
|
this.tutorialOverlay.setAlpha(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (container) {
|
||||||
|
container.add(this.tutorialOverlay);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains);
|
this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains);
|
||||||
this.add(this.splicedIcon);
|
this.add(this.splicedIcon);
|
||||||
|
|
||||||
this.statusIndicator = this.scene.add.sprite(0, 0, "statuses");
|
this.statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`);
|
||||||
this.statusIndicator.setName("icon_status");
|
this.statusIndicator.setName("icon_status");
|
||||||
this.statusIndicator.setVisible(false);
|
this.statusIndicator.setVisible(false);
|
||||||
this.statusIndicator.setOrigin(0, 0);
|
this.statusIndicator.setOrigin(0, 0);
|
||||||
|
@ -83,12 +83,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
|||||||
this.nameBoxContainer.add(this.nameText);
|
this.nameBoxContainer.add(this.nameText);
|
||||||
messageContainer.add(this.nameBoxContainer);
|
messageContainer.add(this.nameBoxContainer);
|
||||||
|
|
||||||
const prompt = this.scene.add.sprite(0, 0, "prompt");
|
this.initPromptSprite(messageContainer);
|
||||||
prompt.setVisible(false);
|
|
||||||
prompt.setOrigin(0, 0);
|
|
||||||
messageContainer.add(prompt);
|
|
||||||
|
|
||||||
this.prompt = prompt;
|
|
||||||
|
|
||||||
const levelUpStatsContainer = this.scene.add.container(0, 0);
|
const levelUpStatsContainer = this.scene.add.container(0, 0);
|
||||||
levelUpStatsContainer.setVisible(false);
|
levelUpStatsContainer.setVisible(false);
|
||||||
|
@ -287,7 +287,6 @@ export default class EggGachaUiHandler extends MessageUiHandler {
|
|||||||
this.eggGachaContainer.add(this.eggGachaSummaryContainer);
|
this.eggGachaContainer.add(this.eggGachaSummaryContainer);
|
||||||
|
|
||||||
const gachaMessageBoxContainer = this.scene.add.container(0, 148);
|
const gachaMessageBoxContainer = this.scene.add.container(0, 148);
|
||||||
this.eggGachaContainer.add(gachaMessageBoxContainer);
|
|
||||||
|
|
||||||
const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32);
|
const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32);
|
||||||
gachaMessageBox.setOrigin(0, 0);
|
gachaMessageBox.setOrigin(0, 0);
|
||||||
@ -301,8 +300,11 @@ export default class EggGachaUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.message = gachaMessageText;
|
this.message = gachaMessageText;
|
||||||
|
|
||||||
|
this.initTutorialOverlay(this.eggGachaContainer);
|
||||||
this.eggGachaContainer.add(gachaMessageBoxContainer);
|
this.eggGachaContainer.add(gachaMessageBoxContainer);
|
||||||
|
|
||||||
|
this.initPromptSprite(gachaMessageBoxContainer);
|
||||||
|
|
||||||
this.setCursor(0);
|
this.setCursor(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,12 +45,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.message = message;
|
this.message = message;
|
||||||
|
|
||||||
const prompt = this.scene.add.sprite(0, 0, "prompt");
|
this.initPromptSprite(this.messageContainer);
|
||||||
prompt.setVisible(false);
|
|
||||||
prompt.setOrigin(0, 0);
|
|
||||||
this.messageContainer.add(prompt);
|
|
||||||
|
|
||||||
this.prompt = prompt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show(_args: any[]): boolean {
|
show(_args: any[]): boolean {
|
||||||
|
@ -157,6 +157,9 @@ export default class MenuUiHandler extends MessageUiHandler {
|
|||||||
menuMessageText.setOrigin(0, 0);
|
menuMessageText.setOrigin(0, 0);
|
||||||
this.menuMessageBoxContainer.add(menuMessageText);
|
this.menuMessageBoxContainer.add(menuMessageText);
|
||||||
|
|
||||||
|
this.initTutorialOverlay(this.menuContainer);
|
||||||
|
this.initPromptSprite(this.menuMessageBoxContainer);
|
||||||
|
|
||||||
this.message = menuMessageText;
|
this.message = menuMessageText;
|
||||||
|
|
||||||
// By default we use the general purpose message window
|
// By default we use the general purpose message window
|
||||||
@ -433,6 +436,9 @@ export default class MenuUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.scene.playSound("ui/menu_open");
|
this.scene.playSound("ui/menu_open");
|
||||||
|
|
||||||
|
// Make sure the tutorial overlay sits above everything, but below the message box
|
||||||
|
this.menuContainer.bringToTop(this.tutorialOverlay);
|
||||||
|
this.menuContainer.bringToTop(this.menuMessageBoxContainer);
|
||||||
handleTutorial(this.scene, Tutorial.Menu);
|
handleTutorial(this.scene, Tutorial.Menu);
|
||||||
|
|
||||||
this.bgmBar.toggleBgmBar(true);
|
this.bgmBar.toggleBgmBar(true);
|
||||||
|
@ -17,6 +17,23 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler {
|
|||||||
this.pendingPrompt = false;
|
this.pendingPrompt = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the sprite to be displayed at the end of messages with prompts
|
||||||
|
* @param container the container to add the sprite to
|
||||||
|
*/
|
||||||
|
initPromptSprite(container: Phaser.GameObjects.Container) {
|
||||||
|
if (!this.prompt) {
|
||||||
|
const promptSprite = this.scene.add.sprite(0, 0, "prompt");
|
||||||
|
promptSprite.setVisible(false);
|
||||||
|
promptSprite.setOrigin(0, 0);
|
||||||
|
this.prompt = promptSprite;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (container) {
|
||||||
|
container.add(this.prompt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) {
|
showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) {
|
||||||
this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay);
|
this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay);
|
||||||
}
|
}
|
||||||
@ -180,7 +197,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler {
|
|||||||
const lastLineWidth = lastLineTest.displayWidth;
|
const lastLineWidth = lastLineTest.displayWidth;
|
||||||
lastLineTest.destroy();
|
lastLineTest.destroy();
|
||||||
if (this.prompt) {
|
if (this.prompt) {
|
||||||
this.prompt.setPosition(lastLineWidth + 2, (textLinesCount - 1) * 18 + 2);
|
this.prompt.setPosition(this.message.x + lastLineWidth + 2, this.message.y + (textLinesCount - 1) * 18 + 2);
|
||||||
this.prompt.play("prompt");
|
this.prompt.play("prompt");
|
||||||
}
|
}
|
||||||
this.pendingPrompt = false;
|
this.pendingPrompt = false;
|
||||||
|
@ -467,8 +467,8 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
} else if (option === PartyOption.UNPAUSE_EVOLUTION) {
|
} else if (option === PartyOption.UNPAUSE_EVOLUTION) {
|
||||||
this.clearOptions();
|
this.clearOptions();
|
||||||
ui.playSelect();
|
ui.playSelect();
|
||||||
pokemon.pauseEvolutions = false;
|
pokemon.pauseEvolutions = !pokemon.pauseEvolutions;
|
||||||
this.showText(i18next.t("partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true);
|
this.showText(i18next.t(pokemon.pauseEvolutions? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true);
|
||||||
} else if (option === PartyOption.UNSPLICE) {
|
} else if (option === PartyOption.UNSPLICE) {
|
||||||
this.clearOptions();
|
this.clearOptions();
|
||||||
ui.playSelect();
|
ui.playSelect();
|
||||||
@ -889,7 +889,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
this.options.push(PartyOption.SUMMARY);
|
this.options.push(PartyOption.SUMMARY);
|
||||||
this.options.push(PartyOption.RENAME);
|
this.options.push(PartyOption.RENAME);
|
||||||
|
|
||||||
if (pokemon.pauseEvolutions && (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)))) {
|
if ((pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)))) {
|
||||||
this.options.push(PartyOption.UNPAUSE_EVOLUTION);
|
this.options.push(PartyOption.UNPAUSE_EVOLUTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -976,6 +976,8 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
||||||
const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM];
|
const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM];
|
||||||
optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`;
|
optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`;
|
||||||
|
} else if (option === PartyOption.UNPAUSE_EVOLUTION) {
|
||||||
|
optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:UNPAUSE_EVOLUTION") : i18next.t("partyUiHandler:PAUSE_EVOLUTION")}`;
|
||||||
} else {
|
} else {
|
||||||
if (this.localizedOptions.includes(option)) {
|
if (this.localizedOptions.includes(option)) {
|
||||||
optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`);
|
optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`);
|
||||||
@ -1270,7 +1272,7 @@ class PartySlot extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.pokemon.status) {
|
if (this.pokemon.status) {
|
||||||
const statusIndicator = this.scene.add.sprite(0, 0, "statuses");
|
const statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`);
|
||||||
statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase());
|
statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase());
|
||||||
statusIndicator.setOrigin(0, 0);
|
statusIndicator.setOrigin(0, 0);
|
||||||
statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0);
|
statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0);
|
||||||
|
@ -13,7 +13,7 @@ import { allMoves } from "../data/move";
|
|||||||
import { Nature, getNatureName } from "../data/nature";
|
import { Nature, getNatureName } from "../data/nature";
|
||||||
import { pokemonFormChanges } from "../data/pokemon-forms";
|
import { pokemonFormChanges } from "../data/pokemon-forms";
|
||||||
import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves";
|
import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves";
|
||||||
import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities, getPokerusStarters } from "../data/pokemon-species";
|
import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities, POKERUS_STARTER_COUNT, getPokerusStarters } from "../data/pokemon-species";
|
||||||
import { Type } from "../data/type";
|
import { Type } from "../data/type";
|
||||||
import { GameModes } from "../game-mode";
|
import { GameModes } from "../game-mode";
|
||||||
import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "../system/game-data";
|
import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "../system/game-data";
|
||||||
@ -631,7 +631,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
starterBoxContainer.add(this.starterSelectScrollBar);
|
starterBoxContainer.add(this.starterSelectScrollBar);
|
||||||
|
|
||||||
this.pokerusCursorObjs = new Array(3).fill(null).map(() => {
|
this.pokerusCursorObjs = new Array(POKERUS_STARTER_COUNT).fill(null).map(() => {
|
||||||
const cursorObj = this.scene.add.image(0, 0, "select_cursor_pokerus");
|
const cursorObj = this.scene.add.image(0, 0, "select_cursor_pokerus");
|
||||||
cursorObj.setVisible(false);
|
cursorObj.setVisible(false);
|
||||||
cursorObj.setOrigin(0, 0);
|
cursorObj.setOrigin(0, 0);
|
||||||
@ -760,7 +760,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText);
|
this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText);
|
||||||
|
|
||||||
this.pokemonMovesContainer = this.scene.add.container(102, 16);
|
this.pokemonMovesContainer = this.scene.add.container(102, 16);
|
||||||
this.pokemonMovesContainer.setScale(0.5);
|
this.pokemonMovesContainer.setScale(0.375);
|
||||||
|
|
||||||
for (let m = 0; m < 4; m++) {
|
for (let m = 0; m < 4; m++) {
|
||||||
const moveContainer = this.scene.add.container(0, 14 * m);
|
const moveContainer = this.scene.add.container(0, 14 * m);
|
||||||
@ -894,6 +894,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.message.setOrigin(0, 0);
|
this.message.setOrigin(0, 0);
|
||||||
this.starterSelectMessageBoxContainer.add(this.message);
|
this.starterSelectMessageBoxContainer.add(this.message);
|
||||||
|
|
||||||
|
// arrow icon for the message box
|
||||||
|
this.initPromptSprite(this.starterSelectMessageBoxContainer);
|
||||||
|
|
||||||
this.statsContainer = new StatsContainer(this.scene, 6, 16);
|
this.statsContainer = new StatsContainer(this.scene, 6, 16);
|
||||||
|
|
||||||
this.scene.add.existing(this.statsContainer);
|
this.scene.add.existing(this.statsContainer);
|
||||||
@ -911,7 +914,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29,
|
y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29,
|
||||||
});
|
});
|
||||||
this.starterSelectContainer.add(this.moveInfoOverlay);
|
this.starterSelectContainer.add(this.moveInfoOverlay);
|
||||||
|
|
||||||
|
// Filter bar sits above everything, except the tutorial overlay and message box
|
||||||
this.starterSelectContainer.bringToTop(this.filterBarContainer);
|
this.starterSelectContainer.bringToTop(this.filterBarContainer);
|
||||||
|
this.initTutorialOverlay(this.starterSelectContainer);
|
||||||
|
this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer);
|
||||||
|
|
||||||
this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e));
|
this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e));
|
||||||
|
|
||||||
|
@ -4,12 +4,15 @@ import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./t
|
|||||||
import { PERMANENT_STATS, getStatKey } from "#app/enums/stat";
|
import { PERMANENT_STATS, getStatKey } from "#app/enums/stat";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
|
|
||||||
const ivChartSize = 24;
|
const ivChartSize = 24;
|
||||||
const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]];
|
const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]];
|
||||||
const speedLabelOffset = -3;
|
const speedLabelOffset = -3;
|
||||||
const sideLabelOffset = 1;
|
const sideLabelOffset = 1;
|
||||||
const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset];
|
const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset];
|
||||||
|
const ivChartLabelyOffset= [0, 5, 0, 5, 0, 0]; // doing this so attack does not overlap with (+N)
|
||||||
const ivChartStatIndexes = [0, 1, 2, 5, 4, 3]; // swap special attack and speed
|
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 {
|
||||||
@ -29,7 +32,6 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
setup() {
|
setup() {
|
||||||
this.setName("stats");
|
this.setName("stats");
|
||||||
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[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);
|
||||||
|
|
||||||
@ -55,12 +57,19 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
this.ivStatValueTexts = [];
|
this.ivStatValueTexts = [];
|
||||||
|
|
||||||
for (const s of PERMANENT_STATS) {
|
for (const s of PERMANENT_STATS) {
|
||||||
const statLabel = addTextObject(this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325, ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + ivLabelOffset[s], i18next.t(getStatKey(s)), TextStyle.TOOLTIP_CONTENT);
|
const statLabel = addTextObject(
|
||||||
|
this.scene,
|
||||||
|
ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325 + (this.showDiff ? 0 : ivLabelOffset[s]),
|
||||||
|
ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + (this.showDiff ? 0 : ivChartLabelyOffset[s]),
|
||||||
|
i18next.t(getStatKey(s)),
|
||||||
|
TextStyle.TOOLTIP_CONTENT
|
||||||
|
);
|
||||||
statLabel.setOrigin(0.5);
|
statLabel.setOrigin(0.5);
|
||||||
|
|
||||||
this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x, statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT);
|
this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT);
|
||||||
this.ivStatValueTexts[s].setOrigin(0.5);
|
this.ivStatValueTexts[s].setOrigin(0.5);
|
||||||
|
|
||||||
|
|
||||||
this.add(statLabel);
|
this.add(statLabel);
|
||||||
this.add(this.ivStatValueTexts[s]);
|
this.add(this.ivStatValueTexts[s]);
|
||||||
}
|
}
|
||||||
|
@ -214,7 +214,7 @@ export default class SummaryUiHandler extends UiHandler {
|
|||||||
|
|
||||||
this.statusContainer.add(statusLabel);
|
this.statusContainer.add(statusLabel);
|
||||||
|
|
||||||
this.status = this.scene.add.sprite(91, 4, "statuses");
|
this.status = this.scene.add.sprite(91, 4, `statuses_${i18next.resolvedLanguage}`);
|
||||||
this.status.setOrigin(0.5, 0);
|
this.status.setOrigin(0.5, 0);
|
||||||
|
|
||||||
this.statusContainer.add(this.status);
|
this.statusContainer.add(this.status);
|
||||||
@ -824,6 +824,7 @@ export default class SummaryUiHandler extends UiHandler {
|
|||||||
metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, {
|
metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, {
|
||||||
biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
|
biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
|
||||||
level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
|
level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
|
||||||
|
wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`,
|
||||||
}),
|
}),
|
||||||
natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature })
|
natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature })
|
||||||
});
|
});
|
||||||
|
@ -31,6 +31,7 @@ export default defineConfig(({mode}) => {
|
|||||||
|
|
||||||
return ({
|
return ({
|
||||||
...defaultConfig,
|
...defaultConfig,
|
||||||
|
base: '',
|
||||||
esbuild: {
|
esbuild: {
|
||||||
pure: mode === 'production' ? ['console.log'] : [],
|
pure: mode === 'production' ? ['console.log'] : [],
|
||||||
keepNames: true,
|
keepNames: true,
|
||||||
|