Implement Halloween Skins #16
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pokebedrock/pokebedrock-showdown!16
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/halloween-skins"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds
cosmeticFormesfor the eight Halloween skins that already ship in the behavior pack: Eevee, Vaporeon, Jolteon, Flareon, Espeon, Umbreon, Sylveon, and Electivire.dex-speciessynthesizes those formes the same way as Sandshrew-Halloween and Gengar-Halloween. Leafeon, Glaceon, Elekid, and Electabuzz are omitted on purpose; this round has no skin for them.The previous diff reformatted
data/pokedex.ts(+392/−47). That churn is gone. The file is now eight added lines againstmaster.tools/check-pokedex-format.mjsruns on pull requests. A hunk whose strings are unchanged after ignoring quotes and whitespace fails the check.Test plan
node tools/check-pokedex-format.mjs origin/masterexits 0cosmeticFormes: ["Eevee-Halloween"]resolves in the dex without a separate pokedex entryReview at head
2cbc3ec3(feature/halloween-skins→master).What looks right
cosmeticFormes: ["…-Halloween"]only — same as Sandshrew/Gastly/Gible/etc.).dex-speciessynthesizes those without separate pokedex entries, so no missingisCosmeticFormeblocks.Blocking
'→"), multi-line wrapping of unrelatedotherFormes/formeOrder/evos/abilities(Pikachu, Tauros, Unown, Arceus, Silvally, Minior, Ogerpon, …), andmotherquote changes. Please drop the formatting-only noise so the review stays focused on the skins.Please confirm
*-Halloweenhere (and Elekid/Electabuzz are skipped while Electivire is added). Intentional for this PR, or missing?CI:
test.ymlrun #11 was still running at review time (Node.js CI / build (18.x)pending) — not treating as green.@ -1,4 +1,4 @@export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {export const Pokedex: import("../sim/dex-species").SpeciesDataTable = {Drive-by: this import quote flip (
'→") plus the many unrelated array/object rewraps elsewhere in this file (Pikachu/Tauros/Unown/Arceus/Silvally/Minior/Ogerpon/…,motherquotes, abilities object spreads) are most of the +392/−47. Please revert formatting-only changes so the diff is just the HalloweencosmeticFormeslines.@ -2979,2 +3012,4 @@],eggGroups: ["Field"],otherFormes: ["Eevee-Starter"],cosmeticFormes: ["Eevee-Halloween"],Substantive add looks correct and matches existing Halloween skins. Missing from the Eevee line though:
Leafeon-HalloweenandGlaceon-Halloween(Leafeon/Glaceon entries below are untouched). Please confirm intentional omission in the PR summary, or add them.@ -8376,6 +8478,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {evoType: "trade",evoItem: "Electirizer",eggGroups: ["Human-Like"],cosmeticFormes: ["Electivire-Halloween"],Electivire-Halloween matches the existing pattern. No Elekid/Electabuzz Halloween here — fine if only the final evo has a skin this round; worth a one-liner in the summary.
Re-review at head
eee1befb.Resolved from review 3157 (
2cbc3ec3)data/pokedex.tsis down to the eightcosmeticFormeslines. Each one sits on the right species and matches the Sandshrew/Gengar Halloween pattern. The data side is good to go.Blocking (new CI guard)
git fetch origin master --depth=1and thengit diff FETCH_HEAD, which compares the PR head's tree with the current master tip. Once master moves past the branch point, master-onlypokedex.tsedits show up as reversed hunks in this PR. The format check then judges (and can fail on) changes the PR never made, andSKIPSIMTESTSsees directories the PR never touched. Fetch enough history and diffFETCH_HEAD...HEAD(three dots, merge-base) instead. A depth=1 fetch can't compute a merge-base.check-pokedex-format.mjsfalse positive. When a hunk has any string literal, only the sorted string list is compared, so key and number changes are ignored. Two examples:abilities: {0: "A", H: "B"}→{0: "B", H: "A"}, or moving an ability fromHto slot1. Both are real data changes, and both get rejected as "formatting-only". See the inline comment.Nits
git fetchis repeated three times. Do it once in a single step before the diffs.changed-files→FILESis dead output.full-test-cirunseslint --max-warnings 0over the whole repo and never readsFILES. That was already true upstream, so either drop the step or leave it as is. Don't keep porting it.normalizeandsameList(house rule: JSDoc on touched JS/TS functions).CI:
Node.js CI / build (18.x)is still pending oneee1befb, so I'm not treating it as green.@ -75,0 +61,4 @@- name: Reject formatting-only pokedex editsif: ${{ github.event_name == 'pull_request' }}run: |git fetch origin "${GITHUB_BASE_REF:-master}" --depth=1--depth=1plusFETCH_HEADas the base means the check diffs against master's tip. If master changeddata/pokedex.tsafter this branch was cut, those changes come back as reversed hunks here and can fail the PR for edits it didn't make. Fetch with history (git fetch origin masterafter checkout withfetch-depth: 100, or--deepen) and pass a merge-base, e.g.git merge-base FETCH_HEAD HEAD, to the script. The same applies to the twogit diff --name-only FETCH_HEADsteps above.@ -0,0 +14,4 @@const file = 'data/pokedex.ts';const base = process.argv[2] || 'origin/master';function normalize(line) {Nit: needs JSDoc (same for
sameListat L30). House rule is JSDoc on new JS/TS functions.@ -0,0 +63,4 @@const formattingOnly = hunks.filter(hunk => {const removedStrings = stringLiterals(hunk.removed);const addedStrings = stringLiterals(hunk.added);if (removedStrings.length || addedStrings.length) return sameList(removedStrings, addedStrings);If either side has strings, this returns
sameList(...)and never looks at the non-string text. A key swap or a value reorder inside an object, like{0: "Overgrow", H: "Chlorophyll"}→{0: "Chlorophyll", H: "Overgrow"}, gives the same sorted list, so a real data edit gets flagged as formatting-only. Something simpler covers both quote flips and rewraps without the string path: comparenormalize(text)after also stripping commas (a rewrap adds or drops trailing commas). ThenstringLiterals/sameListcan go.