Skip to content

Commit

Permalink
Improve animated sprite update script
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Zarel committed Dec 29, 2016
1 parent 568aec3 commit e96b9b9
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 41 deletions.
1 change: 0 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
data/*
!data/graphics.js
!data/pokedex-mini-bw.js
node_modules/
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
79 changes: 59 additions & 20 deletions githooks/build-minidex
Original file line number Diff line number Diff line change
Expand Up @@ -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);
36 changes: 20 additions & 16 deletions js/battledata.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down

0 comments on commit e96b9b9

Please sign in to comment.