Merge branch 'pagefaultgames:main' into EmoUsedHM01-patch-1

This commit is contained in:
EmoUsedHM01 2024-04-30 21:16:49 +01:00 committed by GitHub
commit 6c1e5bd47c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
71 changed files with 3842 additions and 4050 deletions

1
.gitignore vendored
View File

@ -33,5 +33,6 @@ public/images/pokemon/icons/input/output/*
public/images/character/*/ public/images/character/*/
src/data/battle-anim-raw-data*.ts src/data/battle-anim-raw-data*.ts
src/data/battle-anim-data.ts src/data/battle-anim-data.ts
src/overrides.ts
coverage coverage

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "pokemon-rogue-battle", "name": "pokemon-rogue-battle",
"version": "1.0.1", "version": "1.0.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pokemon-rogue-battle", "name": "pokemon-rogue-battle",
"version": "1.0.1", "version": "1.0.3",
"dependencies": { "dependencies": {
"@material/material-color-utilities": "^0.2.7", "@material/material-color-utilities": "^0.2.7",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",

View File

@ -4,30 +4,30 @@
"image": "676-dandy.png", "image": "676-dandy.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 66,
"h": 72 "h": 66
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 62, "w": 96,
"h": 72 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 20,
"y": 0, "y": 14,
"w": 62, "w": 56,
"h": 72 "h": 66
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 62, "w": 56,
"h": 72 "h": 66
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:9a72775f436bbda574bf3721630310fb:f01538e7a19ca3d0d2fea48cd27d8a4c:b5a287256e260744fe6660dc2ceefd11$" "smartupdate": "$TexturePacker:SmartUpdate:30c2972a226f8e360e323bea40a8005e:232a9bbcc4dba00a033204f1ec06cffd:b5a287256e260744fe6660dc2ceefd11$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 711 B

View File

@ -4,30 +4,30 @@
"image": "676-debutante.png", "image": "676-debutante.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 68, "w": 62,
"h": 68 "h": 62
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 57, "w": 96,
"h": 68 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 25,
"y": 0, "y": 18,
"w": 57, "w": 51,
"h": 68 "h": 62
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 57, "w": 51,
"h": 68 "h": 62
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6d038d8d188d6e545741353c2dd5b812:6f39eb82deb32d251df708f5d4edc9f1:bf2f862a1c8881133f9f3ffbf44602fa$" "smartupdate": "$TexturePacker:SmartUpdate:5a68081e37dfebc3935ecf4a4fbee3ad:71cbee6966c08512b0617eba3ce34a49:bf2f862a1c8881133f9f3ffbf44602fa$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 775 B

View File

@ -4,30 +4,30 @@
"image": "676-diamond.png", "image": "676-diamond.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 68,
"h": 74 "h": 68
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 51, "w": 96,
"h": 74 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 27,
"y": 0, "y": 12,
"w": 51, "w": 45,
"h": 74 "h": 68
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 51, "w": 45,
"h": 74 "h": 68
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6e2189160ebb9fff02e9a051ee296d91:47037a1746645a551e31781cb8262e1f:88c467fc09249b0d2f579d44eacd528d$" "smartupdate": "$TexturePacker:SmartUpdate:2d32af44d56592301808b561e6fa22f6:c70b6710f9c7ebb5268979a777193386:88c467fc09249b0d2f579d44eacd528d$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 693 B

View File

@ -4,30 +4,30 @@
"image": "676-heart.png", "image": "676-heart.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 71, "w": 65,
"h": 71 "h": 65
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 52, "w": 96,
"h": 71 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 26,
"y": 0, "y": 15,
"w": 52, "w": 46,
"h": 71 "h": 65
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 46,
"h": 71 "h": 65
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:bd54cfc49b95a12709696441044b115c:dce25f0e6474cad17709f18c96ffb3e5:e11d4dd16bff2ef69bc5ca683c44ca7c$" "smartupdate": "$TexturePacker:SmartUpdate:e936d451ba0b36434d6444cb1b80f4d9:0b0d0b49e11fcc790a20130e3ab18ca5:e11d4dd16bff2ef69bc5ca683c44ca7c$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 717 B

View File

@ -4,30 +4,30 @@
"image": "676-kabuki.png", "image": "676-kabuki.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 71, "w": 65,
"h": 71 "h": 65
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 55, "w": 96,
"h": 71 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 23,
"y": 0, "y": 15,
"w": 55, "w": 49,
"h": 71 "h": 65
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 55, "w": 49,
"h": 71 "h": 65
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:5bd5ad9678c59b2b1d85a6af103ba1ba:2f6c7f2792f64728b478333fc2c65138:c3cad56aa65d2ee971ceebc435a14ee6$" "smartupdate": "$TexturePacker:SmartUpdate:517d96cd6baa5b7616a51e8c4fed7a55:0a0f239ab3df60459410fab5eba8a4e6:c3cad56aa65d2ee971ceebc435a14ee6$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 731 B

View File

@ -4,30 +4,30 @@
"image": "676-la-reine.png", "image": "676-la-reine.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 69, "w": 63,
"h": 69 "h": 63
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 54, "w": 96,
"h": 69 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 24,
"y": 0, "y": 17,
"w": 54, "w": 48,
"h": 69 "h": 63
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 54, "w": 48,
"h": 69 "h": 63
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:e01297ffc2dd40460e87b64750997ca6:3261fa54b4c9574937d670de782ca3e8:b99821e87dffda3297dd25a224a9029f$" "smartupdate": "$TexturePacker:SmartUpdate:e2179e3c9dfa079f84af302283187a80:518e57f1e0614d1aedad1d9826def3d4:b99821e87dffda3297dd25a224a9029f$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 660 B

View File

@ -4,30 +4,30 @@
"image": "676-matron.png", "image": "676-matron.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 68, "w": 62,
"h": 68 "h": 62
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 53, "w": 96,
"h": 68 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 26,
"y": 0, "y": 18,
"w": 53, "w": 47,
"h": 68 "h": 62
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 53, "w": 47,
"h": 68 "h": 62
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:262f28877dc9ef9e7920282c4b36b8dd:18b55adc9c377d1b24d6b236e1f39177:020798583d07c479020bb0af34cf8bb6$" "smartupdate": "$TexturePacker:SmartUpdate:6c9b45763eb4fedb5ec7099762f23606:884e9813686e91cf2a2cd9f51652a875:020798583d07c479020bb0af34cf8bb6$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 734 B

View File

@ -4,30 +4,30 @@
"image": "676-pharaoh.png", "image": "676-pharaoh.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 70, "w": 64,
"h": 70 "h": 64
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 53, "w": 96,
"h": 70 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 25,
"y": 0, "y": 16,
"w": 53, "w": 47,
"h": 70 "h": 64
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 53, "w": 47,
"h": 70 "h": 64
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:a5d56fc494b2194036a8d6d1d876a296:6260eeb9aa48a1047c8ec12842ac28c6:904b7ab6f57249c96beea4b5f72deb53$" "smartupdate": "$TexturePacker:SmartUpdate:5143f43786377eae745a9355e5e1cc24:158aa35a349be4cf7c56820170aa4546:904b7ab6f57249c96beea4b5f72deb53$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 726 B

View File

@ -4,30 +4,30 @@
"image": "676-star.png", "image": "676-star.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 66,
"h": 72 "h": 66
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 54, "w": 96,
"h": 72 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 24,
"y": 0, "y": 14,
"w": 54, "w": 48,
"h": 72 "h": 66
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 54, "w": 48,
"h": 72 "h": 66
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6be66775c485bf44d69f7cd44e346324:c9e3d3db02b6ea0720a20b9bbd159d79:dd7fedf66b493b0bbdef5d25e0041dd8$" "smartupdate": "$TexturePacker:SmartUpdate:d9af00245cb6498c9dec7508ed563454:12f19bad174b64678e8b8be8455f2b5a:dd7fedf66b493b0bbdef5d25e0041dd8$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 734 B

View File

@ -4,219 +4,30 @@
"image": "678.png", "image": "678.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 157, "w": 55,
"h": 157 "h": 55
}, },
"scale": 1, "scale": 0.333,
"frames": [ "frames": [
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 25,
"y": 16,
"w": 54,
"h": 60
},
"frame": {
"x": 0,
"y": 0,
"w": 54,
"h": 60
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 25,
"y": 16,
"w": 54,
"h": 60
},
"frame": {
"x": 0,
"y": 0,
"w": 54,
"h": 60
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 25,
"y": 15,
"w": 53,
"h": 61
},
"frame": {
"x": 54,
"y": 0,
"w": 53,
"h": 61
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 25,
"y": 15,
"w": 53,
"h": 61
},
"frame": {
"x": 54,
"y": 0,
"w": 53,
"h": 61
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 24,
"y": 15,
"w": 52,
"h": 61
},
"frame": {
"x": 0,
"y": 60,
"w": 52,
"h": 61
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 24,
"y": 15,
"w": 52,
"h": 61
},
"frame": {
"x": 0,
"y": 60,
"w": 52,
"h": 61
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 26,
"y": 16,
"w": 54,
"h": 60
},
"frame": {
"x": 52,
"y": 61,
"w": 54,
"h": 60
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 24,
"y": 17,
"w": 51,
"h": 59
},
"frame": {
"x": 106,
"y": 61,
"w": 51,
"h": 59
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 24,
"y": 17,
"w": 51,
"h": 59
},
"frame": {
"x": 106,
"y": 61,
"w": 51,
"h": 59
}
},
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 96, "w": 96,
"h": 96 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 23, "x": 25,
"y": 19, "y": 20,
"w": 50, "w": 46,
"h": 57 "h": 55
}, },
"frame": { "frame": {
"x": 107, "x": 0,
"y": 0, "y": 0,
"w": 50, "w": 46,
"h": 57 "h": 55
} }
} }
] ]
@ -225,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:ab77ad452685ab677c7e5e70a386e880:27bb9b07316cb5c401e67e15e2b0f06a:887aa14e4a3a3e9141c6ae460f968db1$" "smartupdate": "$TexturePacker:SmartUpdate:7b46b2656390e5ddac94370837e7cdaa:7f76286d5acb65066eff0c2532fa7fea:887aa14e4a3a3e9141c6ae460f968db1$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 589 B

View File

@ -4,30 +4,30 @@
"image": "676-dandy.png", "image": "676-dandy.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 71, "w": 65,
"h": 71 "h": 65
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 56, "w": 96,
"h": 71 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 22,
"y": 0, "y": 15,
"w": 56, "w": 50,
"h": 71 "h": 65
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 56, "w": 50,
"h": 71 "h": 65
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:cd88917bff3fae3d6ff808096f539d70:17a1912fd81d23ce8a7209e27ad3e9ed:b5a287256e260744fe6660dc2ceefd11$" "smartupdate": "$TexturePacker:SmartUpdate:30639f5b87709c77f1b970be4078abf4:7b6183e776852f811a1e5c3fa15805fc:b5a287256e260744fe6660dc2ceefd11$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 759 B

View File

@ -4,30 +4,30 @@
"image": "676-debutante.png", "image": "676-debutante.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 67, "w": 61,
"h": 67 "h": 61
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 56, "w": 96,
"h": 67 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 20,
"y": 0, "y": 19,
"w": 56, "w": 50,
"h": 67 "h": 61
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 56, "w": 50,
"h": 67 "h": 61
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:68f3a2720b7b1e5e59f628f021cac698:07d06d321fff31976e1b993edb972e4f:bf2f862a1c8881133f9f3ffbf44602fa$" "smartupdate": "$TexturePacker:SmartUpdate:2ccaadba59ae7a3f23287601b725067d:18ae045d433354fd8b461b528bba113d:bf2f862a1c8881133f9f3ffbf44602fa$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 794 B

View File

@ -4,30 +4,30 @@
"image": "676-diamond.png", "image": "676-diamond.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 68,
"h": 74 "h": 68
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 53, "w": 96,
"h": 74 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 24,
"y": 0, "y": 12,
"w": 53, "w": 47,
"h": 74 "h": 68
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 53, "w": 47,
"h": 74 "h": 68
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:e054ccb4d021c87a6a02c6728403d87a:c7e104da9393ec52b9e6d37f92fc20d9:88c467fc09249b0d2f579d44eacd528d$" "smartupdate": "$TexturePacker:SmartUpdate:bd55e138e32873b99b7a1a2e237d5278:befb394d45c46c22e2711f4c6d5d9623:88c467fc09249b0d2f579d44eacd528d$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 806 B

View File

@ -4,30 +4,30 @@
"image": "676-heart.png", "image": "676-heart.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 66,
"h": 72 "h": 66
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 54, "w": 96,
"h": 72 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 24,
"y": 0, "y": 14,
"w": 54, "w": 48,
"h": 72 "h": 66
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 54, "w": 48,
"h": 72 "h": 66
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:adb921bf32ae497738fbecc12e2aab07:421a40542b16cdb2cc154c85e963b40d:e11d4dd16bff2ef69bc5ca683c44ca7c$" "smartupdate": "$TexturePacker:SmartUpdate:6a000209d8789ed27cdd0700711ccc27:75157608bd339b63c9a7ce68e259b3b7:e11d4dd16bff2ef69bc5ca683c44ca7c$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 814 B

View File

@ -4,30 +4,30 @@
"image": "676-kabuki.png", "image": "676-kabuki.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 70, "w": 64,
"h": 70 "h": 64
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 58, "w": 96,
"h": 70 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 22,
"y": 0, "y": 16,
"w": 58, "w": 52,
"h": 70 "h": 64
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 58, "w": 52,
"h": 70 "h": 64
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:ef8ecfc1b406aa668e3f8daf0dfbaae7:08eecd31f557298e1570ec3490acffe2:c3cad56aa65d2ee971ceebc435a14ee6$" "smartupdate": "$TexturePacker:SmartUpdate:cd44f74e9b1dc4a581bd72f235552344:1404c36e03543b4eb1d1a4d5916a6652:c3cad56aa65d2ee971ceebc435a14ee6$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 837 B

View File

@ -4,30 +4,30 @@
"image": "676-la-reine.png", "image": "676-la-reine.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 69, "w": 63,
"h": 69 "h": 63
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 55, "w": 96,
"h": 69 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 23,
"y": 0, "y": 17,
"w": 55, "w": 49,
"h": 69 "h": 63
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 55, "w": 49,
"h": 69 "h": 63
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6ba780e3e4c772966f8fa209410a9370:c56ae957d7acb10c7373b842af3a8786:b99821e87dffda3297dd25a224a9029f$" "smartupdate": "$TexturePacker:SmartUpdate:1982df9d4acf87f005bb76829bd78a65:e3590ee437367a91742856b3887339a8:b99821e87dffda3297dd25a224a9029f$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 711 B

View File

@ -4,30 +4,30 @@
"image": "676-matron.png", "image": "676-matron.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 68, "w": 62,
"h": 68 "h": 62
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 52, "w": 96,
"h": 68 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 23,
"y": 0, "y": 18,
"w": 52, "w": 46,
"h": 68 "h": 62
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 46,
"h": 68 "h": 62
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:89ab717076c514df8295db07981b18e9:72a9977db421d061829c639e3b50a617:020798583d07c479020bb0af34cf8bb6$" "smartupdate": "$TexturePacker:SmartUpdate:e2bcb6e27807980dfb68c17e65a7e8bd:d2409a3631a4a2263717bf5aa7e273b2:020798583d07c479020bb0af34cf8bb6$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 782 B

View File

@ -4,30 +4,30 @@
"image": "676-pharaoh.png", "image": "676-pharaoh.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 69, "w": 63,
"h": 69 "h": 63
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 52, "w": 96,
"h": 69 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 25,
"y": 0, "y": 17,
"w": 52, "w": 46,
"h": 69 "h": 63
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 46,
"h": 69 "h": 63
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:85c709f8538d07088a17e53a7c85afa0:623b4bc6698ef1a984b6bad42e68115b:904b7ab6f57249c96beea4b5f72deb53$" "smartupdate": "$TexturePacker:SmartUpdate:bdf2959fe7e2556fe6d031d7de04fc6c:fbff7f59a6ed25ee3eef955cbb3b9a56:904b7ab6f57249c96beea4b5f72deb53$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 768 B

View File

@ -4,30 +4,30 @@
"image": "676-star.png", "image": "676-star.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 66,
"h": 72 "h": 66
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 56, "w": 96,
"h": 72 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 24,
"y": 0, "y": 14,
"w": 56, "w": 50,
"h": 72 "h": 66
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 56, "w": 50,
"h": 72 "h": 66
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:56c2df4ee634b690a816b79120bc3600:d7eefc05e299310d05d389e05997e449:dd7fedf66b493b0bbdef5d25e0041dd8$" "smartupdate": "$TexturePacker:SmartUpdate:a3f92eef83bcae7716ee78c669738785:156a85da733d2e878a00be0efc1c4d38:dd7fedf66b493b0bbdef5d25e0041dd8$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 838 B

View File

@ -4,240 +4,30 @@
"image": "678.png", "image": "678.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 130, "w": 56,
"h": 130 "h": 56
}, },
"scale": 1, "scale": 0.5,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 96,
"h": 80 "h": 96
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 18, "x": 25,
"y": 11, "y": 20,
"w": 44, "w": 45,
"h": 57 "h": 56
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 44, "w": 45,
"h": 57
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 18,
"y": 11,
"w": 44,
"h": 57
},
"frame": {
"x": 0,
"y": 57,
"w": 44,
"h": 57
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 18,
"y": 11,
"w": 44,
"h": 57
},
"frame": {
"x": 0,
"y": 57,
"w": 44,
"h": 57
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 21,
"y": 15,
"w": 44,
"h": 53
},
"frame": {
"x": 44,
"y": 0,
"w": 44,
"h": 53
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 21,
"y": 15,
"w": 44,
"h": 53
},
"frame": {
"x": 44,
"y": 0,
"w": 44,
"h": 53
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 24,
"y": 12,
"w": 42,
"h": 56 "h": 56
},
"frame": {
"x": 88,
"y": 0,
"w": 42,
"h": 56
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 24,
"y": 12,
"w": 42,
"h": 56
},
"frame": {
"x": 88,
"y": 0,
"w": 42,
"h": 56
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 20,
"y": 11,
"w": 43,
"h": 57
},
"frame": {
"x": 44,
"y": 53,
"w": 43,
"h": 57
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 20,
"y": 11,
"w": 43,
"h": 57
},
"frame": {
"x": 44,
"y": 53,
"w": 43,
"h": 57
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 22,
"y": 13,
"w": 43,
"h": 55
},
"frame": {
"x": 87,
"y": 56,
"w": 43,
"h": 55
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 22,
"y": 13,
"w": 43,
"h": 55
},
"frame": {
"x": 87,
"y": 56,
"w": 43,
"h": 55
} }
} }
] ]
@ -246,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:9579cbb834c4127f905679ba92633a05:64ed3d991add5e47034b1ca9aad80a4c:887aa14e4a3a3e9141c6ae460f968db1$" "smartupdate": "$TexturePacker:SmartUpdate:ee6cbb7807c28f4b3f12e8dcf4da4888:77056356d7cbf2a4fb20508f50dbd3ce:887aa14e4a3a3e9141c6ae460f968db1$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 746 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -60,25 +60,10 @@ import { SceneBase } from './scene-base';
import CandyBar from './ui/candy-bar'; import CandyBar from './ui/candy-bar';
import { Variant, variantData } from './data/variant'; import { Variant, variantData } from './data/variant';
import { Localizable } from './plugins/i18n'; import { Localizable } from './plugins/i18n';
import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides';
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
export const SEED_OVERRIDE = '';
export const STARTER_SPECIES_OVERRIDE = 0;
export const STARTER_FORM_OVERRIDE = 0;
export const STARTING_LEVEL_OVERRIDE = 0;
export const STARTING_WAVE_OVERRIDE = 0;
export const STARTING_BIOME_OVERRIDE = Biome.TOWN;
export const STARTING_MONEY_OVERRIDE = 0;
export const ABILITY_OVERRIDE = Abilities.NONE;
export const MOVE_OVERRIDE = Moves.NONE;
export const OPP_SPECIES_OVERRIDE = 0;
export const OPP_ABILITY_OVERRIDE = Abilities.NONE;
export const OPP_MOVE_OVERRIDE = Moves.NONE;
export const OPP_SHINY_OVERRIDE = false;
export const OPP_VARIANT_OVERRIDE = 0;
const DEBUG_RNG = false; const DEBUG_RNG = false;
export const startingWave = STARTING_WAVE_OVERRIDE || 1; export const startingWave = STARTING_WAVE_OVERRIDE || 1;
@ -1056,6 +1041,8 @@ export default class BattleScene extends SceneBase {
case Species.BASCULIN: case Species.BASCULIN:
case Species.DEERLING: case Species.DEERLING:
case Species.SAWSBUCK: case Species.SAWSBUCK:
case Species.FROAKIE:
case Species.FROGADIER:
case Species.VIVILLON: case Species.VIVILLON:
case Species.FLABEBE: case Species.FLABEBE:
case Species.FLOETTE: case Species.FLOETTE:
@ -1066,6 +1053,10 @@ export default class BattleScene extends SceneBase {
case Species.TATSUGIRI: case Species.TATSUGIRI:
case Species.PALDEA_TAUROS: case Species.PALDEA_TAUROS:
return Utils.randSeedInt(species.forms.length); return Utils.randSeedInt(species.forms.length);
case Species.GRENINJA:
return Utils.randSeedInt(2);
case Species.ZYGARDE:
return Utils.randSeedInt(3);
case Species.MINIOR: case Species.MINIOR:
return Utils.randSeedInt(6); return Utils.randSeedInt(6);
case Species.ALCREMIE: case Species.ALCREMIE:

View File

@ -976,16 +976,19 @@ export class FieldMoveTypePowerBoostAbAttr extends FieldMovePowerBoostAbAttr {
export class BattleStatMultiplierAbAttr extends AbAttr { export class BattleStatMultiplierAbAttr extends AbAttr {
private battleStat: BattleStat; private battleStat: BattleStat;
private multiplier: number; private multiplier: number;
private condition: PokemonAttackCondition;
constructor(battleStat: BattleStat, multiplier: number) { constructor(battleStat: BattleStat, multiplier: number, condition?: PokemonAttackCondition) {
super(false); super(false);
this.battleStat = battleStat; this.battleStat = battleStat;
this.multiplier = multiplier; this.multiplier = multiplier;
this.condition = condition;
} }
applyBattleStat(pokemon: Pokemon, passive: boolean, battleStat: BattleStat, statValue: Utils.NumberHolder, args: any[]): boolean | Promise<boolean> { applyBattleStat(pokemon: Pokemon, passive: boolean, battleStat: BattleStat, statValue: Utils.NumberHolder, args: any[]): boolean | Promise<boolean> {
if (battleStat === this.battleStat) { const move = (args[0] as Move);
if (battleStat === this.battleStat && (!this.condition || this.condition(pokemon, null, move))) {
statValue.value *= this.multiplier; statValue.value *= this.multiplier;
return true; return true;
} }
@ -1148,6 +1151,26 @@ class PostVictoryStatChangeAbAttr extends PostVictoryAbAttr {
} }
} }
export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr {
private formFunc: (p: Pokemon) => integer;
constructor(formFunc: ((p: Pokemon) => integer)) {
super(true);
this.formFunc = formFunc;
}
applyPostVictory(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> {
const formIndex = this.formFunc(pokemon);
if (formIndex !== pokemon.formIndex) {
pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false);
return true;
}
return false;
}
}
export class PostKnockOutAbAttr extends AbAttr { export class PostKnockOutAbAttr extends AbAttr {
applyPostKnockOut(pokemon: Pokemon, passive: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise<boolean> { applyPostKnockOut(pokemon: Pokemon, passive: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise<boolean> {
return false; return false;
@ -1382,6 +1405,7 @@ export class TraceAbAttr extends PostSummonAbAttr {
const targets = pokemon.getOpponents(); const targets = pokemon.getOpponents();
if (!targets.length) if (!targets.length)
return false; return false;
let target: Pokemon; let target: Pokemon;
if (targets.length > 1) if (targets.length > 1)
pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex); pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex);
@ -1407,6 +1431,9 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr {
applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
const targets = pokemon.getOpponents(); const targets = pokemon.getOpponents();
if (!targets.length)
return false;
let target: Pokemon; let target: Pokemon;
if (targets.length > 1) if (targets.length > 1)
pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex); pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex);
@ -2622,8 +2649,8 @@ export function initAbilities() {
new Ability(Abilities.TRUANT, 3) new Ability(Abilities.TRUANT, 3)
.attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.TRUANT, 1, false), .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.TRUANT, 1, false),
new Ability(Abilities.HUSTLE, 3) new Ability(Abilities.HUSTLE, 3)
.attr(BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5) .attr(BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5, (user, target, move) => move.category == MoveCategory.PHYSICAL)
.attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 0.8), .attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 0.8, (user, target, move) => move.category == MoveCategory.PHYSICAL),
new Ability(Abilities.CUTE_CHARM, 3) new Ability(Abilities.CUTE_CHARM, 3)
.attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED),
new Ability(Abilities.PLUS, 3) new Ability(Abilities.PLUS, 3)
@ -3067,17 +3094,21 @@ export function initAbilities() {
.ignorable() .ignorable()
.partial(), .partial(),
new Ability(Abilities.BATTLE_BOND, 7) new Ability(Abilities.BATTLE_BOND, 7)
.attr(PostVictoryFormChangeAbAttr, p => p.getFormKey() ? 2 : 1)
.attr(UncopiableAbilityAbAttr) .attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr) .attr(UnswappableAbilityAbAttr)
.attr(UnsuppressableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr)
.attr(NoFusionAbilityAbAttr) .attr(NoFusionAbilityAbAttr)
.unimplemented(), .partial(),
new Ability(Abilities.POWER_CONSTRUCT, 7) new Ability(Abilities.POWER_CONSTRUCT, 7) // TODO: 10% Power Construct Zygarde isn't accounted for yet. If changed, update Zygarde's getSpeciesFormIndex entry accordingly
.attr(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2)
.attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2)
.attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2)
.attr(UncopiableAbilityAbAttr) .attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr) .attr(UnswappableAbilityAbAttr)
.attr(UnsuppressableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr)
.attr(NoFusionAbilityAbAttr) .attr(NoFusionAbilityAbAttr)
.unimplemented(), .partial(),
new Ability(Abilities.CORROSION, 7) new Ability(Abilities.CORROSION, 7)
.unimplemented(), .unimplemented(),
new Ability(Abilities.COMATOSE, 7) new Ability(Abilities.COMATOSE, 7)

View File

@ -1,10 +1,10 @@
import { Arena } from "../field/arena"; import { Arena } from "../field/arena";
import { Type } from "./type"; import { Type } from "./type";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { MoveCategory, StatChangeAttr, allMoves } from "./move"; import { MoveCategory, allMoves } from "./move";
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from "../messages";
import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; import Pokemon, { HitResult, PokemonMove } from "../field/pokemon";
import { MoveEffectPhase, StatChangePhase } from "../phases"; import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from "../phases";
import { StatusEffect } from "./status-effect"; import { StatusEffect } from "./status-effect";
import { BattlerIndex } from "../battle"; import { BattlerIndex } from "../battle";
import { Moves } from "./enums/moves"; import { Moves } from "./enums/moves";
@ -146,6 +146,31 @@ class AuroraVeilTag extends WeakenMoveScreenTag {
} }
} }
class WishTag extends ArenaTag {
private battlerIndex: BattlerIndex;
private triggerMessage: string;
private healHp: number;
constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) {
super(ArenaTagType.WISH, turnCount, Moves.WISH, sourceId, side);
}
onAdd(arena: Arena): void {
const user = arena.scene.getPokemonById(this.sourceId);
this.battlerIndex = user.getBattlerIndex();
this.triggerMessage = getPokemonMessage(user, '\'s wish\ncame true!');
this.healHp = Math.max(Math.floor(user.getMaxHp() / 2), 1);
}
onRemove(arena: Arena): void {
const target = arena.scene.getField()[this.battlerIndex];
if (target?.isActive(true)) {
arena.scene.queueMessage(this.triggerMessage);
arena.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), this.healHp, null, true, false));
}
}
}
export class WeakenMoveTypeTag extends ArenaTag { export class WeakenMoveTypeTag extends ArenaTag {
private weakenedType: Type; private weakenedType: Type;
@ -472,6 +497,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov
case ArenaTagType.FUTURE_SIGHT: case ArenaTagType.FUTURE_SIGHT:
case ArenaTagType.DOOM_DESIRE: case ArenaTagType.DOOM_DESIRE:
return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex); return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex);
case ArenaTagType.WISH:
return new WishTag(turnCount, sourceId, side);
case ArenaTagType.STEALTH_ROCK: case ArenaTagType.STEALTH_ROCK:
return new StealthRockTag(sourceId, side); return new StealthRockTag(sourceId, side);
case ArenaTagType.STICKY_WEB: case ArenaTagType.STICKY_WEB:

View File

@ -62,7 +62,7 @@ export const speciesEggMoves = {
[Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.LIQUIDATION, Moves.DRAGON_ASCENT ], [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.LIQUIDATION, Moves.DRAGON_ASCENT ],
[Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.CHILLY_RECEPTION, Moves.BOOMBURST ], [Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.CHILLY_RECEPTION, Moves.BOOMBURST ],
[Species.DITTO]: [ Moves.MIMIC, Moves.COPYCAT, Moves.ME_FIRST, Moves.METRONOME ], [Species.DITTO]: [ Moves.MIMIC, Moves.COPYCAT, Moves.ME_FIRST, Moves.METRONOME ],
[Species.EEVEE]: [ Moves.WISH, Moves.REVELATION_DANCE, Moves.SIZZLY_SLIDE, Moves.NO_RETREAT ], [Species.EEVEE]: [ Moves.WISH, Moves.REVELATION_DANCE, Moves.TRI_ATTACK, Moves.NO_RETREAT ],
[Species.PORYGON]: [ Moves.BUZZY_BUZZ, Moves.AURA_SPHERE, Moves.TOPSY_TURVY, Moves.TECHNO_BLAST ], [Species.PORYGON]: [ Moves.BUZZY_BUZZ, Moves.AURA_SPHERE, Moves.TOPSY_TURVY, Moves.TECHNO_BLAST ],
[Species.OMANYTE]: [ Moves.SCALD, Moves.EARTH_POWER, Moves.POWER_GEM, Moves.STRENGTH_SAP ], [Species.OMANYTE]: [ Moves.SCALD, Moves.EARTH_POWER, Moves.POWER_GEM, Moves.STRENGTH_SAP ],
[Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.DRILL_RUN, Moves.AQUA_CUTTER, Moves.MIGHTY_CLEAVE ], [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.DRILL_RUN, Moves.AQUA_CUTTER, Moves.MIGHTY_CLEAVE ],
@ -81,7 +81,7 @@ export const speciesEggMoves = {
[Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.THIEF, Moves.PARTING_SHOT, Moves.SPORE ], [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.THIEF, Moves.PARTING_SHOT, Moves.SPORE ],
[Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.MEGAHORN, Moves.SILK_TRAP, Moves.STRENGTH_SAP ], [Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.MEGAHORN, Moves.SILK_TRAP, Moves.STRENGTH_SAP ],
[Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.VOLT_SWITCH, Moves.TAIL_GLOW ], [Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.VOLT_SWITCH, Moves.TAIL_GLOW ],
[Species.PICHU]: [ Moves.PIKA_PAPOW, Moves.SPLISHY_SPLASH, Moves.FLOATY_FALL, Moves.ZIPPY_ZAP ], [Species.PICHU]: [ Moves.THUNDERCLAP, Moves.SPLISHY_SPLASH, Moves.FLOATY_FALL, Moves.THUNDER_CAGE ],
[Species.CLEFFA]: [ Moves.TAKE_HEART, Moves.POWER_GEM, Moves.WISH, Moves.LIGHT_OF_RUIN ], [Species.CLEFFA]: [ Moves.TAKE_HEART, Moves.POWER_GEM, Moves.WISH, Moves.LIGHT_OF_RUIN ],
[Species.IGGLYBUFF]: [ Moves.MOONBLAST, Moves.APPLE_ACID, Moves.WISH, Moves.BOOMBURST ], [Species.IGGLYBUFF]: [ Moves.MOONBLAST, Moves.APPLE_ACID, Moves.WISH, Moves.BOOMBURST ],
[Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.ROOST, Moves.MOONBLAST, Moves.FIERY_DANCE ], [Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.ROOST, Moves.MOONBLAST, Moves.FIERY_DANCE ],

View File

@ -8,6 +8,7 @@ export enum ArenaTagType {
MIST = "MIST", MIST = "MIST",
FUTURE_SIGHT = "FUTURE_SIGHT", FUTURE_SIGHT = "FUTURE_SIGHT",
DOOM_DESIRE = "DOOM_DESIRE", DOOM_DESIRE = "DOOM_DESIRE",
WISH = "WISH",
STEALTH_ROCK = "STEALTH_ROCK", STEALTH_ROCK = "STEALTH_ROCK",
STICKY_WEB = "STICKY_WEB", STICKY_WEB = "STICKY_WEB",
TRICK_ROOM = "TRICK_ROOM", TRICK_ROOM = "TRICK_ROOM",

View File

@ -3099,11 +3099,23 @@ export class RandomMovesetMoveAttr extends OverrideMoveEffectAttr {
const moveTargets = getMoveTargets(user, move.moveId); const moveTargets = getMoveTargets(user, move.moveId);
if (!moveTargets.targets.length) if (!moveTargets.targets.length)
return false; return false;
const targets = moveTargets.multiple || moveTargets.targets.length === 1 let selectTargets: BattlerIndex[];
? moveTargets.targets switch (true) {
: moveTargets.targets.indexOf(target.getBattlerIndex()) > -1 case (moveTargets.multiple || moveTargets.targets.length === 1): {
? [ target.getBattlerIndex() ] selectTargets = moveTargets.targets;
: [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; break;
}
case (moveTargets.targets.indexOf(target.getBattlerIndex()) > -1): {
selectTargets = [ target.getBattlerIndex() ];
break;
}
default: {
moveTargets.targets.splice(moveTargets.targets.indexOf(user.getAlly().getBattlerIndex()));
selectTargets = [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ];
break;
}
}
const targets = selectTargets;
user.getMoveQueue().push({ move: move.moveId, targets: targets, ignorePP: true }); user.getMoveQueue().push({ move: move.moveId, targets: targets, ignorePP: true });
user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, moveset[moveIndex], true)); user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, moveset[moveIndex], true));
return true; return true;
@ -4481,7 +4493,7 @@ export function initMoves() {
.attr(AbilityCopyAttr), .attr(AbilityCopyAttr),
new SelfStatusMove(Moves.WISH, Type.NORMAL, -1, 10, -1, 0, 3) new SelfStatusMove(Moves.WISH, Type.NORMAL, -1, 10, -1, 0, 3)
.triageMove() .triageMove()
.unimplemented(), .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true),
new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3)
.attr(RandomMovesetMoveAttr, true) .attr(RandomMovesetMoveAttr, true)
.ignoresVirtual(), .ignoresVirtual(),

View File

@ -542,11 +542,21 @@ export const pokemonFormChanges: PokemonFormChanges = {
new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangePostMoveTrigger(Moves.RELIC_SONG), true), new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangePostMoveTrigger(Moves.RELIC_SONG), true),
new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangeActiveTrigger(false), true) new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangeActiveTrigger(false), true)
], ],
[Species.GRENINJA]: [
new SpeciesFormChange(Species.GRENINJA, 'battle-bond', 'ash', new SpeciesFormChangeManualTrigger(), true),
new SpeciesFormChange(Species.GRENINJA, 'ash', 'battle-bond', new SpeciesFormChangeManualTrigger(), true)
],
[Species.AEGISLASH]: [ [Species.AEGISLASH]: [
new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))),
new SpeciesFormChange(Species.AEGISLASH, 'shield', 'blade', new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, 'shield', 'blade', new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))),
new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangeActiveTrigger(false), true) new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangeActiveTrigger(false), true)
], ],
[Species.ZYGARDE]: [
new SpeciesFormChange(Species.ZYGARDE, '50-pc', 'complete', new SpeciesFormChangeManualTrigger(), true),
new SpeciesFormChange(Species.ZYGARDE, 'complete', '50-pc', new SpeciesFormChangeManualTrigger(), true),
new SpeciesFormChange(Species.ZYGARDE, '10-pc', 'complete', new SpeciesFormChangeManualTrigger(), true),
new SpeciesFormChange(Species.ZYGARDE, 'complete', '10-pc', new SpeciesFormChangeManualTrigger(), true)
],
[Species.DIANCIE]: [ [Species.DIANCIE]: [
new SpeciesFormChange(Species.DIANCIE, '', SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) new SpeciesFormChange(Species.DIANCIE, '', SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE))
], ],

View File

@ -396,9 +396,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 36, Moves.THUNDERBOLT ], [ 36, Moves.THUNDERBOLT ],
[ 40, Moves.LIGHT_SCREEN ], [ 40, Moves.LIGHT_SCREEN ],
[ 44, Moves.THUNDER ], [ 44, Moves.THUNDER ],
[ 48, Moves.PIKA_PAPOW ],
], ],
[Species.RAICHU]: [ [Species.RAICHU]: [
[ 0, Moves.THUNDER_PUNCH ], [ 0, Moves.ZIPPY_ZAP ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -418,7 +419,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.ELECTRO_BALL ], [ 1, Moves.ELECTRO_BALL ],
[ 1, Moves.PLAY_NICE ], [ 1, Moves.PLAY_NICE ],
[ 1, Moves.NUZZLE ], [ 1, Moves.NUZZLE ],
[ 1, Moves.THUNDER_PUNCH ],
[ 5, Moves.THUNDERBOLT ], [ 5, Moves.THUNDERBOLT ],
[ 50, Moves.PIKA_PAPOW ],
], ],
[Species.SANDSHREW]: [ [Species.SANDSHREW]: [
[ 1, Moves.SCRATCH ], [ 1, Moves.SCRATCH ],
@ -2231,9 +2234,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 45, Moves.CHARM ], [ 45, Moves.CHARM ],
[ 50, Moves.DOUBLE_EDGE ], [ 50, Moves.DOUBLE_EDGE ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.LAST_RESORT ],
[ 60, Moves.VEEVEE_VOLLEY ],
], ],
[Species.VAPOREON]: [ [Species.VAPOREON]: [
[ 0, Moves.WATER_GUN ], [ 0, Moves.BOUNCY_BUBBLE ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -2247,19 +2251,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.WATER_GUN ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.HAZE ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.WATER_PULSE ], [ 25, Moves.HAZE ],
[ 30, Moves.AURORA_BEAM ], [ 30, Moves.WATER_PULSE ],
[ 35, Moves.AQUA_RING ], [ 35, Moves.AURORA_BEAM ],
[ 40, Moves.MUDDY_WATER ], [ 40, Moves.AQUA_RING ],
[ 45, Moves.ACID_ARMOR ], [ 45, Moves.MUDDY_WATER ],
[ 50, Moves.HYDRO_PUMP ], [ 50, Moves.ACID_ARMOR ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.HYDRO_PUMP ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.JOLTEON]: [ [Species.JOLTEON]: [
[ 0, Moves.THUNDER_SHOCK ], [ 0, Moves.BUZZY_BUZZ ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -2273,19 +2278,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.THUNDER_SHOCK ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.THUNDER_WAVE ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.DOUBLE_KICK ], [ 25, Moves.THUNDER_WAVE ],
[ 30, Moves.THUNDER_FANG ], [ 30, Moves.DOUBLE_KICK ],
[ 35, Moves.PIN_MISSILE ], [ 35, Moves.THUNDER_FANG ],
[ 40, Moves.DISCHARGE ], [ 40, Moves.PIN_MISSILE ],
[ 45, Moves.AGILITY ], [ 45, Moves.DISCHARGE ],
[ 50, Moves.THUNDER ], [ 50, Moves.AGILITY ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.THUNDER ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.FLAREON]: [ [Species.FLAREON]: [
[ 0, Moves.EMBER ], [ 0, Moves.SIZZLY_SLIDE ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -2298,16 +2304,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.EMBER ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.SMOG ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.BITE ], [ 25, Moves.SMOG ],
[ 30, Moves.FIRE_FANG ], [ 30, Moves.BITE ],
[ 35, Moves.FIRE_SPIN ], [ 35, Moves.FIRE_FANG ],
[ 40, Moves.LAVA_PLUME ], [ 40, Moves.FIRE_SPIN ],
[ 45, Moves.SCARY_FACE ], [ 45, Moves.LAVA_PLUME ],
[ 50, Moves.FLARE_BLITZ ], [ 50, Moves.SCARY_FACE ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.FLARE_BLITZ ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.PORYGON]: [ [Species.PORYGON]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -3325,7 +3332,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 52, Moves.EARTHQUAKE ], [ 52, Moves.EARTHQUAKE ],
], ],
[Species.ESPEON]: [ [Species.ESPEON]: [
[ 0, Moves.CONFUSION ], [ 0, Moves.GLITZY_GLOW ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -3338,19 +3345,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.CONFUSION ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.SWIFT ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.PSYBEAM ], [ 25, Moves.SWIFT ],
[ 30, Moves.MORNING_SUN ], [ 30, Moves.PSYBEAM ],
[ 35, Moves.POWER_SWAP ], [ 35, Moves.MORNING_SUN ],
[ 40, Moves.PSYCHIC ], [ 40, Moves.POWER_SWAP ],
[ 45, Moves.PSYCH_UP ], [ 45, Moves.PSYCHIC ],
[ 50, Moves.FUTURE_SIGHT ], [ 50, Moves.PSYCH_UP ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.FUTURE_SIGHT ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.UMBREON]: [ [Species.UMBREON]: [
[ 0, Moves.SNARL ], [ 0, Moves.BADDY_BAD ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -3364,16 +3372,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.SNARL ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.CONFUSE_RAY ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.ASSURANCE ], [ 25, Moves.CONFUSE_RAY ],
[ 30, Moves.MOONLIGHT ], [ 30, Moves.ASSURANCE ],
[ 35, Moves.GUARD_SWAP ], [ 35, Moves.MOONLIGHT ],
[ 40, Moves.DARK_PULSE ], [ 40, Moves.GUARD_SWAP ],
[ 45, Moves.SCREECH ], [ 45, Moves.DARK_PULSE ],
[ 50, Moves.MEAN_LOOK ], [ 50, Moves.SCREECH ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.MEAN_LOOK ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.MURKROW]: [ [Species.MURKROW]: [
[ 1, Moves.PECK ], [ 1, Moves.PECK ],
@ -5586,7 +5595,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[Species.SPINDA]: [ [Species.SPINDA]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 5, Moves.COPYCAT ], [ 5, Moves.COPYCAT ],
[ 10, Moves.TEETER_DANCE ], [ 10, Moves.DIZZY_PUNCH ],
[ 14, Moves.PSYBEAM ], [ 14, Moves.PSYBEAM ],
[ 19, Moves.HYPNOSIS ], [ 19, Moves.HYPNOSIS ],
[ 23, Moves.BODY_SLAM ], [ 23, Moves.BODY_SLAM ],
@ -7932,7 +7941,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 49, Moves.U_TURN ], [ 49, Moves.U_TURN ],
], ],
[Species.LEAFEON]: [ [Species.LEAFEON]: [
[ 0, Moves.RAZOR_LEAF ], [ 0, Moves.SAPPY_SEED ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -7946,19 +7955,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.RAZOR_LEAF ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.LEECH_SEED ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.MAGICAL_LEAF ], [ 25, Moves.LEECH_SEED ],
[ 30, Moves.SYNTHESIS ], [ 30, Moves.MAGICAL_LEAF ],
[ 35, Moves.SUNNY_DAY ], [ 35, Moves.SYNTHESIS ],
[ 40, Moves.GIGA_DRAIN ], [ 40, Moves.SUNNY_DAY ],
[ 45, Moves.SWORDS_DANCE ], [ 45, Moves.GIGA_DRAIN ],
[ 50, Moves.LEAF_BLADE ], [ 50, Moves.SWORDS_DANCE ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.LEAF_BLADE ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.GLACEON]: [ [Species.GLACEON]: [
[ 0, Moves.ICY_WIND ], [ 0, Moves.FREEZY_FROST ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -7971,16 +7981,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.ICY_WIND ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.ICE_SHARD ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.BITE ], [ 25, Moves.ICE_SHARD ],
[ 30, Moves.ICE_FANG ], [ 30, Moves.BITE ],
[ 35, Moves.SNOWSCAPE ], [ 35, Moves.ICE_FANG ],
[ 40, Moves.FREEZE_DRY ], [ 40, Moves.SNOWSCAPE ],
[ 45, Moves.MIRROR_COAT ], [ 45, Moves.FREEZE_DRY ],
[ 50, Moves.BLIZZARD ], [ 50, Moves.MIRROR_COAT ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.BLIZZARD ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.GLISCOR]: [ [Species.GLISCOR]: [
[ 1, Moves.SAND_ATTACK ], [ 1, Moves.SAND_ATTACK ],
@ -11822,7 +11833,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 66, Moves.HYPER_BEAM ], [ 66, Moves.HYPER_BEAM ],
], ],
[Species.SYLVEON]: [ [Species.SYLVEON]: [
[ 0, Moves.DISARMING_VOICE ], [ 0, Moves.SPARKLY_SWIRL ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.TAKE_DOWN ], [ 1, Moves.TAKE_DOWN ],
[ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.DOUBLE_EDGE ],
@ -11835,16 +11846,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.COVET ], [ 1, Moves.COVET ],
[ 1, Moves.COPYCAT ], [ 1, Moves.COPYCAT ],
[ 5, Moves.SAND_ATTACK ], [ 5, Moves.SAND_ATTACK ],
[ 10, Moves.QUICK_ATTACK ], [ 10, Moves.DISARMING_VOICE ],
[ 15, Moves.BABY_DOLL_EYES ], [ 15, Moves.QUICK_ATTACK ],
[ 20, Moves.SWIFT ], [ 20, Moves.BABY_DOLL_EYES ],
[ 25, Moves.LIGHT_SCREEN ], [ 25, Moves.SWIFT ],
[ 30, Moves.DRAINING_KISS ], [ 30, Moves.LIGHT_SCREEN ],
[ 35, Moves.MISTY_TERRAIN ], [ 35, Moves.DRAINING_KISS ],
[ 40, Moves.SKILL_SWAP ], [ 40, Moves.MISTY_TERRAIN ],
[ 45, Moves.PSYCH_UP ], [ 45, Moves.SKILL_SWAP ],
[ 50, Moves.MOONBLAST ], [ 50, Moves.PSYCH_UP ],
[ 55, Moves.LAST_RESORT ], [ 55, Moves.MOONBLAST ],
[ 60, Moves.LAST_RESORT ],
], ],
[Species.HAWLUCHA]: [ [Species.HAWLUCHA]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -17237,6 +17249,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
], ],
[Species.ALOLA_RAICHU]: [ [Species.ALOLA_RAICHU]: [
[ 0, Moves.PSYCHIC ], [ 0, Moves.PSYCHIC ],
[ 0, Moves.ZIPPY_ZAP ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -17257,6 +17270,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.PLAY_NICE ], [ 1, Moves.PLAY_NICE ],
[ 1, Moves.NUZZLE ], [ 1, Moves.NUZZLE ],
[ 5, Moves.THUNDERBOLT ], [ 5, Moves.THUNDERBOLT ],
[ 50, Moves.PIKA_PAPOW ],
], ],
[Species.ALOLA_SANDSHREW]: [ [Species.ALOLA_SANDSHREW]: [
[ 1, Moves.SCRATCH ], [ 1, Moves.SCRATCH ],

View File

@ -1748,8 +1748,14 @@ export function initSpecies() {
new PokemonSpecies(Species.FENNEKIN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 0.4, 9.4, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.FENNEKIN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 0.4, 9.4, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.BRAIXEN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 1, 14.5, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BRAIXEN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 1, 14.5, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", Type.FIRE, Type.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", Type.FIRE, Type.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false,
new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonForm("Normal", "", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63),
new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, ""),
),
new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false,
new PokemonForm("Normal", "", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142),
new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, ""),
),
new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false, false,
new PokemonForm("Normal", "", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239), new PokemonForm("Normal", "", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239),
new PokemonForm("Battle Bond", "battle-bond", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, false, ""), new PokemonForm("Battle Bond", "battle-bond", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, false, ""),

View File

@ -97,7 +97,7 @@ export const trainerNamePools = {
[TrainerType.MAID]: ["Belinda","Sophie","Emily","Elena","Clare","Alica","Tanya","Tammy"], [TrainerType.MAID]: ["Belinda","Sophie","Emily","Elena","Clare","Alica","Tanya","Tammy"],
[TrainerType.MUSICIAN]: ["Boris","Preston","Charles","Clyde","Vincent","Dalton","Kirk","Shawn","Fabian","Fernando","Joseph","Marcos","Arturo","Jerry","Lonnie","Tony"], [TrainerType.MUSICIAN]: ["Boris","Preston","Charles","Clyde","Vincent","Dalton","Kirk","Shawn","Fabian","Fernando","Joseph","Marcos","Arturo","Jerry","Lonnie","Tony"],
[TrainerType.NURSERY_AIDE]: ["Autumn","Briana","Leah","Miho","Ethel","Hollie","Ilse","June","Kimya","Rosalyn"], [TrainerType.NURSERY_AIDE]: ["Autumn","Briana","Leah","Miho","Ethel","Hollie","Ilse","June","Kimya","Rosalyn"],
[TrainerType.OFFICER]: ["Dirk","Keith","Alex","Bobby","Caleb","Danny","Dylan","Thomas","Daniel","Jeff","Braven","Dell","Neagle","Haruki","Mitchell","Sheriff","Raymond"], [TrainerType.OFFICER]: ["Dirk","Keith","Alex","Bobby","Caleb","Danny","Dylan","Thomas","Daniel","Jeff","Braven","Dell","Neagle","Haruki","Mitchell","Raymond"],
[TrainerType.PARASOL_LADY]: ["Angelica","Clarissa","Madeline","Akari","Annabell","Kayley","Rachel","Alexa","Sabrina","April","Gwyneth","Laura","Lumi","Mariah","Melita","Nicole","Tihana","Ingrid","Tyra"], [TrainerType.PARASOL_LADY]: ["Angelica","Clarissa","Madeline","Akari","Annabell","Kayley","Rachel","Alexa","Sabrina","April","Gwyneth","Laura","Lumi","Mariah","Melita","Nicole","Tihana","Ingrid","Tyra"],
[TrainerType.PILOT]: ["Chase","Leonard","Ted","Elron","Ewing","Flynn","Winslow"], [TrainerType.PILOT]: ["Chase","Leonard","Ted","Elron","Ewing","Flynn","Winslow"],
[TrainerType.POKEFAN]: [["Alex","Allan","Brandon","Carter","Colin","Derek","Jeremy","Joshua","Rex","Robert","Trevor","William","Colton","Miguel","Francisco","Kaleb","Leonard","Boone","Elliot","Jude","Norbert","Corey","Gabe","Baxter"],["Beverly","Georgia","Jaime","Ruth","Isabel","Marissa","Vanessa","Annika","Bethany","Kimberly","Meredith","Rebekah","Eleanor","Darcy","Lydia","Sachiko","Abigail","Agnes","Lydie","Roisin","Tara","Carmen","Janet"]], [TrainerType.POKEFAN]: [["Alex","Allan","Brandon","Carter","Colin","Derek","Jeremy","Joshua","Rex","Robert","Trevor","William","Colton","Miguel","Francisco","Kaleb","Leonard","Boone","Elliot","Jude","Norbert","Corey","Gabe","Baxter"],["Beverly","Georgia","Jaime","Ruth","Isabel","Marissa","Vanessa","Annika","Bethany","Kimberly","Meredith","Rebekah","Eleanor","Darcy","Lydia","Sachiko","Abigail","Agnes","Lydie","Roisin","Tara","Carmen","Janet"]],

View File

@ -18,8 +18,7 @@ import { TimeOfDay } from "../data/enums/time-of-day";
import { Terrain, TerrainType } from "../data/terrain"; import { Terrain, TerrainType } from "../data/terrain";
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability";
import Pokemon from "./pokemon"; import Pokemon from "./pokemon";
import { WEATHER_OVERRIDE } from '../overrides';
const WEATHER_OVERRIDE = WeatherType.NONE;
export class Arena { export class Arena {
public scene: BattleScene; public scene: BattleScene;

View File

@ -1,5 +1,5 @@
import Phaser from 'phaser'; import Phaser from 'phaser';
import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../battle-scene'; import BattleScene, { AnySound } from '../battle-scene';
import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant';
import { variantData } from '#app/data/variant'; import { variantData } from '#app/data/variant';
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info';
@ -43,6 +43,7 @@ import { Nature, getNatureStatMultiplier } from '../data/nature';
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms';
import { TerrainType } from '../data/terrain'; import { TerrainType } from '../data/terrain';
import { TrainerSlot } from '../data/trainer-config'; import { TrainerSlot } from '../data/trainer-config';
import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides';
export enum FieldPosition { export enum FieldPosition {
CENTER, CENTER,
@ -657,7 +658,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
getHpRatio(precise: boolean = false): number { getHpRatio(precise: boolean = false): number {
return precise return precise
? this.hp / this.getMaxHp() ? this.hp / this.getMaxHp()
: ((this.hp / this.getMaxHp()) * 100) / 100; : Math.round((this.hp / this.getMaxHp()) * 100) / 100;
} }
generateGender(): void { generateGender(): void {

View File

@ -1,10 +1,11 @@
import { fixedBattles } from "./battle"; import { fixedBattles } from "./battle";
import BattleScene, { STARTING_BIOME_OVERRIDE, STARTING_LEVEL_OVERRIDE, STARTING_MONEY_OVERRIDE } from "./battle-scene"; import BattleScene from "./battle-scene";
import { Biome } from "./data/enums/biome"; import { Biome } from "./data/enums/biome";
import { Species } from "./data/enums/species"; import { Species } from "./data/enums/species";
import PokemonSpecies, { allSpecies } from "./data/pokemon-species"; import PokemonSpecies, { allSpecies } from "./data/pokemon-species";
import { Arena } from "./field/arena"; import { Arena } from "./field/arena";
import * as Utils from "./utils"; import * as Utils from "./utils";
import { STARTING_BIOME_OVERRIDE, STARTING_LEVEL_OVERRIDE, STARTING_MONEY_OVERRIDE } from './overrides';
export enum GameModes { export enum GameModes {
CLASSIC, CLASSIC,

View File

@ -59,4 +59,9 @@ export const menu: SimpleTranslationEntries = {
"escapeVerbSwitch": "auswechseln", "escapeVerbSwitch": "auswechseln",
"escapeVerbFlee": "flucht", "escapeVerbFlee": "flucht",
"notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!",
"rankings": "Rankings",
"dailyRankings": "Daily Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"playersOnline": "Players Online"
} as const; } as const;

View File

@ -387,102 +387,102 @@ export const pokemon: SimpleTranslationEntries = {
"rayquaza": "Rayquaza", "rayquaza": "Rayquaza",
"jirachi": "Jirachi", "jirachi": "Jirachi",
"deoxys": "Deoxys", "deoxys": "Deoxys",
"turtwig": "Turtwig", "turtwig": "Chelast",
"grotle": "Grotle", "grotle": "Chelcarain",
"torterra": "Torterra", "torterra": "Chelterrar",
"chimchar": "Chimchar", "chimchar": "Panflam",
"monferno": "Monferno", "monferno": "Panpyro",
"infernape": "Infernape", "infernape": "Panferno",
"piplup": "Piplup", "piplup": "Plinfa",
"prinplup": "Prinplup", "prinplup": "Pilprin",
"empoleon": "Empoleon", "empoleon": "Impoleon",
"starly": "Starly", "starly": "Staralili",
"staravia": "Staravia", "staravia": "Staravia",
"staraptor": "Staraptor", "staraptor": "Staraptor",
"bidoof": "Bidoof", "bidoof": "Bidiza",
"bibarel": "Bibarel", "bibarel": "Bidifas",
"kricketot": "Kricketot", "kricketot": "Zirpurze",
"kricketune": "Kricketune", "kricketune": "Zirpeise",
"shinx": "Shinx", "shinx": "Sheinux",
"luxio": "Luxio", "luxio": "Luxio",
"luxray": "Luxray", "luxray": "Luxray",
"budew": "Budew", "budew": "Knospi",
"roserade": "Roserade", "roserade": "Roserade",
"cranidos": "Cranidos", "cranidos": "Koknodon",
"rampardos": "Rampardos", "rampardos": "Rameidon",
"shieldon": "Shieldon", "shieldon": "Schilterus",
"bastiodon": "Bastiodon", "bastiodon": "Bollterus",
"burmy": "Burmy", "burmy": "Burmy",
"wormadam": "Wormadam", "wormadam": "Burmadame",
"mothim": "Mothim", "mothim": "Moterpel",
"combee": "Combee", "combee": "Wadribie",
"vespiquen": "Vespiquen", "vespiquen": "Hornwiesel",
"pachirisu": "Pachirisu", "pachirisu": "Pachirisu",
"buizel": "Buizel", "buizel": "Bamelin",
"floatzel": "Floatzel", "floatzel": "Bojelin",
"cherubi": "Cherubi", "cherubi": "Kikugi",
"cherrim": "Cherrim", "cherrim": "Kinoso",
"shellos": "Shellos", "shellos": "Schalellos",
"gastrodon": "Gastrodon", "gastrodon": "Gastrodon",
"ambipom": "Ambipom", "ambipom": "Ambidifel",
"drifloon": "Drifloon", "drifloon": "Driftlon",
"drifblim": "Drifblim", "drifblim": "Drifzepeli",
"buneary": "Buneary", "buneary": "Haspiror",
"lopunny": "Lopunny", "lopunny": "Schlapor",
"mismagius": "Mismagius", "mismagius": "Traunmagil",
"honchkrow": "Honchkrow", "honchkrow": "Kramshef",
"glameow": "Glameow", "glameow": "Charmian",
"purugly": "Purugly", "purugly": "Shnurgarst",
"chingling": "Chingling", "chingling": "Klingplim",
"stunky": "Stunky", "stunky": "Skunkapuh",
"skuntank": "Skuntank", "skuntank": "Skuntank",
"bronzor": "Bronzor", "bronzor": "Bronzel",
"bronzong": "Bronzong", "bronzong": "Bronzong",
"bonsly": "Bonsly", "bonsly": "Mobai",
"mime_jr": "Mime Jr.", "mime_jr": "Pantimimi",
"happiny": "Happiny", "happiny": "Wonneira",
"chatot": "Chatot", "chatot": "Plaudagei",
"spiritomb": "Spiritomb", "spiritomb": "Kryppuk",
"gible": "Gible", "gible": "Kaumalat",
"gabite": "Gabite", "gabite": "Knarksel",
"garchomp": "Garchomp", "garchomp": "Knackrack",
"munchlax": "Munchlax", "munchlax": "Mampfaxo",
"riolu": "Riolu", "riolu": "Riolu",
"lucario": "Lucario", "lucario": "Lucario",
"hippopotas": "Hippopotas", "hippopotas": "Hippopotas",
"hippowdon": "Hippowdon", "hippowdon": "Hippoterus",
"skorupi": "Skorupi", "skorupi": "Pionskora",
"drapion": "Drapion", "drapion": "Piondragi",
"croagunk": "Croagunk", "croagunk": "Glibunkel",
"toxicroak": "Toxicroak", "toxicroak": "Toxiquak",
"carnivine": "Carnivine", "carnivine": "Venuflibis",
"finneon": "Finneon", "finneon": "Finneon",
"lumineon": "Lumineon", "lumineon": "Lumineon",
"mantyke": "Mantyke", "mantyke": "Mantirps",
"snover": "Snover", "snover": "Shnebedeck",
"abomasnow": "Abomasnow", "abomasnow": "Rexblisar",
"weavile": "Weavile", "weavile": "Snibunna",
"magnezone": "Magnezone", "magnezone": "Magnezone",
"lickilicky": "Lickilicky", "lickilicky": "Schlurplek",
"rhyperior": "Rhyperior", "rhyperior": "Rihornior",
"tangrowth": "Tangrowth", "tangrowth": "Tangoloss",
"electivire": "Electivire", "electivire": "Elevoltek",
"magmortar": "Magmortar", "magmortar": "Magbrant",
"togekiss": "Togekiss", "togekiss": "Togekiss",
"yanmega": "Yanmega", "yanmega": "Yanmega",
"leafeon": "Leafeon", "leafeon": "Folipurba",
"glaceon": "Glaceon", "glaceon": "Glaziola",
"gliscor": "Gliscor", "gliscor": "Skorgro",
"mamoswine": "Mamoswine", "mamoswine": "Mamutel",
"porygon_z": "Porygon-Z", "porygon_z": "Porygon-Z",
"gallade": "Gallade", "gallade": "Galagladi",
"probopass": "Probopass", "probopass": "Voluminas",
"dusknoir": "Dusknoir", "dusknoir": "Zwirrfinst",
"froslass": "Froslass", "froslass": "Frosdedje",
"rotom": "Rotom", "rotom": "Rotom",
"uxie": "Uxie", "uxie": "Selfe",
"mesprit": "Mesprit", "mesprit": "Vesprit",
"azelf": "Azelf", "azelf": "Tobutz",
"dialga": "Dialga", "dialga": "Dialga",
"palkia": "Palkia", "palkia": "Palkia",
"heatran": "Heatran", "heatran": "Heatran",
@ -495,116 +495,116 @@ export const pokemon: SimpleTranslationEntries = {
"shaymin": "Shaymin", "shaymin": "Shaymin",
"arceus": "Arceus", "arceus": "Arceus",
"victini": "Victini", "victini": "Victini",
"snivy": "Snivy", "snivy": "Serpifeu",
"servine": "Servine", "servine": "Efoserp",
"serperior": "Serperior", "serperior": "Serpiroyal",
"tepig": "Tepig", "tepig": "Floink",
"pignite": "Pignite", "pignite": "Ferkokel",
"emboar": "Emboar", "emboar": "Flambirex",
"oshawott": "Oshawott", "oshawott": "Ottaro",
"dewott": "Dewott", "dewott": "Zwottronin",
"samurott": "Samurott", "samurott": "Admurai",
"patrat": "Patrat", "patrat": "Nagelotz",
"watchog": "Watchog", "watchog": "Kukmarda",
"lillipup": "Lillipup", "lillipup": "Yorkleff",
"herdier": "Herdier", "herdier": "Terribark",
"stoutland": "Stoutland", "stoutland": "Bissbark",
"purrloin": "Purrloin", "purrloin": "Felilou",
"liepard": "Liepard", "liepard": "Kleoparda",
"pansage": "Pansage", "pansage": "Vegimak",
"simisage": "Simisage", "simisage": "Vegichita",
"pansear": "Pansear", "pansear": "Grillmak",
"simisear": "Simisear", "simisear": "Grillchita",
"panpour": "Panpour", "panpour": "Sodamak",
"simipour": "Simipour", "simipour": "Sodachita",
"munna": "Munna", "munna": "Somniam",
"musharna": "Musharna", "musharna": "Somnivora",
"pidove": "Pidove", "pidove": "Dusslgurr",
"tranquill": "Tranquill", "tranquill": "Navitaub",
"unfezant": "Unfezant", "unfezant": "Fasasnob",
"blitzle": "Blitzle", "blitzle": "Elezeba",
"zebstrika": "Zebstrika", "zebstrika": "Zebritz",
"roggenrola": "Roggenrola", "roggenrola": "Kiesling",
"boldore": "Boldore", "boldore": "Sedimantur",
"gigalith": "Gigalith", "gigalith": "Brockoloss",
"woobat": "Woobat", "woobat": "Fleknoil",
"swoobat": "Swoobat", "swoobat": "Fletiamo",
"drilbur": "Drilbur", "drilbur": "Rotomurf",
"excadrill": "Excadrill", "excadrill": "Stalobor",
"audino": "Audino", "audino": "Ohrdoch",
"timburr": "Timburr", "timburr": "Praktibalk",
"gurdurr": "Gurdurr", "gurdurr": "Strepoli",
"conkeldurr": "Conkeldurr", "conkeldurr": "Meistagriff",
"tympole": "Tympole", "tympole": "Schallquap",
"palpitoad": "Palpitoad", "palpitoad": "Membrana",
"seismitoad": "Seismitoad", "seismitoad": "Branawarz",
"throh": "Throh", "throh": "Juitesto",
"sawk": "Sawk", "sawk": "Karadonis",
"sewaddle": "Sewaddle", "sewaddle": "Strawickl",
"swadloon": "Swadloon", "swadloon": "Folikon",
"leavanny": "Leavanny", "leavanny": "Matrifol",
"venipede": "Venipede", "venipede": "Toxiped",
"whirlipede": "Whirlipede", "whirlipede": "Rollum",
"scolipede": "Scolipede", "scolipede": "Cerapendra",
"cottonee": "Cottonee", "cottonee": "Waumboll",
"whimsicott": "Whimsicott", "whimsicott": "Elfun",
"petilil": "Petilil", "petilil": "Lilminip",
"lilligant": "Lilligant", "lilligant": "Dressella",
"basculin": "Basculin", "basculin": "Barschuft",
"sandile": "Sandile", "sandile": "Ganovil",
"krokorok": "Krokorok", "krokorok": "Rokkaiman",
"krookodile": "Krookodile", "krookodile": "Rabigator",
"darumaka": "Darumaka", "darumaka": "Flampion",
"darmanitan": "Darmanitan", "darmanitan": "Flampavian",
"maractus": "Maractus", "maractus": "Maracamba",
"dwebble": "Dwebble", "dwebble": "Lithomith",
"crustle": "Crustle", "crustle": "Castellith",
"scraggy": "Scraggy", "scraggy": "Zurrokex",
"scrafty": "Scrafty", "scrafty": "Irokex",
"sigilyph": "Sigilyph", "sigilyph": "Symvolara",
"yamask": "Yamask", "yamask": "Makabaja",
"cofagrigus": "Cofagrigus", "cofagrigus": "Echnatoll",
"tirtouga": "Tirtouga", "tirtouga": "Galapaflos",
"carracosta": "Carracosta", "carracosta": "Karippas",
"archen": "Archen", "archen": "Flapteryx",
"archeops": "Archeops", "archeops": "Aeropteryx",
"trubbish": "Trubbish", "trubbish": "Unratütox",
"garbodor": "Garbodor", "garbodor": "Deponitox",
"zorua": "Zorua", "zorua": "Zorua",
"zoroark": "Zoroark", "zoroark": "Zoroark",
"minccino": "Minccino", "minccino": "Picochilla",
"cinccino": "Cinccino", "cinccino": "Chillabell",
"gothita": "Gothita", "gothita": "Mollimorba",
"gothorita": "Gothorita", "gothorita": "Hypnomorba",
"gothitelle": "Gothitelle", "gothitelle": "Morbitesse",
"solosis": "Solosis", "solosis": "Monozyto",
"duosion": "Duosion", "duosion": "Mitodos",
"reuniclus": "Reuniclus", "reuniclus": "Zytomega",
"ducklett": "Ducklett", "ducklett": "Piccolente",
"swanna": "Swanna", "swanna": "Swaroness",
"vanillite": "Vanillite", "vanillite": "Gelatini",
"vanillish": "Vanillish", "vanillish": "Gelatroppo",
"vanilluxe": "Vanilluxe", "vanilluxe": "Gelatwino",
"deerling": "Deerling", "deerling": "Sesokitz",
"sawsbuck": "Sawsbuck", "sawsbuck": "Kronjuwild",
"emolga": "Emolga", "emolga": "Emolga",
"karrablast": "Karrablast", "karrablast": "Laukaps",
"escavalier": "Escavalier", "escavalier": "Cavalanzas",
"foongus": "Foongus", "foongus": "Tarnpignon",
"amoonguss": "Amoonguss", "amoonguss": "Hutsassa",
"frillish": "Frillish", "frillish": "Quabbel",
"jellicent": "Jellicent", "jellicent": "Apoquallyp",
"alomomola": "Alomomola", "alomomola": "Mamolida",
"joltik": "Joltik", "joltik": "Wattzapf",
"galvantula": "Galvantula", "galvantula": "Voltula",
"ferroseed": "Ferroseed", "ferroseed": "Kastadur",
"ferrothorn": "Ferrothorn", "ferrothorn": "Tentantel",
"klink": "Klink", "klink": "Klikk",
"klang": "Klang", "klang": "Kliklak",
"klinklang": "Klinklang", "klinklang": "Klikdiklak",
"tynamo": "Tynamo", "tynamo": "Zapplardin",
"eelektrik": "Eelektrik", "eelektrik": "Zapplalek",
"eelektross": "Eelektross", "eelektross": "Zapplarang",
"elgyem": "Elgyem", "elgyem": "Elgyem",
"beheeyem": "Beheeyem", "beheeyem": "Beheeyem",
"litwick": "Litwick", "litwick": "Litwick",

View File

@ -78,4 +78,9 @@ export const menu: SimpleTranslationEntries = {
"skipItemQuestion": "Are you sure you want to skip taking an item?", "skipItemQuestion": "Are you sure you want to skip taking an item?",
"eggHatching": "Oh?", "eggHatching": "Oh?",
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?", "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
"rankings": "Rankings",
"dailyRankings": "Daily Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"playersOnline": "Players Online"
} as const; } as const;

View File

@ -61,5 +61,10 @@ export const menu: SimpleTranslationEntries = {
"notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!",
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
"eggHatching": "¿Y esto?", "eggHatching": "¿Y esto?",
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?" "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
"rankings": "Rankings",
"dailyRankings": "Daily Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"playersOnline": "Players Online"
} as const; } as const;

View File

@ -73,4 +73,9 @@ export const menu: SimpleTranslationEntries = {
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre dobjet ?", "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre dobjet ?",
"eggHatching": "Oh ?", "eggHatching": "Oh ?",
"ivScannerUseQuestion": "Utiliser le Scanner dIV sur {{pokemonName}} ?", "ivScannerUseQuestion": "Utiliser le Scanner dIV sur {{pokemonName}} ?",
"rankings": "Rankings",
"dailyRankings": "Daily Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"playersOnline": "Players Online"
} as const; } as const;

View File

@ -1,38 +1,43 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const tutorial: SimpleTranslationEntries = { export const tutorial: SimpleTranslationEntries = {
"intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. "intro": `Bienvenue dans PokéRogue, un fangame axé sur les combats Pokémon avec des éléments roguelite !
$This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. $Ce jeu nest pas monétisé et nous ne prétendons pas à la propriété de Pokémon, ni des éléments sous copyright
$The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. $utilisés.
$If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, $Ce jeu est toujours en développement, mais entièrement jouable.
$Tout signalement de bugs passe par le serveur Discord.
"accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, $Si le jeu est lent, vérifiez que lAccélération Matérielle est activée dans les paramètres du navigateur.`,
"menu": `From this menu you can access the settings.
$From the settings you can change game speed, window style, and other options.
$There are also various other features here, so be sure to check them all!`,
"starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. "accessMenu": `Accédez au menu avec M ou Échap lors de l'attente dune\naction.
$Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. $Il contient les paramètres et diverses fonctionnalités`,
$You can also select gender, ability, and form depending on\nthe variants you've caught or hatched.
$The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`,
"pokerus": `A daily random 3 selectable starters have a purple border. "menu": `Vous pouvez accéder aux paramètres depuis ce menu.
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, $Vous pouvez entre autres y changer la vitesse du jeu ou le style de fenêtre.
$Il y a également toute une variété dautres fonctionnalités,
$jetez-y un œil !`,
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. "starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ.
$These range from consumables, to Pokémon held items, to passive permanent items. $Chacun possède une valeur. Votre équipe peut avoir jusquà\n6 membres, tant que vous ne dépassez pas un coût de 10.
$Most non-consumable item effects will stack in various ways. $Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.
$Some items will only show up if they can be used, such as evolution items. $Les IVs dun starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc den obtenir plusieurs !`,
$You can also transfer held items between Pokémon using the transfer option.
$The transfer option will appear in the bottom right once you have obtained a held item.
$You may purchase consumable items with money, and a larger variety will be available the further you get.
$Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`,
"eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. "pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour
$Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. $violet. Si un starter que vous possédez la, essayez de
$Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. $ lajouter à votre équipe. Vérifiez bien son résumé !`,
$Pokémon hatched from eggs generally have better IVs than\nwild Pokémon.
$Some Pokémon can only even be obtained from eggs. "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre quun.
$There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.
$La plupart des effets des objets non-consommables se cumuleront de diverses manières.
$Certains objets apparaîtront sils peuvent être utilisés, comme les objets dévolution.
$Vous pouvez aussi transférer des objets tenus entre Pokémon en utilisant loption de transfert.
$Loption de transfert apparaît en bas à droite dès que vous avez obtenu un objet à faire tenir.
$Vous pouvez acheter des consommables avec de largent.\nPlus vous progressez, plus le choix sera varié.
$Choisir un des objets gratuits déclenchera le prochain combat, donc faites bien tous vos achats avant.`,
"eggGacha": `Depuis cet écran, vous pouvez échanger vos coupons\ncontre des Œufs de Pokémon.
$Les Œufs éclosent après avoir remporté un certain nombre\nde combats. Les plus rares mettent plus de temps.
$Les Pokémon éclos ne rejoindront pas votre équipe,\nmais seront ajoutés à vos starters.
$Les Pokémon issus dŒufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages.
$Certains Pokémon ne peuvent être obtenus\nque dans des Œufs.
$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`,
} as const; } as const;

View File

@ -6,5 +6,10 @@ export const menu: SimpleTranslationEntries = {
"newGame": "Nuova Partita", "newGame": "Nuova Partita",
"loadGame": "Carica Partita", "loadGame": "Carica Partita",
"dailyRun": "Corsa Giornaliera (Beta)", "dailyRun": "Corsa Giornaliera (Beta)",
"selectGameMode": "Seleziona una modalità di gioco." "selectGameMode": "Seleziona una modalità di gioco.",
"rankings": "Rankings",
"dailyRankings": "Daily Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"playersOnline": "Players Online"
} as const; } as const;

23
src/overrides.ts Normal file
View File

@ -0,0 +1,23 @@
import { Species } from './data/enums/species';
import { Abilities } from "./data/enums/abilities";
import { Biome } from "./data/enums/biome";
import { Moves } from "./data/enums/moves";
import { WeatherType } from "./data/weather";
export const SEED_OVERRIDE = '';
export const STARTER_SPECIES_OVERRIDE = 0;
export const STARTER_FORM_OVERRIDE = 0;
export const STARTING_LEVEL_OVERRIDE = 0;
export const STARTING_WAVE_OVERRIDE = 0;
export const STARTING_BIOME_OVERRIDE = Biome.TOWN;
export const STARTING_MONEY_OVERRIDE = 0;
export const WEATHER_OVERRIDE = WeatherType.NONE;
export const ABILITY_OVERRIDE = Abilities.NONE;
export const MOVE_OVERRIDE = Moves.NONE;
export const OPP_SPECIES_OVERRIDE = 0;
export const OPP_ABILITY_OVERRIDE = Abilities.NONE;
export const OPP_MOVE_OVERRIDE = Moves.NONE;
export const OPP_SHINY_OVERRIDE = false;
export const OPP_VARIANT_OVERRIDE = 0;

View File

@ -1,4 +1,4 @@
import BattleScene, { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE, bypassLogin, startingWave } from "./battle-scene"; import BattleScene, { bypassLogin, startingWave } from "./battle-scene";
import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon";
import * as Utils from './utils'; import * as Utils from './utils';
import { Moves } from "./data/enums/moves"; import { Moves } from "./data/enums/moves";
@ -58,6 +58,7 @@ import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run";
import { GameModes, gameModes } from "./game-mode"; import { GameModes, gameModes } from "./game-mode";
import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species";
import i18next from './plugins/i18n'; import i18next from './plugins/i18n';
import { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE } from './overrides';
export class LoginPhase extends Phase { export class LoginPhase extends Phase {
private showText: boolean; private showText: boolean;
@ -2548,7 +2549,7 @@ export class MoveEffectPhase extends PokemonPhase {
: 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6)); : 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6));
} }
applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, user, BattleStat.ACC, accuracyMultiplier); applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, user, BattleStat.ACC, accuracyMultiplier, this.move.getMove());
const evasionMultiplier = new Utils.NumberHolder(1); const evasionMultiplier = new Utils.NumberHolder(1);
applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, this.getTarget(), BattleStat.EVA, evasionMultiplier); applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, this.getTarget(), BattleStat.EVA, evasionMultiplier);

View File

@ -2,6 +2,7 @@ import BattleScene from "../battle-scene";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject } from "./text";
import { WindowVariant, addWindow } from "./ui-theme"; import { WindowVariant, addWindow } from "./ui-theme";
import * as Utils from "../utils"; import * as Utils from "../utils";
import i18next from "i18next";
interface RankingEntry { interface RankingEntry {
rank: integer, rank: integer,
@ -39,7 +40,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN); const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN);
this.add(titleWindow); this.add(titleWindow);
this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, 'Daily Rankings', TextStyle.WINDOW, { fontSize: '64px' }); this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:dailyRankings'), TextStyle.WINDOW, { fontSize: '64px' });
this.titleLabel.setOrigin(0.5, 0.5); this.titleLabel.setOrigin(0.5, 0.5);
this.add(this.titleLabel); this.add(this.titleLabel);
@ -141,7 +142,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
update(category: ScoreboardCategory = this.category, page: integer = this.page) { update(category: ScoreboardCategory = this.category, page: integer = this.page) {
this.rankingsContainer.removeAll(true); this.rankingsContainer.removeAll(true);
this.loadingLabel.setText('Loading…'); this.loadingLabel.setText(i18next.t('menu:loading'));
this.loadingLabel.setVisible(true); this.loadingLabel.setVisible(true);
if (category !== this.category) if (category !== this.category)
@ -155,7 +156,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
.then(jsonResponse => { .then(jsonResponse => {
this.page = page; this.page = page;
this.category = category; this.category = category;
this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} Rankings`); this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} ${i18next.t("menu:rankings")}`);
this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5); this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5);
this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5); this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5);
this.pageNumberLabel.setText(page.toString()); this.pageNumberLabel.setText(page.toString());
@ -163,7 +164,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
this.loadingLabel.setVisible(false); this.loadingLabel.setVisible(false);
this.updateRankings(jsonResponse); this.updateRankings(jsonResponse);
} else } else
this.loadingLabel.setText('No Rankings'); this.loadingLabel.setText(i18next.t('menu:noRankings'));
}); });
}); });
} }

View File

@ -383,6 +383,7 @@ export default class PartyUiHandler extends MessageUiHandler {
} }
const slotCount = this.partySlots.length; const slotCount = this.partySlots.length;
const battlerCount = this.scene.currentBattle.getBattlerCount();
switch (button) { switch (button) {
case Button.UP: case Button.UP:
@ -392,14 +393,20 @@ export default class PartyUiHandler extends MessageUiHandler {
success = this.setCursor(this.cursor < 6 ? this.cursor < slotCount - 1 ? this.cursor + 1 : 6 : 0); success = this.setCursor(this.cursor < 6 ? this.cursor < slotCount - 1 ? this.cursor + 1 : 6 : 0);
break; break;
case Button.LEFT: case Button.LEFT:
if (this.cursor >= this.scene.currentBattle.getBattlerCount() && this.cursor < 6) if (this.cursor >= battlerCount && this.cursor <= 6)
success = this.setCursor(0); success = this.setCursor(0);
break; break;
case Button.RIGHT: case Button.RIGHT:
const battlerCount = this.scene.currentBattle.getBattlerCount(); if (slotCount === battlerCount){
if (slotCount > battlerCount && this.cursor < battlerCount) success = this.setCursor(6);
success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount);
break; break;
} else if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1){
success = this.setCursor(2);
break;
} else if (slotCount > battlerCount && this.cursor < battlerCount){
success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount);
break;
}
} }
} }

View File

@ -203,7 +203,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterSelectContainer.add(this.shinyOverlay); this.starterSelectContainer.add(this.shinyOverlay);
const starterContainerWindow = addWindow(this.scene, 141, 1, 178, 178); const starterContainerWindow = addWindow(this.scene, 141, 1, 178, 178);
this.starterSelectContainer.add(addWindow(this.scene, 107, 1, 34, 58)); this.starterSelectContainer.add(addWindow(this.scene, 107, 1, 34, 58));
this.starterSelectContainer.add(addWindow(this.scene, 107, 59, 34, 91)); this.starterSelectContainer.add(addWindow(this.scene, 107, 59, 34, 91));
this.starterSelectContainer.add(addWindow(this.scene, 107, 145, 34, 34, true)); this.starterSelectContainer.add(addWindow(this.scene, 107, 145, 34, 34, true));
@ -318,7 +318,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.genCursorObj.setVisible(false); this.genCursorObj.setVisible(false);
this.genCursorObj.setOrigin(0, 0); this.genCursorObj.setOrigin(0, 0);
this.starterSelectContainer.add(this.genCursorObj); this.starterSelectContainer.add(this.genCursorObj);
this.valueLimitLabel = addTextObject(this.scene, 124, 150, '0/10', TextStyle.TOOLTIP_CONTENT); this.valueLimitLabel = addTextObject(this.scene, 124, 150, '0/10', TextStyle.TOOLTIP_CONTENT);
this.valueLimitLabel.setOrigin(0.5, 0); this.valueLimitLabel.setOrigin(0.5, 0);
this.starterSelectContainer.add(this.valueLimitLabel); this.starterSelectContainer.add(this.valueLimitLabel);
@ -333,7 +333,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterSelectContainer.add(this.startCursorObj); this.starterSelectContainer.add(this.startCursorObj);
const starterSpecies: Species[] = []; const starterSpecies: Species[] = [];
for (let g = 0; g < this.starterSelectGenIconContainers.length; g++) { for (let g = 0; g < this.starterSelectGenIconContainers.length; g++) {
let s = 0; let s = 0;
this.genSpecies.push([]); this.genSpecies.push([]);
@ -498,7 +498,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const eggMovesLabel = addTextObject(this.scene, -46, 0, 'Egg Moves', TextStyle.WINDOW_ALT); const eggMovesLabel = addTextObject(this.scene, -46, 0, 'Egg Moves', TextStyle.WINDOW_ALT);
eggMovesLabel.setOrigin(0.5, 0); eggMovesLabel.setOrigin(0.5, 0);
this.pokemonEggMovesContainer.add(eggMovesLabel); this.pokemonEggMovesContainer.add(eggMovesLabel);
for (let m = 0; m < 4; m++) { for (let m = 0; m < 4; m++) {
@ -552,7 +552,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
species = getPokemonSpecies(randomSpeciesId); species = getPokemonSpecies(randomSpeciesId);
pokerusCursor = this.genSpecies[species.generation - 1].indexOf(species); pokerusCursor = this.genSpecies[species.generation - 1].indexOf(species);
}; };
let dupe = false; let dupe = false;
do { do {
@ -1049,7 +1049,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
} }
} }
} }
if (success) if (success)
ui.playSelect(); ui.playSelect();
else if (error) else if (error)
@ -1086,7 +1086,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.scene.gameData.starterData[speciesId].moveset = this.starterMoveset.slice(0) as StarterMoveset; this.scene.gameData.starterData[speciesId].moveset = this.starterMoveset.slice(0) as StarterMoveset;
this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined, false); this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined, false);
} }
updateInstructions(): void { updateInstructions(): void {
let instructionLines = [ ]; let instructionLines = [ ];
let cycleInstructionLines = []; let cycleInstructionLines = [];
@ -1212,7 +1212,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
setGenMode(genMode: boolean): boolean { setGenMode(genMode: boolean): boolean {
this.genCursorObj.setVisible(genMode && !this.startCursorObj.visible); this.genCursorObj.setVisible(genMode && !this.startCursorObj.visible);
this.cursorObj.setVisible(!genMode && !this.startCursorObj.visible); this.cursorObj.setVisible(!genMode && !this.startCursorObj.visible);
if (genMode !== this.genMode) { if (genMode !== this.genMode) {
this.genMode = genMode; this.genMode = genMode;
@ -1311,7 +1311,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species);
const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species);
props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr);
this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature); this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature);
} }
@ -1319,7 +1319,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.setTypeIcons(speciesForm.type1, speciesForm.type2); this.setTypeIcons(speciesForm.type1, speciesForm.type2);
this.pokemonSprite.clearTint(); this.pokemonSprite.clearTint();
if (this.pokerusCursors.find((cursor: integer, i: integer) => cursor === this.cursor && this.pokerusGens[i] === this.genCursor)) if (this.pokerusCursors.find((cursor: integer, i: integer) => cursor === this.cursor && this.pokerusGens[i] === this.getGenCursorWithScroll()))
handleTutorial(this.scene, Tutorial.Pokerus); handleTutorial(this.scene, Tutorial.Pokerus);
} else { } else {
this.pokemonGrowthRateText.setText(''); this.pokemonGrowthRateText.setText('');
@ -1341,7 +1341,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species);
const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species);
const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr);
this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature, true); this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature, true);
this.pokemonSprite.setTint(0x808080); this.pokemonSprite.setTint(0x808080);
} }
@ -1507,7 +1507,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.speciesStarterMoves.push(speciesEggMoves[species.speciesId][em]); this.speciesStarterMoves.push(speciesEggMoves[species.speciesId][em]);
} }
} }
const speciesMoveData = this.scene.gameData.starterData[species.speciesId].moveset; const speciesMoveData = this.scene.gameData.starterData[species.speciesId].moveset;
let moveData: StarterMoveset = speciesMoveData let moveData: StarterMoveset = speciesMoveData
? Array.isArray(speciesMoveData) ? Array.isArray(speciesMoveData)
@ -1696,7 +1696,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.statsContainer.updateIvs(null); this.statsContainer.updateIvs(null);
} }
} }
showStats(): void { showStats(): void {
if (!this.speciesStarterDexEntry) if (!this.speciesStarterDexEntry)
return; return;

View File

@ -364,9 +364,16 @@ export default class SummaryUiHandler extends UiHandler {
case Button.LEFT: case Button.LEFT:
this.moveSelect = false; this.moveSelect = false;
this.setCursor(Page.STATS); this.setCursor(Page.STATS);
this.hideMoveEffect(); if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE){
success = true; this.hideMoveEffect();
break; this.destroyBlinkCursor();
success = true;
break;
} else {
this.hideMoveSelect();
success = true;
break;
}
} }
} }
} else { } else {
@ -426,11 +433,9 @@ export default class SummaryUiHandler extends UiHandler {
} }
setCursor(cursor: integer, overrideChanged: boolean = false): boolean { setCursor(cursor: integer, overrideChanged: boolean = false): boolean {
let changed: boolean; let changed: boolean = overrideChanged || this.moveCursor !== cursor;
if (this.moveSelect) { if (this.moveSelect) {
changed = overrideChanged || this.moveCursor !== cursor;
if (changed) {
this.moveCursor = cursor; this.moveCursor = cursor;
const selectedMove = this.getSelectedMove(); const selectedMove = this.getSelectedMove();
@ -462,7 +467,6 @@ export default class SummaryUiHandler extends UiHandler {
y: `-=${14.83 * (moveDescriptionLineCount - 3)}` y: `-=${14.83 * (moveDescriptionLineCount - 3)}`
}); });
} }
}
if (!this.moveCursorObj) { if (!this.moveCursorObj) {
this.moveCursorObj = this.scene.add.sprite(-2, 0, 'summary_moves_cursor', 'highlight'); this.moveCursorObj = this.scene.add.sprite(-2, 0, 'summary_moves_cursor', 'highlight');
@ -527,6 +531,11 @@ export default class SummaryUiHandler extends UiHandler {
this.setCursor(0, true); this.setCursor(0, true);
this.showMoveEffect(); this.showMoveEffect();
} }
else if (this.cursor===Page.MOVES) {
this.moveCursorObj = null;
this.showMoveSelect();
this.showMoveEffect();
}
} }
else else
this.summaryPageTransitionContainer.x -= 214; this.summaryPageTransitionContainer.x -= 214;
@ -871,6 +880,12 @@ export default class SummaryUiHandler extends UiHandler {
this.moveSelect = false; this.moveSelect = false;
this.extraMoveRowContainer.setVisible(false); this.extraMoveRowContainer.setVisible(false);
this.moveDescriptionText.setText(''); this.moveDescriptionText.setText('');
this.destroyBlinkCursor();
this.hideMoveEffect();
}
destroyBlinkCursor(){
if (this.moveCursorBlinkTimer) { if (this.moveCursorBlinkTimer) {
this.moveCursorBlinkTimer.destroy(); this.moveCursorBlinkTimer.destroy();
this.moveCursorBlinkTimer = null; this.moveCursorBlinkTimer = null;
@ -883,8 +898,6 @@ export default class SummaryUiHandler extends UiHandler {
this.selectedMoveCursorObj.destroy(); this.selectedMoveCursorObj.destroy();
this.selectedMoveCursorObj = null; this.selectedMoveCursorObj = null;
} }
this.hideMoveEffect();
} }
showMoveEffect(instant?: boolean) { showMoveEffect(instant?: boolean) {

View File

@ -5,6 +5,7 @@ import { Mode } from "./ui";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject } from "./text";
import { battleCountSplashMessage, splashMessages } from "../data/splash-messages"; import { battleCountSplashMessage, splashMessages } from "../data/splash-messages";
import i18next from "i18next";
export default class TitleUiHandler extends OptionSelectUiHandler { export default class TitleUiHandler extends OptionSelectUiHandler {
private titleContainer: Phaser.GameObjects.Container; private titleContainer: Phaser.GameObjects.Container;
@ -37,7 +38,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
this.titleContainer.add(this.dailyRunScoreboard); this.titleContainer.add(this.dailyRunScoreboard);
this.playerCountLabel = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 90, '? Players Online', TextStyle.MESSAGE, { fontSize: '54px' }); this.playerCountLabel = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 90, `? ${i18next.t("menu:playersOnline")}`, TextStyle.MESSAGE, { fontSize: '54px' });
this.playerCountLabel.setOrigin(1, 0); this.playerCountLabel.setOrigin(1, 0);
this.titleContainer.add(this.playerCountLabel); this.titleContainer.add(this.playerCountLabel);
@ -61,7 +62,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
Utils.apiFetch(`game/titlestats`) Utils.apiFetch(`game/titlestats`)
.then(request => request.json()) .then(request => request.json())
.then(stats => { .then(stats => {
this.playerCountLabel.setText(`${stats.playerCount} Players Online`); this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
if (this.splashMessage === battleCountSplashMessage) if (this.splashMessage === battleCountSplashMessage)
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US'))); this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
}); });