Skip to content

Instantly share code, notes, and snippets.

@NikhilNarayana
Last active May 13, 2020 01:34
Show Gist options
  • Save NikhilNarayana/4dab3760d26d32cb0cd0e296958d1b3c to your computer and use it in GitHub Desktop.
Save NikhilNarayana/4dab3760d26d32cb0cd0e296958d1b3c to your computer and use it in GitHub Desktop.
const slp = require('slp-parser-js');
const SlippiGame = slp.default;
const path = require('path');
const fs = require('fs');
const _ = require('lodash');
const cliProgress = require("cli-progress");
const inputFolder = "./Slippi";
const outputFolder = "./sorted";
function generateVSFolderName(players) {
const chars = players.map(p => slp.characters.getCharacterName(p.characterId));
chars.sort();
return chars.join(" vs. ");
}
function walk(dir) {
let results = [];
let list = fs.readdirSync(dir);
_.each(list, (file) => {
file = path.join(dir, file);
let stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
// Recurse into a subdirectory
results = results.concat(walk(file));
} else if (path.extname(file) === ".slp") {
results.push(file);
}
});
return results;
}
function sortSLPMU() {
const files = walk(inputFolder);
const bar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);
bar.start(files.length, 0);
_.each(files, (file) => {
try{
const game = new SlippiGame(file);
let settings = game.getSettings();
const cpu = _.some(settings.players, (player) => player.type != 0);
const notsingles = settings.players.length != 2;
if (cpu || notsingles) { // only look for files against real players in a 1v1
bar.setTotal(bar.getTotal() - 1);
return;
}
const folderName = generateVSFolderName(settings.players);
let outputDir = path.join(outputFolder, folderName);
fs.mkdir(outputDir, { recursive: true }, (err) => {
if (err) console.log(`mkdir ${err}`);
fs.copyFile(file, path.join(outputDir, path.basename(file)), (err) => {if (err) console.log(`rename ${err}`);});
});
bar.increment();
} catch (err) {
console.log(err);
fs.appendFileSync("./sort_log.txt", `${err.stack}\n\n`);
}
});
bar.stop();
}
module.exports = sortSLPMU; // export for use in other scripts
if (require.main == module) sortSLPMU(); // if running from terminal call main
@NikhilNarayana
Copy link
Author

NikhilNarayana commented May 10, 2020

I use Node 10 (https://nodejs.org/dist/latest-v10.x/), haven't tried on Node 12

Windows EXE: https://drive.google.com/file/d/1odkwoMNoVpAYFyPRxh8bXQXPRH6-ima1/view?usp=sharing

Setup if not using exe

  1. Download the file, put it in a folder, and navigate to that folder in CMD/terminal.
  2. npm install slp-parser-js cli-progress
  3. Put slippi files in a folder named Slippi next to the script.
  4. node <script file name>.
  5. hurray (maybe)

Need extra help? Come to the slippi discord (https://discord.gg/pPfEaW5) and ping Nikki in #support-and-bugs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment