Merge branch 'beta' into File-Name-Changes
73
.github/workflows/create-release.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
name: Create Release Branch
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
versionName:
|
||||
description: "Name of version (i.e. 1.9.0)"
|
||||
type: string
|
||||
required: true
|
||||
confirmVersion:
|
||||
type: string
|
||||
required: true
|
||||
description: "Confirm version name"
|
||||
|
||||
# explicitly specify the necessary scopes
|
||||
permissions:
|
||||
pull-requests: write
|
||||
actions: write
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
create-release:
|
||||
if: github.repository == 'pagefaultgames/pokerogue' && (vars.BETA_DEPLOY_BRANCH == '' || ! startsWith(vars.BETA_DEPLOY_BRANCH, 'release'))
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed for github cli commands
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Validate provided version
|
||||
# Ensure version matches confirmation and conforms to expected pattern.
|
||||
run: |
|
||||
if [[ "${{ github.event.inputs.versionName }}" != "${{ github.event.inputs.confirmVersion }}" ]]; then
|
||||
echo "Version name does not match confirmation. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! "${{ github.event.inputs.versionName }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "Version name must follow the format X.Y.Z where X, Y, and Z are all numbers. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
shell: bash
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
# Always base off of beta branch, regardless of the branch the workflow was triggered from.
|
||||
ref: beta
|
||||
- name: Create release branch
|
||||
run: git checkout -b release
|
||||
# In order to be able to open a PR into beta, we need the branch to have at least one change.
|
||||
- name: Overwrite RELEASE file
|
||||
run: |
|
||||
git config --local user.name "github-actions[bot]"
|
||||
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
echo "Release v${{ github.event.inputs.versionName }}" > RELEASE
|
||||
git add RELEASE
|
||||
git commit -m "Stage release v${{ github.event.inputs.versionName }}"
|
||||
- name: Push new branch
|
||||
run: git push origin release
|
||||
# The repository variable is used by the deploy-beta workflow to determine whether to deploy from beta or release.
|
||||
- name: Set repository variable
|
||||
run: GITHUB_TOKEN="${{ secrets.RW_VARS_PAT }}" gh variable set BETA_DEPLOY_BRANCH --body "release"
|
||||
- name: Create pull request to main
|
||||
run: |
|
||||
gh pr create --base main \
|
||||
--head release \
|
||||
--title "Release v${{ github.event.inputs.versionName }} to main" \
|
||||
--body "This PR is for the release of v${{ github.event.inputs.versionName }}, and was created automatically by the GitHub Actions workflow invoked by ${{ github.actor }}" \
|
||||
--draft
|
||||
- name: Create pull request to beta
|
||||
run: |
|
||||
gh pr create --base beta \
|
||||
--head release \
|
||||
--title "Release v${{ github.event.inputs.versionName }} to beta" \
|
||||
--body "This PR is for the release of v${{ github.event.inputs.versionName }}, and was created automatically by the GitHub Actions workflow invoked by ${{ github.actor }}" \
|
||||
--draft
|
11
.github/workflows/deploy-beta.yml
vendored
@ -4,18 +4,23 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- beta
|
||||
- release
|
||||
workflow_run:
|
||||
types: completed
|
||||
workflows: ["Post Release Deleted"]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
if: github.repository == 'pagefaultgames/pokerogue'
|
||||
if: github.repository == 'pagefaultgames/pokerogue' && github.ref_name == ${{ vars.BETA_DEPLOY_BRANCH || 'beta' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
submodules: "recursive"
|
||||
ref: ${{ vars.BETA_DEPLOY_BRANCH || 'beta'}}
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Build
|
||||
|
12
.github/workflows/post-release-deleted.yml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
name: Post Release Deleted
|
||||
on:
|
||||
delete:
|
||||
|
||||
jobs:
|
||||
# Set the BETA_DEPLOY_BRANCH variable to beta when a release branch is deleted
|
||||
update-release-var:
|
||||
if: github.repository == 'pagefaultgames/pokerogue' && github.event.ref_type == 'branch' && github.event.ref == 'release'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set BETA_DEPLOY_BRANCH to beta
|
||||
run: GITHUB_TOKEN="${{ secrets.RW_VARS_PAT }}" gh variable set BETA_DEPLOY_BRANCH --body "beta" --repo "pagefaultgames/pokerogue"
|
2
.github/workflows/tests.yml
vendored
@ -7,6 +7,7 @@ on:
|
||||
branches:
|
||||
- main # Trigger on push events to the main branch
|
||||
- beta # Trigger on push events to the beta branch
|
||||
- release # Trigger on push events to the release branch
|
||||
# go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft until they fix this or ditch yml for workflows
|
||||
paths:
|
||||
# src and test files
|
||||
@ -32,6 +33,7 @@ on:
|
||||
branches:
|
||||
- main # Trigger on pull request events targeting the main branch
|
||||
- beta # Trigger on pull request events targeting the beta branch
|
||||
- release # Trigger on pull request events targeting the release branch
|
||||
paths: # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft because until then we have to duplicate this
|
||||
# src and test files
|
||||
- "src/**"
|
||||
|
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "pokemon-rogue-battle",
|
||||
"version": "1.8.4",
|
||||
"version": "1.9.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "pokemon-rogue-battle",
|
||||
"version": "1.8.4",
|
||||
"version": "1.9.0",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@material/material-color-utilities": "^0.2.7",
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "pokemon-rogue-battle",
|
||||
"private": true,
|
||||
"version": "1.8.5",
|
||||
"version": "1.9.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "vite",
|
||||
|
BIN
public/images/pokemon/icons/variant/4/417_2.png
Normal file
After Width: | Height: | Size: 744 B |
BIN
public/images/pokemon/icons/variant/4/417_3.png
Normal file
After Width: | Height: | Size: 747 B |
Before Width: | Height: | Size: 747 B |
BIN
public/images/pokemon/icons/variant/7/746-school_3.png
Normal file
After Width: | Height: | Size: 747 B |
Before Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 489 B After Width: | Height: | Size: 492 B |
BIN
public/images/pokemon/icons/variant/7/746_3.png
Normal file
After Width: | Height: | Size: 489 B |
BIN
public/images/pokemon/icons/variant/8/840_2.png
Normal file
After Width: | Height: | Size: 269 B |
BIN
public/images/pokemon/icons/variant/8/840_3.png
Normal file
After Width: | Height: | Size: 281 B |
BIN
public/images/pokemon/icons/variant/8/841-gigantamax_2.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
public/images/pokemon/icons/variant/8/841-gigantamax_3.png
Normal file
After Width: | Height: | Size: 408 B |
BIN
public/images/pokemon/icons/variant/8/841_2.png
Normal file
After Width: | Height: | Size: 397 B |
BIN
public/images/pokemon/icons/variant/8/841_3.png
Normal file
After Width: | Height: | Size: 408 B |
BIN
public/images/pokemon/icons/variant/8/842-gigantamax_2.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
public/images/pokemon/icons/variant/8/842-gigantamax_3.png
Normal file
After Width: | Height: | Size: 408 B |
BIN
public/images/pokemon/icons/variant/8/842_2.png
Normal file
After Width: | Height: | Size: 388 B |
BIN
public/images/pokemon/icons/variant/8/842_3.png
Normal file
After Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 471 B |
Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 543 B |
BIN
public/images/pokemon/icons/variant/8/871_3.png
Normal file
After Width: | Height: | Size: 538 B |
BIN
public/images/pokemon/icons/variant/9/1011_2.png
Normal file
After Width: | Height: | Size: 344 B |
BIN
public/images/pokemon/icons/variant/9/1011_3.png
Normal file
After Width: | Height: | Size: 344 B |
BIN
public/images/pokemon/icons/variant/9/1019_2.png
Normal file
After Width: | Height: | Size: 492 B |
BIN
public/images/pokemon/icons/variant/9/1019_3.png
Normal file
After Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
@ -304,7 +304,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "746-school_1",
|
||||
"filename": "746-school_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -325,7 +325,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "746-school_2",
|
||||
"filename": "746-school_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -346,7 +346,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "746_1",
|
||||
"filename": "746_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -367,7 +367,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "746_2",
|
||||
"filename": "746_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3312,6 +3312,6 @@
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:57eaade41c16d492ffda5339ea142c4d:b96a0f88bd707a9967af73e7bdf13031:d5975df27e1e94206a68aa1fd3c2c8d0$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:0780b00fda53c3fbd0b6e554e89a6818:b96a0f88bd707a9967af73e7bdf13031:d5975df27e1e94206a68aa1fd3c2c8d0$"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 48 KiB |
@ -3013,7 +3013,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1012-counterfeit_2",
|
||||
"filename": "1011_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3034,7 +3034,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1012-counterfeit_3",
|
||||
"filename": "1011_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3055,7 +3055,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1013-unremarkable_2",
|
||||
"filename": "1012-counterfeit_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3076,7 +3076,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1013-unremarkable_3",
|
||||
"filename": "1012-counterfeit_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3097,7 +3097,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1018_2",
|
||||
"filename": "1013-unremarkable_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3118,7 +3118,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1018_3",
|
||||
"filename": "1013-unremarkable_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3139,7 +3139,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1022_2",
|
||||
"filename": "1018_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3160,7 +3160,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1022_3",
|
||||
"filename": "1018_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3181,7 +3181,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1023_2",
|
||||
"filename": "1019_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3202,7 +3202,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1023_3",
|
||||
"filename": "1019_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3223,7 +3223,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_1",
|
||||
"filename": "1022_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3244,7 +3244,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_2",
|
||||
"filename": "1022_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3265,7 +3265,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_3",
|
||||
"filename": "1023_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
@ -3284,6 +3284,90 @@
|
||||
"w": 40,
|
||||
"h": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "1023_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"frame": {
|
||||
"x": 80,
|
||||
"y": 420,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_1",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"frame": {
|
||||
"x": 120,
|
||||
"y": 420,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_2",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"frame": {
|
||||
"x": 160,
|
||||
"y": 420,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "8901_3",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
},
|
||||
"frame": {
|
||||
"x": 200,
|
||||
"y": 420,
|
||||
"w": 40,
|
||||
"h": 30
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -3291,6 +3375,6 @@
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:c01add1e11aabd2f8931110a67a9222b:e7531bea9b5e1bef44def5b357c81630:3ec5c0bc286c296cfb7fa30a8b06f3da$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:a78ab8261d4cd63caee19962a0e01d8a:cb77bcbd2cc296577c3f2ba84b4c50f2:3ec5c0bc286c296cfb7fa30a8b06f3da$"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
@ -1 +1 @@
|
||||
Subproject commit 833dc40ec7409031fcea147ccbc45ec9c0ba0213
|
||||
Subproject commit a7036a07875615674ea898d0fe3b182a1080af38
|
@ -6907,6 +6907,8 @@ export function initAbilities() {
|
||||
.attr(IllusionBreakAbAttr)
|
||||
// The Pokemon loses its illusion when damaged by a move
|
||||
.attr(PostDefendIllusionBreakAbAttr, true)
|
||||
// Disable Illusion in fusions
|
||||
.attr(NoFusionAbilityAbAttr)
|
||||
// Illusion is available again after a battle
|
||||
.conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false)
|
||||
.uncopiable()
|
||||
|
@ -66,7 +66,7 @@ export const speciesEggMoves = {
|
||||
[Species.PORYGON]: [ Moves.THUNDERCLAP, Moves.AURA_SPHERE, Moves.FLAMETHROWER, Moves.TECHNO_BLAST ],
|
||||
[Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.GIGA_DRAIN, Moves.POWER_GEM, Moves.STEAM_ERUPTION ],
|
||||
[Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.HIGH_HORSEPOWER, Moves.CRABHAMMER, Moves.MIGHTY_CLEAVE ],
|
||||
[Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.CLOSE_COMBAT, Moves.STONE_AXE, Moves.SWORDS_DANCE ],
|
||||
[Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.HIGH_HORSEPOWER, Moves.STONE_AXE, Moves.SWORDS_DANCE ],
|
||||
[Species.ARTICUNO]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ],
|
||||
[Species.ZAPDOS]: [ Moves.BLEAKWIND_STORM, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ],
|
||||
[Species.MOLTRES]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AEROBLAST, Moves.TORCH_SONG ],
|
||||
@ -360,7 +360,7 @@ export const speciesEggMoves = {
|
||||
[Species.CLAUNCHER]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.ENERGY_BALL, Moves.ORIGIN_PULSE ],
|
||||
[Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.BOOMBURST ],
|
||||
[Species.TYRUNT]: [ Moves.DRAGON_HAMMER, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE, Moves.SHIFT_GEAR ],
|
||||
[Species.AMAURA]: [ Moves.RECOVER, Moves.WRING_OUT, Moves.POWER_GEM, Moves.GEOMANCY ],
|
||||
[Species.AMAURA]: [ Moves.RECOVER, Moves.TERA_STARSTORM, Moves.POWER_GEM, Moves.GEOMANCY ],
|
||||
[Species.HAWLUCHA]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.FLOATY_FALL, Moves.WICKED_BLOW ],
|
||||
[Species.DEDENNE]: [ Moves.BOOMBURST, Moves.FAKE_OUT, Moves.NASTY_PLOT, Moves.REVIVAL_BLESSING ],
|
||||
[Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ],
|
||||
@ -436,7 +436,7 @@ export const speciesEggMoves = {
|
||||
[Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ],
|
||||
[Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ],
|
||||
[Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.GLARE, Moves.MYSTICAL_FIRE, Moves.REVIVAL_BLESSING ],
|
||||
[Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.MOUNTAIN_GALE ],
|
||||
[Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.PYRO_BALL ],
|
||||
[Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ],
|
||||
[Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ],
|
||||
[Species.ALOLA_GRIMER]: [ Moves.SUCKER_PUNCH, Moves.BARB_BARRAGE, Moves.RECOVER, Moves.SURGING_STRIKES ],
|
||||
|
@ -3482,7 +3482,8 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr {
|
||||
/**
|
||||
* Attribute implementing the stat boosting effect of {@link https://bulbapedia.bulbagarden.net/wiki/Order_Up_(move) | Order Up}.
|
||||
* If the user has a Pokemon with {@link https://bulbapedia.bulbagarden.net/wiki/Commander_(Ability) | Commander} in their mouth,
|
||||
* one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form.
|
||||
* one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form. This effect does not respect
|
||||
* effect chance, but Order Up itself may be boosted by Sheer Force.
|
||||
*/
|
||||
export class OrderUpStatBoostAttr extends MoveEffectAttr {
|
||||
constructor() {
|
||||
@ -11024,7 +11025,7 @@ export function initMoves() {
|
||||
.makesContact(false),
|
||||
new AttackMove(Moves.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9)
|
||||
.attr(StatStageChangeAttr, [ Stat.SPDEF ], -2),
|
||||
new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 9)
|
||||
new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9)
|
||||
.attr(OrderUpStatBoostAttr)
|
||||
.makesContact(false),
|
||||
new AttackMove(Moves.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9)
|
||||
|
@ -88,7 +88,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
||||
|
||||
const r = randSeedInt(SHINY_MAGIKARP_WEIGHT);
|
||||
|
||||
const validEventEncounters = timedEventManager
|
||||
let validEventEncounters = timedEventManager
|
||||
.getEventEncounters()
|
||||
.filter(
|
||||
s =>
|
||||
@ -116,10 +116,13 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
||||
// If you roll 1%, give shiny Magikarp with random variant
|
||||
species = getPokemonSpecies(Species.MAGIKARP);
|
||||
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
||||
} else if (
|
||||
}
|
||||
else if (
|
||||
(validEventEncounters.length > 0 && (r <= EVENT_THRESHOLD ||
|
||||
(isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE)))
|
||||
) {
|
||||
tries = 0;
|
||||
do {
|
||||
// If you roll 20%, give event encounter with 3 extra shiny rolls and its HA, if it has one
|
||||
const enc = randSeedItem(validEventEncounters);
|
||||
species = getPokemonSpecies(enc.species);
|
||||
@ -127,7 +130,30 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
||||
pokemon.trySetShinySeed();
|
||||
pokemon.trySetShinySeed();
|
||||
pokemon.trySetShinySeed();
|
||||
} else {
|
||||
if (pokemon.shiny || pokemon.abilityIndex === 2) {
|
||||
break;
|
||||
}
|
||||
tries++;
|
||||
} while (tries < 6);
|
||||
if (!pokemon.shiny && pokemon.abilityIndex !== 2) {
|
||||
// If, after 6 tries, you STILL somehow don't have an HA or shiny mon, pick from only the event mons that have an HA.
|
||||
if (validEventEncounters.some(s => !!getPokemonSpecies(s.species).abilityHidden)) {
|
||||
validEventEncounters.filter(s => !!getPokemonSpecies(s.species).abilityHidden);
|
||||
const enc = randSeedItem(validEventEncounters);
|
||||
species = getPokemonSpecies(enc.species);
|
||||
pokemon = new PlayerPokemon(species, 5, 2, enc.formIndex);
|
||||
pokemon.trySetShinySeed();
|
||||
pokemon.trySetShinySeed();
|
||||
pokemon.trySetShinySeed();
|
||||
}
|
||||
else {
|
||||
// If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp
|
||||
species = getPokemonSpecies(Species.MAGIKARP);
|
||||
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
pokemon = new PlayerPokemon(species, 5, 2, species.formIndex);
|
||||
}
|
||||
pokemon.generateAndPopulateMoveset();
|
||||
|
@ -4,7 +4,7 @@ import type { Gender } from "../data/gender";
|
||||
import { Nature } from "#enums/nature";
|
||||
import { PokeballType } from "#enums/pokeball";
|
||||
import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species";
|
||||
import type { Status } from "../data/status-effect";
|
||||
import { Status } from "../data/status-effect";
|
||||
import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonData } from "../field/pokemon";
|
||||
import { TrainerSlot } from "#enums/trainer-slot";
|
||||
import type { Variant } from "#app/sprites/variant";
|
||||
@ -105,7 +105,9 @@ export default class PokemonData {
|
||||
// TODO: Can't we move some of this verification stuff to an upgrade script?
|
||||
this.nature = source.nature ?? Nature.HARDY;
|
||||
this.moveset = source.moveset.map((m: any) => PokemonMove.loadMove(m));
|
||||
this.status = source.status ?? null;
|
||||
this.status = source.status
|
||||
? new Status(source.status.effect, source.status.toxicTurnCount, source.status.sleepTurnsRemaining)
|
||||
: null;
|
||||
this.friendship = source.friendship ?? getPokemonSpecies(this.species).baseFriendship;
|
||||
this.metLevel = source.metLevel || 5;
|
||||
this.metBiome = source.metBiome ?? -1;
|
||||
|
@ -340,7 +340,6 @@ const timedEvents: TimedEvent[] = [
|
||||
{ species: Species.DEERLING, formIndex: 0 }, // Spring Deerling
|
||||
{ species: Species.CLAUNCHER },
|
||||
{ species: Species.WISHIWASHI },
|
||||
{ species: Species.MUDBRAY },
|
||||
{ species: Species.DRAMPA },
|
||||
{ species: Species.JANGMO_O },
|
||||
{ species: Species.APPLIN },
|
||||
@ -351,7 +350,7 @@ const timedEvents: TimedEvent[] = [
|
||||
{ wave: 8, type: "CATCHING_CHARM" },
|
||||
{ wave: 25, type: "SHINY_CHARM" },
|
||||
],
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
export class TimedEventManager {
|
||||
|
@ -65,4 +65,23 @@ describe("Moves - Order Up", () => {
|
||||
affectedStats.forEach(st => expect(dondozo.getStatStage(st)).toBe(st === stat ? 3 : 2));
|
||||
},
|
||||
);
|
||||
|
||||
it("should be boosted by Sheer Force while still applying a stat boost", async () => {
|
||||
game.override.passiveAbility(Abilities.SHEER_FORCE).starterForms({ [Species.TATSUGIRI]: 0 });
|
||||
|
||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
||||
|
||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||
|
||||
expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY);
|
||||
expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined();
|
||||
|
||||
game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY);
|
||||
expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy();
|
||||
|
||||
await game.phaseInterceptor.to("BerryPhase", false);
|
||||
|
||||
expect(dondozo.waveData.abilitiesApplied.has(Abilities.SHEER_FORCE)).toBeTruthy();
|
||||
expect(dondozo.getStatStage(Stat.ATK)).toBe(3);
|
||||
});
|
||||
});
|
||||
|