Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  1. const { default: SlippiGame } = require('slp-parser-js');
  2. const path = require('path');
  3.  
  4. const testFolder = './files/';
  5. const renamedFolder = './renamedFiles/';
  6. const fs = require('fs');
  7.  
  8. var jsonCombo = {
  9. "mode": "queue",
  10. "replay": "",
  11. "isRealTimeMode": false,
  12. "queue": []
  13. };
  14.  
  15. combos = {};
  16.  
  17. jsonAllMatches = {
  18. "mode": "queue",
  19. "replay": "",
  20. "isRealTimeMode": false,
  21. "queue": []
  22. };
  23.  
  24. /* Configurable parameters */
  25. shouldKill = true;
  26. wobblingBanned = true;
  27. comboPercentaje = 10;
  28. isSpike = true;
  29.  
  30. /* Non configurable parameters (DO NOT MOVE) */
  31. jsonString = '';
  32. frameOffset1 = 120;
  33. frameOffset2 = 180;
  34. comboCounter = 0;
  35.  
  36. var object = process.argv[2] == '-c' ? 'conversions' : 'combos';
  37. console.log('\nProcessing: ' + object);
  38.  
  39. fs.readdir(testFolder, function(err, items) {
  40. console.log('Renaming Files with following template on renamedFiles/');
  41. console.log('\t - DATE_P1(Char1)_vs_P2(Char2)_(Stage) \n');
  42.  
  43. if (!fs.existsSync("renamedFiles")){
  44. fs.mkdirSync("renamedFiles");
  45. }
  46. if (!fs.existsSync("generatedJSONs")){
  47. fs.mkdirSync("generatedJSONs");
  48. }
  49.  
  50. for (var i=0; i<items.length; i++) {
  51. var t_path = path.resolve() + '/files/' + items[i];
  52. var absolutePath = t_path.replace(/\\/g,"/");
  53.  
  54. const game = new SlippiGame(testFolder + items[i]);
  55. const settings = game.getSettings();
  56. const players = settings.players;
  57.  
  58. console.log(isASCII(players[1].nametag));
  59.  
  60. if (!isASCII(players[1].nametag)){
  61. var gameName = (players[0].nametag?players[0].nametag:"#")+"("+getChar(players[0].characterId)+"-"+players[0].characterColor+")_vs_"+"#"+"("+getChar(players[1].characterId)+"-"+players[1].characterColor+")_("+getStage(settings.stageId)+")";
  62. }
  63. else{
  64. var gameName = (players[0].nametag?players[0].nametag:"#")+"("+getChar(players[0].characterId)+"-"+players[0].characterColor+")_vs_"+(players[1].nametag?players[1].nametag:"#")+"("+getChar(players[1].characterId)+"-"+players[1].characterColor+")_("+getStage(settings.stageId)+")";
  65. }
  66.  
  67. //console.log(gameName);
  68.  
  69. var x = createdDate(testFolder+items[i]);
  70. var fileName = 'renamedFiles/'+x+"_"+gameName+".slp";
  71. fs.copyFile(testFolder+items[i],fileName,(err) => {
  72. if (err) throw err;
  73. });
  74. }
  75.  
  76. console.log("Files renamed! \n ********************");
  77. fs.readdir(renamedFolder, function(err, items) {
  78. console.log('Looking for combos with this parameters:');
  79. console.log('\t - Should kill:' + shouldKill);
  80. console.log('\t - Wobbling banned:' + wobblingBanned);
  81. console.log('\t - Combo of ' + comboPercentaje+'% or more');
  82. console.log('\t - Spike end:' +isSpike);
  83. console.log('Looking in '+items.length+' clips... \n');
  84.  
  85. for (var i=0; i<items.length; i++) {
  86. var t_path = path.resolve() + '/renamedFiles/' + items[i];
  87. var absolutePath = t_path.replace(/\\/g,"/");
  88.  
  89. const game = new SlippiGame(renamedFolder + items[i]);
  90. const stats = game.getStats();
  91.  
  92. for (var j=0; j<stats[object].length; j++) {
  93. if (stats[object][j].endPercent - stats[object][j].startPercent >= comboPercentaje && (shouldKill?stats[object][j].didKill:true) && (wobblingBanned?isNotAWobble(stats[object][j].moves):true) && (isSpike && (stats[object][j].moves[stats[object][j].moves.length-1].moveId==17))){
  94. comboCounter++;
  95. comboData = {
  96. startFrame : stats[object][j].startFrame - frameOffset1,
  97. endFrame : stats[object][j].endFrame + frameOffset2,
  98. path : absolutePath
  99. };
  100. jsonCombo.queue.push(comboData);
  101. }
  102. }
  103. process.stdout.write((i/items.length*100).toFixed(2)+"% complete... ("+comboCounter+" combos found)\r")
  104.  
  105. matchData = {
  106. startFrame : -100,
  107. endFrame : stats.lastFrame,
  108. path : absolutePath
  109. };
  110. jsonAllMatches.queue.push(matchData);
  111. }
  112. fs.writeFile('generatedJSONs/comboData.json', JSON.stringify(jsonCombo), (err) => {
  113. if (!err) {
  114. console.log('Done! Total of '+comboCounter+' combos recorded at generatedJSONs/comboData.json!');
  115. }
  116. });
  117.  
  118. fs.writeFile('generatedJSONs/allMatches.json', JSON.stringify(jsonAllMatches), (err) => {
  119. if (!err) {
  120. console.log("Done! All "+ items.length+" matches in generatedJSONs/allMatches.json");
  121. }
  122. });
  123. });
  124. });
  125.  
  126. function isNotAWobble(movesArray) { // checks if there are more than 8 grab pummels in combo
  127. if(!wobblingBanned){
  128. return true;
  129. }
  130. // TO DO:
  131. // Check if either character is ICs before loop
  132. var pummel = 0;
  133. for (var move in movesArray) {
  134. if (movesArray[move].moveId == 52){
  135. pummel++;
  136. if(pummel >= 8){
  137. return false;
  138. }
  139. }
  140. }
  141. return true;
  142. }
  143.  
  144. function createdDate (path) {
  145. const stats = fs.statSync(path)
  146. var x = (stats.mtime+" ").split(' ');
  147. return ((x[2]+"_"+x[4].replace(':', '_').replace(':', '_')));
  148. }
  149.  
  150. function getStage(x){
  151. switch(x){
  152. case 2:
  153. return "FoD";
  154. case 3:
  155. return "PS";
  156. case 8:
  157. return "YS";
  158. case 28:
  159. return "DL";
  160. case 31:
  161. return "Battlefield";
  162. case 32:
  163. return "FD";
  164. default:
  165. return x;
  166. }
  167. }
  168.  
  169. function isASCII(str) {
  170. return /^[\x00-\x7F]*$/.test(str);
  171. }
  172.  
  173. function getChar(x) {
  174. switch(x){
  175. case 0:
  176. return "Captain_Falcon";
  177. case 1:
  178. return "DK";
  179. case 2:
  180. return "Fox";
  181. case 3:
  182. return "Game_Watch";
  183. case 4:
  184. return "Kirby";
  185. case 5:
  186. return "Bowser";
  187. case 6:
  188. return "Link";
  189. case 7:
  190. return "Luigi";
  191. case 8:
  192. return "Mario";
  193. case 9:
  194. return "Marth";
  195. case 10:
  196. return "Mewtwo";
  197. case 11:
  198. return "Ness";
  199. case 12:
  200. return "Peach";
  201. case 13:
  202. return "Pikachu";
  203. case 14:
  204. return "ICs";
  205. case 15:
  206. return "Puff";
  207. case 16:
  208. return "Samus";
  209. case 17:
  210. return "Yoshi";
  211. case 18:
  212. return "Zelda";
  213. case 19:
  214. return "Sheik";
  215. case 20:
  216. return "Falco";
  217. case 21:
  218. return "Y_Link";
  219. case 22:
  220. return "Dr_Mario";
  221. case 23:
  222. return "Roy";
  223. case 24:
  224. return "Pichu";
  225. case 24:
  226. return "Ganondorf";
  227. default:
  228. return x;
  229. }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement