Merge branch 'main' into nuzlocke-mode

pull/457/merge^2
Flashfyre 2024-05-05 00:04:18 -04:00
commit cd1684180f
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