Add more teambuilder support for Let's Go (#1169)

This commit is contained in:
Kris Johnson
2018-11-21 23:10:23 -07:00
committed by Guangcong Luo
parent 09bb2852fa
commit 44d669f74d
5 changed files with 79 additions and 27 deletions

View File

@@ -285,11 +285,12 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
let buf = '// DO NOT EDIT - automatically built with build-tools/build-indexes\n\n';
// process.stdout.write("\n ");
for (const genIdent of [7, -7.5, -7, 6, -6, 5, 4, 3, 2, 1]) {
for (const genIdent of [7, 7.1, -7.5, -7, 6, -6, 5, 4, 3, 2, 1]) {
const isLetsGo = (genIdent === 7.1);
const isDoubles = (genIdent < 0);
const isVGC = (genIdent === -7.5);
const genNum = Math.floor(isDoubles ? -genIdent : genIdent);
const gen = 'gen' + genNum;
const gen = isLetsGo ? 'letsgo' : 'gen' + genNum;
// process.stdout.write("" + gen + (isDoubles ? " doubles" : "") + "... ");
const pokemon = Object.keys(Tools.data.Pokedex);
pokemon.sort();
@@ -301,6 +302,13 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
if (template.tier === 'CAP' || template.tier === 'CAP NFE' || template.tier === 'CAP LC') {
return template.tier;
}
if (isLetsGo) {
let baseTemplate = Tools.mod(gen).getTemplate(template.baseSpecies);
let validNum = (baseTemplate.num <= 151 && baseTemplate.num >= 1) || [808, 809].includes(baseTemplate.num);
if (!validNum) return 'Illegal';
if (template.forme && !['Alola', 'Mega', 'Mega-X', 'Mega-Y', 'Starter'].includes(template.forme)) return 'Illegal';
return template.tier;
}
if (isVGC) {
if (template.tier === 'NFE') return 'NFE';
if (template.tier === 'LC') return 'NFE';
@@ -342,7 +350,11 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
const items = [];
const formatSlices = {};
if (isVGC) {
if (isLetsGo) {
BattleTeambuilderTable['letsgo'] = {};
BattleTeambuilderTable['letsgo'].tiers = tiers;
BattleTeambuilderTable['letsgo'].formatSlices = formatSlices;
} else if (isVGC) {
BattleTeambuilderTable[gen + 'vgc'] = {};
BattleTeambuilderTable[gen + 'vgc'].tiers = tiers;
BattleTeambuilderTable[gen + 'vgc'].formatSlices = formatSlices;
@@ -362,6 +374,9 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
}
const tierOrder = (() => {
if (isLetsGo) {
return ["Uber", "OU", "NFE", "LC"];
}
if (isVGC) {
return ["Mythical", "Restricted Legendary", "Regular", "NFE", "LC"];
}
@@ -615,6 +630,17 @@ process.stdout.write("Building `data/teambuilder-tables.js`... ");
if (minGen === 1) learnsets[id][moveid] = '12' + learnsets[id][moveid];
}
}
/*
* Commented out until it can be done without mutating main data
const LGLearnsets = Tools.mod('letsgo').data.Learnsets;
for (const id in LGLearnsets) {
const learnset = LGLearnsets[id].learnset;
learnsets[id] = {};
for (const moveid in learnset) {
learnsets[id][moveid] = '7';
}
}
*/
//
// Past gen table

View File

@@ -35,7 +35,7 @@ function sizeObj(path) {
let size = imageSize(path);
return {
w: size.width,
h: size.height
h: size.height,
};
} catch (e) {}
}
@@ -76,7 +76,6 @@ for (let baseid in Tools.data.Pokedex) {
g5buf += `\t${id}:` + JSON.stringify(g5row).replace(/"/g, '') + `,\n`;
}
}
}
}

View File

@@ -853,6 +853,11 @@ var BattleTooltips = (function () {
var isRandomBattle = tier.indexOf('Random Battle') >= 0 || (tier.indexOf('Random') >= 0 && tier.indexOf('Battle') >= 0 && gen >= 6);
var value = iv + ((isRandomBattle && gen >= 3) ? 21 : 63);
var nature = (isRandomBattle || gen < 3) ? 1 : 1.1;
if (tier.indexOf("Let's Go") >= 0) {
var maxStat = Math.floor(Math.floor(Math.floor(Math.floor(2 * baseSpe + iv) * level / 100 + 5) * nature) * 1.1);
if (tier.indexOf('No Restrictions') >= 0) return maxStat + 200;
return maxStat;
}
return Math.floor(Math.floor(Math.floor(2 * baseSpe + value) * level / 100 + 5) * nature);
};

View File

@@ -125,7 +125,7 @@
update: function () {
teams = Storage.teams;
if (this.curTeam) {
this.ignoreEVLimits = (this.curTeam.gen < 3 || this.curTeam.format === 'gen7balancedhackmons');
this.ignoreEVLimits = (this.curTeam.gen < 3 || this.curTeam.format === 'gen7balancedhackmons' || this.curTeam.format.endsWith('norestrictions'));
if (this.curSet) {
return this.updateSetView();
}
@@ -1069,6 +1069,7 @@
},
renderSet: function (set, i) {
var template = Tools.getTemplate(set.species);
var isLetsGo = this.curTeam.format.startsWith('gen7letsgo');
var buf = '<li value="' + i + '">';
if (!set.species) {
if (this.deletedSet) {
@@ -1131,8 +1132,9 @@
buf += '</div></div>';
buf += '<div class="setrow">';
// if (this.curTeam.gen > 1 && !isLetsGo) buf += '<div class="setcell setcell-item"><label>Item</label><input type="text" name="item" class="textbox chartinput" value="' + BattleLog.escapeHTML(set.item) + '" /></div>';
if (this.curTeam.gen > 1) buf += '<div class="setcell setcell-item"><label>Item</label><input type="text" name="item" class="textbox chartinput" value="' + BattleLog.escapeHTML(set.item) + '" /></div>';
if (this.curTeam.gen > 2) buf += '<div class="setcell setcell-ability"><label>Ability</label><input type="text" name="ability" class="textbox chartinput" value="' + BattleLog.escapeHTML(set.ability) + '" /></div>';
if (this.curTeam.gen > 2 && !isLetsGo) buf += '<div class="setcell setcell-ability"><label>Ability</label><input type="text" name="ability" class="textbox chartinput" value="' + BattleLog.escapeHTML(set.ability) + '" /></div>';
buf += '</div></div>';
// moves
@@ -1144,11 +1146,9 @@
buf += '<div class="setcell"><input type="text" name="move4" class="textbox chartinput" value="' + BattleLog.escapeHTML(set.moves[3]) + '" /></div>';
buf += '</div>';
var supportsEVs = !this.curTeam.format.startsWith('gen7letsgo');
// stats
buf += '<div class="setcol setcol-stats"><div class="setrow"><label>Stats</label><button class="textbox setstats" name="stats">';
buf += '<span class="statrow statrow-head"><label></label> <span class="statgraph"></span> <em>' + (supportsEVs ? 'EV' : 'AV') + '</em></span>';
buf += '<span class="statrow statrow-head"><label></label> <span class="statgraph"></span> <em>' + (!isLetsGo ? 'EV' : 'AV') + '</em></span>';
var stats = {};
var defaultEV = (this.curTeam.gen > 2 ? 0 : 252);
for (var j in BattleStatNames) {
@@ -2095,6 +2095,8 @@
var inputName = '';
inputName = e.currentTarget.name;
var val = Math.abs(parseInt(e.currentTarget.value, 10));
var supportsEVs = !this.curTeam.format.startsWith('gen7letsgo');
var supportsAVs = !supportsEVs && this.curTeam.format.endsWith('norestrictions');
var set = this.curSet;
if (!set) return;
@@ -2130,12 +2132,13 @@
if (set.evs[stat] !== val || natureChange) {
set.evs[stat] = val;
if (this.ignoreEVLimits) {
if (set.evs['hp'] === undefined) set.evs['hp'] = 252;
if (set.evs['atk'] === undefined) set.evs['atk'] = 252;
if (set.evs['def'] === undefined) set.evs['def'] = 252;
if (set.evs['spa'] === undefined) set.evs['spa'] = 252;
if (set.evs['spd'] === undefined) set.evs['spd'] = 252;
if (set.evs['spe'] === undefined) set.evs['spe'] = 252;
var evNum = supportsEVs ? 252 : supportsAVs ? 200 : 0;
if (set.evs['hp'] === undefined) set.evs['hp'] = evNum;
if (set.evs['atk'] === undefined) set.evs['atk'] = evNum;
if (set.evs['def'] === undefined) set.evs['def'] = evNum;
if (set.evs['spa'] === undefined) set.evs['spa'] = evNum;
if (set.evs['spd'] === undefined) set.evs['spd'] = evNum;
if (set.evs['spe'] === undefined) set.evs['spe'] = evNum;
}
this.setSlider(stat, val);
this.updateStatGraph();
@@ -2220,14 +2223,18 @@
for (var i in set.evs) {
total += (i === stat ? val : set.evs[i]);
}
if (total > 508 && val - total + 508 >= 0) {
var supportsEVs = !this.curTeam.format.startsWith('gen7letsgo');
var supportsAVs = !supportsEVs && this.curTeam.format.endsWith('norestrictions');
var totalLimit = supportsEVs ? 508 : supportsAVs ? 1200 : 0;
var limit = supportsEVs ? 252 : supportsAVs ? 200 : 0;
if (total > totalLimit && val - total + totalLimit >= 0) {
// don't allow dragging beyond 508 EVs
val = val - total + 508;
val = val - total + totalLimit;
// make sure val is a legal value
val = +val;
if (!val || val <= 0) val = 0;
if (val > 252) val = 252;
if (val > limit) val = limit;
}
}
@@ -2237,12 +2244,13 @@
if (!set.evs) set.evs = {};
if (this.ignoreEVLimits) {
if (set.evs['hp'] === undefined) set.evs['hp'] = 252;
if (set.evs['atk'] === undefined) set.evs['atk'] = 252;
if (set.evs['def'] === undefined) set.evs['def'] = 252;
if (set.evs['spa'] === undefined) set.evs['spa'] = 252;
if (set.evs['spd'] === undefined) set.evs['spd'] = 252;
if (set.evs['spe'] === undefined) set.evs['spe'] = 252;
var evNum = supportsEVs ? 252 : supportsAVs ? 200 : 0;
if (set.evs['hp'] === undefined) set.evs['hp'] = evNum;
if (set.evs['atk'] === undefined) set.evs['atk'] = evNum;
if (set.evs['def'] === undefined) set.evs['def'] = evNum;
if (set.evs['spa'] === undefined) set.evs['spa'] = evNum;
if (set.evs['spd'] === undefined) set.evs['spd'] = evNum;
if (set.evs['spe'] === undefined) set.evs['spe'] = evNum;
}
set.evs[stat] = val;
@@ -3150,7 +3158,6 @@
if (supportsAVs) {
evs = {hp:200, atk:200, def:200, spa:200, spd:200, spe:200};
if (!moveCount['PhysicalAttack']) evs.atk = 0;
if (!moveCount['PhysicalAttack']) evs.atk = 0;
if (!moveCount['SpecialAttack']) evs.spa = 0;
if (hasMove['gyroball'] || hasMove['trickroom']) evs.spe = 0;
} else if (!supportsEVs) {
@@ -3311,6 +3318,8 @@
// Stat calculator
getStat: function (stat, set, evOverride, natureOverride) {
var supportsEVs = !this.curTeam.format.startsWith('gen7letsgo');
var supportsAVs = !supportsEVs && this.curTeam.format.endsWith('norestrictions');
if (!set) set = this.curSet;
if (!set) return 0;
@@ -3341,9 +3350,13 @@
if (stat === 'hp') {
if (baseStat === 1) return 1;
if (!supportsEVs) return Math.floor(Math.floor(2 * baseStat + iv + 100) * set.level / 100 + 10) + (supportsAVs ? ev : 0);
return Math.floor(Math.floor(2 * baseStat + iv + Math.floor(ev / 4) + 100) * set.level / 100 + 10);
}
var val = Math.floor(Math.floor(2 * baseStat + iv + Math.floor(ev / 4)) * set.level / 100 + 5);
if (!supportsEVs) {
val = Math.floor(Math.floor(2 * baseStat + iv) * set.level / 100 + 5);
}
if (natureOverride) {
val *= natureOverride;
} else if (BattleNatures[set.nature] && BattleNatures[set.nature].plus === stat) {
@@ -3351,6 +3364,10 @@
} else if (BattleNatures[set.nature] && BattleNatures[set.nature].minus === stat) {
val *= 0.9;
}
if (!supportsEVs) {
var friendshipValue = Math.floor(((!set.happiness ? 255 : set.happiness > 255 ? 255 : set.happiness) / 255 / 10 + 1) * 100);
val = Math.floor(val * friendshipValue / 100) + (supportsAVs ? ev : 0);
}
return Math.floor(val);
},

View File

@@ -790,6 +790,8 @@
} else if (!format) {
this.gen = 7;
}
var isLetsGo = format.startsWith('letsgo');
if (isLetsGo) format = format.slice(6);
var requirePentagon = (format === 'battlespotsingles' || format === 'battledoubles' || format.slice(0, 3) === 'vgc');
var template;
var isBH = (format === 'balancedhackmons' || format === 'bh');
@@ -808,11 +810,13 @@
} else if (this.gen === 7 && requirePentagon) {
table = table['gen' + this.gen + 'vgc'];
isDoublesOrBS = true;
} else if (table['gen' + this.gen + 'doubles'] && (format.includes('doubles') || format.includes('vgc') || format.includes('triples') || format.endsWith('lc') || format.endsWith('lcuu'))) {
} else if (table['gen' + this.gen + 'doubles'] && (format.includes('doubles') || format.includes('vgc') || format.includes('triples') || format.endsWith('lc') || format.endsWith('lcuu')) && !isLetsGo) {
table = table['gen' + this.gen + 'doubles'];
isDoublesOrBS = true;
} else if (this.gen < 7) {
table = table['gen' + this.gen];
} else if (isLetsGo) {
table = table['letsgo'];
}
if (!table.tierSet) {
@@ -846,6 +850,7 @@
else if (format === 'doublesou') tierSet = tierSet.slice(slices.DOU);
else if (format === 'doublesuu') tierSet = tierSet.slice(slices.DUU);
else if (format === 'doublesnu') tierSet = tierSet.slice(slices.DNU);
else if (isLetsGo) tierSet = tierSet.slice(slices.Uber);
// else if (isDoublesOrBS) tierSet = tierSet;
else if (!isDoublesOrBS) tierSet = tierSet.slice(slices.OU, slices.UU).concat(agTierSet).concat(tierSet.slice(slices.Uber, slices.OU)).concat(tierSet.slice(slices.UU));