Compare commits

...

17 Commits

Author SHA1 Message Date
Flashfyre
cd1684180f Merge branch 'main' into nuzlocke-mode 2024-05-05 00:04:18 -04:00
Flashfyre
5d82a1538c Add various missing variant sprites and icons 2024-05-04 23:33:45 -04:00
Benjamin Odom
daa6e3b3a8
Prevent Fusion Status Errors +Fix Double Battle Issue (#472)
* Reapply "Prevent Fusing Status Errors (#465)"

This reverts commit 18a1c152c0.

* Update phases.ts
2024-05-04 22:16:59 -05:00
Alessandro Bruzzese
41f9420c90
Added Italian translations for ability.ts and other element (#471) 2024-05-04 21:00:28 -05:00
Madmadness65
18a1c152c0 Revert "Prevent Fusing Status Errors (#465)"
This reverts commit 68eca464f7.
2024-05-04 20:50:48 -05:00
Madi Simpson
96d7fdd3f9
Implement Water Shuriken Battle Bond condition (#466)
* moves: water shuriken hits 3x 20bp in ash greninja forme

* moves: remove fusion checks
2024-05-04 20:50:12 -05:00
Madi Simpson
2c003854e9
terrain: psychic terrain doesn't block priority moves on the user's side (#470) 2024-05-04 20:45:37 -05:00
Benjamin Odom
68eca464f7
Prevent Fusing Status Errors (#465) 2024-05-04 20:37:31 -05:00
Benjamin Odom
d170aeeab6
Updated Learnset of Gen2 to Indigo Disc (#469)
* Updated Learnset of Gen1 to Indigo Disc

Not many changes here for how much time it takes to comb through, but here it is.

Only notable change is Power-Up Punch got removed this gen so it had to be removed from Hitmonchan's learnset. Are we okay with this change? If so, this is good to go for Gen 1.

* Updated Learnset of Gen2 to Indigo Disc

Notable changes:

Porygon 2 loses Magic Coat with no replacement.

Ho-oh loses Burn Up but gains Overheat.

The rest seems better or neutral.
2024-05-04 20:27:01 -05:00
Madmadness65
1792b98608 Implement Genesect's forms & Techno Blast
Genesect's Drive forms does not change it's typing, only Techno Blast's type.
2024-05-04 19:45:07 -05:00
Madi Simpson
6151ec0e49
modifiers: pp up/max now also shows pp (#467) 2024-05-04 19:31:25 -05:00
Madi Simpson
b2c74cfc90
Implement Opportunist (#460)
* abilities: implement opportunist

* abilities: make it not infinitely loop like a dummy

* abilities: properly ignore only opportunist on opportunist boosts

* abilities: rename some things to make a bit more sense
2024-05-04 18:38:53 -05:00
Madmadness65
4e0bf8f5a1 Adjust Tyrogue egg move
Mach Punch was unnecessary, as Hitmonchan gets it via level up. This provides a good setup option for all three evolutions.
2024-05-04 18:37:04 -05:00
Akuma-Reiki
92fb8b715e
Added Candy Progress UI (#463)
* Added Candy Progress UI

* GetRootSpecies rather than colors of current Species
2024-05-04 18:29:48 -04:00
LaukkaE
620a92aace
Bugfix Tickle, Tearful Look, Decorate (#464) 2024-05-04 17:28:15 -05:00
nrawicz
cd7de10722
Expanding force hotfix (#459)
* Expanding Force Implementation

Added target change attribute based on terrain

* Class change I guess

* Expanding Force Implementation

Added target change attribute based on terrain

Class change I guess

Squashed weird split commit

* Fixed removed commits

My bad

* ACTUALLY fixed removed commits

* Expanding Force Hotfix

Fixes a bug where Expanding Force would not act as a multi-target move in the MoveEffectPhase while in psychic terrain
2024-05-04 13:28:44 -05:00
Benjamin Odom
f53c699d04 Updated Learnset of Gen1 to Indigo Disc
Not many changes here for how much time it takes to comb through, but here it is.

Only notable change is Power-Up Punch got removed this gen so it had to be removed from Hitmonchan's learnset. Are we okay with this change? If so, this is good to go for Gen 1.
2024-05-04 13:43:07 -04:00
115 changed files with 14999 additions and 6892 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 771 B

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 728 B

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

View File

@ -1,5 +1,5 @@
{ {
"0": { "1": {
"424284": "6b1524", "424284": "6b1524",
"7384ad": "a53038", "7384ad": "a53038",
"d6d6ff": "f28566", "d6d6ff": "f28566",

View File

@ -1,7 +1,7 @@
{ {
"29": [ "29": [
1,
0, 0,
1,
1 1
], ],
"30": [ "30": [
@ -2991,6 +2991,16 @@
1, 1,
1 1
], ],
"306-mega": [
1,
1,
1
],
"308-mega": [
0,
1,
1
],
"310-mega": [ "310-mega": [
0, 0,
1, 1,
@ -3116,6 +3126,11 @@
1, 1,
1 1
], ],
"747": [
0,
1,
1
],
"748": [ "748": [
0, 0,
1, 1,
@ -3196,6 +3211,16 @@
1, 1,
1 1
], ],
"850": [
0,
1,
1
],
"851": [
0,
1,
1
],
"856": [ "856": [
0, 0,
1, 1,
@ -3453,6 +3478,16 @@
1, 1,
1 1
], ],
"306-mega": [
1,
1,
1
],
"308-mega": [
0,
1,
1
],
"310-mega": [ "310-mega": [
0, 0,
1, 1,
@ -3578,6 +3613,11 @@
1, 1,
1 1
], ],
"747": [
0,
2,
2
],
"748": [ "748": [
0, 0,
1, 1,
@ -3658,6 +3698,16 @@
1, 1,
1 1
], ],
"850": [
0,
1,
1
],
"851": [
0,
1,
1
],
"856": [ "856": [
0, 0,
1, 1,

View File

@ -0,0 +1,47 @@
{
"0": {
"000000": "101010",
"5a5a62": "4b382a",
"ffffff": "fff2e5",
"cdcdcd": "cbc4a2",
"6a6a6a": "224228",
"52524a": "15321e",
"8b8b8b": "3e6244",
"838394": "a48d76",
"a4a4ac": "bca88c",
"6abdff": "ff78fa",
"acacac": "69ad6c",
"9c3141": "9c3141",
"de5252": "de5252"
},
"1": {
"000000": "101010",
"5a5a62": "2b265d",
"ffffff": "cdd9fa",
"cdcdcd": "91a1e3",
"6a6a6a": "6e1e26",
"52524a": "47121b",
"8b8b8b": "8b312e",
"838394": "3d3c8c",
"a4a4ac": "686dc0",
"6abdff": "ffcf47",
"acacac": "d4857c",
"9c3141": "bc2d51",
"de5252": "de5291"
},
"2": {
"000000": "101010",
"5a5a62": "722f15",
"ffffff": "ffcc7d",
"cdcdcd": "d48e3c",
"6a6a6a": "1d365e",
"52524a": "0e213a",
"8b8b8b": "385594",
"838394": "833d19",
"a4a4ac": "a45f34",
"6abdff": "2aebcf",
"acacac": "7d95bf",
"9c3141": "9c3141",
"de5252": "de5252"
}
}

View File

@ -0,0 +1,36 @@
{
"1": {
"aca4ac": "a58291",
"52414a": "432641",
"ffffff": "fff4db",
"000000": "101010",
"83414a": "59141d",
"e6738b": "a53835",
"ee9ca4": "a53835",
"b44a5a": "83272c",
"c5c5c5": "b5969a",
"a47329": "722966",
"f6de83": "ee9bd5",
"eebd5a": "ce5cb6",
"dedede": "e0cdd9",
"0a7ba2": "efa360",
"45bade": "efa360"
},
"2": {
"aca4ac": "6c7d9e",
"52414a": "1f344a",
"ffffff": "c4dff1",
"000000": "101010",
"83414a": "461f5d",
"e6738b": "7d5187",
"ee9ca4": "7d5187",
"b44a5a": "633971",
"c5c5c5": "8aacd2",
"a47329": "205a9e",
"f6de83": "5abbef",
"eebd5a": "3a8dca",
"dedede": "c4dff1",
"0a7ba2": "3dc7b6",
"45bade": "3dc7b6"
}
}

View File

@ -0,0 +1,30 @@
{
"1": {
"b67e32": "614da4",
"6f3878": "9b6459",
"f3e07c": "e3e2ff",
"b687bc": "edd5ca",
"d1ac1b": "aca5f3",
"8d5b9e": "d29784",
"070707": "101010",
"394f7e": "490a26",
"d7a8d3": "a21f90",
"6291b3": "b24b34",
"9fd5d2": "e07b53",
"ffffff": "fdfdfd"
},
"2": {
"b67e32": "9f4354",
"6f3878": "113c3a",
"f3e07c": "ffebed",
"b687bc": "2b6157",
"d1ac1b": "efa2ad",
"8d5b9e": "1c524b",
"070707": "101010",
"394f7e": "186443",
"d7a8d3": "ff3f5a",
"6291b3": "359d5d",
"9fd5d2": "5bd97f",
"ffffff": "fdfdfd"
}
}

View File

@ -0,0 +1,32 @@
{
"1": {
"2f1610": "2f1610",
"804a3e": "59365d",
"bf3922": "117956",
"101010": "101010",
"ff5839": "35c36c",
"5b2f26": "36203c",
"681607": "024f2d",
"f77c42": "89fbad",
"f89e08": "67ef9c",
"ff836c": "5ff58e",
"ffd901": "c8ffcc",
"be5409": "117956",
"fbfbfb": "fbfbfb"
},
"2": {
"2f1610": "2f1610",
"804a3e": "475294",
"bf3922": "ae1165",
"101010": "101010",
"ff5839": "d73981",
"5b2f26": "36426c",
"681607": "68063c",
"f77c42": "f77c42",
"f89e08": "f89e08",
"ff836c": "ff836c",
"ffd901": "ffc143",
"be5409": "be5409",
"fbfbfb": "fbfbfb"
}
}

View File

@ -0,0 +1,36 @@
{
"1": {
"be5409": "017336",
"f89e08": "67ef9c",
"ffd901": "c8ffcc",
"bf3922": "1a8987",
"101010": "101010",
"2f1610": "24122b",
"5b2f26": "503154",
"804a3e": "714272",
"681607": "0a5660",
"ff5839": "35c3a8",
"b96f5d": "ad58ab",
"941528": "005f35",
"fbfbfb": "fbfbfb",
"42221c": "36203c",
"000000": "101010"
},
"2": {
"be5409": "890f52",
"f89e08": "f36d73",
"ffd901": "ffc143",
"bf3922": "ae1165",
"101010": "101010",
"2f1610": "121439",
"5b2f26": "36426c",
"804a3e": "475294",
"681607": "6e0442",
"ff5839": "d73981",
"b96f5d": "7866cb",
"941528": "941528",
"fbfbfb": "fbfbfb",
"42221c": "222957",
"000000": "101010"
}
}

View File

@ -0,0 +1,38 @@
{
"0": {
"393939": "132c1b",
"000000": "101010",
"838394": "a48d76",
"6a6a6a": "325537",
"202029": "131d17",
"5a5a62": "735c4a",
"ffffff": "fff2e5",
"52524a": "224228",
"cdcdcd": "cbc4a2",
"a4a4ac": "b8a88a"
},
"1": {
"393939": "47121b",
"000000": "101010",
"838394": "686dc0",
"6a6a6a": "8b312e",
"202029": "350a13",
"5a5a62": "374186",
"ffffff": "cdd9fa",
"52524a": "6e1e26",
"cdcdcd": "a5b7ed",
"a4a4ac": "91a1e3"
},
"2": {
"393939": "1d365e",
"000000": "101010",
"838394": "a45f34",
"6a6a6a": "385594",
"202029": "0e213a",
"5a5a62": "7a3a1a",
"ffffff": "f1b25e",
"52524a": "385594",
"cdcdcd": "dd9f57",
"a4a4ac": "c18239"
}
}

View File

@ -0,0 +1,34 @@
{
"1": {
"101010": "101010",
"83414a": "59141d",
"e6738b": "a53835",
"b44a5a": "83272c",
"8b838b": "5a4357",
"bdafad": "a5829d",
"52414a": "432641",
"e7e3e7": "e0cdd9",
"f9f8f7": "f9f8f7",
"a47329": "722966",
"eebd5a": "a25793",
"f6de83": "ee9bd5",
"164b5d": "a6571b",
"42a2bd": "efa360"
},
"2": {
"101010": "101010",
"83414a": "461f5d",
"e6738b": "7d5187",
"b44a5a": "633971",
"8b838b": "445a7e",
"bdafad": "7988a6",
"52414a": "1f344a",
"e7e3e7": "abb7c6",
"f9f8f7": "c4dff1",
"a47329": "285181",
"eebd5a": "4983ad",
"f6de83": "5abbef",
"164b5d": "107270",
"42a2bd": "3dc7b6"
}
}

View File

@ -0,0 +1,230 @@
{
"textures": [
{
"image": "747_2.png",
"format": "RGBA8888",
"size": {
"w": 147,
"h": 147
},
"scale": 1,
"frames": [
{
"filename": "0005.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 62,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 49
},
"frame": {
"x": 0,
"y": 49,
"w": 61,
"h": 49
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 49
},
"frame": {
"x": 0,
"y": 49,
"w": 61,
"h": 49
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 49
},
"frame": {
"x": 0,
"y": 98,
"w": 59,
"h": 49
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 49
},
"frame": {
"x": 0,
"y": 98,
"w": 59,
"h": 49
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 2,
"y": 0,
"w": 57,
"h": 49
},
"frame": {
"x": 59,
"y": 98,
"w": 57,
"h": 49
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 2,
"y": 0,
"w": 57,
"h": 49
},
"frame": {
"x": 59,
"y": 98,
"w": 57,
"h": 49
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 3,
"y": 0,
"w": 55,
"h": 49
},
"frame": {
"x": 61,
"y": 49,
"w": 55,
"h": 49
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:4319e2c59a85fcb72ddcdb0b4089ac8b:29cb568870b0231298c87d5d39f7b933:b26f7254994561969f00f765318acf1c$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -0,0 +1,230 @@
{
"textures": [
{
"image": "747_3.png",
"format": "RGBA8888",
"size": {
"w": 147,
"h": 147
},
"scale": 1,
"frames": [
{
"filename": "0005.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 49
},
"frame": {
"x": 62,
"y": 0,
"w": 62,
"h": 49
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 49
},
"frame": {
"x": 0,
"y": 49,
"w": 61,
"h": 49
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 49
},
"frame": {
"x": 0,
"y": 49,
"w": 61,
"h": 49
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 49
},
"frame": {
"x": 0,
"y": 98,
"w": 59,
"h": 49
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 49
},
"frame": {
"x": 0,
"y": 98,
"w": 59,
"h": 49
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 2,
"y": 0,
"w": 57,
"h": 49
},
"frame": {
"x": 59,
"y": 98,
"w": 57,
"h": 49
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 2,
"y": 0,
"w": 57,
"h": 49
},
"frame": {
"x": 59,
"y": 98,
"w": 57,
"h": 49
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 49
},
"spriteSourceSize": {
"x": 3,
"y": 0,
"w": 55,
"h": 49
},
"frame": {
"x": 61,
"y": 49,
"w": 55,
"h": 49
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:4319e2c59a85fcb72ddcdb0b4089ac8b:29cb568870b0231298c87d5d39f7b933:b26f7254994561969f00f765318acf1c$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -1,11 +1,11 @@
{ {
"1": { "1": {
"943732": "490a3c", "943732": "5c075b",
"101010": "101010", "101010": "101010",
"f28c4f": "a21f90", "f28c4f": "c639bd",
"e25025": "91138c", "e25025": "a21f90",
"93d1d7": "df7b52", "93d1d7": "df7b52",
"3a3f6d": "462952", "3a3f6d": "171539",
"6f97c4": "be583d", "6f97c4": "be583d",
"711a6a": "81463e", "711a6a": "81463e",
"455b85": "892e20", "455b85": "892e20",
@ -15,12 +15,12 @@
"171539": "171539" "171539": "171539"
}, },
"2": { "2": {
"943732": "c30e49", "943732": "ac063c",
"101010": "101010", "101010": "101010",
"f28c4f": "ff3f5a", "f28c4f": "ff3f5a",
"e25025": "e12350", "e25025": "e12350",
"93d1d7": "5bd97f", "93d1d7": "5bd97f",
"3a3f6d": "862916", "3a3f6d": "490c06",
"6f97c4": "359d5d", "6f97c4": "359d5d",
"711a6a": "082b29", "711a6a": "082b29",
"455b85": "186443", "455b85": "186443",

View File

@ -0,0 +1,28 @@
{
"1": {
"bf3922": "35c3a8",
"8d3123": "178573",
"5b2f26": "59365d",
"ff5839": "79f1d2",
"804a3e": "8f4b94",
"681607": "065b58",
"42221c": "36203c",
"2f1610": "24122b",
"101010": "101010",
"be5409": "25a96a",
"f89e08": "a3ffb9"
},
"2": {
"bf3922": "d73981",
"8d3123": "902962",
"5b2f26": "36426c",
"ff5839": "f360a3",
"804a3e": "7866cb",
"681607": "4a1036",
"42221c": "222957",
"2f1610": "121439",
"101010": "101010",
"be5409": "be5409",
"f89e08": "f89e08"
}
}

View File

@ -0,0 +1,34 @@
{
"1": {
"be5409": "017336",
"f89e08": "67ef9c",
"ffd901": "c8ffcc",
"5b2f26": "59365d",
"b96f5d": "d695d5",
"804a3e": "924a91",
"8d3123": "056a3b",
"bf3922": "0c8c48",
"ff5839": "35c36c",
"42221c": "36203c",
"2f1610": "24122b",
"681607": "024f2d",
"101010": "101010",
"941528": "005f35"
},
"2": {
"be5409": "be5409",
"f89e08": "f36d73",
"ffd901": "ffc143",
"5b2f26": "36426c",
"b96f5d": "7866cb",
"804a3e": "475294",
"8d3123": "ae1165",
"bf3922": "d73981",
"ff5839": "ff6970",
"42221c": "222957",
"2f1610": "121439",
"681607": "6e0442",
"101010": "101010",
"941528": "941528"
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

BIN
public/images/ui/candy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

View File

@ -3,7 +3,7 @@
"short_name": "PokéRogue", "short_name": "PokéRogue",
"description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.", "description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.",
"scope": "/", "scope": "/",
"start_url": "https://pokerogue.net", "start_url": "/",
"display": "fullscreen", "display": "fullscreen",
"background_color": "#8c8c8c", "background_color": "#8c8c8c",
"theme_color": "#8c8c8c", "theme_color": "#8c8c8c",

View File

@ -2104,6 +2104,13 @@ export class StatChangeMultiplierAbAttr extends AbAttr {
} }
} }
export class StatChangeCopyAbAttr extends AbAttr {
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise<boolean> {
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as integer), true, false, false));
return true;
}
}
export class BypassBurnDamageReductionAbAttr extends AbAttr { export class BypassBurnDamageReductionAbAttr extends AbAttr {
constructor() { constructor() {
super(false); super(false);
@ -3217,8 +3224,7 @@ export function initAbilities() {
.attr(UncopiableAbilityAbAttr) .attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr) .attr(UnswappableAbilityAbAttr)
.attr(UnsuppressableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr)
.attr(NoFusionAbilityAbAttr) .attr(NoFusionAbilityAbAttr),
.partial(),
new Ability(Abilities.POWER_CONSTRUCT, 7) // TODO: 10% Power Construct Zygarde isn't accounted for yet. If changed, update Zygarde's getSpeciesFormIndex entry accordingly 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(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2)
.attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2)
@ -3484,7 +3490,7 @@ export function initAbilities() {
.attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC)
.conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), BattleStatMultiplierAbAttr, BattleStat.SPATK, 4 / 3), .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), BattleStatMultiplierAbAttr, BattleStat.SPATK, 4 / 3),
new Ability(Abilities.OPPORTUNIST, 9) new Ability(Abilities.OPPORTUNIST, 9)
.unimplemented(), .attr(StatChangeCopyAbAttr),
new Ability(Abilities.CUD_CHEW, 9) new Ability(Abilities.CUD_CHEW, 9)
.unimplemented(), .unimplemented(),
new Ability(Abilities.SHARPNESS, 9) new Ability(Abilities.SHARPNESS, 9)

View File

@ -115,7 +115,7 @@ export const speciesEggMoves = {
[Species.PHANPY]: [ Moves.SHORE_UP, Moves.HEAD_SMASH, Moves.MOUNTAIN_GALE, Moves.VOLT_TACKLE ], [Species.PHANPY]: [ Moves.SHORE_UP, Moves.HEAD_SMASH, Moves.MOUNTAIN_GALE, Moves.VOLT_TACKLE ],
[Species.STANTLER]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.BULK_UP, Moves.HEAD_CHARGE ], [Species.STANTLER]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.BULK_UP, Moves.HEAD_CHARGE ],
[Species.SMEARGLE]: [ Moves.BATON_PASS, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.SPORE ], [Species.SMEARGLE]: [ Moves.BATON_PASS, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.SPORE ],
[Species.TYROGUE]: [ Moves.MACH_PUNCH, Moves.WICKED_TORQUE, Moves.METEOR_MASH, Moves.COLLISION_COURSE ], [Species.TYROGUE]: [ Moves.VICTORY_DANCE, Moves.WICKED_TORQUE, Moves.METEOR_MASH, Moves.COLLISION_COURSE ],
[Species.SMOOCHUM]: [ Moves.EXPANDING_FORCE, Moves.AURA_SPHERE, Moves.FREEZY_FROST, Moves.TAKE_HEART ], [Species.SMOOCHUM]: [ Moves.EXPANDING_FORCE, Moves.AURA_SPHERE, Moves.FREEZY_FROST, Moves.TAKE_HEART ],
[Species.ELEKID]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.ICE_HAMMER, Moves.PLASMA_FISTS ], [Species.ELEKID]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.ICE_HAMMER, Moves.PLASMA_FISTS ],
[Species.MAGBY]: [ Moves.STORED_POWER, Moves.EARTH_POWER, Moves.ARMOR_CANNON, Moves.FLEUR_CANNON ], [Species.MAGBY]: [ Moves.STORED_POWER, Moves.EARTH_POWER, Moves.ARMOR_CANNON, Moves.FLEUR_CANNON ],

View File

@ -756,7 +756,7 @@ export enum MultiHitType {
_2_TO_5, _2_TO_5,
_3, _3,
_3_INCR, _3_INCR,
_1_TO_10 _1_TO_10,
} }
export class HealAttr extends MoveEffectAttr { export class HealAttr extends MoveEffectAttr {
@ -912,7 +912,9 @@ export class MultiHitAttr extends MoveAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
let hitTimes: integer; let hitTimes: integer;
switch (this.multiHitType) { const hitType = new Utils.IntegerHolder(this.multiHitType)
applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType)
switch (hitType.value) {
case MultiHitType._2_TO_5: case MultiHitType._2_TO_5:
{ {
const rand = user.randSeedInt(16); const rand = user.randSeedInt(16);
@ -975,6 +977,23 @@ export class MultiHitAttr extends MoveAttr {
} }
} }
export class ChangeMultiHitTypeAttr extends MoveAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
//const hitType = args[0] as Utils.NumberHolder;
return false;
}
}
export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) {
(args[0] as Utils.IntegerHolder).value = MultiHitType._3
return true;
}
return false;
}
}
export class StatusEffectAttr extends MoveEffectAttr { export class StatusEffectAttr extends MoveEffectAttr {
public effect: StatusEffect; public effect: StatusEffect;
public cureTurn: integer; public cureTurn: integer;
@ -2049,6 +2068,16 @@ export class KnockOffPowerAttr extends VariablePowerAttr {
} }
} }
export class WaterShurikenPowerAttr extends VariablePowerAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) {
(args[0] as Utils.IntegerHolder).value = 20
return true;
}
return false;
}
}
export class VariableAtkAttr extends MoveAttr { export class VariableAtkAttr extends MoveAttr {
constructor() { constructor() {
super(); super();
@ -2216,6 +2245,36 @@ export class VariableMoveTypeAttr extends MoveAttr {
} }
} }
export class TechnoBlastTypeAttr extends VariableMoveTypeAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.GENESECT)) {
const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies.formIndex;
const type = (args[0] as Utils.IntegerHolder);
switch (form) {
case 1: // Shock Drive
type.value = Type.ELECTRIC;
break;
case 2: // Burn Drive
type.value = Type.FIRE;
break;
case 3: // Chill Drive
type.value = Type.ICE;
break;
case 4: // Douse Drive
type.value = Type.WATER;
break;
default:
type.value = Type.NORMAL;
break;
}
return true;
}
return false;
}
}
export class AuraWheelTypeAttr extends VariableMoveTypeAttr { export class AuraWheelTypeAttr extends VariableMoveTypeAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)) { if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)) {
@ -4736,8 +4795,7 @@ export function initMoves() {
.attr(StatusEffectAttr, StatusEffect.SLEEP) .attr(StatusEffectAttr, StatusEffect.SLEEP)
.soundBased(), .soundBased(),
new StatusMove(Moves.TICKLE, Type.NORMAL, 100, 20, -1, 0, 3) new StatusMove(Moves.TICKLE, Type.NORMAL, 100, 20, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.ATK, -1) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], -1),
.attr(StatChangeAttr, BattleStat.DEF, -1),
new SelfStatusMove(Moves.COSMIC_POWER, Type.PSYCHIC, -1, 20, -1, 0, 3) new SelfStatusMove(Moves.COSMIC_POWER, Type.PSYCHIC, -1, 20, -1, 0, 3)
.attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], 1, true), .attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], 1, true),
new AttackMove(Moves.WATER_SPOUT, Type.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) new AttackMove(Moves.WATER_SPOUT, Type.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3)
@ -5334,7 +5392,7 @@ export function initMoves() {
.ballBombMove() .ballBombMove()
.target(MoveTarget.ALL_NEAR_OTHERS), .target(MoveTarget.ALL_NEAR_OTHERS),
new AttackMove(Moves.TECHNO_BLAST, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) new AttackMove(Moves.TECHNO_BLAST, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5)
.partial(), .attr(TechnoBlastTypeAttr),
new AttackMove(Moves.RELIC_SONG, Type.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) new AttackMove(Moves.RELIC_SONG, Type.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5)
.attr(StatusEffectAttr, StatusEffect.SLEEP) .attr(StatusEffectAttr, StatusEffect.SLEEP)
.soundBased() .soundBased()
@ -5473,7 +5531,9 @@ export function initMoves() {
new AttackMove(Moves.HYPERSPACE_HOLE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) new AttackMove(Moves.HYPERSPACE_HOLE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6)
.ignoresProtect(), .ignoresProtect(),
new AttackMove(Moves.WATER_SHURIKEN, Type.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) new AttackMove(Moves.WATER_SHURIKEN, Type.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6)
.attr(MultiHitAttr), .attr(MultiHitAttr)
.attr(WaterShurikenPowerAttr)
.attr(WaterShurikenMultiHitTypeAttr),
new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6)
.attr(StatChangeAttr, BattleStat.SPATK, -1), .attr(StatChangeAttr, BattleStat.SPATK, -1),
new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6) new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6)
@ -5777,8 +5837,7 @@ export function initMoves() {
.ignoresAbilities() .ignoresAbilities()
.partial(), .partial(),
new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, 100, 0, 7) new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, 100, 0, 7)
.attr(StatChangeAttr, BattleStat.ATK, -1) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], -1),
.attr(StatChangeAttr, BattleStat.SPATK, -1),
new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7)
.attr(FlinchAttr), .attr(FlinchAttr),
new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7)
@ -5957,8 +6016,7 @@ export function initMoves() {
new AttackMove(Moves.BODY_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) new AttackMove(Moves.BODY_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8)
.attr(DefAtkAttr), .attr(DefAtkAttr),
new StatusMove(Moves.DECORATE, Type.FAIRY, -1, 15, 100, 0, 8) new StatusMove(Moves.DECORATE, Type.FAIRY, -1, 15, 100, 0, 8)
.attr(StatChangeAttr, BattleStat.ATK, 2) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2),
.attr(StatChangeAttr, BattleStat.SPATK, 2),
new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8)
.attr(StatChangeAttr, BattleStat.SPD, -1) .attr(StatChangeAttr, BattleStat.SPD, -1)
.makesContact(false), .makesContact(false),

View File

@ -82,7 +82,11 @@ export enum FormChangeItem {
SHADOW_REINS_OF_UNITY, SHADOW_REINS_OF_UNITY,
WELLSPRING_MASK, WELLSPRING_MASK,
HEARTHFLAME_MASK, HEARTHFLAME_MASK,
CORNERSTONE_MASK CORNERSTONE_MASK,
SHOCK_DRIVE,
BURN_DRIVE,
CHILL_DRIVE,
DOUSE_DRIVE
} }
export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean; export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean;
@ -542,6 +546,12 @@ 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.GENESECT]: [
new SpeciesFormChange(Species.GENESECT, '', 'shock', new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)),
new SpeciesFormChange(Species.GENESECT, '', 'burn', new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)),
new SpeciesFormChange(Species.GENESECT, '', 'chill', new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)),
new SpeciesFormChange(Species.GENESECT, '', 'douse', new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE))
],
[Species.GRENINJA]: [ [Species.GRENINJA]: [
new SpeciesFormChange(Species.GRENINJA, 'battle-bond', 'ash', new SpeciesFormChangeManualTrigger(), true), new SpeciesFormChange(Species.GRENINJA, 'battle-bond', 'ash', new SpeciesFormChangeManualTrigger(), true),
new SpeciesFormChange(Species.GRENINJA, 'ash', 'battle-bond', new SpeciesFormChangeManualTrigger(), true) new SpeciesFormChange(Species.GRENINJA, 'ash', 'battle-bond', new SpeciesFormChangeManualTrigger(), true)

View File

@ -30,7 +30,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 24, Moves.SWEET_SCENT ], [ 24, Moves.SWEET_SCENT ],
[ 27, Moves.SYNTHESIS ], [ 27, Moves.SYNTHESIS ],
[ 30, Moves.WORRY_SEED ], [ 30, Moves.WORRY_SEED ],
[ 33, Moves.DOUBLE_EDGE ], [ 33, Moves.POWER_WHIP ],
[ 36, Moves.SOLAR_BEAM ], [ 36, Moves.SOLAR_BEAM ],
], ],
[Species.IVYSAUR]: [ [Species.IVYSAUR]: [
@ -47,16 +47,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 30, Moves.SWEET_SCENT ], [ 30, Moves.SWEET_SCENT ],
[ 35, Moves.SYNTHESIS ], [ 35, Moves.SYNTHESIS ],
[ 40, Moves.WORRY_SEED ], [ 40, Moves.WORRY_SEED ],
[ 45, Moves.DOUBLE_EDGE ], [ 45, Moves.POWER_WHIP ],
[ 50, Moves.SOLAR_BEAM ], [ 50, Moves.SOLAR_BEAM ],
], ],
[Species.VENUSAUR]: [ [Species.VENUSAUR]: [
[ 0, Moves.PETAL_BLIZZARD ], [ 0, Moves.PETAL_BLIZZARD ],
[ 1, Moves.GROWTH ],
[ 1, Moves.PETAL_DANCE ],
[ 1, Moves.VINE_WHIP ], [ 1, Moves.VINE_WHIP ],
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.GROWTH ],
[ 1, Moves.PETAL_DANCE ],
[ 9, Moves.LEECH_SEED ], [ 9, Moves.LEECH_SEED ],
[ 12, Moves.RAZOR_LEAF ], [ 12, Moves.RAZOR_LEAF ],
[ 15, Moves.POISON_POWDER ], [ 15, Moves.POISON_POWDER ],
@ -66,7 +66,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 30, Moves.SWEET_SCENT ], [ 30, Moves.SWEET_SCENT ],
[ 37, Moves.SYNTHESIS ], [ 37, Moves.SYNTHESIS ],
[ 44, Moves.WORRY_SEED ], [ 44, Moves.WORRY_SEED ],
[ 51, Moves.DOUBLE_EDGE ], [ 51, Moves.POWER_WHIP ],
[ 58, Moves.SOLAR_BEAM ], [ 58, Moves.SOLAR_BEAM ],
], ],
[Species.CHARMANDER]: [ [Species.CHARMANDER]: [
@ -127,7 +127,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 27, Moves.SHELL_SMASH ], [ 27, Moves.SHELL_SMASH ],
[ 30, Moves.IRON_DEFENSE ], [ 30, Moves.IRON_DEFENSE ],
[ 33, Moves.HYDRO_PUMP ], [ 33, Moves.HYDRO_PUMP ],
[ 36, Moves.SKULL_BASH ], [ 36, Moves.WAVE_CRASH ],
], ],
[Species.WARTORTLE]: [ [Species.WARTORTLE]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -143,7 +143,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 35, Moves.SHELL_SMASH ], [ 35, Moves.SHELL_SMASH ],
[ 40, Moves.IRON_DEFENSE ], [ 40, Moves.IRON_DEFENSE ],
[ 45, Moves.HYDRO_PUMP ], [ 45, Moves.HYDRO_PUMP ],
[ 50, Moves.SKULL_BASH ], [ 50, Moves.WAVE_CRASH ],
], ],
[Species.BLASTOISE]: [ [Species.BLASTOISE]: [
[ 0, Moves.FLASH_CANNON ], [ 0, Moves.FLASH_CANNON ],
@ -160,7 +160,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 35, Moves.SHELL_SMASH ], [ 35, Moves.SHELL_SMASH ],
[ 42, Moves.IRON_DEFENSE ], [ 42, Moves.IRON_DEFENSE ],
[ 49, Moves.HYDRO_PUMP ], [ 49, Moves.HYDRO_PUMP ],
[ 56, Moves.SKULL_BASH ], [ 56, Moves.WAVE_CRASH ],
], ],
[Species.CATERPIE]: [ [Species.CATERPIE]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -341,9 +341,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 12, Moves.GLARE ], [ 12, Moves.GLARE ],
[ 17, Moves.SCREECH ], [ 17, Moves.SCREECH ],
[ 20, Moves.ACID ], [ 20, Moves.ACID ],
[ 25, Moves.SWALLOW ],
[ 25, Moves.STOCKPILE ], [ 25, Moves.STOCKPILE ],
[ 25, Moves.SPIT_UP ], [ 25, Moves.SPIT_UP ],
[ 25, Moves.SWALLOW ],
[ 28, Moves.ACID_SPRAY ], [ 28, Moves.ACID_SPRAY ],
[ 33, Moves.SLUDGE_BOMB ], [ 33, Moves.SLUDGE_BOMB ],
[ 36, Moves.GASTRO_ACID ], [ 36, Moves.GASTRO_ACID ],
@ -1780,14 +1780,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 4, Moves.DOUBLE_KICK ], [ 4, Moves.DOUBLE_KICK ],
[ 8, Moves.LOW_KICK ], [ 8, Moves.LOW_KICK ],
[ 12, Moves.ENDURE ], [ 12, Moves.ENDURE ],
[ 16, Moves.REVENGE ], [ 16, Moves.SUCKER_PUNCH ],
[ 21, Moves.WIDE_GUARD ], [ 21, Moves.WIDE_GUARD ],
[ 24, Moves.BLAZE_KICK ], [ 24, Moves.BLAZE_KICK ],
[ 28, Moves.MIND_READER ], [ 28, Moves.FEINT ],
[ 32, Moves.MEGA_KICK ], [ 32, Moves.MEGA_KICK ],
[ 36, Moves.CLOSE_COMBAT ], [ 36, Moves.CLOSE_COMBAT ],
[ 40, Moves.REVERSAL ], [ 40, Moves.REVERSAL ],
[ 44, Moves.HIGH_JUMP_KICK ], [ 44, Moves.HIGH_JUMP_KICK ],
[ 50, Moves.AXE_KICK ],
], ],
[Species.HITMONCHAN]: [ [Species.HITMONCHAN]: [
[ 0, Moves.DRAIN_PUNCH ], [ 0, Moves.DRAIN_PUNCH ],
@ -1796,16 +1797,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.FAKE_OUT ], [ 1, Moves.FAKE_OUT ],
[ 1, Moves.HELPING_HAND ], [ 1, Moves.HELPING_HAND ],
[ 1, Moves.FEINT ], [ 1, Moves.FEINT ],
[ 1, Moves.VACUUM_WAVE ],
[ 1, Moves.BULLET_PUNCH ],
[ 4, Moves.MACH_PUNCH ], [ 4, Moves.MACH_PUNCH ],
[ 8, Moves.POWER_UP_PUNCH ], [ 8, Moves.VACUUM_WAVE ],
[ 12, Moves.DETECT ], [ 12, Moves.DETECT ],
[ 16, Moves.REVENGE ], [ 16, Moves.BULLET_PUNCH ],
[ 21, Moves.QUICK_GUARD ], [ 21, Moves.QUICK_GUARD ],
[ 24, Moves.FIRE_PUNCH ],
[ 24, Moves.ICE_PUNCH ],
[ 24, Moves.THUNDER_PUNCH ], [ 24, Moves.THUNDER_PUNCH ],
[ 24, Moves.ICE_PUNCH ],
[ 24, Moves.FIRE_PUNCH ],
[ 28, Moves.AGILITY ], [ 28, Moves.AGILITY ],
[ 32, Moves.MEGA_PUNCH ], [ 32, Moves.MEGA_PUNCH ],
[ 36, Moves.CLOSE_COMBAT ], [ 36, Moves.CLOSE_COMBAT ],
@ -2598,7 +2597,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 31, Moves.LIGHT_SCREEN ], [ 31, Moves.LIGHT_SCREEN ],
[ 34, Moves.BODY_SLAM ], [ 34, Moves.BODY_SLAM ],
[ 39, Moves.SAFEGUARD ], [ 39, Moves.SAFEGUARD ],
[ 42, Moves.AROMATHERAPY ], [ 42, Moves.GIGA_DRAIN ],
[ 45, Moves.SOLAR_BEAM ], [ 45, Moves.SOLAR_BEAM ],
], ],
[Species.BAYLEEF]: [ [Species.BAYLEEF]: [
@ -2614,7 +2613,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 36, Moves.LIGHT_SCREEN ], [ 36, Moves.LIGHT_SCREEN ],
[ 40, Moves.BODY_SLAM ], [ 40, Moves.BODY_SLAM ],
[ 46, Moves.SAFEGUARD ], [ 46, Moves.SAFEGUARD ],
[ 50, Moves.AROMATHERAPY ], [ 50, Moves.GIGA_DRAIN ],
[ 54, Moves.SOLAR_BEAM ], [ 54, Moves.SOLAR_BEAM ],
], ],
[Species.MEGANIUM]: [ [Species.MEGANIUM]: [
@ -2632,7 +2631,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 40, Moves.LIGHT_SCREEN ], [ 40, Moves.LIGHT_SCREEN ],
[ 46, Moves.BODY_SLAM ], [ 46, Moves.BODY_SLAM ],
[ 54, Moves.SAFEGUARD ], [ 54, Moves.SAFEGUARD ],
[ 60, Moves.AROMATHERAPY ], [ 60, Moves.GIGA_DRAIN ],
[ 65, Moves.SOLAR_BEAM ], [ 65, Moves.SOLAR_BEAM ],
], ],
[Species.CYNDAQUIL]: [ [Species.CYNDAQUIL]: [
@ -2796,6 +2795,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 1, Moves.ECHOED_VOICE ], [ 1, Moves.ECHOED_VOICE ],
[ 9, Moves.CONFUSION ], [ 9, Moves.CONFUSION ],
[ 12, Moves.REFLECT ], [ 12, Moves.REFLECT ],
[ 15, Moves.DEFOG ],
[ 18, Moves.AIR_SLASH ], [ 18, Moves.AIR_SLASH ],
[ 23, Moves.EXTRASENSORY ], [ 23, Moves.EXTRASENSORY ],
[ 28, Moves.TAKE_DOWN ], [ 28, Moves.TAKE_DOWN ],
@ -3574,7 +3574,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 13, Moves.LICK ], [ 13, Moves.LICK ],
[ 19, Moves.HEADBUTT ], [ 19, Moves.HEADBUTT ],
[ 25, Moves.ROAR ], [ 25, Moves.ROAR ],
[ 31, Moves.RAGE ], [ 31, Moves.LAST_RESORT ],
[ 37, Moves.PLAY_ROUGH ], [ 37, Moves.PLAY_ROUGH ],
[ 43, Moves.PAYBACK ], [ 43, Moves.PAYBACK ],
[ 49, Moves.CRUNCH ], [ 49, Moves.CRUNCH ],
@ -3592,7 +3592,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 13, Moves.LICK ], [ 13, Moves.LICK ],
[ 19, Moves.HEADBUTT ], [ 19, Moves.HEADBUTT ],
[ 27, Moves.ROAR ], [ 27, Moves.ROAR ],
[ 35, Moves.RAGE ], [ 35, Moves.LAST_RESORT ],
[ 43, Moves.PLAY_ROUGH ], [ 43, Moves.PLAY_ROUGH ],
[ 51, Moves.PAYBACK ], [ 51, Moves.PAYBACK ],
[ 59, Moves.CRUNCH ], [ 59, Moves.CRUNCH ],
@ -3868,7 +3868,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 20, Moves.WING_ATTACK ], [ 20, Moves.WING_ATTACK ],
[ 24, Moves.SLASH ], [ 24, Moves.SLASH ],
[ 28, Moves.STEEL_WING ], [ 28, Moves.STEEL_WING ],
[ 32, Moves.AUTOTOMIZE ], [ 32, Moves.PAYBACK ],
[ 36, Moves.DRILL_PECK ], [ 36, Moves.DRILL_PECK ],
[ 40, Moves.METAL_SOUND ], [ 40, Moves.METAL_SOUND ],
[ 44, Moves.SPIKES ], [ 44, Moves.SPIKES ],
@ -3923,11 +3923,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 20, Moves.DRAGON_BREATH ], [ 20, Moves.DRAGON_BREATH ],
[ 25, Moves.BUBBLE_BEAM ], [ 25, Moves.BUBBLE_BEAM ],
[ 30, Moves.AGILITY ], [ 30, Moves.AGILITY ],
[ 37, Moves.LASER_FOCUS ], [ 37, Moves.WATER_PULSE ],
[ 44, Moves.DRAGON_PULSE ], [ 44, Moves.DRAGON_PULSE ],
[ 51, Moves.HYDRO_PUMP ], [ 51, Moves.HYDRO_PUMP ],
[ 58, Moves.DRAGON_DANCE ], [ 58, Moves.DRAGON_DANCE ],
[ 65, Moves.RAIN_DANCE ], [ 65, Moves.RAIN_DANCE ],
[ 72, Moves.WAVE_CRASH ],
], ],
[Species.PHANPY]: [ [Species.PHANPY]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -3974,10 +3975,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 35, Moves.RECOVER ], [ 35, Moves.RECOVER ],
[ 40, Moves.DISCHARGE ], [ 40, Moves.DISCHARGE ],
[ 45, Moves.TRI_ATTACK ], [ 45, Moves.TRI_ATTACK ],
[ 50, Moves.MAGIC_COAT ], [ 50, Moves.LOCK_ON ],
[ 55, Moves.LOCK_ON ], [ 55, Moves.ZAP_CANNON ],
[ 60, Moves.ZAP_CANNON ], [ 60, Moves.HYPER_BEAM ],
[ 65, Moves.HYPER_BEAM ],
], ],
[Species.STANTLER]: [ [Species.STANTLER]: [
[ 1, Moves.TACKLE ], [ 1, Moves.TACKLE ],
@ -4268,7 +4268,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
[ 72, Moves.FIRE_BLAST ], [ 72, Moves.FIRE_BLAST ],
[ 81, Moves.FUTURE_SIGHT ], [ 81, Moves.FUTURE_SIGHT ],
[ 90, Moves.SKY_ATTACK ], [ 90, Moves.SKY_ATTACK ],
[ 99, Moves.BURN_UP ], [ 99, Moves.OVERHEAT ],
], ],
[Species.CELEBI]: [ [Species.CELEBI]: [
[ 1, Moves.CONFUSION ], [ 1, Moves.CONFUSION ],

View File

@ -135,3 +135,43 @@ export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect):
return 1; return 1;
} }
/**
* Returns a random non-volatile StatusEffect
*/
export function generateRandomStatusEffect(): StatusEffect {
return Utils.randIntRange(1, 6);
}
/**
* Returns a random non-volatile StatusEffect between the two provided
* @param statusEffectA The first StatusEffect
* @param statusEffectA The second StatusEffect
*/
export function getRandomStatusEffect(statusEffectA: StatusEffect, statusEffectB: StatusEffect): StatusEffect {
if (statusEffectA === StatusEffect.NONE || statusEffectA === StatusEffect.FAINT) {
return statusEffectB;
}
if (statusEffectB === StatusEffect.NONE || statusEffectB === StatusEffect.FAINT) {
return statusEffectA;
}
return Utils.randIntRange(0, 2) ? statusEffectA : statusEffectB;
}
/**
* Returns a random non-volatile StatusEffect between the two provided
* @param statusA The first Status
* @param statusB The second Status
*/
export function getRandomStatus(statusA: Status, statusB: Status): Status {
if (statusA === undefined || statusA.effect === StatusEffect.NONE || statusA.effect === StatusEffect.FAINT) {
return statusB;
}
if (statusB === undefined || statusB.effect === StatusEffect.NONE || statusB.effect === StatusEffect.FAINT) {
return statusA;
}
return Utils.randIntRange(0, 2) ? statusA : statusB;
}

View File

@ -4,6 +4,7 @@ import { Type } from "./type";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { IncrementMovePriorityAbAttr, applyAbAttrs } from "./ability"; import { IncrementMovePriorityAbAttr, applyAbAttrs } from "./ability";
import { ProtectAttr } from "./move"; import { ProtectAttr } from "./move";
import { BattlerIndex } from "#app/battle.js";
export enum TerrainType { export enum TerrainType {
NONE, NONE,
@ -48,13 +49,13 @@ export class Terrain {
return 1; return 1;
} }
isMoveTerrainCancelled(user: Pokemon, move: Move): boolean { isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean {
switch (this.terrainType) { switch (this.terrainType) {
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
if (!move.getAttrs(ProtectAttr).length) { if (!move.getAttrs(ProtectAttr).length) {
const priority = new Utils.IntegerHolder(move.priority); const priority = new Utils.IntegerHolder(move.priority);
applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority); applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority);
return priority.value > 0; return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex())).length > 0;
} }
} }

View File

@ -336,8 +336,8 @@ export class Arena {
return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move); return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move);
} }
isMoveTerrainCancelled(user: Pokemon, move: Move) { isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move) {
return this.terrain && this.terrain.isMoveTerrainCancelled(user, move); return this.terrain && this.terrain.isMoveTerrainCancelled(user, targets, move);
} }
getTerrainType() : TerrainType { getTerrainType() : TerrainType {

View File

@ -14,7 +14,7 @@ import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBooste
import { PokeballType } from '../data/pokeball'; import { PokeballType } from '../data/pokeball';
import { Gender } from '../data/gender'; import { Gender } from '../data/gender';
import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims'; import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims';
import { Status, StatusEffect } from '../data/status-effect'; import { Status, StatusEffect, getRandomStatus } from '../data/status-effect';
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from '../data/pokemon-evolutions'; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from '../data/pokemon-evolutions';
import { reverseCompatibleTms, tmSpecies } from '../data/tms'; import { reverseCompatibleTms, tmSpecies } from '../data/tms';
import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase } from '../phases'; import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase } from '../phases';
@ -2551,6 +2551,10 @@ export class PlayerPokemon extends Pokemon {
this.generateCompatibleTms(); this.generateCompatibleTms();
} }
/**
* Returns a Promise to fuse two PlayerPokemon together
* @param pokemon The PlayerPokemon to fuse to this one
*/
fuse(pokemon: PlayerPokemon): Promise<void> { fuse(pokemon: PlayerPokemon): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.fusionSpecies = pokemon.species; this.fusionSpecies = pokemon.species;
@ -2564,8 +2568,25 @@ export class PlayerPokemon extends Pokemon {
this.scene.validateAchv(achvs.SPLICE); this.scene.validateAchv(achvs.SPLICE);
this.scene.gameData.gameStats.pokemonFused++; this.scene.gameData.gameStats.pokemonFused++;
// Store the average HP% that each Pokemon has
const newHpPercent = ((pokemon.hp / pokemon.stats[Stat.HP]) + (this.hp / this.stats[Stat.HP])) / 2;
this.generateName(); this.generateName();
this.calculateStats(); this.calculateStats();
// Set this Pokemon's HP to the average % of both fusion components
this.hp = Math.round(this.stats[Stat.HP] * newHpPercent);
if (!this.isFainted()) {
// If this Pokemon hasn't fainted, make sure the HP wasn't set over the new maximum
this.hp = Math.min(this.hp, this.stats[Stat.HP]);
this.status = getRandomStatus(this.status, pokemon.status); // Get a random valid status between the two
}
else if (!pokemon.isFainted()) {
// If this Pokemon fainted but the other hasn't, make sure the HP wasn't set to zero
this.hp = Math.max(this.hp, 1);
this.status = pokemon.status; // Inherit the other Pokemon's status
}
this.generateCompatibleTms(); this.generateCompatibleTms();
this.updateInfo(true); this.updateInfo(true);
const fusedPartyMemberIndex = this.scene.getParty().indexOf(pokemon); const fusedPartyMemberIndex = this.scene.getParty().indexOf(pokemon);

Some files were not shown because too many files have changed in this diff Show More