Merge branch 'beta' into natural-gift-implementation

This commit is contained in:
geeilhan 2025-02-07 23:25:19 +01:00 committed by GitHub
commit 679dc856fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
241 changed files with 4798 additions and 2538 deletions

12
.editorconfig Normal file
View File

@ -0,0 +1,12 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[src/*.{js,ts}]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

View File

@ -343,34 +343,39 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki.
# 💻 Development # 💻 Development
## Server Owner/Administrator ## Server Developers
- pancakes aka patapancakes - pancakes aka patapancakes
## Senior Developers ## Current and former Development Team members
- Walker - bennybroseph
- NightKev - Brain Frog
- Moka
- Temp aka Tempo-anon
- Madmadness65
## Developers
- CodeTappert - CodeTappert
- Dakurei
- flx-sta - flx-sta
- innerthunder
- frutescens - frutescens
- Greenlamp
- ImperialSympathizer
- innerthunder
- KimJeongSun
- Madmadness65
- Moka
- Navori
- NightKev
- Opaquer - Opaquer
- OrangeRed
- Sam aka Flashfyre (initial developer, started PokéRogue)
- sirzento
- SN34KZ - SN34KZ
- Swain aka torranx - Swain aka torranx
- Temp aka Tempo-anon
## Junior Developers - Walker
- KimJeongSun - Xavion
- ImperialSympathizer
## Bug/Issue Managers ## Bug/Issue Managers
- Snailman
- Daleks - Daleks
- Lily - Lily
- PigeonBar - PigeonBar
- Snailman
## Other Code Contributors ## Other Code Contributors
- Admiral-Billy - Admiral-Billy
@ -378,10 +383,7 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki.
- arColm - arColm
- Arxalc - Arxalc
- AsdarDevelops - AsdarDevelops
- bennybroseph
- Brain Frog
- Corrade - Corrade
- Dakurei
- DustinLin - DustinLin
- ElizaAlex - ElizaAlex
- EmberCM - EmberCM
@ -391,7 +393,6 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki.
- francktrouillez - francktrouillez
- FredeX - FredeX
- geeilhan - geeilhan
- Greenlamp
- happinyz - happinyz
- hayuna - hayuna
- InfernoVulpix - InfernoVulpix
@ -411,7 +412,6 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki.
- Neverblade - Neverblade
- NxKarim - NxKarim
- okimin - okimin
- OrangeRed
- PigeonBar - PigeonBar
- PrabbyDD - PrabbyDD
- prateau - prateau
@ -421,10 +421,8 @@ In addition to the lists below, please check [the PokéRogue wiki](https://wiki.
- RedstonewolfX - RedstonewolfX
- ReneGV - ReneGV
- rnicar245 - rnicar245
- Sam aka Flashfyre (initial developer, started PokéRogue)
- schmidtc1 - schmidtc1
- shayebeadling - shayebeadling
- sirzento
- snoozbuster - snoozbuster
- sodaMelon - sodaMelon
- td76099 - td76099

View File

@ -80,8 +80,8 @@ As part of the move selection process, the enemy Pokémon must compute a **targe
A move's UBS and TBS are computed with the respective functions in the `Move` class: A move's UBS and TBS are computed with the respective functions in the `Move` class:
```ts ```ts
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer; getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number;
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer; getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number;
``` ```
Logically, these functions are very similar – they add up their respective benefit scores from each of the move's attributes (as determined by `attr.getUserBenefitScore`, and `attr.getTargetBenefitScore`, respectively) and return the total benefit score. However, there are two key functional differences in how the UBS and TBS of a move are handled: Logically, these functions are very similar – they add up their respective benefit scores from each of the move's attributes (as determined by `attr.getUserBenefitScore`, and `attr.getTargetBenefitScore`, respectively) and return the total benefit score. However, there are two key functional differences in how the UBS and TBS of a move are handled:

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "pokemon-rogue-battle", "name": "pokemon-rogue-battle",
"version": "1.5.0", "version": "1.5.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pokemon-rogue-battle", "name": "pokemon-rogue-battle",
"version": "1.5.0", "version": "1.5.2",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@material/material-color-utilities": "^0.2.7", "@material/material-color-utilities": "^0.2.7",

View File

@ -1,7 +1,7 @@
{ {
"name": "pokemon-rogue-battle", "name": "pokemon-rogue-battle",
"private": true, "private": true,
"version": "1.5.0", "version": "1.5.2",
"type": "module", "type": "module",
"scripts": { "scripts": {
"start": "vite", "start": "vite",
@ -20,7 +20,10 @@
"depcruise": "depcruise src", "depcruise": "depcruise src",
"depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg",
"create-test": "node ./create-test-boilerplate.js", "create-test": "node ./create-test-boilerplate.js",
"postinstall": "npx lefthook install && npx lefthook run post-merge" "postinstall": "npx lefthook install && npx lefthook run post-merge",
"update-version:patch": "npm version patch --force --no-git-tag-version",
"update-version:minor": "npm version minor --force --no-git-tag-version",
"update-locales:remote": "git submodule update --progress --init --recursive --force --remote"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.3.0", "@eslint/js": "^9.3.0",
@ -61,11 +64,5 @@
}, },
"engines": { "engines": {
"node": ">=20.0.0" "node": ">=20.0.0"
},
"imports": {
"#enums/*": "./enums/*",
"#app": "./src/main.js",
"#app/*": "./src/*",
"#test/*": "./src/test/*"
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4,8 +4,8 @@
"image": "aether_grunt_f.png", "image": "aether_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 69, "w": 70,
"h": 69 "h": 70
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 39,
"h": 80 "h": 70
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 23, "x": 0,
"y": 10, "y": 0,
"w": 35, "w": 39,
"h": 69 "h": 70
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 35, "w": 39,
"h": 69 "h": 70
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0c9e77856d3b434e719021572bcb93de:f9c45dc5d67009b134dd1bbc5593f6ec:a694f8828aff21c718e5161e2fd63ade$" "smartupdate": "$TexturePacker:SmartUpdate:0a678d2035c82d3741f2de29e01d42d3:374042fde99a4ff05c5e90cedbc5bd1f:a694f8828aff21c718e5161e2fd63ade$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

After

Width:  |  Height:  |  Size: 787 B

View File

@ -4,8 +4,8 @@
"image": "aether_grunt_m.png", "image": "aether_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 65, "w": 69,
"h": 65 "h": 69
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 45,
"h": 80 "h": 69
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 16, "x": 0,
"y": 14, "y": 0,
"w": 47, "w": 45,
"h": 65 "h": 69
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 47, "w": 45,
"h": 65 "h": 69
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:963887cf29549ad3c123b8055cb4d701:68004c4a6e04c93bd21c26a6f8921f0c:d2241fc11d0fc31b26ecbedae6da74f4$" "smartupdate": "$TexturePacker:SmartUpdate:f7ad29bea8c4a179c08958890cadb04b:741fc1b2e43d2da720c249c6f81910bc:d2241fc11d0fc31b26ecbedae6da74f4$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

After

Width:  |  Height:  |  Size: 782 B

View File

@ -4,8 +4,8 @@
"image": "aqua_grunt_f.png", "image": "aqua_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 71, "w": 73,
"h": 71 "h": 73
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 34,
"h": 80 "h": 73
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 22, "x": 0,
"y": 8, "y": 0,
"w": 36, "w": 34,
"h": 71 "h": 73
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 36, "w": 34,
"h": 71 "h": 73
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6db25cb5753163d19bca8e2db45849ae:7d8f51509862bfdf8a78bf42dd0005cd:af0aa9494be37941522487032b556989$" "smartupdate": "$TexturePacker:SmartUpdate:99d76e35df4b09fc9d312218d8fa8cc7:8ad846929ea03b5fb70fd16144e5e2fa:af0aa9494be37941522487032b556989$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 767 B

After

Width:  |  Height:  |  Size: 803 B

View File

@ -4,8 +4,8 @@
"image": "aqua_grunt_m.png", "image": "aqua_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 73, "w": 74,
"h": 73 "h": 74
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 38,
"h": 80 "h": 74
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 17, "x": 0,
"y": 6, "y": 0,
"w": 46, "w": 38,
"h": 73 "h": 74
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 46, "w": 38,
"h": 73 "h": 74
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$" "smartupdate": "$TexturePacker:SmartUpdate:ea2cdca90584089079af92307948ecdc:331e1f5314abbfcf58331ab0b9fd1c40:72b7b50231708a9486d5f315824e4df1$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 797 B

View File

@ -4,8 +4,8 @@
"image": "archie.png", "image": "archie.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 79,
"h": 80 "h": 79
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 58,
"h": 80 "h": 79
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 21, "x": 0,
"y": 0, "y": 0,
"w": 42, "w": 58,
"h": 80 "h": 79
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 42, "w": 58,
"h": 80 "h": 79
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:bfa7fdd7b6ac9be68dc9dc562fb8339f:06f87a279450b21b19294ba956b69c26:4b7980be4e3ac1d20c9eaf970913ec63$" "smartupdate": "$TexturePacker:SmartUpdate:1edc051db037c1742819ac8674ebe4be:bfaa715c0faf707c1b20ab8259d42a35:4b7980be4e3ac1d20c9eaf970913ec63$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -4,8 +4,8 @@
"image": "atticus.png", "image": "atticus.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 46, "w": 55,
"h": 46 "h": 55
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 55,
"h": 80 "h": 49
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 21, "x": 0,
"y": 33, "y": 0,
"w": 43, "w": 55,
"h": 46 "h": 49
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 43, "w": 55,
"h": 46 "h": 49
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6dcd7c3d3982793cbca0d6fcd1f9260e:19c44634629fadd9d039d23dc71ec987:d26ede35f15aa571d5a7a2dd2fb868e1$" "smartupdate": "$TexturePacker:SmartUpdate:2c1a2ecebeac4770c51422bede6add57:5c82bf231c27d62e440081f186eb1da9:d26ede35f15aa571d5a7a2dd2fb868e1$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 741 B

After

Width:  |  Height:  |  Size: 740 B

View File

@ -4,8 +4,8 @@
"image": "courtney.png", "image": "courtney.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 52, "w": 72,
"h": 80 "h": 72
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 52, "w": 44,
"h": 80 "h": 72
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 44,
"h": 80 "h": 72
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 44,
"h": 80 "h": 72
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$" "smartupdate": "$TexturePacker:SmartUpdate:c39b0f300dc09114fba490e6ab68b2b5:a24a6dbdd0e3f4d4b7a567673b73316a:b0c7d3a5747d1c7edafa00c8e6d1257e$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 888 B

After

Width:  |  Height:  |  Size: 869 B

View File

@ -4,8 +4,8 @@
"image": "eri.png", "image": "eri.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 78,
"h": 74 "h": 78
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 52,
"h": 80 "h": 78
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 15, "x": 0,
"y": 5, "y": 0,
"w": 45, "w": 52,
"h": 74 "h": 78
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 45, "w": 52,
"h": 74 "h": 78
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:59594ac27e74ec85e2949d12ff680dc2:d65b6b00858ac47b26ef8393a8fa6795:d7f4cd3ff755f8074c14d3006b0c8301$" "smartupdate": "$TexturePacker:SmartUpdate:d413fdffea2ec50087a67019a6ce4063:66a18e7a21ca3a1953778dbc09074ab6:d7f4cd3ff755f8074c14d3006b0c8301$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -4,8 +4,8 @@
"image": "faba.png", "image": "faba.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 76,
"h": 74 "h": 76
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 29,
"h": 80 "h": 76
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 25, "x": 0,
"y": 5, "y": 0,
"w": 31, "w": 29,
"h": 74 "h": 76
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 29,
"h": 74 "h": 76
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:47622708d99a504998950bd9c389a504:fe1c51be191dd9fafb5b6f309c08ae1a:8d64db18930325b8b513740c1d83ce4c$" "smartupdate": "$TexturePacker:SmartUpdate:bbfce6e1ed69401694ce8c2537dd1fea:a2c9351e4ba08d44cafa66ecdf509866:8d64db18930325b8b513740c1d83ce4c$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 B

After

Width:  |  Height:  |  Size: 772 B

View File

@ -4,8 +4,8 @@
"image": "flare_grunt_f.png", "image": "flare_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 85,
"h": 80 "h": 85
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 23,
"h": 80 "h": 85
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 31, "x": 0,
"y": 0, "y": 0,
"w": 23, "w": 23,
"h": 80 "h": 85
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 23, "w": 23,
"h": 80 "h": 85
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$" "smartupdate": "$TexturePacker:SmartUpdate:88d242a8c3b9859307ecdd290c30ce7d:acd04d60ab09f18e86e4e5727132dac2:0638dbf213f8a974eb5af76eb1e5ddeb$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 613 B

After

Width:  |  Height:  |  Size: 634 B

View File

@ -14,12 +14,12 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 31,
"h": 80 "h": 77
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 24, "x": 0,
"y": 2, "y": 0,
"w": 31, "w": 31,
"h": 77 "h": 77
}, },
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:a26606e70778f88a1a7053b2f2420dde:84abf0d0f6bc90c6a60f660567b2d641:adc35a4070bac9fe828c2605a3b15744$" "smartupdate": "$TexturePacker:SmartUpdate:8683e52bbd1a42992f4d7ab8aa65a2a1:e8279cd322279bc5f8e2bb5797e6f818:adc35a4070bac9fe828c2605a3b15744$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

After

Width:  |  Height:  |  Size: 662 B

View File

@ -4,8 +4,8 @@
"image": "giacomo.png", "image": "giacomo.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 75, "w": 71,
"h": 75 "h": 71
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 37,
"h": 80 "h": 71
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 23, "x": 0,
"y": 4, "y": 0,
"w": 37, "w": 37,
"h": 75 "h": 71
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 37, "w": 37,
"h": 75 "h": 71
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:8c4e7da48e5667abc6d364330268c092:0fa43e58d8a746d3b86cb2dd763719f4:8603cc19e888c8c8de62177f4011577c$" "smartupdate": "$TexturePacker:SmartUpdate:8d4b9bca01f3729556cd02a8795c3e89:cb2840cbbd1e5a614bfa6bcb23db5b62:8603cc19e888c8c8de62177f4011577c$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 846 B

View File

@ -4,8 +4,8 @@
"image": "guzma.png", "image": "guzma.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 58, "w": 64,
"h": 58 "h": 64
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 34,
"h": 80 "h": 64
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 21, "x": 0,
"y": 20, "y": 0,
"w": 37, "w": 34,
"h": 58 "h": 64
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 37, "w": 34,
"h": 58 "h": 64
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c3b08a562a2882d1ca8b5e031e245da9:72a8305e547f091d15abccd2b142e401:3b302c7f9eb6ea81b65bcaeead4a95a9$" "smartupdate": "$TexturePacker:SmartUpdate:90cfe8ae514c30ddf48840678b251141:87a93d268c61327ad913bba3b052686b:3b302c7f9eb6ea81b65bcaeead4a95a9$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 874 B

View File

@ -4,8 +4,8 @@
"image": "hala.png", "image": "hala.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 78, "w": 82,
"h": 78 "h": 82
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 59, "w": 58,
"h": 78 "h": 82
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 59, "w": 58,
"h": 78 "h": 82
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 59, "w": 58,
"h": 78 "h": 82
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:b6547cc9975d92a02b99fd63122d740b:0a72e0ac4fcbfe4329a7dcdad284ab36:7c2af56b9a9851f2e2eaeaf0cdca9370$" "smartupdate": "$TexturePacker:SmartUpdate:57dc13db648785ad4694bf67c40fa21d:ee2bc7184f4f48ab8ba3c10c89bfc8f0:7c2af56b9a9851f2e2eaeaf0cdca9370$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,8 +4,8 @@
"image": "hau.png", "image": "hau.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 70, "w": 71,
"h": 70 "h": 71
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 24,
"h": 80 "h": 71
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 27, "x": 0,
"y": 9, "y": 0,
"w": 29, "w": 24,
"h": 70 "h": 71
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 29, "w": 24,
"h": 70 "h": 71
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:688d6d27e686efec45b144ba4544f248:676457a4e9dfbcad0510f6e7bfa73514:d4c7e8b349477c2295b49b0e99b91bb3$" "smartupdate": "$TexturePacker:SmartUpdate:0d500afd9a36f32a23b5a316dcf397d9:aa5d3e58d6df67b90e484ec7f345a4cf:d4c7e8b349477c2295b49b0e99b91bb3$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 693 B

View File

@ -4,8 +4,8 @@
"image": "korrina.png", "image": "korrina.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 75, "w": 83,
"h": 75 "h": 83
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 57,
"h": 80 "h": 83
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 10, "x": 0,
"y": 4, "y": 0,
"w": 56, "w": 57,
"h": 75 "h": 83
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 56, "w": 57,
"h": 75 "h": 83
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:43a6564beec2569a58110232e9752b64:0decef066ae75dc7f3bd0c811f9a92d1:ed5be09cd8b82ed6439ff8617ffa74c0$" "smartupdate": "$TexturePacker:SmartUpdate:1dc28e18e99698fbfd8a110a1dc737f2:79d24176afd3059dc69ce785ce672bbb:ed5be09cd8b82ed6439ff8617ffa74c0$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "kukui.png",
"format": "RGBA8888",
"size": {
"w": 74,
"h": 74
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 37,
"h": 74
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 37,
"h": 74
},
"frame": {
"x": 0,
"y": 0,
"w": 37,
"h": 74
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:bccd7af37a8608585716e34d0acb49af:8e1ebc6f022707fbb1e6b4f7d1dbb00c:70bdbf4bca082082ae121aa8ef03c2be$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

View File

@ -4,8 +4,8 @@
"image": "lusamine.png", "image": "lusamine.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 80,
"h": 74 "h": 80
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 52,
"h": 80 "h": 80
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 22, "x": 0,
"y": 5, "y": 0,
"w": 36, "w": 52,
"h": 74 "h": 80
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 36, "w": 52,
"h": 74 "h": 80
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:41da3a1299e3831be70016dc91e49313:2413ba06767fb10fdc6fde8cc736c51c:4012333084c529872232c8d052561dc1$" "smartupdate": "$TexturePacker:SmartUpdate:52c5f9beccbfe68b9861b8fc393ba674:35d25e8bad6c7212e330a0e3d0c88315:4012333084c529872232c8d052561dc1$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 976 B

View File

@ -4,8 +4,8 @@
"image": "lysandre.png", "image": "lysandre.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 82,
"h": 80 "h": 82
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 50,
"h": 80 "h": 82
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 14, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 50,
"h": 80 "h": 82
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 50,
"h": 80 "h": 82
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6b887c8bab74885a1b05f2b382759db6:ba102d9d25ddd794a3a17f029b971daf:e6066149f6ec4ccb9fc28faea3d64a7f$" "smartupdate": "$TexturePacker:SmartUpdate:b09528fe2d3137bba8ce5c667d2a962f:7c522eefcc85ee87df485d34b58e814b:e6066149f6ec4ccb9fc28faea3d64a7f$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 824 B

View File

@ -14,19 +14,19 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 33,
"h": 80 "h": 74
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 24, "x": 0,
"y": 5, "y": 0,
"w": 31, "w": 33,
"h": 74 "h": 74
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 33,
"h": 74 "h": 74
} }
} }
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:a015c43d80f8fd1932758e0e2cfcec61:59fc8205ea5ca04295831b4a2eb623ec:30df2ea8e9dac9e95f70534ec43d5ecd$" "smartupdate": "$TexturePacker:SmartUpdate:7449212fcdbfb4a600364bd3761e4fb6:37c81a387501a047cff84cabdeedb496:d1412ef32f1904a102cf70569806f3b7$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 B

After

Width:  |  Height:  |  Size: 807 B

View File

@ -4,8 +4,8 @@
"image": "macro_grunt_m.png", "image": "macro_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 75, "w": 76,
"h": 75 "h": 76
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 35,
"h": 80 "h": 76
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 15, "x": 0,
"y": 4, "y": 0,
"w": 48, "w": 35,
"h": 75 "h": 76
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 48, "w": 35,
"h": 75 "h": 76
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:52fccff2a0675b4e10139ddb7067d4cf:10d254175d2d8a9111cce096ffb55fa3:d57016467aa07cafdfaf13e0ff643c1b$" "smartupdate": "$TexturePacker:SmartUpdate:5800bf6888eb6dd61ea39e1c9a1f93e3:25a930b7c50e2d7832bd3c30402d7544:1f76f2e682f472208a45e187250a6a3d$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

After

Width:  |  Height:  |  Size: 868 B

View File

@ -4,30 +4,30 @@
"image": "magma_grunt_f.png", "image": "magma_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 72,
"h": 80 "h": 72
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 43,
"h": 80 "h": 72
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 10, "x": 0,
"y": 0, "y": 0,
"w": 60, "w": 43,
"h": 80 "h": 72
}, },
"frame": { "frame": {
"x": 10, "x": 0,
"y": 0, "y": 0,
"w": 60, "w": 43,
"h": 80 "h": 72
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$" "smartupdate": "$TexturePacker:SmartUpdate:219462e400564a65012cda9dbc31ab22:4e0070239d24311df52a263271698c59:3b961d8852b62aaf24ceb2030c036515$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 B

After

Width:  |  Height:  |  Size: 727 B

View File

@ -4,30 +4,30 @@
"image": "magma_grunt_m.png", "image": "magma_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 72,
"h": 80 "h": 72
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0001.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 44,
"h": 80 "h": 72
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 10, "x": 0,
"y": 0, "y": 0,
"w": 60, "w": 44,
"h": 80 "h": 72
}, },
"frame": { "frame": {
"x": 10, "x": 0,
"y": 0, "y": 0,
"w": 60, "w": 44,
"h": 80 "h": 72
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:96aa833d987a01bcdcb6f0e7809f5daf:791cce8d026f92b2e52f0b66df8b8e11:35532fd5d9aea30957d50d06f2d2f9a6$" "smartupdate": "$TexturePacker:SmartUpdate:46f6e6e1aef8e2e7640c67116e548c5d:34cb6b7f64b0d3c294fcdde45097575d:35532fd5d9aea30957d50d06f2d2f9a6$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 698 B

View File

@ -4,8 +4,8 @@
"image": "mela.png", "image": "mela.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 78, "w": 75,
"h": 78 "h": 75
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 41,
"h": 80 "h": 75
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 18, "x": 0,
"y": 1, "y": 0,
"w": 46, "w": 41,
"h": 78 "h": 75
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 46, "w": 41,
"h": 78 "h": 75
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:e26d8c926c54c848cef673b3f59f35e7:ff040c2cebb1a92d2ef61dc91c018390:68668cf06383ff459cccaafb6bf56215$" "smartupdate": "$TexturePacker:SmartUpdate:96e97b165e8ca706b7838616d32ab81f:89c577db41f4b610520823e876066e35:68668cf06383ff459cccaafb6bf56215$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1014 B

View File

@ -4,8 +4,8 @@
"image": "molayne.png", "image": "molayne.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 79, "w": 78,
"h": 79 "h": 78
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -15,19 +15,19 @@
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 31, "w": 31,
"h": 79 "h": 78
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 31,
"h": 79 "h": 78
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 31,
"h": 79 "h": 78
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:056720ae56077b81375b258850332053:774e1c8463f26fac3be55ed88c8b48b9:11092260a376b1a46e696927361b6498$" "smartupdate": "$TexturePacker:SmartUpdate:190386db101d4bd1ef5ed1f4f7b5bb1c:c8bc1b069ceb2707738b9178fb6aea0f:11092260a376b1a46e696927361b6498$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 743 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "mustard.png",
"format": "RGBA8888",
"size": {
"w": 71,
"h": 71
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 57,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 57,
"h": 71
},
"frame": {
"x": 0,
"y": 0,
"w": 57,
"h": 71
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:8e2d109ee2cb1b2a6dda840c5bba1d4e:8116b1de2fd7bc0ca08e2d3e618b3dae:ac5d03e7cabff8ff660969c2bc2f3b36$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

View File

@ -4,8 +4,8 @@
"image": "oleana.png", "image": "oleana.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 79, "w": 78,
"h": 79 "h": 78
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 56,
"h": 80 "h": 78
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 10, "x": 0,
"y": 1, "y": 0,
"w": 53, "w": 56,
"h": 79 "h": 78
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 53, "w": 56,
"h": 79 "h": 78
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:30987a671771127a38491a588c465964:38b28effcfd5c6cbc0f358912a775af3:82e2a1f8afed29be57f6c2473f4c5be2$" "smartupdate": "$TexturePacker:SmartUpdate:3f088913cab1db14067e247bd92e82ce:b32e1ef6ef289564b39fd326346002c6:82e2a1f8afed29be57f6c2473f4c5be2$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 918 B

View File

@ -4,8 +4,8 @@
"image": "ortega.png", "image": "ortega.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 69, "w": 70,
"h": 69 "h": 70
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 47,
"h": 80 "h": 70
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 8, "x": 0,
"y": 10, "y": 0,
"w": 53, "w": 47,
"h": 69 "h": 70
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 53, "w": 47,
"h": 69 "h": 70
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c6ff92d90ed884222095de81d1db9166:a91cf3c83a063f549c52afb42f7ba3b0:c3f9fcec121c8bc93f2b230b20b79c57$" "smartupdate": "$TexturePacker:SmartUpdate:f69a1067315885ed736a07362122f371:717e3f134eb10424f0f0fa724500ba63:c3f9fcec121c8bc93f2b230b20b79c57$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 937 B

After

Width:  |  Height:  |  Size: 909 B

View File

@ -4,8 +4,8 @@
"image": "penny.png", "image": "penny.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 75, "w": 67,
"h": 75 "h": 67
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 30,
"h": 80 "h": 67
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 24, "x": 0,
"y": 4, "y": 0,
"w": 34, "w": 30,
"h": 75 "h": 67
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 34, "w": 30,
"h": 75 "h": 67
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:54f184bf1995a94a78aff33c9a851e6b:a6c9b3fe428b0cd0344b5cf14b999f36:cf221da9747cb8cb356053d3042d8d22$" "smartupdate": "$TexturePacker:SmartUpdate:cb4d76912d528afe986ac5cad775f455:cc70d9738c9c7347b2ac9afec4ec9290:cf221da9747cb8cb356053d3042d8d22$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 955 B

After

Width:  |  Height:  |  Size: 739 B

View File

@ -4,30 +4,408 @@
"image": "plasma_grunt_f.png", "image": "plasma_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 75, "w": 186,
"h": 75 "h": 186
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0002.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": true,
"sourceSize": { "sourceSize": {
"w": 80, "w": 80,
"h": 80 "h": 80
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 21, "x": 16,
"y": 4, "y": 31,
"w": 37, "w": 49,
"h": 75 "h": 49
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 37, "w": 49,
"h": 75 "h": 49
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 31,
"w": 49,
"h": 49
},
"frame": {
"x": 0,
"y": 0,
"w": 49,
"h": 49
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 46,
"h": 53
},
"frame": {
"x": 49,
"y": 0,
"w": 46,
"h": 53
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 45,
"h": 53
},
"frame": {
"x": 0,
"y": 49,
"w": 45,
"h": 53
}
},
{
"filename": "0017.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 45,
"h": 53
},
"frame": {
"x": 0,
"y": 49,
"w": 45,
"h": 53
}
},
{
"filename": "0018.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 45,
"h": 53
},
"frame": {
"x": 0,
"y": 49,
"w": 45,
"h": 53
}
},
{
"filename": "0019.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 45,
"h": 53
},
"frame": {
"x": 0,
"y": 49,
"w": 45,
"h": 53
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 33,
"w": 50,
"h": 47
},
"frame": {
"x": 45,
"y": 53,
"w": 50,
"h": 47
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 33,
"w": 50,
"h": 47
},
"frame": {
"x": 45,
"y": 53,
"w": 50,
"h": 47
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 36,
"w": 50,
"h": 44
},
"frame": {
"x": 45,
"y": 100,
"w": 50,
"h": 44
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 36,
"w": 50,
"h": 44
},
"frame": {
"x": 45,
"y": 100,
"w": 50,
"h": 44
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 45,
"h": 53
},
"frame": {
"x": 0,
"y": 102,
"w": 45,
"h": 53
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 38,
"w": 50,
"h": 42
},
"frame": {
"x": 45,
"y": 144,
"w": 50,
"h": 42
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 38,
"w": 50,
"h": 42
},
"frame": {
"x": 45,
"y": 144,
"w": 50,
"h": 42
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 43,
"h": 53
},
"frame": {
"x": 95,
"y": 0,
"w": 43,
"h": 53
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 27,
"w": 43,
"h": 53
},
"frame": {
"x": 95,
"y": 53,
"w": 43,
"h": 53
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 31,
"w": 49,
"h": 49
},
"frame": {
"x": 95,
"y": 106,
"w": 49,
"h": 49
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 31,
"w": 49,
"h": 49
},
"frame": {
"x": 95,
"y": 106,
"w": 49,
"h": 49
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 29,
"w": 46,
"h": 51
},
"frame": {
"x": 138,
"y": 0,
"w": 46,
"h": 51
} }
} }
] ]
@ -36,6 +414,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c3001e18f1878c01a4825697200e823e:2003e0d4db249f7020c3471872198ac8:b01645b9e941158814978f2126e7e995$" "smartupdate": "$TexturePacker:SmartUpdate:e8e867ad78b993918fba435e10511740:758a95ecd97e2607ff6ab81f85e665e6:b01645b9e941158814978f2126e7e995$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -4,30 +4,555 @@
"image": "plasma_grunt_m.png", "image": "plasma_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 262,
"h": 72 "h": 262
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
{ {
"filename": "0001.png", "filename": "0021.png",
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 13,
"y": 11,
"w": 54,
"h": 69
},
"frame": {
"x": 0,
"y": 0,
"w": 54,
"h": 69
}
},
{
"filename": "0022.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 13,
"y": 11,
"w": 54,
"h": 69
},
"frame": {
"x": 0,
"y": 0,
"w": 54,
"h": 69
}
},
{
"filename": "0023.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "sourceSize": {
"w": 80, "w": 80,
"h": 80 "h": 80
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 16, "x": 16,
"y": 7, "y": 11,
"w": 47, "w": 51,
"h": 72 "h": 69
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 69,
"w": 51,
"h": 69
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 0,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0024.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 0,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0025.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 0,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0026.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 0,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 50,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 50,
"y": 138,
"w": 50,
"h": 69
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 51,
"y": 69,
"w": 50,
"h": 69
}
},
{
"filename": "0017.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 54,
"y": 0, "y": 0,
"w": 47, "w": 50,
"h": 72 "h": 69
}
},
{
"filename": "0018.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 17,
"y": 11,
"w": 50,
"h": 69
},
"frame": {
"x": 54,
"y": 0,
"w": 50,
"h": 69
}
},
{
"filename": "0019.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 18,
"y": 11,
"w": 49,
"h": 69
},
"frame": {
"x": 100,
"y": 138,
"w": 49,
"h": 69
}
},
{
"filename": "0020.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 18,
"y": 11,
"w": 49,
"h": 69
},
"frame": {
"x": 100,
"y": 138,
"w": 49,
"h": 69
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 14,
"y": 13,
"w": 52,
"h": 67
},
"frame": {
"x": 101,
"y": 69,
"w": 52,
"h": 67
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 14,
"y": 13,
"w": 52,
"h": 67
},
"frame": {
"x": 101,
"y": 69,
"w": 52,
"h": 67
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 14,
"y": 13,
"w": 52,
"h": 67
},
"frame": {
"x": 104,
"y": 0,
"w": 52,
"h": 67
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 156,
"y": 0,
"w": 53,
"h": 65
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 156,
"y": 0,
"w": 53,
"h": 65
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 209,
"y": 0,
"w": 53,
"h": 65
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 156,
"y": 65,
"w": 53,
"h": 65
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 209,
"y": 65,
"w": 53,
"h": 65
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 153,
"y": 130,
"w": 53,
"h": 65
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 149,
"y": 195,
"w": 53,
"h": 65
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 202,
"y": 195,
"w": 53,
"h": 65
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 12,
"y": 15,
"w": 53,
"h": 65
},
"frame": {
"x": 206,
"y": 130,
"w": 53,
"h": 65
} }
} }
] ]
@ -36,6 +561,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:61f195ebbcde93ab7442408edad7fe7a:28ae203b3cb42a94c4ba4420fdebdccc:9ae0ee174d431d48052a2f6b74e9d40c$" "smartupdate": "$TexturePacker:SmartUpdate:8e214218a81b826b2cecce3e41f6eee8:2b88638dcf4559e6aad7c14cd730b7c3:9ae0ee174d431d48052a2f6b74e9d40c$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 914 B

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -4,8 +4,8 @@
"image": "plumeria.png", "image": "plumeria.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 76,
"h": 72 "h": 76
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 40,
"h": 80 "h": 76
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 23, "x": 0,
"y": 7, "y": 0,
"w": 36, "w": 40,
"h": 72 "h": 76
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 36, "w": 40,
"h": 72 "h": 76
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:5527e7b646932d429928b53f055e9d27:c0640510780d2974f9b74a7f8e6b29aa:7bfec029bae78c9d483f59c35b73afad$" "smartupdate": "$TexturePacker:SmartUpdate:d0e080a4dcc30b39616c49dfd96c98f7:47c6a714be68fabdf11801166e154db6:7bfec029bae78c9d483f59c35b73afad$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 934 B

After

Width:  |  Height:  |  Size: 835 B

View File

@ -4,8 +4,8 @@
"image": "rose.png", "image": "rose.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 79, "w": 77,
"h": 79 "h": 77
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 31,
"h": 80 "h": 77
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 16, "x": 0,
"y": 1, "y": 0,
"w": 52, "w": 31,
"h": 79 "h": 77
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 52, "w": 31,
"h": 79 "h": 77
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:2b4ccaff7255c7d72661eac13de83ff8:72ee3660cdf470bd67375d355307e19d:8d35b104fc841baa4443581e6cea979e$" "smartupdate": "$TexturePacker:SmartUpdate:be2215e7232e2260242613e54c91c3c4:852fb3fda379db104106f8888649d9d5:8d35b104fc841baa4443581e6cea979e$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 750 B

View File

@ -4,8 +4,8 @@
"image": "shelly.png", "image": "shelly.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 80, "w": 78,
"h": 80 "h": 78
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 45,
"h": 80 "h": 78
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 80, "w": 45,
"h": 80 "h": 78
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 80, "w": 45,
"h": 80 "h": 78
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$" "smartupdate": "$TexturePacker:SmartUpdate:601dbcee82b14bde5072df26ddd7d684:a0d576e65d8e3ff549dde75f0a82bc94:a277ff67eb669e1dac57ad29940004ac$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 985 B

After

Width:  |  Height:  |  Size: 898 B

View File

@ -4,8 +4,8 @@
"image": "skull_grunt_f.png", "image": "skull_grunt_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 74, "w": 69,
"h": 74 "h": 69
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 31, "w": 44,
"h": 74 "h": 69
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 44,
"h": 74 "h": 69
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 44,
"h": 74 "h": 69
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:71a1f5b1981674c6e81163ac8ea576c3:a5e612d58e5f0a1489e111212baea09d:dd369353af16e4c5eb6547e129dfac18$" "smartupdate": "$TexturePacker:SmartUpdate:b9685517b9674887653c84a03f3781c0:894dcd88bf117d48750df82b7bfac644:9035f560a0ab0d45bcc084aba7172990$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 729 B

View File

@ -4,8 +4,8 @@
"image": "skull_grunt_m.png", "image": "skull_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 72, "w": 64,
"h": 72 "h": 64
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 51, "w": 39,
"h": 72 "h": 64
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 51, "w": 39,
"h": 72 "h": 64
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 51, "w": 39,
"h": 72 "h": 64
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:4deb2a68e4d168bb1a40cb5d190a7d1f:be3d7b29f4b544ba51cf907691fef51d:df57ca2c9bf5f80d930306e15a851d4d$" "smartupdate": "$TexturePacker:SmartUpdate:c39ac1d47c8cbe300cffe98bda48c590:b400e0c6286f0e20dfbc383f7453e35b:1ff10b395daf6ebfa377680a6404f816$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 966 B

After

Width:  |  Height:  |  Size: 700 B

View File

@ -14,12 +14,12 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 30,
"h": 80 "h": 68
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 24, "x": 0,
"y": 11, "y": 0,
"w": 30, "w": 30,
"h": 68 "h": 68
}, },
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:b542a1bdd6995584fc776f75d578b434:f03fddece4494ab59698002fe6671972:c6f0e54e24ec5ffaa711700431b1955e$" "smartupdate": "$TexturePacker:SmartUpdate:a5493363086a57d0f145cf61c42475de:2e4d3b330bb89e05e93f34d605eee203:c6f0e54e24ec5ffaa711700431b1955e$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 936 B

View File

@ -4,8 +4,8 @@
"image": "star_grunt_m.png", "image": "star_grunt_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 70, "w": 64,
"h": 70 "h": 64
}, },
"scale": 1, "scale": 1,
"frames": [ "frames": [
@ -14,20 +14,20 @@
"rotated": false, "rotated": false,
"trimmed": false, "trimmed": false,
"sourceSize": { "sourceSize": {
"w": 80, "w": 36,
"h": 80 "h": 64
}, },
"spriteSourceSize": { "spriteSourceSize": {
"x": 24, "x": 0,
"y": 9, "y": 0,
"w": 31, "w": 36,
"h": 70 "h": 64
}, },
"frame": { "frame": {
"x": 0, "x": 0,
"y": 0, "y": 0,
"w": 31, "w": 36,
"h": 70 "h": 64
} }
} }
] ]
@ -36,6 +36,6 @@
"meta": { "meta": {
"app": "https://www.codeandweb.com/texturepacker", "app": "https://www.codeandweb.com/texturepacker",
"version": "3.0", "version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:abc4b0424c37fd55a2bf2e9f5142adce:41a140aa68a1eda61d9a00cab4e07721:a0796711f9e0333796b6629cd43ff8e8$" "smartupdate": "$TexturePacker:SmartUpdate:11da63c3829d44356a3c26d094212d64:45ebf021548ac0e12b6f25093c5bf0db:a0796711f9e0333796b6629cd43ff8e8$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

After

Width:  |  Height:  |  Size: 755 B

@ -1 +1 @@
Subproject commit 5ef993b95fa8248adc0fb7d9489baccf546bf8e3 Subproject commit 2d3765a4f035b4916523bf75b754e153e9d65134

View File

@ -11,8 +11,8 @@ export function initLoggedInUser(): void {
loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false };
} }
export function updateUserInfo(): Promise<[boolean, integer]> { export function updateUserInfo(): Promise<[boolean, number]> {
return new Promise<[boolean, integer]>(resolve => { return new Promise<[boolean, number]>(resolve => {
if (bypassLogin) { if (bypassLogin) {
loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false };
let lastSessionSlot = -1; let lastSessionSlot = -1;

View File

@ -118,7 +118,7 @@ export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
const DEBUG_RNG = false; const DEBUG_RNG = false;
const OPP_IVS_OVERRIDE_VALIDATED : integer[] = ( const OPP_IVS_OVERRIDE_VALIDATED : number[] = (
Array.isArray(Overrides.OPP_IVS_OVERRIDE) ? Array.isArray(Overrides.OPP_IVS_OVERRIDE) ?
Overrides.OPP_IVS_OVERRIDE : Overrides.OPP_IVS_OVERRIDE :
new Array(6).fill(Overrides.OPP_IVS_OVERRIDE) new Array(6).fill(Overrides.OPP_IVS_OVERRIDE)
@ -134,7 +134,7 @@ interface StarterColors {
} }
export interface PokeballCounts { export interface PokeballCounts {
[pb: string]: integer; [pb: string]: number;
} }
export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound | Phaser.Sound.NoAudioSound; export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound | Phaser.Sound.NoAudioSound;
@ -149,15 +149,15 @@ export default class BattleScene extends SceneBase {
public inputController: InputsController; public inputController: InputsController;
public uiInputs: UiInputs; public uiInputs: UiInputs;
public sessionPlayTime: integer | null = null; public sessionPlayTime: number | null = null;
public lastSavePlayTime: integer | null = null; public lastSavePlayTime: number | null = null;
public masterVolume: number = 0.5; public masterVolume: number = 0.5;
public bgmVolume: number = 1; public bgmVolume: number = 1;
public fieldVolume: number = 1; public fieldVolume: number = 1;
public seVolume: number = 1; public seVolume: number = 1;
public uiVolume: number = 1; public uiVolume: number = 1;
public gameSpeed: integer = 1; public gameSpeed: number = 1;
public damageNumbersMode: integer = 0; public damageNumbersMode: number = 0;
public reroll: boolean = false; public reroll: boolean = false;
public shopCursorTarget: number = ShopCursorTarget.REWARDS; public shopCursorTarget: number = ShopCursorTarget.REWARDS;
public commandCursorMemory: boolean = false; public commandCursorMemory: boolean = false;
@ -176,16 +176,16 @@ export default class BattleScene extends SceneBase {
* - 1 = 'Passives Only' * - 1 = 'Passives Only'
* - 2 = 'On' * - 2 = 'On'
*/ */
public candyUpgradeNotification: integer = 0; public candyUpgradeNotification: number = 0;
/** /**
* Determines what type of notification is used for Candy Upgrades * Determines what type of notification is used for Candy Upgrades
* - 0 = 'Icon' * - 0 = 'Icon'
* - 1 = 'Animation' * - 1 = 'Animation'
*/ */
public candyUpgradeDisplay: integer = 0; public candyUpgradeDisplay: number = 0;
public moneyFormat: MoneyFormat = MoneyFormat.NORMAL; public moneyFormat: MoneyFormat = MoneyFormat.NORMAL;
public uiTheme: UiTheme = UiTheme.DEFAULT; public uiTheme: UiTheme = UiTheme.DEFAULT;
public windowType: integer = 0; public windowType: number = 0;
public experimentalSprites: boolean = false; public experimentalSprites: boolean = false;
public musicPreference: number = MusicPreference.ALLGENS; public musicPreference: number = MusicPreference.ALLGENS;
public moveAnimations: boolean = true; public moveAnimations: boolean = true;
@ -212,7 +212,7 @@ export default class BattleScene extends SceneBase {
* @default 0 - Uses the default normal experience gain display. * @default 0 - Uses the default normal experience gain display.
*/ */
public expParty: ExpNotification = 0; public expParty: ExpNotification = 0;
public hpBarSpeed: integer = 0; public hpBarSpeed: number = 0;
public fusionPaletteSwaps: boolean = true; public fusionPaletteSwaps: boolean = true;
public enableTouchControls: boolean = false; public enableTouchControls: boolean = false;
public enableVibration: boolean = false; public enableVibration: boolean = false;
@ -223,7 +223,7 @@ export default class BattleScene extends SceneBase {
* - 0 = 'Switch' * - 0 = 'Switch'
* - 1 = 'Set' - The option to switch the active pokemon at the start of a battle will not display. * - 1 = 'Set' - The option to switch the active pokemon at the start of a battle will not display.
*/ */
public battleStyle: integer = BattleStyle.SWITCH; public battleStyle: number = BattleStyle.SWITCH;
/** /**
* Defines whether or not to show type effectiveness hints * Defines whether or not to show type effectiveness hints
@ -235,7 +235,7 @@ export default class BattleScene extends SceneBase {
public disableMenu: boolean = false; public disableMenu: boolean = false;
public gameData: GameData; public gameData: GameData;
public sessionSlotId: integer; public sessionSlotId: number;
/** PhaseQueue: dequeue/remove the first element to get the next phase */ /** PhaseQueue: dequeue/remove the first element to get the next phase */
public phaseQueue: Phase[]; public phaseQueue: Phase[];
@ -244,7 +244,7 @@ export default class BattleScene extends SceneBase {
private phaseQueuePrepend: Phase[]; private phaseQueuePrepend: Phase[];
/** overrides default of inserting phases to end of phaseQueuePrepend array, useful or inserting Phases "out of order" */ /** overrides default of inserting phases to end of phaseQueuePrepend array, useful or inserting Phases "out of order" */
private phaseQueuePrependSpliceIndex: integer; private phaseQueuePrependSpliceIndex: number;
private nextCommandPhaseQueue: Phase[]; private nextCommandPhaseQueue: Phase[];
private currentPhase: Phase | null; private currentPhase: Phase | null;
@ -265,13 +265,13 @@ export default class BattleScene extends SceneBase {
public arenaNextEnemy: ArenaBase; public arenaNextEnemy: ArenaBase;
public arena: Arena; public arena: Arena;
public gameMode: GameMode; public gameMode: GameMode;
public score: integer; public score: number;
public lockModifierTiers: boolean; public lockModifierTiers: boolean;
public trainer: Phaser.GameObjects.Sprite; public trainer: Phaser.GameObjects.Sprite;
public lastEnemyTrainer: Trainer | null; public lastEnemyTrainer: Trainer | null;
public currentBattle: Battle; public currentBattle: Battle;
public pokeballCounts: PokeballCounts; public pokeballCounts: PokeballCounts;
public money: integer; public money: number;
public pokemonInfoContainer: PokemonInfoContainer; public pokemonInfoContainer: PokemonInfoContainer;
private party: PlayerPokemon[]; private party: PlayerPokemon[];
/** Session save data that pertains to Mystery Encounters */ /** Session save data that pertains to Mystery Encounters */
@ -300,7 +300,7 @@ export default class BattleScene extends SceneBase {
public seed: string; public seed: string;
public waveSeed: string; public waveSeed: string;
public waveCycleOffset: integer; public waveCycleOffset: number;
public offsetGym: boolean; public offsetGym: boolean;
public damageNumberHandler: DamageNumberHandler; public damageNumberHandler: DamageNumberHandler;
@ -314,9 +314,9 @@ export default class BattleScene extends SceneBase {
private bgmCache: Set<string> = new Set(); private bgmCache: Set<string> = new Set();
private playTimeTimer: Phaser.Time.TimerEvent; private playTimeTimer: Phaser.Time.TimerEvent;
public rngCounter: integer = 0; public rngCounter: number = 0;
public rngSeedOverride: string = ""; public rngSeedOverride: string = "";
public rngOffset: integer = 0; public rngOffset: number = 0;
public inputMethod: string; public inputMethod: string;
private infoToggles: InfoToggle[] = []; private infoToggles: InfoToggle[] = [];
@ -717,7 +717,7 @@ export default class BattleScene extends SceneBase {
const traverseVariantData = (keys: string[]) => { const traverseVariantData = (keys: string[]) => {
let variantTree = variantData; let variantTree = variantData;
let expTree = expVariantData; let expTree = expVariantData;
keys.map((k: string, i: integer) => { keys.map((k: string, i: number) => {
if (i < keys.length - 1) { if (i < keys.length - 1) {
variantTree = variantTree[k]; variantTree = variantTree[k];
expTree = expTree[k]; expTree = expTree[k];
@ -869,6 +869,12 @@ export default class BattleScene extends SceneBase {
return party.slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1)); return party.slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1));
} }
/**
* Returns an array of Pokemon on both sides of the battle - player first, then enemy.
* Does not actually check if the pokemon are on the field or not, and always has length 4 regardless of battle type.
* @param activeOnly Whether to consider only active pokemon
* @returns array of {@linkcode Pokemon}
*/
public getField(activeOnly: boolean = false): Pokemon[] { public getField(activeOnly: boolean = false): Pokemon[] {
const ret = new Array(4).fill(null); const ret = new Array(4).fill(null);
const playerField = this.getPlayerField(); const playerField = this.getPlayerField();
@ -920,12 +926,12 @@ export default class BattleScene extends SceneBase {
return activeOnly ? this.infoToggles.filter(t => t?.isActive()) : this.infoToggles; return activeOnly ? this.infoToggles.filter(t => t?.isActive()) : this.infoToggles;
} }
getPokemonById(pokemonId: integer): Pokemon | null { getPokemonById(pokemonId: number): Pokemon | null {
const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId); const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId);
return (findInParty(this.getPlayerParty()) || findInParty(this.getEnemyParty())) ?? null; return (findInParty(this.getPlayerParty()) || findInParty(this.getEnemyParty())) ?? null;
} }
addPlayerPokemon(species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData, postProcess?: (playerPokemon: PlayerPokemon) => void): PlayerPokemon { addPlayerPokemon(species: PokemonSpecies, level: number, abilityIndex?: number, formIndex?: number, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: number[], nature?: Nature, dataSource?: Pokemon | PokemonData, postProcess?: (playerPokemon: PlayerPokemon) => void): PlayerPokemon {
const pokemon = new PlayerPokemon(species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); const pokemon = new PlayerPokemon(species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource);
if (postProcess) { if (postProcess) {
postProcess(pokemon); postProcess(pokemon);
@ -934,7 +940,7 @@ export default class BattleScene extends SceneBase {
return pokemon; return pokemon;
} }
addEnemyPokemon(species: PokemonSpecies, level: integer, trainerSlot: TrainerSlot, boss: boolean = false, shinyLock: boolean = false, dataSource?: PokemonData, postProcess?: (enemyPokemon: EnemyPokemon) => void): EnemyPokemon { addEnemyPokemon(species: PokemonSpecies, level: number, trainerSlot: TrainerSlot, boss: boolean = false, shinyLock: boolean = false, dataSource?: PokemonData, postProcess?: (enemyPokemon: EnemyPokemon) => void): EnemyPokemon {
if (Overrides.OPP_LEVEL_OVERRIDE > 0) { if (Overrides.OPP_LEVEL_OVERRIDE > 0) {
level = Overrides.OPP_LEVEL_OVERRIDE; level = Overrides.OPP_LEVEL_OVERRIDE;
} }
@ -1086,7 +1092,7 @@ export default class BattleScene extends SceneBase {
* @param min The minimum integer to pick, default `0` * @param min The minimum integer to pick, default `0`
* @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1)
*/ */
randBattleSeedInt(range: integer, min: integer = 0): integer { randBattleSeedInt(range: number, min: number = 0): number {
return this.currentBattle?.randSeedInt(range, min); return this.currentBattle?.randSeedInt(range, min);
} }
@ -1211,7 +1217,7 @@ export default class BattleScene extends SceneBase {
return Math.max(doubleChance.value, 1); return Math.max(doubleChance.value, 1);
} }
newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean, mysteryEncounterType?: MysteryEncounterType): Battle | null { newBattle(waveIndex?: number, battleType?: BattleType, trainerData?: TrainerData, double?: boolean, mysteryEncounterType?: MysteryEncounterType): Battle | null {
const _startingWave = Overrides.STARTING_WAVE_OVERRIDE || startingWave; const _startingWave = Overrides.STARTING_WAVE_OVERRIDE || startingWave;
const newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (_startingWave - 1)) + 1); const newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (_startingWave - 1)) + 1);
let newDouble: boolean | undefined; let newDouble: boolean | undefined;
@ -1437,7 +1443,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
getSpeciesFormIndex(species: PokemonSpecies, gender?: Gender, nature?: Nature, ignoreArena?: boolean): integer { getSpeciesFormIndex(species: PokemonSpecies, gender?: Gender, nature?: Nature, ignoreArena?: boolean): number {
if (!species.forms?.length) { if (!species.forms?.length) {
return 0; return 0;
} }
@ -1484,6 +1490,8 @@ export default class BattleScene extends SceneBase {
return 0; // Don't give trainers Battle Bond Greninja return 0; // Don't give trainers Battle Bond Greninja
} }
return Utils.randSeedInt(2); return Utils.randSeedInt(2);
case Species.URSHIFU:
return Utils.randSeedInt(2);
case Species.ZYGARDE: case Species.ZYGARDE:
return Utils.randSeedInt(4); return Utils.randSeedInt(4);
case Species.MINIOR: case Species.MINIOR:
@ -1532,7 +1540,7 @@ export default class BattleScene extends SceneBase {
return ret; return ret;
} }
private getGeneratedWaveCycleOffset(): integer { private getGeneratedWaveCycleOffset(): number {
let ret = 0; let ret = 0;
this.executeWithSeedOffset(() => { this.executeWithSeedOffset(() => {
ret = Utils.randSeedInt(8) * 5; ret = Utils.randSeedInt(8) * 5;
@ -1540,7 +1548,7 @@ export default class BattleScene extends SceneBase {
return ret; return ret;
} }
getEncounterBossSegments(waveIndex: integer, level: integer, species?: PokemonSpecies, forceBoss: boolean = false): integer { getEncounterBossSegments(waveIndex: number, level: number, species?: PokemonSpecies, forceBoss: boolean = false): number {
if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE > 1) { if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE > 1) {
return Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE; return Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE;
} else if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE === 1) { } else if (Overrides.OPP_HEALTH_SEGMENTS_OVERRIDE === 1) {
@ -1564,7 +1572,7 @@ export default class BattleScene extends SceneBase {
return 0; return 0;
} }
let ret: integer = 2; let ret: number = 2;
if (level >= 100) { if (level >= 100) {
ret++; ret++;
@ -1581,7 +1589,7 @@ export default class BattleScene extends SceneBase {
trySpreadPokerus(): void { trySpreadPokerus(): void {
const party = this.getPlayerParty(); const party = this.getPlayerParty();
const infectedIndexes: integer[] = []; const infectedIndexes: number[] = [];
const spread = (index: number, spreadTo: number) => { const spread = (index: number, spreadTo: number) => {
const partyMember = party[index + spreadTo]; const partyMember = party[index + spreadTo];
if (!partyMember.pokerus && !Utils.randSeedInt(10)) { if (!partyMember.pokerus && !Utils.randSeedInt(10)) {
@ -1605,7 +1613,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
resetSeed(waveIndex?: integer): void { resetSeed(waveIndex?: number): void {
const wave = waveIndex || this.currentBattle?.waveIndex || 0; const wave = waveIndex || this.currentBattle?.waveIndex || 0;
this.waveSeed = Utils.shiftCharCodes(this.seed, wave); this.waveSeed = Utils.shiftCharCodes(this.seed, wave);
Phaser.Math.RND.sow([ this.waveSeed ]); Phaser.Math.RND.sow([ this.waveSeed ]);
@ -1613,7 +1621,7 @@ export default class BattleScene extends SceneBase {
this.rngCounter = 0; this.rngCounter = 0;
} }
executeWithSeedOffset(func: Function, offset: integer, seedOverride?: string): void { executeWithSeedOffset(func: Function, offset: number, seedOverride?: string): void {
if (!func) { if (!func) {
return; return;
} }
@ -1661,7 +1669,7 @@ export default class BattleScene extends SceneBase {
this.arenaFlyout.toggleFlyout(pressed); this.arenaFlyout.toggleFlyout(pressed);
} }
showFieldOverlay(duration: integer): Promise<void> { showFieldOverlay(duration: number): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.tweens.add({ this.tweens.add({
targets: this.fieldOverlay, targets: this.fieldOverlay,
@ -1673,7 +1681,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
hideFieldOverlay(duration: integer): Promise<void> { hideFieldOverlay(duration: number): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.tweens.add({ this.tweens.add({
targets: this.fieldOverlay, targets: this.fieldOverlay,
@ -1693,7 +1701,7 @@ export default class BattleScene extends SceneBase {
} }
} }
showShopOverlay(duration: integer): Promise<void> { showShopOverlay(duration: number): Promise<void> {
this.shopOverlayShown = true; this.shopOverlayShown = true;
return new Promise(resolve => { return new Promise(resolve => {
this.tweens.add({ this.tweens.add({
@ -1706,7 +1714,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
hideShopOverlay(duration: integer): Promise<void> { hideShopOverlay(duration: number): Promise<void> {
this.shopOverlayShown = false; this.shopOverlayShown = false;
return new Promise(resolve => { return new Promise(resolve => {
this.tweens.add({ this.tweens.add({
@ -1795,7 +1803,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
hideLuckText(duration: integer): void { hideLuckText(duration: number): void {
if (this.reroll) { if (this.reroll) {
return; return;
} }
@ -1835,7 +1843,7 @@ export default class BattleScene extends SceneBase {
} }
addFaintedEnemyScore(enemy: EnemyPokemon): void { addFaintedEnemyScore(enemy: EnemyPokemon): void {
let scoreIncrease = enemy.getSpeciesForm().getBaseExp() * (enemy.level / this.getMaxExpLevel()) * ((enemy.ivs.reduce((iv: integer, total: integer) => total += iv, 0) / 93) * 0.2 + 0.8); let scoreIncrease = enemy.getSpeciesForm().getBaseExp() * (enemy.level / this.getMaxExpLevel()) * ((enemy.ivs.reduce((iv: number, total: number) => total += iv, 0) / 93) * 0.2 + 0.8);
this.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemy.id, false).map(m => scoreIncrease *= (m as PokemonHeldItemModifier).getScoreMultiplier()); this.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemy.id, false).map(m => scoreIncrease *= (m as PokemonHeldItemModifier).getScoreMultiplier());
if (enemy.isBoss()) { if (enemy.isBoss()) {
scoreIncrease *= Math.sqrt(enemy.bossSegments); scoreIncrease *= Math.sqrt(enemy.bossSegments);
@ -1843,7 +1851,7 @@ export default class BattleScene extends SceneBase {
this.currentBattle.battleScore += Math.ceil(scoreIncrease); this.currentBattle.battleScore += Math.ceil(scoreIncrease);
} }
getMaxExpLevel(ignoreLevelCap: boolean = false): integer { getMaxExpLevel(ignoreLevelCap: boolean = false): number {
if (Overrides.LEVEL_CAP_OVERRIDE > 0) { if (Overrides.LEVEL_CAP_OVERRIDE > 0) {
return Overrides.LEVEL_CAP_OVERRIDE; return Overrides.LEVEL_CAP_OVERRIDE;
} else if (ignoreLevelCap || Overrides.LEVEL_CAP_OVERRIDE < 0) { } else if (ignoreLevelCap || Overrides.LEVEL_CAP_OVERRIDE < 0) {
@ -1855,7 +1863,7 @@ export default class BattleScene extends SceneBase {
return Math.ceil(baseLevel / 2) * 2 + 2; return Math.ceil(baseLevel / 2) * 2 + 2;
} }
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies { randomSpecies(waveIndex: number, level: number, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
if (fromArenaPool) { if (fromArenaPool) {
return this.arena.randomSpecies(waveIndex, level, undefined, getPartyLuckValue(this.party)); return this.arena.randomSpecies(waveIndex, level, undefined, getPartyLuckValue(this.party));
} }
@ -1870,13 +1878,13 @@ export default class BattleScene extends SceneBase {
return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)]; return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)];
} }
generateRandomBiome(waveIndex: integer): Biome { generateRandomBiome(waveIndex: number): Biome {
const relWave = waveIndex % 250; const relWave = waveIndex % 250;
const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END);
const maxDepth = biomeDepths[Biome.END][0] - 2; const maxDepth = biomeDepths[Biome.END][0] - 2;
const depthWeights = new Array(maxDepth + 1).fill(null) const depthWeights = new Array(maxDepth + 1).fill(null)
.map((_, i: integer) => ((1 - Math.min(Math.abs((i / (maxDepth - 1)) - (relWave / 250)) + 0.25, 1)) / 0.75) * 250); .map((_, i: number) => ((1 - Math.min(Math.abs((i / (maxDepth - 1)) - (relWave / 250)) + 0.25, 1)) / 0.75) * 250);
const biomeThresholds: integer[] = []; const biomeThresholds: number[] = [];
let totalWeight = 0; let totalWeight = 0;
for (const biome of biomes) { for (const biome of biomes) {
totalWeight += Math.ceil(depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1]); totalWeight += Math.ceil(depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1]);
@ -2000,7 +2008,7 @@ export default class BattleScene extends SceneBase {
} }
} }
fadeOutBgm(duration: integer = 500, destroy: boolean = true): boolean { fadeOutBgm(duration: number = 500, destroy: boolean = true): boolean {
if (!this.bgm) { if (!this.bgm) {
return false; return false;
} }
@ -2067,7 +2075,7 @@ export default class BattleScene extends SceneBase {
} }
} }
playSoundWithoutBgm(soundName: string, pauseDuration?: integer): AnySound { playSoundWithoutBgm(soundName: string, pauseDuration?: number): AnySound {
this.bgmCache.add(soundName); this.bgmCache.add(soundName);
const resumeBgm = this.pauseBgm(); const resumeBgm = this.pauseBgm();
this.playSound(soundName); this.playSound(soundName);
@ -2084,8 +2092,11 @@ export default class BattleScene extends SceneBase {
return sound; return sound;
} }
/** The loop point of any given battle, mystery encounter, or title track, read as seconds and milliseconds. */
getBgmLoopPoint(bgmName: string): number { getBgmLoopPoint(bgmName: string): number {
switch (bgmName) { switch (bgmName) {
case "title": //Firel PokéRogue Title
return 46.500;
case "battle_kanto_champion": //B2W2 Kanto Champion Battle case "battle_kanto_champion": //B2W2 Kanto Champion Battle
return 13.950; return 13.950;
case "battle_johto_champion": //B2W2 Johto Champion Battle case "battle_johto_champion": //B2W2 Johto Champion Battle
@ -2102,10 +2113,14 @@ export default class BattleScene extends SceneBase {
return 10.145; return 10.145;
case "battle_kalos_champion": //XY Kalos Champion Battle case "battle_kalos_champion": //XY Kalos Champion Battle
return 10.380; return 10.380;
case "battle_champion_kukui": //SM Kukui Battle
return 15.784;
case "battle_alola_champion": //USUM Alola Champion Battle case "battle_alola_champion": //USUM Alola Champion Battle
return 13.025; return 13.025;
case "battle_galar_champion": //SWSH Galar Champion Battle case "battle_galar_champion": //SWSH Galar Champion Battle
return 61.635; return 61.635;
case "battle_mustard": //SWSH Mustard Battle
return 22.442;
case "battle_champion_geeta": //SV Champion Geeta Battle case "battle_champion_geeta": //SV Champion Geeta Battle
return 37.447; return 37.447;
case "battle_champion_nemona": //SV Champion Nemona Battle case "battle_champion_nemona": //SV Champion Nemona Battle
@ -2240,8 +2255,8 @@ export default class BattleScene extends SceneBase {
return 12.062; return 12.062;
case "battle_galactic_grunt": //BDSP Team Galactic Battle case "battle_galactic_grunt": //BDSP Team Galactic Battle
return 13.043; return 13.043;
case "battle_plasma_grunt": //BW Team Plasma Battle case "battle_plasma_grunt": //B2W2 Team Plasma Battle
return 12.974; return 14.758;
case "battle_flare_grunt": //XY Team Flare Battle case "battle_flare_grunt": //XY Team Flare Battle
return 4.228; return 4.228;
case "battle_aether_grunt": // SM Aether Foundation Battle case "battle_aether_grunt": // SM Aether Foundation Battle
@ -2254,6 +2269,8 @@ export default class BattleScene extends SceneBase {
return 133.362; return 133.362;
case "battle_galactic_admin": //BDSP Team Galactic Admin Battle case "battle_galactic_admin": //BDSP Team Galactic Admin Battle
return 11.997; return 11.997;
case "battle_colress": //B2W2 Colress Battle
return 12.234;
case "battle_skull_admin": //SM Team Skull Admin Battle case "battle_skull_admin": //SM Team Skull Admin Battle
return 15.463; return 15.463;
case "battle_oleana": //SWSH Oleana Battle case "battle_oleana": //SWSH Oleana Battle
@ -2518,7 +2535,7 @@ export default class BattleScene extends SceneBase {
* @param promptDelay optional param for MessagePhase constructor * @param promptDelay optional param for MessagePhase constructor
* @param defer boolean for which queue to add it to, false -> add to PhaseQueuePrepend, true -> nextCommandPhaseQueue * @param defer boolean for which queue to add it to, false -> add to PhaseQueuePrepend, true -> nextCommandPhaseQueue
*/ */
queueMessage(message: string, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null, defer?: boolean | null) { queueMessage(message: string, callbackDelay?: number | null, prompt?: boolean | null, promptDelay?: number | null, defer?: boolean | null) {
const phase = new MessagePhase(message, callbackDelay, prompt, promptDelay); const phase = new MessagePhase(message, callbackDelay, prompt, promptDelay);
if (!defer) { if (!defer) {
// adds to the end of PhaseQueuePrepend // adds to the end of PhaseQueuePrepend
@ -2540,14 +2557,14 @@ export default class BattleScene extends SceneBase {
this.phaseQueue.push(new TurnInitPhase()); this.phaseQueue.push(new TurnInitPhase());
} }
addMoney(amount: integer): void { addMoney(amount: number): void {
this.money = Math.min(this.money + amount, Number.MAX_SAFE_INTEGER); this.money = Math.min(this.money + amount, Number.MAX_SAFE_INTEGER);
this.updateMoneyText(); this.updateMoneyText();
this.animateMoneyChanged(true); this.animateMoneyChanged(true);
this.validateAchvs(MoneyAchv); this.validateAchvs(MoneyAchv);
} }
getWaveMoneyAmount(moneyMultiplier: number): integer { getWaveMoneyAmount(moneyMultiplier: number): number {
const waveIndex = this.currentBattle.waveIndex; const waveIndex = this.currentBattle.waveIndex;
const waveSetIndex = Math.ceil(waveIndex / 10) - 1; const waveSetIndex = Math.ceil(waveIndex / 10) - 1;
const moneyValue = Math.pow((waveSetIndex + 1 + (0.75 + (((waveIndex - 1) % 10) + 1) / 10)) * 100, 1 + 0.005 * waveSetIndex) * moneyMultiplier; const moneyValue = Math.pow((waveSetIndex + 1 + (0.75 + (((waveIndex - 1) % 10) + 1) / 10)) * 100, 1 + 0.005 * waveSetIndex) * moneyMultiplier;
@ -2744,7 +2761,7 @@ export default class BattleScene extends SceneBase {
}); });
} }
removePartyMemberModifiers(partyMemberIndex: integer): Promise<void> { removePartyMemberModifiers(partyMemberIndex: number): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
const pokemonId = this.getPlayerParty()[partyMemberIndex].id; const pokemonId = this.getPlayerParty()[partyMemberIndex].id;
const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId); const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId);
@ -2776,7 +2793,7 @@ export default class BattleScene extends SceneBase {
} }
} }
party.forEach((enemyPokemon: EnemyPokemon, i: integer) => { party.forEach((enemyPokemon: EnemyPokemon, i: number) => {
if (heldModifiersConfigs && i < heldModifiersConfigs.length && heldModifiersConfigs[i]) { if (heldModifiersConfigs && i < heldModifiersConfigs.length && heldModifiersConfigs[i]) {
heldModifiersConfigs[i].forEach(mt => { heldModifiersConfigs[i].forEach(mt => {
let modifier: PokemonHeldItemModifier; let modifier: PokemonHeldItemModifier;

View File

@ -578,14 +578,14 @@ export const classicFixedBattles: FixedBattleConfigs = {
[ClassicFixedBossWaves.EVIL_GRUNT_3]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) [ClassicFixedBossWaves.EVIL_GRUNT_3]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)),
[ClassicFixedBossWaves.EVIL_ADMIN_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) [ClassicFixedBossWaves.EVIL_ADMIN_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true)), .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true)),
[ClassicFixedBossWaves.RIVAL_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [ClassicFixedBossWaves.RIVAL_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_4, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_4, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
.setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }),
[ClassicFixedBossWaves.EVIL_GRUNT_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) [ClassicFixedBossWaves.EVIL_GRUNT_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)),
[ClassicFixedBossWaves.EVIL_ADMIN_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) [ClassicFixedBossWaves.EVIL_ADMIN_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true, 1)), .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true, 1)),
[ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE, TrainerType.PENNY ])) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE, TrainerType.PENNY ]))
.setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }),
@ -604,7 +604,7 @@ export const classicFixedBattles: FixedBattleConfigs = {
[ClassicFixedBossWaves.ELITE_FOUR_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) [ClassicFixedBossWaves.ELITE_FOUR_4]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL, TrainerType.DRAYTON ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL, TrainerType.DRAYTON ])),
[ClassicFixedBossWaves.CHAMPION]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) [ClassicFixedBossWaves.CHAMPION]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, [ TrainerType.KUKUI, TrainerType.HAU ], [ TrainerType.LEON, TrainerType.MUSTARD ], [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])),
[ClassicFixedBossWaves.RIVAL_6]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [ClassicFixedBossWaves.RIVAL_6]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_6, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setGetTrainerFunc(() => new Trainer(TrainerType.RIVAL_6, globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
.setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }) .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false })

View File

@ -51,13 +51,13 @@ export class Ability implements Localizable {
private nameAppend: string; private nameAppend: string;
public name: string; public name: string;
public description: string; public description: string;
public generation: integer; public generation: number;
public isBypassFaint: boolean; public isBypassFaint: boolean;
public isIgnorable: boolean; public isIgnorable: boolean;
public attrs: AbAttr[]; public attrs: AbAttr[];
public conditions: AbAttrCondition[]; public conditions: AbAttrCondition[];
constructor(id: Abilities, generation: integer) { constructor(id: Abilities, generation: number) {
this.id = id; this.id = id;
this.nameAppend = ""; this.nameAppend = "";
@ -221,9 +221,9 @@ export class PostBattleInitAbAttr extends AbAttr {
} }
export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr {
private formFunc: (p: Pokemon) => integer; private formFunc: (p: Pokemon) => number;
constructor(formFunc: ((p: Pokemon) => integer)) { constructor(formFunc: ((p: Pokemon) => number)) {
super(true); super(true);
this.formFunc = formFunc; this.formFunc = formFunc;
@ -491,9 +491,9 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr {
class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr {
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer; private turnCount: number;
constructor(immuneType: Type, tagType: BattlerTagType, turnCount: integer, condition?: AbAttrCondition) { constructor(immuneType: Type, tagType: BattlerTagType, turnCount: number, condition?: AbAttrCondition) {
super(immuneType, condition); super(immuneType, condition);
this.tagType = tagType; this.tagType = tagType;
@ -605,7 +605,7 @@ export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr {
} }
export class PostStatStageChangeAbAttr extends AbAttr { export class PostStatStageChangeAbAttr extends AbAttr {
applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statsChanged: BattleStat[], stagesChanged: integer, selfTarget: boolean, args: any[]): boolean | Promise<boolean> { applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statsChanged: BattleStat[], stagesChanged: number, selfTarget: boolean, args: any[]): boolean | Promise<boolean> {
return false; return false;
} }
} }
@ -866,10 +866,10 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr {
} }
export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr {
public chance: integer; public chance: number;
private effects: StatusEffect[]; private effects: StatusEffect[];
constructor(chance: integer, ...effects: StatusEffect[]) { constructor(chance: number, ...effects: StatusEffect[]) {
super(); super();
this.chance = chance; this.chance = chance;
@ -905,11 +905,11 @@ export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr
} }
export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr {
private chance: integer; private chance: number;
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer | undefined; private turnCount: number | undefined;
constructor(chance: integer, tagType: BattlerTagType, turnCount?: integer) { constructor(chance: number, tagType: BattlerTagType, turnCount?: number) {
super(); super();
this.tagType = tagType; this.tagType = tagType;
@ -959,9 +959,9 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr {
} }
export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { export class PostDefendContactDamageAbAttr extends PostDefendAbAttr {
private damageRatio: integer; private damageRatio: number;
constructor(damageRatio: integer) { constructor(damageRatio: number) {
super(); super();
this.damageRatio = damageRatio; this.damageRatio = damageRatio;
@ -993,9 +993,9 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr {
* @extends {PostDefendAbAttr} * @extends {PostDefendAbAttr}
*/ */
export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { export class PostDefendPerishSongAbAttr extends PostDefendAbAttr {
private turns: integer; private turns: number;
constructor(turns: integer) { constructor(turns: number) {
super(); super();
this.turns = turns; this.turns = turns;
@ -1101,11 +1101,11 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr {
} }
export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr {
private chance: integer; private chance: number;
private attacker: Pokemon; private attacker: Pokemon;
private move: Move; private move: Move;
constructor(chance: integer) { constructor(chance: number) {
super(); super();
this.chance = chance; this.chance = chance;
@ -1688,10 +1688,10 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr {
export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr {
private contactRequired: boolean; private contactRequired: boolean;
private chance: integer; private chance: number;
private effects: StatusEffect[]; private effects: StatusEffect[];
constructor(contactRequired: boolean, chance: integer, ...effects: StatusEffect[]) { constructor(contactRequired: boolean, chance: number, ...effects: StatusEffect[]) {
super(); super();
this.contactRequired = contactRequired; this.contactRequired = contactRequired;
@ -1715,18 +1715,18 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr {
} }
export class PostAttackContactApplyStatusEffectAbAttr extends PostAttackApplyStatusEffectAbAttr { export class PostAttackContactApplyStatusEffectAbAttr extends PostAttackApplyStatusEffectAbAttr {
constructor(chance: integer, ...effects: StatusEffect[]) { constructor(chance: number, ...effects: StatusEffect[]) {
super(true, chance, ...effects); super(true, chance, ...effects);
} }
} }
export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr {
private contactRequired: boolean; private contactRequired: boolean;
private chance: (user: Pokemon, target: Pokemon, move: Move) => integer; private chance: (user: Pokemon, target: Pokemon, move: Move) => number;
private effects: BattlerTagType[]; private effects: BattlerTagType[];
constructor(contactRequired: boolean, chance: (user: Pokemon, target: Pokemon, move: Move) => integer, ...effects: BattlerTagType[]) { constructor(contactRequired: boolean, chance: (user: Pokemon, target: Pokemon, move: Move) => number, ...effects: BattlerTagType[]) {
super(); super();
this.contactRequired = contactRequired; this.contactRequired = contactRequired;
@ -1863,9 +1863,9 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr {
} }
export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr {
private formFunc: (p: Pokemon) => integer; private formFunc: (p: Pokemon) => number;
constructor(formFunc: ((p: Pokemon) => integer)) { constructor(formFunc: ((p: Pokemon) => number)) {
super(true); super(true);
this.formFunc = formFunc; this.formFunc = formFunc;
@ -2081,9 +2081,9 @@ export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr {
export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr {
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer; private turnCount: number;
constructor(tagType: BattlerTagType, turnCount: integer, showAbility?: boolean) { constructor(tagType: BattlerTagType, turnCount: number, showAbility?: boolean) {
super(showAbility); super(showAbility);
this.tagType = tagType; this.tagType = tagType;
@ -2209,9 +2209,9 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr {
* @see {applyPostSummon} * @see {applyPostSummon}
*/ */
export class DownloadAbAttr extends PostSummonAbAttr { export class DownloadAbAttr extends PostSummonAbAttr {
private enemyDef: integer; private enemyDef: number;
private enemySpDef: integer; private enemySpDef: number;
private enemyCountTally: integer; private enemyCountTally: number;
private stats: BattleStat[]; private stats: BattleStat[];
/** /**
@ -2295,9 +2295,9 @@ export class PostSummonTerrainChangeAbAttr extends PostSummonAbAttr {
} }
export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { export class PostSummonFormChangeAbAttr extends PostSummonAbAttr {
private formFunc: (p: Pokemon) => integer; private formFunc: (p: Pokemon) => number;
constructor(formFunc: ((p: Pokemon) => integer)) { constructor(formFunc: ((p: Pokemon) => number)) {
super(true); super(true);
this.formFunc = formFunc; this.formFunc = formFunc;
@ -2643,18 +2643,75 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr {
} }
} }
export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr {
applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
if (!pokemon.isFullHp()) {
if (!simulated) {
const healAmount = Utils.toDmgValue(pokemon.getMaxHp() * 0.33);
pokemon.heal(healAmount);
pokemon.updateInfo();
}
return true;
}
return false;
}
}
/**
* Attribute for form changes that occur on switching out
* @extends PreSwitchOutAbAttr
* @see {@linkcode applyPreSwitchOut}
*/
export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr {
private formFunc: (p: Pokemon) => number;
constructor(formFunc: ((p: Pokemon) => number)) {
super();
this.formFunc = formFunc;
}
/**
* On switch out, trigger the form change to the one defined in the ability
* @param pokemon The pokemon switching out and changing form {@linkcode Pokemon}
* @param passive N/A
* @param args N/A
* @returns true if the form change was successful
*/
applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
const formIndex = this.formFunc(pokemon);
if (formIndex !== pokemon.formIndex) {
if (!simulated) {
globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false);
}
return true;
}
return false;
}
}
export class PreLeaveFieldAbAttr extends AbAttr {
applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
return false;
}
}
/** /**
* Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon switching out. * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon switching out.
*/ */
export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr {
/** /**
* @param pokemon The {@linkcode Pokemon} with the ability * @param pokemon The {@linkcode Pokemon} with the ability
* @param passive N/A * @param passive N/A
* @param args N/A * @param args N/A
* @returns {boolean} Returns true if the weather clears, otherwise false. * @returns Returns `true` if the weather clears, otherwise `false`.
*/ */
applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> { applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
const weatherType = globalScene.arena.weather?.weatherType; const weatherType = globalScene.arena.weather?.weatherType;
let turnOffWeather = false; let turnOffWeather = false;
@ -2693,57 +2750,6 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr {
} }
} }
export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr {
applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
if (!pokemon.isFullHp()) {
if (!simulated) {
const healAmount = Utils.toDmgValue(pokemon.getMaxHp() * 0.33);
pokemon.heal(healAmount);
pokemon.updateInfo();
}
return true;
}
return false;
}
}
/**
* Attribute for form changes that occur on switching out
* @extends PreSwitchOutAbAttr
* @see {@linkcode applyPreSwitchOut}
*/
export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr {
private formFunc: (p: Pokemon) => integer;
constructor(formFunc: ((p: Pokemon) => integer)) {
super();
this.formFunc = formFunc;
}
/**
* On switch out, trigger the form change to the one defined in the ability
* @param pokemon The pokemon switching out and changing form {@linkcode Pokemon}
* @param passive N/A
* @param args N/A
* @returns true if the form change was successful
*/
applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
const formIndex = this.formFunc(pokemon);
if (formIndex !== pokemon.formIndex) {
if (!simulated) {
globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false);
}
return true;
}
return false;
}
}
export class PreStatStageChangeAbAttr extends AbAttr { export class PreStatStageChangeAbAttr extends AbAttr {
applyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise<boolean> { applyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise<boolean> {
return false; return false;
@ -2861,7 +2867,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr {
* @returns A boolean indicating the result of the status application. * @returns A boolean indicating the result of the status application.
*/ */
applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): boolean { applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): boolean {
if (this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) { if (effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) {
cancelled.value = true; cancelled.value = true;
return true; return true;
} }
@ -3338,10 +3344,10 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr {
export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr { export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr {
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer; private turnCount: number;
private weatherTypes: WeatherType[]; private weatherTypes: WeatherType[];
constructor(tagType: BattlerTagType, turnCount: integer, ...weatherTypes: WeatherType[]) { constructor(tagType: BattlerTagType, turnCount: number, ...weatherTypes: WeatherType[]) {
super(); super();
this.tagType = tagType; this.tagType = tagType;
@ -3382,9 +3388,9 @@ export class PostWeatherLapseAbAttr extends AbAttr {
} }
export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr {
private healFactor: integer; private healFactor: number;
constructor(healFactor: integer, ...weatherTypes: WeatherType[]) { constructor(healFactor: number, ...weatherTypes: WeatherType[]) {
super(...weatherTypes); super(...weatherTypes);
this.healFactor = healFactor; this.healFactor = healFactor;
@ -3405,9 +3411,9 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr {
} }
export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr {
private damageFactor: integer; private damageFactor: number;
constructor(damageFactor: integer, ...weatherTypes: WeatherType[]) { constructor(damageFactor: number, ...weatherTypes: WeatherType[]) {
super(...weatherTypes); super(...weatherTypes);
this.damageFactor = damageFactor; this.damageFactor = damageFactor;
@ -3436,10 +3442,10 @@ export class PostTerrainChangeAbAttr extends AbAttr {
export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr { export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr {
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer; private turnCount: number;
private terrainTypes: TerrainType[]; private terrainTypes: TerrainType[];
constructor(tagType: BattlerTagType, turnCount: integer, ...terrainTypes: TerrainType[]) { constructor(tagType: BattlerTagType, turnCount: number, ...terrainTypes: TerrainType[]) {
super(); super();
this.tagType = tagType; this.tagType = tagType;
@ -3692,9 +3698,9 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr {
} }
export class PostTurnFormChangeAbAttr extends PostTurnAbAttr { export class PostTurnFormChangeAbAttr extends PostTurnAbAttr {
private formFunc: (p: Pokemon) => integer; private formFunc: (p: Pokemon) => number;
constructor(formFunc: ((p: Pokemon) => integer)) { constructor(formFunc: ((p: Pokemon) => number)) {
super(true); super(true);
this.formFunc = formFunc; this.formFunc = formFunc;
@ -3916,9 +3922,9 @@ export class PostItemLostApplyBattlerTagAbAttr extends PostItemLostAbAttr {
} }
export class StatStageChangeMultiplierAbAttr extends AbAttr { export class StatStageChangeMultiplierAbAttr extends AbAttr {
private multiplier: integer; private multiplier: number;
constructor(multiplier: integer) { constructor(multiplier: number) {
super(true); super(true);
this.multiplier = multiplier; this.multiplier = multiplier;
@ -4171,63 +4177,10 @@ export class PostFaintUnsuppressedWeatherFormChangeAbAttr extends PostFaintAbAtt
} }
} }
/**
* Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon fainting
*/
export class PostFaintClearWeatherAbAttr extends PostFaintAbAttr {
/**
* @param pokemon The {@linkcode Pokemon} with the ability
* @param passive N/A
* @param attacker N/A
* @param move N/A
* @param hitResult N/A
* @param args N/A
* @returns {boolean} Returns true if the weather clears, otherwise false.
*/
applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean {
const weatherType = globalScene.arena.weather?.weatherType;
let turnOffWeather = false;
// Clear weather only if user's ability matches the weather and no other pokemon has the ability.
switch (weatherType) {
case (WeatherType.HARSH_SUN):
if (pokemon.hasAbility(Abilities.DESOLATE_LAND)
&& globalScene.getField(true).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) {
turnOffWeather = true;
}
break;
case (WeatherType.HEAVY_RAIN):
if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA)
&& globalScene.getField(true).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) {
turnOffWeather = true;
}
break;
case (WeatherType.STRONG_WINDS):
if (pokemon.hasAbility(Abilities.DELTA_STREAM)
&& globalScene.getField(true).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) {
turnOffWeather = true;
}
break;
}
if (simulated) {
return turnOffWeather;
}
if (turnOffWeather) {
globalScene.arena.trySetWeather(WeatherType.NONE, false);
return true;
}
return false;
}
}
export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { export class PostFaintContactDamageAbAttr extends PostFaintAbAttr {
private damageRatio: integer; private damageRatio: number;
constructor(damageRatio: integer) { constructor(damageRatio: number) {
super(); super();
this.damageRatio = damageRatio; this.damageRatio = damageRatio;
@ -4404,9 +4357,9 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr {
* Used for Heavy Metal (doubling weight) and Light Metal (halving weight) * Used for Heavy Metal (doubling weight) and Light Metal (halving weight)
*/ */
export class WeightMultiplierAbAttr extends AbAttr { export class WeightMultiplierAbAttr extends AbAttr {
private multiplier: integer; private multiplier: number;
constructor(multiplier: integer) { constructor(multiplier: number) {
super(); super();
this.multiplier = multiplier; this.multiplier = multiplier;
@ -4700,12 +4653,12 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr {
* @extends AbAttr * @extends AbAttr
*/ */
export class BypassSpeedChanceAbAttr extends AbAttr { export class BypassSpeedChanceAbAttr extends AbAttr {
public chance: integer; public chance: number;
/** /**
* @param {integer} chance probability of ability being active. * @param {number} chance probability of ability being active.
*/ */
constructor(chance: integer) { constructor(chance: number) {
super(true); super(true);
this.chance = chance; this.chance = chance;
} }
@ -5229,13 +5182,18 @@ export function applyPreSwitchOutAbAttrs(attrType: Constructor<PreSwitchOutAbAtt
return applyAbAttrsInternal<PreSwitchOutAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), args, true, simulated); return applyAbAttrsInternal<PreSwitchOutAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), args, true, simulated);
} }
export function applyPreLeaveFieldAbAttrs(attrType: Constructor<PreLeaveFieldAbAttr>,
pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise<void> {
return applyAbAttrsInternal<PreLeaveFieldAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, args), args, true, simulated);
}
export function applyPreStatStageChangeAbAttrs(attrType: Constructor<PreStatStageChangeAbAttr>, export function applyPreStatStageChangeAbAttrs(attrType: Constructor<PreStatStageChangeAbAttr>,
pokemon: Pokemon | null, stat: BattleStat, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise<void> { pokemon: Pokemon | null, stat: BattleStat, cancelled: Utils.BooleanHolder, simulated: boolean = false, ...args: any[]): Promise<void> {
return applyAbAttrsInternal<PreStatStageChangeAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), args, false, simulated); return applyAbAttrsInternal<PreStatStageChangeAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), args, false, simulated);
} }
export function applyPostStatStageChangeAbAttrs(attrType: Constructor<PostStatStageChangeAbAttr>, export function applyPostStatStageChangeAbAttrs(attrType: Constructor<PostStatStageChangeAbAttr>,
pokemon: Pokemon, stats: BattleStat[], stages: integer, selfTarget: boolean, simulated: boolean = false, ...args: any[]): Promise<void> { pokemon: Pokemon, stats: BattleStat[], stages: number, selfTarget: boolean, simulated: boolean = false, ...args: any[]): Promise<void> {
return applyAbAttrsInternal<PostStatStageChangeAbAttr>(attrType, pokemon, (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), args, false, simulated); return applyAbAttrsInternal<PostStatStageChangeAbAttr>(attrType, pokemon, (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), args, false, simulated);
} }
@ -5912,20 +5870,17 @@ export function initAbilities() {
new Ability(Abilities.PRIMORDIAL_SEA, 6) new Ability(Abilities.PRIMORDIAL_SEA, 6)
.attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN)
.attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HEAVY_RAIN)
.attr(PreSwitchOutClearWeatherAbAttr) .attr(PreLeaveFieldClearWeatherAbAttr)
.attr(PostFaintClearWeatherAbAttr)
.bypassFaint(), .bypassFaint(),
new Ability(Abilities.DESOLATE_LAND, 6) new Ability(Abilities.DESOLATE_LAND, 6)
.attr(PostSummonWeatherChangeAbAttr, WeatherType.HARSH_SUN) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HARSH_SUN)
.attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HARSH_SUN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HARSH_SUN)
.attr(PreSwitchOutClearWeatherAbAttr) .attr(PreLeaveFieldClearWeatherAbAttr)
.attr(PostFaintClearWeatherAbAttr)
.bypassFaint(), .bypassFaint(),
new Ability(Abilities.DELTA_STREAM, 6) new Ability(Abilities.DELTA_STREAM, 6)
.attr(PostSummonWeatherChangeAbAttr, WeatherType.STRONG_WINDS) .attr(PostSummonWeatherChangeAbAttr, WeatherType.STRONG_WINDS)
.attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.STRONG_WINDS) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.STRONG_WINDS)
.attr(PreSwitchOutClearWeatherAbAttr) .attr(PreLeaveFieldClearWeatherAbAttr)
.attr(PostFaintClearWeatherAbAttr)
.bypassFaint(), .bypassFaint(),
new Ability(Abilities.STAMINA, 7) new Ability(Abilities.STAMINA, 7)
.attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1), .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1),
@ -5943,12 +5898,14 @@ export function initAbilities() {
.attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostBattleInitFormChangeAbAttr, () => 0)
.attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0))
.attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0))
.conditionalAttr(p => p.formIndex !== 7, StatusEffectImmunityAbAttr)
.conditionalAttr(p => p.formIndex !== 7, BattlerTagImmunityAbAttr, BattlerTagType.DROWSY)
.attr(UncopiableAbilityAbAttr) .attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr) .attr(UnswappableAbilityAbAttr)
.attr(UnsuppressableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr)
.attr(NoFusionAbilityAbAttr) .attr(NoFusionAbilityAbAttr)
.bypassFaint() .attr(NoTransformAbilityAbAttr)
.partial(), // Meteor form should protect against status effects and yawn .bypassFaint(),
new Ability(Abilities.STAKEOUT, 7) new Ability(Abilities.STAKEOUT, 7)
.attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2), .attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2),
new Ability(Abilities.WATER_BUBBLE, 7) new Ability(Abilities.WATER_BUBBLE, 7)
@ -6287,9 +6244,8 @@ export function initAbilities() {
.attr(NoTransformAbilityAbAttr) .attr(NoTransformAbilityAbAttr)
.partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages
new Ability(Abilities.GOOD_AS_GOLD, 9) new Ability(Abilities.GOOD_AS_GOLD, 9)
.attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget))
.ignorable() .ignorable(),
.partial(), // Lots of weird interactions with moves and abilities such as negating status moves that target the field
new Ability(Abilities.VESSEL_OF_RUIN, 9) new Ability(Abilities.VESSEL_OF_RUIN, 9)
.attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75) .attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75)
.attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPATK)) })) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPATK)) }))

View File

@ -26,11 +26,11 @@ export function getBiomeName(biome: Biome | -1) {
} }
interface BiomeLinks { interface BiomeLinks {
[key: integer]: Biome | (Biome | [Biome, integer])[] [key: number]: Biome | (Biome | [Biome, number])[]
} }
interface BiomeDepths { interface BiomeDepths {
[key: integer]: [integer, integer] [key: number]: [number, number]
} }
export const biomeLinks: BiomeLinks = { export const biomeLinks: BiomeLinks = {
@ -87,27 +87,39 @@ export enum BiomePoolTier {
export const uncatchableSpecies: Species[] = []; export const uncatchableSpecies: Species[] = [];
export interface SpeciesTree { export interface SpeciesTree {
[key: integer]: Species[] [key: number]: Species[]
} }
export interface PokemonPools { export interface PokemonPools {
[key: integer]: (Species | SpeciesTree)[] [key: number]: (Species | SpeciesTree)[]
} }
export interface BiomeTierPokemonPools { export interface BiomeTierPokemonPools {
[key: integer]: PokemonPools [key: number]: PokemonPools
} }
export interface BiomePokemonPools { export interface BiomePokemonPools {
[key: integer]: BiomeTierPokemonPools [key: number]: BiomeTierPokemonPools
} }
export interface BiomeTierTod {
biome: Biome,
tier: BiomePoolTier,
tod: TimeOfDay[]
}
export interface CatchableSpecies{
[key: number]: BiomeTierTod[]
}
export const catchableSpecies: CatchableSpecies = {};
export interface BiomeTierTrainerPools { export interface BiomeTierTrainerPools {
[key: integer]: TrainerType[] [key: number]: TrainerType[]
} }
export interface BiomeTrainerPools { export interface BiomeTrainerPools {
[key: integer]: BiomeTierTrainerPools [key: number]: BiomeTierTrainerPools
} }
export const biomePokemonPools: BiomePokemonPools = { export const biomePokemonPools: BiomePokemonPools = {
@ -7663,15 +7675,15 @@ export function initBiomes() {
biomeDepths[Biome.TOWN] = [ 0, 1 ]; biomeDepths[Biome.TOWN] = [ 0, 1 ];
const traverseBiome = (biome: Biome, depth: integer) => { const traverseBiome = (biome: Biome, depth: number) => {
if (biome === Biome.END) { if (biome === Biome.END) {
const biomeList = Object.keys(Biome).filter(key => !isNaN(Number(key))); const biomeList = Object.keys(Biome).filter(key => !isNaN(Number(key)));
biomeList.pop(); // Removes Biome.END from the list biomeList.pop(); // Removes Biome.END from the list
const randIndex = Utils.randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN const randIndex = Utils.randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN
biome = Biome[biomeList[randIndex]]; biome = Biome[biomeList[randIndex]];
} }
const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome]) const linkedBiomes: (Biome | [ Biome, number ])[] = Array.isArray(biomeLinks[biome])
? biomeLinks[biome] as (Biome | [ Biome, integer ])[] ? biomeLinks[biome] as (Biome | [ Biome, number ])[]
: [ biomeLinks[biome] as Biome ]; : [ biomeLinks[biome] as Biome ];
for (const linkedBiomeEntry of linkedBiomes) { for (const linkedBiomeEntry of linkedBiomes) {
const linkedBiome = !Array.isArray(linkedBiomeEntry) const linkedBiome = !Array.isArray(linkedBiomeEntry)
@ -7688,7 +7700,7 @@ export function initBiomes() {
}; };
traverseBiome(Biome.TOWN, 0); traverseBiome(Biome.TOWN, 0);
biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: integer, value: integer) => Math.max(max, value), 0) + 1, 1 ]; biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ];
for (const biome of Utils.getEnumValues(Biome)) { for (const biome of Utils.getEnumValues(Biome)) {
biomePokemonPools[biome] = {}; biomePokemonPools[biome] = {};
@ -7716,6 +7728,9 @@ export function initBiomes() {
uncatchableSpecies.push(speciesId); uncatchableSpecies.push(speciesId);
} }
// array of biome options for the current species
catchableSpecies[speciesId] = [];
for (const b of biomeEntries) { for (const b of biomeEntries) {
const biome = b[0]; const biome = b[0];
const tier = b[1]; const tier = b[1];
@ -7725,6 +7740,12 @@ export function initBiomes() {
: [ b[2] ] : [ b[2] ]
: [ TimeOfDay.ALL ]; : [ TimeOfDay.ALL ];
catchableSpecies[speciesId].push({
biome: biome as Biome,
tier: tier as BiomePoolTier,
tod: timesOfDay as TimeOfDay[]
});
for (const tod of timesOfDay) { for (const tod of timesOfDay) {
if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod)) { if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod)) {
continue; continue;

File diff suppressed because it is too large Load Diff

View File

@ -77,9 +77,9 @@ export enum EvolutionItem {
/** /**
* Pokemon Evolution tuple type consisting of: * Pokemon Evolution tuple type consisting of:
* @property 0 {@linkcode Species} The species of the Pokemon. * @property 0 {@linkcode Species} The species of the Pokemon.
* @property 1 {@linkcode integer} The level at which the Pokemon evolves. * @property 1 {@linkcode number} The level at which the Pokemon evolves.
*/ */
export type EvolutionLevel = [species: Species, level: integer]; export type EvolutionLevel = [species: Species, level: number];
export type EvolutionConditionPredicate = (p: Pokemon) => boolean; export type EvolutionConditionPredicate = (p: Pokemon) => boolean;
export type EvolutionConditionEnforceFunc = (p: Pokemon) => void; export type EvolutionConditionEnforceFunc = (p: Pokemon) => void;
@ -88,12 +88,12 @@ export class SpeciesFormEvolution {
public speciesId: Species; public speciesId: Species;
public preFormKey: string | null; public preFormKey: string | null;
public evoFormKey: string | null; public evoFormKey: string | null;
public level: integer; public level: number;
public item: EvolutionItem | null; public item: EvolutionItem | null;
public condition: SpeciesEvolutionCondition | null; public condition: SpeciesEvolutionCondition | null;
public wildDelay: SpeciesWildEvolutionDelay; public wildDelay: SpeciesWildEvolutionDelay;
constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: integer, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) {
this.speciesId = speciesId; this.speciesId = speciesId;
this.preFormKey = preFormKey; this.preFormKey = preFormKey;
this.evoFormKey = evoFormKey; this.evoFormKey = evoFormKey;
@ -105,7 +105,7 @@ export class SpeciesFormEvolution {
} }
export class SpeciesEvolution extends SpeciesFormEvolution { export class SpeciesEvolution extends SpeciesFormEvolution {
constructor(speciesId: Species, level: integer, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { constructor(speciesId: Species, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) {
super(speciesId, null, null, level, item, condition, wildDelay); super(speciesId, null, null, level, item, condition, wildDelay);
} }
} }
@ -169,7 +169,7 @@ class MoveEvolutionCondition extends SpeciesEvolutionCondition {
} }
class FriendshipEvolutionCondition extends SpeciesEvolutionCondition { class FriendshipEvolutionCondition extends SpeciesEvolutionCondition {
public amount: integer; public amount: number;
constructor(amount: number) { constructor(amount: number) {
super(p => p.friendship >= amount); super(p => p.friendship >= amount);
this.amount = amount; this.amount = amount;
@ -178,7 +178,7 @@ class FriendshipEvolutionCondition extends SpeciesEvolutionCondition {
} }
class FriendshipTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { class FriendshipTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition {
public amount: integer; public amount: number;
public timesOfDay: TimeOfDay[]; public timesOfDay: TimeOfDay[];
constructor(amount: number, tod: "day" | "night") { constructor(amount: number, tod: "day" | "night") {
if (tod === "day") { if (tod === "day") {
@ -197,7 +197,7 @@ class FriendshipTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition {
} }
class FriendshipMoveTypeEvolutionCondition extends SpeciesEvolutionCondition { class FriendshipMoveTypeEvolutionCondition extends SpeciesEvolutionCondition {
public amount: integer; public amount: number;
public type: Type; public type: Type;
constructor(amount: number, type: Type) { constructor(amount: number, type: Type) {
super(p => p.friendship >= amount && !!p.getMoveset().find(m => m?.getMove().type === type)); super(p => p.friendship >= amount && !!p.getMoveset().find(m => m?.getMove().type === type));

View File

@ -1,18 +1,18 @@
import { Moves } from "#enums/moves"; import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
export type LevelMoves = ([integer, Moves])[]; export type LevelMoves = ([number, Moves])[];
interface PokemonSpeciesLevelMoves { interface PokemonSpeciesLevelMoves {
[key: integer]: LevelMoves [key: number]: LevelMoves
} }
interface PokemonFormLevelMoves { interface PokemonFormLevelMoves {
[key: integer]: LevelMoves [key: number]: LevelMoves
} }
interface PokemonSpeciesFormLevelMoves { interface PokemonSpeciesFormLevelMoves {
[key: integer]: PokemonFormLevelMoves [key: number]: PokemonFormLevelMoves
} }
/** Moves that can only be learned with a memory-mushroom */ /** Moves that can only be learned with a memory-mushroom */

View File

@ -3,7 +3,7 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
interface TmSpecies { interface TmSpecies {
[key: integer]: Array<Species | Array<Species | string>> [key: number]: Array<Species | Array<Species | string>>
} }
export const reverseCompatibleTms: Moves[] = [];/*[ export const reverseCompatibleTms: Moves[] = [];/*[
@ -68433,8 +68433,48 @@ export const tmSpecies: TmSpecies = {
], ],
}; };
interface SpeciesTmMoves {
[key: number]: (Moves | [string | Species, Moves])[];
}
function transposeTmSpecies(): SpeciesTmMoves {
const flipped: SpeciesTmMoves = {};
for (const move in tmSpecies) {
const moveKey = Number(move);
const speciesList = tmSpecies[move];
for (const species of speciesList) {
if (Array.isArray(species)) {
// Extract base species and all associated forms
const [ baseSpecies, ...forms ] = species;
const speciesKey = Number(baseSpecies);
if (!flipped[speciesKey]) {
flipped[speciesKey] = [];
}
for (const form of forms) {
flipped[speciesKey].push([ form, moveKey ]);
}
} else {
const speciesKey = Number(species);
if (!flipped[speciesKey]) {
flipped[speciesKey] = [];
}
flipped[speciesKey].push(moveKey);
}
}
}
return flipped;
}
export const speciesTmMoves: SpeciesTmMoves = transposeTmSpecies();
interface TmPoolTiers { interface TmPoolTiers {
[key: integer]: ModifierTier [key: number]: ModifierTier
} }
export const tmPoolTiers: TmPoolTiers = { export const tmPoolTiers: TmPoolTiers = {

View File

@ -106,15 +106,15 @@ export enum CommonAnim {
} }
export class AnimConfig { export class AnimConfig {
public id: integer; public id: number;
public graphic: string; public graphic: string;
public frames: AnimFrame[][]; public frames: AnimFrame[][];
public frameTimedEvents: Map<integer, AnimTimedEvent[]>; public frameTimedEvents: Map<number, AnimTimedEvent[]>;
public position: integer; public position: number;
public hue: integer; public hue: number;
constructor(source?: any) { constructor(source?: any) {
this.frameTimedEvents = new Map<integer, AnimTimedEvent[]>; this.frameTimedEvents = new Map<number, AnimTimedEvent[]>;
if (source) { if (source) {
this.id = source.id; this.id = source.id;
@ -195,18 +195,18 @@ class AnimFrame {
public visible: boolean; public visible: boolean;
public blendType: AnimBlendType; public blendType: AnimBlendType;
public target: AnimFrameTarget; public target: AnimFrameTarget;
public graphicFrame: integer; public graphicFrame: number;
public opacity: integer; public opacity: number;
public color: integer[]; public color: number[];
public tone: integer[]; public tone: number[];
public flash: integer[]; public flash: number[];
public locked: boolean; public locked: boolean;
public priority: integer; public priority: number;
public focus: AnimFocus; public focus: AnimFocus;
constructor(x: number, y: number, zoomX: number, zoomY: number, angle: number, mirror: boolean, visible: boolean, blendType: AnimBlendType, pattern: integer, constructor(x: number, y: number, zoomX: number, zoomY: number, angle: number, mirror: boolean, visible: boolean, blendType: AnimBlendType, pattern: number,
opacity: integer, colorR: integer, colorG: integer, colorB: integer, colorA: integer, toneR: integer, toneG: integer, toneB: integer, toneA: integer, opacity: number, colorR: number, colorG: number, colorB: number, colorA: number, toneR: number, toneG: number, toneB: number, toneA: number,
flashR: integer, flashG: integer, flashB: integer, flashA: integer, locked: boolean, priority: integer, focus: AnimFocus, init?: boolean) { flashR: number, flashG: number, flashB: number, flashA: number, locked: boolean, priority: number, focus: AnimFocus, init?: boolean) {
this.x = !init ? ((x || 0) - 128) * 0.5 : x; this.x = !init ? ((x || 0) - 128) * 0.5 : x;
this.y = !init ? ((y || 0) - 224) * 0.5 : y; this.y = !init ? ((y || 0) - 224) * 0.5 : y;
if (zoomX) { if (zoomX) {
@ -288,9 +288,9 @@ class AnimFrame {
class ImportedAnimFrame extends AnimFrame { class ImportedAnimFrame extends AnimFrame {
constructor(source: any) { constructor(source: any) {
const color: integer[] = source.color || [ 0, 0, 0, 0 ]; const color: number[] = source.color || [ 0, 0, 0, 0 ];
const tone: integer[] = source.tone || [ 0, 0, 0, 0 ]; const tone: number[] = source.tone || [ 0, 0, 0, 0 ];
const flash: integer[] = source.flash || [ 0, 0, 0, 0 ]; const flash: number[] = source.flash || [ 0, 0, 0, 0 ];
super(source.x, source.y, source.zoomX, source.zoomY, source.angle, source.mirror, source.visible, source.blendType, source.graphicFrame, source.opacity, color[0], color[1], color[2], color[3], tone[0], tone[1], tone[2], tone[3], flash[0], flash[1], flash[2], flash[3], source.locked, source.priority, source.focus, true); super(source.x, source.y, source.zoomX, source.zoomY, source.angle, source.mirror, source.visible, source.blendType, source.graphicFrame, source.opacity, color[0], color[1], color[2], color[3], tone[0], tone[1], tone[2], tone[3], flash[0], flash[1], flash[2], flash[3], source.locked, source.priority, source.focus, true);
this.target = source.target; this.target = source.target;
this.graphicFrame = source.graphicFrame; this.graphicFrame = source.graphicFrame;
@ -298,15 +298,15 @@ class ImportedAnimFrame extends AnimFrame {
} }
abstract class AnimTimedEvent { abstract class AnimTimedEvent {
public frameIndex: integer; public frameIndex: number;
public resourceName: string; public resourceName: string;
constructor(frameIndex: integer, resourceName: string) { constructor(frameIndex: number, resourceName: string) {
this.frameIndex = frameIndex; this.frameIndex = frameIndex;
this.resourceName = resourceName; this.resourceName = resourceName;
} }
abstract execute(battleAnim: BattleAnim, priority?: number): integer; abstract execute(battleAnim: BattleAnim, priority?: number): number;
abstract getEventType(): string; abstract getEventType(): string;
} }
@ -315,7 +315,7 @@ class AnimTimedSoundEvent extends AnimTimedEvent {
public volume: number = 100; public volume: number = 100;
public pitch: number = 100; public pitch: number = 100;
constructor(frameIndex: integer, resourceName: string, source?: any) { constructor(frameIndex: number, resourceName: string, source?: any) {
super(frameIndex, resourceName); super(frameIndex, resourceName);
if (source) { if (source) {
@ -324,7 +324,7 @@ class AnimTimedSoundEvent extends AnimTimedEvent {
} }
} }
execute(battleAnim: BattleAnim, priority?: number): integer { execute(battleAnim: BattleAnim, priority?: number): number {
const soundConfig = { rate: (this.pitch * 0.01), volume: (this.volume * 0.01) }; const soundConfig = { rate: (this.pitch * 0.01), volume: (this.volume * 0.01) };
if (this.resourceName) { if (this.resourceName) {
try { try {
@ -346,20 +346,20 @@ class AnimTimedSoundEvent extends AnimTimedEvent {
abstract class AnimTimedBgEvent extends AnimTimedEvent { abstract class AnimTimedBgEvent extends AnimTimedEvent {
public bgX: number = 0; public bgX: number = 0;
public bgY: number = 0; public bgY: number = 0;
public opacity: integer = 0; public opacity: number = 0;
/*public colorRed: integer = 0; /*public colorRed: number = 0;
public colorGreen: integer = 0; public colorGreen: number = 0;
public colorBlue: integer = 0; public colorBlue: number = 0;
public colorAlpha: integer = 0;*/ public colorAlpha: number = 0;*/
public duration: integer = 0; public duration: number = 0;
/*public flashScope: integer = 0; /*public flashScope: number = 0;
public flashRed: integer = 0; public flashRed: number = 0;
public flashGreen: integer = 0; public flashGreen: number = 0;
public flashBlue: integer = 0; public flashBlue: number = 0;
public flashAlpha: integer = 0; public flashAlpha: number = 0;
public flashDuration: integer = 0;*/ public flashDuration: number = 0;*/
constructor(frameIndex: integer, resourceName: string, source: any) { constructor(frameIndex: number, resourceName: string, source: any) {
super(frameIndex, resourceName); super(frameIndex, resourceName);
if (source) { if (source) {
@ -382,11 +382,11 @@ abstract class AnimTimedBgEvent extends AnimTimedEvent {
} }
class AnimTimedUpdateBgEvent extends AnimTimedBgEvent { class AnimTimedUpdateBgEvent extends AnimTimedBgEvent {
constructor(frameIndex: integer, resourceName: string, source?: any) { constructor(frameIndex: number, resourceName: string, source?: any) {
super(frameIndex, resourceName, source); super(frameIndex, resourceName, source);
} }
execute(moveAnim: MoveAnim, priority?: number): integer { execute(moveAnim: MoveAnim, priority?: number): number {
const tweenProps = {}; const tweenProps = {};
if (this.bgX !== undefined) { if (this.bgX !== undefined) {
tweenProps["x"] = (this.bgX * 0.5) - 320; tweenProps["x"] = (this.bgX * 0.5) - 320;
@ -412,11 +412,11 @@ class AnimTimedUpdateBgEvent extends AnimTimedBgEvent {
} }
class AnimTimedAddBgEvent extends AnimTimedBgEvent { class AnimTimedAddBgEvent extends AnimTimedBgEvent {
constructor(frameIndex: integer, resourceName: string, source?: any) { constructor(frameIndex: number, resourceName: string, source?: any) {
super(frameIndex, resourceName, source); super(frameIndex, resourceName, source);
} }
execute(moveAnim: MoveAnim, priority?: number): integer { execute(moveAnim: MoveAnim, priority?: number): number {
if (moveAnim.bgSprite) { if (moveAnim.bgSprite) {
moveAnim.bgSprite.destroy(); moveAnim.bgSprite.destroy();
} }
@ -737,7 +737,7 @@ function isReversed(src1: number, src2: number, dst1: number, dst2: number) {
} }
interface SpriteCache { interface SpriteCache {
[key: integer]: Phaser.GameObjects.Sprite[] [key: number]: Phaser.GameObjects.Sprite[]
} }
export abstract class BattleAnim { export abstract class BattleAnim {
@ -774,8 +774,8 @@ export abstract class BattleAnim {
return false; return false;
} }
private getGraphicFrameData(frames: AnimFrame[], onSubstitute?: boolean): Map<integer, Map<AnimFrameTarget, GraphicFrameData>> { private getGraphicFrameData(frames: AnimFrame[], onSubstitute?: boolean): Map<number, Map<AnimFrameTarget, GraphicFrameData>> {
const ret: Map<integer, Map<AnimFrameTarget, GraphicFrameData>> = new Map([ const ret: Map<number, Map<AnimFrameTarget, GraphicFrameData>> = new Map([
[ AnimFrameTarget.GRAPHIC, new Map<AnimFrameTarget, GraphicFrameData>() ], [ AnimFrameTarget.GRAPHIC, new Map<AnimFrameTarget, GraphicFrameData>() ],
[ AnimFrameTarget.USER, new Map<AnimFrameTarget, GraphicFrameData>() ], [ AnimFrameTarget.USER, new Map<AnimFrameTarget, GraphicFrameData>() ],
[ AnimFrameTarget.TARGET, new Map<AnimFrameTarget, GraphicFrameData>() ] [ AnimFrameTarget.TARGET, new Map<AnimFrameTarget, GraphicFrameData>() ]
@ -853,7 +853,7 @@ export abstract class BattleAnim {
[AnimFrameTarget.USER]: [], [AnimFrameTarget.USER]: [],
[AnimFrameTarget.TARGET]: [] [AnimFrameTarget.TARGET]: []
}; };
const spritePriorities: integer[] = []; const spritePriorities: number[] = [];
const cleanUpAndComplete = () => { const cleanUpAndComplete = () => {
userSprite.setPosition(0, 0); userSprite.setPosition(0, 0);
@ -993,7 +993,7 @@ export abstract class BattleAnim {
const moveSprite = sprites[graphicIndex]; const moveSprite = sprites[graphicIndex];
if (spritePriorities[graphicIndex] !== frame.priority) { if (spritePriorities[graphicIndex] !== frame.priority) {
spritePriorities[graphicIndex] = frame.priority; spritePriorities[graphicIndex] = frame.priority;
const setSpritePriority = (priority: integer) => { const setSpritePriority = (priority: number) => {
switch (priority) { switch (priority) {
case 0: case 0:
globalScene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, globalScene.getEnemyPokemon(false) ?? globalScene.getPlayerPokemon(false)!); // TODO: is this bang correct? globalScene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, globalScene.getEnemyPokemon(false) ?? globalScene.getPlayerPokemon(false)!); // TODO: is this bang correct?
@ -1093,8 +1093,8 @@ export abstract class BattleAnim {
}); });
} }
private getGraphicFrameDataWithoutTarget(frames: AnimFrame[], targetInitialX: number, targetInitialY: number): Map<integer, Map<AnimFrameTarget, GraphicFrameData>> { private getGraphicFrameDataWithoutTarget(frames: AnimFrame[], targetInitialX: number, targetInitialY: number): Map<number, Map<AnimFrameTarget, GraphicFrameData>> {
const ret: Map<integer, Map<AnimFrameTarget, GraphicFrameData>> = new Map([ const ret: Map<number, Map<AnimFrameTarget, GraphicFrameData>> = new Map([
[ AnimFrameTarget.GRAPHIC, new Map<AnimFrameTarget, GraphicFrameData>() ], [ AnimFrameTarget.GRAPHIC, new Map<AnimFrameTarget, GraphicFrameData>() ],
[ AnimFrameTarget.USER, new Map<AnimFrameTarget, GraphicFrameData>() ], [ AnimFrameTarget.USER, new Map<AnimFrameTarget, GraphicFrameData>() ],
[ AnimFrameTarget.TARGET, new Map<AnimFrameTarget, GraphicFrameData>() ] [ AnimFrameTarget.TARGET, new Map<AnimFrameTarget, GraphicFrameData>() ]
@ -1188,7 +1188,7 @@ export abstract class BattleAnim {
const graphicIndex = graphicFrameCount++; const graphicIndex = graphicFrameCount++;
const moveSprite = sprites[graphicIndex]; const moveSprite = sprites[graphicIndex];
if (!isNullOrUndefined(frame.priority)) { if (!isNullOrUndefined(frame.priority)) {
const setSpritePriority = (priority: integer) => { const setSpritePriority = (priority: number) => {
if (existingFieldSprites.length > priority) { if (existingFieldSprites.length > priority) {
// Move to specified priority index // Move to specified priority index
const index = globalScene.field.getIndex(existingFieldSprites[priority]); const index = globalScene.field.getIndex(existingFieldSprites[priority]);

View File

@ -137,7 +137,7 @@ export interface TerrainBattlerTag {
* to select restricted moves. * to select restricted moves.
*/ */
export abstract class MoveRestrictionBattlerTag extends BattlerTag { export abstract class MoveRestrictionBattlerTag extends BattlerTag {
constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: integer, sourceMove?: Moves, sourceId?: integer) { constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, sourceMove?: Moves, sourceId?: number) {
super(tagType, lapseType, turnCount, sourceMove, sourceId); super(tagType, lapseType, turnCount, sourceMove, sourceId);
} }
@ -2559,7 +2559,7 @@ export class SubstituteTag extends BattlerTag {
/** Is the source Pokemon "in focus," i.e. is it fully visible on the field? */ /** Is the source Pokemon "in focus," i.e. is it fully visible on the field? */
public sourceInFocus: boolean; public sourceInFocus: boolean;
constructor(sourceMove: Moves, sourceId: integer) { constructor(sourceMove: Moves, sourceId: number) {
super(BattlerTagType.SUBSTITUTE, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT ], 0, sourceMove, sourceId, true); super(BattlerTagType.SUBSTITUTE, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT ], 0, sourceMove, sourceId, true);
} }
@ -2871,7 +2871,7 @@ export class SyrupBombTag extends BattlerTag {
/** /**
* Telekinesis raises the target into the air for three turns and causes all moves used against the target (aside from OHKO moves) to hit the target unless the target is in a semi-invulnerable state from Fly/Dig. * Telekinesis raises the target into the air for three turns and causes all moves used against the target (aside from OHKO moves) to hit the target unless the target is in a semi-invulnerable state from Fly/Dig.
* The first effect is provided by {@linkcode FloatingTag}, the accuracy-bypass effect is provided by TelekinesisTag * The first effect is provided by {@linkcode FloatingTag}, the accuracy-bypass effect is provided by TelekinesisTag
* The effects of Telekinesis can be baton passed to a teammate. Unlike the mainline games, Telekinesis can be baton-passed to Mega Gengar. * The effects of Telekinesis can be baton passed to a teammate.
* @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS}
*/ */
export class TelekinesisTag extends BattlerTag { export class TelekinesisTag extends BattlerTag {

View File

@ -115,17 +115,17 @@ export enum MoveSourceType {
export abstract class Challenge { export abstract class Challenge {
public id: Challenges; // The id of the challenge public id: Challenges; // The id of the challenge
public value: integer; // The "strength" of the challenge, all challenges have a numerical value. public value: number; // The "strength" of the challenge, all challenges have a numerical value.
public maxValue: integer; // The maximum strength of the challenge. public maxValue: number; // The maximum strength of the challenge.
public severity: integer; // The current severity of the challenge. Some challenges have multiple severities in addition to strength. public severity: number; // The current severity of the challenge. Some challenges have multiple severities in addition to strength.
public maxSeverity: integer; // The maximum severity of the challenge. public maxSeverity: number; // The maximum severity of the challenge.
public conditions: ChallengeCondition[]; public conditions: ChallengeCondition[];
/** /**
* @param id {@link Challenges} The enum value for the challenge * @param id {@link Challenges} The enum value for the challenge
*/ */
constructor(id: Challenges, maxValue: integer = Number.MAX_SAFE_INTEGER) { constructor(id: Challenges, maxValue: number = Number.MAX_SAFE_INTEGER) {
this.id = id; this.id = id;
this.value = 0; this.value = 0;
@ -180,7 +180,7 @@ export abstract class Challenge {
/** /**
* Returns the textual representation of a challenge's current value. * Returns the textual representation of a challenge's current value.
* @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. * @param overrideValue {@link number} The value to check for. If undefined, gets the current value.
* @returns {@link string} The localised name for the current value. * @returns {@link string} The localised name for the current value.
*/ */
getValue(overrideValue?: number): string { getValue(overrideValue?: number): string {
@ -190,7 +190,7 @@ export abstract class Challenge {
/** /**
* Returns the description of a challenge's current value. * Returns the description of a challenge's current value.
* @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. * @param overrideValue {@link number} The value to check for. If undefined, gets the current value.
* @returns {@link string} The localised description for the current value. * @returns {@link string} The localised description for the current value.
*/ */
getDescription(overrideValue?: number): string { getDescription(overrideValue?: number): string {
@ -257,7 +257,7 @@ export abstract class Challenge {
* Gets the "difficulty" value of this challenge. * Gets the "difficulty" value of this challenge.
* @returns {@link integer} The difficulty value. * @returns {@link integer} The difficulty value.
*/ */
getDifficulty(): integer { getDifficulty(): number {
return this.value; return this.value;
} }
@ -265,7 +265,7 @@ export abstract class Challenge {
* Gets the minimum difficulty added by this challenge. * Gets the minimum difficulty added by this challenge.
* @returns {@link integer} The difficulty value. * @returns {@link integer} The difficulty value.
*/ */
getMinDifficulty(): integer { getMinDifficulty(): number {
return 0; return 0;
} }
@ -469,7 +469,7 @@ export class SingleGenerationChallenge extends Challenge {
let trainerTypes: (TrainerType | TrainerType[])[] = []; let trainerTypes: (TrainerType | TrainerType[])[] = [];
const evilTeamWaves: number[] = [ ClassicFixedBossWaves.EVIL_GRUNT_1, ClassicFixedBossWaves.EVIL_GRUNT_2, ClassicFixedBossWaves.EVIL_GRUNT_3, ClassicFixedBossWaves.EVIL_ADMIN_1, ClassicFixedBossWaves.EVIL_GRUNT_4, ClassicFixedBossWaves.EVIL_ADMIN_2, ClassicFixedBossWaves.EVIL_BOSS_1, ClassicFixedBossWaves.EVIL_BOSS_2 ]; const evilTeamWaves: number[] = [ ClassicFixedBossWaves.EVIL_GRUNT_1, ClassicFixedBossWaves.EVIL_GRUNT_2, ClassicFixedBossWaves.EVIL_GRUNT_3, ClassicFixedBossWaves.EVIL_ADMIN_1, ClassicFixedBossWaves.EVIL_GRUNT_4, ClassicFixedBossWaves.EVIL_ADMIN_2, ClassicFixedBossWaves.EVIL_BOSS_1, ClassicFixedBossWaves.EVIL_BOSS_2 ];
const evilTeamGrunts = [[ TrainerType.ROCKET_GRUNT ], [ TrainerType.ROCKET_GRUNT ], [ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ], [ TrainerType.GALACTIC_GRUNT ], [ TrainerType.PLASMA_GRUNT ], [ TrainerType.FLARE_GRUNT ], [ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ], [ TrainerType.MACRO_GRUNT ], [ TrainerType.STAR_GRUNT ]]; const evilTeamGrunts = [[ TrainerType.ROCKET_GRUNT ], [ TrainerType.ROCKET_GRUNT ], [ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ], [ TrainerType.GALACTIC_GRUNT ], [ TrainerType.PLASMA_GRUNT ], [ TrainerType.FLARE_GRUNT ], [ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ], [ TrainerType.MACRO_GRUNT ], [ TrainerType.STAR_GRUNT ]];
const evilTeamAdmins = [[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [[ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ]], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], [ TrainerType.FABA, TrainerType.PLUMERIA ], [ TrainerType.OLEANA ], [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]]; const evilTeamAdmins = [[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [[ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ]], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.COLRESS ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], [ TrainerType.FABA, TrainerType.PLUMERIA ], [ TrainerType.OLEANA ], [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]];
const evilTeamBosses = [[ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.MAXIE, TrainerType.ARCHIE ], [ TrainerType.CYRUS ], [ TrainerType.GHETSIS ], [ TrainerType.LYSANDRE ], [ TrainerType.LUSAMINE, TrainerType.GUZMA ], [ TrainerType.ROSE ], [ TrainerType.PENNY ]]; const evilTeamBosses = [[ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_1 ], [ TrainerType.MAXIE, TrainerType.ARCHIE ], [ TrainerType.CYRUS ], [ TrainerType.GHETSIS ], [ TrainerType.LYSANDRE ], [ TrainerType.LUSAMINE, TrainerType.GUZMA ], [ TrainerType.ROSE ], [ TrainerType.PENNY ]];
const evilTeamBossRematches = [[ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ], [ TrainerType.CYRUS_2 ], [ TrainerType.GHETSIS_2 ], [ TrainerType.LYSANDRE_2 ], [ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ], [ TrainerType.ROSE_2 ], [ TrainerType.PENNY_2 ]]; const evilTeamBossRematches = [[ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.ROCKET_BOSS_GIOVANNI_2 ], [ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ], [ TrainerType.CYRUS_2 ], [ TrainerType.GHETSIS_2 ], [ TrainerType.LYSANDRE_2 ], [ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ], [ TrainerType.ROSE_2 ], [ TrainerType.PENNY_2 ]];
switch (waveIndex) { switch (waveIndex) {
@ -509,7 +509,7 @@ export class SingleGenerationChallenge extends Challenge {
trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ]; trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ];
break; break;
case ClassicFixedBossWaves.CHAMPION: case ClassicFixedBossWaves.CHAMPION:
trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ]; trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, Utils.randSeedItem([ TrainerType.KUKUI, TrainerType.HAU ]), Utils.randSeedItem([ TrainerType.LEON, TrainerType.MUSTARD ]), Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ];
break; break;
} }
if (trainerTypes.length === 0) { if (trainerTypes.length === 0) {
@ -643,7 +643,7 @@ export class SingleTypeChallenge extends Challenge {
* @param {value} overrideValue The value to check for. If undefined, gets the current value. * @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised name for the current value. * @returns {string} The localised name for the current value.
*/ */
getValue(overrideValue?: integer): string { getValue(overrideValue?: number): string {
if (overrideValue === undefined) { if (overrideValue === undefined) {
overrideValue = this.value; overrideValue = this.value;
} }
@ -655,7 +655,7 @@ export class SingleTypeChallenge extends Challenge {
* @param {value} overrideValue The value to check for. If undefined, gets the current value. * @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised description for the current value. * @returns {string} The localised description for the current value.
*/ */
getDescription(overrideValue?: integer): string { getDescription(overrideValue?: number): string {
if (overrideValue === undefined) { if (overrideValue === undefined) {
overrideValue = this.value; overrideValue = this.value;
} }
@ -793,7 +793,7 @@ export class LowerStarterMaxCostChallenge extends Challenge {
/** /**
* @override * @override
*/ */
getValue(overrideValue?: integer): string { getValue(overrideValue?: number): string {
if (overrideValue === undefined) { if (overrideValue === undefined) {
overrideValue = this.value; overrideValue = this.value;
} }
@ -827,7 +827,7 @@ export class LowerStarterPointsChallenge extends Challenge {
/** /**
* @override * @override
*/ */
getValue(overrideValue?: integer): string { getValue(overrideValue?: number): string {
if (overrideValue === undefined) { if (overrideValue === undefined) {
overrideValue = this.value; overrideValue = this.value;
} }

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