mirror of
https://github.com/smogon/pokemon-showdown-client.git
synced 2026-03-21 17:50:29 -05:00
Improve animated sprite update script
BW animated sprites are now also automatically generated. In addition, the generation script can now handle female sprites and cosmetic forms. The storage format has also changed to be more concise.
This commit is contained in:
parent
568aec3e9a
commit
e96b9b9fd1
|
|
@ -1,4 +1,3 @@
|
|||
data/*
|
||||
!data/graphics.js
|
||||
!data/pokedex-mini-bw.js
|
||||
node_modules/
|
||||
|
|
|
|||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -5,8 +5,6 @@
|
|||
/index.html
|
||||
/data/*
|
||||
!/data/graphics.js
|
||||
!/data/pokedex-mini.js
|
||||
!/data/pokedex-mini-bw.js
|
||||
!/data/learnsets-g6.js
|
||||
node_modules/
|
||||
eslint-cache/
|
||||
|
|
|
|||
|
|
@ -15,36 +15,75 @@ THIS FILE IS AUTOGENERATED BY ./githooks/build-minidex
|
|||
*/
|
||||
|
||||
exports.BattlePokemonSprites = {
|
||||
substitute:{exists:false, front:{ani:{w:34, h:39}}, back:{ani:{w:37, h:38}}},
|
||||
substitute:{exists:false, front:{w:34, h:39}, back:{w:37, h:38}},
|
||||
`;
|
||||
for (let id in Tools.data.Pokedex) {
|
||||
let template = Tools.getTemplate(id);
|
||||
let row = {num: template.num};
|
||||
|
||||
|
||||
let g5buf = `/*
|
||||
DO NOT EDIT
|
||||
|
||||
THIS FILE IS AUTOGENERATED BY ./githooks/build-minidex
|
||||
*/
|
||||
|
||||
exports.BattlePokemonSpritesBW = {
|
||||
`;
|
||||
|
||||
function sizeObj(path) {
|
||||
try {
|
||||
let size = imageSize('../sprites/xyani/' + template.spriteid + '.gif');
|
||||
row.front = {
|
||||
ani: {
|
||||
w: size.width,
|
||||
h: size.height
|
||||
}
|
||||
let size = imageSize(path);
|
||||
return {
|
||||
w: size.width,
|
||||
h: size.height
|
||||
};
|
||||
} catch (e) {}
|
||||
try {
|
||||
let size = imageSize('../sprites/xyani-back/' + template.spriteid + '.gif');
|
||||
row.back = {
|
||||
ani: {
|
||||
w: size.width,
|
||||
h: size.height
|
||||
}
|
||||
|
||||
for (let baseid in Tools.data.Pokedex) {
|
||||
let template = Tools.getTemplate(baseid);
|
||||
for (let formid of [''].concat(template.otherForms || [])) {
|
||||
let spriteid = template.spriteid;
|
||||
if (formid) spriteid += '-' + formid.slice(template.id.length);
|
||||
let id = toId(spriteid);
|
||||
|
||||
{
|
||||
let row = {num: template.num};
|
||||
const frontSize = sizeObj('../sprites/xyani/' + spriteid + '.gif');
|
||||
if (frontSize) row.front = frontSize;
|
||||
const frontSizeF = sizeObj('../sprites/xyani/' + spriteid + '-f.gif');
|
||||
if (frontSizeF) row.frontf = frontSizeF;
|
||||
const backSize = sizeObj('../sprites/xyani-back/' + spriteid + '.gif');
|
||||
if (backSize) row.back = backSize;
|
||||
const backSizeF = sizeObj('../sprites/xyani-back/' + spriteid + '-f.gif');
|
||||
if (backSizeF) row.backf = backSizeF;
|
||||
if (row.front || row.back || !row.forme) {
|
||||
buf += `\t${id}:` + JSON.stringify(row).replace(/"/g, '') + `,\n`;
|
||||
}
|
||||
};
|
||||
} catch (e) {}
|
||||
if (row.num <= 0 || row.front || row.back || !row.forme) {
|
||||
buf += `\t${id}:` + JSON.stringify(row).replace(/"/g, '') + `,\n`;
|
||||
}
|
||||
|
||||
{
|
||||
let g5row = {num: template.num};
|
||||
const frontSize = sizeObj('../sprites/bwani/' + spriteid + '.gif');
|
||||
if (frontSize) g5row.front = frontSize;
|
||||
const frontSizeF = sizeObj('../sprites/bwani/' + spriteid + '-f.gif');
|
||||
if (frontSizeF) g5row.frontf = frontSizeF;
|
||||
const backSize = sizeObj('../sprites/bwani-back/' + spriteid + '.gif');
|
||||
if (backSize) g5row.back = backSize;
|
||||
const backSizeF = sizeObj('../sprites/bwani-back/' + spriteid + '-f.gif');
|
||||
if (backSizeF) g5row.backf = backSizeF;
|
||||
if (g5row.front || g5row.back || !g5row.forme) {
|
||||
g5buf += `\t${id}:` + JSON.stringify(g5row).replace(/"/g, '') + `,\n`;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
buf = buf.slice(0, -2) + `
|
||||
};
|
||||
`;
|
||||
g5buf = g5buf.slice(0, -2) + `
|
||||
};
|
||||
`;
|
||||
|
||||
fs.writeFileSync('../data/pokedex-mini.js', buf);
|
||||
fs.writeFileSync('../data/pokedex-mini-bw.js', g5buf);
|
||||
|
|
|
|||
|
|
@ -1152,21 +1152,27 @@ var Tools = {
|
|||
var genNum = Math.max(options.gen, pokemon.gen);
|
||||
if (Tools.prefs('nopastgens')) genNum = 6;
|
||||
if (Tools.prefs('bwgfx') && genNum >= 6) genNum = 5;
|
||||
if (genNum < 5 && !spriteData.isBackSprite) {
|
||||
spriteData.w *= 1.5;
|
||||
spriteData.h *= 1.5;
|
||||
if (genNum < 5) {
|
||||
if (!spriteData.isBackSprite) {
|
||||
spriteData.w *= 2;
|
||||
spriteData.h *= 2;
|
||||
spriteData.y = -16;
|
||||
} else {
|
||||
spriteData.w *= 2 / 1.5;
|
||||
spriteData.h *= 2 / 1.5;
|
||||
spriteData.y = -11;
|
||||
}
|
||||
if (genNum <= 2) spriteData.y += 2;
|
||||
}
|
||||
var gen = {1:'rby', 2:'gsc', 3:'rse', 4:'dpp', 5:'bw', 6:'xy', 7:'xy'}[genNum];
|
||||
|
||||
var gen6animationData = null;
|
||||
var animationData = null;
|
||||
if (window.BattlePokemonSprites) {
|
||||
gen6animationData = BattlePokemonSprites[pokemon.speciesid];
|
||||
animationData = BattlePokemonSprites[pokemon.speciesid];
|
||||
}
|
||||
var animationData = gen6animationData;
|
||||
if (gen === 'bw' && window.BattlePokemonSpritesBW) {
|
||||
animationData = BattlePokemonSpritesBW[pokemon.speciesid];
|
||||
}
|
||||
if (!gen6animationData) gen6animationData = {};
|
||||
if (!animationData) animationData = {};
|
||||
|
||||
if (animationData.num > 0) {
|
||||
|
|
@ -1188,23 +1194,21 @@ var Tools = {
|
|||
}
|
||||
|
||||
if (animationData[facing]) {
|
||||
var spriteType = '';
|
||||
if (animationData[facing]['anif'] && pokemon.gender === 'F') {
|
||||
if (animationData[facing + 'f'] && pokemon.gender === 'F') {
|
||||
name += '-f';
|
||||
spriteType += 'f';
|
||||
facing += 'f';
|
||||
}
|
||||
if (!Tools.prefs('noanim') && gen in {'bw': 1, 'xy': 1}) {
|
||||
spriteType = 'ani' + spriteType;
|
||||
if (!Tools.prefs('noanim') && genNum >= 5) {
|
||||
dir = gen + 'ani' + dir;
|
||||
|
||||
spriteData.w = animationData[facing][spriteType].w;
|
||||
spriteData.h = animationData[facing][spriteType].h;
|
||||
spriteData.w = animationData[facing].w;
|
||||
spriteData.h = animationData[facing].h;
|
||||
spriteData.url += dir + '/' + name + '.gif';
|
||||
if (genNum >= 6) spriteData.pixelated = false;
|
||||
return spriteData;
|
||||
}
|
||||
} else if (gen6animationData[facing] && gen6animationData[facing]['anif'] && pokemon.gender === 'F') {
|
||||
} else if (animationData['frontf'] && pokemon.gender === 'F') {
|
||||
name += '-f';
|
||||
spriteType += 'f';
|
||||
}
|
||||
|
||||
// There is no entry or enough data in pokedex-mini.js
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"url": "https://github.com/Zarel/Pokemon-Showdown-Client.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "eslint --config=.eslintrc.js --cache --cache-file=eslint-cache/base js/*.js data/graphics.js data/pokedex-mini-bw.js && eslint --config=githooks/.eslintrc.js --cache --cache-file=eslint-cache/build githooks/update githooks/build-indexes",
|
||||
"fix": "eslint --config=.eslintrc.js --fix js/*.js data/graphics.js data/pokedex-mini-bw.js && eslint --config=githooks/.eslintrc.js --fix githooks/update githooks/build-indexes"
|
||||
"test": "eslint --config=.eslintrc.js --cache --cache-file=eslint-cache/base js/*.js data/graphics.js && eslint --config=githooks/.eslintrc.js --cache --cache-file=eslint-cache/build githooks/update githooks/build-indexes",
|
||||
"fix": "eslint --config=.eslintrc.js --fix js/*.js data/graphics.js && eslint --config=githooks/.eslintrc.js --fix githooks/update githooks/build-indexes"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user