|
@@ -2,31 +2,68 @@ package QuickVerifyCrap;
|
|
|
|
|
|
import java.io.*;
|
|
import java.io.*;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
import java.util.LinkedList;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
public class SplitSecondArkSplitter {
|
|
public class SplitSecondArkSplitter {
|
|
public static boolean HACK = true;
|
|
public static boolean HACK = true;
|
|
|
|
|
|
|
|
+
|
|
|
|
+ public static void wiggler(String line, HashMap<String,String> filehashes, PrintWriter bw)
|
|
|
|
+ {
|
|
|
|
+ long wiggled = SplitSecondChecksumCheck.wiggleChecksum(line.replace('/','\\'));
|
|
|
|
+ filehashes.put(wiggled + "", line);
|
|
|
|
+
|
|
|
|
+ if(HACK)
|
|
|
|
+ bw.println(Long.toHexString(wiggled) + "|" + line);
|
|
|
|
+
|
|
|
|
+ wiggled = SplitSecondChecksumCheck.wiggleChecksum(line.replace('\\','/'));
|
|
|
|
+ filehashes.put(wiggled + "", line);
|
|
|
|
+ wiggled = SplitSecondChecksumCheck.wiggleChecksum(line);
|
|
|
|
+ filehashes.put(wiggled + "", line);
|
|
|
|
+ if(HACK)
|
|
|
|
+ bw.println(Long.toHexString(wiggled) + "|" + line);
|
|
|
|
+ }
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
HashMap<String, String> filehashes = new HashMap<>();
|
|
HashMap<String, String> filehashes = new HashMap<>();
|
|
|
|
+ HashSet<String> filehashes_scratchoff = new HashSet<>();
|
|
try (PrintWriter bw = new PrintWriter(new FileWriter("D:\\LOA\\000014\\filenames_debugdump.txt",true))) {
|
|
try (PrintWriter bw = new PrintWriter(new FileWriter("D:\\LOA\\000014\\filenames_debugdump.txt",true))) {
|
|
|
|
|
|
try (BufferedReader br = new BufferedReader(new FileReader("D:\\LOA\\000014\\filenames_preprocessed.txt"))) {
|
|
try (BufferedReader br = new BufferedReader(new FileReader("D:\\LOA\\000014\\filenames_preprocessed.txt"))) {
|
|
br.lines().forEach((line) ->
|
|
br.lines().forEach((line) ->
|
|
{
|
|
{
|
|
- long wiggled = SplitSecondChecksumCheck.wiggleChecksum(line);
|
|
|
|
- filehashes.put(wiggled + "", line);
|
|
|
|
- if(HACK)
|
|
|
|
- bw.println(Long.toHexString(wiggled) + "|" + line);
|
|
|
|
|
|
+ wiggler(line,filehashes,bw);
|
|
|
|
+
|
|
|
|
+ if(line.contains("PhysicsInstances"))
|
|
|
|
+ {
|
|
|
|
+ String[] hackificatedLine = line.replace('\\','/').replace('/','\\').split("\\\\");
|
|
|
|
+ int len = hackificatedLine.length;
|
|
|
|
+ String replaceme = hackificatedLine[len-2]+"_damage";
|
|
|
|
+ hackificatedLine[len-1] = hackificatedLine[len-1].replace(hackificatedLine[len-2],replaceme);
|
|
|
|
+ hackificatedLine[len-2]=replaceme;
|
|
|
|
+ wiggler(String.join("/",hackificatedLine),filehashes,bw);
|
|
|
|
+ }
|
|
|
|
+ if(line.contains("Vehicles"))
|
|
|
|
+ {
|
|
|
|
+ wiggler(line.replace("Low","XLow"),filehashes,bw);
|
|
|
|
+ }
|
|
|
|
+ /*if(line.contains("\\"))
|
|
|
|
+ {
|
|
|
|
+ String line_looper = line.split("\\\\",1)[1];
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }*/
|
|
|
|
+
|
|
});
|
|
});
|
|
} catch (FileNotFoundException e) {
|
|
} catch (FileNotFoundException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
- if (HACK)
|
|
|
|
- return;
|
|
|
|
|
|
+ /*if (HACK)
|
|
|
|
+ return;*/
|
|
String[] levelbases = {"airport_test_03", "docks", "downtown", "end_sequence",
|
|
String[] levelbases = {"airport_test_03", "docks", "downtown", "end_sequence",
|
|
"graveyard", "nem_downtown", "nem_graveyard", "nem_storm", "nem_training", "nem_warehouse", "powerplant"};
|
|
"graveyard", "nem_downtown", "nem_graveyard", "nem_storm", "nem_training", "nem_warehouse", "powerplant"};
|
|
|
|
|
|
@@ -37,6 +74,7 @@ public class SplitSecondArkSplitter {
|
|
for (int j = 0; j < 5; j++) {
|
|
for (int j = 0; j < 5; j++) {
|
|
filehashes.put(SplitSecondChecksumCheck.wiggleChecksum("q" + prefix + "_rig" + j + "MD.model.stream") + "", "q" + prefix + "_rig" + j + "MD.model.stream");
|
|
filehashes.put(SplitSecondChecksumCheck.wiggleChecksum("q" + prefix + "_rig" + j + "MD.model.stream") + "", "q" + prefix + "_rig" + j + "MD.model.stream");
|
|
filehashes.put(SplitSecondChecksumCheck.wiggleChecksum("q" + prefix + "_rig" + j + "L.model.stream") + "", "q" + prefix + "_rig" + j + "L.model.stream");
|
|
filehashes.put(SplitSecondChecksumCheck.wiggleChecksum("q" + prefix + "_rig" + j + "L.model.stream") + "", "q" + prefix + "_rig" + j + "L.model.stream");
|
|
|
|
+ filehashes.put(SplitSecondChecksumCheck.wiggleChecksum("q" + prefix + "_rig" + j + "S.model.stream") + "", "q" + prefix + "_rig" + j + "S.model.stream");
|
|
}
|
|
}
|
|
|
|
|
|
for (String base : levelbases) {
|
|
for (String base : levelbases) {
|
|
@@ -44,7 +82,12 @@ public class SplitSecondArkSplitter {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ filehashes.forEach((k,v)->filehashes_scratchoff.add(v));
|
|
|
|
+
|
|
try {
|
|
try {
|
|
|
|
+ String arkbasename = new File(args[0]).getName();
|
|
|
|
+ PrintWriter w = new PrintWriter("Q:\\LOA\\000014\\result\\" + arkbasename+".lst");
|
|
|
|
+ final PrintWriter wdb = new PrintWriter("Q:\\LOA\\000014\\result\\" + arkbasename+".lst.dbg");
|
|
RandomAccessFile f = new RandomAccessFile(args[0], "r");
|
|
RandomAccessFile f = new RandomAccessFile(args[0], "r");
|
|
f.readInt();
|
|
f.readInt();
|
|
f.readInt();
|
|
f.readInt();
|
|
@@ -73,16 +116,38 @@ public class SplitSecondArkSplitter {
|
|
System.out.println(Long.toHexString(csum2));
|
|
System.out.println(Long.toHexString(csum2));
|
|
fmd.filename = filename != null ? filename : "UNKNOWN_" + csum2;
|
|
fmd.filename = filename != null ? filename : "UNKNOWN_" + csum2;
|
|
fmd.checksum = csum2;
|
|
fmd.checksum = csum2;
|
|
|
|
+ if(filename !=null)
|
|
|
|
+ {
|
|
|
|
+ System.out.println("Matched:"+filename);
|
|
|
|
+ String fn1 = filename.replace('/','\\');
|
|
|
|
+ final String fn2 = fn1.replace('\\','/');
|
|
|
|
+ filehashes_scratchoff.removeIf((str)->{
|
|
|
|
+ String ifn1 = str.replace('/','\\');
|
|
|
|
+ String ifn2 = ifn1.replace('\\','/');
|
|
|
|
+ return fn2.equals(ifn2);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
fileslst.add(fmd);
|
|
fileslst.add(fmd);
|
|
}
|
|
}
|
|
|
|
+ filehashes_scratchoff.forEach((itm)->{wdb.println(itm);});
|
|
|
|
+ wdb.close();
|
|
for (FileMetaData fmd : fileslst) {
|
|
for (FileMetaData fmd : fileslst) {
|
|
- String arkbasename = new File(args[0]).getName();
|
|
|
|
String realresult = "Q:\\LOA\\000014\\result\\" + arkbasename + "\\" + fmd.filename;
|
|
String realresult = "Q:\\LOA\\000014\\result\\" + arkbasename + "\\" + fmd.filename;
|
|
File dst = new File(realresult);
|
|
File dst = new File(realresult);
|
|
dst.getParentFile().mkdirs();
|
|
dst.getParentFile().mkdirs();
|
|
bw.println(">>"+arkbasename+"||"+Long.toHexString(fmd.checksum)+"||"+fmd.filename);
|
|
bw.println(">>"+arkbasename+"||"+Long.toHexString(fmd.checksum)+"||"+fmd.filename);
|
|
- if (fmd.zipped) {
|
|
|
|
-
|
|
|
|
|
|
+ w.println(Long.toHexString(fmd.checksum)+";"+fmd.filename);
|
|
|
|
+ if(fmd!=null)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fmd.zipped&&!fmd.zipped) {
|
|
|
|
+ String transferfile = "Q:\\LOA\\000014\\scratch\\result.dat";
|
|
|
|
+ File tmp = new File(transferfile);
|
|
|
|
+ if(tmp.exists())
|
|
|
|
+ {
|
|
|
|
+ tmp.delete();
|
|
|
|
+ }
|
|
String outfile = "Q:\\LOA\\000014\\scratch\\out.dat";
|
|
String outfile = "Q:\\LOA\\000014\\scratch\\out.dat";
|
|
File of = new File(outfile);
|
|
File of = new File(outfile);
|
|
of.getParentFile().mkdirs();
|
|
of.getParentFile().mkdirs();
|
|
@@ -96,9 +161,9 @@ public class SplitSecondArkSplitter {
|
|
rof.writeInt(size);
|
|
rof.writeInt(size);
|
|
rof.write(compressed);
|
|
rof.write(compressed);
|
|
rof.close();
|
|
rof.close();
|
|
- File workdir = new File("D:\\LOA\\000014\\scratch");
|
|
|
|
|
|
+ File workdir = new File("Q:\\LOA\\000014\\scratch");
|
|
runTool(workdir, "D:\\LOA\\000014\\quickbms.exe", "-R", "D:\\LOA\\000014\\helper.bms", outfile);
|
|
runTool(workdir, "D:\\LOA\\000014\\quickbms.exe", "-R", "D:\\LOA\\000014\\helper.bms", outfile);
|
|
- String transferfile = "D:\\LOA\\000014\\scratch\\result.dat";
|
|
|
|
|
|
+
|
|
new File(transferfile).renameTo(dst);
|
|
new File(transferfile).renameTo(dst);
|
|
} else {
|
|
} else {
|
|
byte[] compressed = new byte[fmd.zsize];
|
|
byte[] compressed = new byte[fmd.zsize];
|
|
@@ -109,6 +174,7 @@ public class SplitSecondArkSplitter {
|
|
rof.close();
|
|
rof.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ w.close();
|
|
} catch (FileNotFoundException e) {
|
|
} catch (FileNotFoundException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|