mirror of
https://github.com/smogon/pokemon-showdown-client.git
synced 2026-09-13 14:29:25 -05:00
Add more teambuilder support for Let's Go (#1169)
This commit is contained in:
committed by
Guangcong Luo
parent
09bb2852fa
commit
44d669f74d
@@ -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
|
||||
|
||||
@@ -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`;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user