Last active
December 26, 2015 07:18
-
-
Save Zarel/7113787 to your computer and use it in GitHub Desktop.
Convert Smogon Research gen 6 learnset data to PS learnset data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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