Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * PJM>BK2 Input converter v0.01
- * Author: CoolKirby
- * Language: Java (with English comments)
- * First created: 9/12/15
- * Last revised: 9/13/15
- * Works with 1 and 2-player PJMs!
- * Does not support resets or changing discs.
- * Does not support DualShock input, but might be added later if there's demand
- */
- import java.io.IOException; //Necessary to prevent exceptions
- import java.io.FileReader;
- import java.io.BufferedReader;
- import java.io.FileWriter;
- import java.io.PrintWriter;
- /*
- Input formats:
- PJM:|Square|Cross|Circle|Triangle|R1|L1|R2|L2|Left|Down|Right|Up|Start|Select|
- BK2:|Up|Down|Left|Right|Select|Start|Square|Triangle|Circle|Cross|L1|R1|L2|R2|L3|R3|MODE| <--DualShock only
- PJM #XO^1234LDRUSs
- BK2 UDLRsSQTOXlrLR...
- num 0123456789ABCDEFa
- */
- public class PJMConverter{
- public static void main( String[] args ) throws IOException{
- try{
- countLines("convert.pjm"); //File to read from (input - PJM)
- }catch(IOException e){
- System.out.println(e.getMessage());
- }
- }
- public static void countLines(String path) throws IOException{
- FileReader a = new FileReader(path);
- BufferedReader num = new BufferedReader(a); //Open countLines text buffer
- String aLine;
- int numLines=0;
- while ((aLine=num.readLine()) != null){ //Count number of lines in the PJM
- numLines++;
- }
- num.close(); //Close countLines text buffer
- if(numLines<2){ //Assume error if input file only has one line
- System.out.println("Input PJM is too short! Conversion failed. Please check your file.");
- System.exit(5000);
- }
- OpenFile(path,numLines);
- }
- public static void OpenFile(String path, int numLines) throws IOException{
- String output="Input Log.txt"; //File to write to (output - BK2 Input Log.txt)
- FileReader fr = new FileReader(path); // Loads initial PJM
- BufferedReader reader = new BufferedReader(fr); // Reads whole lines in to speed up script
- String[] PJMData = new String[numLines]; // Create the array of PJM input with the calculated # of lines
- int inputStart;
- PJMData[0]=reader.readLine(); //Read the first line of the PJM separately
- if(PJMData[0].indexOf('#')==-1) //Find where the input starts
- inputStart=PJMData[0].indexOf('.');
- else
- inputStart=PJMData[0].indexOf('#'); //Failsafe in case Square was pressed on first frame
- PJMData[0]=PJMData[0].substring(inputStart,PJMData[0].length()); //Strip off the PJM header
- for(int i=1;i<numLines;i++){ //Read the rest of the PJM starting from frame 2
- PJMData[i]=reader.readLine();
- if(numLines-i==0){
- PJMData[i]=reader.readLine(); //"Catch" the elusive last input and add it to the table
- }
- }
- reader.close();
- parseFile(PJMData,numLines,path,output);
- }
- public static void parseFile(String[] PJMData, int numLines, String path, String output) throws IOException {
- int numBK2Lines=numLines+1;
- Boolean P2=false; //discreetly checks for Player 2 input
- if(PJMData[1].charAt(15)=='.'){
- P2=true;
- }
- String[] BK2Data = new String[numBK2Lines]; //1 line larger to fit BK2 LogKey comment
- if(P2==true){ //If Player 2 input exists, recognize it
- //Add in BizHawk LogKey line for author's convenience
- BK2Data[0]="LogKey:#Disc Select|Open|Close|Reset|#P1 Up|P1 Down|P1 Left|P1 Right|P1 Select|P1 Start|P1 Square|P1 Triangle|P1 Circle|P1 Cross|P1 L1|P1 R1|P1 L2|P1 R2|#P2 Up|P2 Down|P2 Left|P2 Right|P2 Select|P2 Start|P2 Square|P2 Triangle|P2 Circle|P2 Cross|P2 L1|P2 R1|P2 L2|P2 R2|";
- }else{
- BK2Data[0]="LogKey:#Disc Select|Open|Close|Reset|#P1 Up|P1 Down|P1 Left|P1 Right|P1 Select|P1 Start|P1 Square|P1 Triangle|P1 Circle|P1 Cross|P1 L1|P1 R1|P1 L2|P1 R2|";
- }
- for(int i=1,p=0;i<numBK2Lines;i++,p++){ // The big parser! Player 1 Input
- if(P2){ //If Player 2 input exists, blank two rows of dots
- BK2Data[i]="..............|.............."; // The default 2-Player BK2 Input Log
- }else{
- BK2Data[i]=".............."; // The default 1-Player BK2 Input Log
- }
- if(PJMData[p].charAt(0)=='#') //Square
- BK2Data[i]=BK2Data[i].substring(0,6)+'Q'+BK2Data[i].substring(6,13);
- if(PJMData[p].charAt(1)=='X') //Cross
- BK2Data[i]=BK2Data[i].substring(0,9)+'X'+BK2Data[i].substring(9,13);
- if(PJMData[p].charAt(2)=='O') //Circle
- BK2Data[i]=BK2Data[i].substring(0,8)+'O'+BK2Data[i].substring(8,13);
- if(PJMData[p].charAt(3)=='^') //Triangle
- BK2Data[i]=BK2Data[i].substring(0,7)+'T'+BK2Data[i].substring(7,13);
- if(PJMData[p].charAt(4)=='1') //R1
- BK2Data[i]=BK2Data[i].substring(0,11)+'r'+BK2Data[i].substring(11,13);
- if(PJMData[p].charAt(5)=='2') //L1
- BK2Data[i]=BK2Data[i].substring(0,10)+'l'+BK2Data[i].substring(10,13);
- if(PJMData[p].charAt(6)=='3') //R2
- BK2Data[i]=BK2Data[i].substring(0,13)+'R';
- if(PJMData[p].charAt(7)=='4') //L2
- BK2Data[i]=BK2Data[i].substring(0,12)+'L'+BK2Data[i].substring(12,13);
- if(PJMData[p].charAt(8)=='L') //D-Pad Left
- BK2Data[i]=BK2Data[i].substring(0,2)+'L'+BK2Data[i].substring(2,13);
- if(PJMData[p].charAt(9)=='D') //D-Pad Down
- BK2Data[i]=BK2Data[i].substring(0,1)+'D'+BK2Data[i].substring(1,13);
- if(PJMData[p].charAt(10)=='R') //D-Pad Right
- BK2Data[i]=BK2Data[i].substring(0,3)+'R'+BK2Data[i].substring(3,13);
- if(PJMData[p].charAt(11)=='U') //D-Pad Up
- BK2Data[i]='U'+BK2Data[i].substring(0,13);
- if(PJMData[p].charAt(12)=='S') //Start
- BK2Data[i]=BK2Data[i].substring(0,5)+'S'+BK2Data[i].substring(5,13);
- if(PJMData[p].charAt(13)=='s') //Select
- BK2Data[i]=BK2Data[i].substring(0,4)+'s'+BK2Data[i].substring(4,13);
- if(P2){ //If Player 2 input exists, parse it!
- BK2Data[i]=BK2Data[i].substring(0,14)+"|..............";
- if(PJMData[p].charAt(15)=='#') //Square
- BK2Data[i]=BK2Data[i].substring(0,21)+'Q'+BK2Data[i].substring(21,28);
- if(PJMData[p].charAt(16)=='X') //Cross
- BK2Data[i]=BK2Data[i].substring(0,24)+'X'+BK2Data[i].substring(24,28);
- if(PJMData[p].charAt(17)=='O') //Circle
- BK2Data[i]=BK2Data[i].substring(0,23)+'O'+BK2Data[i].substring(23,28);
- if(PJMData[p].charAt(18)=='^') //Triangle
- BK2Data[i]=BK2Data[i].substring(0,22)+'T'+BK2Data[i].substring(22,28);
- if(PJMData[p].charAt(19)=='1') //R1
- BK2Data[i]=BK2Data[i].substring(0,26)+'r'+BK2Data[i].substring(26,28);
- if(PJMData[p].charAt(20)=='2') //L1
- BK2Data[i]=BK2Data[i].substring(0,25)+'l'+BK2Data[i].substring(25,28);
- if(PJMData[p].charAt(21)=='3') //R2
- BK2Data[i]=BK2Data[i].substring(0,28)+'R';
- if(PJMData[p].charAt(22)=='4') //L2
- BK2Data[i]=BK2Data[i].substring(0,27)+'L'+BK2Data[i].substring(27,28);
- if(PJMData[p].charAt(23)=='L') //D-Pad Left
- BK2Data[i]=BK2Data[i].substring(0,17)+'L'+BK2Data[i].substring(17,28);
- if(PJMData[p].charAt(24)=='D') //D-Pad Down
- BK2Data[i]=BK2Data[i].substring(0,16)+'D'+BK2Data[i].substring(16,28);
- if(PJMData[p].charAt(25)=='R') //D-Pad Right
- BK2Data[i]=BK2Data[i].substring(0,18)+'R'+BK2Data[i].substring(18,28);
- if(PJMData[p].charAt(26)=='U') //D-Pad Up
- BK2Data[i]='U'+BK2Data[i].substring(0,28);
- if(PJMData[p].charAt(27)=='S') //Start
- BK2Data[i]=BK2Data[i].substring(0,20)+'S'+BK2Data[i].substring(20,28);
- if(PJMData[p].charAt(28)=='s') //Select
- BK2Data[i]=BK2Data[i].substring(0,19)+'s'+BK2Data[i].substring(19,28);
- }
- }
- /*
- PJM:|Sq|Cros|Circ|Trian|....R1|...L1|....R2|......L2|..Left|.Down|Rt|Up|St|Se|
- 6 9 8 7 11 10 13 12 2 1 3 0 5 4
- # X O ^ 1 2 3 4 L D R U S s
- BK2:|Up|Down|Left|Right|Select|Start|Square|Triangle|Circle|Cross|L1|R1|L2|R2|L3|R3|MODE| <--DualShock only
- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- U D L R s S Q T O X l r L R . . .
- PJM ..............||0| BK2 | -1,...| 128, 128, 128, 128,.................|
- num 0123456789ABCDEFa output | -1,...| 128, 128, 128, 128, + .............. + ...|
- */
- System.out.println(numBK2Lines+" lines in finished BK2");
- //Write File
- FileWriter write = new FileWriter(output);
- PrintWriter print_line = new PrintWriter(write); //use PrintWriter to print "%n" character on both Windows and Unix
- //Output all BK2 Input, including beginning and ending lines
- print_line.printf("%s"+"%n",BK2Data[0]); //First line is LogKey, no appended data needed
- for(int l=1;l<=numLines;l++){
- print_line.printf("| -1,...|"+"%s"+"|"+"%n",BK2Data[l]);
- }
- print_line.close(); // Close file printing stream
- System.out.println("Done! Check out Input Log.txt");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment