Skip to content

Instantly share code, notes, and snippets.

@Zarel
Last active December 26, 2015 07:18
Show Gist options
  • Save Zarel/7113787 to your computer and use it in GitHub Desktop.
Save Zarel/7113787 to your computer and use it in GitHub Desktop.
Convert Smogon Research gen 6 learnset data to PS learnset data
input = $('textarea')[0].value;
// remove existing gen 6 data
for (var speciesid in BattleLearnsets) {
if (!BattleLearnsets[speciesid] || !BattleLearnsets[speciesid].learnset) continue;
var learnset = BattleLearnsets[speciesid].learnset;
for (var moveid in learnset) {
var sources = learnset[moveid];
for (var i=sources.length-1; i>=0; i--) {
if (sources[i].charAt(0) === '6') {
sources.splice(i, 1);
}
}
if (!sources.length) delete learnset[moveid];
}
}
// parse input
if (typeof input === 'string') input = input.split('\n');
var speciesid = '';
var species = '';
var nextFlag = true;
for (var i=0; i<input.length; i++) {
var line = input[i];
line = line.trim();
if (!line) continue;
if (line.charAt(0) === '=') {
nextFlag = true;
continue;
}
if (nextFlag || line.charAt(0) === '#') {
speciesid = toId(line);
species = line;
nextFlag = false;
continue;
}
line = line.replace('Lv. ', 'Lv.').replace('lv. ', 'lv.').replace('Lv < ', 'Lv<');
if (line.substr(0,2) === '?-') line = '? -'+line.substr(2);
if (line.substr(0,3) === '? -') line = '? - '+line.substr(3);
var parts = line.split(' - ');
if (parts.length === 1) parts = line.split(': ');
if (parts.length === 1) parts = line.split(' at ');
if (parts.length === 1) {
parts = line.split(' Under ');
if (parts[1]) parts[1] = '?';
}
if (parts.length === 1) {
parts = line.split(' [');
if (parts[1] && parts[1].charAt(parts[1].length-1) === ']') parts[1] = parts[1].substr(0, parts[1].length-1);
}
if (!parts[0] || !parts[1] || parts.length != 2) {
if (parts.length == 1 && line.substr(0,2).toLowerCase() in {tm:1,hm:1}) {
line = line.replace(/^TM /i, 'TM').replace(/^HM /i, 'HM');
var spaceIndex = line.indexOf(' ');
parts = [line.substr(0,spaceIndex).trim(),line.substr(spaceIndex).trim()];
}
if (parts.length == 1 && /^[0-9]{1,3} /.test(line)) {
var spaceIndex = line.indexOf(' ');
parts = ['TM',line.substr(spaceIndex).trim()];
}
if (parts.length == 1 && (/^L\<?\>?\=?[0-9]{1,3} /i.test(line) || /^Lv\.?\<?\>?\=?[0-9]{1,3} /i.test(line))) {
var spaceIndex = line.indexOf(' ');
parts = [line.substr(0,spaceIndex),line.substr(spaceIndex).trim()];
}
if (parts.length == 1 && (/^L[0-9]{1,3}\- /i.test(line) || /^Lv[0-9]{1,3}\- /i.test(line))) {
var spaceIndex = line.indexOf('- ');
parts = [line.substr(0,spaceIndex),line.substr(spaceIndex+2).trim()];
}
if (parts.length == 1 && (line.substr(0,4) === 'N/A ' || line.substr(0,4) === 'Lv? ')) {
parts = ['N/A', line.substr(4)];
}
if (!parts[0] || !parts[1] || parts.length != 2) {
console.log("Line '"+line+"' not well-formed for "+species);
continue;
}
}
var move = Tools.getMove(BattleAliases[toId(parts[1])] || parts[1]);
if (!move.exists) {
move = Tools.getMove(BattleAliases[toId(parts[0])] || parts[0]);
if (move.exists) {
parts = [parts[1], parts[0]];
} else {
console.log("Move '"+parts[1]+"' in '"+line+"' doesn't exist for "+species);
continue;
}
}
var typeString = parts[0].toLowerCase().replace(/ /g,'').replace('.','');
var type = '';
var level = '';
if (typeString.substr(0,2) in {tm:1,hm:1}) type = '6M';
else if (typeString === 'egg') type = '6E';
else if (typeString === 'moverelearner' || typeString === 'relearn' || typeString === 'mr' || typeString === 'ml' || typeString === '?') type = '6L0';
else if (typeString === 'start' || typeString === 'n/a' || typeString === 'unknown') type = '6L0';
else if (typeString.substr(0,3) === 'pre' || typeString.substr(0,3) === 'byl' || typeString.substr(0,6) === 'before' || typeString.substr(0,5) === 'below') {
type = '6L0';
}
else if (typeString.substr(0,5) === 'lvl1-') {
type = '6L0';
}
else if (typeString.substr(0,5) === 'level') {
level = typeString.substr(5);
}
else if (typeString.substr(0,3) === 'lvl') {
level = typeString.substr(3);
}
else if (typeString.substr(0,2) === 'lv') {
level = typeString.substr(2);
}
else if (typeString.substr(0,1) === 'l') {
level = typeString.substr(1);
}
if (!type && !level) level = typeString;
if (level) {
if (level.charAt(0) in {'<':1,'>':1,'?':1}) type = '6L0';
else if (/^[0-9]{1,3}$/.test(level)) type = '6L'+parseInt(level, 10);
}
if (!type) console.log("Source '"+parts[0]+"' in '"+line+"' not formatted correctly for "+species);
if (type) {
if (!BattleLearnsets[speciesid]) {
if (BattleLearnsets[speciesid] !== '') console.log("Pokemon '"+species+"' doesn't exist or shouldn't have a learnset.");
BattleLearnsets[speciesid] = '';
continue;
}
if (!BattleLearnsets[speciesid].learnset[move.id]) BattleLearnsets[speciesid].learnset[move.id] = [type];
else BattleLearnsets[speciesid].learnset[move.id].push(type);
}
}
var output = 'exports.BattleLearnsets = {\n';
for (var speciesid in BattleLearnsets) {
var learnset = BattleLearnsets[speciesid].learnset;
output += ' '+speciesid+':{learnset:{';
output += Object.keys(learnset).map(function(key) {
return (key==='return'?'"return"':key)+':'+JSON.stringify(learnset[key]);
}).join(',');
output += '}},\n';
}
output = output.substr(0, output.length-2)+'\n';
output += '};';
$('textarea')[1].value = output;
null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment