From 27d56bdab1905a326e32668b0a4796f170dea431 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 11 May 2015 16:03:07 -0700 Subject: [PATCH] Update gitignore and mapmerge for tgstyle maptree This commit updates the .gitignore file to ignore the proper files with the new tree system, and modifies the mapmerge files to the latest -tg- files, as those are already compatible and written for the new tree system. --- .gitignore | 6 +- tools/mapmerge/1prepare_map.bat | 6 - tools/mapmerge/2clean_map.bat | 5 - tools/mapmerge/HOWTO.txt | 4 - tools/mapmerge/MapPatcher.jar | Bin 11419 -> 10136 bytes tools/mapmerge/Source/Location.java | 42 +++ tools/mapmerge/Source/META-INF/MANIFEST.MF | 4 + tools/mapmerge/Source/Map.java | 314 +++++++++++++++++++++ tools/mapmerge/Source/MapPatcher.java | 304 ++++++++++++++++++++ tools/mapmerge/Source/SavingThread.java | 37 +++ tools/mapmerge/clean_map.bat | 7 + tools/mapmerge/clean_map_git.sh | 7 - tools/mapmerge/install.txt | 4 +- tools/mapmerge/install_driver.bat | 7 + tools/mapmerge/prepare_map.bat | 12 + 15 files changed, 733 insertions(+), 26 deletions(-) delete mode 100644 tools/mapmerge/1prepare_map.bat delete mode 100644 tools/mapmerge/2clean_map.bat delete mode 100644 tools/mapmerge/HOWTO.txt create mode 100644 tools/mapmerge/Source/Location.java create mode 100644 tools/mapmerge/Source/META-INF/MANIFEST.MF create mode 100644 tools/mapmerge/Source/Map.java create mode 100644 tools/mapmerge/Source/MapPatcher.java create mode 100644 tools/mapmerge/Source/SavingThread.java create mode 100644 tools/mapmerge/clean_map.bat delete mode 100644 tools/mapmerge/clean_map_git.sh create mode 100644 tools/mapmerge/install_driver.bat create mode 100644 tools/mapmerge/prepare_map.bat diff --git a/.gitignore b/.gitignore index 1618189450a..3bb4b517e45 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ #ignore other, specific files and folers data/ -/maps/backup/* -/maps/RandomZLevels/backup/* -/maps/cyberiad.dmm.backup +/_maps/map_files/backup/* +/_maps/map_files/**/backup/* +/_maps/map_files/**/*.dmm.backup /nano/debug.html diff --git a/tools/mapmerge/1prepare_map.bat b/tools/mapmerge/1prepare_map.bat deleted file mode 100644 index 05fddbce240..00000000000 --- a/tools/mapmerge/1prepare_map.bat +++ /dev/null @@ -1,6 +0,0 @@ -set MAPFILE=cyberiad.dmm - -cd ../../maps -copy %MAPFILE% %MAPFILE%.backup - -pause diff --git a/tools/mapmerge/2clean_map.bat b/tools/mapmerge/2clean_map.bat deleted file mode 100644 index 02590eb48f7..00000000000 --- a/tools/mapmerge/2clean_map.bat +++ /dev/null @@ -1,5 +0,0 @@ -set MAPFILE=cyberiad.dmm - -java -jar MapPatcher.jar -clean ../../maps/%MAPFILE%.backup ../../maps/%MAPFILE% ../../maps/%MAPFILE% - -pause \ No newline at end of file diff --git a/tools/mapmerge/HOWTO.txt b/tools/mapmerge/HOWTO.txt deleted file mode 100644 index 848044d405c..00000000000 --- a/tools/mapmerge/HOWTO.txt +++ /dev/null @@ -1,4 +0,0 @@ -1.Click 1prepare_map.bat -2. Do your map edits. -3.Click 2clean_map.bat -4. Delete Cyberiad.dmm.backup in /maps \ No newline at end of file diff --git a/tools/mapmerge/MapPatcher.jar b/tools/mapmerge/MapPatcher.jar index f4351b3603798c5606142a4f2db237f0869b0501..5cbaad488c146d8a7453f114260dbccfe61e7861 100644 GIT binary patch literal 10136 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≪~EwSnCzJ||{( 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 BJ<9+9 diff --git a/tools/mapmerge/Source/Location.java b/tools/mapmerge/Source/Location.java new file mode 100644 index 00000000000..2a901d54b27 --- /dev/null +++ b/tools/mapmerge/Source/Location.java @@ -0,0 +1,42 @@ +class Location +{ + int x; + int y; + int z; + + public Location() + { + } + + public Location(int paramInt1, int paramInt2, int paramInt3) + { + this.x = paramInt1; + this.y = paramInt2; + this.z = paramInt3; + } + + public void set(int paramInt1, int paramInt2, int paramInt3) + { + this.x = paramInt1; + this.y = paramInt2; + this.z = paramInt3; + } + + public boolean equals(Object paramObject) + { + if (!(paramObject instanceof Location)) return false; + Location localLocation = (Location)paramObject; + if ((this.x != localLocation.x) || (this.y != localLocation.y) || (this.z != localLocation.z)) return false; + return true; + } + + public int hashCode() + { + return (this.z * 256 + this.y) * 256 + this.x; + } + + public String toString() + { + return "(" + this.x + "," + this.y + "," + this.z + ")"; + } +} diff --git a/tools/mapmerge/Source/META-INF/MANIFEST.MF b/tools/mapmerge/Source/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..5aa53c2fa28 --- /dev/null +++ b/tools/mapmerge/Source/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Created-By: 1.6.0_31 (Sun Microsystems Inc.) +Main-Class: MapPatcher + diff --git a/tools/mapmerge/Source/Map.java b/tools/mapmerge/Source/Map.java new file mode 100644 index 00000000000..949db7e6cad --- /dev/null +++ b/tools/mapmerge/Source/Map.java @@ -0,0 +1,314 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; +import java.util.Vector; + +public class Map +{ + boolean sizeunknown; + int minx; + int miny; + int minz; + int maxx; + int maxy; + int maxz; + HashMap tile_types; + HashMap codes_by_value; + HashMap tiles; + + public Map() + { + this.sizeunknown = true; + this.tile_types = new HashMap(); + this.codes_by_value = new HashMap(); + this.tiles = new HashMap(); + } + + public Map(File paramFile) + { + this(paramFile, false); + } + + public Map(File paramFile, boolean paramBoolean) + { + this.sizeunknown = true; + try { + BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(paramFile))); + + this.tile_types = new HashMap(); + this.codes_by_value = new HashMap(); + this.tiles = new HashMap(); + + MapPatcher.Systemoutprintln(new StringBuilder().append("Loading map ").append(paramFile.getName()).toString()); + MapPatcher.Systemoutprint("Loading tiles"); + String str1 = ""; + int i = 0; + while ((str1 = localBufferedReader.readLine()) != null) + { + if (str1.equals("")) break; + if (str1.startsWith("\"")) + { + if (i < 1) + { + int j = str1.indexOf("\"", 1); + i = j - 1; + } + String str2 = str1.substring(1, 1 + i); + String str3 = str1.substring(str1.indexOf("(")); + this.tile_types.put(str2, str3); + this.codes_by_value.put(str3, str2); + } + } + + MapPatcher.Systemoutprintln(new StringBuilder().append(" ").append(this.tile_types.size()).toString()); + if (!paramBoolean) + { + MapPatcher.Systemoutprintln("Loading levels"); + while (true) + { + if ((str1 = localBufferedReader.readLine()) != null) { if (str1.startsWith("(")) break label270; } else { + label270: if (str1 == null) + { + break; + } + int k = str1.indexOf(",", 1); + int m = Integer.parseInt(str1.substring(1, k)); + str1 = str1.substring(k); + k = str1.indexOf(",", 1); + int n = Integer.parseInt(str1.substring(1, k)); + str1 = str1.substring(k); + k = str1.indexOf(")", 1); + int i1 = Integer.parseInt(str1.substring(1, k)); + + MapPatcher.Systemoutprintln(new StringBuilder().append("New map part from (").append(m).append(",").append(n).append(",").append(i1).append(")").toString()); + + int i3 = n; + if (this.sizeunknown) + { + this.minx = m; this.maxx = this.minx; + this.miny = n; this.maxy = this.miny; + this.minz = i1; this.maxz = this.minz; + this.sizeunknown = false; + } + if (this.minz > i1) this.minz = i1; + if (this.maxz < i1) this.maxz = i1; + while (!(str1 = localBufferedReader.readLine()).startsWith("\"}")) + { + int i2 = m; + if (this.miny > i3) this.miny = i3; + if (this.maxy < i3) this.maxy = i3; + while (str1.length() > 0) + { + String str4 = str1.substring(0, i); + Location localLocation = new Location(i2, i3, i1); + if (this.minx > i2) this.minx = i2; + if (this.maxx < i2) this.maxx = i2; + this.tiles.put(localLocation, this.tile_types.get(str4)); + str1 = str1.substring(i); + i2++; + } + i3++; + } + } + } + } + localBufferedReader.close(); + } + catch (Exception localException) + { + localException.printStackTrace(); + } + } + + public void mirrorY() + { + for (int i = this.minz; i <= this.maxz; i++) + for (int j = this.minx; j <= this.maxx; j++) + for (int k = this.miny; k < (this.miny + this.maxy) / 2; k++) + { + int m = this.maxy - (k - this.miny); + String str = contentAt2(j, k, i); + setAt(j, k, i, contentAt2(j, m, i)); + setAt(j, m, i, str); + } + } + + public String contentAt(int paramInt1, int paramInt2, int paramInt3) + { + Location localLocation = new Location(paramInt1, paramInt2, paramInt3); + String str = (String)this.tiles.get(localLocation); + if (str == null) System.err.println(new StringBuilder().append("Null at ").append(paramInt1).append(",").append(paramInt2).append(",").append(paramInt3).append(" Possible loading error").toString()); + return str == null ? "null" : str; + } + + public String contentAt2(int paramInt1, int paramInt2, int paramInt3) + { + Location localLocation = new Location(paramInt1, paramInt2, paramInt3); + return (String)this.tiles.get(localLocation); + } + + public void setAt(int paramInt1, int paramInt2, int paramInt3, String paramString) + { + if (this.sizeunknown) + { + this.minx = (this.maxx = paramInt1); + this.miny = (this.maxy = paramInt2); + this.minz = (this.maxz = paramInt3); + this.sizeunknown = false; + } + else + { + this.minx = Math.min(this.minx, paramInt1); + this.miny = Math.min(this.miny, paramInt2); + this.minz = Math.min(this.minz, paramInt3); + this.maxx = Math.max(this.maxx, paramInt1); + this.maxy = Math.max(this.maxy, paramInt2); + this.maxz = Math.max(this.maxz, paramInt3); + } + Location localLocation = new Location(paramInt1, paramInt2, paramInt3); + localLocation.set(paramInt1, paramInt2, paramInt3); + this.tiles.put(localLocation, paramString); + } + + public void save(File paramFile) throws Exception + { + saveReferencing(paramFile, null); + } + + public void saveReferencing(File paramFile, Map paramMap) throws Exception + { + FileWriter localFileWriter = new FileWriter(paramFile); + + this.tile_types.clear(); + this.codes_by_value.clear(); + Vector localVector1 = new Vector(); + for (Object localObject1 = this.tiles.keySet().iterator(); ((Iterator)localObject1).hasNext(); ) { Location localLocation = (Location)((Iterator)localObject1).next(); + + String str1 = (String)this.tiles.get(localLocation); + if (!localVector1.contains(str1)) + localVector1.add(str1); + } + MapPatcher.Systemoutprintln(new StringBuilder().append("We have ").append(localVector1.size()).append(" different tiles").toString()); + localObject1 = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; + + int i = 1; + int j = localObject1.length; + while (j < localVector1.size()) + { + j *= localObject1.length; + i++; + } + Vector localVector2; + if (paramMap == null) { + localVector2 = localVector1; + } + else { + localVector2 = new Vector(); + for (Iterator localIterator = localVector1.iterator(); localIterator.hasNext(); ) { localObject2 = (String)localIterator.next(); + + if (paramMap.codes_by_value.containsKey(localObject2)) + { + localObject3 = paramMap.getIdFor((String)localObject2); + this.tile_types.put(localObject3, localObject2); + this.codes_by_value.put(localObject2, localObject3); + } + else { + localVector2.add(localObject2); + } } + localVector1.clear(); + } + + int k = 0; + for (Object localObject2 = localVector2.iterator(); ((Iterator)localObject2).hasNext(); ) { localObject3 = (String)((Iterator)localObject2).next(); + do + { + str2 = int2code((String[])localObject1, k, i); + k++; + }while (this.tile_types.containsKey(str2)); + this.tile_types.put(str2, localObject3); + this.codes_by_value.put(localObject3, str2); + } + String str2; + localVector2.clear(); + + k = 0; + for (int m = 0; m < this.tile_types.size(); m++) + { + do + { + localObject3 = int2code((String[])localObject1, k, i); + k++; + }while (!this.tile_types.containsKey(localObject3)); + str2 = (String)this.tile_types.get(localObject3); + localFileWriter.write(new StringBuilder().append("\"").append((String)localObject3).append("\" = ").append(str2).append("\r\n").toString()); + } + localVector2.clear(); + + localFileWriter.write("\n"); + + m = 1 + this.maxz - this.minz; + Object localObject3 = new SavingThread[m]; + int n = (this.maxy - this.miny) * ((this.maxx - this.minx) * i + 2) + 32; + + for (k = 0; k < m; k++) + { + localObject3[k] = new SavingThread(this.minz + k, this, n); + localObject3[k].start(); + } + + int i1 = 0; + String str3 = ""; + while (i1 == 0) { + try { + Thread.sleep(100L); } catch (Exception localException) { + } + i1 = 1; + + str3 = ""; + for (k = 0; k < m; k++) + { + if (!localObject3[k].done) + i1 = 0; + if (str3.length() != 0) str3 = new StringBuilder().append(str3).append(" ").toString(); + str3 = new StringBuilder().append(str3).append(localObject3[k].done ? "Done" : new StringBuilder().append(localObject3[k].progress).append("%").toString()).toString(); + } + MapPatcher.Systemoutprint(new StringBuilder().append(str3).append("\r").toString()); + } + + for (k = 0; k < m; k++) { + localFileWriter.write(localObject3[k].result.toString()); + } + localFileWriter.flush(); + localFileWriter.close(); + } + + public String getIdFor(String paramString) + { + if (this.codes_by_value.containsKey(paramString)) + { + return (String)this.codes_by_value.get(paramString); + } + return "???"; + } + + public String int2code(String[] paramArrayOfString, int paramInt1, int paramInt2) + { + String str = ""; + while (paramInt1 >= paramArrayOfString.length) + { + int i = paramInt1 % paramArrayOfString.length; + str = new StringBuilder().append(paramArrayOfString[i]).append(str).toString(); + paramInt1 -= i; + paramInt1 /= paramArrayOfString.length; + } + str = new StringBuilder().append(paramArrayOfString[paramInt1]).append(str).toString(); + while (str.length() < paramInt2) str = new StringBuilder().append(paramArrayOfString[0]).append(str).toString(); + return str; + } +} diff --git a/tools/mapmerge/Source/MapPatcher.java b/tools/mapmerge/Source/MapPatcher.java new file mode 100644 index 00000000000..c8d50b9b2fe --- /dev/null +++ b/tools/mapmerge/Source/MapPatcher.java @@ -0,0 +1,304 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.util.Arrays; + +public class MapPatcher +{ + static boolean silent = false; + + public static void main(String[] paramArrayOfString) + { + String str1 = "usage: [me] -diff [old_map] [new_map] [diff_file]"; + String str2 = "usage: [me] -patch [old_map] [diff_file] [new_map]"; + String str3 = "usage: [me] -pack [unpacked] [packed.dmm]"; + String str4 = "usage: [me] -unpack [packed.dmm] [unpacked]"; + String str5 = "usage: [me] -clean [oldmap.dmm] [newmap.dmm] [cleaned.dmm]"; + String str6 = "usage: [me] -merge [original] [local] [remote] [output]"; + + for (int i = 0; i < paramArrayOfString.length; i++) + if (paramArrayOfString[i].equalsIgnoreCase("-silent")) + { + silent = true; + for (; i < paramArrayOfString.length - 1; i++) + paramArrayOfString[i] = paramArrayOfString[(i + 1)]; + paramArrayOfString = (String[])Arrays.copyOf(paramArrayOfString, paramArrayOfString.length - 1); + break; + } + Object localObject; + int i2; + int i3; + int i5; + if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-merge"))) + { + if (paramArrayOfString.length < 5) + { + System.out.println(str6); + try { System.in.read(); } catch (Exception localException1) { + }return; + } + + Map localMap1 = new Map(new File(paramArrayOfString[1])); + localObject = new Map(new File(paramArrayOfString[2])); + Map localMap8 = new Map(new File(paramArrayOfString[3])); + Map localMap9 = new Map(); + + if ((localMap1.minx != ((Map)localObject).minx) || (localMap1.minx != localMap8.minx) || (localMap1.maxx != ((Map)localObject).maxx) || (localMap1.maxx != localMap8.maxx) || (localMap1.miny != ((Map)localObject).miny) || (localMap1.miny != localMap8.miny) || (localMap1.maxy != ((Map)localObject).maxy) || (localMap1.maxy != localMap8.maxy) || (localMap1.minz != ((Map)localObject).minz) || (localMap1.minz != localMap8.minz) || (localMap1.maxz != ((Map)localObject).maxz) || (localMap1.maxz != localMap8.maxz)) + { + Systemoutprintln("Map sizes differ"); + System.exit(1); + } + try + { + for (int n = localMap1.minz; n <= localMap1.maxz; n++) + for (i2 = localMap1.miny; i2 <= localMap1.maxy; i2++) + for (i3 = localMap1.minx; i3 <= localMap1.maxx; i3++) + { + boolean bool1 = localMap1.contentAt(i3, i2, n).equals(((Map)localObject).contentAt(i3, i2, n)); + boolean bool2 = localMap1.contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n)); + i5 = ((Map)localObject).contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n)); + if ((!bool1) && (!bool2)) + { + if (i5 == 0) + { + Systemoutprintln(i3 + "," + i2 + "," + n + " local and remote don't match original and differ"); + System.exit(1); + } + else { + localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n)); + } + } else if (!bool1) + localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n)); + else if (!bool2) + localMap9.setAt(i3, i2, n, localMap8.contentAt(i3, i2, n)); + else + localMap9.setAt(i3, i2, n, localMap1.contentAt(i3, i2, n)); + } + Systemoutprintln("Saving"); + localMap9.saveReferencing(new File(paramArrayOfString[4]), localMap1); + Systemoutprintln("Done"); + } + catch (Exception localException12) + { + localException12.printStackTrace(); + } + } + else + { + int m; + int i1; + if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-diff"))) + { + if (paramArrayOfString.length < 4) + { + System.out.println(str1); + try { System.in.read(); } catch (Exception localException2) { + }return; + } + + Map localMap2 = new Map(new File(paramArrayOfString[1])); + localObject = new Map(new File(paramArrayOfString[2])); + + int j = Math.max(localMap2.minx, ((Map)localObject).minx); + m = Math.min(localMap2.maxx, ((Map)localObject).maxx); + i1 = Math.max(localMap2.miny, ((Map)localObject).miny); + i2 = Math.min(localMap2.maxy, ((Map)localObject).maxy); + i3 = Math.max(localMap2.minz, ((Map)localObject).minz); + int i4 = Math.min(localMap2.maxz, ((Map)localObject).maxz); + Systemoutprintln("Comparing: x(" + j + "-" + m + ") y(" + i1 + "-" + i2 + ") z(" + i3 + "-" + i4 + ")"); + try + { + FileWriter localFileWriter2 = new FileWriter(paramArrayOfString[3]); + i5 = 0; + for (int i6 = i3; i6 <= i4; i6++) + { + Systemoutprintln("Z-level " + i6); + for (int i7 = i1; i7 <= i2; i7++) + for (int i8 = j; i8 <= m; i8++) + if (!localMap2.contentAt(i8, i7, i6).equals(((Map)localObject).contentAt(i8, i7, i6))) + { + localFileWriter2.write("(" + i8 + "," + (1 + ((Map)localObject).maxy - i7) + "," + i6 + ")=" + ((Map)localObject).contentAt(i8, i7, i6) + "\n"); + i5++; + } + } + localFileWriter2.flush(); + localFileWriter2.close(); + if (i5 == 0) + Systemoutprintln("Files do match"); + else + Systemoutprintln("Writed out " + i5 + " differences"); + } + catch (Exception localException13) + { + localException13.printStackTrace(); + } + + Systemoutprintln("Done"); + } + else + { + String str7; + String str8; + if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-patch"))) + { + if (paramArrayOfString.length < 4) + { + System.out.println(str2); + try { System.in.read(); } catch (Exception localException3) { + }return; + } + + Map localMap3 = new Map(new File(paramArrayOfString[1])); + try + { + localObject = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[2]))); + + while ((str7 = ((BufferedReader)localObject).readLine()) != null) + { + str7 = str7.trim(); + if (str7.length() != 0) + { + m = str7.indexOf(",", 1); + i1 = Integer.parseInt(str7.substring(1, m)); + str7 = str7.substring(m); + m = str7.indexOf(",", 1); + i2 = Integer.parseInt(str7.substring(1, m)); + str7 = str7.substring(m); + m = str7.indexOf(")", 1); + i3 = Integer.parseInt(str7.substring(1, m)); + str8 = str7.substring(str7.indexOf("=") + 1); + localMap3.setAt(i1, 1 + localMap3.maxy - i2, i3, str8); + } + } + localMap3.save(new File(paramArrayOfString[3])); + } + catch (Exception localException8) + { + localException8.printStackTrace(); + } + + Systemoutprintln("Done"); + } + else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-pack"))) + { + if (paramArrayOfString.length < 3) + { + System.out.println(str3); + try { System.in.read(); } catch (Exception localException4) { + }return; + } + + Map localMap4 = new Map(); + try { + BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[1]))); + Systemoutprintln("Loading"); + + while ((str7 = localBufferedReader.readLine()) != null) + { + str7 = str7.trim(); + if (str7.length() != 0) + { + m = str7.indexOf(",", 1); + i1 = Integer.parseInt(str7.substring(1, m)); + str7 = str7.substring(m); + m = str7.indexOf(",", 1); + i2 = Integer.parseInt(str7.substring(1, m)); + str7 = str7.substring(m); + m = str7.indexOf(")", 1); + i3 = Integer.parseInt(str7.substring(1, m)); + str8 = str7.substring(str7.indexOf("=") + 1); + localMap4.setAt(i1, i2, i3, str8); + } + } + Systemoutprintln("Flipping"); + localMap4.mirrorY(); + Systemoutprintln("Saving, bounds: x{" + localMap4.minx + " - " + localMap4.maxx + "}, y{" + localMap4.miny + " - " + localMap4.maxy + "}, z{" + localMap4.minz + " - " + localMap4.maxz + "}"); + localMap4.save(new File(paramArrayOfString[2])); + Systemoutprintln("Done"); + } + catch (Exception localException9) + { + localException9.printStackTrace(); + } + } + else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-unpack"))) + { + if (paramArrayOfString.length < 3) + { + System.out.println(str4); + try { System.in.read(); } catch (Exception localException5) { + }return; + } + + Systemoutprintln("Loading"); + Map localMap5 = new Map(new File(paramArrayOfString[1])); + try { + FileWriter localFileWriter1 = new FileWriter(paramArrayOfString[2]); + Systemoutprintln("Saving"); + for (int k = localMap5.minz; k <= localMap5.maxz; k++) + { + Systemoutprintln("Z-level " + k); + for (m = localMap5.miny; m <= localMap5.maxy; m++) + for (i1 = localMap5.minx; i1 <= localMap5.maxx; i1++) + localFileWriter1.write("(" + i1 + "," + (1 + localMap5.maxy - m) + "," + k + ")=" + localMap5.contentAt(i1, m, k) + "\n"); + localFileWriter1.write("\n"); + } + localFileWriter1.flush(); + localFileWriter1.close(); + + Systemoutprintln("Done"); + } + catch (Exception localException10) + { + localException10.printStackTrace(); + } + } + else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-clean"))) + { + if (paramArrayOfString.length < 4) + { + System.out.println(str5); + try { System.in.read(); } catch (Exception localException6) { + }return; + } + + Map localMap6 = new Map(new File(paramArrayOfString[1]), true); + Map localMap7 = new Map(new File(paramArrayOfString[2])); + try + { + localMap7.saveReferencing(new File(paramArrayOfString[3]), localMap6); + Systemoutprintln("Done"); + } + catch (Exception localException11) + { + localException11.printStackTrace(); + } + } + else + { + System.out.println(str1); + System.out.println(str2); + System.out.println(str3); + System.out.println(str4); + System.out.println(str5); + System.out.println(str6); + try { + System.in.read(); } catch (Exception localException7) { } + } + } + } + } + + public static void Systemoutprintln(String paramString) { if (!silent) + System.out.println(paramString); } + + public static void Systemoutprint(String paramString) + { + if (!silent) + System.out.print(paramString); + } +} diff --git a/tools/mapmerge/Source/SavingThread.java b/tools/mapmerge/Source/SavingThread.java new file mode 100644 index 00000000000..24a3d7b04df --- /dev/null +++ b/tools/mapmerge/Source/SavingThread.java @@ -0,0 +1,37 @@ +class SavingThread extends Thread +{ + int z; + Map mymap; + boolean done; + int progress; + StringBuilder result; + + public SavingThread(int paramInt1, Map paramMap, int paramInt2) + { + this.z = paramInt1; + this.mymap = paramMap; + this.progress = 0; + this.done = false; + this.result = new StringBuilder(paramInt2); + } + + public void run() + { + this.result.append("(" + this.mymap.minx + "," + this.mymap.miny + "," + this.z + ") = {\"\r\n"); + + int i = (this.mymap.maxx - this.mymap.minx) * (this.mymap.maxy - this.mymap.miny) / 100; + int j = 0; + for (int k = this.mymap.miny; k <= this.mymap.maxy; k++) + { + for (int m = this.mymap.minx; m <= this.mymap.maxx; m++) + { + this.result.append(this.mymap.getIdFor(this.mymap.contentAt(m, k, this.z))); + j++; if (j >= i) { j = 0; this.progress += 1; } + } + this.result.append("\r\n"); + } + this.result.append("\"}\r\n"); + this.result.append("\r\n"); + this.done = true; + } +} diff --git a/tools/mapmerge/clean_map.bat b/tools/mapmerge/clean_map.bat new file mode 100644 index 00000000000..8e1c9273d53 --- /dev/null +++ b/tools/mapmerge/clean_map.bat @@ -0,0 +1,7 @@ +@echo off +cd ../../_maps/map_files/ +set /P MAPFILE=Please enter mapfile (relative to map_files folder): + +java -jar ../../tools/mapmerge/MapPatcher.jar -clean "%MAPFILE%.backup" "%MAPFILE%" "%MAPFILE%" + +pause \ No newline at end of file diff --git a/tools/mapmerge/clean_map_git.sh b/tools/mapmerge/clean_map_git.sh deleted file mode 100644 index 59ef079a5a1..00000000000 --- a/tools/mapmerge/clean_map_git.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -MAPFILE='cyberiad.dmm' - -git show HEAD:maps/$MAPFILE > tmp.dmm -java -jar MapPatcher.jar -clean tmp.dmm '../../maps/'$MAPFILE '../../maps/'$MAPFILE -rm tmp.dmm diff --git a/tools/mapmerge/install.txt b/tools/mapmerge/install.txt index d6f9a946ec9..6aeeecb98fb 100644 --- a/tools/mapmerge/install.txt +++ b/tools/mapmerge/install.txt @@ -8,7 +8,9 @@ Committing This will make sure in the new version of your map, no paths are needlessly changed, thus instead of 8000 lines changed you'll get 50 lines changed. This not only reduces size of your commit, it also makes it possible to get an overview of your map changes on the "files changed" page in your pull request. Merging -The easiest way to do merging is to install the merge driver. For this, open `Baystation12/.git/config` in a text editor, and paste the following lines to the end of it: +The easiest way to do merging is to install the merge driver. For this, you can just double-click "install_driver.bat" in the tools/mapmerge/ directory. + +Alternatively, open ParadiseSS13/.git/config in a text editor, and paste the following lines to the end of it: [merge "merge-dmm"] name = mapmerge driver diff --git a/tools/mapmerge/install_driver.bat b/tools/mapmerge/install_driver.bat new file mode 100644 index 00000000000..fa04dddff55 --- /dev/null +++ b/tools/mapmerge/install_driver.bat @@ -0,0 +1,7 @@ +@echo off +echo. >> ../../.git/config +echo [merge "merge-dmm"] >> ../../.git/config +echo name = mapmerge driver >> ../../.git/config +echo driver = ./tools/mapmerge/mapmerge.sh %O %A %B >> ../../.git/config +echo. >> ../../.git/config + diff --git a/tools/mapmerge/prepare_map.bat b/tools/mapmerge/prepare_map.bat new file mode 100644 index 00000000000..bfe1e6560e9 --- /dev/null +++ b/tools/mapmerge/prepare_map.bat @@ -0,0 +1,12 @@ +@echo off +cd ../../_maps/map_files/ + +for /R %%f in (*.dmm) do copy %%f "%%f.backup" + +cls +echo All dmm files in map_files directories have been backed up +echo Now you can make your changes... +echo --- +echo Remember to run clean_map.bat just before you commit your changes! +echo --- +pause